1/******/ (() => { // webpackBootstrap 2/******/ var __webpack_modules__ = ({ 3
vendor: 13,566 bytes, lines 4-292
4/***/ "./node_modules/@popperjs/core/lib/createPopper.js": 5/*!*********************************************************!*\ 6 !*** ./node_modules/@popperjs/core/lib/createPopper.js ***! 7 \*********************************************************/ 8/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 9 10"use strict"; 11__webpack_require__.r(__webpack_exports__); 12/* harmony export */ __webpack_require__.d(__webpack_exports__, { 13/* harmony export */ "popperGenerator": () => (/* binding */ popperGenerator), 14/* harmony export */ "createPopper": () => (/* binding */ createPopper), 15/* harmony export */ "detectOverflow": () => (/* reexport safe */ _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_13__["default"]) 16/* harmony export */ }); 17/* harmony import */ var _dom_utils_getCompositeRect_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./dom-utils/getCompositeRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js"); 18/* harmony import */ var _dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./dom-utils/getLayoutRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js"); 19/* harmony import */ var _dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dom-utils/listScrollParents.js */ "./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js"); 20/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./dom-utils/getOffsetParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js"); 21/* harmony import */ var _dom_utils_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./dom-utils/getComputedStyle.js */ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js"); 22/* harmony import */ var _utils_orderModifiers_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils/orderModifiers.js */ "./node_modules/@popperjs/core/lib/utils/orderModifiers.js"); 23/* harmony import */ var _utils_debounce_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./utils/debounce.js */ "./node_modules/@popperjs/core/lib/utils/debounce.js"); 24/* harmony import */ var _utils_validateModifiers_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils/validateModifiers.js */ "./node_modules/@popperjs/core/lib/utils/validateModifiers.js"); 25/* harmony import */ var _utils_uniqueBy_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./utils/uniqueBy.js */ "./node_modules/@popperjs/core/lib/utils/uniqueBy.js"); 26/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils/getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js"); 27/* harmony import */ var _utils_mergeByName_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils/mergeByName.js */ "./node_modules/@popperjs/core/lib/utils/mergeByName.js"); 28/* harmony import */ var _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./utils/detectOverflow.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js"); 29/* harmony import */ var _dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dom-utils/instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); 30/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45var INVALID_ELEMENT_ERROR = 'Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.'; 46var INFINITE_LOOP_ERROR = 'Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.'; 47var DEFAULT_OPTIONS = { 48 placement: 'bottom', 49 modifiers: [], 50 strategy: 'absolute' 51}; 52 53function areValidElements() { 54 for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { 55 args[_key] = arguments[_key]; 56 } 57 58 return !args.some(function (element) { 59 return !(element && typeof element.getBoundingClientRect === 'function'); 60 }); 61} 62 63function popperGenerator(generatorOptions) { 64 if (generatorOptions === void 0) { 65 generatorOptions = {}; 66 } 67 68 var _generatorOptions = generatorOptions, 69 _generatorOptions$def = _generatorOptions.defaultModifiers, 70 defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def, 71 _generatorOptions$def2 = _generatorOptions.defaultOptions, 72 defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2; 73 return function createPopper(reference, popper, options) { 74 if (options === void 0) { 75 options = defaultOptions; 76 } 77 78 var state = { 79 placement: 'bottom', 80 orderedModifiers: [], 81 options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions), 82 modifiersData: {}, 83 elements: { 84 reference: reference, 85 popper: popper 86 }, 87 attributes: {}, 88 styles: {} 89 }; 90 var effectCleanupFns = []; 91 var isDestroyed = false; 92 var instance = { 93 state: state, 94 setOptions: function setOptions(setOptionsAction) { 95 var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction; 96 cleanupModifierEffects(); 97 state.options = Object.assign({}, defaultOptions, state.options, options); 98 state.scrollParents = { 99 reference: (0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isElement)(reference) ? (0,_dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_1__["default"])(reference) : reference.contextElement ? (0,_dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_1__["default"])(reference.contextElement) : [], 100 popper: (0,_dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_1__["default"])(popper) 101 }; // Orders the modifiers based on their dependencies and `phase` 102 // properties 103 104 var orderedModifiers = (0,_utils_orderModifiers_js__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_utils_mergeByName_js__WEBPACK_IMPORTED_MODULE_3__["default"])([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers 105 106 state.orderedModifiers = orderedModifiers.filter(function (m) { 107 return m.enabled; 108 }); // Validate the provided modifiers so that the consumer will get warned 109 // if one of the modifiers is invalid for any reason 110 111 if (true) { 112 var modifiers = (0,_utils_uniqueBy_js__WEBPACK_IMPORTED_MODULE_4__["default"])([].concat(orderedModifiers, state.options.modifiers), function (_ref) { 113 var name = _ref.name; 114 return name; 115 }); 116 (0,_utils_validateModifiers_js__WEBPACK_IMPORTED_MODULE_5__["default"])(modifiers); 117 118 if ((0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_6__["default"])(state.options.placement) === _enums_js__WEBPACK_IMPORTED_MODULE_7__.auto) { 119 var flipModifier = state.orderedModifiers.find(function (_ref2) { 120 var name = _ref2.name; 121 return name === 'flip'; 122 }); 123 124 if (!flipModifier) { 125 console.error(['Popper: "auto" placements require the "flip" modifier be', 'present and enabled to work.'].join(' ')); 126 } 127 } 128 129 var _getComputedStyle = (0,_dom_utils_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_8__["default"])(popper), 130 marginTop = _getComputedStyle.marginTop, 131 marginRight = _getComputedStyle.marginRight, 132 marginBottom = _getComputedStyle.marginBottom, 133 marginLeft = _getComputedStyle.marginLeft; // We no longer take into account `margins` on the popper, and it can 134 // cause bugs with positioning, so we'll warn the consumer 135 136 137 if ([marginTop, marginRight, marginBottom, marginLeft].some(function (margin) { 138 return parseFloat(margin); 139 })) { 140 console.warn(['Popper: CSS "margin" styles cannot be used to apply padding', 'between the popper and its reference element or boundary.', 'To replicate margin, use the `offset` modifier, as well as', 'the `padding` option in the `preventOverflow` and `flip`', 'modifiers.'].join(' ')); 141 } 142 } 143 144 runModifierEffects(); 145 return instance.update(); 146 }, 147 // Sync update â it will always be executed, even if not necessary. This 148 // is useful for low frequency updates where sync behavior simplifies the 149 // logic. 150 // For high frequency updates (e.g. `resize` and `scroll` events), always 151 // prefer the async Popper#update method 152 forceUpdate: function forceUpdate() { 153 if (isDestroyed) { 154 return; 155 } 156 157 var _state$elements = state.elements, 158 reference = _state$elements.reference, 159 popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements 160 // anymore 161 162 if (!areValidElements(reference, popper)) { 163 if (true) { 164 console.error(INVALID_ELEMENT_ERROR); 165 } 166 167 return; 168 } // Store the reference and popper rects to be read by modifiers 169 170 171 state.rects = { 172 reference: (0,_dom_utils_getCompositeRect_js__WEBPACK_IMPORTED_MODULE_9__["default"])(reference, (0,_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_10__["default"])(popper), state.options.strategy === 'fixed'), 173 popper: (0,_dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_11__["default"])(popper) 174 }; // Modifiers have the ability to reset the current update cycle. The 175 // most common use case for this is the `flip` modifier changing the 176 // placement, which then needs to re-run all the modifiers, because the 177 // logic was previously ran for the previous placement and is therefore 178 // stale/incorrect 179 180 state.reset = false; 181 state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier 182 // is filled with the initial data specified by the modifier. This means 183 // it doesn't persist and is fresh on each update. 184 // To ensure persistent data, use `${name}#persistent` 185 186 state.orderedModifiers.forEach(function (modifier) { 187 return state.modifiersData[modifier.name] = Object.assign({}, modifier.data); 188 }); 189 var __debug_loops__ = 0; 190 191 for (var index = 0; index < state.orderedModifiers.length; index++) { 192 if (true) { 193 __debug_loops__ += 1; 194 195 if (__debug_loops__ > 100) { 196 console.error(INFINITE_LOOP_ERROR); 197 break; 198 } 199 } 200 201 if (state.reset === true) { 202 state.reset = false; 203 index = -1; 204 continue; 205 } 206 207 var _state$orderedModifie = state.orderedModifiers[index], 208 fn = _state$orderedModifie.fn, 209 _state$orderedModifie2 = _state$orderedModifie.options, 210 _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2, 211 name = _state$orderedModifie.name; 212 213 if (typeof fn === 'function') { 214 state = fn({ 215 state: state, 216 options: _options, 217 name: name, 218 instance: instance 219 }) || state; 220 } 221 } 222 }, 223 // Async and optimistically optimized update â it will not be executed if 224 // not necessary (debounced to run at most once-per-tick) 225 update: (0,_utils_debounce_js__WEBPACK_IMPORTED_MODULE_12__["default"])(function () { 226 return new Promise(function (resolve) { 227 instance.forceUpdate(); 228 resolve(state); 229 }); 230 }), 231 destroy: function destroy() { 232 cleanupModifierEffects(); 233 isDestroyed = true; 234 } 235 }; 236 237 if (!areValidElements(reference, popper)) { 238 if (true) { 239 console.error(INVALID_ELEMENT_ERROR); 240 } 241 242 return instance; 243 } 244 245 instance.setOptions(options).then(function (state) { 246 if (!isDestroyed && options.onFirstUpdate) { 247 options.onFirstUpdate(state); 248 } 249 }); // Modifiers have the ability to execute arbitrary code before the first 250 // update cycle runs. They will be executed in the same order as the update 251 // cycle. This is useful when a modifier adds some persistent data that 252 // other modifiers need to use, but the modifier is run after the dependent 253 // one. 254 255 function runModifierEffects() { 256 state.orderedModifiers.forEach(function (_ref3) { 257 var name = _ref3.name, 258 _ref3$options = _ref3.options, 259 options = _ref3$options === void 0 ? {} : _ref3$options, 260 effect = _ref3.effect; 261 262 if (typeof effect === 'function') { 263 var cleanupFn = effect({ 264 state: state, 265 name: name, 266 instance: instance, 267 options: options 268 }); 269 270 var noopFn = function noopFn() {}; 271 272 effectCleanupFns.push(cleanupFn || noopFn); 273 } 274 }); 275 } 276 277 function cleanupModifierEffects() { 278 effectCleanupFns.forEach(function (fn) { 279 return fn(); 280 }); 281 effectCleanupFns = []; 282 } 283 284 return instance; 285 }; 286} 287var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules 288 289 290 291/***/ }), 292
vendor: 1,418 bytes, lines 293-330
293/***/ "./node_modules/@popperjs/core/lib/dom-utils/contains.js": 294/*!***************************************************************!*\ 295 !*** ./node_modules/@popperjs/core/lib/dom-utils/contains.js ***! 296 \***************************************************************/ 297/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 298 299"use strict"; 300__webpack_require__.r(__webpack_exports__); 301/* harmony export */ __webpack_require__.d(__webpack_exports__, { 302/* harmony export */ "default": () => (/* binding */ contains) 303/* harmony export */ }); 304/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); 305 306function contains(parent, child) { 307 var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method 308 309 if (parent.contains(child)) { 310 return true; 311 } // then fallback to custom implementation with Shadow DOM support 312 else if (rootNode && (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isShadowRoot)(rootNode)) { 313 var next = child; 314 315 do { 316 if (next && parent.isSameNode(next)) { 317 return true; 318 } // $FlowFixMe[prop-missing]: need a better way to handle this... 319 320 321 next = next.parentNode || next.host; 322 } while (next); 323 } // Give up, the result is false 324 325 326 return false; 327} 328 329/***/ }), 330
vendor: 2,033 bytes, lines 331-382
331/***/ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js": 332/*!****************************************************************************!*\ 333 !*** ./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js ***! 334 \****************************************************************************/ 335/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 336 337"use strict"; 338__webpack_require__.r(__webpack_exports__); 339/* harmony export */ __webpack_require__.d(__webpack_exports__, { 340/* harmony export */ "default": () => (/* binding */ getBoundingClientRect) 341/* harmony export */ }); 342/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); 343/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/math.js */ "./node_modules/@popperjs/core/lib/utils/math.js"); 344 345 346function getBoundingClientRect(element, includeScale) { 347 if (includeScale === void 0) { 348 includeScale = false; 349 } 350 351 var rect = element.getBoundingClientRect(); 352 var scaleX = 1; 353 var scaleY = 1; 354 355 if ((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element) && includeScale) { 356 var offsetHeight = element.offsetHeight; 357 var offsetWidth = element.offsetWidth; // Do not attempt to divide by 0, otherwise we get `Infinity` as scale 358 // Fallback to 1 in case both values are `0` 359 360 if (offsetWidth > 0) { 361 scaleX = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_1__.round)(rect.width) / offsetWidth || 1; 362 } 363 364 if (offsetHeight > 0) { 365 scaleY = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_1__.round)(rect.height) / offsetHeight || 1; 366 } 367 } 368 369 return { 370 width: rect.width / scaleX, 371 height: rect.height / scaleY, 372 top: rect.top / scaleY, 373 right: rect.right / scaleX, 374 bottom: rect.bottom / scaleY, 375 left: rect.left / scaleX, 376 x: rect.left / scaleX, 377 y: rect.top / scaleY 378 }; 379} 380 381/***/ }), 382
vendor: 6,817 bytes, lines 383-480
383/***/ "./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js": 384/*!**********************************************************************!*\ 385 !*** ./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js ***! 386 \**********************************************************************/ 387/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 388 389"use strict"; 390__webpack_require__.r(__webpack_exports__); 391/* harmony export */ __webpack_require__.d(__webpack_exports__, { 392/* harmony export */ "default": () => (/* binding */ getClippingRect) 393/* harmony export */ }); 394/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); 395/* harmony import */ var _getViewportRect_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getViewportRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js"); 396/* harmony import */ var _getDocumentRect_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./getDocumentRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js"); 397/* harmony import */ var _listScrollParents_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./listScrollParents.js */ "./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js"); 398/* harmony import */ var _getOffsetParent_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./getOffsetParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js"); 399/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js"); 400/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./getComputedStyle.js */ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js"); 401/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); 402/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBoundingClientRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js"); 403/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./getParentNode.js */ "./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js"); 404/* harmony import */ var _contains_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./contains.js */ "./node_modules/@popperjs/core/lib/dom-utils/contains.js"); 405/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js"); 406/* harmony import */ var _utils_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/rectToClientRect.js */ "./node_modules/@popperjs/core/lib/utils/rectToClientRect.js"); 407/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../utils/math.js */ "./node_modules/@popperjs/core/lib/utils/math.js"); 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423function getInnerBoundingClientRect(element) { 424 var rect = (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element); 425 rect.top = rect.top + element.clientTop; 426 rect.left = rect.left + element.clientLeft; 427 rect.bottom = rect.top + element.clientHeight; 428 rect.right = rect.left + element.clientWidth; 429 rect.width = element.clientWidth; 430 rect.height = element.clientHeight; 431 rect.x = rect.left; 432 rect.y = rect.top; 433 return rect; 434} 435 436function getClientRectFromMixedType(element, clippingParent) { 437 return clippingParent === _enums_js__WEBPACK_IMPORTED_MODULE_1__.viewport ? (0,_utils_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_getViewportRect_js__WEBPACK_IMPORTED_MODULE_3__["default"])(element)) : (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isElement)(clippingParent) ? getInnerBoundingClientRect(clippingParent) : (0,_utils_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_getDocumentRect_js__WEBPACK_IMPORTED_MODULE_5__["default"])((0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_6__["default"])(element))); 438} // A "clipping parent" is an overflowable container with the characteristic of 439// clipping (or hiding) overflowing elements with a position different from 440// `initial` 441 442 443function getClippingParents(element) { 444 var clippingParents = (0,_listScrollParents_js__WEBPACK_IMPORTED_MODULE_7__["default"])((0,_getParentNode_js__WEBPACK_IMPORTED_MODULE_8__["default"])(element)); 445 var canEscapeClipping = ['absolute', 'fixed'].indexOf((0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_9__["default"])(element).position) >= 0; 446 var clipperElement = canEscapeClipping && (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isHTMLElement)(element) ? (0,_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_10__["default"])(element) : element; 447 448 if (!(0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isElement)(clipperElement)) { 449 return []; 450 } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414 451 452 453 return clippingParents.filter(function (clippingParent) { 454 return (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isElement)(clippingParent) && (0,_contains_js__WEBPACK_IMPORTED_MODULE_11__["default"])(clippingParent, clipperElement) && (0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_12__["default"])(clippingParent) !== 'body'; 455 }); 456} // Gets the maximum area that the element is visible in due to any number of 457// clipping parents 458 459 460function getClippingRect(element, boundary, rootBoundary) { 461 var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary); 462 var clippingParents = [].concat(mainClippingParents, [rootBoundary]); 463 var firstClippingParent = clippingParents[0]; 464 var clippingRect = clippingParents.reduce(function (accRect, clippingParent) { 465 var rect = getClientRectFromMixedType(element, clippingParent); 466 accRect.top = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_13__.max)(rect.top, accRect.top); 467 accRect.right = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_13__.min)(rect.right, accRect.right); 468 accRect.bottom = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_13__.min)(rect.bottom, accRect.bottom); 469 accRect.left = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_13__.max)(rect.left, accRect.left); 470 return accRect; 471 }, getClientRectFromMixedType(element, firstClippingParent)); 472 clippingRect.width = clippingRect.right - clippingRect.left; 473 clippingRect.height = clippingRect.bottom - clippingRect.top; 474 clippingRect.x = clippingRect.left; 475 clippingRect.y = clippingRect.top; 476 return clippingRect; 477} 478 479/***/ }), 480
vendor: 4,343 bytes, lines 481-560
481/***/ "./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js": 482/*!***********************************************************************!*\ 483 !*** ./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js ***! 484 \***********************************************************************/ 485/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 486 487"use strict"; 488__webpack_require__.r(__webpack_exports__); 489/* harmony export */ __webpack_require__.d(__webpack_exports__, { 490/* harmony export */ "default": () => (/* binding */ getCompositeRect) 491/* harmony export */ }); 492/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getBoundingClientRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js"); 493/* harmony import */ var _getNodeScroll_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./getNodeScroll.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js"); 494/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js"); 495/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); 496/* harmony import */ var _getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./getWindowScrollBarX.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js"); 497/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js"); 498/* harmony import */ var _isScrollParent_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./isScrollParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js"); 499/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/math.js */ "./node_modules/@popperjs/core/lib/utils/math.js"); 500 501 502 503 504 505 506 507 508 509function isElementScaled(element) { 510 var rect = element.getBoundingClientRect(); 511 var scaleX = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_0__.round)(rect.width) / element.offsetWidth || 1; 512 var scaleY = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_0__.round)(rect.height) / element.offsetHeight || 1; 513 return scaleX !== 1 || scaleY !== 1; 514} // Returns the composite rect of an element relative to its offsetParent. 515// Composite means it takes into account transforms as well as layout. 516 517 518function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) { 519 if (isFixed === void 0) { 520 isFixed = false; 521 } 522 523 var isOffsetParentAnElement = (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(offsetParent); 524 var offsetParentIsScaled = (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(offsetParent) && isElementScaled(offsetParent); 525 var documentElement = (0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(offsetParent); 526 var rect = (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_3__["default"])(elementOrVirtualElement, offsetParentIsScaled); 527 var scroll = { 528 scrollLeft: 0, 529 scrollTop: 0 530 }; 531 var offsets = { 532 x: 0, 533 y: 0 534 }; 535 536 if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) { 537 if ((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_4__["default"])(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078 538 (0,_isScrollParent_js__WEBPACK_IMPORTED_MODULE_5__["default"])(documentElement)) { 539 scroll = (0,_getNodeScroll_js__WEBPACK_IMPORTED_MODULE_6__["default"])(offsetParent); 540 } 541 542 if ((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(offsetParent)) { 543 offsets = (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_3__["default"])(offsetParent, true); 544 offsets.x += offsetParent.clientLeft; 545 offsets.y += offsetParent.clientTop; 546 } else if (documentElement) { 547 offsets.x = (0,_getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_7__["default"])(documentElement); 548 } 549 } 550 551 return { 552 x: rect.left + scroll.scrollLeft - offsets.x, 553 y: rect.top + scroll.scrollTop - offsets.y, 554 width: rect.width, 555 height: rect.height 556 }; 557} 558 559/***/ }), 560
vendor: 934 bytes, lines 561-579
561/***/ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js": 562/*!***********************************************************************!*\ 563 !*** ./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js ***! 564 \***********************************************************************/ 565/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 566 567"use strict"; 568__webpack_require__.r(__webpack_exports__); 569/* harmony export */ __webpack_require__.d(__webpack_exports__, { 570/* harmony export */ "default": () => (/* binding */ getComputedStyle) 571/* harmony export */ }); 572/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js"); 573 574function getComputedStyle(element) { 575 return (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element).getComputedStyle(element); 576} 577 578/***/ }), 579
vendor: 1,105 bytes, lines 580-600
580/***/ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js": 581/*!*************************************************************************!*\ 582 !*** ./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js ***! 583 \*************************************************************************/ 584/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 585 586"use strict"; 587__webpack_require__.r(__webpack_exports__); 588/* harmony export */ __webpack_require__.d(__webpack_exports__, { 589/* harmony export */ "default": () => (/* binding */ getDocumentElement) 590/* harmony export */ }); 591/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); 592 593function getDocumentElement(element) { 594 // $FlowFixMe[incompatible-return]: assume body is always available 595 return (((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isElement)(element) ? element.ownerDocument : // $FlowFixMe[prop-missing] 596 element.document) || window.document).documentElement; 597} 598 599/***/ }), 600
vendor: 2,858 bytes, lines 601-648
601/***/ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js": 602/*!**********************************************************************!*\ 603 !*** ./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js ***! 604 \**********************************************************************/ 605/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 606 607"use strict"; 608__webpack_require__.r(__webpack_exports__); 609/* harmony export */ __webpack_require__.d(__webpack_exports__, { 610/* harmony export */ "default": () => (/* binding */ getDocumentRect) 611/* harmony export */ }); 612/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js"); 613/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./getComputedStyle.js */ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js"); 614/* harmony import */ var _getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getWindowScrollBarX.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js"); 615/* harmony import */ var _getWindowScroll_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getWindowScroll.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js"); 616/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/math.js */ "./node_modules/@popperjs/core/lib/utils/math.js"); 617 618 619 620 621 // Gets the entire size of the scrollable document area, even extending outside 622// of the `<html>` and `<body>` rect bounds if horizontally scrollable 623 624function getDocumentRect(element) { 625 var _element$ownerDocumen; 626 627 var html = (0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element); 628 var winScroll = (0,_getWindowScroll_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element); 629 var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body; 630 var width = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_2__.max)(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0); 631 var height = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_2__.max)(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0); 632 var x = -winScroll.scrollLeft + (0,_getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_3__["default"])(element); 633 var y = -winScroll.scrollTop; 634 635 if ((0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_4__["default"])(body || html).direction === 'rtl') { 636 x += (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_2__.max)(html.clientWidth, body ? body.clientWidth : 0) - width; 637 } 638 639 return { 640 width: width, 641 height: height, 642 x: x, 643 y: y 644 }; 645} 646 647/***/ }), 648
vendor: 766 bytes, lines 649-668
649/***/ "./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js": 650/*!***************************************************************************!*\ 651 !*** ./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js ***! 652 \***************************************************************************/ 653/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 654 655"use strict"; 656__webpack_require__.r(__webpack_exports__); 657/* harmony export */ __webpack_require__.d(__webpack_exports__, { 658/* harmony export */ "default": () => (/* binding */ getHTMLElementScroll) 659/* harmony export */ }); 660function getHTMLElementScroll(element) { 661 return { 662 scrollLeft: element.scrollLeft, 663 scrollTop: element.scrollTop 664 }; 665} 666 667/***/ }), 668
vendor: 1,550 bytes, lines 669-708
669/***/ "./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js": 670/*!********************************************************************!*\ 671 !*** ./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js ***! 672 \********************************************************************/ 673/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 674 675"use strict"; 676__webpack_require__.r(__webpack_exports__); 677/* harmony export */ __webpack_require__.d(__webpack_exports__, { 678/* harmony export */ "default": () => (/* binding */ getLayoutRect) 679/* harmony export */ }); 680/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBoundingClientRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js"); 681 // Returns the layout rect of an element relative to its offsetParent. Layout 682// means it doesn't take into account transforms. 683 684function getLayoutRect(element) { 685 var clientRect = (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element); // Use the clientRect sizes if it's not been transformed. 686 // Fixes https://github.com/popperjs/popper-core/issues/1223 687 688 var width = element.offsetWidth; 689 var height = element.offsetHeight; 690 691 if (Math.abs(clientRect.width - width) <= 1) { 692 width = clientRect.width; 693 } 694 695 if (Math.abs(clientRect.height - height) <= 1) { 696 height = clientRect.height; 697 } 698 699 return { 700 x: element.offsetLeft, 701 y: element.offsetTop, 702 width: width, 703 height: height 704 }; 705} 706 707/***/ }), 708
vendor: 693 bytes, lines 709-725
709/***/ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js": 710/*!******************************************************************!*\ 711 !*** ./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js ***! 712 \******************************************************************/ 713/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 714 715"use strict"; 716__webpack_require__.r(__webpack_exports__); 717/* harmony export */ __webpack_require__.d(__webpack_exports__, { 718/* harmony export */ "default": () => (/* binding */ getNodeName) 719/* harmony export */ }); 720function getNodeName(element) { 721 return element ? (element.nodeName || '').toLowerCase() : null; 722} 723 724/***/ }), 725
vendor: 1,724 bytes, lines 726-754
726/***/ "./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js": 727/*!********************************************************************!*\ 728 !*** ./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js ***! 729 \********************************************************************/ 730/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 731 732"use strict"; 733__webpack_require__.r(__webpack_exports__); 734/* harmony export */ __webpack_require__.d(__webpack_exports__, { 735/* harmony export */ "default": () => (/* binding */ getNodeScroll) 736/* harmony export */ }); 737/* harmony import */ var _getWindowScroll_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getWindowScroll.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js"); 738/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js"); 739/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); 740/* harmony import */ var _getHTMLElementScroll_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getHTMLElementScroll.js */ "./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js"); 741 742 743 744 745function getNodeScroll(node) { 746 if (node === (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(node) || !(0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(node)) { 747 return (0,_getWindowScroll_js__WEBPACK_IMPORTED_MODULE_2__["default"])(node); 748 } else { 749 return (0,_getHTMLElementScroll_js__WEBPACK_IMPORTED_MODULE_3__["default"])(node); 750 } 751} 752 753/***/ }), 754
vendor: 4,605 bytes, lines 755-838
755/***/ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js": 756/*!**********************************************************************!*\ 757 !*** ./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js ***! 758 \**********************************************************************/ 759/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 760 761"use strict"; 762__webpack_require__.r(__webpack_exports__); 763/* harmony export */ __webpack_require__.d(__webpack_exports__, { 764/* harmony export */ "default": () => (/* binding */ getOffsetParent) 765/* harmony export */ }); 766/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js"); 767/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js"); 768/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getComputedStyle.js */ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js"); 769/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); 770/* harmony import */ var _isTableElement_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./isTableElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js"); 771/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getParentNode.js */ "./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js"); 772 773 774 775 776 777 778 779function getTrueOffsetParent(element) { 780 if (!(0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element) || // https://github.com/popperjs/popper-core/issues/837 781 (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element).position === 'fixed') { 782 return null; 783 } 784 785 return element.offsetParent; 786} // `.offsetParent` reports `null` for fixed elements, while absolute elements 787// return the containing block 788 789 790function getContainingBlock(element) { 791 var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1; 792 var isIE = navigator.userAgent.indexOf('Trident') !== -1; 793 794 if (isIE && (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element)) { 795 // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport 796 var elementCss = (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element); 797 798 if (elementCss.position === 'fixed') { 799 return null; 800 } 801 } 802 803 var currentNode = (0,_getParentNode_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element); 804 805 while ((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(currentNode) && ['html', 'body'].indexOf((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_3__["default"])(currentNode)) < 0) { 806 var css = (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__["default"])(currentNode); // This is non-exhaustive but covers the most common CSS properties that 807 // create a containing block. 808 // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block 809 810 if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') { 811 return currentNode; 812 } else { 813 currentNode = currentNode.parentNode; 814 } 815 } 816 817 return null; 818} // Gets the closest ancestor positioned element. Handles some edge cases, 819// such as table ancestors and cross browser bugs. 820 821 822function getOffsetParent(element) { 823 var window = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_4__["default"])(element); 824 var offsetParent = getTrueOffsetParent(element); 825 826 while (offsetParent && (0,_isTableElement_js__WEBPACK_IMPORTED_MODULE_5__["default"])(offsetParent) && (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__["default"])(offsetParent).position === 'static') { 827 offsetParent = getTrueOffsetParent(offsetParent); 828 } 829 830 if (offsetParent && ((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_3__["default"])(offsetParent) === 'html' || (0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_3__["default"])(offsetParent) === 'body' && (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__["default"])(offsetParent).position === 'static')) { 831 return window; 832 } 833 834 return offsetParent || getContainingBlock(element) || window; 835} 836 837/***/ }), 838
vendor: 1,900 bytes, lines 839-874
839/***/ "./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js": 840/*!********************************************************************!*\ 841 !*** ./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js ***! 842 \********************************************************************/ 843/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 844 845"use strict"; 846__webpack_require__.r(__webpack_exports__); 847/* harmony export */ __webpack_require__.d(__webpack_exports__, { 848/* harmony export */ "default": () => (/* binding */ getParentNode) 849/* harmony export */ }); 850/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js"); 851/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js"); 852/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); 853 854 855 856function getParentNode(element) { 857 if ((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element) === 'html') { 858 return element; 859 } 860 861 return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle 862 // $FlowFixMe[incompatible-return] 863 // $FlowFixMe[prop-missing] 864 element.assignedSlot || // step into the shadow DOM of the parent of a slotted node 865 element.parentNode || ( // DOM Element detected 866 (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isShadowRoot)(element) ? element.host : null) || // ShadowRoot detected 867 // $FlowFixMe[incompatible-call]: HTMLElement is a Node 868 (0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element) // fallback 869 870 ); 871} 872 873/***/ }), 874
vendor: 1,878 bytes, lines 875-908
875/***/ "./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js": 876/*!**********************************************************************!*\ 877 !*** ./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js ***! 878 \**********************************************************************/ 879/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 880 881"use strict"; 882__webpack_require__.r(__webpack_exports__); 883/* harmony export */ __webpack_require__.d(__webpack_exports__, { 884/* harmony export */ "default": () => (/* binding */ getScrollParent) 885/* harmony export */ }); 886/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getParentNode.js */ "./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js"); 887/* harmony import */ var _isScrollParent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isScrollParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js"); 888/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js"); 889/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); 890 891 892 893 894function getScrollParent(node) { 895 if (['html', 'body', '#document'].indexOf((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_0__["default"])(node)) >= 0) { 896 // $FlowFixMe[incompatible-return]: assume body is always available 897 return node.ownerDocument.body; 898 } 899 900 if ((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(node) && (0,_isScrollParent_js__WEBPACK_IMPORTED_MODULE_2__["default"])(node)) { 901 return node; 902 } 903 904 return getScrollParent((0,_getParentNode_js__WEBPACK_IMPORTED_MODULE_3__["default"])(node)); 905} 906 907/***/ }), 908
vendor: 2,757 bytes, lines 909-965
909/***/ "./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js": 910/*!**********************************************************************!*\ 911 !*** ./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js ***! 912 \**********************************************************************/ 913/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 914 915"use strict"; 916__webpack_require__.r(__webpack_exports__); 917/* harmony export */ __webpack_require__.d(__webpack_exports__, { 918/* harmony export */ "default": () => (/* binding */ getViewportRect) 919/* harmony export */ }); 920/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js"); 921/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js"); 922/* harmony import */ var _getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getWindowScrollBarX.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js"); 923 924 925 926function getViewportRect(element) { 927 var win = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element); 928 var html = (0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element); 929 var visualViewport = win.visualViewport; 930 var width = html.clientWidth; 931 var height = html.clientHeight; 932 var x = 0; 933 var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper 934 // can be obscured underneath it. 935 // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even 936 // if it isn't open, so if this isn't available, the popper will be detected 937 // to overflow the bottom of the screen too early. 938 939 if (visualViewport) { 940 width = visualViewport.width; 941 height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently) 942 // In Chrome, it returns a value very close to 0 (+/-) but contains rounding 943 // errors due to floating point numbers, so we need to check precision. 944 // Safari returns a number <= 0, usually < -1 when pinch-zoomed 945 // Feature detection fails in mobile emulation mode in Chrome. 946 // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) < 947 // 0.001 948 // Fallback here: "Not Safari" userAgent 949 950 if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) { 951 x = visualViewport.offsetLeft; 952 y = visualViewport.offsetTop; 953 } 954 } 955 956 return { 957 width: width, 958 height: height, 959 x: x + (0,_getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element), 960 y: y 961 }; 962} 963 964/***/ }), 965
vendor: 842 bytes, lines 966-991
966/***/ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js": 967/*!****************************************************************!*\ 968 !*** ./node_modules/@popperjs/core/lib/dom-utils/getWindow.js ***! 969 \****************************************************************/ 970/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 971 972"use strict"; 973__webpack_require__.r(__webpack_exports__); 974/* harmony export */ __webpack_require__.d(__webpack_exports__, { 975/* harmony export */ "default": () => (/* binding */ getWindow) 976/* harmony export */ }); 977function getWindow(node) { 978 if (node == null) { 979 return window; 980 } 981 982 if (node.toString() !== '[object Window]') { 983 var ownerDocument = node.ownerDocument; 984 return ownerDocument ? ownerDocument.defaultView || window : window; 985 } 986 987 return node; 988} 989 990/***/ }), 991
vendor: 1,039 bytes, lines 992-1016
992/***/ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js": 993/*!**********************************************************************!*\ 994 !*** ./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js ***! 995 \**********************************************************************/ 996/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 997 998"use strict"; 999__webpack_require__.r(__webpack_exports__); 1000/* harmony export */ __webpack_require__.d(__webpack_exports__, { 1001/* harmony export */ "default": () => (/* binding */ getWindowScroll) 1002/* harmony export */ }); 1003/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js"); 1004 1005function getWindowScroll(node) { 1006 var win = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(node); 1007 var scrollLeft = win.pageXOffset; 1008 var scrollTop = win.pageYOffset; 1009 return { 1010 scrollLeft: scrollLeft, 1011 scrollTop: scrollTop 1012 }; 1013} 1014 1015/***/ }), 1016
vendor: 1,913 bytes, lines 1017-1046
1017/***/ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js": 1018/*!**************************************************************************!*\ 1019 !*** ./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js ***! 1020 \**************************************************************************/ 1021/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 1022 1023"use strict"; 1024__webpack_require__.r(__webpack_exports__); 1025/* harmony export */ __webpack_require__.d(__webpack_exports__, { 1026/* harmony export */ "default": () => (/* binding */ getWindowScrollBarX) 1027/* harmony export */ }); 1028/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBoundingClientRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js"); 1029/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js"); 1030/* harmony import */ var _getWindowScroll_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getWindowScroll.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js"); 1031 1032 1033 1034function getWindowScrollBarX(element) { 1035 // If <html> has a CSS width greater than the viewport, then this will be 1036 // incorrect for RTL. 1037 // Popper 1 is broken in this case and never had a bug report so let's assume 1038 // it's not an issue. I don't think anyone ever specifies width on <html> 1039 // anyway. 1040 // Browsers where the left scrollbar doesn't cause an issue report `0` for 1041 // this (e.g. Edge 2019, IE11, Safari) 1042 return (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element)).left + (0,_getWindowScroll_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element).scrollLeft; 1043} 1044 1045/***/ }), 1046
vendor: 1,591 bytes, lines 1047-1086
1047/***/ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js": 1048/*!*****************************************************************!*\ 1049 !*** ./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js ***! 1050 \*****************************************************************/ 1051/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 1052 1053"use strict"; 1054__webpack_require__.r(__webpack_exports__); 1055/* harmony export */ __webpack_require__.d(__webpack_exports__, { 1056/* harmony export */ "isElement": () => (/* binding */ isElement), 1057/* harmony export */ "isHTMLElement": () => (/* binding */ isHTMLElement), 1058/* harmony export */ "isShadowRoot": () => (/* binding */ isShadowRoot) 1059/* harmony export */ }); 1060/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js"); 1061 1062 1063function isElement(node) { 1064 var OwnElement = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(node).Element; 1065 return node instanceof OwnElement || node instanceof Element; 1066} 1067 1068function isHTMLElement(node) { 1069 var OwnElement = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(node).HTMLElement; 1070 return node instanceof OwnElement || node instanceof HTMLElement; 1071} 1072 1073function isShadowRoot(node) { 1074 // IE 11 has no ShadowRoot 1075 if (typeof ShadowRoot === 'undefined') { 1076 return false; 1077 } 1078 1079 var OwnElement = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(node).ShadowRoot; 1080 return node instanceof OwnElement || node instanceof ShadowRoot; 1081} 1082 1083 1084 1085/***/ }), 1086
vendor: 1,223 bytes, lines 1087-1111
1087/***/ "./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js": 1088/*!*********************************************************************!*\ 1089 !*** ./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js ***! 1090 \*********************************************************************/ 1091/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 1092 1093"use strict"; 1094__webpack_require__.r(__webpack_exports__); 1095/* harmony export */ __webpack_require__.d(__webpack_exports__, { 1096/* harmony export */ "default": () => (/* binding */ isScrollParent) 1097/* harmony export */ }); 1098/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getComputedStyle.js */ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js"); 1099 1100function isScrollParent(element) { 1101 // Firefox wants us to check `-x` and `-y` variations as well 1102 var _getComputedStyle = (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element), 1103 overflow = _getComputedStyle.overflow, 1104 overflowX = _getComputedStyle.overflowX, 1105 overflowY = _getComputedStyle.overflowY; 1106 1107 return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX); 1108} 1109 1110/***/ }), 1111
vendor: 940 bytes, lines 1112-1130
1112/***/ "./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js": 1113/*!*********************************************************************!*\ 1114 !*** ./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js ***! 1115 \*********************************************************************/ 1116/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 1117 1118"use strict"; 1119__webpack_require__.r(__webpack_exports__); 1120/* harmony export */ __webpack_require__.d(__webpack_exports__, { 1121/* harmony export */ "default": () => (/* binding */ isTableElement) 1122/* harmony export */ }); 1123/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js"); 1124 1125function isTableElement(element) { 1126 return ['table', 'td', 'th'].indexOf((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element)) >= 0; 1127} 1128 1129/***/ }), 1130
vendor: 2,529 bytes, lines 1131-1174
1131/***/ "./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js": 1132/*!************************************************************************!*\ 1133 !*** ./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js ***! 1134 \************************************************************************/ 1135/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 1136 1137"use strict"; 1138__webpack_require__.r(__webpack_exports__); 1139/* harmony export */ __webpack_require__.d(__webpack_exports__, { 1140/* harmony export */ "default": () => (/* binding */ listScrollParents) 1141/* harmony export */ }); 1142/* harmony import */ var _getScrollParent_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getScrollParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js"); 1143/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getParentNode.js */ "./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js"); 1144/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js"); 1145/* harmony import */ var _isScrollParent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isScrollParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js"); 1146 1147 1148 1149 1150/* 1151given a DOM element, return the list of all scroll parents, up the list of ancesors 1152until we get to the top window object. This list is what we attach scroll listeners 1153to, because if any of these parent elements scroll, we'll need to re-calculate the 1154reference element's position. 1155*/ 1156 1157function listScrollParents(element, list) { 1158 var _element$ownerDocumen; 1159 1160 if (list === void 0) { 1161 list = []; 1162 } 1163 1164 var scrollParent = (0,_getScrollParent_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element); 1165 var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body); 1166 var win = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_1__["default"])(scrollParent); 1167 var target = isBody ? [win].concat(win.visualViewport || [], (0,_isScrollParent_js__WEBPACK_IMPORTED_MODULE_2__["default"])(scrollParent) ? scrollParent : []) : scrollParent; 1168 var updatedList = list.concat(target); 1169 return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here 1170 updatedList.concat(listScrollParents((0,_getParentNode_js__WEBPACK_IMPORTED_MODULE_3__["default"])(target))); 1171} 1172 1173/***/ }), 1174
vendor: 3,246 bytes, lines 1175-1242
1175/***/ "./node_modules/@popperjs/core/lib/enums.js": 1176/*!**************************************************!*\ 1177 !*** ./node_modules/@popperjs/core/lib/enums.js ***! 1178 \**************************************************/ 1179/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 1180 1181"use strict"; 1182__webpack_require__.r(__webpack_exports__); 1183/* harmony export */ __webpack_require__.d(__webpack_exports__, { 1184/* harmony export */ "top": () => (/* binding */ top), 1185/* harmony export */ "bottom": () => (/* binding */ bottom), 1186/* harmony export */ "right": () => (/* binding */ right), 1187/* harmony export */ "left": () => (/* binding */ left), 1188/* harmony export */ "auto": () => (/* binding */ auto), 1189/* harmony export */ "basePlacements": () => (/* binding */ basePlacements), 1190/* harmony export */ "start": () => (/* binding */ start), 1191/* harmony export */ "end": () => (/* binding */ end), 1192/* harmony export */ "clippingParents": () => (/* binding */ clippingParents), 1193/* harmony export */ "viewport": () => (/* binding */ viewport), 1194/* harmony export */ "popper": () => (/* binding */ popper), 1195/* harmony export */ "reference": () => (/* binding */ reference), 1196/* harmony export */ "variationPlacements": () => (/* binding */ variationPlacements), 1197/* harmony export */ "placements": () => (/* binding */ placements), 1198/* harmony export */ "beforeRead": () => (/* binding */ beforeRead), 1199/* harmony export */ "read": () => (/* binding */ read), 1200/* harmony export */ "afterRead": () => (/* binding */ afterRead), 1201/* harmony export */ "beforeMain": () => (/* binding */ beforeMain), 1202/* harmony export */ "main": () => (/* binding */ main), 1203/* harmony export */ "afterMain": () => (/* binding */ afterMain), 1204/* harmony export */ "beforeWrite": () => (/* binding */ beforeWrite), 1205/* harmony export */ "write": () => (/* binding */ write), 1206/* harmony export */ "afterWrite": () => (/* binding */ afterWrite), 1207/* harmony export */ "modifierPhases": () => (/* binding */ modifierPhases) 1208/* harmony export */ }); 1209var top = 'top'; 1210var bottom = 'bottom'; 1211var right = 'right'; 1212var left = 'left'; 1213var auto = 'auto'; 1214var basePlacements = [top, bottom, right, left]; 1215var start = 'start'; 1216var end = 'end'; 1217var clippingParents = 'clippingParents'; 1218var viewport = 'viewport'; 1219var popper = 'popper'; 1220var reference = 'reference'; 1221var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) { 1222 return acc.concat([placement + "-" + start, placement + "-" + end]); 1223}, []); 1224var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) { 1225 return acc.concat([placement, placement + "-" + start, placement + "-" + end]); 1226}, []); // modifiers that need to read the DOM 1227 1228var beforeRead = 'beforeRead'; 1229var read = 'read'; 1230var afterRead = 'afterRead'; // pure-logic modifiers 1231 1232var beforeMain = 'beforeMain'; 1233var main = 'main'; 1234var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state) 1235 1236var beforeWrite = 'beforeWrite'; 1237var write = 'write'; 1238var afterWrite = 'afterWrite'; 1239var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite]; 1240 1241/***/ }), 1242
vendor: 6,098 bytes, lines 1243-1307
1243/***/ "./node_modules/@popperjs/core/lib/index.js": 1244/*!**************************************************!*\ 1245 !*** ./node_modules/@popperjs/core/lib/index.js ***! 1246 \**************************************************/ 1247/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 1248 1249"use strict"; 1250__webpack_require__.r(__webpack_exports__); 1251/* harmony export */ __webpack_require__.d(__webpack_exports__, { 1252/* harmony export */ "afterMain": () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.afterMain), 1253/* harmony export */ "afterRead": () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.afterRead), 1254/* harmony export */ "afterWrite": () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.afterWrite), 1255/* harmony export */ "auto": () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.auto), 1256/* harmony export */ "basePlacements": () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.basePlacements), 1257/* harmony export */ "beforeMain": () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.beforeMain), 1258/* harmony export */ "beforeRead": () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.beforeRead), 1259/* harmony export */ "beforeWrite": () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.beforeWrite), 1260/* harmony export */ "bottom": () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.bottom), 1261/* harmony export */ "clippingParents": () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.clippingParents), 1262/* harmony export */ "end": () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.end), 1263/* harmony export */ "left": () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.left), 1264/* harmony export */ "main": () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.main), 1265/* harmony export */ "modifierPhases": () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.modifierPhases), 1266/* harmony export */ "placements": () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.placements), 1267/* harmony export */ "popper": () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper), 1268/* harmony export */ "read": () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.read), 1269/* harmony export */ "reference": () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.reference), 1270/* harmony export */ "right": () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.right), 1271/* harmony export */ "start": () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.start), 1272/* harmony export */ "top": () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.top), 1273/* harmony export */ "variationPlacements": () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.variationPlacements), 1274/* harmony export */ "viewport": () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.viewport), 1275/* harmony export */ "write": () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.write), 1276/* harmony export */ "applyStyles": () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.applyStyles), 1277/* harmony export */ "arrow": () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.arrow), 1278/* harmony export */ "computeStyles": () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.computeStyles), 1279/* harmony export */ "eventListeners": () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.eventListeners), 1280/* harmony export */ "flip": () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.flip), 1281/* harmony export */ "hide": () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.hide), 1282/* harmony export */ "offset": () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.offset), 1283/* harmony export */ "popperOffsets": () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.popperOffsets), 1284/* harmony export */ "preventOverflow": () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.preventOverflow), 1285/* harmony export */ "popperGenerator": () => (/* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_2__.popperGenerator), 1286/* harmony export */ "detectOverflow": () => (/* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_3__["default"]), 1287/* harmony export */ "createPopperBase": () => (/* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_2__.createPopper), 1288/* harmony export */ "createPopper": () => (/* reexport safe */ _popper_js__WEBPACK_IMPORTED_MODULE_4__.createPopper), 1289/* harmony export */ "createPopperLite": () => (/* reexport safe */ _popper_lite_js__WEBPACK_IMPORTED_MODULE_5__.createPopper) 1290/* harmony export */ }); 1291/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); 1292/* harmony import */ var _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifiers/index.js */ "./node_modules/@popperjs/core/lib/modifiers/index.js"); 1293/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./createPopper.js */ "./node_modules/@popperjs/core/lib/createPopper.js"); 1294/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./createPopper.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js"); 1295/* harmony import */ var _popper_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./popper.js */ "./node_modules/@popperjs/core/lib/popper.js"); 1296/* harmony import */ var _popper_lite_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./popper-lite.js */ "./node_modules/@popperjs/core/lib/popper-lite.js"); 1297 1298 // eslint-disable-next-line import/no-unused-modules 1299 1300 // eslint-disable-next-line import/no-unused-modules 1301 1302 // eslint-disable-next-line import/no-unused-modules 1303 1304 1305 1306/***/ }), 1307
vendor: 3,689 bytes, lines 1308-1407
1308/***/ "./node_modules/@popperjs/core/lib/modifiers/applyStyles.js": 1309/*!******************************************************************!*\ 1310 !*** ./node_modules/@popperjs/core/lib/modifiers/applyStyles.js ***! 1311 \******************************************************************/ 1312/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 1313 1314"use strict"; 1315__webpack_require__.r(__webpack_exports__); 1316/* harmony export */ __webpack_require__.d(__webpack_exports__, { 1317/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 1318/* harmony export */ }); 1319/* harmony import */ var _dom_utils_getNodeName_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dom-utils/getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js"); 1320/* harmony import */ var _dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dom-utils/instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); 1321 1322 // This modifier takes the styles prepared by the `computeStyles` modifier 1323// and applies them to the HTMLElements such as popper and arrow 1324 1325function applyStyles(_ref) { 1326 var state = _ref.state; 1327 Object.keys(state.elements).forEach(function (name) { 1328 var style = state.styles[name] || {}; 1329 var attributes = state.attributes[name] || {}; 1330 var element = state.elements[name]; // arrow is optional + virtual elements 1331 1332 if (!(0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element) || !(0,_dom_utils_getNodeName_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element)) { 1333 return; 1334 } // Flow doesn't support to extend this property, but it's the most 1335 // effective way to apply styles to an HTMLElement 1336 // $FlowFixMe[cannot-write] 1337 1338 1339 Object.assign(element.style, style); 1340 Object.keys(attributes).forEach(function (name) { 1341 var value = attributes[name]; 1342 1343 if (value === false) { 1344 element.removeAttribute(name); 1345 } else { 1346 element.setAttribute(name, value === true ? '' : value); 1347 } 1348 }); 1349 }); 1350} 1351 1352function effect(_ref2) { 1353 var state = _ref2.state; 1354 var initialStyles = { 1355 popper: { 1356 position: state.options.strategy, 1357 left: '0', 1358 top: '0', 1359 margin: '0' 1360 }, 1361 arrow: { 1362 position: 'absolute' 1363 }, 1364 reference: {} 1365 }; 1366 Object.assign(state.elements.popper.style, initialStyles.popper); 1367 state.styles = initialStyles; 1368 1369 if (state.elements.arrow) { 1370 Object.assign(state.elements.arrow.style, initialStyles.arrow); 1371 } 1372 1373 return function () { 1374 Object.keys(state.elements).forEach(function (name) { 1375 var element = state.elements[name]; 1376 var attributes = state.attributes[name] || {}; 1377 var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them 1378 1379 var style = styleProperties.reduce(function (style, property) { 1380 style[property] = ''; 1381 return style; 1382 }, {}); // arrow is optional + virtual elements 1383 1384 if (!(0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element) || !(0,_dom_utils_getNodeName_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element)) { 1385 return; 1386 } 1387 1388 Object.assign(element.style, style); 1389 Object.keys(attributes).forEach(function (attribute) { 1390 element.removeAttribute(attribute); 1391 }); 1392 }); 1393 }; 1394} // eslint-disable-next-line import/no-unused-modules 1395 1396 1397/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ 1398 name: 'applyStyles', 1399 enabled: true, 1400 phase: 'write', 1401 fn: applyStyles, 1402 effect: effect, 1403 requires: ['computeStyles'] 1404}); 1405 1406/***/ }), 1407
vendor: 6,639 bytes, lines 1408-1532
1408/***/ "./node_modules/@popperjs/core/lib/modifiers/arrow.js": 1409/*!************************************************************!*\ 1410 !*** ./node_modules/@popperjs/core/lib/modifiers/arrow.js ***! 1411 \************************************************************/ 1412/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 1413 1414"use strict"; 1415__webpack_require__.r(__webpack_exports__); 1416/* harmony export */ __webpack_require__.d(__webpack_exports__, { 1417/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 1418/* harmony export */ }); 1419/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js"); 1420/* harmony import */ var _dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../dom-utils/getLayoutRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js"); 1421/* harmony import */ var _dom_utils_contains_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../dom-utils/contains.js */ "./node_modules/@popperjs/core/lib/dom-utils/contains.js"); 1422/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../dom-utils/getOffsetParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js"); 1423/* harmony import */ var _utils_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/getMainAxisFromPlacement.js */ "./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js"); 1424/* harmony import */ var _utils_within_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/within.js */ "./node_modules/@popperjs/core/lib/utils/within.js"); 1425/* harmony import */ var _utils_mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/mergePaddingObject.js */ "./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js"); 1426/* harmony import */ var _utils_expandToHashMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/expandToHashMap.js */ "./node_modules/@popperjs/core/lib/utils/expandToHashMap.js"); 1427/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); 1428/* harmony import */ var _dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../dom-utils/instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 // eslint-disable-next-line import/no-unused-modules 1439 1440var toPaddingObject = function toPaddingObject(padding, state) { 1441 padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, { 1442 placement: state.placement 1443 })) : padding; 1444 return (0,_utils_mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_0__["default"])(typeof padding !== 'number' ? padding : (0,_utils_expandToHashMap_js__WEBPACK_IMPORTED_MODULE_1__["default"])(padding, _enums_js__WEBPACK_IMPORTED_MODULE_2__.basePlacements)); 1445}; 1446 1447function arrow(_ref) { 1448 var _state$modifiersData$; 1449 1450 var state = _ref.state, 1451 name = _ref.name, 1452 options = _ref.options; 1453 var arrowElement = state.elements.arrow; 1454 var popperOffsets = state.modifiersData.popperOffsets; 1455 var basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_3__["default"])(state.placement); 1456 var axis = (0,_utils_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_4__["default"])(basePlacement); 1457 var isVertical = [_enums_js__WEBPACK_IMPORTED_MODULE_2__.left, _enums_js__WEBPACK_IMPORTED_MODULE_2__.right].indexOf(basePlacement) >= 0; 1458 var len = isVertical ? 'height' : 'width'; 1459 1460 if (!arrowElement || !popperOffsets) { 1461 return; 1462 } 1463 1464 var paddingObject = toPaddingObject(options.padding, state); 1465 var arrowRect = (0,_dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_5__["default"])(arrowElement); 1466 var minProp = axis === 'y' ? _enums_js__WEBPACK_IMPORTED_MODULE_2__.top : _enums_js__WEBPACK_IMPORTED_MODULE_2__.left; 1467 var maxProp = axis === 'y' ? _enums_js__WEBPACK_IMPORTED_MODULE_2__.bottom : _enums_js__WEBPACK_IMPORTED_MODULE_2__.right; 1468 var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len]; 1469 var startDiff = popperOffsets[axis] - state.rects.reference[axis]; 1470 var arrowOffsetParent = (0,_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_6__["default"])(arrowElement); 1471 var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0; 1472 var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is 1473 // outside of the popper bounds 1474 1475 var min = paddingObject[minProp]; 1476 var max = clientSize - arrowRect[len] - paddingObject[maxProp]; 1477 var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference; 1478 var offset = (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_7__.within)(min, center, max); // Prevents breaking syntax highlighting... 1479 1480 var axisProp = axis; 1481 state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$); 1482} 1483 1484function effect(_ref2) { 1485 var state = _ref2.state, 1486 options = _ref2.options; 1487 var _options$element = options.element, 1488 arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element; 1489 1490 if (arrowElement == null) { 1491 return; 1492 } // CSS selector 1493 1494 1495 if (typeof arrowElement === 'string') { 1496 arrowElement = state.elements.popper.querySelector(arrowElement); 1497 1498 if (!arrowElement) { 1499 return; 1500 } 1501 } 1502 1503 if (true) { 1504 if (!(0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_8__.isHTMLElement)(arrowElement)) { 1505 console.error(['Popper: "arrow" element must be an HTMLElement (not an SVGElement).', 'To use an SVG arrow, wrap it in an HTMLElement that will be used as', 'the arrow.'].join(' ')); 1506 } 1507 } 1508 1509 if (!(0,_dom_utils_contains_js__WEBPACK_IMPORTED_MODULE_9__["default"])(state.elements.popper, arrowElement)) { 1510 if (true) { 1511 console.error(['Popper: "arrow" modifier\'s `element` must be a child of the popper', 'element.'].join(' ')); 1512 } 1513 1514 return; 1515 } 1516 1517 state.elements.arrow = arrowElement; 1518} // eslint-disable-next-line import/no-unused-modules 1519 1520 1521/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ 1522 name: 'arrow', 1523 enabled: true, 1524 phase: 'main', 1525 fn: arrow, 1526 effect: effect, 1527 requires: ['popperOffsets'], 1528 requiresIfExists: ['preventOverflow'] 1529}); 1530 1531/***/ }), 1532
vendor: 9,297 bytes, lines 1533-1736
1533/***/ "./node_modules/@popperjs/core/lib/modifiers/computeStyles.js": 1534/*!********************************************************************!*\ 1535 !*** ./node_modules/@popperjs/core/lib/modifiers/computeStyles.js ***! 1536 \********************************************************************/ 1537/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 1538 1539"use strict"; 1540__webpack_require__.r(__webpack_exports__); 1541/* harmony export */ __webpack_require__.d(__webpack_exports__, { 1542/* harmony export */ "mapToStyles": () => (/* binding */ mapToStyles), 1543/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 1544/* harmony export */ }); 1545/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); 1546/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../dom-utils/getOffsetParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js"); 1547/* harmony import */ var _dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../dom-utils/getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js"); 1548/* harmony import */ var _dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../dom-utils/getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js"); 1549/* harmony import */ var _dom_utils_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../dom-utils/getComputedStyle.js */ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js"); 1550/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js"); 1551/* harmony import */ var _utils_getVariation_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/getVariation.js */ "./node_modules/@popperjs/core/lib/utils/getVariation.js"); 1552/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/math.js */ "./node_modules/@popperjs/core/lib/utils/math.js"); 1553 1554 1555 1556 1557 1558 1559 1560 // eslint-disable-next-line import/no-unused-modules 1561 1562var unsetSides = { 1563 top: 'auto', 1564 right: 'auto', 1565 bottom: 'auto', 1566 left: 'auto' 1567}; // Round the offsets to the nearest suitable subpixel based on the DPR. 1568// Zooming can change the DPR, but it seems to report a value that will 1569// cleanly divide the values into the appropriate subpixels. 1570 1571function roundOffsetsByDPR(_ref) { 1572 var x = _ref.x, 1573 y = _ref.y; 1574 var win = window; 1575 var dpr = win.devicePixelRatio || 1; 1576 return { 1577 x: (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_0__.round)(x * dpr) / dpr || 0, 1578 y: (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_0__.round)(y * dpr) / dpr || 0 1579 }; 1580} 1581 1582function mapToStyles(_ref2) { 1583 var _Object$assign2; 1584 1585 var popper = _ref2.popper, 1586 popperRect = _ref2.popperRect, 1587 placement = _ref2.placement, 1588 variation = _ref2.variation, 1589 offsets = _ref2.offsets, 1590 position = _ref2.position, 1591 gpuAcceleration = _ref2.gpuAcceleration, 1592 adaptive = _ref2.adaptive, 1593 roundOffsets = _ref2.roundOffsets, 1594 isFixed = _ref2.isFixed; 1595 var _offsets$x = offsets.x, 1596 x = _offsets$x === void 0 ? 0 : _offsets$x, 1597 _offsets$y = offsets.y, 1598 y = _offsets$y === void 0 ? 0 : _offsets$y; 1599 1600 var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({ 1601 x: x, 1602 y: y 1603 }) : { 1604 x: x, 1605 y: y 1606 }; 1607 1608 x = _ref3.x; 1609 y = _ref3.y; 1610 var hasX = offsets.hasOwnProperty('x'); 1611 var hasY = offsets.hasOwnProperty('y'); 1612 var sideX = _enums_js__WEBPACK_IMPORTED_MODULE_1__.left; 1613 var sideY = _enums_js__WEBPACK_IMPORTED_MODULE_1__.top; 1614 var win = window; 1615 1616 if (adaptive) { 1617 var offsetParent = (0,_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_2__["default"])(popper); 1618 var heightProp = 'clientHeight'; 1619 var widthProp = 'clientWidth'; 1620 1621 if (offsetParent === (0,_dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_3__["default"])(popper)) { 1622 offsetParent = (0,_dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_4__["default"])(popper); 1623 1624 if ((0,_dom_utils_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_5__["default"])(offsetParent).position !== 'static' && position === 'absolute') { 1625 heightProp = 'scrollHeight'; 1626 widthProp = 'scrollWidth'; 1627 } 1628 } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it 1629 1630 1631 offsetParent = offsetParent; 1632 1633 if (placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.top || (placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.left || placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.right) && variation === _enums_js__WEBPACK_IMPORTED_MODULE_1__.end) { 1634 sideY = _enums_js__WEBPACK_IMPORTED_MODULE_1__.bottom; 1635 var offsetY = isFixed && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing] 1636 offsetParent[heightProp]; 1637 y -= offsetY - popperRect.height; 1638 y *= gpuAcceleration ? 1 : -1; 1639 } 1640 1641 if (placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.left || (placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.top || placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.bottom) && variation === _enums_js__WEBPACK_IMPORTED_MODULE_1__.end) { 1642 sideX = _enums_js__WEBPACK_IMPORTED_MODULE_1__.right; 1643 var offsetX = isFixed && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing] 1644 offsetParent[widthProp]; 1645 x -= offsetX - popperRect.width; 1646 x *= gpuAcceleration ? 1 : -1; 1647 } 1648 } 1649 1650 var commonStyles = Object.assign({ 1651 position: position 1652 }, adaptive && unsetSides); 1653 1654 var _ref4 = roundOffsets === true ? roundOffsetsByDPR({ 1655 x: x, 1656 y: y 1657 }) : { 1658 x: x, 1659 y: y 1660 }; 1661 1662 x = _ref4.x; 1663 y = _ref4.y; 1664 1665 if (gpuAcceleration) { 1666 var _Object$assign; 1667 1668 return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? "translate(" + x + "px, " + y + "px)" : "translate3d(" + x + "px, " + y + "px, 0)", _Object$assign)); 1669 } 1670 1671 return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + "px" : '', _Object$assign2[sideX] = hasX ? x + "px" : '', _Object$assign2.transform = '', _Object$assign2)); 1672} 1673 1674function computeStyles(_ref5) { 1675 var state = _ref5.state, 1676 options = _ref5.options; 1677 var _options$gpuAccelerat = options.gpuAcceleration, 1678 gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat, 1679 _options$adaptive = options.adaptive, 1680 adaptive = _options$adaptive === void 0 ? true : _options$adaptive, 1681 _options$roundOffsets = options.roundOffsets, 1682 roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets; 1683 1684 if (true) { 1685 var transitionProperty = (0,_dom_utils_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_5__["default"])(state.elements.popper).transitionProperty || ''; 1686 1687 if (adaptive && ['transform', 'top', 'right', 'bottom', 'left'].some(function (property) { 1688 return transitionProperty.indexOf(property) >= 0; 1689 })) { 1690 console.warn(['Popper: Detected CSS transitions on at least one of the following', 'CSS properties: "transform", "top", "right", "bottom", "left".', '\n\n', 'Disable the "computeStyles" modifier\'s `adaptive` option to allow', 'for smooth transitions, or remove these properties from the CSS', 'transition declaration on the popper element if only transitioning', 'opacity or background-color for example.', '\n\n', 'We recommend using the popper element as a wrapper around an inner', 'element that can have any CSS property transitioned for animations.'].join(' ')); 1691 } 1692 } 1693 1694 var commonStyles = { 1695 placement: (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_6__["default"])(state.placement), 1696 variation: (0,_utils_getVariation_js__WEBPACK_IMPORTED_MODULE_7__["default"])(state.placement), 1697 popper: state.elements.popper, 1698 popperRect: state.rects.popper, 1699 gpuAcceleration: gpuAcceleration, 1700 isFixed: state.options.strategy === 'fixed' 1701 }; 1702 1703 if (state.modifiersData.popperOffsets != null) { 1704 state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, { 1705 offsets: state.modifiersData.popperOffsets, 1706 position: state.options.strategy, 1707 adaptive: adaptive, 1708 roundOffsets: roundOffsets 1709 }))); 1710 } 1711 1712 if (state.modifiersData.arrow != null) { 1713 state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, { 1714 offsets: state.modifiersData.arrow, 1715 position: 'absolute', 1716 adaptive: false, 1717 roundOffsets: roundOffsets 1718 }))); 1719 } 1720 1721 state.attributes.popper = Object.assign({}, state.attributes.popper, { 1722 'data-popper-placement': state.placement 1723 }); 1724} // eslint-disable-next-line import/no-unused-modules 1725 1726 1727/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ 1728 name: 'computeStyles', 1729 enabled: true, 1730 phase: 'beforeWrite', 1731 fn: computeStyles, 1732 data: {} 1733}); 1734 1735/***/ }), 1736
vendor: 2,190 bytes, lines 1737-1800
1737/***/ "./node_modules/@popperjs/core/lib/modifiers/eventListeners.js": 1738/*!*********************************************************************!*\ 1739 !*** ./node_modules/@popperjs/core/lib/modifiers/eventListeners.js ***! 1740 \*********************************************************************/ 1741/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 1742 1743"use strict"; 1744__webpack_require__.r(__webpack_exports__); 1745/* harmony export */ __webpack_require__.d(__webpack_exports__, { 1746/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 1747/* harmony export */ }); 1748/* harmony import */ var _dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dom-utils/getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js"); 1749 // eslint-disable-next-line import/no-unused-modules 1750 1751var passive = { 1752 passive: true 1753}; 1754 1755function effect(_ref) { 1756 var state = _ref.state, 1757 instance = _ref.instance, 1758 options = _ref.options; 1759 var _options$scroll = options.scroll, 1760 scroll = _options$scroll === void 0 ? true : _options$scroll, 1761 _options$resize = options.resize, 1762 resize = _options$resize === void 0 ? true : _options$resize; 1763 var window = (0,_dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(state.elements.popper); 1764 var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper); 1765 1766 if (scroll) { 1767 scrollParents.forEach(function (scrollParent) { 1768 scrollParent.addEventListener('scroll', instance.update, passive); 1769 }); 1770 } 1771 1772 if (resize) { 1773 window.addEventListener('resize', instance.update, passive); 1774 } 1775 1776 return function () { 1777 if (scroll) { 1778 scrollParents.forEach(function (scrollParent) { 1779 scrollParent.removeEventListener('scroll', instance.update, passive); 1780 }); 1781 } 1782 1783 if (resize) { 1784 window.removeEventListener('resize', instance.update, passive); 1785 } 1786 }; 1787} // eslint-disable-next-line import/no-unused-modules 1788 1789 1790/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ 1791 name: 'eventListeners', 1792 enabled: true, 1793 phase: 'write', 1794 fn: function fn() {}, 1795 effect: effect, 1796 data: {} 1797}); 1798 1799/***/ }), 1800
vendor: 7,538 bytes, lines 1801-1968
1801/***/ "./node_modules/@popperjs/core/lib/modifiers/flip.js": 1802/*!***********************************************************!*\ 1803 !*** ./node_modules/@popperjs/core/lib/modifiers/flip.js ***! 1804 \***********************************************************/ 1805/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 1806 1807"use strict"; 1808__webpack_require__.r(__webpack_exports__); 1809/* harmony export */ __webpack_require__.d(__webpack_exports__, { 1810/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 1811/* harmony export */ }); 1812/* harmony import */ var _utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/getOppositePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js"); 1813/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js"); 1814/* harmony import */ var _utils_getOppositeVariationPlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/getOppositeVariationPlacement.js */ "./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js"); 1815/* harmony import */ var _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/detectOverflow.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js"); 1816/* harmony import */ var _utils_computeAutoPlacement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/computeAutoPlacement.js */ "./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js"); 1817/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); 1818/* harmony import */ var _utils_getVariation_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/getVariation.js */ "./node_modules/@popperjs/core/lib/utils/getVariation.js"); 1819 1820 1821 1822 1823 1824 1825 // eslint-disable-next-line import/no-unused-modules 1826 1827function getExpandedFallbackPlacements(placement) { 1828 if ((0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(placement) === _enums_js__WEBPACK_IMPORTED_MODULE_1__.auto) { 1829 return []; 1830 } 1831 1832 var oppositePlacement = (0,_utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(placement); 1833 return [(0,_utils_getOppositeVariationPlacement_js__WEBPACK_IMPORTED_MODULE_3__["default"])(placement), oppositePlacement, (0,_utils_getOppositeVariationPlacement_js__WEBPACK_IMPORTED_MODULE_3__["default"])(oppositePlacement)]; 1834} 1835 1836function flip(_ref) { 1837 var state = _ref.state, 1838 options = _ref.options, 1839 name = _ref.name; 1840 1841 if (state.modifiersData[name]._skip) { 1842 return; 1843 } 1844 1845 var _options$mainAxis = options.mainAxis, 1846 checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, 1847 _options$altAxis = options.altAxis, 1848 checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis, 1849 specifiedFallbackPlacements = options.fallbackPlacements, 1850 padding = options.padding, 1851 boundary = options.boundary, 1852 rootBoundary = options.rootBoundary, 1853 altBoundary = options.altBoundary, 1854 _options$flipVariatio = options.flipVariations, 1855 flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio, 1856 allowedAutoPlacements = options.allowedAutoPlacements; 1857 var preferredPlacement = state.options.placement; 1858 var basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(preferredPlacement); 1859 var isBasePlacement = basePlacement === preferredPlacement; 1860 var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [(0,_utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement)); 1861 var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) { 1862 return acc.concat((0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(placement) === _enums_js__WEBPACK_IMPORTED_MODULE_1__.auto ? (0,_utils_computeAutoPlacement_js__WEBPACK_IMPORTED_MODULE_4__["default"])(state, { 1863 placement: placement, 1864 boundary: boundary, 1865 rootBoundary: rootBoundary, 1866 padding: padding, 1867 flipVariations: flipVariations, 1868 allowedAutoPlacements: allowedAutoPlacements 1869 }) : placement); 1870 }, []); 1871 var referenceRect = state.rects.reference; 1872 var popperRect = state.rects.popper; 1873 var checksMap = new Map(); 1874 var makeFallbackChecks = true; 1875 var firstFittingPlacement = placements[0]; 1876 1877 for (var i = 0; i < placements.length; i++) { 1878 var placement = placements[i]; 1879 1880 var _basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(placement); 1881 1882 var isStartVariation = (0,_utils_getVariation_js__WEBPACK_IMPORTED_MODULE_5__["default"])(placement) === _enums_js__WEBPACK_IMPORTED_MODULE_1__.start; 1883 var isVertical = [_enums_js__WEBPACK_IMPORTED_MODULE_1__.top, _enums_js__WEBPACK_IMPORTED_MODULE_1__.bottom].indexOf(_basePlacement) >= 0; 1884 var len = isVertical ? 'width' : 'height'; 1885 var overflow = (0,_utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_6__["default"])(state, { 1886 placement: placement, 1887 boundary: boundary, 1888 rootBoundary: rootBoundary, 1889 altBoundary: altBoundary, 1890 padding: padding 1891 }); 1892 var mainVariationSide = isVertical ? isStartVariation ? _enums_js__WEBPACK_IMPORTED_MODULE_1__.right : _enums_js__WEBPACK_IMPORTED_MODULE_1__.left : isStartVariation ? _enums_js__WEBPACK_IMPORTED_MODULE_1__.bottom : _enums_js__WEBPACK_IMPORTED_MODULE_1__.top; 1893 1894 if (referenceRect[len] > popperRect[len]) { 1895 mainVariationSide = (0,_utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(mainVariationSide); 1896 } 1897 1898 var altVariationSide = (0,_utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(mainVariationSide); 1899 var checks = []; 1900 1901 if (checkMainAxis) { 1902 checks.push(overflow[_basePlacement] <= 0); 1903 } 1904 1905 if (checkAltAxis) { 1906 checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0); 1907 } 1908 1909 if (checks.every(function (check) { 1910 return check; 1911 })) { 1912 firstFittingPlacement = placement; 1913 makeFallbackChecks = false; 1914 break; 1915 } 1916 1917 checksMap.set(placement, checks); 1918 } 1919 1920 if (makeFallbackChecks) { 1921 // `2` may be desired in some cases â research later 1922 var numberOfChecks = flipVariations ? 3 : 1; 1923 1924 var _loop = function _loop(_i) { 1925 var fittingPlacement = placements.find(function (placement) { 1926 var checks = checksMap.get(placement); 1927 1928 if (checks) { 1929 return checks.slice(0, _i).every(function (check) { 1930 return check; 1931 }); 1932 } 1933 }); 1934 1935 if (fittingPlacement) { 1936 firstFittingPlacement = fittingPlacement; 1937 return "break"; 1938 } 1939 }; 1940 1941 for (var _i = numberOfChecks; _i > 0; _i--) { 1942 var _ret = _loop(_i); 1943 1944 if (_ret === "break") break; 1945 } 1946 } 1947 1948 if (state.placement !== firstFittingPlacement) { 1949 state.modifiersData[name]._skip = true; 1950 state.placement = firstFittingPlacement; 1951 state.reset = true; 1952 } 1953} // eslint-disable-next-line import/no-unused-modules 1954 1955 1956/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ 1957 name: 'flip', 1958 enabled: true, 1959 phase: 'main', 1960 fn: flip, 1961 requiresIfExists: ['offset'], 1962 data: { 1963 _skip: false 1964 } 1965}); 1966 1967/***/ }), 1968
vendor: 3,074 bytes, lines 1969-2045
1969/***/ "./node_modules/@popperjs/core/lib/modifiers/hide.js": 1970/*!***********************************************************!*\ 1971 !*** ./node_modules/@popperjs/core/lib/modifiers/hide.js ***! 1972 \***********************************************************/ 1973/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 1974 1975"use strict"; 1976__webpack_require__.r(__webpack_exports__); 1977/* harmony export */ __webpack_require__.d(__webpack_exports__, { 1978/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 1979/* harmony export */ }); 1980/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); 1981/* harmony import */ var _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/detectOverflow.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js"); 1982 1983 1984 1985function getSideOffsets(overflow, rect, preventedOffsets) { 1986 if (preventedOffsets === void 0) { 1987 preventedOffsets = { 1988 x: 0, 1989 y: 0 1990 }; 1991 } 1992 1993 return { 1994 top: overflow.top - rect.height - preventedOffsets.y, 1995 right: overflow.right - rect.width + preventedOffsets.x, 1996 bottom: overflow.bottom - rect.height + preventedOffsets.y, 1997 left: overflow.left - rect.width - preventedOffsets.x 1998 }; 1999} 2000 2001function isAnySideFullyClipped(overflow) { 2002 return [_enums_js__WEBPACK_IMPORTED_MODULE_0__.top, _enums_js__WEBPACK_IMPORTED_MODULE_0__.right, _enums_js__WEBPACK_IMPORTED_MODULE_0__.bottom, _enums_js__WEBPACK_IMPORTED_MODULE_0__.left].some(function (side) { 2003 return overflow[side] >= 0; 2004 }); 2005} 2006 2007function hide(_ref) { 2008 var state = _ref.state, 2009 name = _ref.name; 2010 var referenceRect = state.rects.reference; 2011 var popperRect = state.rects.popper; 2012 var preventedOffsets = state.modifiersData.preventOverflow; 2013 var referenceOverflow = (0,_utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_1__["default"])(state, { 2014 elementContext: 'reference' 2015 }); 2016 var popperAltOverflow = (0,_utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_1__["default"])(state, { 2017 altBoundary: true 2018 }); 2019 var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect); 2020 var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets); 2021 var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets); 2022 var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets); 2023 state.modifiersData[name] = { 2024 referenceClippingOffsets: referenceClippingOffsets, 2025 popperEscapeOffsets: popperEscapeOffsets, 2026 isReferenceHidden: isReferenceHidden, 2027 hasPopperEscaped: hasPopperEscaped 2028 }; 2029 state.attributes.popper = Object.assign({}, state.attributes.popper, { 2030 'data-popper-reference-hidden': isReferenceHidden, 2031 'data-popper-escaped': hasPopperEscaped 2032 }); 2033} // eslint-disable-next-line import/no-unused-modules 2034 2035 2036/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ 2037 name: 'hide', 2038 enabled: true, 2039 phase: 'main', 2040 requiresIfExists: ['preventOverflow'], 2041 fn: hide 2042}); 2043 2044/***/ }), 2045
vendor: 3,157 bytes, lines 2046-2085
2046/***/ "./node_modules/@popperjs/core/lib/modifiers/index.js": 2047/*!************************************************************!*\ 2048 !*** ./node_modules/@popperjs/core/lib/modifiers/index.js ***! 2049 \************************************************************/ 2050/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 2051 2052"use strict"; 2053__webpack_require__.r(__webpack_exports__); 2054/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2055/* harmony export */ "applyStyles": () => (/* reexport safe */ _applyStyles_js__WEBPACK_IMPORTED_MODULE_0__["default"]), 2056/* harmony export */ "arrow": () => (/* reexport safe */ _arrow_js__WEBPACK_IMPORTED_MODULE_1__["default"]), 2057/* harmony export */ "computeStyles": () => (/* reexport safe */ _computeStyles_js__WEBPACK_IMPORTED_MODULE_2__["default"]), 2058/* harmony export */ "eventListeners": () => (/* reexport safe */ _eventListeners_js__WEBPACK_IMPORTED_MODULE_3__["default"]), 2059/* harmony export */ "flip": () => (/* reexport safe */ _flip_js__WEBPACK_IMPORTED_MODULE_4__["default"]), 2060/* harmony export */ "hide": () => (/* reexport safe */ _hide_js__WEBPACK_IMPORTED_MODULE_5__["default"]), 2061/* harmony export */ "offset": () => (/* reexport safe */ _offset_js__WEBPACK_IMPORTED_MODULE_6__["default"]), 2062/* harmony export */ "popperOffsets": () => (/* reexport safe */ _popperOffsets_js__WEBPACK_IMPORTED_MODULE_7__["default"]), 2063/* harmony export */ "preventOverflow": () => (/* reexport safe */ _preventOverflow_js__WEBPACK_IMPORTED_MODULE_8__["default"]) 2064/* harmony export */ }); 2065/* harmony import */ var _applyStyles_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./applyStyles.js */ "./node_modules/@popperjs/core/lib/modifiers/applyStyles.js"); 2066/* harmony import */ var _arrow_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./arrow.js */ "./node_modules/@popperjs/core/lib/modifiers/arrow.js"); 2067/* harmony import */ var _computeStyles_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./computeStyles.js */ "./node_modules/@popperjs/core/lib/modifiers/computeStyles.js"); 2068/* harmony import */ var _eventListeners_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./eventListeners.js */ "./node_modules/@popperjs/core/lib/modifiers/eventListeners.js"); 2069/* harmony import */ var _flip_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./flip.js */ "./node_modules/@popperjs/core/lib/modifiers/flip.js"); 2070/* harmony import */ var _hide_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./hide.js */ "./node_modules/@popperjs/core/lib/modifiers/hide.js"); 2071/* harmony import */ var _offset_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./offset.js */ "./node_modules/@popperjs/core/lib/modifiers/offset.js"); 2072/* harmony import */ var _popperOffsets_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./popperOffsets.js */ "./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js"); 2073/* harmony import */ var _preventOverflow_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./preventOverflow.js */ "./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js"); 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084/***/ }), 2085
vendor: 2,814 bytes, lines 2086-2156
2086/***/ "./node_modules/@popperjs/core/lib/modifiers/offset.js": 2087/*!*************************************************************!*\ 2088 !*** ./node_modules/@popperjs/core/lib/modifiers/offset.js ***! 2089 \*************************************************************/ 2090/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 2091 2092"use strict"; 2093__webpack_require__.r(__webpack_exports__); 2094/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2095/* harmony export */ "distanceAndSkiddingToXY": () => (/* binding */ distanceAndSkiddingToXY), 2096/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 2097/* harmony export */ }); 2098/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js"); 2099/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); 2100 2101 // eslint-disable-next-line import/no-unused-modules 2102 2103function distanceAndSkiddingToXY(placement, rects, offset) { 2104 var basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(placement); 2105 var invertDistance = [_enums_js__WEBPACK_IMPORTED_MODULE_1__.left, _enums_js__WEBPACK_IMPORTED_MODULE_1__.top].indexOf(basePlacement) >= 0 ? -1 : 1; 2106 2107 var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, { 2108 placement: placement 2109 })) : offset, 2110 skidding = _ref[0], 2111 distance = _ref[1]; 2112 2113 skidding = skidding || 0; 2114 distance = (distance || 0) * invertDistance; 2115 return [_enums_js__WEBPACK_IMPORTED_MODULE_1__.left, _enums_js__WEBPACK_IMPORTED_MODULE_1__.right].indexOf(basePlacement) >= 0 ? { 2116 x: distance, 2117 y: skidding 2118 } : { 2119 x: skidding, 2120 y: distance 2121 }; 2122} 2123 2124function offset(_ref2) { 2125 var state = _ref2.state, 2126 options = _ref2.options, 2127 name = _ref2.name; 2128 var _options$offset = options.offset, 2129 offset = _options$offset === void 0 ? [0, 0] : _options$offset; 2130 var data = _enums_js__WEBPACK_IMPORTED_MODULE_1__.placements.reduce(function (acc, placement) { 2131 acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset); 2132 return acc; 2133 }, {}); 2134 var _data$state$placement = data[state.placement], 2135 x = _data$state$placement.x, 2136 y = _data$state$placement.y; 2137 2138 if (state.modifiersData.popperOffsets != null) { 2139 state.modifiersData.popperOffsets.x += x; 2140 state.modifiersData.popperOffsets.y += y; 2141 } 2142 2143 state.modifiersData[name] = data; 2144} // eslint-disable-next-line import/no-unused-modules 2145 2146 2147/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ 2148 name: 'offset', 2149 enabled: true, 2150 phase: 'main', 2151 requires: ['popperOffsets'], 2152 fn: offset 2153}); 2154 2155/***/ }), 2156
vendor: 1,555 bytes, lines 2157-2196
2157/***/ "./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js": 2158/*!********************************************************************!*\ 2159 !*** ./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js ***! 2160 \********************************************************************/ 2161/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 2162 2163"use strict"; 2164__webpack_require__.r(__webpack_exports__); 2165/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2166/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 2167/* harmony export */ }); 2168/* harmony import */ var _utils_computeOffsets_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/computeOffsets.js */ "./node_modules/@popperjs/core/lib/utils/computeOffsets.js"); 2169 2170 2171function popperOffsets(_ref) { 2172 var state = _ref.state, 2173 name = _ref.name; 2174 // Offsets are the actual position the popper needs to have to be 2175 // properly positioned near its reference element 2176 // This is the most basic placement, and will be adjusted by 2177 // the modifiers in the next step 2178 state.modifiersData[name] = (0,_utils_computeOffsets_js__WEBPACK_IMPORTED_MODULE_0__["default"])({ 2179 reference: state.rects.reference, 2180 element: state.rects.popper, 2181 strategy: 'absolute', 2182 placement: state.placement 2183 }); 2184} // eslint-disable-next-line import/no-unused-modules 2185 2186 2187/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ 2188 name: 'popperOffsets', 2189 enabled: true, 2190 phase: 'read', 2191 fn: popperOffsets, 2192 data: {} 2193}); 2194 2195/***/ }), 2196
vendor: 9,904 bytes, lines 2197-2363
2197/***/ "./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js": 2198/*!**********************************************************************!*\ 2199 !*** ./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js ***! 2200 \**********************************************************************/ 2201/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 2202 2203"use strict"; 2204__webpack_require__.r(__webpack_exports__); 2205/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2206/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 2207/* harmony export */ }); 2208/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); 2209/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js"); 2210/* harmony import */ var _utils_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/getMainAxisFromPlacement.js */ "./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js"); 2211/* harmony import */ var _utils_getAltAxis_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/getAltAxis.js */ "./node_modules/@popperjs/core/lib/utils/getAltAxis.js"); 2212/* harmony import */ var _utils_within_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils/within.js */ "./node_modules/@popperjs/core/lib/utils/within.js"); 2213/* harmony import */ var _dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../dom-utils/getLayoutRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js"); 2214/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../dom-utils/getOffsetParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js"); 2215/* harmony import */ var _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/detectOverflow.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js"); 2216/* harmony import */ var _utils_getVariation_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/getVariation.js */ "./node_modules/@popperjs/core/lib/utils/getVariation.js"); 2217/* harmony import */ var _utils_getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/getFreshSideObject.js */ "./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js"); 2218/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../utils/math.js */ "./node_modules/@popperjs/core/lib/utils/math.js"); 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231function preventOverflow(_ref) { 2232 var state = _ref.state, 2233 options = _ref.options, 2234 name = _ref.name; 2235 var _options$mainAxis = options.mainAxis, 2236 checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, 2237 _options$altAxis = options.altAxis, 2238 checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis, 2239 boundary = options.boundary, 2240 rootBoundary = options.rootBoundary, 2241 altBoundary = options.altBoundary, 2242 padding = options.padding, 2243 _options$tether = options.tether, 2244 tether = _options$tether === void 0 ? true : _options$tether, 2245 _options$tetherOffset = options.tetherOffset, 2246 tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset; 2247 var overflow = (0,_utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(state, { 2248 boundary: boundary, 2249 rootBoundary: rootBoundary, 2250 padding: padding, 2251 altBoundary: altBoundary 2252 }); 2253 var basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_1__["default"])(state.placement); 2254 var variation = (0,_utils_getVariation_js__WEBPACK_IMPORTED_MODULE_2__["default"])(state.placement); 2255 var isBasePlacement = !variation; 2256 var mainAxis = (0,_utils_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_3__["default"])(basePlacement); 2257 var altAxis = (0,_utils_getAltAxis_js__WEBPACK_IMPORTED_MODULE_4__["default"])(mainAxis); 2258 var popperOffsets = state.modifiersData.popperOffsets; 2259 var referenceRect = state.rects.reference; 2260 var popperRect = state.rects.popper; 2261 var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, { 2262 placement: state.placement 2263 })) : tetherOffset; 2264 var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? { 2265 mainAxis: tetherOffsetValue, 2266 altAxis: tetherOffsetValue 2267 } : Object.assign({ 2268 mainAxis: 0, 2269 altAxis: 0 2270 }, tetherOffsetValue); 2271 var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null; 2272 var data = { 2273 x: 0, 2274 y: 0 2275 }; 2276 2277 if (!popperOffsets) { 2278 return; 2279 } 2280 2281 if (checkMainAxis) { 2282 var _offsetModifierState$; 2283 2284 var mainSide = mainAxis === 'y' ? _enums_js__WEBPACK_IMPORTED_MODULE_5__.top : _enums_js__WEBPACK_IMPORTED_MODULE_5__.left; 2285 var altSide = mainAxis === 'y' ? _enums_js__WEBPACK_IMPORTED_MODULE_5__.bottom : _enums_js__WEBPACK_IMPORTED_MODULE_5__.right; 2286 var len = mainAxis === 'y' ? 'height' : 'width'; 2287 var offset = popperOffsets[mainAxis]; 2288 var min = offset + overflow[mainSide]; 2289 var max = offset - overflow[altSide]; 2290 var additive = tether ? -popperRect[len] / 2 : 0; 2291 var minLen = variation === _enums_js__WEBPACK_IMPORTED_MODULE_5__.start ? referenceRect[len] : popperRect[len]; 2292 var maxLen = variation === _enums_js__WEBPACK_IMPORTED_MODULE_5__.start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go 2293 // outside the reference bounds 2294 2295 var arrowElement = state.elements.arrow; 2296 var arrowRect = tether && arrowElement ? (0,_dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_6__["default"])(arrowElement) : { 2297 width: 0, 2298 height: 0 2299 }; 2300 var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : (0,_utils_getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_7__["default"])(); 2301 var arrowPaddingMin = arrowPaddingObject[mainSide]; 2302 var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want 2303 // to include its full size in the calculation. If the reference is small 2304 // and near the edge of a boundary, the popper can overflow even if the 2305 // reference is not overflowing as well (e.g. virtual elements with no 2306 // width or height) 2307 2308 var arrowLen = (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_8__.within)(0, referenceRect[len], arrowRect[len]); 2309 var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis; 2310 var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis; 2311 var arrowOffsetParent = state.elements.arrow && (0,_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_9__["default"])(state.elements.arrow); 2312 var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0; 2313 var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0; 2314 var tetherMin = offset + minOffset - offsetModifierValue - clientOffset; 2315 var tetherMax = offset + maxOffset - offsetModifierValue; 2316 var preventedOffset = (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_8__.within)(tether ? (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_10__.min)(min, tetherMin) : min, offset, tether ? (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_10__.max)(max, tetherMax) : max); 2317 popperOffsets[mainAxis] = preventedOffset; 2318 data[mainAxis] = preventedOffset - offset; 2319 } 2320 2321 if (checkAltAxis) { 2322 var _offsetModifierState$2; 2323 2324 var _mainSide = mainAxis === 'x' ? _enums_js__WEBPACK_IMPORTED_MODULE_5__.top : _enums_js__WEBPACK_IMPORTED_MODULE_5__.left; 2325 2326 var _altSide = mainAxis === 'x' ? _enums_js__WEBPACK_IMPORTED_MODULE_5__.bottom : _enums_js__WEBPACK_IMPORTED_MODULE_5__.right; 2327 2328 var _offset = popperOffsets[altAxis]; 2329 2330 var _len = altAxis === 'y' ? 'height' : 'width'; 2331 2332 var _min = _offset + overflow[_mainSide]; 2333 2334 var _max = _offset - overflow[_altSide]; 2335 2336 var isOriginSide = [_enums_js__WEBPACK_IMPORTED_MODULE_5__.top, _enums_js__WEBPACK_IMPORTED_MODULE_5__.left].indexOf(basePlacement) !== -1; 2337 2338 var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0; 2339 2340 var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis; 2341 2342 var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max; 2343 2344 var _preventedOffset = tether && isOriginSide ? (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_8__.withinMaxClamp)(_tetherMin, _offset, _tetherMax) : (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_8__.within)(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max); 2345 2346 popperOffsets[altAxis] = _preventedOffset; 2347 data[altAxis] = _preventedOffset - _offset; 2348 } 2349 2350 state.modifiersData[name] = data; 2351} // eslint-disable-next-line import/no-unused-modules 2352 2353 2354/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ 2355 name: 'preventOverflow', 2356 enabled: true, 2357 phase: 'main', 2358 fn: preventOverflow, 2359 requiresIfExists: ['offset'] 2360}); 2361 2362/***/ }), 2363
vendor: 2,572 bytes, lines 2364-2397
2364/***/ "./node_modules/@popperjs/core/lib/popper-lite.js": 2365/*!********************************************************!*\ 2366 !*** ./node_modules/@popperjs/core/lib/popper-lite.js ***! 2367 \********************************************************/ 2368/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 2369 2370"use strict"; 2371__webpack_require__.r(__webpack_exports__); 2372/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2373/* harmony export */ "createPopper": () => (/* binding */ createPopper), 2374/* harmony export */ "popperGenerator": () => (/* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_4__.popperGenerator), 2375/* harmony export */ "defaultModifiers": () => (/* binding */ defaultModifiers), 2376/* harmony export */ "detectOverflow": () => (/* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_5__["default"]) 2377/* harmony export */ }); 2378/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./createPopper.js */ "./node_modules/@popperjs/core/lib/createPopper.js"); 2379/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./createPopper.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js"); 2380/* harmony import */ var _modifiers_eventListeners_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./modifiers/eventListeners.js */ "./node_modules/@popperjs/core/lib/modifiers/eventListeners.js"); 2381/* harmony import */ var _modifiers_popperOffsets_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifiers/popperOffsets.js */ "./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js"); 2382/* harmony import */ var _modifiers_computeStyles_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifiers/computeStyles.js */ "./node_modules/@popperjs/core/lib/modifiers/computeStyles.js"); 2383/* harmony import */ var _modifiers_applyStyles_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modifiers/applyStyles.js */ "./node_modules/@popperjs/core/lib/modifiers/applyStyles.js"); 2384 2385 2386 2387 2388 2389var defaultModifiers = [_modifiers_eventListeners_js__WEBPACK_IMPORTED_MODULE_0__["default"], _modifiers_popperOffsets_js__WEBPACK_IMPORTED_MODULE_1__["default"], _modifiers_computeStyles_js__WEBPACK_IMPORTED_MODULE_2__["default"], _modifiers_applyStyles_js__WEBPACK_IMPORTED_MODULE_3__["default"]]; 2390var createPopper = /*#__PURE__*/(0,_createPopper_js__WEBPACK_IMPORTED_MODULE_4__.popperGenerator)({ 2391 defaultModifiers: defaultModifiers 2392}); // eslint-disable-next-line import/no-unused-modules 2393 2394 2395 2396/***/ }), 2397
vendor: 5,531 bytes, lines 2398-2457
2398/***/ "./node_modules/@popperjs/core/lib/popper.js": 2399/*!***************************************************!*\ 2400 !*** ./node_modules/@popperjs/core/lib/popper.js ***! 2401 \***************************************************/ 2402/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 2403 2404"use strict"; 2405__webpack_require__.r(__webpack_exports__); 2406/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2407/* harmony export */ "createPopper": () => (/* binding */ createPopper), 2408/* harmony export */ "popperGenerator": () => (/* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_9__.popperGenerator), 2409/* harmony export */ "defaultModifiers": () => (/* binding */ defaultModifiers), 2410/* harmony export */ "detectOverflow": () => (/* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_10__["default"]), 2411/* harmony export */ "createPopperLite": () => (/* reexport safe */ _popper_lite_js__WEBPACK_IMPORTED_MODULE_11__.createPopper), 2412/* harmony export */ "applyStyles": () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.applyStyles), 2413/* harmony export */ "arrow": () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.arrow), 2414/* harmony export */ "computeStyles": () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.computeStyles), 2415/* harmony export */ "eventListeners": () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.eventListeners), 2416/* harmony export */ "flip": () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.flip), 2417/* harmony export */ "hide": () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.hide), 2418/* harmony export */ "offset": () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.offset), 2419/* harmony export */ "popperOffsets": () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.popperOffsets), 2420/* harmony export */ "preventOverflow": () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.preventOverflow) 2421/* harmony export */ }); 2422/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./createPopper.js */ "./node_modules/@popperjs/core/lib/createPopper.js"); 2423/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./createPopper.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js"); 2424/* harmony import */ var _modifiers_eventListeners_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./modifiers/eventListeners.js */ "./node_modules/@popperjs/core/lib/modifiers/eventListeners.js"); 2425/* harmony import */ var _modifiers_popperOffsets_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifiers/popperOffsets.js */ "./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js"); 2426/* harmony import */ var _modifiers_computeStyles_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifiers/computeStyles.js */ "./node_modules/@popperjs/core/lib/modifiers/computeStyles.js"); 2427/* harmony import */ var _modifiers_applyStyles_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modifiers/applyStyles.js */ "./node_modules/@popperjs/core/lib/modifiers/applyStyles.js"); 2428/* harmony import */ var _modifiers_offset_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./modifiers/offset.js */ "./node_modules/@popperjs/core/lib/modifiers/offset.js"); 2429/* harmony import */ var _modifiers_flip_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./modifiers/flip.js */ "./node_modules/@popperjs/core/lib/modifiers/flip.js"); 2430/* harmony import */ var _modifiers_preventOverflow_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./modifiers/preventOverflow.js */ "./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js"); 2431/* harmony import */ var _modifiers_arrow_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./modifiers/arrow.js */ "./node_modules/@popperjs/core/lib/modifiers/arrow.js"); 2432/* harmony import */ var _modifiers_hide_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./modifiers/hide.js */ "./node_modules/@popperjs/core/lib/modifiers/hide.js"); 2433/* harmony import */ var _popper_lite_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./popper-lite.js */ "./node_modules/@popperjs/core/lib/popper-lite.js"); 2434/* harmony import */ var _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./modifiers/index.js */ "./node_modules/@popperjs/core/lib/modifiers/index.js"); 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445var defaultModifiers = [_modifiers_eventListeners_js__WEBPACK_IMPORTED_MODULE_0__["default"], _modifiers_popperOffsets_js__WEBPACK_IMPORTED_MODULE_1__["default"], _modifiers_computeStyles_js__WEBPACK_IMPORTED_MODULE_2__["default"], _modifiers_applyStyles_js__WEBPACK_IMPORTED_MODULE_3__["default"], _modifiers_offset_js__WEBPACK_IMPORTED_MODULE_4__["default"], _modifiers_flip_js__WEBPACK_IMPORTED_MODULE_5__["default"], _modifiers_preventOverflow_js__WEBPACK_IMPORTED_MODULE_6__["default"], _modifiers_arrow_js__WEBPACK_IMPORTED_MODULE_7__["default"], _modifiers_hide_js__WEBPACK_IMPORTED_MODULE_8__["default"]]; 2446var createPopper = /*#__PURE__*/(0,_createPopper_js__WEBPACK_IMPORTED_MODULE_9__.popperGenerator)({ 2447 defaultModifiers: defaultModifiers 2448}); // eslint-disable-next-line import/no-unused-modules 2449 2450 // eslint-disable-next-line import/no-unused-modules 2451 2452 // eslint-disable-next-line import/no-unused-modules 2453 2454 2455 2456/***/ }), 2457
vendor: 3,405 bytes, lines 2458-2522
2458/***/ "./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js": 2459/*!***********************************************************************!*\ 2460 !*** ./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js ***! 2461 \***********************************************************************/ 2462/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 2463 2464"use strict"; 2465__webpack_require__.r(__webpack_exports__); 2466/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2467/* harmony export */ "default": () => (/* binding */ computeAutoPlacement) 2468/* harmony export */ }); 2469/* harmony import */ var _getVariation_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getVariation.js */ "./node_modules/@popperjs/core/lib/utils/getVariation.js"); 2470/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); 2471/* harmony import */ var _detectOverflow_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./detectOverflow.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js"); 2472/* harmony import */ var _getBasePlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js"); 2473 2474 2475 2476 2477function computeAutoPlacement(state, options) { 2478 if (options === void 0) { 2479 options = {}; 2480 } 2481 2482 var _options = options, 2483 placement = _options.placement, 2484 boundary = _options.boundary, 2485 rootBoundary = _options.rootBoundary, 2486 padding = _options.padding, 2487 flipVariations = _options.flipVariations, 2488 _options$allowedAutoP = _options.allowedAutoPlacements, 2489 allowedAutoPlacements = _options$allowedAutoP === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.placements : _options$allowedAutoP; 2490 var variation = (0,_getVariation_js__WEBPACK_IMPORTED_MODULE_1__["default"])(placement); 2491 var placements = variation ? flipVariations ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.variationPlacements : _enums_js__WEBPACK_IMPORTED_MODULE_0__.variationPlacements.filter(function (placement) { 2492 return (0,_getVariation_js__WEBPACK_IMPORTED_MODULE_1__["default"])(placement) === variation; 2493 }) : _enums_js__WEBPACK_IMPORTED_MODULE_0__.basePlacements; 2494 var allowedPlacements = placements.filter(function (placement) { 2495 return allowedAutoPlacements.indexOf(placement) >= 0; 2496 }); 2497 2498 if (allowedPlacements.length === 0) { 2499 allowedPlacements = placements; 2500 2501 if (true) { 2502 console.error(['Popper: The `allowedAutoPlacements` option did not allow any', 'placements. Ensure the `placement` option matches the variation', 'of the allowed placements.', 'For example, "auto" cannot be used to allow "bottom-start".', 'Use "auto-start" instead.'].join(' ')); 2503 } 2504 } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions... 2505 2506 2507 var overflows = allowedPlacements.reduce(function (acc, placement) { 2508 acc[placement] = (0,_detectOverflow_js__WEBPACK_IMPORTED_MODULE_2__["default"])(state, { 2509 placement: placement, 2510 boundary: boundary, 2511 rootBoundary: rootBoundary, 2512 padding: padding 2513 })[(0,_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_3__["default"])(placement)]; 2514 return acc; 2515 }, {}); 2516 return Object.keys(overflows).sort(function (a, b) { 2517 return overflows[a] - overflows[b]; 2518 }); 2519} 2520 2521/***/ }), 2522
vendor: 3,194 bytes, lines 2523-2610
2523/***/ "./node_modules/@popperjs/core/lib/utils/computeOffsets.js": 2524/*!*****************************************************************!*\ 2525 !*** ./node_modules/@popperjs/core/lib/utils/computeOffsets.js ***! 2526 \*****************************************************************/ 2527/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 2528 2529"use strict"; 2530__webpack_require__.r(__webpack_exports__); 2531/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2532/* harmony export */ "default": () => (/* binding */ computeOffsets) 2533/* harmony export */ }); 2534/* harmony import */ var _getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js"); 2535/* harmony import */ var _getVariation_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getVariation.js */ "./node_modules/@popperjs/core/lib/utils/getVariation.js"); 2536/* harmony import */ var _getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getMainAxisFromPlacement.js */ "./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js"); 2537/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); 2538 2539 2540 2541 2542function computeOffsets(_ref) { 2543 var reference = _ref.reference, 2544 element = _ref.element, 2545 placement = _ref.placement; 2546 var basePlacement = placement ? (0,_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(placement) : null; 2547 var variation = placement ? (0,_getVariation_js__WEBPACK_IMPORTED_MODULE_1__["default"])(placement) : null; 2548 var commonX = reference.x + reference.width / 2 - element.width / 2; 2549 var commonY = reference.y + reference.height / 2 - element.height / 2; 2550 var offsets; 2551 2552 switch (basePlacement) { 2553 case _enums_js__WEBPACK_IMPORTED_MODULE_2__.top: 2554 offsets = { 2555 x: commonX, 2556 y: reference.y - element.height 2557 }; 2558 break; 2559 2560 case _enums_js__WEBPACK_IMPORTED_MODULE_2__.bottom: 2561 offsets = { 2562 x: commonX, 2563 y: reference.y + reference.height 2564 }; 2565 break; 2566 2567 case _enums_js__WEBPACK_IMPORTED_MODULE_2__.right: 2568 offsets = { 2569 x: reference.x + reference.width, 2570 y: commonY 2571 }; 2572 break; 2573 2574 case _enums_js__WEBPACK_IMPORTED_MODULE_2__.left: 2575 offsets = { 2576 x: reference.x - element.width, 2577 y: commonY 2578 }; 2579 break; 2580 2581 default: 2582 offsets = { 2583 x: reference.x, 2584 y: reference.y 2585 }; 2586 } 2587 2588 var mainAxis = basePlacement ? (0,_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_3__["default"])(basePlacement) : null; 2589 2590 if (mainAxis != null) { 2591 var len = mainAxis === 'y' ? 'height' : 'width'; 2592 2593 switch (variation) { 2594 case _enums_js__WEBPACK_IMPORTED_MODULE_2__.start: 2595 offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2); 2596 break; 2597 2598 case _enums_js__WEBPACK_IMPORTED_MODULE_2__.end: 2599 offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2); 2600 break; 2601 2602 default: 2603 } 2604 } 2605 2606 return offsets; 2607} 2608 2609/***/ }), 2610
vendor: 850 bytes, lines 2611-2639
2611/***/ "./node_modules/@popperjs/core/lib/utils/debounce.js": 2612/*!***********************************************************!*\ 2613 !*** ./node_modules/@popperjs/core/lib/utils/debounce.js ***! 2614 \***********************************************************/ 2615/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 2616 2617"use strict"; 2618__webpack_require__.r(__webpack_exports__); 2619/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2620/* harmony export */ "default": () => (/* binding */ debounce) 2621/* harmony export */ }); 2622function debounce(fn) { 2623 var pending; 2624 return function () { 2625 if (!pending) { 2626 pending = new Promise(function (resolve) { 2627 Promise.resolve().then(function () { 2628 pending = undefined; 2629 resolve(fn()); 2630 }); 2631 }); 2632 } 2633 2634 return pending; 2635 }; 2636} 2637 2638/***/ }), 2639
vendor: 6,087 bytes, lines 2640-2725
2640/***/ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js": 2641/*!*****************************************************************!*\ 2642 !*** ./node_modules/@popperjs/core/lib/utils/detectOverflow.js ***! 2643 \*****************************************************************/ 2644/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 2645 2646"use strict"; 2647__webpack_require__.r(__webpack_exports__); 2648/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2649/* harmony export */ "default": () => (/* binding */ detectOverflow) 2650/* harmony export */ }); 2651/* harmony import */ var _dom_utils_getClippingRect_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../dom-utils/getClippingRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js"); 2652/* harmony import */ var _dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../dom-utils/getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js"); 2653/* harmony import */ var _dom_utils_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../dom-utils/getBoundingClientRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js"); 2654/* harmony import */ var _computeOffsets_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./computeOffsets.js */ "./node_modules/@popperjs/core/lib/utils/computeOffsets.js"); 2655/* harmony import */ var _rectToClientRect_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./rectToClientRect.js */ "./node_modules/@popperjs/core/lib/utils/rectToClientRect.js"); 2656/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); 2657/* harmony import */ var _dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../dom-utils/instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"); 2658/* harmony import */ var _mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mergePaddingObject.js */ "./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js"); 2659/* harmony import */ var _expandToHashMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./expandToHashMap.js */ "./node_modules/@popperjs/core/lib/utils/expandToHashMap.js"); 2660 2661 2662 2663 2664 2665 2666 2667 2668 // eslint-disable-next-line import/no-unused-modules 2669 2670function detectOverflow(state, options) { 2671 if (options === void 0) { 2672 options = {}; 2673 } 2674 2675 var _options = options, 2676 _options$placement = _options.placement, 2677 placement = _options$placement === void 0 ? state.placement : _options$placement, 2678 _options$boundary = _options.boundary, 2679 boundary = _options$boundary === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.clippingParents : _options$boundary, 2680 _options$rootBoundary = _options.rootBoundary, 2681 rootBoundary = _options$rootBoundary === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.viewport : _options$rootBoundary, 2682 _options$elementConte = _options.elementContext, 2683 elementContext = _options$elementConte === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper : _options$elementConte, 2684 _options$altBoundary = _options.altBoundary, 2685 altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary, 2686 _options$padding = _options.padding, 2687 padding = _options$padding === void 0 ? 0 : _options$padding; 2688 var paddingObject = (0,_mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_1__["default"])(typeof padding !== 'number' ? padding : (0,_expandToHashMap_js__WEBPACK_IMPORTED_MODULE_2__["default"])(padding, _enums_js__WEBPACK_IMPORTED_MODULE_0__.basePlacements)); 2689 var altContext = elementContext === _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.reference : _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper; 2690 var popperRect = state.rects.popper; 2691 var element = state.elements[altBoundary ? altContext : elementContext]; 2692 var clippingClientRect = (0,_dom_utils_getClippingRect_js__WEBPACK_IMPORTED_MODULE_3__["default"])((0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isElement)(element) ? element : element.contextElement || (0,_dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_5__["default"])(state.elements.popper), boundary, rootBoundary); 2693 var referenceClientRect = (0,_dom_utils_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_6__["default"])(state.elements.reference); 2694 var popperOffsets = (0,_computeOffsets_js__WEBPACK_IMPORTED_MODULE_7__["default"])({ 2695 reference: referenceClientRect, 2696 element: popperRect, 2697 strategy: 'absolute', 2698 placement: placement 2699 }); 2700 var popperClientRect = (0,_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_8__["default"])(Object.assign({}, popperRect, popperOffsets)); 2701 var elementClientRect = elementContext === _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect 2702 // 0 or negative = within the clipping rect 2703 2704 var overflowOffsets = { 2705 top: clippingClientRect.top - elementClientRect.top + paddingObject.top, 2706 bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom, 2707 left: clippingClientRect.left - elementClientRect.left + paddingObject.left, 2708 right: elementClientRect.right - clippingClientRect.right + paddingObject.right 2709 }; 2710 var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element 2711 2712 if (elementContext === _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper && offsetData) { 2713 var offset = offsetData[placement]; 2714 Object.keys(overflowOffsets).forEach(function (key) { 2715 var multiply = [_enums_js__WEBPACK_IMPORTED_MODULE_0__.right, _enums_js__WEBPACK_IMPORTED_MODULE_0__.bottom].indexOf(key) >= 0 ? 1 : -1; 2716 var axis = [_enums_js__WEBPACK_IMPORTED_MODULE_0__.top, _enums_js__WEBPACK_IMPORTED_MODULE_0__.bottom].indexOf(key) >= 0 ? 'y' : 'x'; 2717 overflowOffsets[key] += offset[axis] * multiply; 2718 }); 2719 } 2720 2721 return overflowOffsets; 2722} 2723 2724/***/ }), 2725
vendor: 742 bytes, lines 2726-2745
2726/***/ "./node_modules/@popperjs/core/lib/utils/expandToHashMap.js": 2727/*!******************************************************************!*\ 2728 !*** ./node_modules/@popperjs/core/lib/utils/expandToHashMap.js ***! 2729 \******************************************************************/ 2730/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 2731 2732"use strict"; 2733__webpack_require__.r(__webpack_exports__); 2734/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2735/* harmony export */ "default": () => (/* binding */ expandToHashMap) 2736/* harmony export */ }); 2737function expandToHashMap(value, keys) { 2738 return keys.reduce(function (hashMap, key) { 2739 hashMap[key] = value; 2740 return hashMap; 2741 }, {}); 2742} 2743 2744/***/ }), 2745
vendor: 824 bytes, lines 2746-2768
2746/***/ "./node_modules/@popperjs/core/lib/utils/format.js": 2747/*!*********************************************************!*\ 2748 !*** ./node_modules/@popperjs/core/lib/utils/format.js ***! 2749 \*********************************************************/ 2750/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 2751 2752"use strict"; 2753__webpack_require__.r(__webpack_exports__); 2754/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2755/* harmony export */ "default": () => (/* binding */ format) 2756/* harmony export */ }); 2757function format(str) { 2758 for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { 2759 args[_key - 1] = arguments[_key]; 2760 } 2761 2762 return [].concat(args).reduce(function (p, c) { 2763 return p.replace(/%s/, c); 2764 }, str); 2765} 2766 2767/***/ }), 2768
vendor: 637 bytes, lines 2769-2785
2769/***/ "./node_modules/@popperjs/core/lib/utils/getAltAxis.js": 2770/*!*************************************************************!*\ 2771 !*** ./node_modules/@popperjs/core/lib/utils/getAltAxis.js ***! 2772 \*************************************************************/ 2773/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 2774 2775"use strict"; 2776__webpack_require__.r(__webpack_exports__); 2777/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2778/* harmony export */ "default": () => (/* binding */ getAltAxis) 2779/* harmony export */ }); 2780function getAltAxis(axis) { 2781 return axis === 'x' ? 'y' : 'x'; 2782} 2783 2784/***/ }), 2785
vendor: 678 bytes, lines 2786-2803
2786/***/ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js": 2787/*!*******************************************************************!*\ 2788 !*** ./node_modules/@popperjs/core/lib/utils/getBasePlacement.js ***! 2789 \*******************************************************************/ 2790/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 2791 2792"use strict"; 2793__webpack_require__.r(__webpack_exports__); 2794/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2795/* harmony export */ "default": () => (/* binding */ getBasePlacement) 2796/* harmony export */ }); 2797 2798function getBasePlacement(placement) { 2799 return placement.split('-')[0]; 2800} 2801 2802/***/ }), 2803
vendor: 715 bytes, lines 2804-2825
2804/***/ "./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js": 2805/*!*********************************************************************!*\ 2806 !*** ./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js ***! 2807 \*********************************************************************/ 2808/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 2809 2810"use strict"; 2811__webpack_require__.r(__webpack_exports__); 2812/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2813/* harmony export */ "default": () => (/* binding */ getFreshSideObject) 2814/* harmony export */ }); 2815function getFreshSideObject() { 2816 return { 2817 top: 0, 2818 right: 0, 2819 bottom: 0, 2820 left: 0 2821 }; 2822} 2823 2824/***/ }), 2825
vendor: 755 bytes, lines 2826-2842
2826/***/ "./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js": 2827/*!***************************************************************************!*\ 2828 !*** ./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js ***! 2829 \***************************************************************************/ 2830/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 2831 2832"use strict"; 2833__webpack_require__.r(__webpack_exports__); 2834/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2835/* harmony export */ "default": () => (/* binding */ getMainAxisFromPlacement) 2836/* harmony export */ }); 2837function getMainAxisFromPlacement(placement) { 2838 return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y'; 2839} 2840 2841/***/ }), 2842
vendor: 856 bytes, lines 2843-2867
2843/***/ "./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js": 2844/*!***********************************************************************!*\ 2845 !*** ./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js ***! 2846 \***********************************************************************/ 2847/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 2848 2849"use strict"; 2850__webpack_require__.r(__webpack_exports__); 2851/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2852/* harmony export */ "default": () => (/* binding */ getOppositePlacement) 2853/* harmony export */ }); 2854var hash = { 2855 left: 'right', 2856 right: 'left', 2857 bottom: 'top', 2858 top: 'bottom' 2859}; 2860function getOppositePlacement(placement) { 2861 return placement.replace(/left|right|bottom|top/g, function (matched) { 2862 return hash[matched]; 2863 }); 2864} 2865 2866/***/ }), 2867
vendor: 862 bytes, lines 2868-2890
2868/***/ "./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js": 2869/*!********************************************************************************!*\ 2870 !*** ./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js ***! 2871 \********************************************************************************/ 2872/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 2873 2874"use strict"; 2875__webpack_require__.r(__webpack_exports__); 2876/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2877/* harmony export */ "default": () => (/* binding */ getOppositeVariationPlacement) 2878/* harmony export */ }); 2879var hash = { 2880 start: 'end', 2881 end: 'start' 2882}; 2883function getOppositeVariationPlacement(placement) { 2884 return placement.replace(/start|end/g, function (matched) { 2885 return hash[matched]; 2886 }); 2887} 2888 2889/***/ }), 2890
vendor: 653 bytes, lines 2891-2907
2891/***/ "./node_modules/@popperjs/core/lib/utils/getVariation.js": 2892/*!***************************************************************!*\ 2893 !*** ./node_modules/@popperjs/core/lib/utils/getVariation.js ***! 2894 \***************************************************************/ 2895/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 2896 2897"use strict"; 2898__webpack_require__.r(__webpack_exports__); 2899/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2900/* harmony export */ "default": () => (/* binding */ getVariation) 2901/* harmony export */ }); 2902function getVariation(placement) { 2903 return placement.split('-')[1]; 2904} 2905 2906/***/ }), 2907
vendor: 719 bytes, lines 2908-2926
2908/***/ "./node_modules/@popperjs/core/lib/utils/math.js": 2909/*!*******************************************************!*\ 2910 !*** ./node_modules/@popperjs/core/lib/utils/math.js ***! 2911 \*******************************************************/ 2912/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 2913 2914"use strict"; 2915__webpack_require__.r(__webpack_exports__); 2916/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2917/* harmony export */ "max": () => (/* binding */ max), 2918/* harmony export */ "min": () => (/* binding */ min), 2919/* harmony export */ "round": () => (/* binding */ round) 2920/* harmony export */ }); 2921var max = Math.max; 2922var min = Math.min; 2923var round = Math.round; 2924 2925/***/ }), 2926
vendor: 1,087 bytes, lines 2927-2954
2927/***/ "./node_modules/@popperjs/core/lib/utils/mergeByName.js": 2928/*!**************************************************************!*\ 2929 !*** ./node_modules/@popperjs/core/lib/utils/mergeByName.js ***! 2930 \**************************************************************/ 2931/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 2932 2933"use strict"; 2934__webpack_require__.r(__webpack_exports__); 2935/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2936/* harmony export */ "default": () => (/* binding */ mergeByName) 2937/* harmony export */ }); 2938function mergeByName(modifiers) { 2939 var merged = modifiers.reduce(function (merged, current) { 2940 var existing = merged[current.name]; 2941 merged[current.name] = existing ? Object.assign({}, existing, current, { 2942 options: Object.assign({}, existing.options, current.options), 2943 data: Object.assign({}, existing.data, current.data) 2944 }) : current; 2945 return merged; 2946 }, {}); // IE11 does not support Object.values 2947 2948 return Object.keys(merged).map(function (key) { 2949 return merged[key]; 2950 }); 2951} 2952 2953/***/ }), 2954
vendor: 969 bytes, lines 2955-2973
2955/***/ "./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js": 2956/*!*********************************************************************!*\ 2957 !*** ./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js ***! 2958 \*********************************************************************/ 2959/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 2960 2961"use strict"; 2962__webpack_require__.r(__webpack_exports__); 2963/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2964/* harmony export */ "default": () => (/* binding */ mergePaddingObject) 2965/* harmony export */ }); 2966/* harmony import */ var _getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getFreshSideObject.js */ "./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js"); 2967 2968function mergePaddingObject(paddingObject) { 2969 return Object.assign({}, (0,_getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_0__["default"])(), paddingObject); 2970} 2971 2972/***/ }), 2973
vendor: 1,964 bytes, lines 2974-3032
2974/***/ "./node_modules/@popperjs/core/lib/utils/orderModifiers.js": 2975/*!*****************************************************************!*\ 2976 !*** ./node_modules/@popperjs/core/lib/utils/orderModifiers.js ***! 2977 \*****************************************************************/ 2978/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 2979 2980"use strict"; 2981__webpack_require__.r(__webpack_exports__); 2982/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2983/* harmony export */ "default": () => (/* binding */ orderModifiers) 2984/* harmony export */ }); 2985/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); 2986 // source: https://stackoverflow.com/questions/49875255 2987 2988function order(modifiers) { 2989 var map = new Map(); 2990 var visited = new Set(); 2991 var result = []; 2992 modifiers.forEach(function (modifier) { 2993 map.set(modifier.name, modifier); 2994 }); // On visiting object, check for its dependencies and visit them recursively 2995 2996 function sort(modifier) { 2997 visited.add(modifier.name); 2998 var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []); 2999 requires.forEach(function (dep) { 3000 if (!visited.has(dep)) { 3001 var depModifier = map.get(dep); 3002 3003 if (depModifier) { 3004 sort(depModifier); 3005 } 3006 } 3007 }); 3008 result.push(modifier); 3009 } 3010 3011 modifiers.forEach(function (modifier) { 3012 if (!visited.has(modifier.name)) { 3013 // check for visited object 3014 sort(modifier); 3015 } 3016 }); 3017 return result; 3018} 3019 3020function orderModifiers(modifiers) { 3021 // order based on dependencies 3022 var orderedModifiers = order(modifiers); // order based on phase 3023 3024 return _enums_js__WEBPACK_IMPORTED_MODULE_0__.modifierPhases.reduce(function (acc, phase) { 3025 return acc.concat(orderedModifiers.filter(function (modifier) { 3026 return modifier.phase === phase; 3027 })); 3028 }, []); 3029} 3030 3031/***/ }), 3032
vendor: 779 bytes, lines 3033-3054
3033/***/ "./node_modules/@popperjs/core/lib/utils/rectToClientRect.js": 3034/*!*******************************************************************!*\ 3035 !*** ./node_modules/@popperjs/core/lib/utils/rectToClientRect.js ***! 3036 \*******************************************************************/ 3037/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 3038 3039"use strict"; 3040__webpack_require__.r(__webpack_exports__); 3041/* harmony export */ __webpack_require__.d(__webpack_exports__, { 3042/* harmony export */ "default": () => (/* binding */ rectToClientRect) 3043/* harmony export */ }); 3044function rectToClientRect(rect) { 3045 return Object.assign({}, rect, { 3046 left: rect.x, 3047 top: rect.y, 3048 right: rect.x + rect.width, 3049 bottom: rect.y + rect.height 3050 }); 3051} 3052 3053/***/ }), 3054
vendor: 800 bytes, lines 3055-3079
3055/***/ "./node_modules/@popperjs/core/lib/utils/uniqueBy.js": 3056/*!***********************************************************!*\ 3057 !*** ./node_modules/@popperjs/core/lib/utils/uniqueBy.js ***! 3058 \***********************************************************/ 3059/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 3060 3061"use strict"; 3062__webpack_require__.r(__webpack_exports__); 3063/* harmony export */ __webpack_require__.d(__webpack_exports__, { 3064/* harmony export */ "default": () => (/* binding */ uniqueBy) 3065/* harmony export */ }); 3066function uniqueBy(arr, fn) { 3067 var identifiers = new Set(); 3068 return arr.filter(function (item) { 3069 var identifier = fn(item); 3070 3071 if (!identifiers.has(identifier)) { 3072 identifiers.add(identifier); 3073 return true; 3074 } 3075 }); 3076} 3077 3078/***/ }), 3079
vendor: 4,550 bytes, lines 3080-3176
3080/***/ "./node_modules/@popperjs/core/lib/utils/validateModifiers.js": 3081/*!********************************************************************!*\ 3082 !*** ./node_modules/@popperjs/core/lib/utils/validateModifiers.js ***! 3083 \********************************************************************/ 3084/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 3085 3086"use strict"; 3087__webpack_require__.r(__webpack_exports__); 3088/* harmony export */ __webpack_require__.d(__webpack_exports__, { 3089/* harmony export */ "default": () => (/* binding */ validateModifiers) 3090/* harmony export */ }); 3091/* harmony import */ var _format_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./format.js */ "./node_modules/@popperjs/core/lib/utils/format.js"); 3092/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js"); 3093 3094 3095var INVALID_MODIFIER_ERROR = 'Popper: modifier "%s" provided an invalid %s property, expected %s but got %s'; 3096var MISSING_DEPENDENCY_ERROR = 'Popper: modifier "%s" requires "%s", but "%s" modifier is not available'; 3097var VALID_PROPERTIES = ['name', 'enabled', 'phase', 'fn', 'effect', 'requires', 'options']; 3098function validateModifiers(modifiers) { 3099 modifiers.forEach(function (modifier) { 3100 [].concat(Object.keys(modifier), VALID_PROPERTIES) // IE11-compatible replacement for `new Set(iterable)` 3101 .filter(function (value, index, self) { 3102 return self.indexOf(value) === index; 3103 }).forEach(function (key) { 3104 switch (key) { 3105 case 'name': 3106 if (typeof modifier.name !== 'string') { 3107 console.error((0,_format_js__WEBPACK_IMPORTED_MODULE_0__["default"])(INVALID_MODIFIER_ERROR, String(modifier.name), '"name"', '"string"', "\"" + String(modifier.name) + "\"")); 3108 } 3109 3110 break; 3111 3112 case 'enabled': 3113 if (typeof modifier.enabled !== 'boolean') { 3114 console.error((0,_format_js__WEBPACK_IMPORTED_MODULE_0__["default"])(INVALID_MODIFIER_ERROR, modifier.name, '"enabled"', '"boolean"', "\"" + String(modifier.enabled) + "\"")); 3115 } 3116 3117 break; 3118 3119 case 'phase': 3120 if (_enums_js__WEBPACK_IMPORTED_MODULE_1__.modifierPhases.indexOf(modifier.phase) < 0) { 3121 console.error((0,_format_js__WEBPACK_IMPORTED_MODULE_0__["default"])(INVALID_MODIFIER_ERROR, modifier.name, '"phase"', "either " + _enums_js__WEBPACK_IMPORTED_MODULE_1__.modifierPhases.join(', '), "\"" + String(modifier.phase) + "\"")); 3122 } 3123 3124 break; 3125 3126 case 'fn': 3127 if (typeof modifier.fn !== 'function') { 3128 console.error((0,_format_js__WEBPACK_IMPORTED_MODULE_0__["default"])(INVALID_MODIFIER_ERROR, modifier.name, '"fn"', '"function"', "\"" + String(modifier.fn) + "\"")); 3129 } 3130 3131 break; 3132 3133 case 'effect': 3134 if (modifier.effect != null && typeof modifier.effect !== 'function') { 3135 console.error((0,_format_js__WEBPACK_IMPORTED_MODULE_0__["default"])(INVALID_MODIFIER_ERROR, modifier.name, '"effect"', '"function"', "\"" + String(modifier.fn) + "\"")); 3136 } 3137 3138 break; 3139 3140 case 'requires': 3141 if (modifier.requires != null && !Array.isArray(modifier.requires)) { 3142 console.error((0,_format_js__WEBPACK_IMPORTED_MODULE_0__["default"])(INVALID_MODIFIER_ERROR, modifier.name, '"requires"', '"array"', "\"" + String(modifier.requires) + "\"")); 3143 } 3144 3145 break; 3146 3147 case 'requiresIfExists': 3148 if (!Array.isArray(modifier.requiresIfExists)) { 3149 console.error((0,_format_js__WEBPACK_IMPORTED_MODULE_0__["default"])(INVALID_MODIFIER_ERROR, modifier.name, '"requiresIfExists"', '"array"', "\"" + String(modifier.requiresIfExists) + "\"")); 3150 } 3151 3152 break; 3153 3154 case 'options': 3155 case 'data': 3156 break; 3157 3158 default: 3159 console.error("PopperJS: an invalid property has been provided to the \"" + modifier.name + "\" modifier, valid properties are " + VALID_PROPERTIES.map(function (s) { 3160 return "\"" + s + "\""; 3161 }).join(', ') + "; but \"" + key + "\" was provided."); 3162 } 3163 3164 modifier.requires && modifier.requires.forEach(function (requirement) { 3165 if (modifiers.find(function (mod) { 3166 return mod.name === requirement; 3167 }) == null) { 3168 console.error((0,_format_js__WEBPACK_IMPORTED_MODULE_0__["default"])(MISSING_DEPENDENCY_ERROR, String(modifier.name), requirement, requirement)); 3169 } 3170 }); 3171 }); 3172 }); 3173} 3174 3175/***/ }), 3176
vendor: 1,050 bytes, lines 3177-3200
3177/***/ "./node_modules/@popperjs/core/lib/utils/within.js": 3178/*!*********************************************************!*\ 3179 !*** ./node_modules/@popperjs/core/lib/utils/within.js ***! 3180 \*********************************************************/ 3181/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 3182 3183"use strict"; 3184__webpack_require__.r(__webpack_exports__); 3185/* harmony export */ __webpack_require__.d(__webpack_exports__, { 3186/* harmony export */ "within": () => (/* binding */ within), 3187/* harmony export */ "withinMaxClamp": () => (/* binding */ withinMaxClamp) 3188/* harmony export */ }); 3189/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./math.js */ "./node_modules/@popperjs/core/lib/utils/math.js"); 3190 3191function within(min, value, max) { 3192 return (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.max)(min, (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.min)(value, max)); 3193} 3194function withinMaxClamp(min, value, max) { 3195 var v = within(min, value, max); 3196 return v > max ? max : v; 3197} 3198 3199/***/ }), 3200
vendor: 342 bytes, lines 3201-3210
3201/***/ "./node_modules/axios/index.js": 3202/*!*************************************!*\ 3203 !*** ./node_modules/axios/index.js ***! 3204 \*************************************/ 3205/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 3206 3207module.exports = __webpack_require__(/*! ./lib/axios */ "./node_modules/axios/lib/axios.js"); 3208 3209/***/ }), 3210
vendor: 7,873 bytes, lines 3211-3433
3211/***/ "./node_modules/axios/lib/adapters/xhr.js": 3212/*!************************************************!*\ 3213 !*** ./node_modules/axios/lib/adapters/xhr.js ***! 3214 \************************************************/ 3215/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 3216 3217"use strict"; 3218 3219 3220var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 3221var settle = __webpack_require__(/*! ./../core/settle */ "./node_modules/axios/lib/core/settle.js"); 3222var cookies = __webpack_require__(/*! ./../helpers/cookies */ "./node_modules/axios/lib/helpers/cookies.js"); 3223var buildURL = __webpack_require__(/*! ./../helpers/buildURL */ "./node_modules/axios/lib/helpers/buildURL.js"); 3224var buildFullPath = __webpack_require__(/*! ../core/buildFullPath */ "./node_modules/axios/lib/core/buildFullPath.js"); 3225var parseHeaders = __webpack_require__(/*! ./../helpers/parseHeaders */ "./node_modules/axios/lib/helpers/parseHeaders.js"); 3226var isURLSameOrigin = __webpack_require__(/*! ./../helpers/isURLSameOrigin */ "./node_modules/axios/lib/helpers/isURLSameOrigin.js"); 3227var createError = __webpack_require__(/*! ../core/createError */ "./node_modules/axios/lib/core/createError.js"); 3228var defaults = __webpack_require__(/*! ../defaults */ "./node_modules/axios/lib/defaults.js"); 3229var Cancel = __webpack_require__(/*! ../cancel/Cancel */ "./node_modules/axios/lib/cancel/Cancel.js"); 3230 3231module.exports = function xhrAdapter(config) { 3232 return new Promise(function dispatchXhrRequest(resolve, reject) { 3233 var requestData = config.data; 3234 var requestHeaders = config.headers; 3235 var responseType = config.responseType; 3236 var onCanceled; 3237 function done() { 3238 if (config.cancelToken) { 3239 config.cancelToken.unsubscribe(onCanceled); 3240 } 3241 3242 if (config.signal) { 3243 config.signal.removeEventListener('abort', onCanceled); 3244 } 3245 } 3246 3247 if (utils.isFormData(requestData)) { 3248 delete requestHeaders['Content-Type']; // Let the browser set it 3249 } 3250 3251 var request = new XMLHttpRequest(); 3252 3253 // HTTP basic authentication 3254 if (config.auth) { 3255 var username = config.auth.username || ''; 3256 var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : ''; 3257 requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password); 3258 } 3259 3260 var fullPath = buildFullPath(config.baseURL, config.url); 3261 request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true); 3262 3263 // Set the request timeout in MS 3264 request.timeout = config.timeout; 3265 3266 function onloadend() { 3267 if (!request) { 3268 return; 3269 } 3270 // Prepare the response 3271 var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null; 3272 var responseData = !responseType || responseType === 'text' || responseType === 'json' ? 3273 request.responseText : request.response; 3274 var response = { 3275 data: responseData, 3276 status: request.status, 3277 statusText: request.statusText, 3278 headers: responseHeaders, 3279 config: config, 3280 request: request 3281 }; 3282 3283 settle(function _resolve(value) { 3284 resolve(value); 3285 done(); 3286 }, function _reject(err) { 3287 reject(err); 3288 done(); 3289 }, response); 3290 3291 // Clean up request 3292 request = null; 3293 } 3294 3295 if ('onloadend' in request) { 3296 // Use onloadend if available 3297 request.onloadend = onloadend; 3298 } else { 3299 // Listen for ready state to emulate onloadend 3300 request.onreadystatechange = function handleLoad() { 3301 if (!request || request.readyState !== 4) { 3302 return; 3303 } 3304 3305 // The request errored out and we didn't get a response, this will be 3306 // handled by onerror instead 3307 // With one exception: request that using file: protocol, most browsers 3308 // will return status as 0 even though it's a successful request 3309 if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) { 3310 return; 3311 } 3312 // readystate handler is calling before onerror or ontimeout handlers, 3313 // so we should call onloadend on the next 'tick' 3314 setTimeout(onloadend); 3315 }; 3316 } 3317 3318 // Handle browser request cancellation (as opposed to a manual cancellation) 3319 request.onabort = function handleAbort() { 3320 if (!request) { 3321 return; 3322 } 3323 3324 reject(createError('Request aborted', config, 'ECONNABORTED', request)); 3325 3326 // Clean up request 3327 request = null; 3328 }; 3329 3330 // Handle low level network errors 3331 request.onerror = function handleError() { 3332 // Real errors are hidden from us by the browser 3333 // onerror should only fire if it's a network error 3334 reject(createError('Network Error', config, null, request)); 3335 3336 // Clean up request 3337 request = null; 3338 }; 3339 3340 // Handle timeout 3341 request.ontimeout = function handleTimeout() { 3342 var timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded'; 3343 var transitional = config.transitional || defaults.transitional; 3344 if (config.timeoutErrorMessage) { 3345 timeoutErrorMessage = config.timeoutErrorMessage; 3346 } 3347 reject(createError( 3348 timeoutErrorMessage, 3349 config, 3350 transitional.clarifyTimeoutError ? 'ETIMEDOUT' : 'ECONNABORTED', 3351 request)); 3352 3353 // Clean up request 3354 request = null; 3355 }; 3356 3357 // Add xsrf header 3358 // This is only done if running in a standard browser environment. 3359 // Specifically not if we're in a web worker, or react-native. 3360 if (utils.isStandardBrowserEnv()) { 3361 // Add xsrf header 3362 var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ? 3363 cookies.read(config.xsrfCookieName) : 3364 undefined; 3365 3366 if (xsrfValue) { 3367 requestHeaders[config.xsrfHeaderName] = xsrfValue; 3368 } 3369 } 3370 3371 // Add headers to the request 3372 if ('setRequestHeader' in request) { 3373 utils.forEach(requestHeaders, function setRequestHeader(val, key) { 3374 if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') { 3375 // Remove Content-Type if data is undefined 3376 delete requestHeaders[key]; 3377 } else { 3378 // Otherwise add header to the request 3379 request.setRequestHeader(key, val); 3380 } 3381 }); 3382 } 3383 3384 // Add withCredentials to request if needed 3385 if (!utils.isUndefined(config.withCredentials)) { 3386 request.withCredentials = !!config.withCredentials; 3387 } 3388 3389 // Add responseType to request if needed 3390 if (responseType && responseType !== 'json') { 3391 request.responseType = config.responseType; 3392 } 3393 3394 // Handle progress if needed 3395 if (typeof config.onDownloadProgress === 'function') { 3396 request.addEventListener('progress', config.onDownloadProgress); 3397 } 3398 3399 // Not all browsers support upload events 3400 if (typeof config.onUploadProgress === 'function' && request.upload) { 3401 request.upload.addEventListener('progress', config.onUploadProgress); 3402 } 3403 3404 if (config.cancelToken || config.signal) { 3405 // Handle cancellation 3406 // eslint-disable-next-line func-names 3407 onCanceled = function(cancel) { 3408 if (!request) { 3409 return; 3410 } 3411 reject(!cancel || (cancel && cancel.type) ? new Cancel('canceled') : cancel); 3412 request.abort(); 3413 request = null; 3414 }; 3415 3416 config.cancelToken && config.cancelToken.subscribe(onCanceled); 3417 if (config.signal) { 3418 config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled); 3419 } 3420 } 3421 3422 if (!requestData) { 3423 requestData = null; 3424 } 3425 3426 // Send the request 3427 request.send(requestData); 3428 }); 3429}; 3430 3431 3432/***/ }), 3433
vendor: 2,498 bytes, lines 3434-3501
3434/***/ "./node_modules/axios/lib/axios.js": 3435/*!*****************************************!*\ 3436 !*** ./node_modules/axios/lib/axios.js ***! 3437 \*****************************************/ 3438/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 3439 3440"use strict"; 3441 3442 3443var utils = __webpack_require__(/*! ./utils */ "./node_modules/axios/lib/utils.js"); 3444var bind = __webpack_require__(/*! ./helpers/bind */ "./node_modules/axios/lib/helpers/bind.js"); 3445var Axios = __webpack_require__(/*! ./core/Axios */ "./node_modules/axios/lib/core/Axios.js"); 3446var mergeConfig = __webpack_require__(/*! ./core/mergeConfig */ "./node_modules/axios/lib/core/mergeConfig.js"); 3447var defaults = __webpack_require__(/*! ./defaults */ "./node_modules/axios/lib/defaults.js"); 3448 3449/** 3450 * Create an instance of Axios 3451 * 3452 * @param {Object} defaultConfig The default config for the instance 3453 * @return {Axios} A new instance of Axios 3454 */ 3455function createInstance(defaultConfig) { 3456 var context = new Axios(defaultConfig); 3457 var instance = bind(Axios.prototype.request, context); 3458 3459 // Copy axios.prototype to instance 3460 utils.extend(instance, Axios.prototype, context); 3461 3462 // Copy context to instance 3463 utils.extend(instance, context); 3464 3465 // Factory for creating new instances 3466 instance.create = function create(instanceConfig) { 3467 return createInstance(mergeConfig(defaultConfig, instanceConfig)); 3468 }; 3469 3470 return instance; 3471} 3472 3473// Create the default instance to be exported 3474var axios = createInstance(defaults); 3475 3476// Expose Axios class to allow class inheritance 3477axios.Axios = Axios; 3478 3479// Expose Cancel & CancelToken 3480axios.Cancel = __webpack_require__(/*! ./cancel/Cancel */ "./node_modules/axios/lib/cancel/Cancel.js"); 3481axios.CancelToken = __webpack_require__(/*! ./cancel/CancelToken */ "./node_modules/axios/lib/cancel/CancelToken.js"); 3482axios.isCancel = __webpack_require__(/*! ./cancel/isCancel */ "./node_modules/axios/lib/cancel/isCancel.js"); 3483axios.VERSION = (__webpack_require__(/*! ./env/data */ "./node_modules/axios/lib/env/data.js").version); 3484 3485// Expose all/spread 3486axios.all = function all(promises) { 3487 return Promise.all(promises); 3488}; 3489axios.spread = __webpack_require__(/*! ./helpers/spread */ "./node_modules/axios/lib/helpers/spread.js"); 3490 3491// Expose isAxiosError 3492axios.isAxiosError = __webpack_require__(/*! ./helpers/isAxiosError */ "./node_modules/axios/lib/helpers/isAxiosError.js"); 3493 3494module.exports = axios; 3495 3496// Allow use of default import syntax in TypeScript 3497module.exports["default"] = axios; 3498 3499 3500/***/ }), 3501
vendor: 636 bytes, lines 3502-3531
3502/***/ "./node_modules/axios/lib/cancel/Cancel.js": 3503/*!*************************************************!*\ 3504 !*** ./node_modules/axios/lib/cancel/Cancel.js ***! 3505 \*************************************************/ 3506/***/ ((module) => { 3507 3508"use strict"; 3509 3510 3511/** 3512 * A `Cancel` is an object that is thrown when an operation is canceled. 3513 * 3514 * @class 3515 * @param {string=} message The message. 3516 */ 3517function Cancel(message) { 3518 this.message = message; 3519} 3520 3521Cancel.prototype.toString = function toString() { 3522 return 'Cancel' + (this.message ? ': ' + this.message : ''); 3523}; 3524 3525Cancel.prototype.__CANCEL__ = true; 3526 3527module.exports = Cancel; 3528 3529 3530/***/ }), 3531
vendor: 2,848 bytes, lines 3532-3661
3532/***/ "./node_modules/axios/lib/cancel/CancelToken.js": 3533/*!******************************************************!*\ 3534 !*** ./node_modules/axios/lib/cancel/CancelToken.js ***! 3535 \******************************************************/ 3536/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 3537 3538"use strict"; 3539 3540 3541var Cancel = __webpack_require__(/*! ./Cancel */ "./node_modules/axios/lib/cancel/Cancel.js"); 3542 3543/** 3544 * A `CancelToken` is an object that can be used to request cancellation of an operation. 3545 * 3546 * @class 3547 * @param {Function} executor The executor function. 3548 */ 3549function CancelToken(executor) { 3550 if (typeof executor !== 'function') { 3551 throw new TypeError('executor must be a function.'); 3552 } 3553 3554 var resolvePromise; 3555 3556 this.promise = new Promise(function promiseExecutor(resolve) { 3557 resolvePromise = resolve; 3558 }); 3559 3560 var token = this; 3561 3562 // eslint-disable-next-line func-names 3563 this.promise.then(function(cancel) { 3564 if (!token._listeners) return; 3565 3566 var i; 3567 var l = token._listeners.length; 3568 3569 for (i = 0; i < l; i++) { 3570 token._listeners[i](cancel); 3571 } 3572 token._listeners = null; 3573 }); 3574 3575 // eslint-disable-next-line func-names 3576 this.promise.then = function(onfulfilled) { 3577 var _resolve; 3578 // eslint-disable-next-line func-names 3579 var promise = new Promise(function(resolve) { 3580 token.subscribe(resolve); 3581 _resolve = resolve; 3582 }).then(onfulfilled); 3583 3584 promise.cancel = function reject() { 3585 token.unsubscribe(_resolve); 3586 }; 3587 3588 return promise; 3589 }; 3590 3591 executor(function cancel(message) { 3592 if (token.reason) { 3593 // Cancellation has already been requested 3594 return; 3595 } 3596 3597 token.reason = new Cancel(message); 3598 resolvePromise(token.reason); 3599 }); 3600} 3601 3602/** 3603 * Throws a `Cancel` if cancellation has been requested. 3604 */ 3605CancelToken.prototype.throwIfRequested = function throwIfRequested() { 3606 if (this.reason) { 3607 throw this.reason; 3608 } 3609}; 3610 3611/** 3612 * Subscribe to the cancel signal 3613 */ 3614 3615CancelToken.prototype.subscribe = function subscribe(listener) { 3616 if (this.reason) { 3617 listener(this.reason); 3618 return; 3619 } 3620 3621 if (this._listeners) { 3622 this._listeners.push(listener); 3623 } else { 3624 this._listeners = [listener]; 3625 } 3626}; 3627 3628/** 3629 * Unsubscribe from the cancel signal 3630 */ 3631 3632CancelToken.prototype.unsubscribe = function unsubscribe(listener) { 3633 if (!this._listeners) { 3634 return; 3635 } 3636 var index = this._listeners.indexOf(listener); 3637 if (index !== -1) { 3638 this._listeners.splice(index, 1); 3639 } 3640}; 3641 3642/** 3643 * Returns an object that contains a new `CancelToken` and a function that, when called, 3644 * cancels the `CancelToken`. 3645 */ 3646CancelToken.source = function source() { 3647 var cancel; 3648 var token = new CancelToken(function executor(c) { 3649 cancel = c; 3650 }); 3651 return { 3652 token: token, 3653 cancel: cancel 3654 }; 3655}; 3656 3657module.exports = CancelToken; 3658 3659 3660/***/ }), 3661
vendor: 361 bytes, lines 3662-3677
3662/***/ "./node_modules/axios/lib/cancel/isCancel.js": 3663/*!***************************************************!*\ 3664 !*** ./node_modules/axios/lib/cancel/isCancel.js ***! 3665 \***************************************************/ 3666/***/ ((module) => { 3667 3668"use strict"; 3669 3670 3671module.exports = function isCancel(value) { 3672 return !!(value && value.__CANCEL__); 3673}; 3674 3675 3676/***/ }), 3677
vendor: 5,073 bytes, lines 3678-3843
3678/***/ "./node_modules/axios/lib/core/Axios.js": 3679/*!**********************************************!*\ 3680 !*** ./node_modules/axios/lib/core/Axios.js ***! 3681 \**********************************************/ 3682/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 3683 3684"use strict"; 3685 3686 3687var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 3688var buildURL = __webpack_require__(/*! ../helpers/buildURL */ "./node_modules/axios/lib/helpers/buildURL.js"); 3689var InterceptorManager = __webpack_require__(/*! ./InterceptorManager */ "./node_modules/axios/lib/core/InterceptorManager.js"); 3690var dispatchRequest = __webpack_require__(/*! ./dispatchRequest */ "./node_modules/axios/lib/core/dispatchRequest.js"); 3691var mergeConfig = __webpack_require__(/*! ./mergeConfig */ "./node_modules/axios/lib/core/mergeConfig.js"); 3692var validator = __webpack_require__(/*! ../helpers/validator */ "./node_modules/axios/lib/helpers/validator.js"); 3693 3694var validators = validator.validators; 3695/** 3696 * Create a new instance of Axios 3697 * 3698 * @param {Object} instanceConfig The default config for the instance 3699 */ 3700function Axios(instanceConfig) { 3701 this.defaults = instanceConfig; 3702 this.interceptors = { 3703 request: new InterceptorManager(), 3704 response: new InterceptorManager() 3705 }; 3706} 3707 3708/** 3709 * Dispatch a request 3710 * 3711 * @param {Object} config The config specific for this request (merged with this.defaults) 3712 */ 3713Axios.prototype.request = function request(configOrUrl, config) { 3714 /*eslint no-param-reassign:0*/ 3715 // Allow for axios('example/url'[, config]) a la fetch API 3716 if (typeof configOrUrl === 'string') { 3717 config = config || {}; 3718 config.url = configOrUrl; 3719 } else { 3720 config = configOrUrl || {}; 3721 } 3722 3723 if (!config.url) { 3724 throw new Error('Provided config url is not valid'); 3725 } 3726 3727 config = mergeConfig(this.defaults, config); 3728 3729 // Set config.method 3730 if (config.method) { 3731 config.method = config.method.toLowerCase(); 3732 } else if (this.defaults.method) { 3733 config.method = this.defaults.method.toLowerCase(); 3734 } else { 3735 config.method = 'get'; 3736 } 3737 3738 var transitional = config.transitional; 3739 3740 if (transitional !== undefined) { 3741 validator.assertOptions(transitional, { 3742 silentJSONParsing: validators.transitional(validators.boolean), 3743 forcedJSONParsing: validators.transitional(validators.boolean), 3744 clarifyTimeoutError: validators.transitional(validators.boolean) 3745 }, false); 3746 } 3747 3748 // filter out skipped interceptors 3749 var requestInterceptorChain = []; 3750 var synchronousRequestInterceptors = true; 3751 this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) { 3752 if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) { 3753 return; 3754 } 3755 3756 synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous; 3757 3758 requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected); 3759 }); 3760 3761 var responseInterceptorChain = []; 3762 this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) { 3763 responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected); 3764 }); 3765 3766 var promise; 3767 3768 if (!synchronousRequestInterceptors) { 3769 var chain = [dispatchRequest, undefined]; 3770 3771 Array.prototype.unshift.apply(chain, requestInterceptorChain); 3772 chain = chain.concat(responseInterceptorChain); 3773 3774 promise = Promise.resolve(config); 3775 while (chain.length) { 3776 promise = promise.then(chain.shift(), chain.shift()); 3777 } 3778 3779 return promise; 3780 } 3781 3782 3783 var newConfig = config; 3784 while (requestInterceptorChain.length) { 3785 var onFulfilled = requestInterceptorChain.shift(); 3786 var onRejected = requestInterceptorChain.shift(); 3787 try { 3788 newConfig = onFulfilled(newConfig); 3789 } catch (error) { 3790 onRejected(error); 3791 break; 3792 } 3793 } 3794 3795 try { 3796 promise = dispatchRequest(newConfig); 3797 } catch (error) { 3798 return Promise.reject(error); 3799 } 3800 3801 while (responseInterceptorChain.length) { 3802 promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift()); 3803 } 3804 3805 return promise; 3806}; 3807 3808Axios.prototype.getUri = function getUri(config) { 3809 if (!config.url) { 3810 throw new Error('Provided config url is not valid'); 3811 } 3812 config = mergeConfig(this.defaults, config); 3813 return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\?/, ''); 3814}; 3815 3816// Provide aliases for supported request methods 3817utils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) { 3818 /*eslint func-names:0*/ 3819 Axios.prototype[method] = function(url, config) { 3820 return this.request(mergeConfig(config || {}, { 3821 method: method, 3822 url: url, 3823 data: (config || {}).data 3824 })); 3825 }; 3826}); 3827 3828utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { 3829 /*eslint func-names:0*/ 3830 Axios.prototype[method] = function(url, data, config) { 3831 return this.request(mergeConfig(config || {}, { 3832 method: method, 3833 url: url, 3834 data: data 3835 })); 3836 }; 3837}); 3838 3839module.exports = Axios; 3840 3841 3842/***/ }), 3843
vendor: 1,754 bytes, lines 3844-3908
3844/***/ "./node_modules/axios/lib/core/InterceptorManager.js": 3845/*!***********************************************************!*\ 3846 !*** ./node_modules/axios/lib/core/InterceptorManager.js ***! 3847 \***********************************************************/ 3848/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 3849 3850"use strict"; 3851 3852 3853var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 3854 3855function InterceptorManager() { 3856 this.handlers = []; 3857} 3858 3859/** 3860 * Add a new interceptor to the stack 3861 * 3862 * @param {Function} fulfilled The function to handle `then` for a `Promise` 3863 * @param {Function} rejected The function to handle `reject` for a `Promise` 3864 * 3865 * @return {Number} An ID used to remove interceptor later 3866 */ 3867InterceptorManager.prototype.use = function use(fulfilled, rejected, options) { 3868 this.handlers.push({ 3869 fulfilled: fulfilled, 3870 rejected: rejected, 3871 synchronous: options ? options.synchronous : false, 3872 runWhen: options ? options.runWhen : null 3873 }); 3874 return this.handlers.length - 1; 3875}; 3876 3877/** 3878 * Remove an interceptor from the stack 3879 * 3880 * @param {Number} id The ID that was returned by `use` 3881 */ 3882InterceptorManager.prototype.eject = function eject(id) { 3883 if (this.handlers[id]) { 3884 this.handlers[id] = null; 3885 } 3886}; 3887 3888/** 3889 * Iterate over all the registered interceptors 3890 * 3891 * This method is particularly useful for skipping over any 3892 * interceptors that may have become `null` calling `eject`. 3893 * 3894 * @param {Function} fn The function to call for each interceptor 3895 */ 3896InterceptorManager.prototype.forEach = function forEach(fn) { 3897 utils.forEach(this.handlers, function forEachHandler(h) { 3898 if (h !== null) { 3899 fn(h); 3900 } 3901 }); 3902}; 3903 3904module.exports = InterceptorManager; 3905 3906 3907/***/ }), 3908
vendor: 1,149 bytes, lines 3909-3939
3909/***/ "./node_modules/axios/lib/core/buildFullPath.js": 3910/*!******************************************************!*\ 3911 !*** ./node_modules/axios/lib/core/buildFullPath.js ***! 3912 \******************************************************/ 3913/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 3914 3915"use strict"; 3916 3917 3918var isAbsoluteURL = __webpack_require__(/*! ../helpers/isAbsoluteURL */ "./node_modules/axios/lib/helpers/isAbsoluteURL.js"); 3919var combineURLs = __webpack_require__(/*! ../helpers/combineURLs */ "./node_modules/axios/lib/helpers/combineURLs.js"); 3920 3921/** 3922 * Creates a new URL by combining the baseURL with the requestedURL, 3923 * only when the requestedURL is not already an absolute URL. 3924 * If the requestURL is absolute, this function returns the requestedURL untouched. 3925 * 3926 * @param {string} baseURL The base URL 3927 * @param {string} requestedURL Absolute or relative URL to combine 3928 * @returns {string} The combined full path 3929 */ 3930module.exports = function buildFullPath(baseURL, requestedURL) { 3931 if (baseURL && !isAbsoluteURL(requestedURL)) { 3932 return combineURLs(baseURL, requestedURL); 3933 } 3934 return requestedURL; 3935}; 3936 3937 3938/***/ }), 3939
vendor: 1,000 bytes, lines 3940-3968
3940/***/ "./node_modules/axios/lib/core/createError.js": 3941/*!****************************************************!*\ 3942 !*** ./node_modules/axios/lib/core/createError.js ***! 3943 \****************************************************/ 3944/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 3945 3946"use strict"; 3947 3948 3949var enhanceError = __webpack_require__(/*! ./enhanceError */ "./node_modules/axios/lib/core/enhanceError.js"); 3950 3951/** 3952 * Create an Error with the specified message, config, error code, request and response. 3953 * 3954 * @param {string} message The error message. 3955 * @param {Object} config The config. 3956 * @param {string} [code] The error code (for example, 'ECONNABORTED'). 3957 * @param {Object} [request] The request. 3958 * @param {Object} [response] The response. 3959 * @returns {Error} The created error. 3960 */ 3961module.exports = function createError(message, config, code, request, response) { 3962 var error = new Error(message); 3963 return enhanceError(error, config, code, request, response); 3964}; 3965 3966 3967/***/ }), 3968
vendor: 2,747 bytes, lines 3969-4066
3969/***/ "./node_modules/axios/lib/core/dispatchRequest.js": 3970/*!********************************************************!*\ 3971 !*** ./node_modules/axios/lib/core/dispatchRequest.js ***! 3972 \********************************************************/ 3973/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 3974 3975"use strict"; 3976 3977 3978var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 3979var transformData = __webpack_require__(/*! ./transformData */ "./node_modules/axios/lib/core/transformData.js"); 3980var isCancel = __webpack_require__(/*! ../cancel/isCancel */ "./node_modules/axios/lib/cancel/isCancel.js"); 3981var defaults = __webpack_require__(/*! ../defaults */ "./node_modules/axios/lib/defaults.js"); 3982var Cancel = __webpack_require__(/*! ../cancel/Cancel */ "./node_modules/axios/lib/cancel/Cancel.js"); 3983 3984/** 3985 * Throws a `Cancel` if cancellation has been requested. 3986 */ 3987function throwIfCancellationRequested(config) { 3988 if (config.cancelToken) { 3989 config.cancelToken.throwIfRequested(); 3990 } 3991 3992 if (config.signal && config.signal.aborted) { 3993 throw new Cancel('canceled'); 3994 } 3995} 3996 3997/** 3998 * Dispatch a request to the server using the configured adapter. 3999 * 4000 * @param {object} config The config that is to be used for the request 4001 * @returns {Promise} The Promise to be fulfilled 4002 */ 4003module.exports = function dispatchRequest(config) { 4004 throwIfCancellationRequested(config); 4005 4006 // Ensure headers exist 4007 config.headers = config.headers || {}; 4008 4009 // Transform request data 4010 config.data = transformData.call( 4011 config, 4012 config.data, 4013 config.headers, 4014 config.transformRequest 4015 ); 4016 4017 // Flatten headers 4018 config.headers = utils.merge( 4019 config.headers.common || {}, 4020 config.headers[config.method] || {}, 4021 config.headers 4022 ); 4023 4024 utils.forEach( 4025 ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], 4026 function cleanHeaderConfig(method) { 4027 delete config.headers[method]; 4028 } 4029 ); 4030 4031 var adapter = config.adapter || defaults.adapter; 4032 4033 return adapter(config).then(function onAdapterResolution(response) { 4034 throwIfCancellationRequested(config); 4035 4036 // Transform response data 4037 response.data = transformData.call( 4038 config, 4039 response.data, 4040 response.headers, 4041 config.transformResponse 4042 ); 4043 4044 return response; 4045 }, function onAdapterRejection(reason) { 4046 if (!isCancel(reason)) { 4047 throwIfCancellationRequested(config); 4048 4049 // Transform response data 4050 if (reason && reason.response) { 4051 reason.response.data = transformData.call( 4052 config, 4053 reason.response.data, 4054 reason.response.headers, 4055 config.transformResponse 4056 ); 4057 } 4058 } 4059 4060 return Promise.reject(reason); 4061 }); 4062}; 4063 4064 4065/***/ }), 4066
vendor: 1,399 bytes, lines 4067-4120
4067/***/ "./node_modules/axios/lib/core/enhanceError.js": 4068/*!*****************************************************!*\ 4069 !*** ./node_modules/axios/lib/core/enhanceError.js ***! 4070 \*****************************************************/ 4071/***/ ((module) => { 4072 4073"use strict"; 4074 4075 4076/** 4077 * Update an Error with the specified config, error code, and response. 4078 * 4079 * @param {Error} error The error to update. 4080 * @param {Object} config The config. 4081 * @param {string} [code] The error code (for example, 'ECONNABORTED'). 4082 * @param {Object} [request] The request. 4083 * @param {Object} [response] The response. 4084 * @returns {Error} The error. 4085 */ 4086module.exports = function enhanceError(error, config, code, request, response) { 4087 error.config = config; 4088 if (code) { 4089 error.code = code; 4090 } 4091 4092 error.request = request; 4093 error.response = response; 4094 error.isAxiosError = true; 4095 4096 error.toJSON = function toJSON() { 4097 return { 4098 // Standard 4099 message: this.message, 4100 name: this.name, 4101 // Microsoft 4102 description: this.description, 4103 number: this.number, 4104 // Mozilla 4105 fileName: this.fileName, 4106 lineNumber: this.lineNumber, 4107 columnNumber: this.columnNumber, 4108 stack: this.stack, 4109 // Axios 4110 config: this.config, 4111 code: this.code, 4112 status: this.response && this.response.status ? this.response.status : null 4113 }; 4114 }; 4115 return error; 4116}; 4117 4118 4119/***/ }), 4120
vendor: 3,558 bytes, lines 4121-4230
4121/***/ "./node_modules/axios/lib/core/mergeConfig.js": 4122/*!****************************************************!*\ 4123 !*** ./node_modules/axios/lib/core/mergeConfig.js ***! 4124 \****************************************************/ 4125/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 4126 4127"use strict"; 4128 4129 4130var utils = __webpack_require__(/*! ../utils */ "./node_modules/axios/lib/utils.js"); 4131 4132/** 4133 * Config-specific merge-function which creates a new config-object 4134 * by merging two configuration objects together. 4135 * 4136 * @param {Object} config1 4137 * @param {Object} config2 4138 * @returns {Object} New object resulting from merging config2 to config1 4139 */ 4140module.exports = function mergeConfig(config1, config2) { 4141 // eslint-disable-next-line no-param-reassign 4142 config2 = config2 || {}; 4143 var config = {}; 4144 4145 function getMergedValue(target, source) { 4146 if (utils.isPlainObject(target) && utils.isPlainObject(source)) { 4147 return utils.merge(target, source); 4148 } else if (utils.isPlainObject(source)) { 4149 return utils.merge({}, source); 4150 } else if (utils.isArray(source)) { 4151 return source.slice(); 4152 } 4153 return source; 4154 } 4155 4156 // eslint-disable-next-line consistent-return 4157 function mergeDeepProperties(prop) { 4158 if (!utils.isUndefined(config2[prop])) { 4159 return getMergedValue(config1[prop], config2[prop]); 4160 } else if (!utils.isUndefined(config1[prop])) { 4161 return getMergedValue(undefined, config1[prop]); 4162 } 4163 } 4164 4165 // eslint-disable-next-line consistent-return 4166 function valueFromConfig2(prop) { 4167 if (!utils.isUndefined(config2[prop])) { 4168 return getMergedValue(undefined, config2[prop]); 4169 } 4170 } 4171 4172 // eslint-disable-next-line consistent-return 4173 function defaultToConfig2(prop) { 4174 if (!utils.isUndefined(config2[prop])) { 4175 return getMergedValue(undefined, config2[prop]); 4176 } else if (!utils.isUndefined(config1[prop])) { 4177 return getMergedValue(undefined, config1[prop]); 4178 } 4179 } 4180 4181 // eslint-disable-next-line consistent-return 4182 function mergeDirectKeys(prop) { 4183 if (prop in config2) { 4184 return getMergedValue(config1[prop], config2[prop]); 4185 } else if (prop in config1) { 4186 return getMergedValue(undefined, config1[prop]); 4187 } 4188 } 4189 4190 var mergeMap = { 4191 'url': valueFromConfig2, 4192 'method': valueFromConfig2, 4193 'data': valueFromConfig2, 4194 'baseURL': defaultToConfig2, 4195 'transformRequest': defaultToConfig2, 4196 'transformResponse': defaultToConfig2, 4197 'paramsSerializer': defaultToConfig2, 4198 'timeout': defaultToConfig2, 4199 'timeoutMessage': defaultToConfig2, 4200 'withCredentials': defaultToConfig2, 4201 'adapter': defaultToConfig2, 4202 'responseType': defaultToConfig2, 4203 'xsrfCookieName': defaultToConfig2, 4204 'xsrfHeaderName': defaultToConfig2, 4205 'onUploadProgress': defaultToConfig2, 4206 'onDownloadProgress': defaultToConfig2, 4207 'decompress': defaultToConfig2, 4208 'maxContentLength': defaultToConfig2, 4209 'maxBodyLength': defaultToConfig2, 4210 'transport': defaultToConfig2, 4211 'httpAgent': defaultToConfig2, 4212 'httpsAgent': defaultToConfig2, 4213 'cancelToken': defaultToConfig2, 4214 'socketPath': defaultToConfig2, 4215 'responseEncoding': defaultToConfig2, 4216 'validateStatus': mergeDirectKeys 4217 }; 4218 4219 utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) { 4220 var merge = mergeMap[prop] || mergeDeepProperties; 4221 var configValue = merge(prop); 4222 (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue); 4223 }); 4224 4225 return config; 4226}; 4227 4228 4229/***/ }), 4230
vendor: 1,060 bytes, lines 4231-4266
4231/***/ "./node_modules/axios/lib/core/settle.js": 4232/*!***********************************************!*\ 4233 !*** ./node_modules/axios/lib/core/settle.js ***! 4234 \***********************************************/ 4235/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 4236 4237"use strict"; 4238 4239 4240var createError = __webpack_require__(/*! ./createError */ "./node_modules/axios/lib/core/createError.js"); 4241 4242/** 4243 * Resolve or reject a Promise based on response status. 4244 * 4245 * @param {Function} resolve A function that resolves the promise. 4246 * @param {Function} reject A function that rejects the promise. 4247 * @param {object} response The response. 4248 */ 4249module.exports = function settle(resolve, reject, response) { 4250 var validateStatus = response.config.validateStatus; 4251 if (!response.status || !validateStatus || validateStatus(response.status)) { 4252 resolve(response); 4253 } else { 4254 reject(createError( 4255 'Request failed with status code ' + response.status, 4256 response.config, 4257 null, 4258 response.request, 4259 response 4260 )); 4261 } 4262}; 4263 4264 4265/***/ }), 4266
vendor: 1,066 bytes, lines 4267-4299
4267/***/ "./node_modules/axios/lib/core/transformData.js": 4268/*!******************************************************!*\ 4269 !*** ./node_modules/axios/lib/core/transformData.js ***! 4270 \******************************************************/ 4271/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 4272 4273"use strict"; 4274 4275 4276var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 4277var defaults = __webpack_require__(/*! ./../defaults */ "./node_modules/axios/lib/defaults.js"); 4278 4279/** 4280 * Transform the data for a request or a response 4281 * 4282 * @param {Object|String} data The data to be transformed 4283 * @param {Array} headers The headers for the request or response 4284 * @param {Array|Function} fns A single function or Array of functions 4285 * @returns {*} The resulting transformed data 4286 */ 4287module.exports = function transformData(data, headers, fns) { 4288 var context = this || defaults; 4289 /*eslint no-param-reassign:0*/ 4290 utils.forEach(fns, function transform(fn) { 4291 data = fn.call(context, data, headers); 4292 }); 4293 4294 return data; 4295}; 4296 4297 4298/***/ }), 4299
vendor: 4,297 bytes, lines 4300-4445
4300/***/ "./node_modules/axios/lib/defaults.js": 4301/*!********************************************!*\ 4302 !*** ./node_modules/axios/lib/defaults.js ***! 4303 \********************************************/ 4304/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 4305 4306"use strict"; 4307/* provided dependency */ var process = __webpack_require__(/*! process/browser.js */ "./node_modules/process/browser.js"); 4308 4309 4310var utils = __webpack_require__(/*! ./utils */ "./node_modules/axios/lib/utils.js"); 4311var normalizeHeaderName = __webpack_require__(/*! ./helpers/normalizeHeaderName */ "./node_modules/axios/lib/helpers/normalizeHeaderName.js"); 4312var enhanceError = __webpack_require__(/*! ./core/enhanceError */ "./node_modules/axios/lib/core/enhanceError.js"); 4313 4314var DEFAULT_CONTENT_TYPE = { 4315 'Content-Type': 'application/x-www-form-urlencoded' 4316}; 4317 4318function setContentTypeIfUnset(headers, value) { 4319 if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) { 4320 headers['Content-Type'] = value; 4321 } 4322} 4323 4324function getDefaultAdapter() { 4325 var adapter; 4326 if (typeof XMLHttpRequest !== 'undefined') { 4327 // For browsers use XHR adapter 4328 adapter = __webpack_require__(/*! ./adapters/xhr */ "./node_modules/axios/lib/adapters/xhr.js"); 4329 } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') { 4330 // For node use HTTP adapter 4331 adapter = __webpack_require__(/*! ./adapters/http */ "./node_modules/axios/lib/adapters/xhr.js"); 4332 } 4333 return adapter; 4334} 4335 4336function stringifySafely(rawValue, parser, encoder) { 4337 if (utils.isString(rawValue)) { 4338 try { 4339 (parser || JSON.parse)(rawValue); 4340 return utils.trim(rawValue); 4341 } catch (e) { 4342 if (e.name !== 'SyntaxError') { 4343 throw e; 4344 } 4345 } 4346 } 4347 4348 return (encoder || JSON.stringify)(rawValue); 4349} 4350 4351var defaults = { 4352 4353 transitional: { 4354 silentJSONParsing: true, 4355 forcedJSONParsing: true, 4356 clarifyTimeoutError: false 4357 }, 4358 4359 adapter: getDefaultAdapter(), 4360 4361 transformRequest: [function transformRequest(data, headers) { 4362 normalizeHeaderName(headers, 'Accept'); 4363 normalizeHeaderName(headers, 'Content-Type'); 4364 4365 if (utils.isFormData(data) || 4366 utils.isArrayBuffer(data) || 4367 utils.isBuffer(data) || 4368 utils.isStream(data) || 4369 utils.isFile(data) || 4370 utils.isBlob(data) 4371 ) { 4372 return data; 4373 } 4374 if (utils.isArrayBufferView(data)) { 4375 return data.buffer; 4376 } 4377 if (utils.isURLSearchParams(data)) { 4378 setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8'); 4379 return data.toString(); 4380 } 4381 if (utils.isObject(data) || (headers && headers['Content-Type'] === 'application/json')) { 4382 setContentTypeIfUnset(headers, 'application/json'); 4383 return stringifySafely(data); 4384 } 4385 return data; 4386 }], 4387 4388 transformResponse: [function transformResponse(data) { 4389 var transitional = this.transitional || defaults.transitional; 4390 var silentJSONParsing = transitional && transitional.silentJSONParsing; 4391 var forcedJSONParsing = transitional && transitional.forcedJSONParsing; 4392 var strictJSONParsing = !silentJSONParsing && this.responseType === 'json'; 4393 4394 if (strictJSONParsing || (forcedJSONParsing && utils.isString(data) && data.length)) { 4395 try { 4396 return JSON.parse(data); 4397 } catch (e) { 4398 if (strictJSONParsing) { 4399 if (e.name === 'SyntaxError') { 4400 throw enhanceError(e, this, 'E_JSON_PARSE'); 4401 } 4402 throw e; 4403 } 4404 } 4405 } 4406 4407 return data; 4408 }], 4409 4410 /** 4411 * A timeout in milliseconds to abort a request. If set to 0 (default) a 4412 * timeout is not created. 4413 */ 4414 timeout: 0, 4415 4416 xsrfCookieName: 'XSRF-TOKEN', 4417 xsrfHeaderName: 'X-XSRF-TOKEN', 4418 4419 maxContentLength: -1, 4420 maxBodyLength: -1, 4421 4422 validateStatus: function validateStatus(status) { 4423 return status >= 200 && status < 300; 4424 }, 4425 4426 headers: { 4427 common: { 4428 'Accept': 'application/json, text/plain, */*' 4429 } 4430 } 4431}; 4432 4433utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) { 4434 defaults.headers[method] = {}; 4435}); 4436 4437utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { 4438 defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE); 4439}); 4440 4441module.exports = defaults; 4442 4443 4444/***/ }), 4445
vendor: 273 bytes, lines 4446-4457
4446/***/ "./node_modules/axios/lib/env/data.js": 4447/*!********************************************!*\ 4448 !*** ./node_modules/axios/lib/env/data.js ***! 4449 \********************************************/ 4450/***/ ((module) => { 4451 4452module.exports = { 4453 "version": "0.25.0" 4454}; 4455 4456/***/ }), 4457
vendor: 503 bytes, lines 4458-4479
4458/***/ "./node_modules/axios/lib/helpers/bind.js": 4459/*!************************************************!*\ 4460 !*** ./node_modules/axios/lib/helpers/bind.js ***! 4461 \************************************************/ 4462/***/ ((module) => { 4463 4464"use strict"; 4465 4466 4467module.exports = function bind(fn, thisArg) { 4468 return function wrap() { 4469 var args = new Array(arguments.length); 4470 for (var i = 0; i < args.length; i++) { 4471 args[i] = arguments[i]; 4472 } 4473 return fn.apply(thisArg, args); 4474 }; 4475}; 4476 4477 4478/***/ }), 4479
vendor: 2,007 bytes, lines 4480-4560
4480/***/ "./node_modules/axios/lib/helpers/buildURL.js": 4481/*!****************************************************!*\ 4482 !*** ./node_modules/axios/lib/helpers/buildURL.js ***! 4483 \****************************************************/ 4484/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 4485 4486"use strict"; 4487 4488 4489var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 4490 4491function encode(val) { 4492 return encodeURIComponent(val). 4493 replace(/%3A/gi, ':'). 4494 replace(/%24/g, '$'). 4495 replace(/%2C/gi, ','). 4496 replace(/%20/g, '+'). 4497 replace(/%5B/gi, '['). 4498 replace(/%5D/gi, ']'); 4499} 4500 4501/** 4502 * Build a URL by appending params to the end 4503 * 4504 * @param {string} url The base of the url (e.g., http://www.google.com) 4505 * @param {object} [params] The params to be appended 4506 * @returns {string} The formatted url 4507 */ 4508module.exports = function buildURL(url, params, paramsSerializer) { 4509 /*eslint no-param-reassign:0*/ 4510 if (!params) { 4511 return url; 4512 } 4513 4514 var serializedParams; 4515 if (paramsSerializer) { 4516 serializedParams = paramsSerializer(params); 4517 } else if (utils.isURLSearchParams(params)) { 4518 serializedParams = params.toString(); 4519 } else { 4520 var parts = []; 4521 4522 utils.forEach(params, function serialize(val, key) { 4523 if (val === null || typeof val === 'undefined') { 4524 return; 4525 } 4526 4527 if (utils.isArray(val)) { 4528 key = key + '[]'; 4529 } else { 4530 val = [val]; 4531 } 4532 4533 utils.forEach(val, function parseValue(v) { 4534 if (utils.isDate(v)) { 4535 v = v.toISOString(); 4536 } else if (utils.isObject(v)) { 4537 v = JSON.stringify(v); 4538 } 4539 parts.push(encode(key) + '=' + encode(v)); 4540 }); 4541 }); 4542 4543 serializedParams = parts.join('&'); 4544 } 4545 4546 if (serializedParams) { 4547 var hashmarkIndex = url.indexOf('#'); 4548 if (hashmarkIndex !== -1) { 4549 url = url.slice(0, hashmarkIndex); 4550 } 4551 4552 url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams; 4553 } 4554 4555 return url; 4556}; 4557 4558 4559/***/ }), 4560
vendor: 655 bytes, lines 4561-4585
4561/***/ "./node_modules/axios/lib/helpers/combineURLs.js": 4562/*!*******************************************************!*\ 4563 !*** ./node_modules/axios/lib/helpers/combineURLs.js ***! 4564 \*******************************************************/ 4565/***/ ((module) => { 4566 4567"use strict"; 4568 4569 4570/** 4571 * Creates a new URL by combining the specified URLs 4572 * 4573 * @param {string} baseURL The base URL 4574 * @param {string} relativeURL The relative URL 4575 * @returns {string} The combined URL 4576 */ 4577module.exports = function combineURLs(baseURL, relativeURL) { 4578 return relativeURL 4579 ? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '') 4580 : baseURL; 4581}; 4582 4583 4584/***/ }), 4585
vendor: 1,794 bytes, lines 4586-4649
4586/***/ "./node_modules/axios/lib/helpers/cookies.js": 4587/*!***************************************************!*\ 4588 !*** ./node_modules/axios/lib/helpers/cookies.js ***! 4589 \***************************************************/ 4590/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 4591 4592"use strict"; 4593 4594 4595var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 4596 4597module.exports = ( 4598 utils.isStandardBrowserEnv() ? 4599 4600 // Standard browser envs support document.cookie 4601 (function standardBrowserEnv() { 4602 return { 4603 write: function write(name, value, expires, path, domain, secure) { 4604 var cookie = []; 4605 cookie.push(name + '=' + encodeURIComponent(value)); 4606 4607 if (utils.isNumber(expires)) { 4608 cookie.push('expires=' + new Date(expires).toGMTString()); 4609 } 4610 4611 if (utils.isString(path)) { 4612 cookie.push('path=' + path); 4613 } 4614 4615 if (utils.isString(domain)) { 4616 cookie.push('domain=' + domain); 4617 } 4618 4619 if (secure === true) { 4620 cookie.push('secure'); 4621 } 4622 4623 document.cookie = cookie.join('; '); 4624 }, 4625 4626 read: function read(name) { 4627 var match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)')); 4628 return (match ? decodeURIComponent(match[3]) : null); 4629 }, 4630 4631 remove: function remove(name) { 4632 this.write(name, '', Date.now() - 86400000); 4633 } 4634 }; 4635 })() : 4636 4637 // Non standard browser env (web workers, react-native) lack needed support. 4638 (function nonStandardBrowserEnv() { 4639 return { 4640 write: function write() {}, 4641 read: function read() { return null; }, 4642 remove: function remove() {} 4643 }; 4644 })() 4645); 4646 4647 4648/***/ }), 4649
vendor: 844 bytes, lines 4650-4674
4650/***/ "./node_modules/axios/lib/helpers/isAbsoluteURL.js": 4651/*!*********************************************************!*\ 4652 !*** ./node_modules/axios/lib/helpers/isAbsoluteURL.js ***! 4653 \*********************************************************/ 4654/***/ ((module) => { 4655 4656"use strict"; 4657 4658 4659/** 4660 * Determines whether the specified URL is absolute 4661 * 4662 * @param {string} url The URL to test 4663 * @returns {boolean} True if the specified URL is absolute, otherwise false 4664 */ 4665module.exports = function isAbsoluteURL(url) { 4666 // A URL is considered absolute if it begins with "<scheme>://" or "//" (protocol-relative URL). 4667 // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed 4668 // by any combination of letters, digits, plus, period, or hyphen. 4669 return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url); 4670}; 4671 4672 4673/***/ }), 4674
vendor: 752 bytes, lines 4675-4698
4675/***/ "./node_modules/axios/lib/helpers/isAxiosError.js": 4676/*!********************************************************!*\ 4677 !*** ./node_modules/axios/lib/helpers/isAxiosError.js ***! 4678 \********************************************************/ 4679/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 4680 4681"use strict"; 4682 4683 4684var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 4685 4686/** 4687 * Determines whether the payload is an error thrown by Axios 4688 * 4689 * @param {*} payload The value to test 4690 * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false 4691 */ 4692module.exports = function isAxiosError(payload) { 4693 return utils.isObject(payload) && (payload.isAxiosError === true); 4694}; 4695 4696 4697/***/ }), 4698
vendor: 2,696 bytes, lines 4699-4777
4699/***/ "./node_modules/axios/lib/helpers/isURLSameOrigin.js": 4700/*!***********************************************************!*\ 4701 !*** ./node_modules/axios/lib/helpers/isURLSameOrigin.js ***! 4702 \***********************************************************/ 4703/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 4704 4705"use strict"; 4706 4707 4708var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 4709 4710module.exports = ( 4711 utils.isStandardBrowserEnv() ? 4712 4713 // Standard browser envs have full support of the APIs needed to test 4714 // whether the request URL is of the same origin as current location. 4715 (function standardBrowserEnv() { 4716 var msie = /(msie|trident)/i.test(navigator.userAgent); 4717 var urlParsingNode = document.createElement('a'); 4718 var originURL; 4719 4720 /** 4721 * Parse a URL to discover it's components 4722 * 4723 * @param {String} url The URL to be parsed 4724 * @returns {Object} 4725 */ 4726 function resolveURL(url) { 4727 var href = url; 4728 4729 if (msie) { 4730 // IE needs attribute set twice to normalize properties 4731 urlParsingNode.setAttribute('href', href); 4732 href = urlParsingNode.href; 4733 } 4734 4735 urlParsingNode.setAttribute('href', href); 4736 4737 // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils 4738 return { 4739 href: urlParsingNode.href, 4740 protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '', 4741 host: urlParsingNode.host, 4742 search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '', 4743 hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '', 4744 hostname: urlParsingNode.hostname, 4745 port: urlParsingNode.port, 4746 pathname: (urlParsingNode.pathname.charAt(0) === '/') ? 4747 urlParsingNode.pathname : 4748 '/' + urlParsingNode.pathname 4749 }; 4750 } 4751 4752 originURL = resolveURL(window.location.href); 4753 4754 /** 4755 * Determine if a URL shares the same origin as the current location 4756 * 4757 * @param {String} requestURL The URL to test 4758 * @returns {boolean} True if URL shares the same origin, otherwise false 4759 */ 4760 return function isURLSameOrigin(requestURL) { 4761 var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL; 4762 return (parsed.protocol === originURL.protocol && 4763 parsed.host === originURL.host); 4764 }; 4765 })() : 4766 4767 // Non standard browser envs (web workers, react-native) lack needed support. 4768 (function nonStandardBrowserEnv() { 4769 return function isURLSameOrigin() { 4770 return true; 4771 }; 4772 })() 4773); 4774 4775 4776/***/ }), 4777
vendor: 764 bytes, lines 4778-4800
4778/***/ "./node_modules/axios/lib/helpers/normalizeHeaderName.js": 4779/*!***************************************************************!*\ 4780 !*** ./node_modules/axios/lib/helpers/normalizeHeaderName.js ***! 4781 \***************************************************************/ 4782/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 4783 4784"use strict"; 4785 4786 4787var utils = __webpack_require__(/*! ../utils */ "./node_modules/axios/lib/utils.js"); 4788 4789module.exports = function normalizeHeaderName(headers, normalizedName) { 4790 utils.forEach(headers, function processHeader(value, name) { 4791 if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) { 4792 headers[normalizedName] = value; 4793 delete headers[name]; 4794 } 4795 }); 4796}; 4797 4798 4799/***/ }), 4800
vendor: 1,772 bytes, lines 4801-4864
4801/***/ "./node_modules/axios/lib/helpers/parseHeaders.js": 4802/*!********************************************************!*\ 4803 !*** ./node_modules/axios/lib/helpers/parseHeaders.js ***! 4804 \********************************************************/ 4805/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 4806 4807"use strict"; 4808 4809 4810var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 4811 4812// Headers whose duplicates are ignored by node 4813// c.f. https://nodejs.org/api/http.html#http_message_headers 4814var ignoreDuplicateOf = [ 4815 'age', 'authorization', 'content-length', 'content-type', 'etag', 4816 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', 4817 'last-modified', 'location', 'max-forwards', 'proxy-authorization', 4818 'referer', 'retry-after', 'user-agent' 4819]; 4820 4821/** 4822 * Parse headers into an object 4823 * 4824 * ``` 4825 * Date: Wed, 27 Aug 2014 08:58:49 GMT 4826 * Content-Type: application/json 4827 * Connection: keep-alive 4828 * Transfer-Encoding: chunked 4829 * ``` 4830 * 4831 * @param {String} headers Headers needing to be parsed 4832 * @returns {Object} Headers parsed into an object 4833 */ 4834module.exports = function parseHeaders(headers) { 4835 var parsed = {}; 4836 var key; 4837 var val; 4838 var i; 4839 4840 if (!headers) { return parsed; } 4841 4842 utils.forEach(headers.split('\n'), function parser(line) { 4843 i = line.indexOf(':'); 4844 key = utils.trim(line.substr(0, i)).toLowerCase(); 4845 val = utils.trim(line.substr(i + 1)); 4846 4847 if (key) { 4848 if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) { 4849 return; 4850 } 4851 if (key === 'set-cookie') { 4852 parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]); 4853 } else { 4854 parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val; 4855 } 4856 } 4857 }); 4858 4859 return parsed; 4860}; 4861 4862 4863/***/ }), 4864
vendor: 819 bytes, lines 4865-4902
4865/***/ "./node_modules/axios/lib/helpers/spread.js": 4866/*!**************************************************!*\ 4867 !*** ./node_modules/axios/lib/helpers/spread.js ***! 4868 \**************************************************/ 4869/***/ ((module) => { 4870 4871"use strict"; 4872 4873 4874/** 4875 * Syntactic sugar for invoking a function and expanding an array for arguments. 4876 * 4877 * Common use case would be to use `Function.prototype.apply`. 4878 * 4879 * ```js 4880 * function f(x, y, z) {} 4881 * var args = [1, 2, 3]; 4882 * f.apply(null, args); 4883 * ``` 4884 * 4885 * With `spread` this example can be re-written. 4886 * 4887 * ```js 4888 * spread(function(x, y, z) {})([1, 2, 3]); 4889 * ``` 4890 * 4891 * @param {Function} callback 4892 * @returns {Function} 4893 */ 4894module.exports = function spread(callback) { 4895 return function wrap(arr) { 4896 return callback.apply(null, arr); 4897 }; 4898}; 4899 4900 4901/***/ }), 4902
vendor: 2,719 bytes, lines 4903-4995
4903/***/ "./node_modules/axios/lib/helpers/validator.js": 4904/*!*****************************************************!*\ 4905 !*** ./node_modules/axios/lib/helpers/validator.js ***! 4906 \*****************************************************/ 4907/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 4908 4909"use strict"; 4910 4911 4912var VERSION = (__webpack_require__(/*! ../env/data */ "./node_modules/axios/lib/env/data.js").version); 4913 4914var validators = {}; 4915 4916// eslint-disable-next-line func-names 4917['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) { 4918 validators[type] = function validator(thing) { 4919 return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type; 4920 }; 4921}); 4922 4923var deprecatedWarnings = {}; 4924 4925/** 4926 * Transitional option validator 4927 * @param {function|boolean?} validator - set to false if the transitional option has been removed 4928 * @param {string?} version - deprecated version / removed since version 4929 * @param {string?} message - some message with additional info 4930 * @returns {function} 4931 */ 4932validators.transitional = function transitional(validator, version, message) { 4933 function formatMessage(opt, desc) { 4934 return '[Axios v' + VERSION + '] Transitional option \'' + opt + '\'' + desc + (message ? '. ' + message : ''); 4935 } 4936 4937 // eslint-disable-next-line func-names 4938 return function(value, opt, opts) { 4939 if (validator === false) { 4940 throw new Error(formatMessage(opt, ' has been removed' + (version ? ' in ' + version : ''))); 4941 } 4942 4943 if (version && !deprecatedWarnings[opt]) { 4944 deprecatedWarnings[opt] = true; 4945 // eslint-disable-next-line no-console 4946 console.warn( 4947 formatMessage( 4948 opt, 4949 ' has been deprecated since v' + version + ' and will be removed in the near future' 4950 ) 4951 ); 4952 } 4953 4954 return validator ? validator(value, opt, opts) : true; 4955 }; 4956}; 4957 4958/** 4959 * Assert object's properties type 4960 * @param {object} options 4961 * @param {object} schema 4962 * @param {boolean?} allowUnknown 4963 */ 4964 4965function assertOptions(options, schema, allowUnknown) { 4966 if (typeof options !== 'object') { 4967 throw new TypeError('options must be an object'); 4968 } 4969 var keys = Object.keys(options); 4970 var i = keys.length; 4971 while (i-- > 0) { 4972 var opt = keys[i]; 4973 var validator = schema[opt]; 4974 if (validator) { 4975 var value = options[opt]; 4976 var result = value === undefined || validator(value, opt, options); 4977 if (result !== true) { 4978 throw new TypeError('option ' + opt + ' must be ' + result); 4979 } 4980 continue; 4981 } 4982 if (allowUnknown !== true) { 4983 throw Error('Unknown option ' + opt); 4984 } 4985 } 4986} 4987 4988module.exports = { 4989 assertOptions: assertOptions, 4990 validators: validators 4991}; 4992 4993 4994/***/ }), 4995
vendor: 12,380 bytes, lines 4996-5433
4996/***/ "./node_modules/axios/lib/utils.js": 4997/*!*****************************************!*\ 4998 !*** ./node_modules/axios/lib/utils.js ***! 4999 \*****************************************/ 5000/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 5001 5002"use strict"; 5003 5004 5005var bind = __webpack_require__(/*! ./helpers/bind */ "./node_modules/axios/lib/helpers/bind.js"); 5006 5007// utils is a library of generic helper functions non-specific to axios 5008 5009var toString = Object.prototype.toString; 5010 5011/** 5012 * Determine if a value is an Array 5013 * 5014 * @param {Object} val The value to test 5015 * @returns {boolean} True if value is an Array, otherwise false 5016 */ 5017function isArray(val) { 5018 return Array.isArray(val); 5019} 5020 5021/** 5022 * Determine if a value is undefined 5023 * 5024 * @param {Object} val The value to test 5025 * @returns {boolean} True if the value is undefined, otherwise false 5026 */ 5027function isUndefined(val) { 5028 return typeof val === 'undefined'; 5029} 5030 5031/** 5032 * Determine if a value is a Buffer 5033 * 5034 * @param {Object} val The value to test 5035 * @returns {boolean} True if value is a Buffer, otherwise false 5036 */ 5037function isBuffer(val) { 5038 return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor) 5039 && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val); 5040} 5041 5042/** 5043 * Determine if a value is an ArrayBuffer 5044 * 5045 * @param {Object} val The value to test 5046 * @returns {boolean} True if value is an ArrayBuffer, otherwise false 5047 */ 5048function isArrayBuffer(val) { 5049 return toString.call(val) === '[object ArrayBuffer]'; 5050} 5051 5052/** 5053 * Determine if a value is a FormData 5054 * 5055 * @param {Object} val The value to test 5056 * @returns {boolean} True if value is an FormData, otherwise false 5057 */ 5058function isFormData(val) { 5059 return toString.call(val) === '[object FormData]'; 5060} 5061 5062/** 5063 * Determine if a value is a view on an ArrayBuffer 5064 * 5065 * @param {Object} val The value to test 5066 * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false 5067 */ 5068function isArrayBufferView(val) { 5069 var result; 5070 if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) { 5071 result = ArrayBuffer.isView(val); 5072 } else { 5073 result = (val) && (val.buffer) && (isArrayBuffer(val.buffer)); 5074 } 5075 return result; 5076} 5077 5078/** 5079 * Determine if a value is a String 5080 * 5081 * @param {Object} val The value to test 5082 * @returns {boolean} True if value is a String, otherwise false 5083 */ 5084function isString(val) { 5085 return typeof val === 'string'; 5086} 5087 5088/** 5089 * Determine if a value is a Number 5090 * 5091 * @param {Object} val The value to test 5092 * @returns {boolean} True if value is a Number, otherwise false 5093 */ 5094function isNumber(val) { 5095 return typeof val === 'number'; 5096} 5097 5098/** 5099 * Determine if a value is an Object 5100 * 5101 * @param {Object} val The value to test 5102 * @returns {boolean} True if value is an Object, otherwise false 5103 */ 5104function isObject(val) { 5105 return val !== null && typeof val === 'object'; 5106} 5107 5108/** 5109 * Determine if a value is a plain Object 5110 * 5111 * @param {Object} val The value to test 5112 * @return {boolean} True if value is a plain Object, otherwise false 5113 */ 5114function isPlainObject(val) { 5115 if (toString.call(val) !== '[object Object]') { 5116 return false; 5117 } 5118 5119 var prototype = Object.getPrototypeOf(val); 5120 return prototype === null || prototype === Object.prototype; 5121} 5122 5123/** 5124 * Determine if a value is a Date 5125 * 5126 * @param {Object} val The value to test 5127 * @returns {boolean} True if value is a Date, otherwise false 5128 */ 5129function isDate(val) { 5130 return toString.call(val) === '[object Date]'; 5131} 5132 5133/** 5134 * Determine if a value is a File 5135 * 5136 * @param {Object} val The value to test 5137 * @returns {boolean} True if value is a File, otherwise false 5138 */ 5139function isFile(val) { 5140 return toString.call(val) === '[object File]'; 5141} 5142 5143/** 5144 * Determine if a value is a Blob 5145 * 5146 * @param {Object} val The value to test 5147 * @returns {boolean} True if value is a Blob, otherwise false 5148 */ 5149function isBlob(val) { 5150 return toString.call(val) === '[object Blob]'; 5151} 5152 5153/** 5154 * Determine if a value is a Function 5155 * 5156 * @param {Object} val The value to test 5157 * @returns {boolean} True if value is a Function, otherwise false 5158 */ 5159function isFunction(val) { 5160 return toString.call(val) === '[object Function]'; 5161} 5162 5163/** 5164 * Determine if a value is a Stream 5165 * 5166 * @param {Object} val The value to test 5167 * @returns {boolean} True if value is a Stream, otherwise false 5168 */ 5169function isStream(val) { 5170 return isObject(val) && isFunction(val.pipe); 5171} 5172 5173/** 5174 * Determine if a value is a URLSearchParams object 5175 * 5176 * @param {Object} val The value to test 5177 * @returns {boolean} True if value is a URLSearchParams object, otherwise false 5178 */ 5179function isURLSearchParams(val) { 5180 return toString.call(val) === '[object URLSearchParams]'; 5181} 5182 5183/** 5184 * Trim excess whitespace off the beginning and end of a string 5185 * 5186 * @param {String} str The String to trim 5187 * @returns {String} The String freed of excess whitespace 5188 */ 5189function trim(str) { 5190 return str.trim ? str.trim() : str.replace(/^\s+|\s+$/g, ''); 5191} 5192 5193/** 5194 * Determine if we're running in a standard browser environment 5195 * 5196 * This allows axios to run in a web worker, and react-native. 5197 * Both environments support XMLHttpRequest, but not fully standard globals. 5198 * 5199 * web workers: 5200 * typeof window -> undefined 5201 * typeof document -> undefined 5202 * 5203 * react-native: 5204 * navigator.product -> 'ReactNative' 5205 * nativescript 5206 * navigator.product -> 'NativeScript' or 'NS' 5207 */ 5208function isStandardBrowserEnv() { 5209 if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' || 5210 navigator.product === 'NativeScript' || 5211 navigator.product === 'NS')) { 5212 return false; 5213 } 5214 return ( 5215 typeof window !== 'undefined' && 5216 typeof document !== 'undefined' 5217 ); 5218} 5219 5220/** 5221 * Iterate over an Array or an Object invoking a function for each item. 5222 * 5223 * If `obj` is an Array callback will be called passing 5224 * the value, index, and complete array for each item. 5225 * 5226 * If 'obj' is an Object callback will be called passing 5227 * the value, key, and complete object for each property. 5228 * 5229 * @param {Object|Array} obj The object to iterate 5230 * @param {Function} fn The callback to invoke for each item 5231 */ 5232function forEach(obj, fn) { 5233 // Don't bother if no value provided 5234 if (obj === null || typeof obj === 'undefined') { 5235 return; 5236 } 5237 5238 // Force an array if not already something iterable 5239 if (typeof obj !== 'object') { 5240 /*eslint no-param-reassign:0*/ 5241 obj = [obj]; 5242 } 5243 5244 if (isArray(obj)) { 5245 // Iterate over array values 5246 for (var i = 0, l = obj.length; i < l; i++) { 5247 fn.call(null, obj[i], i, obj); 5248 } 5249 } else { 5250 // Iterate over object keys 5251 for (var key in obj) { 5252 if (Object.prototype.hasOwnProperty.call(obj, key)) { 5253 fn.call(null, obj[key], key, obj); 5254 } 5255 } 5256 } 5257} 5258 5259/** 5260 * Accepts varargs expecting each argument to be an object, then 5261 * immutably merges the properties of each object and returns result. 5262 * 5263 * When multiple objects contain the same key the later object in 5264 * the arguments list will take precedence. 5265 * 5266 * Example: 5267 * 5268 * ```js 5269 * var result = merge({foo: 123}, {foo: 456}); 5270 * console.log(result.foo); // outputs 456 5271 * ``` 5272 * 5273 * @param {Object} obj1 Object to merge 5274 * @returns {Object} Result of all merge properties 5275 */ 5276function merge(/* obj1, obj2, obj3, ... */) { 5277 var result = {}; 5278 function assignValue(val, key) { 5279 if (isPlainObject(result[key]) && isPlainObject(val)) { 5280 result[key] = merge(result[key], val); 5281 } else if (isPlainObject(val)) { 5282 result[key] = merge({}, val); 5283 } else if (isArray(val)) { 5284 result[key] = val.slice(); 5285 } else { 5286 result[key] = val; 5287 } 5288 } 5289 5290 for (var i = 0, l = arguments.length; i < l; i++) { 5291 forEach(arguments[i], assignValue); 5292 } 5293 return result; 5294} 5295 5296/** 5297 * Extends object a by mutably adding to it the properties of object b. 5298 * 5299 * @param {Object} a The object to be extended 5300 * @param {Object} b The object to copy properties from 5301 * @param {Object} thisArg The object to bind function to 5302 * @return {Object} The resulting value of object a 5303 */ 5304function extend(a, b, thisArg) { 5305 forEach(b, function assignValue(val, key) { 5306 if (thisArg && typeof val === 'function') { 5307 a[key] = bind(val, thisArg); 5308 } else { 5309 a[key] = val; 5310 } 5311 }); 5312 return a; 5313} 5314 5315/** 5316 * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM) 5317 * 5318 * @param {string} content with BOM 5319 * @return {string} content value without BOM 5320 */ 5321function stripBOM(content) { 5322 if (content.charCodeAt(0) === 0xFEFF) { 5323 content = content.slice(1); 5324 } 5325 return content; 5326} 5327 5328module.exports = { 5329 isArray: isArray, 5330 isArrayBuffer: isArrayBuffer, 5331 isBuffer: isBuffer, 5332 isFormData: isFormData, 5333 isArrayBufferView: isArrayBufferView, 5334 isString: isString, 5335 isNumber: isNumber, 5336 isObject: isObject, 5337 isPlainObject: isPlainObject, 5338 isUndefined: isUndefined, 5339 isDate: isDate, 5340 isFile: isFile, 5341 isBlob: isBlob, 5342 isFunction: isFunction, 5343 isStream: isStream, 5344 isURLSearchParams: isURLSearchParams, 5345 isStandardBrowserEnv: isStandardBrowserEnv, 5346 forEach: forEach, 5347 merge: merge, 5348 extend: extend, 5349 trim: trim, 5350 stripBOM: stripBOM 5351}; 5352 5353 5354/***/ }), 5355 5356/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/ExampleComponent.vue?vue&type=script&lang=js&": 5357/*!***********************************************************************************************************************************************************************************************************************!*\ 5358 !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/ExampleComponent.vue?vue&type=script&lang=js& ***! 5359 \***********************************************************************************************************************************************************************************************************************/ 5360/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 5361 5362"use strict"; 5363__webpack_require__.r(__webpack_exports__); 5364/* harmony export */ __webpack_require__.d(__webpack_exports__, { 5365/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 5366/* harmony export */ }); 5367// 5368// 5369// 5370// 5371// 5372// 5373// 5374// 5375// 5376// 5377// 5378// 5379// 5380// 5381// 5382// 5383/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ 5384 mounted: function mounted() { 5385 console.log('Component mounted.'); 5386 } 5387}); 5388 5389/***/ }), 5390 5391/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/RoleAssignButton.vue?vue&type=script&lang=js&": 5392/*!***********************************************************************************************************************************************************************************************************************!*\ 5393 !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/RoleAssignButton.vue?vue&type=script&lang=js& ***! 5394 \***********************************************************************************************************************************************************************************************************************/ 5395/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 5396 5397"use strict"; 5398__webpack_require__.r(__webpack_exports__); 5399/* harmony export */ __webpack_require__.d(__webpack_exports__, { 5400/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 5401/* harmony export */ }); 5402// 5403// 5404// 5405// 5406// 5407// 5408/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ 5409 name: "role-assign-button", 5410 props: ['userid', 'roleid', 'assigned'], 5411 data: function data() { 5412 return { 5413 status: this.assigned 5414 }; 5415 }, 5416 methods: { 5417 roleAssignment: function roleAssignment() { 5418 var _this = this; 5419 5420 axios.post('/administration/roles/assign/' + this.userid + '/' + this.roleid).then(function (response) { 5421 _this.assigned = !_this.assigned; 5422 }); 5423 } 5424 }, 5425 computed: { 5426 buttonText: function buttonText() { 5427 return this.assigned ? 'Assigned' : 'Unassigned'; 5428 } 5429 } 5430}); 5431 5432/***/ }), 5433
5434/***/ "./resources/js/app.js": 5435/*!*****************************!*\ 5436 !*** ./resources/js/app.js ***! 5437 \*****************************/ 5438/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { 5439 5440/** 5441 * First we will load all of this project's JavaScript dependencies which 5442 * includes Vue and other libraries. It is a great starting point when 5443 * building robust, powerful web applications using Vue and Laravel. 5444 */ 5445__webpack_require__(/*! ./bootstrap */ "./resources/js/bootstrap.js"); 5446 5447window.Vue = (__webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm.js")["default"]); 5448/** 5449 * The following block of code may be used to automatically register your 5450 * Vue components. It will recursively scan this directory for the Vue 5451 * components and automatically register them with their "basename". 5452 * 5453 * Eg. ./components/ExampleComponent.vue -> <example-component></example-component> 5454 */ 5455// const files = require.context('./', true, /\.vue$/i) 5456// files.keys().map(key => Vue.component(key.split('/').pop().split('.')[0], files(key).default)) 5457 5458Vue.component('example-component', (__webpack_require__(/*! ./components/ExampleComponent.vue */ "./resources/js/components/ExampleComponent.vue")["default"])); 5459Vue.component('role-assign-button', (__webpack_require__(/*! ./components/RoleAssignButton.vue */ "./resources/js/components/RoleAssignButton.vue")["default"])); 5460/** 5461 * Next, we will create a fresh Vue application instance and attach it to 5462 * the page. Then, you may begin adding components to this application 5463 * or customize the JavaScript scaffolding to fit your unique needs. 5464 */ 5465 5466var app = new Vue({ 5467 el: '#app' 5468}); 5469 5470/***/ }), 5471
5472/***/ "./resources/js/bootstrap.js": 5473/*!***********************************!*\ 5474 !*** ./resources/js/bootstrap.js ***! 5475 \***********************************/ 5476/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { 5477 5478window._ = __webpack_require__(/*! lodash */ "./node_modules/lodash/lodash.js"); 5479 5480try { 5481 __webpack_require__(/*! bootstrap */ "./node_modules/bootstrap/dist/js/bootstrap.esm.js"); 5482} catch (e) {} 5483/** 5484 * We'll load the axios HTTP library which allows us to easily issue requests 5485 * to our Laravel back-end. This library automatically handles sending the 5486 * CSRF token as a header based on the value of the "XSRF" token cookie. 5487 */ 5488 5489 5490window.axios = __webpack_require__(/*! axios */ "./node_modules/axios/index.js"); 5491window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; 5492/** 5493 * Echo exposes an expressive API for subscribing to channels and listening 5494 * for events that are broadcast by Laravel. Echo and event broadcasting 5495 * allows your team to easily build robust real-time web applications. 5496 */ 5497// import Echo from 'laravel-echo'; 5498// window.Pusher = require('pusher-js'); 5499// window.Echo = new Echo({ 5500// broadcaster: 'pusher', 5501// key: process.env.MIX_PUSHER_APP_KEY, 5502// cluster: process.env.MIX_PUSHER_APP_CLUSTER, 5503// forceTLS: true 5504// }); 5505 5506/***/ }), 5507
vendor: 141,348 bytes, lines 5508-10534
5508/***/ "./node_modules/bootstrap/dist/js/bootstrap.esm.js": 5509/*!*********************************************************!*\ 5510 !*** ./node_modules/bootstrap/dist/js/bootstrap.esm.js ***! 5511 \*********************************************************/ 5512/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 5513 5514"use strict"; 5515__webpack_require__.r(__webpack_exports__); 5516/* harmony export */ __webpack_require__.d(__webpack_exports__, { 5517/* harmony export */ "Alert": () => (/* binding */ Alert), 5518/* harmony export */ "Button": () => (/* binding */ Button), 5519/* harmony export */ "Carousel": () => (/* binding */ Carousel), 5520/* harmony export */ "Collapse": () => (/* binding */ Collapse), 5521/* harmony export */ "Dropdown": () => (/* binding */ Dropdown), 5522/* harmony export */ "Modal": () => (/* binding */ Modal), 5523/* harmony export */ "Offcanvas": () => (/* binding */ Offcanvas), 5524/* harmony export */ "Popover": () => (/* binding */ Popover), 5525/* harmony export */ "ScrollSpy": () => (/* binding */ ScrollSpy), 5526/* harmony export */ "Tab": () => (/* binding */ Tab), 5527/* harmony export */ "Toast": () => (/* binding */ Toast), 5528/* harmony export */ "Tooltip": () => (/* binding */ Tooltip) 5529/* harmony export */ }); 5530/* harmony import */ var _popperjs_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @popperjs/core */ "./node_modules/@popperjs/core/lib/index.js"); 5531/* harmony import */ var _popperjs_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @popperjs/core */ "./node_modules/@popperjs/core/lib/popper.js"); 5532/*! 5533 * Bootstrap v5.1.3 (https://getbootstrap.com/) 5534 * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) 5535 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 5536 */ 5537 5538 5539/** 5540 * -------------------------------------------------------------------------- 5541 * Bootstrap (v5.1.3): util/index.js 5542 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 5543 * -------------------------------------------------------------------------- 5544 */ 5545const MAX_UID = 1000000; 5546const MILLISECONDS_MULTIPLIER = 1000; 5547const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp) 5548 5549const toType = obj => { 5550 if (obj === null || obj === undefined) { 5551 return `${obj}`; 5552 } 5553 5554 return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase(); 5555}; 5556/** 5557 * -------------------------------------------------------------------------- 5558 * Public Util Api 5559 * -------------------------------------------------------------------------- 5560 */ 5561 5562 5563const getUID = prefix => { 5564 do { 5565 prefix += Math.floor(Math.random() * MAX_UID); 5566 } while (document.getElementById(prefix)); 5567 5568 return prefix; 5569}; 5570 5571const getSelector = element => { 5572 let selector = element.getAttribute('data-bs-target'); 5573 5574 if (!selector || selector === '#') { 5575 let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes, 5576 // so everything starting with `#` or `.`. If a "real" URL is used as the selector, 5577 // `document.querySelector` will rightfully complain it is invalid. 5578 // See https://github.com/twbs/bootstrap/issues/32273 5579 5580 if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) { 5581 return null; 5582 } // Just in case some CMS puts out a full URL with the anchor appended 5583 5584 5585 if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) { 5586 hrefAttr = `#${hrefAttr.split('#')[1]}`; 5587 } 5588 5589 selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null; 5590 } 5591 5592 return selector; 5593}; 5594 5595const getSelectorFromElement = element => { 5596 const selector = getSelector(element); 5597 5598 if (selector) { 5599 return document.querySelector(selector) ? selector : null; 5600 } 5601 5602 return null; 5603}; 5604 5605const getElementFromSelector = element => { 5606 const selector = getSelector(element); 5607 return selector ? document.querySelector(selector) : null; 5608}; 5609 5610const getTransitionDurationFromElement = element => { 5611 if (!element) { 5612 return 0; 5613 } // Get transition-duration of the element 5614 5615 5616 let { 5617 transitionDuration, 5618 transitionDelay 5619 } = window.getComputedStyle(element); 5620 const floatTransitionDuration = Number.parseFloat(transitionDuration); 5621 const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found 5622 5623 if (!floatTransitionDuration && !floatTransitionDelay) { 5624 return 0; 5625 } // If multiple durations are defined, take the first 5626 5627 5628 transitionDuration = transitionDuration.split(',')[0]; 5629 transitionDelay = transitionDelay.split(',')[0]; 5630 return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER; 5631}; 5632 5633const triggerTransitionEnd = element => { 5634 element.dispatchEvent(new Event(TRANSITION_END)); 5635}; 5636 5637const isElement = obj => { 5638 if (!obj || typeof obj !== 'object') { 5639 return false; 5640 } 5641 5642 if (typeof obj.jquery !== 'undefined') { 5643 obj = obj[0]; 5644 } 5645 5646 return typeof obj.nodeType !== 'undefined'; 5647}; 5648 5649const getElement = obj => { 5650 if (isElement(obj)) { 5651 // it's a jQuery object or a node element 5652 return obj.jquery ? obj[0] : obj; 5653 } 5654 5655 if (typeof obj === 'string' && obj.length > 0) { 5656 return document.querySelector(obj); 5657 } 5658 5659 return null; 5660}; 5661 5662const typeCheckConfig = (componentName, config, configTypes) => { 5663 Object.keys(configTypes).forEach(property => { 5664 const expectedTypes = configTypes[property]; 5665 const value = config[property]; 5666 const valueType = value && isElement(value) ? 'element' : toType(value); 5667 5668 if (!new RegExp(expectedTypes).test(valueType)) { 5669 throw new TypeError(`${componentName.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`); 5670 } 5671 }); 5672}; 5673 5674const isVisible = element => { 5675 if (!isElement(element) || element.getClientRects().length === 0) { 5676 return false; 5677 } 5678 5679 return getComputedStyle(element).getPropertyValue('visibility') === 'visible'; 5680}; 5681 5682const isDisabled = element => { 5683 if (!element || element.nodeType !== Node.ELEMENT_NODE) { 5684 return true; 5685 } 5686 5687 if (element.classList.contains('disabled')) { 5688 return true; 5689 } 5690 5691 if (typeof element.disabled !== 'undefined') { 5692 return element.disabled; 5693 } 5694 5695 return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'; 5696}; 5697 5698const findShadowRoot = element => { 5699 if (!document.documentElement.attachShadow) { 5700 return null; 5701 } // Can find the shadow root otherwise it'll return the document 5702 5703 5704 if (typeof element.getRootNode === 'function') { 5705 const root = element.getRootNode(); 5706 return root instanceof ShadowRoot ? root : null; 5707 } 5708 5709 if (element instanceof ShadowRoot) { 5710 return element; 5711 } // when we don't find a shadow root 5712 5713 5714 if (!element.parentNode) { 5715 return null; 5716 } 5717 5718 return findShadowRoot(element.parentNode); 5719}; 5720 5721const noop = () => {}; 5722/** 5723 * Trick to restart an element's animation 5724 * 5725 * @param {HTMLElement} element 5726 * @return void 5727 * 5728 * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation 5729 */ 5730 5731 5732const reflow = element => { 5733 // eslint-disable-next-line no-unused-expressions 5734 element.offsetHeight; 5735}; 5736 5737const getjQuery = () => { 5738 const { 5739 jQuery 5740 } = window; 5741 5742 if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) { 5743 return jQuery; 5744 } 5745 5746 return null; 5747}; 5748 5749const DOMContentLoadedCallbacks = []; 5750 5751const onDOMContentLoaded = callback => { 5752 if (document.readyState === 'loading') { 5753 // add listener on the first call when the document is in loading state 5754 if (!DOMContentLoadedCallbacks.length) { 5755 document.addEventListener('DOMContentLoaded', () => { 5756 DOMContentLoadedCallbacks.forEach(callback => callback()); 5757 }); 5758 } 5759 5760 DOMContentLoadedCallbacks.push(callback); 5761 } else { 5762 callback(); 5763 } 5764}; 5765 5766const isRTL = () => document.documentElement.dir === 'rtl'; 5767 5768const defineJQueryPlugin = plugin => { 5769 onDOMContentLoaded(() => { 5770 const $ = getjQuery(); 5771 /* istanbul ignore if */ 5772 5773 if ($) { 5774 const name = plugin.NAME; 5775 const JQUERY_NO_CONFLICT = $.fn[name]; 5776 $.fn[name] = plugin.jQueryInterface; 5777 $.fn[name].Constructor = plugin; 5778 5779 $.fn[name].noConflict = () => { 5780 $.fn[name] = JQUERY_NO_CONFLICT; 5781 return plugin.jQueryInterface; 5782 }; 5783 } 5784 }); 5785}; 5786 5787const execute = callback => { 5788 if (typeof callback === 'function') { 5789 callback(); 5790 } 5791}; 5792 5793const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => { 5794 if (!waitForTransition) { 5795 execute(callback); 5796 return; 5797 } 5798 5799 const durationPadding = 5; 5800 const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding; 5801 let called = false; 5802 5803 const handler = ({ 5804 target 5805 }) => { 5806 if (target !== transitionElement) { 5807 return; 5808 } 5809 5810 called = true; 5811 transitionElement.removeEventListener(TRANSITION_END, handler); 5812 execute(callback); 5813 }; 5814 5815 transitionElement.addEventListener(TRANSITION_END, handler); 5816 setTimeout(() => { 5817 if (!called) { 5818 triggerTransitionEnd(transitionElement); 5819 } 5820 }, emulatedDuration); 5821}; 5822/** 5823 * Return the previous/next element of a list. 5824 * 5825 * @param {array} list The list of elements 5826 * @param activeElement The active element 5827 * @param shouldGetNext Choose to get next or previous element 5828 * @param isCycleAllowed 5829 * @return {Element|elem} The proper element 5830 */ 5831 5832 5833const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => { 5834 let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed 5835 5836 if (index === -1) { 5837 return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0]; 5838 } 5839 5840 const listLength = list.length; 5841 index += shouldGetNext ? 1 : -1; 5842 5843 if (isCycleAllowed) { 5844 index = (index + listLength) % listLength; 5845 } 5846 5847 return list[Math.max(0, Math.min(index, listLength - 1))]; 5848}; 5849 5850/** 5851 * -------------------------------------------------------------------------- 5852 * Bootstrap (v5.1.3): dom/event-handler.js 5853 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 5854 * -------------------------------------------------------------------------- 5855 */ 5856/** 5857 * ------------------------------------------------------------------------ 5858 * Constants 5859 * ------------------------------------------------------------------------ 5860 */ 5861 5862const namespaceRegex = /[^.]*(?=\..*)\.|.*/; 5863const stripNameRegex = /\..*/; 5864const stripUidRegex = /::\d+$/; 5865const eventRegistry = {}; // Events storage 5866 5867let uidEvent = 1; 5868const customEvents = { 5869 mouseenter: 'mouseover', 5870 mouseleave: 'mouseout' 5871}; 5872const customEventsRegex = /^(mouseenter|mouseleave)/i; 5873const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']); 5874/** 5875 * ------------------------------------------------------------------------ 5876 * Private methods 5877 * ------------------------------------------------------------------------ 5878 */ 5879 5880function getUidEvent(element, uid) { 5881 return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++; 5882} 5883 5884function getEvent(element) { 5885 const uid = getUidEvent(element); 5886 element.uidEvent = uid; 5887 eventRegistry[uid] = eventRegistry[uid] || {}; 5888 return eventRegistry[uid]; 5889} 5890 5891function bootstrapHandler(element, fn) { 5892 return function handler(event) { 5893 event.delegateTarget = element; 5894 5895 if (handler.oneOff) { 5896 EventHandler.off(element, event.type, fn); 5897 } 5898 5899 return fn.apply(element, [event]); 5900 }; 5901} 5902 5903function bootstrapDelegationHandler(element, selector, fn) { 5904 return function handler(event) { 5905 const domElements = element.querySelectorAll(selector); 5906 5907 for (let { 5908 target 5909 } = event; target && target !== this; target = target.parentNode) { 5910 for (let i = domElements.length; i--;) { 5911 if (domElements[i] === target) { 5912 event.delegateTarget = target; 5913 5914 if (handler.oneOff) { 5915 EventHandler.off(element, event.type, selector, fn); 5916 } 5917 5918 return fn.apply(target, [event]); 5919 } 5920 } 5921 } // To please ESLint 5922 5923 5924 return null; 5925 }; 5926} 5927 5928function findHandler(events, handler, delegationSelector = null) { 5929 const uidEventList = Object.keys(events); 5930 5931 for (let i = 0, len = uidEventList.length; i < len; i++) { 5932 const event = events[uidEventList[i]]; 5933 5934 if (event.originalHandler === handler && event.delegationSelector === delegationSelector) { 5935 return event; 5936 } 5937 } 5938 5939 return null; 5940} 5941 5942function normalizeParams(originalTypeEvent, handler, delegationFn) { 5943 const delegation = typeof handler === 'string'; 5944 const originalHandler = delegation ? delegationFn : handler; 5945 let typeEvent = getTypeEvent(originalTypeEvent); 5946 const isNative = nativeEvents.has(typeEvent); 5947 5948 if (!isNative) { 5949 typeEvent = originalTypeEvent; 5950 } 5951 5952 return [delegation, originalHandler, typeEvent]; 5953} 5954 5955function addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) { 5956 if (typeof originalTypeEvent !== 'string' || !element) { 5957 return; 5958 } 5959 5960 if (!handler) { 5961 handler = delegationFn; 5962 delegationFn = null; 5963 } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position 5964 // this prevents the handler from being dispatched the same way as mouseover or mouseout does 5965 5966 5967 if (customEventsRegex.test(originalTypeEvent)) { 5968 const wrapFn = fn => { 5969 return function (event) { 5970 if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) { 5971 return fn.call(this, event); 5972 } 5973 }; 5974 }; 5975 5976 if (delegationFn) { 5977 delegationFn = wrapFn(delegationFn); 5978 } else { 5979 handler = wrapFn(handler); 5980 } 5981 } 5982 5983 const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn); 5984 const events = getEvent(element); 5985 const handlers = events[typeEvent] || (events[typeEvent] = {}); 5986 const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null); 5987 5988 if (previousFn) { 5989 previousFn.oneOff = previousFn.oneOff && oneOff; 5990 return; 5991 } 5992 5993 const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, '')); 5994 const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler); 5995 fn.delegationSelector = delegation ? handler : null; 5996 fn.originalHandler = originalHandler; 5997 fn.oneOff = oneOff; 5998 fn.uidEvent = uid; 5999 handlers[uid] = fn; 6000 element.addEventListener(typeEvent, fn, delegation); 6001} 6002 6003function removeHandler(element, events, typeEvent, handler, delegationSelector) { 6004 const fn = findHandler(events[typeEvent], handler, delegationSelector); 6005 6006 if (!fn) { 6007 return; 6008 } 6009 6010 element.removeEventListener(typeEvent, fn, Boolean(delegationSelector)); 6011 delete events[typeEvent][fn.uidEvent]; 6012} 6013 6014function removeNamespacedHandlers(element, events, typeEvent, namespace) { 6015 const storeElementEvent = events[typeEvent] || {}; 6016 Object.keys(storeElementEvent).forEach(handlerKey => { 6017 if (handlerKey.includes(namespace)) { 6018 const event = storeElementEvent[handlerKey]; 6019 removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector); 6020 } 6021 }); 6022} 6023 6024function getTypeEvent(event) { 6025 // allow to get the native events from namespaced events ('click.bs.button' --> 'click') 6026 event = event.replace(stripNameRegex, ''); 6027 return customEvents[event] || event; 6028} 6029 6030const EventHandler = { 6031 on(element, event, handler, delegationFn) { 6032 addHandler(element, event, handler, delegationFn, false); 6033 }, 6034 6035 one(element, event, handler, delegationFn) { 6036 addHandler(element, event, handler, delegationFn, true); 6037 }, 6038 6039 off(element, originalTypeEvent, handler, delegationFn) { 6040 if (typeof originalTypeEvent !== 'string' || !element) { 6041 return; 6042 } 6043 6044 const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn); 6045 const inNamespace = typeEvent !== originalTypeEvent; 6046 const events = getEvent(element); 6047 const isNamespace = originalTypeEvent.startsWith('.'); 6048 6049 if (typeof originalHandler !== 'undefined') { 6050 // Simplest case: handler is passed, remove that listener ONLY. 6051 if (!events || !events[typeEvent]) { 6052 return; 6053 } 6054 6055 removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null); 6056 return; 6057 } 6058 6059 if (isNamespace) { 6060 Object.keys(events).forEach(elementEvent => { 6061 removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1)); 6062 }); 6063 } 6064 6065 const storeElementEvent = events[typeEvent] || {}; 6066 Object.keys(storeElementEvent).forEach(keyHandlers => { 6067 const handlerKey = keyHandlers.replace(stripUidRegex, ''); 6068 6069 if (!inNamespace || originalTypeEvent.includes(handlerKey)) { 6070 const event = storeElementEvent[keyHandlers]; 6071 removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector); 6072 } 6073 }); 6074 }, 6075 6076 trigger(element, event, args) { 6077 if (typeof event !== 'string' || !element) { 6078 return null; 6079 } 6080 6081 const $ = getjQuery(); 6082 const typeEvent = getTypeEvent(event); 6083 const inNamespace = event !== typeEvent; 6084 const isNative = nativeEvents.has(typeEvent); 6085 let jQueryEvent; 6086 let bubbles = true; 6087 let nativeDispatch = true; 6088 let defaultPrevented = false; 6089 let evt = null; 6090 6091 if (inNamespace && $) { 6092 jQueryEvent = $.Event(event, args); 6093 $(element).trigger(jQueryEvent); 6094 bubbles = !jQueryEvent.isPropagationStopped(); 6095 nativeDispatch = !jQueryEvent.isImmediatePropagationStopped(); 6096 defaultPrevented = jQueryEvent.isDefaultPrevented(); 6097 } 6098 6099 if (isNative) { 6100 evt = document.createEvent('HTMLEvents'); 6101 evt.initEvent(typeEvent, bubbles, true); 6102 } else { 6103 evt = new CustomEvent(event, { 6104 bubbles, 6105 cancelable: true 6106 }); 6107 } // merge custom information in our event 6108 6109 6110 if (typeof args !== 'undefined') { 6111 Object.keys(args).forEach(key => { 6112 Object.defineProperty(evt, key, { 6113 get() { 6114 return args[key]; 6115 } 6116 6117 }); 6118 }); 6119 } 6120 6121 if (defaultPrevented) { 6122 evt.preventDefault(); 6123 } 6124 6125 if (nativeDispatch) { 6126 element.dispatchEvent(evt); 6127 } 6128 6129 if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') { 6130 jQueryEvent.preventDefault(); 6131 } 6132 6133 return evt; 6134 } 6135 6136}; 6137 6138/** 6139 * -------------------------------------------------------------------------- 6140 * Bootstrap (v5.1.3): dom/data.js 6141 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6142 * -------------------------------------------------------------------------- 6143 */ 6144 6145/** 6146 * ------------------------------------------------------------------------ 6147 * Constants 6148 * ------------------------------------------------------------------------ 6149 */ 6150const elementMap = new Map(); 6151const Data = { 6152 set(element, key, instance) { 6153 if (!elementMap.has(element)) { 6154 elementMap.set(element, new Map()); 6155 } 6156 6157 const instanceMap = elementMap.get(element); // make it clear we only want one instance per element 6158 // can be removed later when multiple key/instances are fine to be used 6159 6160 if (!instanceMap.has(key) && instanceMap.size !== 0) { 6161 // eslint-disable-next-line no-console 6162 console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`); 6163 return; 6164 } 6165 6166 instanceMap.set(key, instance); 6167 }, 6168 6169 get(element, key) { 6170 if (elementMap.has(element)) { 6171 return elementMap.get(element).get(key) || null; 6172 } 6173 6174 return null; 6175 }, 6176 6177 remove(element, key) { 6178 if (!elementMap.has(element)) { 6179 return; 6180 } 6181 6182 const instanceMap = elementMap.get(element); 6183 instanceMap.delete(key); // free up element references if there are no instances left for an element 6184 6185 if (instanceMap.size === 0) { 6186 elementMap.delete(element); 6187 } 6188 } 6189 6190}; 6191 6192/** 6193 * -------------------------------------------------------------------------- 6194 * Bootstrap (v5.1.3): base-component.js 6195 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6196 * -------------------------------------------------------------------------- 6197 */ 6198/** 6199 * ------------------------------------------------------------------------ 6200 * Constants 6201 * ------------------------------------------------------------------------ 6202 */ 6203 6204const VERSION = '5.1.3'; 6205 6206class BaseComponent { 6207 constructor(element) { 6208 element = getElement(element); 6209 6210 if (!element) { 6211 return; 6212 } 6213 6214 this._element = element; 6215 Data.set(this._element, this.constructor.DATA_KEY, this); 6216 } 6217 6218 dispose() { 6219 Data.remove(this._element, this.constructor.DATA_KEY); 6220 EventHandler.off(this._element, this.constructor.EVENT_KEY); 6221 Object.getOwnPropertyNames(this).forEach(propertyName => { 6222 this[propertyName] = null; 6223 }); 6224 } 6225 6226 _queueCallback(callback, element, isAnimated = true) { 6227 executeAfterTransition(callback, element, isAnimated); 6228 } 6229 /** Static */ 6230 6231 6232 static getInstance(element) { 6233 return Data.get(getElement(element), this.DATA_KEY); 6234 } 6235 6236 static getOrCreateInstance(element, config = {}) { 6237 return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null); 6238 } 6239 6240 static get VERSION() { 6241 return VERSION; 6242 } 6243 6244 static get NAME() { 6245 throw new Error('You have to implement the static method "NAME", for each component!'); 6246 } 6247 6248 static get DATA_KEY() { 6249 return `bs.${this.NAME}`; 6250 } 6251 6252 static get EVENT_KEY() { 6253 return `.${this.DATA_KEY}`; 6254 } 6255 6256} 6257 6258/** 6259 * -------------------------------------------------------------------------- 6260 * Bootstrap (v5.1.3): util/component-functions.js 6261 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6262 * -------------------------------------------------------------------------- 6263 */ 6264 6265const enableDismissTrigger = (component, method = 'hide') => { 6266 const clickEvent = `click.dismiss${component.EVENT_KEY}`; 6267 const name = component.NAME; 6268 EventHandler.on(document, clickEvent, `[data-bs-dismiss="${name}"]`, function (event) { 6269 if (['A', 'AREA'].includes(this.tagName)) { 6270 event.preventDefault(); 6271 } 6272 6273 if (isDisabled(this)) { 6274 return; 6275 } 6276 6277 const target = getElementFromSelector(this) || this.closest(`.${name}`); 6278 const instance = component.getOrCreateInstance(target); // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method 6279 6280 instance[method](); 6281 }); 6282}; 6283 6284/** 6285 * -------------------------------------------------------------------------- 6286 * Bootstrap (v5.1.3): alert.js 6287 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6288 * -------------------------------------------------------------------------- 6289 */ 6290/** 6291 * ------------------------------------------------------------------------ 6292 * Constants 6293 * ------------------------------------------------------------------------ 6294 */ 6295 6296const NAME$d = 'alert'; 6297const DATA_KEY$c = 'bs.alert'; 6298const EVENT_KEY$c = `.${DATA_KEY$c}`; 6299const EVENT_CLOSE = `close${EVENT_KEY$c}`; 6300const EVENT_CLOSED = `closed${EVENT_KEY$c}`; 6301const CLASS_NAME_FADE$5 = 'fade'; 6302const CLASS_NAME_SHOW$8 = 'show'; 6303/** 6304 * ------------------------------------------------------------------------ 6305 * Class Definition 6306 * ------------------------------------------------------------------------ 6307 */ 6308 6309class Alert extends BaseComponent { 6310 // Getters 6311 static get NAME() { 6312 return NAME$d; 6313 } // Public 6314 6315 6316 close() { 6317 const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE); 6318 6319 if (closeEvent.defaultPrevented) { 6320 return; 6321 } 6322 6323 this._element.classList.remove(CLASS_NAME_SHOW$8); 6324 6325 const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5); 6326 6327 this._queueCallback(() => this._destroyElement(), this._element, isAnimated); 6328 } // Private 6329 6330 6331 _destroyElement() { 6332 this._element.remove(); 6333 6334 EventHandler.trigger(this._element, EVENT_CLOSED); 6335 this.dispose(); 6336 } // Static 6337 6338 6339 static jQueryInterface(config) { 6340 return this.each(function () { 6341 const data = Alert.getOrCreateInstance(this); 6342 6343 if (typeof config !== 'string') { 6344 return; 6345 } 6346 6347 if (data[config] === undefined || config.startsWith('_') || config === 'constructor') { 6348 throw new TypeError(`No method named "${config}"`); 6349 } 6350 6351 data[config](this); 6352 }); 6353 } 6354 6355} 6356/** 6357 * ------------------------------------------------------------------------ 6358 * Data Api implementation 6359 * ------------------------------------------------------------------------ 6360 */ 6361 6362 6363enableDismissTrigger(Alert, 'close'); 6364/** 6365 * ------------------------------------------------------------------------ 6366 * jQuery 6367 * ------------------------------------------------------------------------ 6368 * add .Alert to jQuery only if jQuery is present 6369 */ 6370 6371defineJQueryPlugin(Alert); 6372 6373/** 6374 * -------------------------------------------------------------------------- 6375 * Bootstrap (v5.1.3): button.js 6376 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6377 * -------------------------------------------------------------------------- 6378 */ 6379/** 6380 * ------------------------------------------------------------------------ 6381 * Constants 6382 * ------------------------------------------------------------------------ 6383 */ 6384 6385const NAME$c = 'button'; 6386const DATA_KEY$b = 'bs.button'; 6387const EVENT_KEY$b = `.${DATA_KEY$b}`; 6388const DATA_API_KEY$7 = '.data-api'; 6389const CLASS_NAME_ACTIVE$3 = 'active'; 6390const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle="button"]'; 6391const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$b}${DATA_API_KEY$7}`; 6392/** 6393 * ------------------------------------------------------------------------ 6394 * Class Definition 6395 * ------------------------------------------------------------------------ 6396 */ 6397 6398class Button extends BaseComponent { 6399 // Getters 6400 static get NAME() { 6401 return NAME$c; 6402 } // Public 6403 6404 6405 toggle() { 6406 // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method 6407 this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3)); 6408 } // Static 6409 6410 6411 static jQueryInterface(config) { 6412 return this.each(function () { 6413 const data = Button.getOrCreateInstance(this); 6414 6415 if (config === 'toggle') { 6416 data[config](); 6417 } 6418 }); 6419 } 6420 6421} 6422/** 6423 * ------------------------------------------------------------------------ 6424 * Data Api implementation 6425 * ------------------------------------------------------------------------ 6426 */ 6427 6428 6429EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => { 6430 event.preventDefault(); 6431 const button = event.target.closest(SELECTOR_DATA_TOGGLE$5); 6432 const data = Button.getOrCreateInstance(button); 6433 data.toggle(); 6434}); 6435/** 6436 * ------------------------------------------------------------------------ 6437 * jQuery 6438 * ------------------------------------------------------------------------ 6439 * add .Button to jQuery only if jQuery is present 6440 */ 6441 6442defineJQueryPlugin(Button); 6443 6444/** 6445 * -------------------------------------------------------------------------- 6446 * Bootstrap (v5.1.3): dom/manipulator.js 6447 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6448 * -------------------------------------------------------------------------- 6449 */ 6450function normalizeData(val) { 6451 if (val === 'true') { 6452 return true; 6453 } 6454 6455 if (val === 'false') { 6456 return false; 6457 } 6458 6459 if (val === Number(val).toString()) { 6460 return Number(val); 6461 } 6462 6463 if (val === '' || val === 'null') { 6464 return null; 6465 } 6466 6467 return val; 6468} 6469 6470function normalizeDataKey(key) { 6471 return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`); 6472} 6473 6474const Manipulator = { 6475 setDataAttribute(element, key, value) { 6476 element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value); 6477 }, 6478 6479 removeDataAttribute(element, key) { 6480 element.removeAttribute(`data-bs-${normalizeDataKey(key)}`); 6481 }, 6482 6483 getDataAttributes(element) { 6484 if (!element) { 6485 return {}; 6486 } 6487 6488 const attributes = {}; 6489 Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => { 6490 let pureKey = key.replace(/^bs/, ''); 6491 pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length); 6492 attributes[pureKey] = normalizeData(element.dataset[key]); 6493 }); 6494 return attributes; 6495 }, 6496 6497 getDataAttribute(element, key) { 6498 return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`)); 6499 }, 6500 6501 offset(element) { 6502 const rect = element.getBoundingClientRect(); 6503 return { 6504 top: rect.top + window.pageYOffset, 6505 left: rect.left + window.pageXOffset 6506 }; 6507 }, 6508 6509 position(element) { 6510 return { 6511 top: element.offsetTop, 6512 left: element.offsetLeft 6513 }; 6514 } 6515 6516}; 6517 6518/** 6519 * -------------------------------------------------------------------------- 6520 * Bootstrap (v5.1.3): dom/selector-engine.js 6521 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6522 * -------------------------------------------------------------------------- 6523 */ 6524const NODE_TEXT = 3; 6525const SelectorEngine = { 6526 find(selector, element = document.documentElement) { 6527 return [].concat(...Element.prototype.querySelectorAll.call(element, selector)); 6528 }, 6529 6530 findOne(selector, element = document.documentElement) { 6531 return Element.prototype.querySelector.call(element, selector); 6532 }, 6533 6534 children(element, selector) { 6535 return [].concat(...element.children).filter(child => child.matches(selector)); 6536 }, 6537 6538 parents(element, selector) { 6539 const parents = []; 6540 let ancestor = element.parentNode; 6541 6542 while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) { 6543 if (ancestor.matches(selector)) { 6544 parents.push(ancestor); 6545 } 6546 6547 ancestor = ancestor.parentNode; 6548 } 6549 6550 return parents; 6551 }, 6552 6553 prev(element, selector) { 6554 let previous = element.previousElementSibling; 6555 6556 while (previous) { 6557 if (previous.matches(selector)) { 6558 return [previous]; 6559 } 6560 6561 previous = previous.previousElementSibling; 6562 } 6563 6564 return []; 6565 }, 6566 6567 next(element, selector) { 6568 let next = element.nextElementSibling; 6569 6570 while (next) { 6571 if (next.matches(selector)) { 6572 return [next]; 6573 } 6574 6575 next = next.nextElementSibling; 6576 } 6577 6578 return []; 6579 }, 6580 6581 focusableChildren(element) { 6582 const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable="true"]'].map(selector => `${selector}:not([tabindex^="-"])`).join(', '); 6583 return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el)); 6584 } 6585 6586}; 6587 6588/** 6589 * -------------------------------------------------------------------------- 6590 * Bootstrap (v5.1.3): carousel.js 6591 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6592 * -------------------------------------------------------------------------- 6593 */ 6594/** 6595 * ------------------------------------------------------------------------ 6596 * Constants 6597 * ------------------------------------------------------------------------ 6598 */ 6599 6600const NAME$b = 'carousel'; 6601const DATA_KEY$a = 'bs.carousel'; 6602const EVENT_KEY$a = `.${DATA_KEY$a}`; 6603const DATA_API_KEY$6 = '.data-api'; 6604const ARROW_LEFT_KEY = 'ArrowLeft'; 6605const ARROW_RIGHT_KEY = 'ArrowRight'; 6606const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch 6607 6608const SWIPE_THRESHOLD = 40; 6609const Default$a = { 6610 interval: 5000, 6611 keyboard: true, 6612 slide: false, 6613 pause: 'hover', 6614 wrap: true, 6615 touch: true 6616}; 6617const DefaultType$a = { 6618 interval: '(number|boolean)', 6619 keyboard: 'boolean', 6620 slide: '(boolean|string)', 6621 pause: '(string|boolean)', 6622 wrap: 'boolean', 6623 touch: 'boolean' 6624}; 6625const ORDER_NEXT = 'next'; 6626const ORDER_PREV = 'prev'; 6627const DIRECTION_LEFT = 'left'; 6628const DIRECTION_RIGHT = 'right'; 6629const KEY_TO_DIRECTION = { 6630 [ARROW_LEFT_KEY]: DIRECTION_RIGHT, 6631 [ARROW_RIGHT_KEY]: DIRECTION_LEFT 6632}; 6633const EVENT_SLIDE = `slide${EVENT_KEY$a}`; 6634const EVENT_SLID = `slid${EVENT_KEY$a}`; 6635const EVENT_KEYDOWN = `keydown${EVENT_KEY$a}`; 6636const EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$a}`; 6637const EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$a}`; 6638const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$a}`; 6639const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$a}`; 6640const EVENT_TOUCHEND = `touchend${EVENT_KEY$a}`; 6641const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$a}`; 6642const EVENT_POINTERUP = `pointerup${EVENT_KEY$a}`; 6643const EVENT_DRAG_START = `dragstart${EVENT_KEY$a}`; 6644const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$a}${DATA_API_KEY$6}`; 6645const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`; 6646const CLASS_NAME_CAROUSEL = 'carousel'; 6647const CLASS_NAME_ACTIVE$2 = 'active'; 6648const CLASS_NAME_SLIDE = 'slide'; 6649const CLASS_NAME_END = 'carousel-item-end'; 6650const CLASS_NAME_START = 'carousel-item-start'; 6651const CLASS_NAME_NEXT = 'carousel-item-next'; 6652const CLASS_NAME_PREV = 'carousel-item-prev'; 6653const CLASS_NAME_POINTER_EVENT = 'pointer-event'; 6654const SELECTOR_ACTIVE$1 = '.active'; 6655const SELECTOR_ACTIVE_ITEM = '.active.carousel-item'; 6656const SELECTOR_ITEM = '.carousel-item'; 6657const SELECTOR_ITEM_IMG = '.carousel-item img'; 6658const SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev'; 6659const SELECTOR_INDICATORS = '.carousel-indicators'; 6660const SELECTOR_INDICATOR = '[data-bs-target]'; 6661const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]'; 6662const SELECTOR_DATA_RIDE = '[data-bs-ride="carousel"]'; 6663const POINTER_TYPE_TOUCH = 'touch'; 6664const POINTER_TYPE_PEN = 'pen'; 6665/** 6666 * ------------------------------------------------------------------------ 6667 * Class Definition 6668 * ------------------------------------------------------------------------ 6669 */ 6670 6671class Carousel extends BaseComponent { 6672 constructor(element, config) { 6673 super(element); 6674 this._items = null; 6675 this._interval = null; 6676 this._activeElement = null; 6677 this._isPaused = false; 6678 this._isSliding = false; 6679 this.touchTimeout = null; 6680 this.touchStartX = 0; 6681 this.touchDeltaX = 0; 6682 this._config = this._getConfig(config); 6683 this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element); 6684 this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0; 6685 this._pointerEvent = Boolean(window.PointerEvent); 6686 6687 this._addEventListeners(); 6688 } // Getters 6689 6690 6691 static get Default() { 6692 return Default$a; 6693 } 6694 6695 static get NAME() { 6696 return NAME$b; 6697 } // Public 6698 6699 6700 next() { 6701 this._slide(ORDER_NEXT); 6702 } 6703 6704 nextWhenVisible() { 6705 // Don't call next when the page isn't visible 6706 // or the carousel or its parent isn't visible 6707 if (!document.hidden && isVisible(this._element)) { 6708 this.next(); 6709 } 6710 } 6711 6712 prev() { 6713 this._slide(ORDER_PREV); 6714 } 6715 6716 pause(event) { 6717 if (!event) { 6718 this._isPaused = true; 6719 } 6720 6721 if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) { 6722 triggerTransitionEnd(this._element); 6723 this.cycle(true); 6724 } 6725 6726 clearInterval(this._interval); 6727 this._interval = null; 6728 } 6729 6730 cycle(event) { 6731 if (!event) { 6732 this._isPaused = false; 6733 } 6734 6735 if (this._interval) { 6736 clearInterval(this._interval); 6737 this._interval = null; 6738 } 6739 6740 if (this._config && this._config.interval && !this._isPaused) { 6741 this._updateInterval(); 6742 6743 this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval); 6744 } 6745 } 6746 6747 to(index) { 6748 this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element); 6749 6750 const activeIndex = this._getItemIndex(this._activeElement); 6751 6752 if (index > this._items.length - 1 || index < 0) { 6753 return; 6754 } 6755 6756 if (this._isSliding) { 6757 EventHandler.one(this._element, EVENT_SLID, () => this.to(index)); 6758 return; 6759 } 6760 6761 if (activeIndex === index) { 6762 this.pause(); 6763 this.cycle(); 6764 return; 6765 } 6766 6767 const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV; 6768 6769 this._slide(order, this._items[index]); 6770 } // Private 6771 6772 6773 _getConfig(config) { 6774 config = { ...Default$a, 6775 ...Manipulator.getDataAttributes(this._element), 6776 ...(typeof config === 'object' ? config : {}) 6777 }; 6778 typeCheckConfig(NAME$b, config, DefaultType$a); 6779 return config; 6780 } 6781 6782 _handleSwipe() { 6783 const absDeltax = Math.abs(this.touchDeltaX); 6784 6785 if (absDeltax <= SWIPE_THRESHOLD) { 6786 return; 6787 } 6788 6789 const direction = absDeltax / this.touchDeltaX; 6790 this.touchDeltaX = 0; 6791 6792 if (!direction) { 6793 return; 6794 } 6795 6796 this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT); 6797 } 6798 6799 _addEventListeners() { 6800 if (this._config.keyboard) { 6801 EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event)); 6802 } 6803 6804 if (this._config.pause === 'hover') { 6805 EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event)); 6806 EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event)); 6807 } 6808 6809 if (this._config.touch && this._touchSupported) { 6810 this._addTouchEventListeners(); 6811 } 6812 } 6813 6814 _addTouchEventListeners() { 6815 const hasPointerPenTouch = event => { 6816 return this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH); 6817 }; 6818 6819 const start = event => { 6820 if (hasPointerPenTouch(event)) { 6821 this.touchStartX = event.clientX; 6822 } else if (!this._pointerEvent) { 6823 this.touchStartX = event.touches[0].clientX; 6824 } 6825 }; 6826 6827 const move = event => { 6828 // ensure swiping with one touch and not pinching 6829 this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX; 6830 }; 6831 6832 const end = event => { 6833 if (hasPointerPenTouch(event)) { 6834 this.touchDeltaX = event.clientX - this.touchStartX; 6835 } 6836 6837 this._handleSwipe(); 6838 6839 if (this._config.pause === 'hover') { 6840 // If it's a touch-enabled device, mouseenter/leave are fired as 6841 // part of the mouse compatibility events on first tap - the carousel 6842 // would stop cycling until user tapped out of it; 6843 // here, we listen for touchend, explicitly pause the carousel 6844 // (as if it's the second time we tap on it, mouseenter compat event 6845 // is NOT fired) and after a timeout (to allow for mouse compatibility 6846 // events to fire) we explicitly restart cycling 6847 this.pause(); 6848 6849 if (this.touchTimeout) { 6850 clearTimeout(this.touchTimeout); 6851 } 6852 6853 this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval); 6854 } 6855 }; 6856 6857 SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => { 6858 EventHandler.on(itemImg, EVENT_DRAG_START, event => event.preventDefault()); 6859 }); 6860 6861 if (this._pointerEvent) { 6862 EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event)); 6863 EventHandler.on(this._element, EVENT_POINTERUP, event => end(event)); 6864 6865 this._element.classList.add(CLASS_NAME_POINTER_EVENT); 6866 } else { 6867 EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event)); 6868 EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event)); 6869 EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event)); 6870 } 6871 } 6872 6873 _keydown(event) { 6874 if (/input|textarea/i.test(event.target.tagName)) { 6875 return; 6876 } 6877 6878 const direction = KEY_TO_DIRECTION[event.key]; 6879 6880 if (direction) { 6881 event.preventDefault(); 6882 6883 this._slide(direction); 6884 } 6885 } 6886 6887 _getItemIndex(element) { 6888 this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : []; 6889 return this._items.indexOf(element); 6890 } 6891 6892 _getItemByOrder(order, activeElement) { 6893 const isNext = order === ORDER_NEXT; 6894 return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap); 6895 } 6896 6897 _triggerSlideEvent(relatedTarget, eventDirectionName) { 6898 const targetIndex = this._getItemIndex(relatedTarget); 6899 6900 const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element)); 6901 6902 return EventHandler.trigger(this._element, EVENT_SLIDE, { 6903 relatedTarget, 6904 direction: eventDirectionName, 6905 from: fromIndex, 6906 to: targetIndex 6907 }); 6908 } 6909 6910 _setActiveIndicatorElement(element) { 6911 if (this._indicatorsElement) { 6912 const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement); 6913 activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2); 6914 activeIndicator.removeAttribute('aria-current'); 6915 const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement); 6916 6917 for (let i = 0; i < indicators.length; i++) { 6918 if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) { 6919 indicators[i].classList.add(CLASS_NAME_ACTIVE$2); 6920 indicators[i].setAttribute('aria-current', 'true'); 6921 break; 6922 } 6923 } 6924 } 6925 } 6926 6927 _updateInterval() { 6928 const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element); 6929 6930 if (!element) { 6931 return; 6932 } 6933 6934 const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10); 6935 6936 if (elementInterval) { 6937 this._config.defaultInterval = this._config.defaultInterval || this._config.interval; 6938 this._config.interval = elementInterval; 6939 } else { 6940 this._config.interval = this._config.defaultInterval || this._config.interval; 6941 } 6942 } 6943 6944 _slide(directionOrOrder, element) { 6945 const order = this._directionToOrder(directionOrOrder); 6946 6947 const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element); 6948 6949 const activeElementIndex = this._getItemIndex(activeElement); 6950 6951 const nextElement = element || this._getItemByOrder(order, activeElement); 6952 6953 const nextElementIndex = this._getItemIndex(nextElement); 6954 6955 const isCycling = Boolean(this._interval); 6956 const isNext = order === ORDER_NEXT; 6957 const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END; 6958 const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV; 6959 6960 const eventDirectionName = this._orderToDirection(order); 6961 6962 if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) { 6963 this._isSliding = false; 6964 return; 6965 } 6966 6967 if (this._isSliding) { 6968 return; 6969 } 6970 6971 const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName); 6972 6973 if (slideEvent.defaultPrevented) { 6974 return; 6975 } 6976 6977 if (!activeElement || !nextElement) { 6978 // Some weirdness is happening, so we bail 6979 return; 6980 } 6981 6982 this._isSliding = true; 6983 6984 if (isCycling) { 6985 this.pause(); 6986 } 6987 6988 this._setActiveIndicatorElement(nextElement); 6989 6990 this._activeElement = nextElement; 6991 6992 const triggerSlidEvent = () => { 6993 EventHandler.trigger(this._element, EVENT_SLID, { 6994 relatedTarget: nextElement, 6995 direction: eventDirectionName, 6996 from: activeElementIndex, 6997 to: nextElementIndex 6998 }); 6999 }; 7000 7001 if (this._element.classList.contains(CLASS_NAME_SLIDE)) { 7002 nextElement.classList.add(orderClassName); 7003 reflow(nextElement); 7004 activeElement.classList.add(directionalClassName); 7005 nextElement.classList.add(directionalClassName); 7006 7007 const completeCallBack = () => { 7008 nextElement.classList.remove(directionalClassName, orderClassName); 7009 nextElement.classList.add(CLASS_NAME_ACTIVE$2); 7010 activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName); 7011 this._isSliding = false; 7012 setTimeout(triggerSlidEvent, 0); 7013 }; 7014 7015 this._queueCallback(completeCallBack, activeElement, true); 7016 } else { 7017 activeElement.classList.remove(CLASS_NAME_ACTIVE$2); 7018 nextElement.classList.add(CLASS_NAME_ACTIVE$2); 7019 this._isSliding = false; 7020 triggerSlidEvent(); 7021 } 7022 7023 if (isCycling) { 7024 this.cycle(); 7025 } 7026 } 7027 7028 _directionToOrder(direction) { 7029 if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) { 7030 return direction; 7031 } 7032 7033 if (isRTL()) { 7034 return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT; 7035 } 7036 7037 return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV; 7038 } 7039 7040 _orderToDirection(order) { 7041 if (![ORDER_NEXT, ORDER_PREV].includes(order)) { 7042 return order; 7043 } 7044 7045 if (isRTL()) { 7046 return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT; 7047 } 7048 7049 return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT; 7050 } // Static 7051 7052 7053 static carouselInterface(element, config) { 7054 const data = Carousel.getOrCreateInstance(element, config); 7055 let { 7056 _config 7057 } = data; 7058 7059 if (typeof config === 'object') { 7060 _config = { ..._config, 7061 ...config 7062 }; 7063 } 7064 7065 const action = typeof config === 'string' ? config : _config.slide; 7066 7067 if (typeof config === 'number') { 7068 data.to(config); 7069 } else if (typeof action === 'string') { 7070 if (typeof data[action] === 'undefined') { 7071 throw new TypeError(`No method named "${action}"`); 7072 } 7073 7074 data[action](); 7075 } else if (_config.interval && _config.ride) { 7076 data.pause(); 7077 data.cycle(); 7078 } 7079 } 7080 7081 static jQueryInterface(config) { 7082 return this.each(function () { 7083 Carousel.carouselInterface(this, config); 7084 }); 7085 } 7086 7087 static dataApiClickHandler(event) { 7088 const target = getElementFromSelector(this); 7089 7090 if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) { 7091 return; 7092 } 7093 7094 const config = { ...Manipulator.getDataAttributes(target), 7095 ...Manipulator.getDataAttributes(this) 7096 }; 7097 const slideIndex = this.getAttribute('data-bs-slide-to'); 7098 7099 if (slideIndex) { 7100 config.interval = false; 7101 } 7102 7103 Carousel.carouselInterface(target, config); 7104 7105 if (slideIndex) { 7106 Carousel.getInstance(target).to(slideIndex); 7107 } 7108 7109 event.preventDefault(); 7110 } 7111 7112} 7113/** 7114 * ------------------------------------------------------------------------ 7115 * Data Api implementation 7116 * ------------------------------------------------------------------------ 7117 */ 7118 7119 7120EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler); 7121EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => { 7122 const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE); 7123 7124 for (let i = 0, len = carousels.length; i < len; i++) { 7125 Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i])); 7126 } 7127}); 7128/** 7129 * ------------------------------------------------------------------------ 7130 * jQuery 7131 * ------------------------------------------------------------------------ 7132 * add .Carousel to jQuery only if jQuery is present 7133 */ 7134 7135defineJQueryPlugin(Carousel); 7136 7137/** 7138 * -------------------------------------------------------------------------- 7139 * Bootstrap (v5.1.3): collapse.js 7140 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 7141 * -------------------------------------------------------------------------- 7142 */ 7143/** 7144 * ------------------------------------------------------------------------ 7145 * Constants 7146 * ------------------------------------------------------------------------ 7147 */ 7148 7149const NAME$a = 'collapse'; 7150const DATA_KEY$9 = 'bs.collapse'; 7151const EVENT_KEY$9 = `.${DATA_KEY$9}`; 7152const DATA_API_KEY$5 = '.data-api'; 7153const Default$9 = { 7154 toggle: true, 7155 parent: null 7156}; 7157const DefaultType$9 = { 7158 toggle: 'boolean', 7159 parent: '(null|element)' 7160}; 7161const EVENT_SHOW$5 = `show${EVENT_KEY$9}`; 7162const EVENT_SHOWN$5 = `shown${EVENT_KEY$9}`; 7163const EVENT_HIDE$5 = `hide${EVENT_KEY$9}`; 7164const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$9}`; 7165const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$9}${DATA_API_KEY$5}`; 7166const CLASS_NAME_SHOW$7 = 'show'; 7167const CLASS_NAME_COLLAPSE = 'collapse'; 7168const CLASS_NAME_COLLAPSING = 'collapsing'; 7169const CLASS_NAME_COLLAPSED = 'collapsed'; 7170const CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`; 7171const CLASS_NAME_HORIZONTAL = 'collapse-horizontal'; 7172const WIDTH = 'width'; 7173const HEIGHT = 'height'; 7174const SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing'; 7175const SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle="collapse"]'; 7176/** 7177 * ------------------------------------------------------------------------ 7178 * Class Definition 7179 * ------------------------------------------------------------------------ 7180 */ 7181 7182class Collapse extends BaseComponent { 7183 constructor(element, config) { 7184 super(element); 7185 this._isTransitioning = false; 7186 this._config = this._getConfig(config); 7187 this._triggerArray = []; 7188 const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4); 7189 7190 for (let i = 0, len = toggleList.length; i < len; i++) { 7191 const elem = toggleList[i]; 7192 const selector = getSelectorFromElement(elem); 7193 const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element); 7194 7195 if (selector !== null && filterElement.length) { 7196 this._selector = selector; 7197 7198 this._triggerArray.push(elem); 7199 } 7200 } 7201 7202 this._initializeChildren(); 7203 7204 if (!this._config.parent) { 7205 this._addAriaAndCollapsedClass(this._triggerArray, this._isShown()); 7206 } 7207 7208 if (this._config.toggle) { 7209 this.toggle(); 7210 } 7211 } // Getters 7212 7213 7214 static get Default() { 7215 return Default$9; 7216 } 7217 7218 static get NAME() { 7219 return NAME$a; 7220 } // Public 7221 7222 7223 toggle() { 7224 if (this._isShown()) { 7225 this.hide(); 7226 } else { 7227 this.show(); 7228 } 7229 } 7230 7231 show() { 7232 if (this._isTransitioning || this._isShown()) { 7233 return; 7234 } 7235 7236 let actives = []; 7237 let activesData; 7238 7239 if (this._config.parent) { 7240 const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent); 7241 actives = SelectorEngine.find(SELECTOR_ACTIVES, this._config.parent).filter(elem => !children.includes(elem)); // remove children if greater depth 7242 } 7243 7244 const container = SelectorEngine.findOne(this._selector); 7245 7246 if (actives.length) { 7247 const tempActiveData = actives.find(elem => container !== elem); 7248 activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null; 7249 7250 if (activesData && activesData._isTransitioning) { 7251 return; 7252 } 7253 } 7254 7255 const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5); 7256 7257 if (startEvent.defaultPrevented) { 7258 return; 7259 } 7260 7261 actives.forEach(elemActive => { 7262 if (container !== elemActive) { 7263 Collapse.getOrCreateInstance(elemActive, { 7264 toggle: false 7265 }).hide(); 7266 } 7267 7268 if (!activesData) { 7269 Data.set(elemActive, DATA_KEY$9, null); 7270 } 7271 }); 7272 7273 const dimension = this._getDimension(); 7274 7275 this._element.classList.remove(CLASS_NAME_COLLAPSE); 7276 7277 this._element.classList.add(CLASS_NAME_COLLAPSING); 7278 7279 this._element.style[dimension] = 0; 7280 7281 this._addAriaAndCollapsedClass(this._triggerArray, true); 7282 7283 this._isTransitioning = true; 7284 7285 const complete = () => { 7286 this._isTransitioning = false; 7287 7288 this._element.classList.remove(CLASS_NAME_COLLAPSING); 7289 7290 this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7); 7291 7292 this._element.style[dimension] = ''; 7293 EventHandler.trigger(this._element, EVENT_SHOWN$5); 7294 }; 7295 7296 const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); 7297 const scrollSize = `scroll${capitalizedDimension}`; 7298 7299 this._queueCallback(complete, this._element, true); 7300 7301 this._element.style[dimension] = `${this._element[scrollSize]}px`; 7302 } 7303 7304 hide() { 7305 if (this._isTransitioning || !this._isShown()) { 7306 return; 7307 } 7308 7309 const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5); 7310 7311 if (startEvent.defaultPrevented) { 7312 return; 7313 } 7314 7315 const dimension = this._getDimension(); 7316 7317 this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`; 7318 reflow(this._element); 7319 7320 this._element.classList.add(CLASS_NAME_COLLAPSING); 7321 7322 this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7); 7323 7324 const triggerArrayLength = this._triggerArray.length; 7325 7326 for (let i = 0; i < triggerArrayLength; i++) { 7327 const trigger = this._triggerArray[i]; 7328 const elem = getElementFromSelector(trigger); 7329 7330 if (elem && !this._isShown(elem)) { 7331 this._addAriaAndCollapsedClass([trigger], false); 7332 } 7333 } 7334 7335 this._isTransitioning = true; 7336 7337 const complete = () => { 7338 this._isTransitioning = false; 7339 7340 this._element.classList.remove(CLASS_NAME_COLLAPSING); 7341 7342 this._element.classList.add(CLASS_NAME_COLLAPSE); 7343 7344 EventHandler.trigger(this._element, EVENT_HIDDEN$5); 7345 }; 7346 7347 this._element.style[dimension] = ''; 7348 7349 this._queueCallback(complete, this._element, true); 7350 } 7351 7352 _isShown(element = this._element) { 7353 return element.classList.contains(CLASS_NAME_SHOW$7); 7354 } // Private 7355 7356 7357 _getConfig(config) { 7358 config = { ...Default$9, 7359 ...Manipulator.getDataAttributes(this._element), 7360 ...config 7361 }; 7362 config.toggle = Boolean(config.toggle); // Coerce string values 7363 7364 config.parent = getElement(config.parent); 7365 typeCheckConfig(NAME$a, config, DefaultType$9); 7366 return config; 7367 } 7368 7369 _getDimension() { 7370 return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT; 7371 } 7372 7373 _initializeChildren() { 7374 if (!this._config.parent) { 7375 return; 7376 } 7377 7378 const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent); 7379 SelectorEngine.find(SELECTOR_DATA_TOGGLE$4, this._config.parent).filter(elem => !children.includes(elem)).forEach(element => { 7380 const selected = getElementFromSelector(element); 7381 7382 if (selected) { 7383 this._addAriaAndCollapsedClass([element], this._isShown(selected)); 7384 } 7385 }); 7386 } 7387 7388 _addAriaAndCollapsedClass(triggerArray, isOpen) { 7389 if (!triggerArray.length) { 7390 return; 7391 } 7392 7393 triggerArray.forEach(elem => { 7394 if (isOpen) { 7395 elem.classList.remove(CLASS_NAME_COLLAPSED); 7396 } else { 7397 elem.classList.add(CLASS_NAME_COLLAPSED); 7398 } 7399 7400 elem.setAttribute('aria-expanded', isOpen); 7401 }); 7402 } // Static 7403 7404 7405 static jQueryInterface(config) { 7406 return this.each(function () { 7407 const _config = {}; 7408 7409 if (typeof config === 'string' && /show|hide/.test(config)) { 7410 _config.toggle = false; 7411 } 7412 7413 const data = Collapse.getOrCreateInstance(this, _config); 7414 7415 if (typeof config === 'string') { 7416 if (typeof data[config] === 'undefined') { 7417 throw new TypeError(`No method named "${config}"`); 7418 } 7419 7420 data[config](); 7421 } 7422 }); 7423 } 7424 7425} 7426/** 7427 * ------------------------------------------------------------------------ 7428 * Data Api implementation 7429 * ------------------------------------------------------------------------ 7430 */ 7431 7432 7433EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) { 7434 // preventDefault only for <a> elements (which change the URL) not inside the collapsible element 7435 if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') { 7436 event.preventDefault(); 7437 } 7438 7439 const selector = getSelectorFromElement(this); 7440 const selectorElements = SelectorEngine.find(selector); 7441 selectorElements.forEach(element => { 7442 Collapse.getOrCreateInstance(element, { 7443 toggle: false 7444 }).toggle(); 7445 }); 7446}); 7447/** 7448 * ------------------------------------------------------------------------ 7449 * jQuery 7450 * ------------------------------------------------------------------------ 7451 * add .Collapse to jQuery only if jQuery is present 7452 */ 7453 7454defineJQueryPlugin(Collapse); 7455 7456/** 7457 * -------------------------------------------------------------------------- 7458 * Bootstrap (v5.1.3): dropdown.js 7459 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 7460 * -------------------------------------------------------------------------- 7461 */ 7462/** 7463 * ------------------------------------------------------------------------ 7464 * Constants 7465 * ------------------------------------------------------------------------ 7466 */ 7467 7468const NAME$9 = 'dropdown'; 7469const DATA_KEY$8 = 'bs.dropdown'; 7470const EVENT_KEY$8 = `.${DATA_KEY$8}`; 7471const DATA_API_KEY$4 = '.data-api'; 7472const ESCAPE_KEY$2 = 'Escape'; 7473const SPACE_KEY = 'Space'; 7474const TAB_KEY$1 = 'Tab'; 7475const ARROW_UP_KEY = 'ArrowUp'; 7476const ARROW_DOWN_KEY = 'ArrowDown'; 7477const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button 7478 7479const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`); 7480const EVENT_HIDE$4 = `hide${EVENT_KEY$8}`; 7481const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$8}`; 7482const EVENT_SHOW$4 = `show${EVENT_KEY$8}`; 7483const EVENT_SHOWN$4 = `shown${EVENT_KEY$8}`; 7484const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$8}${DATA_API_KEY$4}`; 7485const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$8}${DATA_API_KEY$4}`; 7486const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$8}${DATA_API_KEY$4}`; 7487const CLASS_NAME_SHOW$6 = 'show'; 7488const CLASS_NAME_DROPUP = 'dropup'; 7489const CLASS_NAME_DROPEND = 'dropend'; 7490const CLASS_NAME_DROPSTART = 'dropstart'; 7491const CLASS_NAME_NAVBAR = 'navbar'; 7492const SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle="dropdown"]'; 7493const SELECTOR_MENU = '.dropdown-menu'; 7494const SELECTOR_NAVBAR_NAV = '.navbar-nav'; 7495const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'; 7496const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start'; 7497const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end'; 7498const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start'; 7499const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end'; 7500const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start'; 7501const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start'; 7502const Default$8 = { 7503 offset: [0, 2], 7504 boundary: 'clippingParents', 7505 reference: 'toggle', 7506 display: 'dynamic', 7507 popperConfig: null, 7508 autoClose: true 7509}; 7510const DefaultType$8 = { 7511 offset: '(array|string|function)', 7512 boundary: '(string|element)', 7513 reference: '(string|element|object)', 7514 display: 'string', 7515 popperConfig: '(null|object|function)', 7516 autoClose: '(boolean|string)' 7517}; 7518/** 7519 * ------------------------------------------------------------------------ 7520 * Class Definition 7521 * ------------------------------------------------------------------------ 7522 */ 7523 7524class Dropdown extends BaseComponent { 7525 constructor(element, config) { 7526 super(element); 7527 this._popper = null; 7528 this._config = this._getConfig(config); 7529 this._menu = this._getMenuElement(); 7530 this._inNavbar = this._detectNavbar(); 7531 } // Getters 7532 7533 7534 static get Default() { 7535 return Default$8; 7536 } 7537 7538 static get DefaultType() { 7539 return DefaultType$8; 7540 } 7541 7542 static get NAME() { 7543 return NAME$9; 7544 } // Public 7545 7546 7547 toggle() { 7548 return this._isShown() ? this.hide() : this.show(); 7549 } 7550 7551 show() { 7552 if (isDisabled(this._element) || this._isShown(this._menu)) { 7553 return; 7554 } 7555 7556 const relatedTarget = { 7557 relatedTarget: this._element 7558 }; 7559 const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget); 7560 7561 if (showEvent.defaultPrevented) { 7562 return; 7563 } 7564 7565 const parent = Dropdown.getParentFromElement(this._element); // Totally disable Popper for Dropdowns in Navbar 7566 7567 if (this._inNavbar) { 7568 Manipulator.setDataAttribute(this._menu, 'popper', 'none'); 7569 } else { 7570 this._createPopper(parent); 7571 } // If this is a touch-enabled device we add extra 7572 // empty mouseover listeners to the body's immediate children; 7573 // only needed because of broken event delegation on iOS 7574 // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html 7575 7576 7577 if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) { 7578 [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop)); 7579 } 7580 7581 this._element.focus(); 7582 7583 this._element.setAttribute('aria-expanded', true); 7584 7585 this._menu.classList.add(CLASS_NAME_SHOW$6); 7586 7587 this._element.classList.add(CLASS_NAME_SHOW$6); 7588 7589 EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget); 7590 } 7591 7592 hide() { 7593 if (isDisabled(this._element) || !this._isShown(this._menu)) { 7594 return; 7595 } 7596 7597 const relatedTarget = { 7598 relatedTarget: this._element 7599 }; 7600 7601 this._completeHide(relatedTarget); 7602 } 7603 7604 dispose() { 7605 if (this._popper) { 7606 this._popper.destroy(); 7607 } 7608 7609 super.dispose(); 7610 } 7611 7612 update() { 7613 this._inNavbar = this._detectNavbar(); 7614 7615 if (this._popper) { 7616 this._popper.update(); 7617 } 7618 } // Private 7619 7620 7621 _completeHide(relatedTarget) { 7622 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget); 7623 7624 if (hideEvent.defaultPrevented) { 7625 return; 7626 } // If this is a touch-enabled device we remove the extra 7627 // empty mouseover listeners we added for iOS support 7628 7629 7630 if ('ontouchstart' in document.documentElement) { 7631 [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop)); 7632 } 7633 7634 if (this._popper) { 7635 this._popper.destroy(); 7636 } 7637 7638 this._menu.classList.remove(CLASS_NAME_SHOW$6); 7639 7640 this._element.classList.remove(CLASS_NAME_SHOW$6); 7641 7642 this._element.setAttribute('aria-expanded', 'false'); 7643 7644 Manipulator.removeDataAttribute(this._menu, 'popper'); 7645 EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget); 7646 } 7647 7648 _getConfig(config) { 7649 config = { ...this.constructor.Default, 7650 ...Manipulator.getDataAttributes(this._element), 7651 ...config 7652 }; 7653 typeCheckConfig(NAME$9, config, this.constructor.DefaultType); 7654 7655 if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') { 7656 // Popper virtual elements require a getBoundingClientRect method 7657 throw new TypeError(`${NAME$9.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`); 7658 } 7659 7660 return config; 7661 } 7662 7663 _createPopper(parent) { 7664 if (typeof _popperjs_core__WEBPACK_IMPORTED_MODULE_0__ === 'undefined') { 7665 throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)'); 7666 } 7667 7668 let referenceElement = this._element; 7669 7670 if (this._config.reference === 'parent') { 7671 referenceElement = parent; 7672 } else if (isElement(this._config.reference)) { 7673 referenceElement = getElement(this._config.reference); 7674 } else if (typeof this._config.reference === 'object') { 7675 referenceElement = this._config.reference; 7676 } 7677 7678 const popperConfig = this._getPopperConfig(); 7679 7680 const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false); 7681 this._popper = _popperjs_core__WEBPACK_IMPORTED_MODULE_1__.createPopper(referenceElement, this._menu, popperConfig); 7682 7683 if (isDisplayStatic) { 7684 Manipulator.setDataAttribute(this._menu, 'popper', 'static'); 7685 } 7686 } 7687 7688 _isShown(element = this._element) { 7689 return element.classList.contains(CLASS_NAME_SHOW$6); 7690 } 7691 7692 _getMenuElement() { 7693 return SelectorEngine.next(this._element, SELECTOR_MENU)[0]; 7694 } 7695 7696 _getPlacement() { 7697 const parentDropdown = this._element.parentNode; 7698 7699 if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) { 7700 return PLACEMENT_RIGHT; 7701 } 7702 7703 if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) { 7704 return PLACEMENT_LEFT; 7705 } // We need to trim the value because custom properties can also include spaces 7706 7707 7708 const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end'; 7709 7710 if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) { 7711 return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP; 7712 } 7713 7714 return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM; 7715 } 7716 7717 _detectNavbar() { 7718 return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null; 7719 } 7720 7721 _getOffset() { 7722 const { 7723 offset 7724 } = this._config; 7725 7726 if (typeof offset === 'string') { 7727 return offset.split(',').map(val => Number.parseInt(val, 10)); 7728 } 7729 7730 if (typeof offset === 'function') { 7731 return popperData => offset(popperData, this._element); 7732 } 7733 7734 return offset; 7735 } 7736 7737 _getPopperConfig() { 7738 const defaultBsPopperConfig = { 7739 placement: this._getPlacement(), 7740 modifiers: [{ 7741 name: 'preventOverflow', 7742 options: { 7743 boundary: this._config.boundary 7744 } 7745 }, { 7746 name: 'offset', 7747 options: { 7748 offset: this._getOffset() 7749 } 7750 }] 7751 }; // Disable Popper if we have a static display 7752 7753 if (this._config.display === 'static') { 7754 defaultBsPopperConfig.modifiers = [{ 7755 name: 'applyStyles', 7756 enabled: false 7757 }]; 7758 } 7759 7760 return { ...defaultBsPopperConfig, 7761 ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig) 7762 }; 7763 } 7764 7765 _selectMenuItem({ 7766 key, 7767 target 7768 }) { 7769 const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible); 7770 7771 if (!items.length) { 7772 return; 7773 } // if target isn't included in items (e.g. when expanding the dropdown) 7774 // allow cycling to get the last item in case key equals ARROW_UP_KEY 7775 7776 7777 getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus(); 7778 } // Static 7779 7780 7781 static jQueryInterface(config) { 7782 return this.each(function () { 7783 const data = Dropdown.getOrCreateInstance(this, config); 7784 7785 if (typeof config !== 'string') { 7786 return; 7787 } 7788 7789 if (typeof data[config] === 'undefined') { 7790 throw new TypeError(`No method named "${config}"`); 7791 } 7792 7793 data[config](); 7794 }); 7795 } 7796 7797 static clearMenus(event) { 7798 if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1)) { 7799 return; 7800 } 7801 7802 const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3); 7803 7804 for (let i = 0, len = toggles.length; i < len; i++) { 7805 const context = Dropdown.getInstance(toggles[i]); 7806 7807 if (!context || context._config.autoClose === false) { 7808 continue; 7809 } 7810 7811 if (!context._isShown()) { 7812 continue; 7813 } 7814 7815 const relatedTarget = { 7816 relatedTarget: context._element 7817 }; 7818 7819 if (event) { 7820 const composedPath = event.composedPath(); 7821 const isMenuTarget = composedPath.includes(context._menu); 7822 7823 if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) { 7824 continue; 7825 } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu 7826 7827 7828 if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) { 7829 continue; 7830 } 7831 7832 if (event.type === 'click') { 7833 relatedTarget.clickEvent = event; 7834 } 7835 } 7836 7837 context._completeHide(relatedTarget); 7838 } 7839 } 7840 7841 static getParentFromElement(element) { 7842 return getElementFromSelector(element) || element.parentNode; 7843 } 7844 7845 static dataApiKeydownHandler(event) { 7846 // If not input/textarea: 7847 // - And not a key in REGEXP_KEYDOWN => not a dropdown command 7848 // If input/textarea: 7849 // - If space key => not a dropdown command 7850 // - If key is other than escape 7851 // - If key is not up or down => not a dropdown command 7852 // - If trigger inside the menu => not a dropdown command 7853 if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) { 7854 return; 7855 } 7856 7857 const isActive = this.classList.contains(CLASS_NAME_SHOW$6); 7858 7859 if (!isActive && event.key === ESCAPE_KEY$2) { 7860 return; 7861 } 7862 7863 event.preventDefault(); 7864 event.stopPropagation(); 7865 7866 if (isDisabled(this)) { 7867 return; 7868 } 7869 7870 const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0]; 7871 const instance = Dropdown.getOrCreateInstance(getToggleButton); 7872 7873 if (event.key === ESCAPE_KEY$2) { 7874 instance.hide(); 7875 return; 7876 } 7877 7878 if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) { 7879 if (!isActive) { 7880 instance.show(); 7881 } 7882 7883 instance._selectMenuItem(event); 7884 7885 return; 7886 } 7887 7888 if (!isActive || event.key === SPACE_KEY) { 7889 Dropdown.clearMenus(); 7890 } 7891 } 7892 7893} 7894/** 7895 * ------------------------------------------------------------------------ 7896 * Data Api implementation 7897 * ------------------------------------------------------------------------ 7898 */ 7899 7900 7901EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler); 7902EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler); 7903EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus); 7904EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus); 7905EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) { 7906 event.preventDefault(); 7907 Dropdown.getOrCreateInstance(this).toggle(); 7908}); 7909/** 7910 * ------------------------------------------------------------------------ 7911 * jQuery 7912 * ------------------------------------------------------------------------ 7913 * add .Dropdown to jQuery only if jQuery is present 7914 */ 7915 7916defineJQueryPlugin(Dropdown); 7917 7918/** 7919 * -------------------------------------------------------------------------- 7920 * Bootstrap (v5.1.3): util/scrollBar.js 7921 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 7922 * -------------------------------------------------------------------------- 7923 */ 7924const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'; 7925const SELECTOR_STICKY_CONTENT = '.sticky-top'; 7926 7927class ScrollBarHelper { 7928 constructor() { 7929 this._element = document.body; 7930 } 7931 7932 getWidth() { 7933 // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes 7934 const documentWidth = document.documentElement.clientWidth; 7935 return Math.abs(window.innerWidth - documentWidth); 7936 } 7937 7938 hide() { 7939 const width = this.getWidth(); 7940 7941 this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width 7942 7943 7944 this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth 7945 7946 7947 this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width); 7948 7949 this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width); 7950 } 7951 7952 _disableOverFlow() { 7953 this._saveInitialAttribute(this._element, 'overflow'); 7954 7955 this._element.style.overflow = 'hidden'; 7956 } 7957 7958 _setElementAttributes(selector, styleProp, callback) { 7959 const scrollbarWidth = this.getWidth(); 7960 7961 const manipulationCallBack = element => { 7962 if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) { 7963 return; 7964 } 7965 7966 this._saveInitialAttribute(element, styleProp); 7967 7968 const calculatedValue = window.getComputedStyle(element)[styleProp]; 7969 element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`; 7970 }; 7971 7972 this._applyManipulationCallback(selector, manipulationCallBack); 7973 } 7974 7975 reset() { 7976 this._resetElementAttributes(this._element, 'overflow'); 7977 7978 this._resetElementAttributes(this._element, 'paddingRight'); 7979 7980 this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight'); 7981 7982 this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight'); 7983 } 7984 7985 _saveInitialAttribute(element, styleProp) { 7986 const actualValue = element.style[styleProp]; 7987 7988 if (actualValue) { 7989 Manipulator.setDataAttribute(element, styleProp, actualValue); 7990 } 7991 } 7992 7993 _resetElementAttributes(selector, styleProp) { 7994 const manipulationCallBack = element => { 7995 const value = Manipulator.getDataAttribute(element, styleProp); 7996 7997 if (typeof value === 'undefined') { 7998 element.style.removeProperty(styleProp); 7999 } else { 8000 Manipulator.removeDataAttribute(element, styleProp); 8001 element.style[styleProp] = value; 8002 } 8003 }; 8004 8005 this._applyManipulationCallback(selector, manipulationCallBack); 8006 } 8007 8008 _applyManipulationCallback(selector, callBack) { 8009 if (isElement(selector)) { 8010 callBack(selector); 8011 } else { 8012 SelectorEngine.find(selector, this._element).forEach(callBack); 8013 } 8014 } 8015 8016 isOverflowing() { 8017 return this.getWidth() > 0; 8018 } 8019 8020} 8021 8022/** 8023 * -------------------------------------------------------------------------- 8024 * Bootstrap (v5.1.3): util/backdrop.js 8025 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 8026 * -------------------------------------------------------------------------- 8027 */ 8028const Default$7 = { 8029 className: 'modal-backdrop', 8030 isVisible: true, 8031 // if false, we use the backdrop helper without adding any element to the dom 8032 isAnimated: false, 8033 rootElement: 'body', 8034 // give the choice to place backdrop under different elements 8035 clickCallback: null 8036}; 8037const DefaultType$7 = { 8038 className: 'string', 8039 isVisible: 'boolean', 8040 isAnimated: 'boolean', 8041 rootElement: '(element|string)', 8042 clickCallback: '(function|null)' 8043}; 8044const NAME$8 = 'backdrop'; 8045const CLASS_NAME_FADE$4 = 'fade'; 8046const CLASS_NAME_SHOW$5 = 'show'; 8047const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$8}`; 8048 8049class Backdrop { 8050 constructor(config) { 8051 this._config = this._getConfig(config); 8052 this._isAppended = false; 8053 this._element = null; 8054 } 8055 8056 show(callback) { 8057 if (!this._config.isVisible) { 8058 execute(callback); 8059 return; 8060 } 8061 8062 this._append(); 8063 8064 if (this._config.isAnimated) { 8065 reflow(this._getElement()); 8066 } 8067 8068 this._getElement().classList.add(CLASS_NAME_SHOW$5); 8069 8070 this._emulateAnimation(() => { 8071 execute(callback); 8072 }); 8073 } 8074 8075 hide(callback) { 8076 if (!this._config.isVisible) { 8077 execute(callback); 8078 return; 8079 } 8080 8081 this._getElement().classList.remove(CLASS_NAME_SHOW$5); 8082 8083 this._emulateAnimation(() => { 8084 this.dispose(); 8085 execute(callback); 8086 }); 8087 } // Private 8088 8089 8090 _getElement() { 8091 if (!this._element) { 8092 const backdrop = document.createElement('div'); 8093 backdrop.className = this._config.className; 8094 8095 if (this._config.isAnimated) { 8096 backdrop.classList.add(CLASS_NAME_FADE$4); 8097 } 8098 8099 this._element = backdrop; 8100 } 8101 8102 return this._element; 8103 } 8104 8105 _getConfig(config) { 8106 config = { ...Default$7, 8107 ...(typeof config === 'object' ? config : {}) 8108 }; // use getElement() with the default "body" to get a fresh Element on each instantiation 8109 8110 config.rootElement = getElement(config.rootElement); 8111 typeCheckConfig(NAME$8, config, DefaultType$7); 8112 return config; 8113 } 8114 8115 _append() { 8116 if (this._isAppended) { 8117 return; 8118 } 8119 8120 this._config.rootElement.append(this._getElement()); 8121 8122 EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => { 8123 execute(this._config.clickCallback); 8124 }); 8125 this._isAppended = true; 8126 } 8127 8128 dispose() { 8129 if (!this._isAppended) { 8130 return; 8131 } 8132 8133 EventHandler.off(this._element, EVENT_MOUSEDOWN); 8134 8135 this._element.remove(); 8136 8137 this._isAppended = false; 8138 } 8139 8140 _emulateAnimation(callback) { 8141 executeAfterTransition(callback, this._getElement(), this._config.isAnimated); 8142 } 8143 8144} 8145 8146/** 8147 * -------------------------------------------------------------------------- 8148 * Bootstrap (v5.1.3): util/focustrap.js 8149 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 8150 * -------------------------------------------------------------------------- 8151 */ 8152const Default$6 = { 8153 trapElement: null, 8154 // The element to trap focus inside of 8155 autofocus: true 8156}; 8157const DefaultType$6 = { 8158 trapElement: 'element', 8159 autofocus: 'boolean' 8160}; 8161const NAME$7 = 'focustrap'; 8162const DATA_KEY$7 = 'bs.focustrap'; 8163const EVENT_KEY$7 = `.${DATA_KEY$7}`; 8164const EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$7}`; 8165const EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$7}`; 8166const TAB_KEY = 'Tab'; 8167const TAB_NAV_FORWARD = 'forward'; 8168const TAB_NAV_BACKWARD = 'backward'; 8169 8170class FocusTrap { 8171 constructor(config) { 8172 this._config = this._getConfig(config); 8173 this._isActive = false; 8174 this._lastTabNavDirection = null; 8175 } 8176 8177 activate() { 8178 const { 8179 trapElement, 8180 autofocus 8181 } = this._config; 8182 8183 if (this._isActive) { 8184 return; 8185 } 8186 8187 if (autofocus) { 8188 trapElement.focus(); 8189 } 8190 8191 EventHandler.off(document, EVENT_KEY$7); // guard against infinite focus loop 8192 8193 EventHandler.on(document, EVENT_FOCUSIN$1, event => this._handleFocusin(event)); 8194 EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event)); 8195 this._isActive = true; 8196 } 8197 8198 deactivate() { 8199 if (!this._isActive) { 8200 return; 8201 } 8202 8203 this._isActive = false; 8204 EventHandler.off(document, EVENT_KEY$7); 8205 } // Private 8206 8207 8208 _handleFocusin(event) { 8209 const { 8210 target 8211 } = event; 8212 const { 8213 trapElement 8214 } = this._config; 8215 8216 if (target === document || target === trapElement || trapElement.contains(target)) { 8217 return; 8218 } 8219 8220 const elements = SelectorEngine.focusableChildren(trapElement); 8221 8222 if (elements.length === 0) { 8223 trapElement.focus(); 8224 } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) { 8225 elements[elements.length - 1].focus(); 8226 } else { 8227 elements[0].focus(); 8228 } 8229 } 8230 8231 _handleKeydown(event) { 8232 if (event.key !== TAB_KEY) { 8233 return; 8234 } 8235 8236 this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD; 8237 } 8238 8239 _getConfig(config) { 8240 config = { ...Default$6, 8241 ...(typeof config === 'object' ? config : {}) 8242 }; 8243 typeCheckConfig(NAME$7, config, DefaultType$6); 8244 return config; 8245 } 8246 8247} 8248 8249/** 8250 * -------------------------------------------------------------------------- 8251 * Bootstrap (v5.1.3): modal.js 8252 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 8253 * -------------------------------------------------------------------------- 8254 */ 8255/** 8256 * ------------------------------------------------------------------------ 8257 * Constants 8258 * ------------------------------------------------------------------------ 8259 */ 8260 8261const NAME$6 = 'modal'; 8262const DATA_KEY$6 = 'bs.modal'; 8263const EVENT_KEY$6 = `.${DATA_KEY$6}`; 8264const DATA_API_KEY$3 = '.data-api'; 8265const ESCAPE_KEY$1 = 'Escape'; 8266const Default$5 = { 8267 backdrop: true, 8268 keyboard: true, 8269 focus: true 8270}; 8271const DefaultType$5 = { 8272 backdrop: '(boolean|string)', 8273 keyboard: 'boolean', 8274 focus: 'boolean' 8275}; 8276const EVENT_HIDE$3 = `hide${EVENT_KEY$6}`; 8277const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`; 8278const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`; 8279const EVENT_SHOW$3 = `show${EVENT_KEY$6}`; 8280const EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`; 8281const EVENT_RESIZE = `resize${EVENT_KEY$6}`; 8282const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$6}`; 8283const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`; 8284const EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`; 8285const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`; 8286const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`; 8287const CLASS_NAME_OPEN = 'modal-open'; 8288const CLASS_NAME_FADE$3 = 'fade'; 8289const CLASS_NAME_SHOW$4 = 'show'; 8290const CLASS_NAME_STATIC = 'modal-static'; 8291const OPEN_SELECTOR$1 = '.modal.show'; 8292const SELECTOR_DIALOG = '.modal-dialog'; 8293const SELECTOR_MODAL_BODY = '.modal-body'; 8294const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle="modal"]'; 8295/** 8296 * ------------------------------------------------------------------------ 8297 * Class Definition 8298 * ------------------------------------------------------------------------ 8299 */ 8300 8301class Modal extends BaseComponent { 8302 constructor(element, config) { 8303 super(element); 8304 this._config = this._getConfig(config); 8305 this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element); 8306 this._backdrop = this._initializeBackDrop(); 8307 this._focustrap = this._initializeFocusTrap(); 8308 this._isShown = false; 8309 this._ignoreBackdropClick = false; 8310 this._isTransitioning = false; 8311 this._scrollBar = new ScrollBarHelper(); 8312 } // Getters 8313 8314 8315 static get Default() { 8316 return Default$5; 8317 } 8318 8319 static get NAME() { 8320 return NAME$6; 8321 } // Public 8322 8323 8324 toggle(relatedTarget) { 8325 return this._isShown ? this.hide() : this.show(relatedTarget); 8326 } 8327 8328 show(relatedTarget) { 8329 if (this._isShown || this._isTransitioning) { 8330 return; 8331 } 8332 8333 const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, { 8334 relatedTarget 8335 }); 8336 8337 if (showEvent.defaultPrevented) { 8338 return; 8339 } 8340 8341 this._isShown = true; 8342 8343 if (this._isAnimated()) { 8344 this._isTransitioning = true; 8345 } 8346 8347 this._scrollBar.hide(); 8348 8349 document.body.classList.add(CLASS_NAME_OPEN); 8350 8351 this._adjustDialog(); 8352 8353 this._setEscapeEvent(); 8354 8355 this._setResizeEvent(); 8356 8357 EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => { 8358 EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => { 8359 if (event.target === this._element) { 8360 this._ignoreBackdropClick = true; 8361 } 8362 }); 8363 }); 8364 8365 this._showBackdrop(() => this._showElement(relatedTarget)); 8366 } 8367 8368 hide() { 8369 if (!this._isShown || this._isTransitioning) { 8370 return; 8371 } 8372 8373 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3); 8374 8375 if (hideEvent.defaultPrevented) { 8376 return; 8377 } 8378 8379 this._isShown = false; 8380 8381 const isAnimated = this._isAnimated(); 8382 8383 if (isAnimated) { 8384 this._isTransitioning = true; 8385 } 8386 8387 this._setEscapeEvent(); 8388 8389 this._setResizeEvent(); 8390 8391 this._focustrap.deactivate(); 8392 8393 this._element.classList.remove(CLASS_NAME_SHOW$4); 8394 8395 EventHandler.off(this._element, EVENT_CLICK_DISMISS); 8396 EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS); 8397 8398 this._queueCallback(() => this._hideModal(), this._element, isAnimated); 8399 } 8400 8401 dispose() { 8402 [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6)); 8403 8404 this._backdrop.dispose(); 8405 8406 this._focustrap.deactivate(); 8407 8408 super.dispose(); 8409 } 8410 8411 handleUpdate() { 8412 this._adjustDialog(); 8413 } // Private 8414 8415 8416 _initializeBackDrop() { 8417 return new Backdrop({ 8418 isVisible: Boolean(this._config.backdrop), 8419 // 'static' option will be translated to true, and booleans will keep their value 8420 isAnimated: this._isAnimated() 8421 }); 8422 } 8423 8424 _initializeFocusTrap() { 8425 return new FocusTrap({ 8426 trapElement: this._element 8427 }); 8428 } 8429 8430 _getConfig(config) { 8431 config = { ...Default$5, 8432 ...Manipulator.getDataAttributes(this._element), 8433 ...(typeof config === 'object' ? config : {}) 8434 }; 8435 typeCheckConfig(NAME$6, config, DefaultType$5); 8436 return config; 8437 } 8438 8439 _showElement(relatedTarget) { 8440 const isAnimated = this._isAnimated(); 8441 8442 const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog); 8443 8444 if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) { 8445 // Don't move modal's DOM position 8446 document.body.append(this._element); 8447 } 8448 8449 this._element.style.display = 'block'; 8450 8451 this._element.removeAttribute('aria-hidden'); 8452 8453 this._element.setAttribute('aria-modal', true); 8454 8455 this._element.setAttribute('role', 'dialog'); 8456 8457 this._element.scrollTop = 0; 8458 8459 if (modalBody) { 8460 modalBody.scrollTop = 0; 8461 } 8462 8463 if (isAnimated) { 8464 reflow(this._element); 8465 } 8466 8467 this._element.classList.add(CLASS_NAME_SHOW$4); 8468 8469 const transitionComplete = () => { 8470 if (this._config.focus) { 8471 this._focustrap.activate(); 8472 } 8473 8474 this._isTransitioning = false; 8475 EventHandler.trigger(this._element, EVENT_SHOWN$3, { 8476 relatedTarget 8477 }); 8478 }; 8479 8480 this._queueCallback(transitionComplete, this._dialog, isAnimated); 8481 } 8482 8483 _setEscapeEvent() { 8484 if (this._isShown) { 8485 EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => { 8486 if (this._config.keyboard && event.key === ESCAPE_KEY$1) { 8487 event.preventDefault(); 8488 this.hide(); 8489 } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) { 8490 this._triggerBackdropTransition(); 8491 } 8492 }); 8493 } else { 8494 EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1); 8495 } 8496 } 8497 8498 _setResizeEvent() { 8499 if (this._isShown) { 8500 EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog()); 8501 } else { 8502 EventHandler.off(window, EVENT_RESIZE); 8503 } 8504 } 8505 8506 _hideModal() { 8507 this._element.style.display = 'none'; 8508 8509 this._element.setAttribute('aria-hidden', true); 8510 8511 this._element.removeAttribute('aria-modal'); 8512 8513 this._element.removeAttribute('role'); 8514 8515 this._isTransitioning = false; 8516 8517 this._backdrop.hide(() => { 8518 document.body.classList.remove(CLASS_NAME_OPEN); 8519 8520 this._resetAdjustments(); 8521 8522 this._scrollBar.reset(); 8523 8524 EventHandler.trigger(this._element, EVENT_HIDDEN$3); 8525 }); 8526 } 8527 8528 _showBackdrop(callback) { 8529 EventHandler.on(this._element, EVENT_CLICK_DISMISS, event => { 8530 if (this._ignoreBackdropClick) { 8531 this._ignoreBackdropClick = false; 8532 return; 8533 } 8534 8535 if (event.target !== event.currentTarget) { 8536 return; 8537 } 8538 8539 if (this._config.backdrop === true) { 8540 this.hide(); 8541 } else if (this._config.backdrop === 'static') { 8542 this._triggerBackdropTransition(); 8543 } 8544 }); 8545 8546 this._backdrop.show(callback); 8547 } 8548 8549 _isAnimated() { 8550 return this._element.classList.contains(CLASS_NAME_FADE$3); 8551 } 8552 8553 _triggerBackdropTransition() { 8554 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED); 8555 8556 if (hideEvent.defaultPrevented) { 8557 return; 8558 } 8559 8560 const { 8561 classList, 8562 scrollHeight, 8563 style 8564 } = this._element; 8565 const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed 8566 8567 if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) { 8568 return; 8569 } 8570 8571 if (!isModalOverflowing) { 8572 style.overflowY = 'hidden'; 8573 } 8574 8575 classList.add(CLASS_NAME_STATIC); 8576 8577 this._queueCallback(() => { 8578 classList.remove(CLASS_NAME_STATIC); 8579 8580 if (!isModalOverflowing) { 8581 this._queueCallback(() => { 8582 style.overflowY = ''; 8583 }, this._dialog); 8584 } 8585 }, this._dialog); 8586 8587 this._element.focus(); 8588 } // ---------------------------------------------------------------------- 8589 // the following methods are used to handle overflowing modals 8590 // ---------------------------------------------------------------------- 8591 8592 8593 _adjustDialog() { 8594 const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; 8595 8596 const scrollbarWidth = this._scrollBar.getWidth(); 8597 8598 const isBodyOverflowing = scrollbarWidth > 0; 8599 8600 if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) { 8601 this._element.style.paddingLeft = `${scrollbarWidth}px`; 8602 } 8603 8604 if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) { 8605 this._element.style.paddingRight = `${scrollbarWidth}px`; 8606 } 8607 } 8608 8609 _resetAdjustments() { 8610 this._element.style.paddingLeft = ''; 8611 this._element.style.paddingRight = ''; 8612 } // Static 8613 8614 8615 static jQueryInterface(config, relatedTarget) { 8616 return this.each(function () { 8617 const data = Modal.getOrCreateInstance(this, config); 8618 8619 if (typeof config !== 'string') { 8620 return; 8621 } 8622 8623 if (typeof data[config] === 'undefined') { 8624 throw new TypeError(`No method named "${config}"`); 8625 } 8626 8627 data[config](relatedTarget); 8628 }); 8629 } 8630 8631} 8632/** 8633 * ------------------------------------------------------------------------ 8634 * Data Api implementation 8635 * ------------------------------------------------------------------------ 8636 */ 8637 8638 8639EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) { 8640 const target = getElementFromSelector(this); 8641 8642 if (['A', 'AREA'].includes(this.tagName)) { 8643 event.preventDefault(); 8644 } 8645 8646 EventHandler.one(target, EVENT_SHOW$3, showEvent => { 8647 if (showEvent.defaultPrevented) { 8648 // only register focus restorer if modal will actually get shown 8649 return; 8650 } 8651 8652 EventHandler.one(target, EVENT_HIDDEN$3, () => { 8653 if (isVisible(this)) { 8654 this.focus(); 8655 } 8656 }); 8657 }); // avoid conflict when clicking moddal toggler while another one is open 8658 8659 const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1); 8660 8661 if (allReadyOpen) { 8662 Modal.getInstance(allReadyOpen).hide(); 8663 } 8664 8665 const data = Modal.getOrCreateInstance(target); 8666 data.toggle(this); 8667}); 8668enableDismissTrigger(Modal); 8669/** 8670 * ------------------------------------------------------------------------ 8671 * jQuery 8672 * ------------------------------------------------------------------------ 8673 * add .Modal to jQuery only if jQuery is present 8674 */ 8675 8676defineJQueryPlugin(Modal); 8677 8678/** 8679 * -------------------------------------------------------------------------- 8680 * Bootstrap (v5.1.3): offcanvas.js 8681 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 8682 * -------------------------------------------------------------------------- 8683 */ 8684/** 8685 * ------------------------------------------------------------------------ 8686 * Constants 8687 * ------------------------------------------------------------------------ 8688 */ 8689 8690const NAME$5 = 'offcanvas'; 8691const DATA_KEY$5 = 'bs.offcanvas'; 8692const EVENT_KEY$5 = `.${DATA_KEY$5}`; 8693const DATA_API_KEY$2 = '.data-api'; 8694const EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`; 8695const ESCAPE_KEY = 'Escape'; 8696const Default$4 = { 8697 backdrop: true, 8698 keyboard: true, 8699 scroll: false 8700}; 8701const DefaultType$4 = { 8702 backdrop: 'boolean', 8703 keyboard: 'boolean', 8704 scroll: 'boolean' 8705}; 8706const CLASS_NAME_SHOW$3 = 'show'; 8707const CLASS_NAME_BACKDROP = 'offcanvas-backdrop'; 8708const OPEN_SELECTOR = '.offcanvas.show'; 8709const EVENT_SHOW$2 = `show${EVENT_KEY$5}`; 8710const EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`; 8711const EVENT_HIDE$2 = `hide${EVENT_KEY$5}`; 8712const EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`; 8713const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`; 8714const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`; 8715const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle="offcanvas"]'; 8716/** 8717 * ------------------------------------------------------------------------ 8718 * Class Definition 8719 * ------------------------------------------------------------------------ 8720 */ 8721 8722class Offcanvas extends BaseComponent { 8723 constructor(element, config) { 8724 super(element); 8725 this._config = this._getConfig(config); 8726 this._isShown = false; 8727 this._backdrop = this._initializeBackDrop(); 8728 this._focustrap = this._initializeFocusTrap(); 8729 8730 this._addEventListeners(); 8731 } // Getters 8732 8733 8734 static get NAME() { 8735 return NAME$5; 8736 } 8737 8738 static get Default() { 8739 return Default$4; 8740 } // Public 8741 8742 8743 toggle(relatedTarget) { 8744 return this._isShown ? this.hide() : this.show(relatedTarget); 8745 } 8746 8747 show(relatedTarget) { 8748 if (this._isShown) { 8749 return; 8750 } 8751 8752 const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, { 8753 relatedTarget 8754 }); 8755 8756 if (showEvent.defaultPrevented) { 8757 return; 8758 } 8759 8760 this._isShown = true; 8761 this._element.style.visibility = 'visible'; 8762 8763 this._backdrop.show(); 8764 8765 if (!this._config.scroll) { 8766 new ScrollBarHelper().hide(); 8767 } 8768 8769 this._element.removeAttribute('aria-hidden'); 8770 8771 this._element.setAttribute('aria-modal', true); 8772 8773 this._element.setAttribute('role', 'dialog'); 8774 8775 this._element.classList.add(CLASS_NAME_SHOW$3); 8776 8777 const completeCallBack = () => { 8778 if (!this._config.scroll) { 8779 this._focustrap.activate(); 8780 } 8781 8782 EventHandler.trigger(this._element, EVENT_SHOWN$2, { 8783 relatedTarget 8784 }); 8785 }; 8786 8787 this._queueCallback(completeCallBack, this._element, true); 8788 } 8789 8790 hide() { 8791 if (!this._isShown) { 8792 return; 8793 } 8794 8795 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2); 8796 8797 if (hideEvent.defaultPrevented) { 8798 return; 8799 } 8800 8801 this._focustrap.deactivate(); 8802 8803 this._element.blur(); 8804 8805 this._isShown = false; 8806 8807 this._element.classList.remove(CLASS_NAME_SHOW$3); 8808 8809 this._backdrop.hide(); 8810 8811 const completeCallback = () => { 8812 this._element.setAttribute('aria-hidden', true); 8813 8814 this._element.removeAttribute('aria-modal'); 8815 8816 this._element.removeAttribute('role'); 8817 8818 this._element.style.visibility = 'hidden'; 8819 8820 if (!this._config.scroll) { 8821 new ScrollBarHelper().reset(); 8822 } 8823 8824 EventHandler.trigger(this._element, EVENT_HIDDEN$2); 8825 }; 8826 8827 this._queueCallback(completeCallback, this._element, true); 8828 } 8829 8830 dispose() { 8831 this._backdrop.dispose(); 8832 8833 this._focustrap.deactivate(); 8834 8835 super.dispose(); 8836 } // Private 8837 8838 8839 _getConfig(config) { 8840 config = { ...Default$4, 8841 ...Manipulator.getDataAttributes(this._element), 8842 ...(typeof config === 'object' ? config : {}) 8843 }; 8844 typeCheckConfig(NAME$5, config, DefaultType$4); 8845 return config; 8846 } 8847 8848 _initializeBackDrop() { 8849 return new Backdrop({ 8850 className: CLASS_NAME_BACKDROP, 8851 isVisible: this._config.backdrop, 8852 isAnimated: true, 8853 rootElement: this._element.parentNode, 8854 clickCallback: () => this.hide() 8855 }); 8856 } 8857 8858 _initializeFocusTrap() { 8859 return new FocusTrap({ 8860 trapElement: this._element 8861 }); 8862 } 8863 8864 _addEventListeners() { 8865 EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => { 8866 if (this._config.keyboard && event.key === ESCAPE_KEY) { 8867 this.hide(); 8868 } 8869 }); 8870 } // Static 8871 8872 8873 static jQueryInterface(config) { 8874 return this.each(function () { 8875 const data = Offcanvas.getOrCreateInstance(this, config); 8876 8877 if (typeof config !== 'string') { 8878 return; 8879 } 8880 8881 if (data[config] === undefined || config.startsWith('_') || config === 'constructor') { 8882 throw new TypeError(`No method named "${config}"`); 8883 } 8884 8885 data[config](this); 8886 }); 8887 } 8888 8889} 8890/** 8891 * ------------------------------------------------------------------------ 8892 * Data Api implementation 8893 * ------------------------------------------------------------------------ 8894 */ 8895 8896 8897EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) { 8898 const target = getElementFromSelector(this); 8899 8900 if (['A', 'AREA'].includes(this.tagName)) { 8901 event.preventDefault(); 8902 } 8903 8904 if (isDisabled(this)) { 8905 return; 8906 } 8907 8908 EventHandler.one(target, EVENT_HIDDEN$2, () => { 8909 // focus on trigger when it is closed 8910 if (isVisible(this)) { 8911 this.focus(); 8912 } 8913 }); // avoid conflict when clicking a toggler of an offcanvas, while another is open 8914 8915 const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR); 8916 8917 if (allReadyOpen && allReadyOpen !== target) { 8918 Offcanvas.getInstance(allReadyOpen).hide(); 8919 } 8920 8921 const data = Offcanvas.getOrCreateInstance(target); 8922 data.toggle(this); 8923}); 8924EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show())); 8925enableDismissTrigger(Offcanvas); 8926/** 8927 * ------------------------------------------------------------------------ 8928 * jQuery 8929 * ------------------------------------------------------------------------ 8930 */ 8931 8932defineJQueryPlugin(Offcanvas); 8933 8934/** 8935 * -------------------------------------------------------------------------- 8936 * Bootstrap (v5.1.3): util/sanitizer.js 8937 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 8938 * -------------------------------------------------------------------------- 8939 */ 8940const uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']); 8941const ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i; 8942/** 8943 * A pattern that recognizes a commonly useful subset of URLs that are safe. 8944 * 8945 * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts 8946 */ 8947 8948const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i; 8949/** 8950 * A pattern that matches safe data URLs. Only matches image, video and audio types. 8951 * 8952 * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts 8953 */ 8954 8955const DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i; 8956 8957const allowedAttribute = (attribute, allowedAttributeList) => { 8958 const attributeName = attribute.nodeName.toLowerCase(); 8959 8960 if (allowedAttributeList.includes(attributeName)) { 8961 if (uriAttributes.has(attributeName)) { 8962 return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue) || DATA_URL_PATTERN.test(attribute.nodeValue)); 8963 } 8964 8965 return true; 8966 } 8967 8968 const regExp = allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp); // Check if a regular expression validates the attribute. 8969 8970 for (let i = 0, len = regExp.length; i < len; i++) { 8971 if (regExp[i].test(attributeName)) { 8972 return true; 8973 } 8974 } 8975 8976 return false; 8977}; 8978 8979const DefaultAllowlist = { 8980 // Global attributes allowed on any supplied element below. 8981 '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN], 8982 a: ['target', 'href', 'title', 'rel'], 8983 area: [], 8984 b: [], 8985 br: [], 8986 col: [], 8987 code: [], 8988 div: [], 8989 em: [], 8990 hr: [], 8991 h1: [], 8992 h2: [], 8993 h3: [], 8994 h4: [], 8995 h5: [], 8996 h6: [], 8997 i: [], 8998 img: ['src', 'srcset', 'alt', 'title', 'width', 'height'], 8999 li: [], 9000 ol: [], 9001 p: [], 9002 pre: [], 9003 s: [], 9004 small: [], 9005 span: [], 9006 sub: [], 9007 sup: [], 9008 strong: [], 9009 u: [], 9010 ul: [] 9011}; 9012function sanitizeHtml(unsafeHtml, allowList, sanitizeFn) { 9013 if (!unsafeHtml.length) { 9014 return unsafeHtml; 9015 } 9016 9017 if (sanitizeFn && typeof sanitizeFn === 'function') { 9018 return sanitizeFn(unsafeHtml); 9019 } 9020 9021 const domParser = new window.DOMParser(); 9022 const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html'); 9023 const elements = [].concat(...createdDocument.body.querySelectorAll('*')); 9024 9025 for (let i = 0, len = elements.length; i < len; i++) { 9026 const element = elements[i]; 9027 const elementName = element.nodeName.toLowerCase(); 9028 9029 if (!Object.keys(allowList).includes(elementName)) { 9030 element.remove(); 9031 continue; 9032 } 9033 9034 const attributeList = [].concat(...element.attributes); 9035 const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []); 9036 attributeList.forEach(attribute => { 9037 if (!allowedAttribute(attribute, allowedAttributes)) { 9038 element.removeAttribute(attribute.nodeName); 9039 } 9040 }); 9041 } 9042 9043 return createdDocument.body.innerHTML; 9044} 9045 9046/** 9047 * -------------------------------------------------------------------------- 9048 * Bootstrap (v5.1.3): tooltip.js 9049 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 9050 * -------------------------------------------------------------------------- 9051 */ 9052/** 9053 * ------------------------------------------------------------------------ 9054 * Constants 9055 * ------------------------------------------------------------------------ 9056 */ 9057 9058const NAME$4 = 'tooltip'; 9059const DATA_KEY$4 = 'bs.tooltip'; 9060const EVENT_KEY$4 = `.${DATA_KEY$4}`; 9061const CLASS_PREFIX$1 = 'bs-tooltip'; 9062const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']); 9063const DefaultType$3 = { 9064 animation: 'boolean', 9065 template: 'string', 9066 title: '(string|element|function)', 9067 trigger: 'string', 9068 delay: '(number|object)', 9069 html: 'boolean', 9070 selector: '(string|boolean)', 9071 placement: '(string|function)', 9072 offset: '(array|string|function)', 9073 container: '(string|element|boolean)', 9074 fallbackPlacements: 'array', 9075 boundary: '(string|element)', 9076 customClass: '(string|function)', 9077 sanitize: 'boolean', 9078 sanitizeFn: '(null|function)', 9079 allowList: 'object', 9080 popperConfig: '(null|object|function)' 9081}; 9082const AttachmentMap = { 9083 AUTO: 'auto', 9084 TOP: 'top', 9085 RIGHT: isRTL() ? 'left' : 'right', 9086 BOTTOM: 'bottom', 9087 LEFT: isRTL() ? 'right' : 'left' 9088}; 9089const Default$3 = { 9090 animation: true, 9091 template: '<div class="tooltip" role="tooltip">' + '<div class="tooltip-arrow"></div>' + '<div class="tooltip-inner"></div>' + '</div>', 9092 trigger: 'hover focus', 9093 title: '', 9094 delay: 0, 9095 html: false, 9096 selector: false, 9097 placement: 'top', 9098 offset: [0, 0], 9099 container: false, 9100 fallbackPlacements: ['top', 'right', 'bottom', 'left'], 9101 boundary: 'clippingParents', 9102 customClass: '', 9103 sanitize: true, 9104 sanitizeFn: null, 9105 allowList: DefaultAllowlist, 9106 popperConfig: null 9107}; 9108const Event$2 = { 9109 HIDE: `hide${EVENT_KEY$4}`, 9110 HIDDEN: `hidden${EVENT_KEY$4}`, 9111 SHOW: `show${EVENT_KEY$4}`, 9112 SHOWN: `shown${EVENT_KEY$4}`, 9113 INSERTED: `inserted${EVENT_KEY$4}`, 9114 CLICK: `click${EVENT_KEY$4}`, 9115 FOCUSIN: `focusin${EVENT_KEY$4}`, 9116 FOCUSOUT: `focusout${EVENT_KEY$4}`, 9117 MOUSEENTER: `mouseenter${EVENT_KEY$4}`, 9118 MOUSELEAVE: `mouseleave${EVENT_KEY$4}` 9119}; 9120const CLASS_NAME_FADE$2 = 'fade'; 9121const CLASS_NAME_MODAL = 'modal'; 9122const CLASS_NAME_SHOW$2 = 'show'; 9123const HOVER_STATE_SHOW = 'show'; 9124const HOVER_STATE_OUT = 'out'; 9125const SELECTOR_TOOLTIP_INNER = '.tooltip-inner'; 9126const SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`; 9127const EVENT_MODAL_HIDE = 'hide.bs.modal'; 9128const TRIGGER_HOVER = 'hover'; 9129const TRIGGER_FOCUS = 'focus'; 9130const TRIGGER_CLICK = 'click'; 9131const TRIGGER_MANUAL = 'manual'; 9132/** 9133 * ------------------------------------------------------------------------ 9134 * Class Definition 9135 * ------------------------------------------------------------------------ 9136 */ 9137 9138class Tooltip extends BaseComponent { 9139 constructor(element, config) { 9140 if (typeof _popperjs_core__WEBPACK_IMPORTED_MODULE_0__ === 'undefined') { 9141 throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)'); 9142 } 9143 9144 super(element); // private 9145 9146 this._isEnabled = true; 9147 this._timeout = 0; 9148 this._hoverState = ''; 9149 this._activeTrigger = {}; 9150 this._popper = null; // Protected 9151 9152 this._config = this._getConfig(config); 9153 this.tip = null; 9154 9155 this._setListeners(); 9156 } // Getters 9157 9158 9159 static get Default() { 9160 return Default$3; 9161 } 9162 9163 static get NAME() { 9164 return NAME$4; 9165 } 9166 9167 static get Event() { 9168 return Event$2; 9169 } 9170 9171 static get DefaultType() { 9172 return DefaultType$3; 9173 } // Public 9174 9175 9176 enable() { 9177 this._isEnabled = true; 9178 } 9179 9180 disable() { 9181 this._isEnabled = false; 9182 } 9183 9184 toggleEnabled() { 9185 this._isEnabled = !this._isEnabled; 9186 } 9187 9188 toggle(event) { 9189 if (!this._isEnabled) { 9190 return; 9191 } 9192 9193 if (event) { 9194 const context = this._initializeOnDelegatedTarget(event); 9195 9196 context._activeTrigger.click = !context._activeTrigger.click; 9197 9198 if (context._isWithActiveTrigger()) { 9199 context._enter(null, context); 9200 } else { 9201 context._leave(null, context); 9202 } 9203 } else { 9204 if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$2)) { 9205 this._leave(null, this); 9206 9207 return; 9208 } 9209 9210 this._enter(null, this); 9211 } 9212 } 9213 9214 dispose() { 9215 clearTimeout(this._timeout); 9216 EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler); 9217 9218 if (this.tip) { 9219 this.tip.remove(); 9220 } 9221 9222 this._disposePopper(); 9223 9224 super.dispose(); 9225 } 9226 9227 show() { 9228 if (this._element.style.display === 'none') { 9229 throw new Error('Please use show on visible elements'); 9230 } 9231 9232 if (!(this.isWithContent() && this._isEnabled)) { 9233 return; 9234 } 9235 9236 const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW); 9237 const shadowRoot = findShadowRoot(this._element); 9238 const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element); 9239 9240 if (showEvent.defaultPrevented || !isInTheDom) { 9241 return; 9242 } // A trick to recreate a tooltip in case a new title is given by using the NOT documented `data-bs-original-title` 9243 // This will be removed later in favor of a `setContent` method 9244 9245 9246 if (this.constructor.NAME === 'tooltip' && this.tip && this.getTitle() !== this.tip.querySelector(SELECTOR_TOOLTIP_INNER).innerHTML) { 9247 this._disposePopper(); 9248 9249 this.tip.remove(); 9250 this.tip = null; 9251 } 9252 9253 const tip = this.getTipElement(); 9254 const tipId = getUID(this.constructor.NAME); 9255 tip.setAttribute('id', tipId); 9256 9257 this._element.setAttribute('aria-describedby', tipId); 9258 9259 if (this._config.animation) { 9260 tip.classList.add(CLASS_NAME_FADE$2); 9261 } 9262 9263 const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement; 9264 9265 const attachment = this._getAttachment(placement); 9266 9267 this._addAttachmentClass(attachment); 9268 9269 const { 9270 container 9271 } = this._config; 9272 Data.set(tip, this.constructor.DATA_KEY, this); 9273 9274 if (!this._element.ownerDocument.documentElement.contains(this.tip)) { 9275 container.append(tip); 9276 EventHandler.trigger(this._element, this.constructor.Event.INSERTED); 9277 } 9278 9279 if (this._popper) { 9280 this._popper.update(); 9281 } else { 9282 this._popper = _popperjs_core__WEBPACK_IMPORTED_MODULE_1__.createPopper(this._element, tip, this._getPopperConfig(attachment)); 9283 } 9284 9285 tip.classList.add(CLASS_NAME_SHOW$2); 9286 9287 const customClass = this._resolvePossibleFunction(this._config.customClass); 9288 9289 if (customClass) { 9290 tip.classList.add(...customClass.split(' ')); 9291 } // If this is a touch-enabled device we add extra 9292 // empty mouseover listeners to the body's immediate children; 9293 // only needed because of broken event delegation on iOS 9294 // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html 9295 9296 9297 if ('ontouchstart' in document.documentElement) { 9298 [].concat(...document.body.children).forEach(element => { 9299 EventHandler.on(element, 'mouseover', noop); 9300 }); 9301 } 9302 9303 const complete = () => { 9304 const prevHoverState = this._hoverState; 9305 this._hoverState = null; 9306 EventHandler.trigger(this._element, this.constructor.Event.SHOWN); 9307 9308 if (prevHoverState === HOVER_STATE_OUT) { 9309 this._leave(null, this); 9310 } 9311 }; 9312 9313 const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$2); 9314 9315 this._queueCallback(complete, this.tip, isAnimated); 9316 } 9317 9318 hide() { 9319 if (!this._popper) { 9320 return; 9321 } 9322 9323 const tip = this.getTipElement(); 9324 9325 const complete = () => { 9326 if (this._isWithActiveTrigger()) { 9327 return; 9328 } 9329 9330 if (this._hoverState !== HOVER_STATE_SHOW) { 9331 tip.remove(); 9332 } 9333 9334 this._cleanTipClass(); 9335 9336 this._element.removeAttribute('aria-describedby'); 9337 9338 EventHandler.trigger(this._element, this.constructor.Event.HIDDEN); 9339 9340 this._disposePopper(); 9341 }; 9342 9343 const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE); 9344 9345 if (hideEvent.defaultPrevented) { 9346 return; 9347 } 9348 9349 tip.classList.remove(CLASS_NAME_SHOW$2); // If this is a touch-enabled device we remove the extra 9350 // empty mouseover listeners we added for iOS support 9351 9352 if ('ontouchstart' in document.documentElement) { 9353 [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop)); 9354 } 9355 9356 this._activeTrigger[TRIGGER_CLICK] = false; 9357 this._activeTrigger[TRIGGER_FOCUS] = false; 9358 this._activeTrigger[TRIGGER_HOVER] = false; 9359 const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$2); 9360 9361 this._queueCallback(complete, this.tip, isAnimated); 9362 9363 this._hoverState = ''; 9364 } 9365 9366 update() { 9367 if (this._popper !== null) { 9368 this._popper.update(); 9369 } 9370 } // Protected 9371 9372 9373 isWithContent() { 9374 return Boolean(this.getTitle()); 9375 } 9376 9377 getTipElement() { 9378 if (this.tip) { 9379 return this.tip; 9380 } 9381 9382 const element = document.createElement('div'); 9383 element.innerHTML = this._config.template; 9384 const tip = element.children[0]; 9385 this.setContent(tip); 9386 tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2); 9387 this.tip = tip; 9388 return this.tip; 9389 } 9390 9391 setContent(tip) { 9392 this._sanitizeAndSetContent(tip, this.getTitle(), SELECTOR_TOOLTIP_INNER); 9393 } 9394 9395 _sanitizeAndSetContent(template, content, selector) { 9396 const templateElement = SelectorEngine.findOne(selector, template); 9397 9398 if (!content && templateElement) { 9399 templateElement.remove(); 9400 return; 9401 } // we use append for html objects to maintain js events 9402 9403 9404 this.setElementContent(templateElement, content); 9405 } 9406 9407 setElementContent(element, content) { 9408 if (element === null) { 9409 return; 9410 } 9411 9412 if (isElement(content)) { 9413 content = getElement(content); // content is a DOM node or a jQuery 9414 9415 if (this._config.html) { 9416 if (content.parentNode !== element) { 9417 element.innerHTML = ''; 9418 element.append(content); 9419 } 9420 } else { 9421 element.textContent = content.textContent; 9422 } 9423 9424 return; 9425 } 9426 9427 if (this._config.html) { 9428 if (this._config.sanitize) { 9429 content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn); 9430 } 9431 9432 element.innerHTML = content; 9433 } else { 9434 element.textContent = content; 9435 } 9436 } 9437 9438 getTitle() { 9439 const title = this._element.getAttribute('data-bs-original-title') || this._config.title; 9440 9441 return this._resolvePossibleFunction(title); 9442 } 9443 9444 updateAttachment(attachment) { 9445 if (attachment === 'right') { 9446 return 'end'; 9447 } 9448 9449 if (attachment === 'left') { 9450 return 'start'; 9451 } 9452 9453 return attachment; 9454 } // Private 9455 9456 9457 _initializeOnDelegatedTarget(event, context) { 9458 return context || this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig()); 9459 } 9460 9461 _getOffset() { 9462 const { 9463 offset 9464 } = this._config; 9465 9466 if (typeof offset === 'string') { 9467 return offset.split(',').map(val => Number.parseInt(val, 10)); 9468 } 9469 9470 if (typeof offset === 'function') { 9471 return popperData => offset(popperData, this._element); 9472 } 9473 9474 return offset; 9475 } 9476 9477 _resolvePossibleFunction(content) { 9478 return typeof content === 'function' ? content.call(this._element) : content; 9479 } 9480 9481 _getPopperConfig(attachment) { 9482 const defaultBsPopperConfig = { 9483 placement: attachment, 9484 modifiers: [{ 9485 name: 'flip', 9486 options: { 9487 fallbackPlacements: this._config.fallbackPlacements 9488 } 9489 }, { 9490 name: 'offset', 9491 options: { 9492 offset: this._getOffset() 9493 } 9494 }, { 9495 name: 'preventOverflow', 9496 options: { 9497 boundary: this._config.boundary 9498 } 9499 }, { 9500 name: 'arrow', 9501 options: { 9502 element: `.${this.constructor.NAME}-arrow` 9503 } 9504 }, { 9505 name: 'onChange', 9506 enabled: true, 9507 phase: 'afterWrite', 9508 fn: data => this._handlePopperPlacementChange(data) 9509 }], 9510 onFirstUpdate: data => { 9511 if (data.options.placement !== data.placement) { 9512 this._handlePopperPlacementChange(data); 9513 } 9514 } 9515 }; 9516 return { ...defaultBsPopperConfig, 9517 ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig) 9518 }; 9519 } 9520 9521 _addAttachmentClass(attachment) { 9522 this.getTipElement().classList.add(`${this._getBasicClassPrefix()}-${this.updateAttachment(attachment)}`); 9523 } 9524 9525 _getAttachment(placement) { 9526 return AttachmentMap[placement.toUpperCase()]; 9527 } 9528 9529 _setListeners() { 9530 const triggers = this._config.trigger.split(' '); 9531 9532 triggers.forEach(trigger => { 9533 if (trigger === 'click') { 9534 EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event)); 9535 } else if (trigger !== TRIGGER_MANUAL) { 9536 const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN; 9537 const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT; 9538 EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event)); 9539 EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event)); 9540 } 9541 }); 9542 9543 this._hideModalHandler = () => { 9544 if (this._element) { 9545 this.hide(); 9546 } 9547 }; 9548 9549 EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler); 9550 9551 if (this._config.selector) { 9552 this._config = { ...this._config, 9553 trigger: 'manual', 9554 selector: '' 9555 }; 9556 } else { 9557 this._fixTitle(); 9558 } 9559 } 9560 9561 _fixTitle() { 9562 const title = this._element.getAttribute('title'); 9563 9564 const originalTitleType = typeof this._element.getAttribute('data-bs-original-title'); 9565 9566 if (title || originalTitleType !== 'string') { 9567 this._element.setAttribute('data-bs-original-title', title || ''); 9568 9569 if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) { 9570 this._element.setAttribute('aria-label', title); 9571 } 9572 9573 this._element.setAttribute('title', ''); 9574 } 9575 } 9576 9577 _enter(event, context) { 9578 context = this._initializeOnDelegatedTarget(event, context); 9579 9580 if (event) { 9581 context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true; 9582 } 9583 9584 if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$2) || context._hoverState === HOVER_STATE_SHOW) { 9585 context._hoverState = HOVER_STATE_SHOW; 9586 return; 9587 } 9588 9589 clearTimeout(context._timeout); 9590 context._hoverState = HOVER_STATE_SHOW; 9591 9592 if (!context._config.delay || !context._config.delay.show) { 9593 context.show(); 9594 return; 9595 } 9596 9597 context._timeout = setTimeout(() => { 9598 if (context._hoverState === HOVER_STATE_SHOW) { 9599 context.show(); 9600 } 9601 }, context._config.delay.show); 9602 } 9603 9604 _leave(event, context) { 9605 context = this._initializeOnDelegatedTarget(event, context); 9606 9607 if (event) { 9608 context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget); 9609 } 9610 9611 if (context._isWithActiveTrigger()) { 9612 return; 9613 } 9614 9615 clearTimeout(context._timeout); 9616 context._hoverState = HOVER_STATE_OUT; 9617 9618 if (!context._config.delay || !context._config.delay.hide) { 9619 context.hide(); 9620 return; 9621 } 9622 9623 context._timeout = setTimeout(() => { 9624 if (context._hoverState === HOVER_STATE_OUT) { 9625 context.hide(); 9626 } 9627 }, context._config.delay.hide); 9628 } 9629 9630 _isWithActiveTrigger() { 9631 for (const trigger in this._activeTrigger) { 9632 if (this._activeTrigger[trigger]) { 9633 return true; 9634 } 9635 } 9636 9637 return false; 9638 } 9639 9640 _getConfig(config) { 9641 const dataAttributes = Manipulator.getDataAttributes(this._element); 9642 Object.keys(dataAttributes).forEach(dataAttr => { 9643 if (DISALLOWED_ATTRIBUTES.has(dataAttr)) { 9644 delete dataAttributes[dataAttr]; 9645 } 9646 }); 9647 config = { ...this.constructor.Default, 9648 ...dataAttributes, 9649 ...(typeof config === 'object' && config ? config : {}) 9650 }; 9651 config.container = config.container === false ? document.body : getElement(config.container); 9652 9653 if (typeof config.delay === 'number') { 9654 config.delay = { 9655 show: config.delay, 9656 hide: config.delay 9657 }; 9658 } 9659 9660 if (typeof config.title === 'number') { 9661 config.title = config.title.toString(); 9662 } 9663 9664 if (typeof config.content === 'number') { 9665 config.content = config.content.toString(); 9666 } 9667 9668 typeCheckConfig(NAME$4, config, this.constructor.DefaultType); 9669 9670 if (config.sanitize) { 9671 config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn); 9672 } 9673 9674 return config; 9675 } 9676 9677 _getDelegateConfig() { 9678 const config = {}; 9679 9680 for (const key in this._config) { 9681 if (this.constructor.Default[key] !== this._config[key]) { 9682 config[key] = this._config[key]; 9683 } 9684 } // In the future can be replaced with: 9685 // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]]) 9686 // `Object.fromEntries(keysWithDifferentValues)` 9687 9688 9689 return config; 9690 } 9691 9692 _cleanTipClass() { 9693 const tip = this.getTipElement(); 9694 const basicClassPrefixRegex = new RegExp(`(^|\\s)${this._getBasicClassPrefix()}\\S+`, 'g'); 9695 const tabClass = tip.getAttribute('class').match(basicClassPrefixRegex); 9696 9697 if (tabClass !== null && tabClass.length > 0) { 9698 tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass)); 9699 } 9700 } 9701 9702 _getBasicClassPrefix() { 9703 return CLASS_PREFIX$1; 9704 } 9705 9706 _handlePopperPlacementChange(popperData) { 9707 const { 9708 state 9709 } = popperData; 9710 9711 if (!state) { 9712 return; 9713 } 9714 9715 this.tip = state.elements.popper; 9716 9717 this._cleanTipClass(); 9718 9719 this._addAttachmentClass(this._getAttachment(state.placement)); 9720 } 9721 9722 _disposePopper() { 9723 if (this._popper) { 9724 this._popper.destroy(); 9725 9726 this._popper = null; 9727 } 9728 } // Static 9729 9730 9731 static jQueryInterface(config) { 9732 return this.each(function () { 9733 const data = Tooltip.getOrCreateInstance(this, config); 9734 9735 if (typeof config === 'string') { 9736 if (typeof data[config] === 'undefined') { 9737 throw new TypeError(`No method named "${config}"`); 9738 } 9739 9740 data[config](); 9741 } 9742 }); 9743 } 9744 9745} 9746/** 9747 * ------------------------------------------------------------------------ 9748 * jQuery 9749 * ------------------------------------------------------------------------ 9750 * add .Tooltip to jQuery only if jQuery is present 9751 */ 9752 9753 9754defineJQueryPlugin(Tooltip); 9755 9756/** 9757 * -------------------------------------------------------------------------- 9758 * Bootstrap (v5.1.3): popover.js 9759 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 9760 * -------------------------------------------------------------------------- 9761 */ 9762/** 9763 * ------------------------------------------------------------------------ 9764 * Constants 9765 * ------------------------------------------------------------------------ 9766 */ 9767 9768const NAME$3 = 'popover'; 9769const DATA_KEY$3 = 'bs.popover'; 9770const EVENT_KEY$3 = `.${DATA_KEY$3}`; 9771const CLASS_PREFIX = 'bs-popover'; 9772const Default$2 = { ...Tooltip.Default, 9773 placement: 'right', 9774 offset: [0, 8], 9775 trigger: 'click', 9776 content: '', 9777 template: '<div class="popover" role="tooltip">' + '<div class="popover-arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div>' + '</div>' 9778}; 9779const DefaultType$2 = { ...Tooltip.DefaultType, 9780 content: '(string|element|function)' 9781}; 9782const Event$1 = { 9783 HIDE: `hide${EVENT_KEY$3}`, 9784 HIDDEN: `hidden${EVENT_KEY$3}`, 9785 SHOW: `show${EVENT_KEY$3}`, 9786 SHOWN: `shown${EVENT_KEY$3}`, 9787 INSERTED: `inserted${EVENT_KEY$3}`, 9788 CLICK: `click${EVENT_KEY$3}`, 9789 FOCUSIN: `focusin${EVENT_KEY$3}`, 9790 FOCUSOUT: `focusout${EVENT_KEY$3}`, 9791 MOUSEENTER: `mouseenter${EVENT_KEY$3}`, 9792 MOUSELEAVE: `mouseleave${EVENT_KEY$3}` 9793}; 9794const SELECTOR_TITLE = '.popover-header'; 9795const SELECTOR_CONTENT = '.popover-body'; 9796/** 9797 * ------------------------------------------------------------------------ 9798 * Class Definition 9799 * ------------------------------------------------------------------------ 9800 */ 9801 9802class Popover extends Tooltip { 9803 // Getters 9804 static get Default() { 9805 return Default$2; 9806 } 9807 9808 static get NAME() { 9809 return NAME$3; 9810 } 9811 9812 static get Event() { 9813 return Event$1; 9814 } 9815 9816 static get DefaultType() { 9817 return DefaultType$2; 9818 } // Overrides 9819 9820 9821 isWithContent() { 9822 return this.getTitle() || this._getContent(); 9823 } 9824 9825 setContent(tip) { 9826 this._sanitizeAndSetContent(tip, this.getTitle(), SELECTOR_TITLE); 9827 9828 this._sanitizeAndSetContent(tip, this._getContent(), SELECTOR_CONTENT); 9829 } // Private 9830 9831 9832 _getContent() { 9833 return this._resolvePossibleFunction(this._config.content); 9834 } 9835 9836 _getBasicClassPrefix() { 9837 return CLASS_PREFIX; 9838 } // Static 9839 9840 9841 static jQueryInterface(config) { 9842 return this.each(function () { 9843 const data = Popover.getOrCreateInstance(this, config); 9844 9845 if (typeof config === 'string') { 9846 if (typeof data[config] === 'undefined') { 9847 throw new TypeError(`No method named "${config}"`); 9848 } 9849 9850 data[config](); 9851 } 9852 }); 9853 } 9854 9855} 9856/** 9857 * ------------------------------------------------------------------------ 9858 * jQuery 9859 * ------------------------------------------------------------------------ 9860 * add .Popover to jQuery only if jQuery is present 9861 */ 9862 9863 9864defineJQueryPlugin(Popover); 9865 9866/** 9867 * -------------------------------------------------------------------------- 9868 * Bootstrap (v5.1.3): scrollspy.js 9869 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 9870 * -------------------------------------------------------------------------- 9871 */ 9872/** 9873 * ------------------------------------------------------------------------ 9874 * Constants 9875 * ------------------------------------------------------------------------ 9876 */ 9877 9878const NAME$2 = 'scrollspy'; 9879const DATA_KEY$2 = 'bs.scrollspy'; 9880const EVENT_KEY$2 = `.${DATA_KEY$2}`; 9881const DATA_API_KEY$1 = '.data-api'; 9882const Default$1 = { 9883 offset: 10, 9884 method: 'auto', 9885 target: '' 9886}; 9887const DefaultType$1 = { 9888 offset: 'number', 9889 method: 'string', 9890 target: '(string|element)' 9891}; 9892const EVENT_ACTIVATE = `activate${EVENT_KEY$2}`; 9893const EVENT_SCROLL = `scroll${EVENT_KEY$2}`; 9894const EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`; 9895const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'; 9896const CLASS_NAME_ACTIVE$1 = 'active'; 9897const SELECTOR_DATA_SPY = '[data-bs-spy="scroll"]'; 9898const SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group'; 9899const SELECTOR_NAV_LINKS = '.nav-link'; 9900const SELECTOR_NAV_ITEMS = '.nav-item'; 9901const SELECTOR_LIST_ITEMS = '.list-group-item'; 9902const SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}, .${CLASS_NAME_DROPDOWN_ITEM}`; 9903const SELECTOR_DROPDOWN$1 = '.dropdown'; 9904const SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle'; 9905const METHOD_OFFSET = 'offset'; 9906const METHOD_POSITION = 'position'; 9907/** 9908 * ------------------------------------------------------------------------ 9909 * Class Definition 9910 * ------------------------------------------------------------------------ 9911 */ 9912 9913class ScrollSpy extends BaseComponent { 9914 constructor(element, config) { 9915 super(element); 9916 this._scrollElement = this._element.tagName === 'BODY' ? window : this._element; 9917 this._config = this._getConfig(config); 9918 this._offsets = []; 9919 this._targets = []; 9920 this._activeTarget = null; 9921 this._scrollHeight = 0; 9922 EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process()); 9923 this.refresh(); 9924 9925 this._process(); 9926 } // Getters 9927 9928 9929 static get Default() { 9930 return Default$1; 9931 } 9932 9933 static get NAME() { 9934 return NAME$2; 9935 } // Public 9936 9937 9938 refresh() { 9939 const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION; 9940 const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method; 9941 const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0; 9942 this._offsets = []; 9943 this._targets = []; 9944 this._scrollHeight = this._getScrollHeight(); 9945 const targets = SelectorEngine.find(SELECTOR_LINK_ITEMS, this._config.target); 9946 targets.map(element => { 9947 const targetSelector = getSelectorFromElement(element); 9948 const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null; 9949 9950 if (target) { 9951 const targetBCR = target.getBoundingClientRect(); 9952 9953 if (targetBCR.width || targetBCR.height) { 9954 return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector]; 9955 } 9956 } 9957 9958 return null; 9959 }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => { 9960 this._offsets.push(item[0]); 9961 9962 this._targets.push(item[1]); 9963 }); 9964 } 9965 9966 dispose() { 9967 EventHandler.off(this._scrollElement, EVENT_KEY$2); 9968 super.dispose(); 9969 } // Private 9970 9971 9972 _getConfig(config) { 9973 config = { ...Default$1, 9974 ...Manipulator.getDataAttributes(this._element), 9975 ...(typeof config === 'object' && config ? config : {}) 9976 }; 9977 config.target = getElement(config.target) || document.documentElement; 9978 typeCheckConfig(NAME$2, config, DefaultType$1); 9979 return config; 9980 } 9981 9982 _getScrollTop() { 9983 return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop; 9984 } 9985 9986 _getScrollHeight() { 9987 return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight); 9988 } 9989 9990 _getOffsetHeight() { 9991 return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height; 9992 } 9993 9994 _process() { 9995 const scrollTop = this._getScrollTop() + this._config.offset; 9996 9997 const scrollHeight = this._getScrollHeight(); 9998 9999 const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight(); 10000 10001 if (this._scrollHeight !== scrollHeight) { 10002 this.refresh(); 10003 } 10004 10005 if (scrollTop >= maxScroll) { 10006 const target = this._targets[this._targets.length - 1]; 10007 10008 if (this._activeTarget !== target) { 10009 this._activate(target); 10010 } 10011 10012 return; 10013 } 10014 10015 if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) { 10016 this._activeTarget = null; 10017 10018 this._clear(); 10019 10020 return; 10021 } 10022 10023 for (let i = this._offsets.length; i--;) { 10024 const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]); 10025 10026 if (isActiveTarget) { 10027 this._activate(this._targets[i]); 10028 } 10029 } 10030 } 10031 10032 _activate(target) { 10033 this._activeTarget = target; 10034 10035 this._clear(); 10036 10037 const queries = SELECTOR_LINK_ITEMS.split(',').map(selector => `${selector}[data-bs-target="${target}"],${selector}[href="${target}"]`); 10038 const link = SelectorEngine.findOne(queries.join(','), this._config.target); 10039 link.classList.add(CLASS_NAME_ACTIVE$1); 10040 10041 if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) { 10042 SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1); 10043 } else { 10044 SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => { 10045 // Set triggered links parents as active 10046 // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor 10047 SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item 10048 10049 SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => { 10050 SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); 10051 }); 10052 }); 10053 } 10054 10055 EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, { 10056 relatedTarget: target 10057 }); 10058 } 10059 10060 _clear() { 10061 SelectorEngine.find(SELECTOR_LINK_ITEMS, this._config.target).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1)); 10062 } // Static 10063 10064 10065 static jQueryInterface(config) { 10066 return this.each(function () { 10067 const data = ScrollSpy.getOrCreateInstance(this, config); 10068 10069 if (typeof config !== 'string') { 10070 return; 10071 } 10072 10073 if (typeof data[config] === 'undefined') { 10074 throw new TypeError(`No method named "${config}"`); 10075 } 10076 10077 data[config](); 10078 }); 10079 } 10080 10081} 10082/** 10083 * ------------------------------------------------------------------------ 10084 * Data Api implementation 10085 * ------------------------------------------------------------------------ 10086 */ 10087 10088 10089EventHandler.on(window, EVENT_LOAD_DATA_API, () => { 10090 SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy)); 10091}); 10092/** 10093 * ------------------------------------------------------------------------ 10094 * jQuery 10095 * ------------------------------------------------------------------------ 10096 * add .ScrollSpy to jQuery only if jQuery is present 10097 */ 10098 10099defineJQueryPlugin(ScrollSpy); 10100 10101/** 10102 * -------------------------------------------------------------------------- 10103 * Bootstrap (v5.1.3): tab.js 10104 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 10105 * -------------------------------------------------------------------------- 10106 */ 10107/** 10108 * ------------------------------------------------------------------------ 10109 * Constants 10110 * ------------------------------------------------------------------------ 10111 */ 10112 10113const NAME$1 = 'tab'; 10114const DATA_KEY$1 = 'bs.tab'; 10115const EVENT_KEY$1 = `.${DATA_KEY$1}`; 10116const DATA_API_KEY = '.data-api'; 10117const EVENT_HIDE$1 = `hide${EVENT_KEY$1}`; 10118const EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`; 10119const EVENT_SHOW$1 = `show${EVENT_KEY$1}`; 10120const EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`; 10121const EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`; 10122const CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu'; 10123const CLASS_NAME_ACTIVE = 'active'; 10124const CLASS_NAME_FADE$1 = 'fade'; 10125const CLASS_NAME_SHOW$1 = 'show'; 10126const SELECTOR_DROPDOWN = '.dropdown'; 10127const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'; 10128const SELECTOR_ACTIVE = '.active'; 10129const SELECTOR_ACTIVE_UL = ':scope > li > .active'; 10130const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]'; 10131const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'; 10132const SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active'; 10133/** 10134 * ------------------------------------------------------------------------ 10135 * Class Definition 10136 * ------------------------------------------------------------------------ 10137 */ 10138 10139class Tab extends BaseComponent { 10140 // Getters 10141 static get NAME() { 10142 return NAME$1; 10143 } // Public 10144 10145 10146 show() { 10147 if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) { 10148 return; 10149 } 10150 10151 let previous; 10152 const target = getElementFromSelector(this._element); 10153 10154 const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP); 10155 10156 if (listElement) { 10157 const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE; 10158 previous = SelectorEngine.find(itemSelector, listElement); 10159 previous = previous[previous.length - 1]; 10160 } 10161 10162 const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, { 10163 relatedTarget: this._element 10164 }) : null; 10165 const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, { 10166 relatedTarget: previous 10167 }); 10168 10169 if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) { 10170 return; 10171 } 10172 10173 this._activate(this._element, listElement); 10174 10175 const complete = () => { 10176 EventHandler.trigger(previous, EVENT_HIDDEN$1, { 10177 relatedTarget: this._element 10178 }); 10179 EventHandler.trigger(this._element, EVENT_SHOWN$1, { 10180 relatedTarget: previous 10181 }); 10182 }; 10183 10184 if (target) { 10185 this._activate(target, target.parentNode, complete); 10186 } else { 10187 complete(); 10188 } 10189 } // Private 10190 10191 10192 _activate(element, container, callback) { 10193 const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE); 10194 const active = activeElements[0]; 10195 const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1); 10196 10197 const complete = () => this._transitionComplete(element, active, callback); 10198 10199 if (active && isTransitioning) { 10200 active.classList.remove(CLASS_NAME_SHOW$1); 10201 10202 this._queueCallback(complete, element, true); 10203 } else { 10204 complete(); 10205 } 10206 } 10207 10208 _transitionComplete(element, active, callback) { 10209 if (active) { 10210 active.classList.remove(CLASS_NAME_ACTIVE); 10211 const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode); 10212 10213 if (dropdownChild) { 10214 dropdownChild.classList.remove(CLASS_NAME_ACTIVE); 10215 } 10216 10217 if (active.getAttribute('role') === 'tab') { 10218 active.setAttribute('aria-selected', false); 10219 } 10220 } 10221 10222 element.classList.add(CLASS_NAME_ACTIVE); 10223 10224 if (element.getAttribute('role') === 'tab') { 10225 element.setAttribute('aria-selected', true); 10226 } 10227 10228 reflow(element); 10229 10230 if (element.classList.contains(CLASS_NAME_FADE$1)) { 10231 element.classList.add(CLASS_NAME_SHOW$1); 10232 } 10233 10234 let parent = element.parentNode; 10235 10236 if (parent && parent.nodeName === 'LI') { 10237 parent = parent.parentNode; 10238 } 10239 10240 if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) { 10241 const dropdownElement = element.closest(SELECTOR_DROPDOWN); 10242 10243 if (dropdownElement) { 10244 SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE)); 10245 } 10246 10247 element.setAttribute('aria-expanded', true); 10248 } 10249 10250 if (callback) { 10251 callback(); 10252 } 10253 } // Static 10254 10255 10256 static jQueryInterface(config) { 10257 return this.each(function () { 10258 const data = Tab.getOrCreateInstance(this); 10259 10260 if (typeof config === 'string') { 10261 if (typeof data[config] === 'undefined') { 10262 throw new TypeError(`No method named "${config}"`); 10263 } 10264 10265 data[config](); 10266 } 10267 }); 10268 } 10269 10270} 10271/** 10272 * ------------------------------------------------------------------------ 10273 * Data Api implementation 10274 * ------------------------------------------------------------------------ 10275 */ 10276 10277 10278EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) { 10279 if (['A', 'AREA'].includes(this.tagName)) { 10280 event.preventDefault(); 10281 } 10282 10283 if (isDisabled(this)) { 10284 return; 10285 } 10286 10287 const data = Tab.getOrCreateInstance(this); 10288 data.show(); 10289}); 10290/** 10291 * ------------------------------------------------------------------------ 10292 * jQuery 10293 * ------------------------------------------------------------------------ 10294 * add .Tab to jQuery only if jQuery is present 10295 */ 10296 10297defineJQueryPlugin(Tab); 10298 10299/** 10300 * -------------------------------------------------------------------------- 10301 * Bootstrap (v5.1.3): toast.js 10302 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 10303 * -------------------------------------------------------------------------- 10304 */ 10305/** 10306 * ------------------------------------------------------------------------ 10307 * Constants 10308 * ------------------------------------------------------------------------ 10309 */ 10310 10311const NAME = 'toast'; 10312const DATA_KEY = 'bs.toast'; 10313const EVENT_KEY = `.${DATA_KEY}`; 10314const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`; 10315const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`; 10316const EVENT_FOCUSIN = `focusin${EVENT_KEY}`; 10317const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`; 10318const EVENT_HIDE = `hide${EVENT_KEY}`; 10319const EVENT_HIDDEN = `hidden${EVENT_KEY}`; 10320const EVENT_SHOW = `show${EVENT_KEY}`; 10321const EVENT_SHOWN = `shown${EVENT_KEY}`; 10322const CLASS_NAME_FADE = 'fade'; 10323const CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility 10324 10325const CLASS_NAME_SHOW = 'show'; 10326const CLASS_NAME_SHOWING = 'showing'; 10327const DefaultType = { 10328 animation: 'boolean', 10329 autohide: 'boolean', 10330 delay: 'number' 10331}; 10332const Default = { 10333 animation: true, 10334 autohide: true, 10335 delay: 5000 10336}; 10337/** 10338 * ------------------------------------------------------------------------ 10339 * Class Definition 10340 * ------------------------------------------------------------------------ 10341 */ 10342 10343class Toast extends BaseComponent { 10344 constructor(element, config) { 10345 super(element); 10346 this._config = this._getConfig(config); 10347 this._timeout = null; 10348 this._hasMouseInteraction = false; 10349 this._hasKeyboardInteraction = false; 10350 10351 this._setListeners(); 10352 } // Getters 10353 10354 10355 static get DefaultType() { 10356 return DefaultType; 10357 } 10358 10359 static get Default() { 10360 return Default; 10361 } 10362 10363 static get NAME() { 10364 return NAME; 10365 } // Public 10366 10367 10368 show() { 10369 const showEvent = EventHandler.trigger(this._element, EVENT_SHOW); 10370 10371 if (showEvent.defaultPrevented) { 10372 return; 10373 } 10374 10375 this._clearTimeout(); 10376 10377 if (this._config.animation) { 10378 this._element.classList.add(CLASS_NAME_FADE); 10379 } 10380 10381 const complete = () => { 10382 this._element.classList.remove(CLASS_NAME_SHOWING); 10383 10384 EventHandler.trigger(this._element, EVENT_SHOWN); 10385 10386 this._maybeScheduleHide(); 10387 }; 10388 10389 this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated 10390 10391 10392 reflow(this._element); 10393 10394 this._element.classList.add(CLASS_NAME_SHOW); 10395 10396 this._element.classList.add(CLASS_NAME_SHOWING); 10397 10398 this._queueCallback(complete, this._element, this._config.animation); 10399 } 10400 10401 hide() { 10402 if (!this._element.classList.contains(CLASS_NAME_SHOW)) { 10403 return; 10404 } 10405 10406 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE); 10407 10408 if (hideEvent.defaultPrevented) { 10409 return; 10410 } 10411 10412 const complete = () => { 10413 this._element.classList.add(CLASS_NAME_HIDE); // @deprecated 10414 10415 10416 this._element.classList.remove(CLASS_NAME_SHOWING); 10417 10418 this._element.classList.remove(CLASS_NAME_SHOW); 10419 10420 EventHandler.trigger(this._element, EVENT_HIDDEN); 10421 }; 10422 10423 this._element.classList.add(CLASS_NAME_SHOWING); 10424 10425 this._queueCallback(complete, this._element, this._config.animation); 10426 } 10427 10428 dispose() { 10429 this._clearTimeout(); 10430 10431 if (this._element.classList.contains(CLASS_NAME_SHOW)) { 10432 this._element.classList.remove(CLASS_NAME_SHOW); 10433 } 10434 10435 super.dispose(); 10436 } // Private 10437 10438 10439 _getConfig(config) { 10440 config = { ...Default, 10441 ...Manipulator.getDataAttributes(this._element), 10442 ...(typeof config === 'object' && config ? config : {}) 10443 }; 10444 typeCheckConfig(NAME, config, this.constructor.DefaultType); 10445 return config; 10446 } 10447 10448 _maybeScheduleHide() { 10449 if (!this._config.autohide) { 10450 return; 10451 } 10452 10453 if (this._hasMouseInteraction || this._hasKeyboardInteraction) { 10454 return; 10455 } 10456 10457 this._timeout = setTimeout(() => { 10458 this.hide(); 10459 }, this._config.delay); 10460 } 10461 10462 _onInteraction(event, isInteracting) { 10463 switch (event.type) { 10464 case 'mouseover': 10465 case 'mouseout': 10466 this._hasMouseInteraction = isInteracting; 10467 break; 10468 10469 case 'focusin': 10470 case 'focusout': 10471 this._hasKeyboardInteraction = isInteracting; 10472 break; 10473 } 10474 10475 if (isInteracting) { 10476 this._clearTimeout(); 10477 10478 return; 10479 } 10480 10481 const nextElement = event.relatedTarget; 10482 10483 if (this._element === nextElement || this._element.contains(nextElement)) { 10484 return; 10485 } 10486 10487 this._maybeScheduleHide(); 10488 } 10489 10490 _setListeners() { 10491 EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true)); 10492 EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false)); 10493 EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true)); 10494 EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false)); 10495 } 10496 10497 _clearTimeout() { 10498 clearTimeout(this._timeout); 10499 this._timeout = null; 10500 } // Static 10501 10502 10503 static jQueryInterface(config) { 10504 return this.each(function () { 10505 const data = Toast.getOrCreateInstance(this, config); 10506 10507 if (typeof config === 'string') { 10508 if (typeof data[config] === 'undefined') { 10509 throw new TypeError(`No method named "${config}"`); 10510 } 10511 10512 data[config](this); 10513 } 10514 }); 10515 } 10516 10517} 10518 10519enableDismissTrigger(Toast); 10520/** 10521 * ------------------------------------------------------------------------ 10522 * jQuery 10523 * ------------------------------------------------------------------------ 10524 * add .Toast to jQuery only if jQuery is present 10525 */ 10526 10527defineJQueryPlugin(Toast); 10528 10529 10530//# sourceMappingURL=bootstrap.esm.js.map 10531 10532 10533/***/ }), 10534
vendor: 544,380 bytes, lines 10535-27746
10535/***/ "./node_modules/lodash/lodash.js": 10536/*!***************************************!*\ 10537 !*** ./node_modules/lodash/lodash.js ***! 10538 \***************************************/ 10539/***/ (function(module, exports, __webpack_require__) { 10540 10541/* module decorator */ module = __webpack_require__.nmd(module); 10542var __WEBPACK_AMD_DEFINE_RESULT__;/** 10543 * @license 10544 * Lodash <https://lodash.com/> 10545 * Copyright OpenJS Foundation and other contributors <https://openjsf.org/> 10546 * Released under MIT license <https://lodash.com/license> 10547 * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE> 10548 * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors 10549 */ 10550;(function() { 10551 10552 /** Used as a safe reference for `undefined` in pre-ES5 environments. */ 10553 var undefined; 10554 10555 /** Used as the semantic version number. */ 10556 var VERSION = '4.17.21'; 10557 10558 /** Used as the size to enable large array optimizations. */ 10559 var LARGE_ARRAY_SIZE = 200; 10560 10561 /** Error message constants. */ 10562 var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.', 10563 FUNC_ERROR_TEXT = 'Expected a function', 10564 INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`'; 10565 10566 /** Used to stand-in for `undefined` hash values. */ 10567 var HASH_UNDEFINED = '__lodash_hash_undefined__'; 10568 10569 /** Used as the maximum memoize cache size. */ 10570 var MAX_MEMOIZE_SIZE = 500; 10571 10572 /** Used as the internal argument placeholder. */ 10573 var PLACEHOLDER = '__lodash_placeholder__'; 10574 10575 /** Used to compose bitmasks for cloning. */ 10576 var CLONE_DEEP_FLAG = 1, 10577 CLONE_FLAT_FLAG = 2, 10578 CLONE_SYMBOLS_FLAG = 4; 10579 10580 /** Used to compose bitmasks for value comparisons. */ 10581 var COMPARE_PARTIAL_FLAG = 1, 10582 COMPARE_UNORDERED_FLAG = 2; 10583 10584 /** Used to compose bitmasks for function metadata. */ 10585 var WRAP_BIND_FLAG = 1, 10586 WRAP_BIND_KEY_FLAG = 2, 10587 WRAP_CURRY_BOUND_FLAG = 4, 10588 WRAP_CURRY_FLAG = 8, 10589 WRAP_CURRY_RIGHT_FLAG = 16, 10590 WRAP_PARTIAL_FLAG = 32, 10591 WRAP_PARTIAL_RIGHT_FLAG = 64, 10592 WRAP_ARY_FLAG = 128, 10593 WRAP_REARG_FLAG = 256, 10594 WRAP_FLIP_FLAG = 512; 10595 10596 /** Used as default options for `_.truncate`. */ 10597 var DEFAULT_TRUNC_LENGTH = 30, 10598 DEFAULT_TRUNC_OMISSION = '...'; 10599 10600 /** Used to detect hot functions by number of calls within a span of milliseconds. */ 10601 var HOT_COUNT = 800, 10602 HOT_SPAN = 16; 10603 10604 /** Used to indicate the type of lazy iteratees. */ 10605 var LAZY_FILTER_FLAG = 1, 10606 LAZY_MAP_FLAG = 2, 10607 LAZY_WHILE_FLAG = 3; 10608 10609 /** Used as references for various `Number` constants. */ 10610 var INFINITY = 1 / 0, 10611 MAX_SAFE_INTEGER = 9007199254740991, 10612 MAX_INTEGER = 1.7976931348623157e+308, 10613 NAN = 0 / 0; 10614 10615 /** Used as references for the maximum length and index of an array. */ 10616 var MAX_ARRAY_LENGTH = 4294967295, 10617 MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, 10618 HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; 10619 10620 /** Used to associate wrap methods with their bit flags. */ 10621 var wrapFlags = [ 10622 ['ary', WRAP_ARY_FLAG], 10623 ['bind', WRAP_BIND_FLAG], 10624 ['bindKey', WRAP_BIND_KEY_FLAG], 10625 ['curry', WRAP_CURRY_FLAG], 10626 ['curryRight', WRAP_CURRY_RIGHT_FLAG], 10627 ['flip', WRAP_FLIP_FLAG], 10628 ['partial', WRAP_PARTIAL_FLAG], 10629 ['partialRight', WRAP_PARTIAL_RIGHT_FLAG], 10630 ['rearg', WRAP_REARG_FLAG] 10631 ]; 10632 10633 /** `Object#toString` result references. */ 10634 var argsTag = '[object Arguments]', 10635 arrayTag = '[object Array]', 10636 asyncTag = '[object AsyncFunction]', 10637 boolTag = '[object Boolean]', 10638 dateTag = '[object Date]', 10639 domExcTag = '[object DOMException]', 10640 errorTag = '[object Error]', 10641 funcTag = '[object Function]', 10642 genTag = '[object GeneratorFunction]', 10643 mapTag = '[object Map]', 10644 numberTag = '[object Number]', 10645 nullTag = '[object Null]', 10646 objectTag = '[object Object]', 10647 promiseTag = '[object Promise]', 10648 proxyTag = '[object Proxy]', 10649 regexpTag = '[object RegExp]', 10650 setTag = '[object Set]', 10651 stringTag = '[object String]', 10652 symbolTag = '[object Symbol]', 10653 undefinedTag = '[object Undefined]', 10654 weakMapTag = '[object WeakMap]', 10655 weakSetTag = '[object WeakSet]'; 10656 10657 var arrayBufferTag = '[object ArrayBuffer]', 10658 dataViewTag = '[object DataView]', 10659 float32Tag = '[object Float32Array]', 10660 float64Tag = '[object Float64Array]', 10661 int8Tag = '[object Int8Array]', 10662 int16Tag = '[object Int16Array]', 10663 int32Tag = '[object Int32Array]', 10664 uint8Tag = '[object Uint8Array]', 10665 uint8ClampedTag = '[object Uint8ClampedArray]', 10666 uint16Tag = '[object Uint16Array]', 10667 uint32Tag = '[object Uint32Array]'; 10668 10669 /** Used to match empty string literals in compiled template source. */ 10670 var reEmptyStringLeading = /\b__p \+= '';/g, 10671 reEmptyStringMiddle = /\b(__p \+=) '' \+/g, 10672 reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; 10673 10674 /** Used to match HTML entities and HTML characters. */ 10675 var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g, 10676 reUnescapedHtml = /[&<>"']/g, 10677 reHasEscapedHtml = RegExp(reEscapedHtml.source), 10678 reHasUnescapedHtml = RegExp(reUnescapedHtml.source); 10679 10680 /** Used to match template delimiters. */ 10681 var reEscape = /<%-([\s\S]+?)%>/g, 10682 reEvaluate = /<%([\s\S]+?)%>/g, 10683 reInterpolate = /<%=([\s\S]+?)%>/g; 10684 10685 /** Used to match property names within property paths. */ 10686 var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, 10687 reIsPlainProp = /^\w*$/, 10688 rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; 10689 10690 /** 10691 * Used to match `RegExp` 10692 * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). 10693 */ 10694 var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, 10695 reHasRegExpChar = RegExp(reRegExpChar.source); 10696 10697 /** Used to match leading whitespace. */ 10698 var reTrimStart = /^\s+/; 10699 10700 /** Used to match a single whitespace character. */ 10701 var reWhitespace = /\s/; 10702 10703 /** Used to match wrap detail comments. */ 10704 var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/, 10705 reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, 10706 reSplitDetails = /,? & /; 10707 10708 /** Used to match words composed of alphanumeric characters. */ 10709 var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; 10710 10711 /** 10712 * Used to validate the `validate` option in `_.template` variable. 10713 * 10714 * Forbids characters which could potentially change the meaning of the function argument definition: 10715 * - "()," (modification of function parameters) 10716 * - "=" (default value) 10717 * - "[]{}" (destructuring of function parameters) 10718 * - "/" (beginning of a comment) 10719 * - whitespace 10720 */ 10721 var reForbiddenIdentifierChars = /[()=,{}\[\]\/\s]/; 10722 10723 /** Used to match backslashes in property paths. */ 10724 var reEscapeChar = /\\(\\)?/g; 10725 10726 /** 10727 * Used to match 10728 * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components). 10729 */ 10730 var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; 10731 10732 /** Used to match `RegExp` flags from their coerced string values. */ 10733 var reFlags = /\w*$/; 10734 10735 /** Used to detect bad signed hexadecimal string values. */ 10736 var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; 10737 10738 /** Used to detect binary string values. */ 10739 var reIsBinary = /^0b[01]+$/i; 10740 10741 /** Used to detect host constructors (Safari). */ 10742 var reIsHostCtor = /^\[object .+?Constructor\]$/; 10743 10744 /** Used to detect octal string values. */ 10745 var reIsOctal = /^0o[0-7]+$/i; 10746 10747 /** Used to detect unsigned integer values. */ 10748 var reIsUint = /^(?:0|[1-9]\d*)$/; 10749 10750 /** Used to match Latin Unicode letters (excluding mathematical operators). */ 10751 var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; 10752 10753 /** Used to ensure capturing order of template delimiters. */ 10754 var reNoMatch = /($^)/; 10755 10756 /** Used to match unescaped characters in compiled string literals. */ 10757 var reUnescapedString = /['\n\r\u2028\u2029\\]/g; 10758 10759 /** Used to compose unicode character classes. */ 10760 var rsAstralRange = '\\ud800-\\udfff', 10761 rsComboMarksRange = '\\u0300-\\u036f', 10762 reComboHalfMarksRange = '\\ufe20-\\ufe2f', 10763 rsComboSymbolsRange = '\\u20d0-\\u20ff', 10764 rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, 10765 rsDingbatRange = '\\u2700-\\u27bf', 10766 rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', 10767 rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', 10768 rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', 10769 rsPunctuationRange = '\\u2000-\\u206f', 10770 rsSpaceRange = ' \\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', 10771 rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', 10772 rsVarRange = '\\ufe0e\\ufe0f', 10773 rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; 10774 10775 /** Used to compose unicode capture groups. */ 10776 var rsApos = "['\u2019]", 10777 rsAstral = '[' + rsAstralRange + ']', 10778 rsBreak = '[' + rsBreakRange + ']', 10779 rsCombo = '[' + rsComboRange + ']', 10780 rsDigits = '\\d+', 10781 rsDingbat = '[' + rsDingbatRange + ']', 10782 rsLower = '[' + rsLowerRange + ']', 10783 rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']', 10784 rsFitz = '\\ud83c[\\udffb-\\udfff]', 10785 rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', 10786 rsNonAstral = '[^' + rsAstralRange + ']', 10787 rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', 10788 rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', 10789 rsUpper = '[' + rsUpperRange + ']', 10790 rsZWJ = '\\u200d'; 10791 10792 /** Used to compose unicode regexes. */ 10793 var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')', 10794 rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')', 10795 rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?', 10796 rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?', 10797 reOptMod = rsModifier + '?', 10798 rsOptVar = '[' + rsVarRange + ']?', 10799 rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', 10800 rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])', 10801 rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])', 10802 rsSeq = rsOptVar + reOptMod + rsOptJoin, 10803 rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq, 10804 rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; 10805 10806 /** Used to match apostrophes. */ 10807 var reApos = RegExp(rsApos, 'g'); 10808 10809 /** 10810 * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and 10811 * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). 10812 */ 10813 var reComboMark = RegExp(rsCombo, 'g'); 10814 10815 /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ 10816 var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); 10817 10818 /** Used to match complex or compound words. */ 10819 var reUnicodeWord = RegExp([ 10820 rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', 10821 rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')', 10822 rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower, 10823 rsUpper + '+' + rsOptContrUpper, 10824 rsOrdUpper, 10825 rsOrdLower, 10826 rsDigits, 10827 rsEmoji 10828 ].join('|'), 'g'); 10829 10830 /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ 10831 var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); 10832 10833 /** Used to detect strings that need a more robust regexp to match words. */ 10834 var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; 10835 10836 /** Used to assign default `context` object properties. */ 10837 var contextProps = [ 10838 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array', 10839 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object', 10840 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array', 10841 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap', 10842 '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout' 10843 ]; 10844 10845 /** Used to make template sourceURLs easier to identify. */ 10846 var templateCounter = -1; 10847 10848 /** Used to identify `toStringTag` values of typed arrays. */ 10849 var typedArrayTags = {}; 10850 typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = 10851 typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = 10852 typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = 10853 typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = 10854 typedArrayTags[uint32Tag] = true; 10855 typedArrayTags[argsTag] = typedArrayTags[arrayTag] = 10856 typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = 10857 typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = 10858 typedArrayTags[errorTag] = typedArrayTags[funcTag] = 10859 typedArrayTags[mapTag] = typedArrayTags[numberTag] = 10860 typedArrayTags[objectTag] = typedArrayTags[regexpTag] = 10861 typedArrayTags[setTag] = typedArrayTags[stringTag] = 10862 typedArrayTags[weakMapTag] = false; 10863 10864 /** Used to identify `toStringTag` values supported by `_.clone`. */ 10865 var cloneableTags = {}; 10866 cloneableTags[argsTag] = cloneableTags[arrayTag] = 10867 cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = 10868 cloneableTags[boolTag] = cloneableTags[dateTag] = 10869 cloneableTags[float32Tag] = cloneableTags[float64Tag] = 10870 cloneableTags[int8Tag] = cloneableTags[int16Tag] = 10871 cloneableTags[int32Tag] = cloneableTags[mapTag] = 10872 cloneableTags[numberTag] = cloneableTags[objectTag] = 10873 cloneableTags[regexpTag] = cloneableTags[setTag] = 10874 cloneableTags[stringTag] = cloneableTags[symbolTag] = 10875 cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = 10876 cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; 10877 cloneableTags[errorTag] = cloneableTags[funcTag] = 10878 cloneableTags[weakMapTag] = false; 10879 10880 /** Used to map Latin Unicode letters to basic Latin letters. */ 10881 var deburredLetters = { 10882 // Latin-1 Supplement block. 10883 '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', 10884 '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', 10885 '\xc7': 'C', '\xe7': 'c', 10886 '\xd0': 'D', '\xf0': 'd', 10887 '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', 10888 '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', 10889 '\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', 10890 '\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', 10891 '\xd1': 'N', '\xf1': 'n', 10892 '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', 10893 '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', 10894 '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', 10895 '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', 10896 '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', 10897 '\xc6': 'Ae', '\xe6': 'ae', 10898 '\xde': 'Th', '\xfe': 'th', 10899 '\xdf': 'ss', 10900 // Latin Extended-A block. 10901 '\u0100': 'A', '\u0102': 'A', '\u0104': 'A', 10902 '\u0101': 'a', '\u0103': 'a', '\u0105': 'a', 10903 '\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C', 10904 '\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c', 10905 '\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd', 10906 '\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E', 10907 '\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e', 10908 '\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G', 10909 '\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g', 10910 '\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h', 10911 '\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I', 10912 '\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i', 10913 '\u0134': 'J', '\u0135': 'j', 10914 '\u0136': 'K', '\u0137': 'k', '\u0138': 'k', 10915 '\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L', 10916 '\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l', 10917 '\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N', 10918 '\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n', 10919 '\u014c': 'O', '\u014e': 'O', '\u0150': 'O', 10920 '\u014d': 'o', '\u014f': 'o', '\u0151': 'o', 10921 '\u0154': 'R', '\u0156': 'R', '\u0158': 'R', 10922 '\u0155': 'r', '\u0157': 'r', '\u0159': 'r', 10923 '\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S', 10924 '\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's', 10925 '\u0162': 'T', '\u0164': 'T', '\u0166': 'T', 10926 '\u0163': 't', '\u0165': 't', '\u0167': 't', 10927 '\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U', 10928 '\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u', 10929 '\u0174': 'W', '\u0175': 'w', 10930 '\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y', 10931 '\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z', 10932 '\u017a': 'z', '\u017c': 'z', '\u017e': 'z', 10933 '\u0132': 'IJ', '\u0133': 'ij', 10934 '\u0152': 'Oe', '\u0153': 'oe', 10935 '\u0149': "'n", '\u017f': 's' 10936 }; 10937 10938 /** Used to map characters to HTML entities. */ 10939 var htmlEscapes = { 10940 '&': '&', 10941 '<': '<', 10942 '>': '>', 10943 '"': '"', 10944 "'": ''' 10945 }; 10946 10947 /** Used to map HTML entities to characters. */ 10948 var htmlUnescapes = { 10949 '&': '&', 10950 '<': '<', 10951 '>': '>', 10952 '"': '"', 10953 ''': "'" 10954 }; 10955 10956 /** Used to escape characters for inclusion in compiled string literals. */ 10957 var stringEscapes = { 10958 '\\': '\\', 10959 "'": "'", 10960 '\n': 'n', 10961 '\r': 'r', 10962 '\u2028': 'u2028', 10963 '\u2029': 'u2029' 10964 }; 10965 10966 /** Built-in method references without a dependency on `root`. */ 10967 var freeParseFloat = parseFloat, 10968 freeParseInt = parseInt; 10969 10970 /** Detect free variable `global` from Node.js. */ 10971 var freeGlobal = typeof __webpack_require__.g == 'object' && __webpack_require__.g && __webpack_require__.g.Object === Object && __webpack_require__.g; 10972 10973 /** Detect free variable `self`. */ 10974 var freeSelf = typeof self == 'object' && self && self.Object === Object && self; 10975 10976 /** Used as a reference to the global object. */ 10977 var root = freeGlobal || freeSelf || Function('return this')(); 10978 10979 /** Detect free variable `exports`. */ 10980 var freeExports = true && exports && !exports.nodeType && exports; 10981 10982 /** Detect free variable `module`. */ 10983 var freeModule = freeExports && "object" == 'object' && module && !module.nodeType && module; 10984 10985 /** Detect the popular CommonJS extension `module.exports`. */ 10986 var moduleExports = freeModule && freeModule.exports === freeExports; 10987 10988 /** Detect free variable `process` from Node.js. */ 10989 var freeProcess = moduleExports && freeGlobal.process; 10990 10991 /** Used to access faster Node.js helpers. */ 10992 var nodeUtil = (function() { 10993 try { 10994 // Use `util.types` for Node.js 10+. 10995 var types = freeModule && freeModule.require && freeModule.require('util').types; 10996 10997 if (types) { 10998 return types; 10999 } 11000 11001 // Legacy `process.binding('util')` for Node.js < 10. 11002 return freeProcess && freeProcess.binding && freeProcess.binding('util'); 11003 } catch (e) {} 11004 }()); 11005 11006 /* Node.js helper references. */ 11007 var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer, 11008 nodeIsDate = nodeUtil && nodeUtil.isDate, 11009 nodeIsMap = nodeUtil && nodeUtil.isMap, 11010 nodeIsRegExp = nodeUtil && nodeUtil.isRegExp, 11011 nodeIsSet = nodeUtil && nodeUtil.isSet, 11012 nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; 11013 11014 /*--------------------------------------------------------------------------*/ 11015 11016 /** 11017 * A faster alternative to `Function#apply`, this function invokes `func` 11018 * with the `this` binding of `thisArg` and the arguments of `args`. 11019 * 11020 * @private 11021 * @param {Function} func The function to invoke. 11022 * @param {*} thisArg The `this` binding of `func`. 11023 * @param {Array} args The arguments to invoke `func` with. 11024 * @returns {*} Returns the result of `func`. 11025 */ 11026 function apply(func, thisArg, args) { 11027 switch (args.length) { 11028 case 0: return func.call(thisArg); 11029 case 1: return func.call(thisArg, args[0]); 11030 case 2: return func.call(thisArg, args[0], args[1]); 11031 case 3: return func.call(thisArg, args[0], args[1], args[2]); 11032 } 11033 return func.apply(thisArg, args); 11034 } 11035 11036 /** 11037 * A specialized version of `baseAggregator` for arrays. 11038 * 11039 * @private 11040 * @param {Array} [array] The array to iterate over. 11041 * @param {Function} setter The function to set `accumulator` values. 11042 * @param {Function} iteratee The iteratee to transform keys. 11043 * @param {Object} accumulator The initial aggregated object. 11044 * @returns {Function} Returns `accumulator`. 11045 */ 11046 function arrayAggregator(array, setter, iteratee, accumulator) { 11047 var index = -1, 11048 length = array == null ? 0 : array.length; 11049 11050 while (++index < length) { 11051 var value = array[index]; 11052 setter(accumulator, value, iteratee(value), array); 11053 } 11054 return accumulator; 11055 } 11056 11057 /** 11058 * A specialized version of `_.forEach` for arrays without support for 11059 * iteratee shorthands. 11060 * 11061 * @private 11062 * @param {Array} [array] The array to iterate over. 11063 * @param {Function} iteratee The function invoked per iteration. 11064 * @returns {Array} Returns `array`. 11065 */ 11066 function arrayEach(array, iteratee) { 11067 var index = -1, 11068 length = array == null ? 0 : array.length; 11069 11070 while (++index < length) { 11071 if (iteratee(array[index], index, array) === false) { 11072 break; 11073 } 11074 } 11075 return array; 11076 } 11077 11078 /** 11079 * A specialized version of `_.forEachRight` for arrays without support for 11080 * iteratee shorthands. 11081 * 11082 * @private 11083 * @param {Array} [array] The array to iterate over. 11084 * @param {Function} iteratee The function invoked per iteration. 11085 * @returns {Array} Returns `array`. 11086 */ 11087 function arrayEachRight(array, iteratee) { 11088 var length = array == null ? 0 : array.length; 11089 11090 while (length--) { 11091 if (iteratee(array[length], length, array) === false) { 11092 break; 11093 } 11094 } 11095 return array; 11096 } 11097 11098 /** 11099 * A specialized version of `_.every` for arrays without support for 11100 * iteratee shorthands. 11101 * 11102 * @private 11103 * @param {Array} [array] The array to iterate over. 11104 * @param {Function} predicate The function invoked per iteration. 11105 * @returns {boolean} Returns `true` if all elements pass the predicate check, 11106 * else `false`. 11107 */ 11108 function arrayEvery(array, predicate) { 11109 var index = -1, 11110 length = array == null ? 0 : array.length; 11111 11112 while (++index < length) { 11113 if (!predicate(array[index], index, array)) { 11114 return false; 11115 } 11116 } 11117 return true; 11118 } 11119 11120 /** 11121 * A specialized version of `_.filter` for arrays without support for 11122 * iteratee shorthands. 11123 * 11124 * @private 11125 * @param {Array} [array] The array to iterate over. 11126 * @param {Function} predicate The function invoked per iteration. 11127 * @returns {Array} Returns the new filtered array. 11128 */ 11129 function arrayFilter(array, predicate) { 11130 var index = -1, 11131 length = array == null ? 0 : array.length, 11132 resIndex = 0, 11133 result = []; 11134 11135 while (++index < length) { 11136 var value = array[index]; 11137 if (predicate(value, index, array)) { 11138 result[resIndex++] = value; 11139 } 11140 } 11141 return result; 11142 } 11143 11144 /** 11145 * A specialized version of `_.includes` for arrays without support for 11146 * specifying an index to search from. 11147 * 11148 * @private 11149 * @param {Array} [array] The array to inspect. 11150 * @param {*} target The value to search for. 11151 * @returns {boolean} Returns `true` if `target` is found, else `false`. 11152 */ 11153 function arrayIncludes(array, value) { 11154 var length = array == null ? 0 : array.length; 11155 return !!length && baseIndexOf(array, value, 0) > -1; 11156 } 11157 11158 /** 11159 * This function is like `arrayIncludes` except that it accepts a comparator. 11160 * 11161 * @private 11162 * @param {Array} [array] The array to inspect. 11163 * @param {*} target The value to search for. 11164 * @param {Function} comparator The comparator invoked per element. 11165 * @returns {boolean} Returns `true` if `target` is found, else `false`. 11166 */ 11167 function arrayIncludesWith(array, value, comparator) { 11168 var index = -1, 11169 length = array == null ? 0 : array.length; 11170 11171 while (++index < length) { 11172 if (comparator(value, array[index])) { 11173 return true; 11174 } 11175 } 11176 return false; 11177 } 11178 11179 /** 11180 * A specialized version of `_.map` for arrays without support for iteratee 11181 * shorthands. 11182 * 11183 * @private 11184 * @param {Array} [array] The array to iterate over. 11185 * @param {Function} iteratee The function invoked per iteration. 11186 * @returns {Array} Returns the new mapped array. 11187 */ 11188 function arrayMap(array, iteratee) { 11189 var index = -1, 11190 length = array == null ? 0 : array.length, 11191 result = Array(length); 11192 11193 while (++index < length) { 11194 result[index] = iteratee(array[index], index, array); 11195 } 11196 return result; 11197 } 11198 11199 /** 11200 * Appends the elements of `values` to `array`. 11201 * 11202 * @private 11203 * @param {Array} array The array to modify. 11204 * @param {Array} values The values to append. 11205 * @returns {Array} Returns `array`. 11206 */ 11207 function arrayPush(array, values) { 11208 var index = -1, 11209 length = values.length, 11210 offset = array.length; 11211 11212 while (++index < length) { 11213 array[offset + index] = values[index]; 11214 } 11215 return array; 11216 } 11217 11218 /** 11219 * A specialized version of `_.reduce` for arrays without support for 11220 * iteratee shorthands. 11221 * 11222 * @private 11223 * @param {Array} [array] The array to iterate over. 11224 * @param {Function} iteratee The function invoked per iteration. 11225 * @param {*} [accumulator] The initial value. 11226 * @param {boolean} [initAccum] Specify using the first element of `array` as 11227 * the initial value. 11228 * @returns {*} Returns the accumulated value. 11229 */ 11230 function arrayReduce(array, iteratee, accumulator, initAccum) { 11231 var index = -1, 11232 length = array == null ? 0 : array.length; 11233 11234 if (initAccum && length) { 11235 accumulator = array[++index]; 11236 } 11237 while (++index < length) { 11238 accumulator = iteratee(accumulator, array[index], index, array); 11239 } 11240 return accumulator; 11241 } 11242 11243 /** 11244 * A specialized version of `_.reduceRight` for arrays without support for 11245 * iteratee shorthands. 11246 * 11247 * @private 11248 * @param {Array} [array] The array to iterate over. 11249 * @param {Function} iteratee The function invoked per iteration. 11250 * @param {*} [accumulator] The initial value. 11251 * @param {boolean} [initAccum] Specify using the last element of `array` as 11252 * the initial value. 11253 * @returns {*} Returns the accumulated value. 11254 */ 11255 function arrayReduceRight(array, iteratee, accumulator, initAccum) { 11256 var length = array == null ? 0 : array.length; 11257 if (initAccum && length) { 11258 accumulator = array[--length]; 11259 } 11260 while (length--) { 11261 accumulator = iteratee(accumulator, array[length], length, array); 11262 } 11263 return accumulator; 11264 } 11265 11266 /** 11267 * A specialized version of `_.some` for arrays without support for iteratee 11268 * shorthands. 11269 * 11270 * @private 11271 * @param {Array} [array] The array to iterate over. 11272 * @param {Function} predicate The function invoked per iteration. 11273 * @returns {boolean} Returns `true` if any element passes the predicate check, 11274 * else `false`. 11275 */ 11276 function arraySome(array, predicate) { 11277 var index = -1, 11278 length = array == null ? 0 : array.length; 11279 11280 while (++index < length) { 11281 if (predicate(array[index], index, array)) { 11282 return true; 11283 } 11284 } 11285 return false; 11286 } 11287 11288 /** 11289 * Gets the size of an ASCII `string`. 11290 * 11291 * @private 11292 * @param {string} string The string inspect. 11293 * @returns {number} Returns the string size. 11294 */ 11295 var asciiSize = baseProperty('length'); 11296 11297 /** 11298 * Converts an ASCII `string` to an array. 11299 * 11300 * @private 11301 * @param {string} string The string to convert. 11302 * @returns {Array} Returns the converted array. 11303 */ 11304 function asciiToArray(string) { 11305 return string.split(''); 11306 } 11307 11308 /** 11309 * Splits an ASCII `string` into an array of its words. 11310 * 11311 * @private 11312 * @param {string} The string to inspect. 11313 * @returns {Array} Returns the words of `string`. 11314 */ 11315 function asciiWords(string) { 11316 return string.match(reAsciiWord) || []; 11317 } 11318 11319 /** 11320 * The base implementation of methods like `_.findKey` and `_.findLastKey`, 11321 * without support for iteratee shorthands, which iterates over `collection` 11322 * using `eachFunc`. 11323 * 11324 * @private 11325 * @param {Array|Object} collection The collection to inspect. 11326 * @param {Function} predicate The function invoked per iteration. 11327 * @param {Function} eachFunc The function to iterate over `collection`. 11328 * @returns {*} Returns the found element or its key, else `undefined`. 11329 */ 11330 function baseFindKey(collection, predicate, eachFunc) { 11331 var result; 11332 eachFunc(collection, function(value, key, collection) { 11333 if (predicate(value, key, collection)) { 11334 result = key; 11335 return false; 11336 } 11337 }); 11338 return result; 11339 } 11340 11341 /** 11342 * The base implementation of `_.findIndex` and `_.findLastIndex` without 11343 * support for iteratee shorthands. 11344 * 11345 * @private 11346 * @param {Array} array The array to inspect. 11347 * @param {Function} predicate The function invoked per iteration. 11348 * @param {number} fromIndex The index to search from. 11349 * @param {boolean} [fromRight] Specify iterating from right to left. 11350 * @returns {number} Returns the index of the matched value, else `-1`. 11351 */ 11352 function baseFindIndex(array, predicate, fromIndex, fromRight) { 11353 var length = array.length, 11354 index = fromIndex + (fromRight ? 1 : -1); 11355 11356 while ((fromRight ? index-- : ++index < length)) { 11357 if (predicate(array[index], index, array)) { 11358 return index; 11359 } 11360 } 11361 return -1; 11362 } 11363 11364 /** 11365 * The base implementation of `_.indexOf` without `fromIndex` bounds checks. 11366 * 11367 * @private 11368 * @param {Array} array The array to inspect. 11369 * @param {*} value The value to search for. 11370 * @param {number} fromIndex The index to search from. 11371 * @returns {number} Returns the index of the matched value, else `-1`. 11372 */ 11373 function baseIndexOf(array, value, fromIndex) { 11374 return value === value 11375 ? strictIndexOf(array, value, fromIndex) 11376 : baseFindIndex(array, baseIsNaN, fromIndex); 11377 } 11378 11379 /** 11380 * This function is like `baseIndexOf` except that it accepts a comparator. 11381 * 11382 * @private 11383 * @param {Array} array The array to inspect. 11384 * @param {*} value The value to search for. 11385 * @param {number} fromIndex The index to search from. 11386 * @param {Function} comparator The comparator invoked per element. 11387 * @returns {number} Returns the index of the matched value, else `-1`. 11388 */ 11389 function baseIndexOfWith(array, value, fromIndex, comparator) { 11390 var index = fromIndex - 1, 11391 length = array.length; 11392 11393 while (++index < length) { 11394 if (comparator(array[index], value)) { 11395 return index; 11396 } 11397 } 11398 return -1; 11399 } 11400 11401 /** 11402 * The base implementation of `_.isNaN` without support for number objects. 11403 * 11404 * @private 11405 * @param {*} value The value to check. 11406 * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. 11407 */ 11408 function baseIsNaN(value) { 11409 return value !== value; 11410 } 11411 11412 /** 11413 * The base implementation of `_.mean` and `_.meanBy` without support for 11414 * iteratee shorthands. 11415 * 11416 * @private 11417 * @param {Array} array The array to iterate over. 11418 * @param {Function} iteratee The function invoked per iteration. 11419 * @returns {number} Returns the mean. 11420 */ 11421 function baseMean(array, iteratee) { 11422 var length = array == null ? 0 : array.length; 11423 return length ? (baseSum(array, iteratee) / length) : NAN; 11424 } 11425 11426 /** 11427 * The base implementation of `_.property` without support for deep paths. 11428 * 11429 * @private 11430 * @param {string} key The key of the property to get. 11431 * @returns {Function} Returns the new accessor function. 11432 */ 11433 function baseProperty(key) { 11434 return function(object) { 11435 return object == null ? undefined : object[key]; 11436 }; 11437 } 11438 11439 /** 11440 * The base implementation of `_.propertyOf` without support for deep paths. 11441 * 11442 * @private 11443 * @param {Object} object The object to query. 11444 * @returns {Function} Returns the new accessor function. 11445 */ 11446 function basePropertyOf(object) { 11447 return function(key) { 11448 return object == null ? undefined : object[key]; 11449 }; 11450 } 11451 11452 /** 11453 * The base implementation of `_.reduce` and `_.reduceRight`, without support 11454 * for iteratee shorthands, which iterates over `collection` using `eachFunc`. 11455 * 11456 * @private 11457 * @param {Array|Object} collection The collection to iterate over. 11458 * @param {Function} iteratee The function invoked per iteration. 11459 * @param {*} accumulator The initial value. 11460 * @param {boolean} initAccum Specify using the first or last element of 11461 * `collection` as the initial value. 11462 * @param {Function} eachFunc The function to iterate over `collection`. 11463 * @returns {*} Returns the accumulated value. 11464 */ 11465 function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { 11466 eachFunc(collection, function(value, index, collection) { 11467 accumulator = initAccum 11468 ? (initAccum = false, value) 11469 : iteratee(accumulator, value, index, collection); 11470 }); 11471 return accumulator; 11472 } 11473 11474 /** 11475 * The base implementation of `_.sortBy` which uses `comparer` to define the 11476 * sort order of `array` and replaces criteria objects with their corresponding 11477 * values. 11478 * 11479 * @private 11480 * @param {Array} array The array to sort. 11481 * @param {Function} comparer The function to define sort order. 11482 * @returns {Array} Returns `array`. 11483 */ 11484 function baseSortBy(array, comparer) { 11485 var length = array.length; 11486 11487 array.sort(comparer); 11488 while (length--) { 11489 array[length] = array[length].value; 11490 } 11491 return array; 11492 } 11493 11494 /** 11495 * The base implementation of `_.sum` and `_.sumBy` without support for 11496 * iteratee shorthands. 11497 * 11498 * @private 11499 * @param {Array} array The array to iterate over. 11500 * @param {Function} iteratee The function invoked per iteration. 11501 * @returns {number} Returns the sum. 11502 */ 11503 function baseSum(array, iteratee) { 11504 var result, 11505 index = -1, 11506 length = array.length; 11507 11508 while (++index < length) { 11509 var current = iteratee(array[index]); 11510 if (current !== undefined) { 11511 result = result === undefined ? current : (result + current); 11512 } 11513 } 11514 return result; 11515 } 11516 11517 /** 11518 * The base implementation of `_.times` without support for iteratee shorthands 11519 * or max array length checks. 11520 * 11521 * @private 11522 * @param {number} n The number of times to invoke `iteratee`. 11523 * @param {Function} iteratee The function invoked per iteration. 11524 * @returns {Array} Returns the array of results. 11525 */ 11526 function baseTimes(n, iteratee) { 11527 var index = -1, 11528 result = Array(n); 11529 11530 while (++index < n) { 11531 result[index] = iteratee(index); 11532 } 11533 return result; 11534 } 11535 11536 /** 11537 * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array 11538 * of key-value pairs for `object` corresponding to the property names of `props`. 11539 * 11540 * @private 11541 * @param {Object} object The object to query. 11542 * @param {Array} props The property names to get values for. 11543 * @returns {Object} Returns the key-value pairs. 11544 */ 11545 function baseToPairs(object, props) { 11546 return arrayMap(props, function(key) { 11547 return [key, object[key]]; 11548 }); 11549 } 11550 11551 /** 11552 * The base implementation of `_.trim`. 11553 * 11554 * @private 11555 * @param {string} string The string to trim. 11556 * @returns {string} Returns the trimmed string. 11557 */ 11558 function baseTrim(string) { 11559 return string 11560 ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') 11561 : string; 11562 } 11563 11564 /** 11565 * The base implementation of `_.unary` without support for storing metadata. 11566 * 11567 * @private 11568 * @param {Function} func The function to cap arguments for. 11569 * @returns {Function} Returns the new capped function. 11570 */ 11571 function baseUnary(func) { 11572 return function(value) { 11573 return func(value); 11574 }; 11575 } 11576 11577 /** 11578 * The base implementation of `_.values` and `_.valuesIn` which creates an 11579 * array of `object` property values corresponding to the property names 11580 * of `props`. 11581 * 11582 * @private 11583 * @param {Object} object The object to query. 11584 * @param {Array} props The property names to get values for. 11585 * @returns {Object} Returns the array of property values. 11586 */ 11587 function baseValues(object, props) { 11588 return arrayMap(props, function(key) { 11589 return object[key]; 11590 }); 11591 } 11592 11593 /** 11594 * Checks if a `cache` value for `key` exists. 11595 * 11596 * @private 11597 * @param {Object} cache The cache to query. 11598 * @param {string} key The key of the entry to check. 11599 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. 11600 */ 11601 function cacheHas(cache, key) { 11602 return cache.has(key); 11603 } 11604 11605 /** 11606 * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol 11607 * that is not found in the character symbols. 11608 * 11609 * @private 11610 * @param {Array} strSymbols The string symbols to inspect. 11611 * @param {Array} chrSymbols The character symbols to find. 11612 * @returns {number} Returns the index of the first unmatched string symbol. 11613 */ 11614 function charsStartIndex(strSymbols, chrSymbols) { 11615 var index = -1, 11616 length = strSymbols.length; 11617 11618 while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} 11619 return index; 11620 } 11621 11622 /** 11623 * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol 11624 * that is not found in the character symbols. 11625 * 11626 * @private 11627 * @param {Array} strSymbols The string symbols to inspect. 11628 * @param {Array} chrSymbols The character symbols to find. 11629 * @returns {number} Returns the index of the last unmatched string symbol. 11630 */ 11631 function charsEndIndex(strSymbols, chrSymbols) { 11632 var index = strSymbols.length; 11633 11634 while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} 11635 return index; 11636 } 11637 11638 /** 11639 * Gets the number of `placeholder` occurrences in `array`. 11640 * 11641 * @private 11642 * @param {Array} array The array to inspect. 11643 * @param {*} placeholder The placeholder to search for. 11644 * @returns {number} Returns the placeholder count. 11645 */ 11646 function countHolders(array, placeholder) { 11647 var length = array.length, 11648 result = 0; 11649 11650 while (length--) { 11651 if (array[length] === placeholder) { 11652 ++result; 11653 } 11654 } 11655 return result; 11656 } 11657 11658 /** 11659 * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A 11660 * letters to basic Latin letters. 11661 * 11662 * @private 11663 * @param {string} letter The matched letter to deburr. 11664 * @returns {string} Returns the deburred letter. 11665 */ 11666 var deburrLetter = basePropertyOf(deburredLetters); 11667 11668 /** 11669 * Used by `_.escape` to convert characters to HTML entities. 11670 * 11671 * @private 11672 * @param {string} chr The matched character to escape. 11673 * @returns {string} Returns the escaped character. 11674 */ 11675 var escapeHtmlChar = basePropertyOf(htmlEscapes); 11676 11677 /** 11678 * Used by `_.template` to escape characters for inclusion in compiled string literals. 11679 * 11680 * @private 11681 * @param {string} chr The matched character to escape. 11682 * @returns {string} Returns the escaped character. 11683 */ 11684 function escapeStringChar(chr) { 11685 return '\\' + stringEscapes[chr]; 11686 } 11687 11688 /** 11689 * Gets the value at `key` of `object`. 11690 * 11691 * @private 11692 * @param {Object} [object] The object to query. 11693 * @param {string} key The key of the property to get. 11694 * @returns {*} Returns the property value. 11695 */ 11696 function getValue(object, key) { 11697 return object == null ? undefined : object[key]; 11698 } 11699 11700 /** 11701 * Checks if `string` contains Unicode symbols. 11702 * 11703 * @private 11704 * @param {string} string The string to inspect. 11705 * @returns {boolean} Returns `true` if a symbol is found, else `false`. 11706 */ 11707 function hasUnicode(string) { 11708 return reHasUnicode.test(string); 11709 } 11710 11711 /** 11712 * Checks if `string` contains a word composed of Unicode symbols. 11713 * 11714 * @private 11715 * @param {string} string The string to inspect. 11716 * @returns {boolean} Returns `true` if a word is found, else `false`. 11717 */ 11718 function hasUnicodeWord(string) { 11719 return reHasUnicodeWord.test(string); 11720 } 11721 11722 /** 11723 * Converts `iterator` to an array. 11724 * 11725 * @private 11726 * @param {Object} iterator The iterator to convert. 11727 * @returns {Array} Returns the converted array. 11728 */ 11729 function iteratorToArray(iterator) { 11730 var data, 11731 result = []; 11732 11733 while (!(data = iterator.next()).done) { 11734 result.push(data.value); 11735 } 11736 return result; 11737 } 11738 11739 /** 11740 * Converts `map` to its key-value pairs. 11741 * 11742 * @private 11743 * @param {Object} map The map to convert. 11744 * @returns {Array} Returns the key-value pairs. 11745 */ 11746 function mapToArray(map) { 11747 var index = -1, 11748 result = Array(map.size); 11749 11750 map.forEach(function(value, key) { 11751 result[++index] = [key, value]; 11752 }); 11753 return result; 11754 } 11755 11756 /** 11757 * Creates a unary function that invokes `func` with its argument transformed. 11758 * 11759 * @private 11760 * @param {Function} func The function to wrap. 11761 * @param {Function} transform The argument transform. 11762 * @returns {Function} Returns the new function. 11763 */ 11764 function overArg(func, transform) { 11765 return function(arg) { 11766 return func(transform(arg)); 11767 }; 11768 } 11769 11770 /** 11771 * Replaces all `placeholder` elements in `array` with an internal placeholder 11772 * and returns an array of their indexes. 11773 * 11774 * @private 11775 * @param {Array} array The array to modify. 11776 * @param {*} placeholder The placeholder to replace. 11777 * @returns {Array} Returns the new array of placeholder indexes. 11778 */ 11779 function replaceHolders(array, placeholder) { 11780 var index = -1, 11781 length = array.length, 11782 resIndex = 0, 11783 result = []; 11784 11785 while (++index < length) { 11786 var value = array[index]; 11787 if (value === placeholder || value === PLACEHOLDER) { 11788 array[index] = PLACEHOLDER; 11789 result[resIndex++] = index; 11790 } 11791 } 11792 return result; 11793 } 11794 11795 /** 11796 * Converts `set` to an array of its values. 11797 * 11798 * @private 11799 * @param {Object} set The set to convert. 11800 * @returns {Array} Returns the values. 11801 */ 11802 function setToArray(set) { 11803 var index = -1, 11804 result = Array(set.size); 11805 11806 set.forEach(function(value) { 11807 result[++index] = value; 11808 }); 11809 return result; 11810 } 11811 11812 /** 11813 * Converts `set` to its value-value pairs. 11814 * 11815 * @private 11816 * @param {Object} set The set to convert. 11817 * @returns {Array} Returns the value-value pairs. 11818 */ 11819 function setToPairs(set) { 11820 var index = -1, 11821 result = Array(set.size); 11822 11823 set.forEach(function(value) { 11824 result[++index] = [value, value]; 11825 }); 11826 return result; 11827 } 11828 11829 /** 11830 * A specialized version of `_.indexOf` which performs strict equality 11831 * comparisons of values, i.e. `===`. 11832 * 11833 * @private 11834 * @param {Array} array The array to inspect. 11835 * @param {*} value The value to search for. 11836 * @param {number} fromIndex The index to search from. 11837 * @returns {number} Returns the index of the matched value, else `-1`. 11838 */ 11839 function strictIndexOf(array, value, fromIndex) { 11840 var index = fromIndex - 1, 11841 length = array.length; 11842 11843 while (++index < length) { 11844 if (array[index] === value) { 11845 return index; 11846 } 11847 } 11848 return -1; 11849 } 11850 11851 /** 11852 * A specialized version of `_.lastIndexOf` which performs strict equality 11853 * comparisons of values, i.e. `===`. 11854 * 11855 * @private 11856 * @param {Array} array The array to inspect. 11857 * @param {*} value The value to search for. 11858 * @param {number} fromIndex The index to search from. 11859 * @returns {number} Returns the index of the matched value, else `-1`. 11860 */ 11861 function strictLastIndexOf(array, value, fromIndex) { 11862 var index = fromIndex + 1; 11863 while (index--) { 11864 if (array[index] === value) { 11865 return index; 11866 } 11867 } 11868 return index; 11869 } 11870 11871 /** 11872 * Gets the number of symbols in `string`. 11873 * 11874 * @private 11875 * @param {string} string The string to inspect. 11876 * @returns {number} Returns the string size. 11877 */ 11878 function stringSize(string) { 11879 return hasUnicode(string) 11880 ? unicodeSize(string) 11881 : asciiSize(string); 11882 } 11883 11884 /** 11885 * Converts `string` to an array. 11886 * 11887 * @private 11888 * @param {string} string The string to convert. 11889 * @returns {Array} Returns the converted array. 11890 */ 11891 function stringToArray(string) { 11892 return hasUnicode(string) 11893 ? unicodeToArray(string) 11894 : asciiToArray(string); 11895 } 11896 11897 /** 11898 * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace 11899 * character of `string`. 11900 * 11901 * @private 11902 * @param {string} string The string to inspect. 11903 * @returns {number} Returns the index of the last non-whitespace character. 11904 */ 11905 function trimmedEndIndex(string) { 11906 var index = string.length; 11907 11908 while (index-- && reWhitespace.test(string.charAt(index))) {} 11909 return index; 11910 } 11911 11912 /** 11913 * Used by `_.unescape` to convert HTML entities to characters. 11914 * 11915 * @private 11916 * @param {string} chr The matched character to unescape. 11917 * @returns {string} Returns the unescaped character. 11918 */ 11919 var unescapeHtmlChar = basePropertyOf(htmlUnescapes); 11920 11921 /** 11922 * Gets the size of a Unicode `string`. 11923 * 11924 * @private 11925 * @param {string} string The string inspect. 11926 * @returns {number} Returns the string size. 11927 */ 11928 function unicodeSize(string) { 11929 var result = reUnicode.lastIndex = 0; 11930 while (reUnicode.test(string)) { 11931 ++result; 11932 } 11933 return result; 11934 } 11935 11936 /** 11937 * Converts a Unicode `string` to an array. 11938 * 11939 * @private 11940 * @param {string} string The string to convert. 11941 * @returns {Array} Returns the converted array. 11942 */ 11943 function unicodeToArray(string) { 11944 return string.match(reUnicode) || []; 11945 } 11946 11947 /** 11948 * Splits a Unicode `string` into an array of its words. 11949 * 11950 * @private 11951 * @param {string} The string to inspect. 11952 * @returns {Array} Returns the words of `string`. 11953 */ 11954 function unicodeWords(string) { 11955 return string.match(reUnicodeWord) || []; 11956 } 11957 11958 /*--------------------------------------------------------------------------*/ 11959 11960 /** 11961 * Create a new pristine `lodash` function using the `context` object. 11962 * 11963 * @static 11964 * @memberOf _ 11965 * @since 1.1.0 11966 * @category Util 11967 * @param {Object} [context=root] The context object. 11968 * @returns {Function} Returns a new `lodash` function. 11969 * @example 11970 * 11971 * _.mixin({ 'foo': _.constant('foo') }); 11972 * 11973 * var lodash = _.runInContext(); 11974 * lodash.mixin({ 'bar': lodash.constant('bar') }); 11975 * 11976 * _.isFunction(_.foo); 11977 * // => true 11978 * _.isFunction(_.bar); 11979 * // => false 11980 * 11981 * lodash.isFunction(lodash.foo); 11982 * // => false 11983 * lodash.isFunction(lodash.bar); 11984 * // => true 11985 * 11986 * // Create a suped-up `defer` in Node.js. 11987 * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer; 11988 */ 11989 var runInContext = (function runInContext(context) { 11990 context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps)); 11991 11992 /** Built-in constructor references. */ 11993 var Array = context.Array, 11994 Date = context.Date, 11995 Error = context.Error, 11996 Function = context.Function, 11997 Math = context.Math, 11998 Object = context.Object, 11999 RegExp = context.RegExp, 12000 String = context.String, 12001 TypeError = context.TypeError; 12002 12003 /** Used for built-in method references. */ 12004 var arrayProto = Array.prototype, 12005 funcProto = Function.prototype, 12006 objectProto = Object.prototype; 12007 12008 /** Used to detect overreaching core-js shims. */ 12009 var coreJsData = context['__core-js_shared__']; 12010 12011 /** Used to resolve the decompiled source of functions. */ 12012 var funcToString = funcProto.toString; 12013 12014 /** Used to check objects for own properties. */ 12015 var hasOwnProperty = objectProto.hasOwnProperty; 12016 12017 /** Used to generate unique IDs. */ 12018 var idCounter = 0; 12019 12020 /** Used to detect methods masquerading as native. */ 12021 var maskSrcKey = (function() { 12022 var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); 12023 return uid ? ('Symbol(src)_1.' + uid) : ''; 12024 }()); 12025 12026 /** 12027 * Used to resolve the 12028 * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) 12029 * of values. 12030 */ 12031 var nativeObjectToString = objectProto.toString; 12032 12033 /** Used to infer the `Object` constructor. */ 12034 var objectCtorString = funcToString.call(Object); 12035 12036 /** Used to restore the original `_` reference in `_.noConflict`. */ 12037 var oldDash = root._; 12038 12039 /** Used to detect if a method is native. */ 12040 var reIsNative = RegExp('^' + 12041 funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') 12042 .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' 12043 ); 12044 12045 /** Built-in value references. */ 12046 var Buffer = moduleExports ? context.Buffer : undefined, 12047 Symbol = context.Symbol, 12048 Uint8Array = context.Uint8Array, 12049 allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined, 12050 getPrototype = overArg(Object.getPrototypeOf, Object), 12051 objectCreate = Object.create, 12052 propertyIsEnumerable = objectProto.propertyIsEnumerable, 12053 splice = arrayProto.splice, 12054 spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined, 12055 symIterator = Symbol ? Symbol.iterator : undefined, 12056 symToStringTag = Symbol ? Symbol.toStringTag : undefined; 12057 12058 var defineProperty = (function() { 12059 try { 12060 var func = getNative(Object, 'defineProperty'); 12061 func({}, '', {}); 12062 return func; 12063 } catch (e) {} 12064 }()); 12065 12066 /** Mocked built-ins. */ 12067 var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout, 12068 ctxNow = Date && Date.now !== root.Date.now && Date.now, 12069 ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout; 12070 12071 /* Built-in method references for those with the same name as other `lodash` methods. */ 12072 var nativeCeil = Math.ceil, 12073 nativeFloor = Math.floor, 12074 nativeGetSymbols = Object.getOwnPropertySymbols, 12075 nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined, 12076 nativeIsFinite = context.isFinite, 12077 nativeJoin = arrayProto.join, 12078 nativeKeys = overArg(Object.keys, Object), 12079 nativeMax = Math.max, 12080 nativeMin = Math.min, 12081 nativeNow = Date.now, 12082 nativeParseInt = context.parseInt, 12083 nativeRandom = Math.random, 12084 nativeReverse = arrayProto.reverse; 12085 12086 /* Built-in method references that are verified to be native. */ 12087 var DataView = getNative(context, 'DataView'), 12088 Map = getNative(context, 'Map'), 12089 Promise = getNative(context, 'Promise'), 12090 Set = getNative(context, 'Set'), 12091 WeakMap = getNative(context, 'WeakMap'), 12092 nativeCreate = getNative(Object, 'create'); 12093 12094 /** Used to store function metadata. */ 12095 var metaMap = WeakMap && new WeakMap; 12096 12097 /** Used to lookup unminified function names. */ 12098 var realNames = {}; 12099 12100 /** Used to detect maps, sets, and weakmaps. */ 12101 var dataViewCtorString = toSource(DataView), 12102 mapCtorString = toSource(Map), 12103 promiseCtorString = toSource(Promise), 12104 setCtorString = toSource(Set), 12105 weakMapCtorString = toSource(WeakMap); 12106 12107 /** Used to convert symbols to primitives and strings. */ 12108 var symbolProto = Symbol ? Symbol.prototype : undefined, 12109 symbolValueOf = symbolProto ? symbolProto.valueOf : undefined, 12110 symbolToString = symbolProto ? symbolProto.toString : undefined; 12111 12112 /*------------------------------------------------------------------------*/ 12113 12114 /** 12115 * Creates a `lodash` object which wraps `value` to enable implicit method 12116 * chain sequences. Methods that operate on and return arrays, collections, 12117 * and functions can be chained together. Methods that retrieve a single value 12118 * or may return a primitive value will automatically end the chain sequence 12119 * and return the unwrapped value. Otherwise, the value must be unwrapped 12120 * with `_#value`. 12121 * 12122 * Explicit chain sequences, which must be unwrapped with `_#value`, may be 12123 * enabled using `_.chain`. 12124 * 12125 * The execution of chained methods is lazy, that is, it's deferred until 12126 * `_#value` is implicitly or explicitly called. 12127 * 12128 * Lazy evaluation allows several methods to support shortcut fusion. 12129 * Shortcut fusion is an optimization to merge iteratee calls; this avoids 12130 * the creation of intermediate arrays and can greatly reduce the number of 12131 * iteratee executions. Sections of a chain sequence qualify for shortcut 12132 * fusion if the section is applied to an array and iteratees accept only 12133 * one argument. The heuristic for whether a section qualifies for shortcut 12134 * fusion is subject to change. 12135 * 12136 * Chaining is supported in custom builds as long as the `_#value` method is 12137 * directly or indirectly included in the build. 12138 * 12139 * In addition to lodash methods, wrappers have `Array` and `String` methods. 12140 * 12141 * The wrapper `Array` methods are: 12142 * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` 12143 * 12144 * The wrapper `String` methods are: 12145 * `replace` and `split` 12146 * 12147 * The wrapper methods that support shortcut fusion are: 12148 * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, 12149 * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, 12150 * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` 12151 * 12152 * The chainable wrapper methods are: 12153 * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, 12154 * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, 12155 * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, 12156 * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, 12157 * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, 12158 * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, 12159 * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, 12160 * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, 12161 * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, 12162 * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, 12163 * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, 12164 * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, 12165 * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, 12166 * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, 12167 * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, 12168 * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, 12169 * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, 12170 * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, 12171 * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, 12172 * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, 12173 * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, 12174 * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, 12175 * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, 12176 * `zipObject`, `zipObjectDeep`, and `zipWith` 12177 * 12178 * The wrapper methods that are **not** chainable by default are: 12179 * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, 12180 * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, 12181 * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, 12182 * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, 12183 * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, 12184 * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, 12185 * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, 12186 * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, 12187 * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, 12188 * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, 12189 * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, 12190 * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, 12191 * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, 12192 * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, 12193 * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, 12194 * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, 12195 * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, 12196 * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, 12197 * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, 12198 * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, 12199 * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, 12200 * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, 12201 * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, 12202 * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, 12203 * `upperFirst`, `value`, and `words` 12204 * 12205 * @name _ 12206 * @constructor 12207 * @category Seq 12208 * @param {*} value The value to wrap in a `lodash` instance. 12209 * @returns {Object} Returns the new `lodash` wrapper instance. 12210 * @example 12211 * 12212 * function square(n) { 12213 * return n * n; 12214 * } 12215 * 12216 * var wrapped = _([1, 2, 3]); 12217 * 12218 * // Returns an unwrapped value. 12219 * wrapped.reduce(_.add); 12220 * // => 6 12221 * 12222 * // Returns a wrapped value. 12223 * var squares = wrapped.map(square); 12224 * 12225 * _.isArray(squares); 12226 * // => false 12227 * 12228 * _.isArray(squares.value()); 12229 * // => true 12230 */ 12231 function lodash(value) { 12232 if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { 12233 if (value instanceof LodashWrapper) { 12234 return value; 12235 } 12236 if (hasOwnProperty.call(value, '__wrapped__')) { 12237 return wrapperClone(value); 12238 } 12239 } 12240 return new LodashWrapper(value); 12241 } 12242 12243 /** 12244 * The base implementation of `_.create` without support for assigning 12245 * properties to the created object. 12246 * 12247 * @private 12248 * @param {Object} proto The object to inherit from. 12249 * @returns {Object} Returns the new object. 12250 */ 12251 var baseCreate = (function() { 12252 function object() {} 12253 return function(proto) { 12254 if (!isObject(proto)) { 12255 return {}; 12256 } 12257 if (objectCreate) { 12258 return objectCreate(proto); 12259 } 12260 object.prototype = proto; 12261 var result = new object; 12262 object.prototype = undefined; 12263 return result; 12264 }; 12265 }()); 12266 12267 /** 12268 * The function whose prototype chain sequence wrappers inherit from. 12269 * 12270 * @private 12271 */ 12272 function baseLodash() { 12273 // No operation performed. 12274 } 12275 12276 /** 12277 * The base constructor for creating `lodash` wrapper objects. 12278 * 12279 * @private 12280 * @param {*} value The value to wrap. 12281 * @param {boolean} [chainAll] Enable explicit method chain sequences. 12282 */ 12283 function LodashWrapper(value, chainAll) { 12284 this.__wrapped__ = value; 12285 this.__actions__ = []; 12286 this.__chain__ = !!chainAll; 12287 this.__index__ = 0; 12288 this.__values__ = undefined; 12289 } 12290 12291 /** 12292 * By default, the template delimiters used by lodash are like those in 12293 * embedded Ruby (ERB) as well as ES2015 template strings. Change the 12294 * following template settings to use alternative delimiters. 12295 * 12296 * @static 12297 * @memberOf _ 12298 * @type {Object} 12299 */ 12300 lodash.templateSettings = { 12301 12302 /** 12303 * Used to detect `data` property values to be HTML-escaped. 12304 * 12305 * @memberOf _.templateSettings 12306 * @type {RegExp} 12307 */ 12308 'escape': reEscape, 12309 12310 /** 12311 * Used to detect code to be evaluated. 12312 * 12313 * @memberOf _.templateSettings 12314 * @type {RegExp} 12315 */ 12316 'evaluate': reEvaluate, 12317 12318 /** 12319 * Used to detect `data` property values to inject. 12320 * 12321 * @memberOf _.templateSettings 12322 * @type {RegExp} 12323 */ 12324 'interpolate': reInterpolate, 12325 12326 /** 12327 * Used to reference the data object in the template text. 12328 * 12329 * @memberOf _.templateSettings 12330 * @type {string} 12331 */ 12332 'variable': '', 12333 12334 /** 12335 * Used to import variables into the compiled template. 12336 * 12337 * @memberOf _.templateSettings 12338 * @type {Object} 12339 */ 12340 'imports': { 12341 12342 /** 12343 * A reference to the `lodash` function. 12344 * 12345 * @memberOf _.templateSettings.imports 12346 * @type {Function} 12347 */ 12348 '_': lodash 12349 } 12350 }; 12351 12352 // Ensure wrappers are instances of `baseLodash`. 12353 lodash.prototype = baseLodash.prototype; 12354 lodash.prototype.constructor = lodash; 12355 12356 LodashWrapper.prototype = baseCreate(baseLodash.prototype); 12357 LodashWrapper.prototype.constructor = LodashWrapper; 12358 12359 /*------------------------------------------------------------------------*/ 12360 12361 /** 12362 * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. 12363 * 12364 * @private 12365 * @constructor 12366 * @param {*} value The value to wrap. 12367 */ 12368 function LazyWrapper(value) { 12369 this.__wrapped__ = value; 12370 this.__actions__ = []; 12371 this.__dir__ = 1; 12372 this.__filtered__ = false; 12373 this.__iteratees__ = []; 12374 this.__takeCount__ = MAX_ARRAY_LENGTH; 12375 this.__views__ = []; 12376 } 12377 12378 /** 12379 * Creates a clone of the lazy wrapper object. 12380 * 12381 * @private 12382 * @name clone 12383 * @memberOf LazyWrapper 12384 * @returns {Object} Returns the cloned `LazyWrapper` object. 12385 */ 12386 function lazyClone() { 12387 var result = new LazyWrapper(this.__wrapped__); 12388 result.__actions__ = copyArray(this.__actions__); 12389 result.__dir__ = this.__dir__; 12390 result.__filtered__ = this.__filtered__; 12391 result.__iteratees__ = copyArray(this.__iteratees__); 12392 result.__takeCount__ = this.__takeCount__; 12393 result.__views__ = copyArray(this.__views__); 12394 return result; 12395 } 12396 12397 /** 12398 * Reverses the direction of lazy iteration. 12399 * 12400 * @private 12401 * @name reverse 12402 * @memberOf LazyWrapper 12403 * @returns {Object} Returns the new reversed `LazyWrapper` object. 12404 */ 12405 function lazyReverse() { 12406 if (this.__filtered__) { 12407 var result = new LazyWrapper(this); 12408 result.__dir__ = -1; 12409 result.__filtered__ = true; 12410 } else { 12411 result = this.clone(); 12412 result.__dir__ *= -1; 12413 } 12414 return result; 12415 } 12416 12417 /** 12418 * Extracts the unwrapped value from its lazy wrapper. 12419 * 12420 * @private 12421 * @name value 12422 * @memberOf LazyWrapper 12423 * @returns {*} Returns the unwrapped value. 12424 */ 12425 function lazyValue() { 12426 var array = this.__wrapped__.value(), 12427 dir = this.__dir__, 12428 isArr = isArray(array), 12429 isRight = dir < 0, 12430 arrLength = isArr ? array.length : 0, 12431 view = getView(0, arrLength, this.__views__), 12432 start = view.start, 12433 end = view.end, 12434 length = end - start, 12435 index = isRight ? end : (start - 1), 12436 iteratees = this.__iteratees__, 12437 iterLength = iteratees.length, 12438 resIndex = 0, 12439 takeCount = nativeMin(length, this.__takeCount__); 12440 12441 if (!isArr || (!isRight && arrLength == length && takeCount == length)) { 12442 return baseWrapperValue(array, this.__actions__); 12443 } 12444 var result = []; 12445 12446 outer: 12447 while (length-- && resIndex < takeCount) { 12448 index += dir; 12449 12450 var iterIndex = -1, 12451 value = array[index]; 12452 12453 while (++iterIndex < iterLength) { 12454 var data = iteratees[iterIndex], 12455 iteratee = data.iteratee, 12456 type = data.type, 12457 computed = iteratee(value); 12458 12459 if (type == LAZY_MAP_FLAG) { 12460 value = computed; 12461 } else if (!computed) { 12462 if (type == LAZY_FILTER_FLAG) { 12463 continue outer; 12464 } else { 12465 break outer; 12466 } 12467 } 12468 } 12469 result[resIndex++] = value; 12470 } 12471 return result; 12472 } 12473 12474 // Ensure `LazyWrapper` is an instance of `baseLodash`. 12475 LazyWrapper.prototype = baseCreate(baseLodash.prototype); 12476 LazyWrapper.prototype.constructor = LazyWrapper; 12477 12478 /*------------------------------------------------------------------------*/ 12479 12480 /** 12481 * Creates a hash object. 12482 * 12483 * @private 12484 * @constructor 12485 * @param {Array} [entries] The key-value pairs to cache. 12486 */ 12487 function Hash(entries) { 12488 var index = -1, 12489 length = entries == null ? 0 : entries.length; 12490 12491 this.clear(); 12492 while (++index < length) { 12493 var entry = entries[index]; 12494 this.set(entry[0], entry[1]); 12495 } 12496 } 12497 12498 /** 12499 * Removes all key-value entries from the hash. 12500 * 12501 * @private 12502 * @name clear 12503 * @memberOf Hash 12504 */ 12505 function hashClear() { 12506 this.__data__ = nativeCreate ? nativeCreate(null) : {}; 12507 this.size = 0; 12508 } 12509 12510 /** 12511 * Removes `key` and its value from the hash. 12512 * 12513 * @private 12514 * @name delete 12515 * @memberOf Hash 12516 * @param {Object} hash The hash to modify. 12517 * @param {string} key The key of the value to remove. 12518 * @returns {boolean} Returns `true` if the entry was removed, else `false`. 12519 */ 12520 function hashDelete(key) { 12521 var result = this.has(key) && delete this.__data__[key]; 12522 this.size -= result ? 1 : 0; 12523 return result; 12524 } 12525 12526 /** 12527 * Gets the hash value for `key`. 12528 * 12529 * @private 12530 * @name get 12531 * @memberOf Hash 12532 * @param {string} key The key of the value to get. 12533 * @returns {*} Returns the entry value. 12534 */ 12535 function hashGet(key) { 12536 var data = this.__data__; 12537 if (nativeCreate) { 12538 var result = data[key]; 12539 return result === HASH_UNDEFINED ? undefined : result; 12540 } 12541 return hasOwnProperty.call(data, key) ? data[key] : undefined; 12542 } 12543 12544 /** 12545 * Checks if a hash value for `key` exists. 12546 * 12547 * @private 12548 * @name has 12549 * @memberOf Hash 12550 * @param {string} key The key of the entry to check. 12551 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. 12552 */ 12553 function hashHas(key) { 12554 var data = this.__data__; 12555 return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); 12556 } 12557 12558 /** 12559 * Sets the hash `key` to `value`. 12560 * 12561 * @private 12562 * @name set 12563 * @memberOf Hash 12564 * @param {string} key The key of the value to set. 12565 * @param {*} value The value to set. 12566 * @returns {Object} Returns the hash instance. 12567 */ 12568 function hashSet(key, value) { 12569 var data = this.__data__; 12570 this.size += this.has(key) ? 0 : 1; 12571 data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; 12572 return this; 12573 } 12574 12575 // Add methods to `Hash`. 12576 Hash.prototype.clear = hashClear; 12577 Hash.prototype['delete'] = hashDelete; 12578 Hash.prototype.get = hashGet; 12579 Hash.prototype.has = hashHas; 12580 Hash.prototype.set = hashSet; 12581 12582 /*------------------------------------------------------------------------*/ 12583 12584 /** 12585 * Creates an list cache object. 12586 * 12587 * @private 12588 * @constructor 12589 * @param {Array} [entries] The key-value pairs to cache. 12590 */ 12591 function ListCache(entries) { 12592 var index = -1, 12593 length = entries == null ? 0 : entries.length; 12594 12595 this.clear(); 12596 while (++index < length) { 12597 var entry = entries[index]; 12598 this.set(entry[0], entry[1]); 12599 } 12600 } 12601 12602 /** 12603 * Removes all key-value entries from the list cache. 12604 * 12605 * @private 12606 * @name clear 12607 * @memberOf ListCache 12608 */ 12609 function listCacheClear() { 12610 this.__data__ = []; 12611 this.size = 0; 12612 } 12613 12614 /** 12615 * Removes `key` and its value from the list cache. 12616 * 12617 * @private 12618 * @name delete 12619 * @memberOf ListCache 12620 * @param {string} key The key of the value to remove. 12621 * @returns {boolean} Returns `true` if the entry was removed, else `false`. 12622 */ 12623 function listCacheDelete(key) { 12624 var data = this.__data__, 12625 index = assocIndexOf(data, key); 12626 12627 if (index < 0) { 12628 return false; 12629 } 12630 var lastIndex = data.length - 1; 12631 if (index == lastIndex) { 12632 data.pop(); 12633 } else { 12634 splice.call(data, index, 1); 12635 } 12636 --this.size; 12637 return true; 12638 } 12639 12640 /** 12641 * Gets the list cache value for `key`. 12642 * 12643 * @private 12644 * @name get 12645 * @memberOf ListCache 12646 * @param {string} key The key of the value to get. 12647 * @returns {*} Returns the entry value. 12648 */ 12649 function listCacheGet(key) { 12650 var data = this.__data__, 12651 index = assocIndexOf(data, key); 12652 12653 return index < 0 ? undefined : data[index][1]; 12654 } 12655 12656 /** 12657 * Checks if a list cache value for `key` exists. 12658 * 12659 * @private 12660 * @name has 12661 * @memberOf ListCache 12662 * @param {string} key The key of the entry to check. 12663 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. 12664 */ 12665 function listCacheHas(key) { 12666 return assocIndexOf(this.__data__, key) > -1; 12667 } 12668 12669 /** 12670 * Sets the list cache `key` to `value`. 12671 * 12672 * @private 12673 * @name set 12674 * @memberOf ListCache 12675 * @param {string} key The key of the value to set. 12676 * @param {*} value The value to set. 12677 * @returns {Object} Returns the list cache instance. 12678 */ 12679 function listCacheSet(key, value) { 12680 var data = this.__data__, 12681 index = assocIndexOf(data, key); 12682 12683 if (index < 0) { 12684 ++this.size; 12685 data.push([key, value]); 12686 } else { 12687 data[index][1] = value; 12688 } 12689 return this; 12690 } 12691 12692 // Add methods to `ListCache`. 12693 ListCache.prototype.clear = listCacheClear; 12694 ListCache.prototype['delete'] = listCacheDelete; 12695 ListCache.prototype.get = listCacheGet; 12696 ListCache.prototype.has = listCacheHas; 12697 ListCache.prototype.set = listCacheSet; 12698 12699 /*------------------------------------------------------------------------*/ 12700 12701 /** 12702 * Creates a map cache object to store key-value pairs. 12703 * 12704 * @private 12705 * @constructor 12706 * @param {Array} [entries] The key-value pairs to cache. 12707 */ 12708 function MapCache(entries) { 12709 var index = -1, 12710 length = entries == null ? 0 : entries.length; 12711 12712 this.clear(); 12713 while (++index < length) { 12714 var entry = entries[index]; 12715 this.set(entry[0], entry[1]); 12716 } 12717 } 12718 12719 /** 12720 * Removes all key-value entries from the map. 12721 * 12722 * @private 12723 * @name clear 12724 * @memberOf MapCache 12725 */ 12726 function mapCacheClear() { 12727 this.size = 0; 12728 this.__data__ = { 12729 'hash': new Hash, 12730 'map': new (Map || ListCache), 12731 'string': new Hash 12732 }; 12733 } 12734 12735 /** 12736 * Removes `key` and its value from the map. 12737 * 12738 * @private 12739 * @name delete 12740 * @memberOf MapCache 12741 * @param {string} key The key of the value to remove. 12742 * @returns {boolean} Returns `true` if the entry was removed, else `false`. 12743 */ 12744 function mapCacheDelete(key) { 12745 var result = getMapData(this, key)['delete'](key); 12746 this.size -= result ? 1 : 0; 12747 return result; 12748 } 12749 12750 /** 12751 * Gets the map value for `key`. 12752 * 12753 * @private 12754 * @name get 12755 * @memberOf MapCache 12756 * @param {string} key The key of the value to get. 12757 * @returns {*} Returns the entry value. 12758 */ 12759 function mapCacheGet(key) { 12760 return getMapData(this, key).get(key); 12761 } 12762 12763 /** 12764 * Checks if a map value for `key` exists. 12765 * 12766 * @private 12767 * @name has 12768 * @memberOf MapCache 12769 * @param {string} key The key of the entry to check. 12770 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. 12771 */ 12772 function mapCacheHas(key) { 12773 return getMapData(this, key).has(key); 12774 } 12775 12776 /** 12777 * Sets the map `key` to `value`. 12778 * 12779 * @private 12780 * @name set 12781 * @memberOf MapCache 12782 * @param {string} key The key of the value to set. 12783 * @param {*} value The value to set. 12784 * @returns {Object} Returns the map cache instance. 12785 */ 12786 function mapCacheSet(key, value) { 12787 var data = getMapData(this, key), 12788 size = data.size; 12789 12790 data.set(key, value); 12791 this.size += data.size == size ? 0 : 1; 12792 return this; 12793 } 12794 12795 // Add methods to `MapCache`. 12796 MapCache.prototype.clear = mapCacheClear; 12797 MapCache.prototype['delete'] = mapCacheDelete; 12798 MapCache.prototype.get = mapCacheGet; 12799 MapCache.prototype.has = mapCacheHas; 12800 MapCache.prototype.set = mapCacheSet; 12801 12802 /*------------------------------------------------------------------------*/ 12803 12804 /** 12805 * 12806 * Creates an array cache object to store unique values. 12807 * 12808 * @private 12809 * @constructor 12810 * @param {Array} [values] The values to cache. 12811 */ 12812 function SetCache(values) { 12813 var index = -1, 12814 length = values == null ? 0 : values.length; 12815 12816 this.__data__ = new MapCache; 12817 while (++index < length) { 12818 this.add(values[index]); 12819 } 12820 } 12821 12822 /** 12823 * Adds `value` to the array cache. 12824 * 12825 * @private 12826 * @name add 12827 * @memberOf SetCache 12828 * @alias push 12829 * @param {*} value The value to cache. 12830 * @returns {Object} Returns the cache instance. 12831 */ 12832 function setCacheAdd(value) { 12833 this.__data__.set(value, HASH_UNDEFINED); 12834 return this; 12835 } 12836 12837 /** 12838 * Checks if `value` is in the array cache. 12839 * 12840 * @private 12841 * @name has 12842 * @memberOf SetCache 12843 * @param {*} value The value to search for. 12844 * @returns {number} Returns `true` if `value` is found, else `false`. 12845 */ 12846 function setCacheHas(value) { 12847 return this.__data__.has(value); 12848 } 12849 12850 // Add methods to `SetCache`. 12851 SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; 12852 SetCache.prototype.has = setCacheHas; 12853 12854 /*------------------------------------------------------------------------*/ 12855 12856 /** 12857 * Creates a stack cache object to store key-value pairs. 12858 * 12859 * @private 12860 * @constructor 12861 * @param {Array} [entries] The key-value pairs to cache. 12862 */ 12863 function Stack(entries) { 12864 var data = this.__data__ = new ListCache(entries); 12865 this.size = data.size; 12866 } 12867 12868 /** 12869 * Removes all key-value entries from the stack. 12870 * 12871 * @private 12872 * @name clear 12873 * @memberOf Stack 12874 */ 12875 function stackClear() { 12876 this.__data__ = new ListCache; 12877 this.size = 0; 12878 } 12879 12880 /** 12881 * Removes `key` and its value from the stack. 12882 * 12883 * @private 12884 * @name delete 12885 * @memberOf Stack 12886 * @param {string} key The key of the value to remove. 12887 * @returns {boolean} Returns `true` if the entry was removed, else `false`. 12888 */ 12889 function stackDelete(key) { 12890 var data = this.__data__, 12891 result = data['delete'](key); 12892 12893 this.size = data.size; 12894 return result; 12895 } 12896 12897 /** 12898 * Gets the stack value for `key`. 12899 * 12900 * @private 12901 * @name get 12902 * @memberOf Stack 12903 * @param {string} key The key of the value to get. 12904 * @returns {*} Returns the entry value. 12905 */ 12906 function stackGet(key) { 12907 return this.__data__.get(key); 12908 } 12909 12910 /** 12911 * Checks if a stack value for `key` exists. 12912 * 12913 * @private 12914 * @name has 12915 * @memberOf Stack 12916 * @param {string} key The key of the entry to check. 12917 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. 12918 */ 12919 function stackHas(key) { 12920 return this.__data__.has(key); 12921 } 12922 12923 /** 12924 * Sets the stack `key` to `value`. 12925 * 12926 * @private 12927 * @name set 12928 * @memberOf Stack 12929 * @param {string} key The key of the value to set. 12930 * @param {*} value The value to set. 12931 * @returns {Object} Returns the stack cache instance. 12932 */ 12933 function stackSet(key, value) { 12934 var data = this.__data__; 12935 if (data instanceof ListCache) { 12936 var pairs = data.__data__; 12937 if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { 12938 pairs.push([key, value]); 12939 this.size = ++data.size; 12940 return this; 12941 } 12942 data = this.__data__ = new MapCache(pairs); 12943 } 12944 data.set(key, value); 12945 this.size = data.size; 12946 return this; 12947 } 12948 12949 // Add methods to `Stack`. 12950 Stack.prototype.clear = stackClear; 12951 Stack.prototype['delete'] = stackDelete; 12952 Stack.prototype.get = stackGet; 12953 Stack.prototype.has = stackHas; 12954 Stack.prototype.set = stackSet; 12955 12956 /*------------------------------------------------------------------------*/ 12957 12958 /** 12959 * Creates an array of the enumerable property names of the array-like `value`. 12960 * 12961 * @private 12962 * @param {*} value The value to query. 12963 * @param {boolean} inherited Specify returning inherited property names. 12964 * @returns {Array} Returns the array of property names. 12965 */ 12966 function arrayLikeKeys(value, inherited) { 12967 var isArr = isArray(value), 12968 isArg = !isArr && isArguments(value), 12969 isBuff = !isArr && !isArg && isBuffer(value), 12970 isType = !isArr && !isArg && !isBuff && isTypedArray(value), 12971 skipIndexes = isArr || isArg || isBuff || isType, 12972 result = skipIndexes ? baseTimes(value.length, String) : [], 12973 length = result.length; 12974 12975 for (var key in value) { 12976 if ((inherited || hasOwnProperty.call(value, key)) && 12977 !(skipIndexes && ( 12978 // Safari 9 has enumerable `arguments.length` in strict mode. 12979 key == 'length' || 12980 // Node.js 0.10 has enumerable non-index properties on buffers. 12981 (isBuff && (key == 'offset' || key == 'parent')) || 12982 // PhantomJS 2 has enumerable non-index properties on typed arrays. 12983 (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || 12984 // Skip index properties. 12985 isIndex(key, length) 12986 ))) { 12987 result.push(key); 12988 } 12989 } 12990 return result; 12991 } 12992 12993 /** 12994 * A specialized version of `_.sample` for arrays. 12995 * 12996 * @private 12997 * @param {Array} array The array to sample. 12998 * @returns {*} Returns the random element. 12999 */ 13000 function arraySample(array) { 13001 var length = array.length; 13002 return length ? array[baseRandom(0, length - 1)] : undefined; 13003 } 13004 13005 /** 13006 * A specialized version of `_.sampleSize` for arrays. 13007 * 13008 * @private 13009 * @param {Array} array The array to sample. 13010 * @param {number} n The number of elements to sample. 13011 * @returns {Array} Returns the random elements. 13012 */ 13013 function arraySampleSize(array, n) { 13014 return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length)); 13015 } 13016 13017 /** 13018 * A specialized version of `_.shuffle` for arrays. 13019 * 13020 * @private 13021 * @param {Array} array The array to shuffle. 13022 * @returns {Array} Returns the new shuffled array. 13023 */ 13024 function arrayShuffle(array) { 13025 return shuffleSelf(copyArray(array)); 13026 } 13027 13028 /** 13029 * This function is like `assignValue` except that it doesn't assign 13030 * `undefined` values. 13031 * 13032 * @private 13033 * @param {Object} object The object to modify. 13034 * @param {string} key The key of the property to assign. 13035 * @param {*} value The value to assign. 13036 */ 13037 function assignMergeValue(object, key, value) { 13038 if ((value !== undefined && !eq(object[key], value)) || 13039 (value === undefined && !(key in object))) { 13040 baseAssignValue(object, key, value); 13041 } 13042 } 13043 13044 /** 13045 * Assigns `value` to `key` of `object` if the existing value is not equivalent 13046 * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) 13047 * for equality comparisons. 13048 * 13049 * @private 13050 * @param {Object} object The object to modify. 13051 * @param {string} key The key of the property to assign. 13052 * @param {*} value The value to assign. 13053 */ 13054 function assignValue(object, key, value) { 13055 var objValue = object[key]; 13056 if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || 13057 (value === undefined && !(key in object))) { 13058 baseAssignValue(object, key, value); 13059 } 13060 } 13061 13062 /** 13063 * Gets the index at which the `key` is found in `array` of key-value pairs. 13064 * 13065 * @private 13066 * @param {Array} array The array to inspect. 13067 * @param {*} key The key to search for. 13068 * @returns {number} Returns the index of the matched value, else `-1`. 13069 */ 13070 function assocIndexOf(array, key) { 13071 var length = array.length; 13072 while (length--) { 13073 if (eq(array[length][0], key)) { 13074 return length; 13075 } 13076 } 13077 return -1; 13078 } 13079 13080 /** 13081 * Aggregates elements of `collection` on `accumulator` with keys transformed 13082 * by `iteratee` and values set by `setter`. 13083 * 13084 * @private 13085 * @param {Array|Object} collection The collection to iterate over. 13086 * @param {Function} setter The function to set `accumulator` values. 13087 * @param {Function} iteratee The iteratee to transform keys. 13088 * @param {Object} accumulator The initial aggregated object. 13089 * @returns {Function} Returns `accumulator`. 13090 */ 13091 function baseAggregator(collection, setter, iteratee, accumulator) { 13092 baseEach(collection, function(value, key, collection) { 13093 setter(accumulator, value, iteratee(value), collection); 13094 }); 13095 return accumulator; 13096 } 13097 13098 /** 13099 * The base implementation of `_.assign` without support for multiple sources 13100 * or `customizer` functions. 13101 * 13102 * @private 13103 * @param {Object} object The destination object. 13104 * @param {Object} source The source object. 13105 * @returns {Object} Returns `object`. 13106 */ 13107 function baseAssign(object, source) { 13108 return object && copyObject(source, keys(source), object); 13109 } 13110 13111 /** 13112 * The base implementation of `_.assignIn` without support for multiple sources 13113 * or `customizer` functions. 13114 * 13115 * @private 13116 * @param {Object} object The destination object. 13117 * @param {Object} source The source object. 13118 * @returns {Object} Returns `object`. 13119 */ 13120 function baseAssignIn(object, source) { 13121 return object && copyObject(source, keysIn(source), object); 13122 } 13123 13124 /** 13125 * The base implementation of `assignValue` and `assignMergeValue` without 13126 * value checks. 13127 * 13128 * @private 13129 * @param {Object} object The object to modify. 13130 * @param {string} key The key of the property to assign. 13131 * @param {*} value The value to assign. 13132 */ 13133 function baseAssignValue(object, key, value) { 13134 if (key == '__proto__' && defineProperty) { 13135 defineProperty(object, key, { 13136 'configurable': true, 13137 'enumerable': true, 13138 'value': value, 13139 'writable': true 13140 }); 13141 } else { 13142 object[key] = value; 13143 } 13144 } 13145 13146 /** 13147 * The base implementation of `_.at` without support for individual paths. 13148 * 13149 * @private 13150 * @param {Object} object The object to iterate over. 13151 * @param {string[]} paths The property paths to pick. 13152 * @returns {Array} Returns the picked elements. 13153 */ 13154 function baseAt(object, paths) { 13155 var index = -1, 13156 length = paths.length, 13157 result = Array(length), 13158 skip = object == null; 13159 13160 while (++index < length) { 13161 result[index] = skip ? undefined : get(object, paths[index]); 13162 } 13163 return result; 13164 } 13165 13166 /** 13167 * The base implementation of `_.clamp` which doesn't coerce arguments. 13168 * 13169 * @private 13170 * @param {number} number The number to clamp. 13171 * @param {number} [lower] The lower bound. 13172 * @param {number} upper The upper bound. 13173 * @returns {number} Returns the clamped number. 13174 */ 13175 function baseClamp(number, lower, upper) { 13176 if (number === number) { 13177 if (upper !== undefined) { 13178 number = number <= upper ? number : upper; 13179 } 13180 if (lower !== undefined) { 13181 number = number >= lower ? number : lower; 13182 } 13183 } 13184 return number; 13185 } 13186 13187 /** 13188 * The base implementation of `_.clone` and `_.cloneDeep` which tracks 13189 * traversed objects. 13190 * 13191 * @private 13192 * @param {*} value The value to clone. 13193 * @param {boolean} bitmask The bitmask flags. 13194 * 1 - Deep clone 13195 * 2 - Flatten inherited properties 13196 * 4 - Clone symbols 13197 * @param {Function} [customizer] The function to customize cloning. 13198 * @param {string} [key] The key of `value`. 13199 * @param {Object} [object] The parent object of `value`. 13200 * @param {Object} [stack] Tracks traversed objects and their clone counterparts. 13201 * @returns {*} Returns the cloned value. 13202 */ 13203 function baseClone(value, bitmask, customizer, key, object, stack) { 13204 var result, 13205 isDeep = bitmask & CLONE_DEEP_FLAG, 13206 isFlat = bitmask & CLONE_FLAT_FLAG, 13207 isFull = bitmask & CLONE_SYMBOLS_FLAG; 13208 13209 if (customizer) { 13210 result = object ? customizer(value, key, object, stack) : customizer(value); 13211 } 13212 if (result !== undefined) { 13213 return result; 13214 } 13215 if (!isObject(value)) { 13216 return value; 13217 } 13218 var isArr = isArray(value); 13219 if (isArr) { 13220 result = initCloneArray(value); 13221 if (!isDeep) { 13222 return copyArray(value, result); 13223 } 13224 } else { 13225 var tag = getTag(value), 13226 isFunc = tag == funcTag || tag == genTag; 13227 13228 if (isBuffer(value)) { 13229 return cloneBuffer(value, isDeep); 13230 } 13231 if (tag == objectTag || tag == argsTag || (isFunc && !object)) { 13232 result = (isFlat || isFunc) ? {} : initCloneObject(value); 13233 if (!isDeep) { 13234 return isFlat 13235 ? copySymbolsIn(value, baseAssignIn(result, value)) 13236 : copySymbols(value, baseAssign(result, value)); 13237 } 13238 } else { 13239 if (!cloneableTags[tag]) { 13240 return object ? value : {}; 13241 } 13242 result = initCloneByTag(value, tag, isDeep); 13243 } 13244 } 13245 // Check for circular references and return its corresponding clone. 13246 stack || (stack = new Stack); 13247 var stacked = stack.get(value); 13248 if (stacked) { 13249 return stacked; 13250 } 13251 stack.set(value, result); 13252 13253 if (isSet(value)) { 13254 value.forEach(function(subValue) { 13255 result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); 13256 }); 13257 } else if (isMap(value)) { 13258 value.forEach(function(subValue, key) { 13259 result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); 13260 }); 13261 } 13262 13263 var keysFunc = isFull 13264 ? (isFlat ? getAllKeysIn : getAllKeys) 13265 : (isFlat ? keysIn : keys); 13266 13267 var props = isArr ? undefined : keysFunc(value); 13268 arrayEach(props || value, function(subValue, key) { 13269 if (props) { 13270 key = subValue; 13271 subValue = value[key]; 13272 } 13273 // Recursively populate clone (susceptible to call stack limits). 13274 assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); 13275 }); 13276 return result; 13277 } 13278 13279 /** 13280 * The base implementation of `_.conforms` which doesn't clone `source`. 13281 * 13282 * @private 13283 * @param {Object} source The object of property predicates to conform to. 13284 * @returns {Function} Returns the new spec function. 13285 */ 13286 function baseConforms(source) { 13287 var props = keys(source); 13288 return function(object) { 13289 return baseConformsTo(object, source, props); 13290 }; 13291 } 13292 13293 /** 13294 * The base implementation of `_.conformsTo` which accepts `props` to check. 13295 * 13296 * @private 13297 * @param {Object} object The object to inspect. 13298 * @param {Object} source The object of property predicates to conform to. 13299 * @returns {boolean} Returns `true` if `object` conforms, else `false`. 13300 */ 13301 function baseConformsTo(object, source, props) { 13302 var length = props.length; 13303 if (object == null) { 13304 return !length; 13305 } 13306 object = Object(object); 13307 while (length--) { 13308 var key = props[length], 13309 predicate = source[key], 13310 value = object[key]; 13311 13312 if ((value === undefined && !(key in object)) || !predicate(value)) { 13313 return false; 13314 } 13315 } 13316 return true; 13317 } 13318 13319 /** 13320 * The base implementation of `_.delay` and `_.defer` which accepts `args` 13321 * to provide to `func`. 13322 * 13323 * @private 13324 * @param {Function} func The function to delay. 13325 * @param {number} wait The number of milliseconds to delay invocation. 13326 * @param {Array} args The arguments to provide to `func`. 13327 * @returns {number|Object} Returns the timer id or timeout object. 13328 */ 13329 function baseDelay(func, wait, args) { 13330 if (typeof func != 'function') { 13331 throw new TypeError(FUNC_ERROR_TEXT); 13332 } 13333 return setTimeout(function() { func.apply(undefined, args); }, wait); 13334 } 13335 13336 /** 13337 * The base implementation of methods like `_.difference` without support 13338 * for excluding multiple arrays or iteratee shorthands. 13339 * 13340 * @private 13341 * @param {Array} array The array to inspect. 13342 * @param {Array} values The values to exclude. 13343 * @param {Function} [iteratee] The iteratee invoked per element. 13344 * @param {Function} [comparator] The comparator invoked per element. 13345 * @returns {Array} Returns the new array of filtered values. 13346 */ 13347 function baseDifference(array, values, iteratee, comparator) { 13348 var index = -1, 13349 includes = arrayIncludes, 13350 isCommon = true, 13351 length = array.length, 13352 result = [], 13353 valuesLength = values.length; 13354 13355 if (!length) { 13356 return result; 13357 } 13358 if (iteratee) { 13359 values = arrayMap(values, baseUnary(iteratee)); 13360 } 13361 if (comparator) { 13362 includes = arrayIncludesWith; 13363 isCommon = false; 13364 } 13365 else if (values.length >= LARGE_ARRAY_SIZE) { 13366 includes = cacheHas; 13367 isCommon = false; 13368 values = new SetCache(values); 13369 } 13370 outer: 13371 while (++index < length) { 13372 var value = array[index], 13373 computed = iteratee == null ? value : iteratee(value); 13374 13375 value = (comparator || value !== 0) ? value : 0; 13376 if (isCommon && computed === computed) { 13377 var valuesIndex = valuesLength; 13378 while (valuesIndex--) { 13379 if (values[valuesIndex] === computed) { 13380 continue outer; 13381 } 13382 } 13383 result.push(value); 13384 } 13385 else if (!includes(values, computed, comparator)) { 13386 result.push(value); 13387 } 13388 } 13389 return result; 13390 } 13391 13392 /** 13393 * The base implementation of `_.forEach` without support for iteratee shorthands. 13394 * 13395 * @private 13396 * @param {Array|Object} collection The collection to iterate over. 13397 * @param {Function} iteratee The function invoked per iteration. 13398 * @returns {Array|Object} Returns `collection`. 13399 */ 13400 var baseEach = createBaseEach(baseForOwn); 13401 13402 /** 13403 * The base implementation of `_.forEachRight` without support for iteratee shorthands. 13404 * 13405 * @private 13406 * @param {Array|Object} collection The collection to iterate over. 13407 * @param {Function} iteratee The function invoked per iteration. 13408 * @returns {Array|Object} Returns `collection`. 13409 */ 13410 var baseEachRight = createBaseEach(baseForOwnRight, true); 13411 13412 /** 13413 * The base implementation of `_.every` without support for iteratee shorthands. 13414 * 13415 * @private 13416 * @param {Array|Object} collection The collection to iterate over. 13417 * @param {Function} predicate The function invoked per iteration. 13418 * @returns {boolean} Returns `true` if all elements pass the predicate check, 13419 * else `false` 13420 */ 13421 function baseEvery(collection, predicate) { 13422 var result = true; 13423 baseEach(collection, function(value, index, collection) { 13424 result = !!predicate(value, index, collection); 13425 return result; 13426 }); 13427 return result; 13428 } 13429 13430 /** 13431 * The base implementation of methods like `_.max` and `_.min` which accepts a 13432 * `comparator` to determine the extremum value. 13433 * 13434 * @private 13435 * @param {Array} array The array to iterate over. 13436 * @param {Function} iteratee The iteratee invoked per iteration. 13437 * @param {Function} comparator The comparator used to compare values. 13438 * @returns {*} Returns the extremum value. 13439 */ 13440 function baseExtremum(array, iteratee, comparator) { 13441 var index = -1, 13442 length = array.length; 13443 13444 while (++index < length) { 13445 var value = array[index], 13446 current = iteratee(value); 13447 13448 if (current != null && (computed === undefined 13449 ? (current === current && !isSymbol(current)) 13450 : comparator(current, computed) 13451 )) { 13452 var computed = current, 13453 result = value; 13454 } 13455 } 13456 return result; 13457 } 13458 13459 /** 13460 * The base implementation of `_.fill` without an iteratee call guard. 13461 * 13462 * @private 13463 * @param {Array} array The array to fill. 13464 * @param {*} value The value to fill `array` with. 13465 * @param {number} [start=0] The start position. 13466 * @param {number} [end=array.length] The end position. 13467 * @returns {Array} Returns `array`. 13468 */ 13469 function baseFill(array, value, start, end) { 13470 var length = array.length; 13471 13472 start = toInteger(start); 13473 if (start < 0) { 13474 start = -start > length ? 0 : (length + start); 13475 } 13476 end = (end === undefined || end > length) ? length : toInteger(end); 13477 if (end < 0) { 13478 end += length; 13479 } 13480 end = start > end ? 0 : toLength(end); 13481 while (start < end) { 13482 array[start++] = value; 13483 } 13484 return array; 13485 } 13486 13487 /** 13488 * The base implementation of `_.filter` without support for iteratee shorthands. 13489 * 13490 * @private 13491 * @param {Array|Object} collection The collection to iterate over. 13492 * @param {Function} predicate The function invoked per iteration. 13493 * @returns {Array} Returns the new filtered array. 13494 */ 13495 function baseFilter(collection, predicate) { 13496 var result = []; 13497 baseEach(collection, function(value, index, collection) { 13498 if (predicate(value, index, collection)) { 13499 result.push(value); 13500 } 13501 }); 13502 return result; 13503 } 13504 13505 /** 13506 * The base implementation of `_.flatten` with support for restricting flattening. 13507 * 13508 * @private 13509 * @param {Array} array The array to flatten. 13510 * @param {number} depth The maximum recursion depth. 13511 * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. 13512 * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. 13513 * @param {Array} [result=[]] The initial result value. 13514 * @returns {Array} Returns the new flattened array. 13515 */ 13516 function baseFlatten(array, depth, predicate, isStrict, result) { 13517 var index = -1, 13518 length = array.length; 13519 13520 predicate || (predicate = isFlattenable); 13521 result || (result = []); 13522 13523 while (++index < length) { 13524 var value = array[index]; 13525 if (depth > 0 && predicate(value)) { 13526 if (depth > 1) { 13527 // Recursively flatten arrays (susceptible to call stack limits). 13528 baseFlatten(value, depth - 1, predicate, isStrict, result); 13529 } else { 13530 arrayPush(result, value); 13531 } 13532 } else if (!isStrict) { 13533 result[result.length] = value; 13534 } 13535 } 13536 return result; 13537 } 13538 13539 /** 13540 * The base implementation of `baseForOwn` which iterates over `object` 13541 * properties returned by `keysFunc` and invokes `iteratee` for each property. 13542 * Iteratee functions may exit iteration early by explicitly returning `false`. 13543 * 13544 * @private 13545 * @param {Object} object The object to iterate over. 13546 * @param {Function} iteratee The function invoked per iteration. 13547 * @param {Function} keysFunc The function to get the keys of `object`. 13548 * @returns {Object} Returns `object`. 13549 */ 13550 var baseFor = createBaseFor(); 13551 13552 /** 13553 * This function is like `baseFor` except that it iterates over properties 13554 * in the opposite order. 13555 * 13556 * @private 13557 * @param {Object} object The object to iterate over. 13558 * @param {Function} iteratee The function invoked per iteration. 13559 * @param {Function} keysFunc The function to get the keys of `object`. 13560 * @returns {Object} Returns `object`. 13561 */ 13562 var baseForRight = createBaseFor(true); 13563 13564 /** 13565 * The base implementation of `_.forOwn` without support for iteratee shorthands. 13566 * 13567 * @private 13568 * @param {Object} object The object to iterate over. 13569 * @param {Function} iteratee The function invoked per iteration. 13570 * @returns {Object} Returns `object`. 13571 */ 13572 function baseForOwn(object, iteratee) { 13573 return object && baseFor(object, iteratee, keys); 13574 } 13575 13576 /** 13577 * The base implementation of `_.forOwnRight` without support for iteratee shorthands. 13578 * 13579 * @private 13580 * @param {Object} object The object to iterate over. 13581 * @param {Function} iteratee The function invoked per iteration. 13582 * @returns {Object} Returns `object`. 13583 */ 13584 function baseForOwnRight(object, iteratee) { 13585 return object && baseForRight(object, iteratee, keys); 13586 } 13587 13588 /** 13589 * The base implementation of `_.functions` which creates an array of 13590 * `object` function property names filtered from `props`. 13591 * 13592 * @private 13593 * @param {Object} object The object to inspect. 13594 * @param {Array} props The property names to filter. 13595 * @returns {Array} Returns the function names. 13596 */ 13597 function baseFunctions(object, props) { 13598 return arrayFilter(props, function(key) { 13599 return isFunction(object[key]); 13600 }); 13601 } 13602 13603 /** 13604 * The base implementation of `_.get` without support for default values. 13605 * 13606 * @private 13607 * @param {Object} object The object to query. 13608 * @param {Array|string} path The path of the property to get. 13609 * @returns {*} Returns the resolved value. 13610 */ 13611 function baseGet(object, path) { 13612 path = castPath(path, object); 13613 13614 var index = 0, 13615 length = path.length; 13616 13617 while (object != null && index < length) { 13618 object = object[toKey(path[index++])]; 13619 } 13620 return (index && index == length) ? object : undefined; 13621 } 13622 13623 /** 13624 * The base implementation of `getAllKeys` and `getAllKeysIn` which uses 13625 * `keysFunc` and `symbolsFunc` to get the enumerable property names and 13626 * symbols of `object`. 13627 * 13628 * @private 13629 * @param {Object} object The object to query. 13630 * @param {Function} keysFunc The function to get the keys of `object`. 13631 * @param {Function} symbolsFunc The function to get the symbols of `object`. 13632 * @returns {Array} Returns the array of property names and symbols. 13633 */ 13634 function baseGetAllKeys(object, keysFunc, symbolsFunc) { 13635 var result = keysFunc(object); 13636 return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); 13637 } 13638 13639 /** 13640 * The base implementation of `getTag` without fallbacks for buggy environments. 13641 * 13642 * @private 13643 * @param {*} value The value to query. 13644 * @returns {string} Returns the `toStringTag`. 13645 */ 13646 function baseGetTag(value) { 13647 if (value == null) { 13648 return value === undefined ? undefinedTag : nullTag; 13649 } 13650 return (symToStringTag && symToStringTag in Object(value)) 13651 ? getRawTag(value) 13652 : objectToString(value); 13653 } 13654 13655 /** 13656 * The base implementation of `_.gt` which doesn't coerce arguments. 13657 * 13658 * @private 13659 * @param {*} value The value to compare. 13660 * @param {*} other The other value to compare. 13661 * @returns {boolean} Returns `true` if `value` is greater than `other`, 13662 * else `false`. 13663 */ 13664 function baseGt(value, other) { 13665 return value > other; 13666 } 13667 13668 /** 13669 * The base implementation of `_.has` without support for deep paths. 13670 * 13671 * @private 13672 * @param {Object} [object] The object to query. 13673 * @param {Array|string} key The key to check. 13674 * @returns {boolean} Returns `true` if `key` exists, else `false`. 13675 */ 13676 function baseHas(object, key) { 13677 return object != null && hasOwnProperty.call(object, key); 13678 } 13679 13680 /** 13681 * The base implementation of `_.hasIn` without support for deep paths. 13682 * 13683 * @private 13684 * @param {Object} [object] The object to query. 13685 * @param {Array|string} key The key to check. 13686 * @returns {boolean} Returns `true` if `key` exists, else `false`. 13687 */ 13688 function baseHasIn(object, key) { 13689 return object != null && key in Object(object); 13690 } 13691 13692 /** 13693 * The base implementation of `_.inRange` which doesn't coerce arguments. 13694 * 13695 * @private 13696 * @param {number} number The number to check. 13697 * @param {number} start The start of the range. 13698 * @param {number} end The end of the range. 13699 * @returns {boolean} Returns `true` if `number` is in the range, else `false`. 13700 */ 13701 function baseInRange(number, start, end) { 13702 return number >= nativeMin(start, end) && number < nativeMax(start, end); 13703 } 13704 13705 /** 13706 * The base implementation of methods like `_.intersection`, without support 13707 * for iteratee shorthands, that accepts an array of arrays to inspect. 13708 * 13709 * @private 13710 * @param {Array} arrays The arrays to inspect. 13711 * @param {Function} [iteratee] The iteratee invoked per element. 13712 * @param {Function} [comparator] The comparator invoked per element. 13713 * @returns {Array} Returns the new array of shared values. 13714 */ 13715 function baseIntersection(arrays, iteratee, comparator) { 13716 var includes = comparator ? arrayIncludesWith : arrayIncludes, 13717 length = arrays[0].length, 13718 othLength = arrays.length, 13719 othIndex = othLength, 13720 caches = Array(othLength), 13721 maxLength = Infinity, 13722 result = []; 13723 13724 while (othIndex--) { 13725 var array = arrays[othIndex]; 13726 if (othIndex && iteratee) { 13727 array = arrayMap(array, baseUnary(iteratee)); 13728 } 13729 maxLength = nativeMin(array.length, maxLength); 13730 caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120)) 13731 ? new SetCache(othIndex && array) 13732 : undefined; 13733 } 13734 array = arrays[0]; 13735 13736 var index = -1, 13737 seen = caches[0]; 13738 13739 outer: 13740 while (++index < length && result.length < maxLength) { 13741 var value = array[index], 13742 computed = iteratee ? iteratee(value) : value; 13743 13744 value = (comparator || value !== 0) ? value : 0; 13745 if (!(seen 13746 ? cacheHas(seen, computed) 13747 : includes(result, computed, comparator) 13748 )) { 13749 othIndex = othLength; 13750 while (--othIndex) { 13751 var cache = caches[othIndex]; 13752 if (!(cache 13753 ? cacheHas(cache, computed) 13754 : includes(arrays[othIndex], computed, comparator)) 13755 ) { 13756 continue outer; 13757 } 13758 } 13759 if (seen) { 13760 seen.push(computed); 13761 } 13762 result.push(value); 13763 } 13764 } 13765 return result; 13766 } 13767 13768 /** 13769 * The base implementation of `_.invert` and `_.invertBy` which inverts 13770 * `object` with values transformed by `iteratee` and set by `setter`. 13771 * 13772 * @private 13773 * @param {Object} object The object to iterate over. 13774 * @param {Function} setter The function to set `accumulator` values. 13775 * @param {Function} iteratee The iteratee to transform values. 13776 * @param {Object} accumulator The initial inverted object. 13777 * @returns {Function} Returns `accumulator`. 13778 */ 13779 function baseInverter(object, setter, iteratee, accumulator) { 13780 baseForOwn(object, function(value, key, object) { 13781 setter(accumulator, iteratee(value), key, object); 13782 }); 13783 return accumulator; 13784 } 13785 13786 /** 13787 * The base implementation of `_.invoke` without support for individual 13788 * method arguments. 13789 * 13790 * @private 13791 * @param {Object} object The object to query. 13792 * @param {Array|string} path The path of the method to invoke. 13793 * @param {Array} args The arguments to invoke the method with. 13794 * @returns {*} Returns the result of the invoked method. 13795 */ 13796 function baseInvoke(object, path, args) { 13797 path = castPath(path, object); 13798 object = parent(object, path); 13799 var func = object == null ? object : object[toKey(last(path))]; 13800 return func == null ? undefined : apply(func, object, args); 13801 } 13802 13803 /** 13804 * The base implementation of `_.isArguments`. 13805 * 13806 * @private 13807 * @param {*} value The value to check. 13808 * @returns {boolean} Returns `true` if `value` is an `arguments` object, 13809 */ 13810 function baseIsArguments(value) { 13811 return isObjectLike(value) && baseGetTag(value) == argsTag; 13812 } 13813 13814 /** 13815 * The base implementation of `_.isArrayBuffer` without Node.js optimizations. 13816 * 13817 * @private 13818 * @param {*} value The value to check. 13819 * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. 13820 */ 13821 function baseIsArrayBuffer(value) { 13822 return isObjectLike(value) && baseGetTag(value) == arrayBufferTag; 13823 } 13824 13825 /** 13826 * The base implementation of `_.isDate` without Node.js optimizations. 13827 * 13828 * @private 13829 * @param {*} value The value to check. 13830 * @returns {boolean} Returns `true` if `value` is a date object, else `false`. 13831 */ 13832 function baseIsDate(value) { 13833 return isObjectLike(value) && baseGetTag(value) == dateTag; 13834 } 13835 13836 /** 13837 * The base implementation of `_.isEqual` which supports partial comparisons 13838 * and tracks traversed objects. 13839 * 13840 * @private 13841 * @param {*} value The value to compare. 13842 * @param {*} other The other value to compare. 13843 * @param {boolean} bitmask The bitmask flags. 13844 * 1 - Unordered comparison 13845 * 2 - Partial comparison 13846 * @param {Function} [customizer] The function to customize comparisons. 13847 * @param {Object} [stack] Tracks traversed `value` and `other` objects. 13848 * @returns {boolean} Returns `true` if the values are equivalent, else `false`. 13849 */ 13850 function baseIsEqual(value, other, bitmask, customizer, stack) { 13851 if (value === other) { 13852 return true; 13853 } 13854 if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { 13855 return value !== value && other !== other; 13856 } 13857 return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); 13858 } 13859 13860 /** 13861 * A specialized version of `baseIsEqual` for arrays and objects which performs 13862 * deep comparisons and tracks traversed objects enabling objects with circular 13863 * references to be compared. 13864 * 13865 * @private 13866 * @param {Object} object The object to compare. 13867 * @param {Object} other The other object to compare. 13868 * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. 13869 * @param {Function} customizer The function to customize comparisons. 13870 * @param {Function} equalFunc The function to determine equivalents of values. 13871 * @param {Object} [stack] Tracks traversed `object` and `other` objects. 13872 * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. 13873 */ 13874 function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { 13875 var objIsArr = isArray(object), 13876 othIsArr = isArray(other), 13877 objTag = objIsArr ? arrayTag : getTag(object), 13878 othTag = othIsArr ? arrayTag : getTag(other); 13879 13880 objTag = objTag == argsTag ? objectTag : objTag; 13881 othTag = othTag == argsTag ? objectTag : othTag; 13882 13883 var objIsObj = objTag == objectTag, 13884 othIsObj = othTag == objectTag, 13885 isSameTag = objTag == othTag; 13886 13887 if (isSameTag && isBuffer(object)) { 13888 if (!isBuffer(other)) { 13889 return false; 13890 } 13891 objIsArr = true; 13892 objIsObj = false; 13893 } 13894 if (isSameTag && !objIsObj) { 13895 stack || (stack = new Stack); 13896 return (objIsArr || isTypedArray(object)) 13897 ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) 13898 : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); 13899 } 13900 if (!(bitmask & COMPARE_PARTIAL_FLAG)) { 13901 var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), 13902 othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); 13903 13904 if (objIsWrapped || othIsWrapped) { 13905 var objUnwrapped = objIsWrapped ? object.value() : object, 13906 othUnwrapped = othIsWrapped ? other.value() : other; 13907 13908 stack || (stack = new Stack); 13909 return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); 13910 } 13911 } 13912 if (!isSameTag) { 13913 return false; 13914 } 13915 stack || (stack = new Stack); 13916 return equalObjects(object, other, bitmask, customizer, equalFunc, stack); 13917 } 13918 13919 /** 13920 * The base implementation of `_.isMap` without Node.js optimizations. 13921 * 13922 * @private 13923 * @param {*} value The value to check. 13924 * @returns {boolean} Returns `true` if `value` is a map, else `false`. 13925 */ 13926 function baseIsMap(value) { 13927 return isObjectLike(value) && getTag(value) == mapTag; 13928 } 13929 13930 /** 13931 * The base implementation of `_.isMatch` without support for iteratee shorthands. 13932 * 13933 * @private 13934 * @param {Object} object The object to inspect. 13935 * @param {Object} source The object of property values to match. 13936 * @param {Array} matchData The property names, values, and compare flags to match. 13937 * @param {Function} [customizer] The function to customize comparisons. 13938 * @returns {boolean} Returns `true` if `object` is a match, else `false`. 13939 */ 13940 function baseIsMatch(object, source, matchData, customizer) { 13941 var index = matchData.length, 13942 length = index, 13943 noCustomizer = !customizer; 13944 13945 if (object == null) { 13946 return !length; 13947 } 13948 object = Object(object); 13949 while (index--) { 13950 var data = matchData[index]; 13951 if ((noCustomizer && data[2]) 13952 ? data[1] !== object[data[0]] 13953 : !(data[0] in object) 13954 ) { 13955 return false; 13956 } 13957 } 13958 while (++index < length) { 13959 data = matchData[index]; 13960 var key = data[0], 13961 objValue = object[key], 13962 srcValue = data[1]; 13963 13964 if (noCustomizer && data[2]) { 13965 if (objValue === undefined && !(key in object)) { 13966 return false; 13967 } 13968 } else { 13969 var stack = new Stack; 13970 if (customizer) { 13971 var result = customizer(objValue, srcValue, key, object, source, stack); 13972 } 13973 if (!(result === undefined 13974 ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) 13975 : result 13976 )) { 13977 return false; 13978 } 13979 } 13980 } 13981 return true; 13982 } 13983 13984 /** 13985 * The base implementation of `_.isNative` without bad shim checks. 13986 * 13987 * @private 13988 * @param {*} value The value to check. 13989 * @returns {boolean} Returns `true` if `value` is a native function, 13990 * else `false`. 13991 */ 13992 function baseIsNative(value) { 13993 if (!isObject(value) || isMasked(value)) { 13994 return false; 13995 } 13996 var pattern = isFunction(value) ? reIsNative : reIsHostCtor; 13997 return pattern.test(toSource(value)); 13998 } 13999 14000 /** 14001 * The base implementation of `_.isRegExp` without Node.js optimizations. 14002 * 14003 * @private 14004 * @param {*} value The value to check. 14005 * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. 14006 */ 14007 function baseIsRegExp(value) { 14008 return isObjectLike(value) && baseGetTag(value) == regexpTag; 14009 } 14010 14011 /** 14012 * The base implementation of `_.isSet` without Node.js optimizations. 14013 * 14014 * @private 14015 * @param {*} value The value to check. 14016 * @returns {boolean} Returns `true` if `value` is a set, else `false`. 14017 */ 14018 function baseIsSet(value) { 14019 return isObjectLike(value) && getTag(value) == setTag; 14020 } 14021 14022 /** 14023 * The base implementation of `_.isTypedArray` without Node.js optimizations. 14024 * 14025 * @private 14026 * @param {*} value The value to check. 14027 * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. 14028 */ 14029 function baseIsTypedArray(value) { 14030 return isObjectLike(value) && 14031 isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; 14032 } 14033 14034 /** 14035 * The base implementation of `_.iteratee`. 14036 * 14037 * @private 14038 * @param {*} [value=_.identity] The value to convert to an iteratee. 14039 * @returns {Function} Returns the iteratee. 14040 */ 14041 function baseIteratee(value) { 14042 // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. 14043 // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. 14044 if (typeof value == 'function') { 14045 return value; 14046 } 14047 if (value == null) { 14048 return identity; 14049 } 14050 if (typeof value == 'object') { 14051 return isArray(value) 14052 ? baseMatchesProperty(value[0], value[1]) 14053 : baseMatches(value); 14054 } 14055 return property(value); 14056 } 14057 14058 /** 14059 * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. 14060 * 14061 * @private 14062 * @param {Object} object The object to query. 14063 * @returns {Array} Returns the array of property names. 14064 */ 14065 function baseKeys(object) { 14066 if (!isPrototype(object)) { 14067 return nativeKeys(object); 14068 } 14069 var result = []; 14070 for (var key in Object(object)) { 14071 if (hasOwnProperty.call(object, key) && key != 'constructor') { 14072 result.push(key); 14073 } 14074 } 14075 return result; 14076 } 14077 14078 /** 14079 * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. 14080 * 14081 * @private 14082 * @param {Object} object The object to query. 14083 * @returns {Array} Returns the array of property names. 14084 */ 14085 function baseKeysIn(object) { 14086 if (!isObject(object)) { 14087 return nativeKeysIn(object); 14088 } 14089 var isProto = isPrototype(object), 14090 result = []; 14091 14092 for (var key in object) { 14093 if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { 14094 result.push(key); 14095 } 14096 } 14097 return result; 14098 } 14099 14100 /** 14101 * The base implementation of `_.lt` which doesn't coerce arguments. 14102 * 14103 * @private 14104 * @param {*} value The value to compare. 14105 * @param {*} other The other value to compare. 14106 * @returns {boolean} Returns `true` if `value` is less than `other`, 14107 * else `false`. 14108 */ 14109 function baseLt(value, other) { 14110 return value < other; 14111 } 14112 14113 /** 14114 * The base implementation of `_.map` without support for iteratee shorthands. 14115 * 14116 * @private 14117 * @param {Array|Object} collection The collection to iterate over. 14118 * @param {Function} iteratee The function invoked per iteration. 14119 * @returns {Array} Returns the new mapped array. 14120 */ 14121 function baseMap(collection, iteratee) { 14122 var index = -1, 14123 result = isArrayLike(collection) ? Array(collection.length) : []; 14124 14125 baseEach(collection, function(value, key, collection) { 14126 result[++index] = iteratee(value, key, collection); 14127 }); 14128 return result; 14129 } 14130 14131 /** 14132 * The base implementation of `_.matches` which doesn't clone `source`. 14133 * 14134 * @private 14135 * @param {Object} source The object of property values to match. 14136 * @returns {Function} Returns the new spec function. 14137 */ 14138 function baseMatches(source) { 14139 var matchData = getMatchData(source); 14140 if (matchData.length == 1 && matchData[0][2]) { 14141 return matchesStrictComparable(matchData[0][0], matchData[0][1]); 14142 } 14143 return function(object) { 14144 return object === source || baseIsMatch(object, source, matchData); 14145 }; 14146 } 14147 14148 /** 14149 * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. 14150 * 14151 * @private 14152 * @param {string} path The path of the property to get. 14153 * @param {*} srcValue The value to match. 14154 * @returns {Function} Returns the new spec function. 14155 */ 14156 function baseMatchesProperty(path, srcValue) { 14157 if (isKey(path) && isStrictComparable(srcValue)) { 14158 return matchesStrictComparable(toKey(path), srcValue); 14159 } 14160 return function(object) { 14161 var objValue = get(object, path); 14162 return (objValue === undefined && objValue === srcValue) 14163 ? hasIn(object, path) 14164 : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); 14165 }; 14166 } 14167 14168 /** 14169 * The base implementation of `_.merge` without support for multiple sources. 14170 * 14171 * @private 14172 * @param {Object} object The destination object. 14173 * @param {Object} source The source object. 14174 * @param {number} srcIndex The index of `source`. 14175 * @param {Function} [customizer] The function to customize merged values. 14176 * @param {Object} [stack] Tracks traversed source values and their merged 14177 * counterparts. 14178 */ 14179 function baseMerge(object, source, srcIndex, customizer, stack) { 14180 if (object === source) { 14181 return; 14182 } 14183 baseFor(source, function(srcValue, key) { 14184 stack || (stack = new Stack); 14185 if (isObject(srcValue)) { 14186 baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); 14187 } 14188 else { 14189 var newValue = customizer 14190 ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack) 14191 : undefined; 14192 14193 if (newValue === undefined) { 14194 newValue = srcValue; 14195 } 14196 assignMergeValue(object, key, newValue); 14197 } 14198 }, keysIn); 14199 } 14200 14201 /** 14202 * A specialized version of `baseMerge` for arrays and objects which performs 14203 * deep merges and tracks traversed objects enabling objects with circular 14204 * references to be merged. 14205 * 14206 * @private 14207 * @param {Object} object The destination object. 14208 * @param {Object} source The source object. 14209 * @param {string} key The key of the value to merge. 14210 * @param {number} srcIndex The index of `source`. 14211 * @param {Function} mergeFunc The function to merge values. 14212 * @param {Function} [customizer] The function to customize assigned values. 14213 * @param {Object} [stack] Tracks traversed source values and their merged 14214 * counterparts. 14215 */ 14216 function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { 14217 var objValue = safeGet(object, key), 14218 srcValue = safeGet(source, key), 14219 stacked = stack.get(srcValue); 14220 14221 if (stacked) { 14222 assignMergeValue(object, key, stacked); 14223 return; 14224 } 14225 var newValue = customizer 14226 ? customizer(objValue, srcValue, (key + ''), object, source, stack) 14227 : undefined; 14228 14229 var isCommon = newValue === undefined; 14230 14231 if (isCommon) { 14232 var isArr = isArray(srcValue), 14233 isBuff = !isArr && isBuffer(srcValue), 14234 isTyped = !isArr && !isBuff && isTypedArray(srcValue); 14235 14236 newValue = srcValue; 14237 if (isArr || isBuff || isTyped) { 14238 if (isArray(objValue)) { 14239 newValue = objValue; 14240 } 14241 else if (isArrayLikeObject(objValue)) { 14242 newValue = copyArray(objValue); 14243 } 14244 else if (isBuff) { 14245 isCommon = false; 14246 newValue = cloneBuffer(srcValue, true); 14247 } 14248 else if (isTyped) { 14249 isCommon = false; 14250 newValue = cloneTypedArray(srcValue, true); 14251 } 14252 else { 14253 newValue = []; 14254 } 14255 } 14256 else if (isPlainObject(srcValue) || isArguments(srcValue)) { 14257 newValue = objValue; 14258 if (isArguments(objValue)) { 14259 newValue = toPlainObject(objValue); 14260 } 14261 else if (!isObject(objValue) || isFunction(objValue)) { 14262 newValue = initCloneObject(srcValue); 14263 } 14264 } 14265 else { 14266 isCommon = false; 14267 } 14268 } 14269 if (isCommon) { 14270 // Recursively merge objects and arrays (susceptible to call stack limits). 14271 stack.set(srcValue, newValue); 14272 mergeFunc(newValue, srcValue, srcIndex, customizer, stack); 14273 stack['delete'](srcValue); 14274 } 14275 assignMergeValue(object, key, newValue); 14276 } 14277 14278 /** 14279 * The base implementation of `_.nth` which doesn't coerce arguments. 14280 * 14281 * @private 14282 * @param {Array} array The array to query. 14283 * @param {number} n The index of the element to return. 14284 * @returns {*} Returns the nth element of `array`. 14285 */ 14286 function baseNth(array, n) { 14287 var length = array.length; 14288 if (!length) { 14289 return; 14290 } 14291 n += n < 0 ? length : 0; 14292 return isIndex(n, length) ? array[n] : undefined; 14293 } 14294 14295 /** 14296 * The base implementation of `_.orderBy` without param guards. 14297 * 14298 * @private 14299 * @param {Array|Object} collection The collection to iterate over. 14300 * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. 14301 * @param {string[]} orders The sort orders of `iteratees`. 14302 * @returns {Array} Returns the new sorted array. 14303 */ 14304 function baseOrderBy(collection, iteratees, orders) { 14305 if (iteratees.length) { 14306 iteratees = arrayMap(iteratees, function(iteratee) { 14307 if (isArray(iteratee)) { 14308 return function(value) { 14309 return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee); 14310 } 14311 } 14312 return iteratee; 14313 }); 14314 } else { 14315 iteratees = [identity]; 14316 } 14317 14318 var index = -1; 14319 iteratees = arrayMap(iteratees, baseUnary(getIteratee())); 14320 14321 var result = baseMap(collection, function(value, key, collection) { 14322 var criteria = arrayMap(iteratees, function(iteratee) { 14323 return iteratee(value); 14324 }); 14325 return { 'criteria': criteria, 'index': ++index, 'value': value }; 14326 }); 14327 14328 return baseSortBy(result, function(object, other) { 14329 return compareMultiple(object, other, orders); 14330 }); 14331 } 14332 14333 /** 14334 * The base implementation of `_.pick` without support for individual 14335 * property identifiers. 14336 * 14337 * @private 14338 * @param {Object} object The source object. 14339 * @param {string[]} paths The property paths to pick. 14340 * @returns {Object} Returns the new object. 14341 */ 14342 function basePick(object, paths) { 14343 return basePickBy(object, paths, function(value, path) { 14344 return hasIn(object, path); 14345 }); 14346 } 14347 14348 /** 14349 * The base implementation of `_.pickBy` without support for iteratee shorthands. 14350 * 14351 * @private 14352 * @param {Object} object The source object. 14353 * @param {string[]} paths The property paths to pick. 14354 * @param {Function} predicate The function invoked per property. 14355 * @returns {Object} Returns the new object. 14356 */ 14357 function basePickBy(object, paths, predicate) { 14358 var index = -1, 14359 length = paths.length, 14360 result = {}; 14361 14362 while (++index < length) { 14363 var path = paths[index], 14364 value = baseGet(object, path); 14365 14366 if (predicate(value, path)) { 14367 baseSet(result, castPath(path, object), value); 14368 } 14369 } 14370 return result; 14371 } 14372 14373 /** 14374 * A specialized version of `baseProperty` which supports deep paths. 14375 * 14376 * @private 14377 * @param {Array|string} path The path of the property to get. 14378 * @returns {Function} Returns the new accessor function. 14379 */ 14380 function basePropertyDeep(path) { 14381 return function(object) { 14382 return baseGet(object, path); 14383 }; 14384 } 14385 14386 /** 14387 * The base implementation of `_.pullAllBy` without support for iteratee 14388 * shorthands. 14389 * 14390 * @private 14391 * @param {Array} array The array to modify. 14392 * @param {Array} values The values to remove. 14393 * @param {Function} [iteratee] The iteratee invoked per element. 14394 * @param {Function} [comparator] The comparator invoked per element. 14395 * @returns {Array} Returns `array`. 14396 */ 14397 function basePullAll(array, values, iteratee, comparator) { 14398 var indexOf = comparator ? baseIndexOfWith : baseIndexOf, 14399 index = -1, 14400 length = values.length, 14401 seen = array; 14402 14403 if (array === values) { 14404 values = copyArray(values); 14405 } 14406 if (iteratee) { 14407 seen = arrayMap(array, baseUnary(iteratee)); 14408 } 14409 while (++index < length) { 14410 var fromIndex = 0, 14411 value = values[index], 14412 computed = iteratee ? iteratee(value) : value; 14413 14414 while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) { 14415 if (seen !== array) { 14416 splice.call(seen, fromIndex, 1); 14417 } 14418 splice.call(array, fromIndex, 1); 14419 } 14420 } 14421 return array; 14422 } 14423 14424 /** 14425 * The base implementation of `_.pullAt` without support for individual 14426 * indexes or capturing the removed elements. 14427 * 14428 * @private 14429 * @param {Array} array The array to modify. 14430 * @param {number[]} indexes The indexes of elements to remove. 14431 * @returns {Array} Returns `array`. 14432 */ 14433 function basePullAt(array, indexes) { 14434 var length = array ? indexes.length : 0, 14435 lastIndex = length - 1; 14436 14437 while (length--) { 14438 var index = indexes[length]; 14439 if (length == lastIndex || index !== previous) { 14440 var previous = index; 14441 if (isIndex(index)) { 14442 splice.call(array, index, 1); 14443 } else { 14444 baseUnset(array, index); 14445 } 14446 } 14447 } 14448 return array; 14449 } 14450 14451 /** 14452 * The base implementation of `_.random` without support for returning 14453 * floating-point numbers. 14454 * 14455 * @private 14456 * @param {number} lower The lower bound. 14457 * @param {number} upper The upper bound. 14458 * @returns {number} Returns the random number. 14459 */ 14460 function baseRandom(lower, upper) { 14461 return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); 14462 } 14463 14464 /** 14465 * The base implementation of `_.range` and `_.rangeRight` which doesn't 14466 * coerce arguments. 14467 * 14468 * @private 14469 * @param {number} start The start of the range. 14470 * @param {number} end The end of the range. 14471 * @param {number} step The value to increment or decrement by. 14472 * @param {boolean} [fromRight] Specify iterating from right to left. 14473 * @returns {Array} Returns the range of numbers. 14474 */ 14475 function baseRange(start, end, step, fromRight) { 14476 var index = -1, 14477 length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), 14478 result = Array(length); 14479 14480 while (length--) { 14481 result[fromRight ? length : ++index] = start; 14482 start += step; 14483 } 14484 return result; 14485 } 14486 14487 /** 14488 * The base implementation of `_.repeat` which doesn't coerce arguments. 14489 * 14490 * @private 14491 * @param {string} string The string to repeat. 14492 * @param {number} n The number of times to repeat the string. 14493 * @returns {string} Returns the repeated string. 14494 */ 14495 function baseRepeat(string, n) { 14496 var result = ''; 14497 if (!string || n < 1 || n > MAX_SAFE_INTEGER) { 14498 return result; 14499 } 14500 // Leverage the exponentiation by squaring algorithm for a faster repeat. 14501 // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. 14502 do { 14503 if (n % 2) { 14504 result += string; 14505 } 14506 n = nativeFloor(n / 2); 14507 if (n) { 14508 string += string; 14509 } 14510 } while (n); 14511 14512 return result; 14513 } 14514 14515 /** 14516 * The base implementation of `_.rest` which doesn't validate or coerce arguments. 14517 * 14518 * @private 14519 * @param {Function} func The function to apply a rest parameter to. 14520 * @param {number} [start=func.length-1] The start position of the rest parameter. 14521 * @returns {Function} Returns the new function. 14522 */ 14523 function baseRest(func, start) { 14524 return setToString(overRest(func, start, identity), func + ''); 14525 } 14526 14527 /** 14528 * The base implementation of `_.sample`. 14529 * 14530 * @private 14531 * @param {Array|Object} collection The collection to sample. 14532 * @returns {*} Returns the random element. 14533 */ 14534 function baseSample(collection) { 14535 return arraySample(values(collection)); 14536 } 14537 14538 /** 14539 * The base implementation of `_.sampleSize` without param guards. 14540 * 14541 * @private 14542 * @param {Array|Object} collection The collection to sample. 14543 * @param {number} n The number of elements to sample. 14544 * @returns {Array} Returns the random elements. 14545 */ 14546 function baseSampleSize(collection, n) { 14547 var array = values(collection); 14548 return shuffleSelf(array, baseClamp(n, 0, array.length)); 14549 } 14550 14551 /** 14552 * The base implementation of `_.set`. 14553 * 14554 * @private 14555 * @param {Object} object The object to modify. 14556 * @param {Array|string} path The path of the property to set. 14557 * @param {*} value The value to set. 14558 * @param {Function} [customizer] The function to customize path creation. 14559 * @returns {Object} Returns `object`. 14560 */ 14561 function baseSet(object, path, value, customizer) { 14562 if (!isObject(object)) { 14563 return object; 14564 } 14565 path = castPath(path, object); 14566 14567 var index = -1, 14568 length = path.length, 14569 lastIndex = length - 1, 14570 nested = object; 14571 14572 while (nested != null && ++index < length) { 14573 var key = toKey(path[index]), 14574 newValue = value; 14575 14576 if (key === '__proto__' || key === 'constructor' || key === 'prototype') { 14577 return object; 14578 } 14579 14580 if (index != lastIndex) { 14581 var objValue = nested[key]; 14582 newValue = customizer ? customizer(objValue, key, nested) : undefined; 14583 if (newValue === undefined) { 14584 newValue = isObject(objValue) 14585 ? objValue 14586 : (isIndex(path[index + 1]) ? [] : {}); 14587 } 14588 } 14589 assignValue(nested, key, newValue); 14590 nested = nested[key]; 14591 } 14592 return object; 14593 } 14594 14595 /** 14596 * The base implementation of `setData` without support for hot loop shorting. 14597 * 14598 * @private 14599 * @param {Function} func The function to associate metadata with. 14600 * @param {*} data The metadata. 14601 * @returns {Function} Returns `func`. 14602 */ 14603 var baseSetData = !metaMap ? identity : function(func, data) { 14604 metaMap.set(func, data); 14605 return func; 14606 }; 14607 14608 /** 14609 * The base implementation of `setToString` without support for hot loop shorting. 14610 * 14611 * @private 14612 * @param {Function} func The function to modify. 14613 * @param {Function} string The `toString` result. 14614 * @returns {Function} Returns `func`. 14615 */ 14616 var baseSetToString = !defineProperty ? identity : function(func, string) { 14617 return defineProperty(func, 'toString', { 14618 'configurable': true, 14619 'enumerable': false, 14620 'value': constant(string), 14621 'writable': true 14622 }); 14623 }; 14624 14625 /** 14626 * The base implementation of `_.shuffle`. 14627 * 14628 * @private 14629 * @param {Array|Object} collection The collection to shuffle. 14630 * @returns {Array} Returns the new shuffled array. 14631 */ 14632 function baseShuffle(collection) { 14633 return shuffleSelf(values(collection)); 14634 } 14635 14636 /** 14637 * The base implementation of `_.slice` without an iteratee call guard. 14638 * 14639 * @private 14640 * @param {Array} array The array to slice. 14641 * @param {number} [start=0] The start position. 14642 * @param {number} [end=array.length] The end position. 14643 * @returns {Array} Returns the slice of `array`. 14644 */ 14645 function baseSlice(array, start, end) { 14646 var index = -1, 14647 length = array.length; 14648 14649 if (start < 0) { 14650 start = -start > length ? 0 : (length + start); 14651 } 14652 end = end > length ? length : end; 14653 if (end < 0) { 14654 end += length; 14655 } 14656 length = start > end ? 0 : ((end - start) >>> 0); 14657 start >>>= 0; 14658 14659 var result = Array(length); 14660 while (++index < length) { 14661 result[index] = array[index + start]; 14662 } 14663 return result; 14664 } 14665 14666 /** 14667 * The base implementation of `_.some` without support for iteratee shorthands. 14668 * 14669 * @private 14670 * @param {Array|Object} collection The collection to iterate over. 14671 * @param {Function} predicate The function invoked per iteration. 14672 * @returns {boolean} Returns `true` if any element passes the predicate check, 14673 * else `false`. 14674 */ 14675 function baseSome(collection, predicate) { 14676 var result; 14677 14678 baseEach(collection, function(value, index, collection) { 14679 result = predicate(value, index, collection); 14680 return !result; 14681 }); 14682 return !!result; 14683 } 14684 14685 /** 14686 * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which 14687 * performs a binary search of `array` to determine the index at which `value` 14688 * should be inserted into `array` in order to maintain its sort order. 14689 * 14690 * @private 14691 * @param {Array} array The sorted array to inspect. 14692 * @param {*} value The value to evaluate. 14693 * @param {boolean} [retHighest] Specify returning the highest qualified index. 14694 * @returns {number} Returns the index at which `value` should be inserted 14695 * into `array`. 14696 */ 14697 function baseSortedIndex(array, value, retHighest) { 14698 var low = 0, 14699 high = array == null ? low : array.length; 14700 14701 if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { 14702 while (low < high) { 14703 var mid = (low + high) >>> 1, 14704 computed = array[mid]; 14705 14706 if (computed !== null && !isSymbol(computed) && 14707 (retHighest ? (computed <= value) : (computed < value))) { 14708 low = mid + 1; 14709 } else { 14710 high = mid; 14711 } 14712 } 14713 return high; 14714 } 14715 return baseSortedIndexBy(array, value, identity, retHighest); 14716 } 14717 14718 /** 14719 * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy` 14720 * which invokes `iteratee` for `value` and each element of `array` to compute 14721 * their sort ranking. The iteratee is invoked with one argument; (value). 14722 * 14723 * @private 14724 * @param {Array} array The sorted array to inspect. 14725 * @param {*} value The value to evaluate. 14726 * @param {Function} iteratee The iteratee invoked per element. 14727 * @param {boolean} [retHighest] Specify returning the highest qualified index. 14728 * @returns {number} Returns the index at which `value` should be inserted 14729 * into `array`. 14730 */ 14731 function baseSortedIndexBy(array, value, iteratee, retHighest) { 14732 var low = 0, 14733 high = array == null ? 0 : array.length; 14734 if (high === 0) { 14735 return 0; 14736 } 14737 14738 value = iteratee(value); 14739 var valIsNaN = value !== value, 14740 valIsNull = value === null, 14741 valIsSymbol = isSymbol(value), 14742 valIsUndefined = value === undefined; 14743 14744 while (low < high) { 14745 var mid = nativeFloor((low + high) / 2), 14746 computed = iteratee(array[mid]), 14747 othIsDefined = computed !== undefined, 14748 othIsNull = computed === null, 14749 othIsReflexive = computed === computed, 14750 othIsSymbol = isSymbol(computed); 14751 14752 if (valIsNaN) { 14753 var setLow = retHighest || othIsReflexive; 14754 } else if (valIsUndefined) { 14755 setLow = othIsReflexive && (retHighest || othIsDefined); 14756 } else if (valIsNull) { 14757 setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull); 14758 } else if (valIsSymbol) { 14759 setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol); 14760 } else if (othIsNull || othIsSymbol) { 14761 setLow = false; 14762 } else { 14763 setLow = retHighest ? (computed <= value) : (computed < value); 14764 } 14765 if (setLow) { 14766 low = mid + 1; 14767 } else { 14768 high = mid; 14769 } 14770 } 14771 return nativeMin(high, MAX_ARRAY_INDEX); 14772 } 14773 14774 /** 14775 * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without 14776 * support for iteratee shorthands. 14777 * 14778 * @private 14779 * @param {Array} array The array to inspect. 14780 * @param {Function} [iteratee] The iteratee invoked per element. 14781 * @returns {Array} Returns the new duplicate free array. 14782 */ 14783 function baseSortedUniq(array, iteratee) { 14784 var index = -1, 14785 length = array.length, 14786 resIndex = 0, 14787 result = []; 14788 14789 while (++index < length) { 14790 var value = array[index], 14791 computed = iteratee ? iteratee(value) : value; 14792 14793 if (!index || !eq(computed, seen)) { 14794 var seen = computed; 14795 result[resIndex++] = value === 0 ? 0 : value; 14796 } 14797 } 14798 return result; 14799 } 14800 14801 /** 14802 * The base implementation of `_.toNumber` which doesn't ensure correct 14803 * conversions of binary, hexadecimal, or octal string values. 14804 * 14805 * @private 14806 * @param {*} value The value to process. 14807 * @returns {number} Returns the number. 14808 */ 14809 function baseToNumber(value) { 14810 if (typeof value == 'number') { 14811 return value; 14812 } 14813 if (isSymbol(value)) { 14814 return NAN; 14815 } 14816 return +value; 14817 } 14818 14819 /** 14820 * The base implementation of `_.toString` which doesn't convert nullish 14821 * values to empty strings. 14822 * 14823 * @private 14824 * @param {*} value The value to process. 14825 * @returns {string} Returns the string. 14826 */ 14827 function baseToString(value) { 14828 // Exit early for strings to avoid a performance hit in some environments. 14829 if (typeof value == 'string') { 14830 return value; 14831 } 14832 if (isArray(value)) { 14833 // Recursively convert values (susceptible to call stack limits). 14834 return arrayMap(value, baseToString) + ''; 14835 } 14836 if (isSymbol(value)) { 14837 return symbolToString ? symbolToString.call(value) : ''; 14838 } 14839 var result = (value + ''); 14840 return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; 14841 } 14842 14843 /** 14844 * The base implementation of `_.uniqBy` without support for iteratee shorthands. 14845 * 14846 * @private 14847 * @param {Array} array The array to inspect. 14848 * @param {Function} [iteratee] The iteratee invoked per element. 14849 * @param {Function} [comparator] The comparator invoked per element. 14850 * @returns {Array} Returns the new duplicate free array. 14851 */ 14852 function baseUniq(array, iteratee, comparator) { 14853 var index = -1, 14854 includes = arrayIncludes, 14855 length = array.length, 14856 isCommon = true, 14857 result = [], 14858 seen = result; 14859 14860 if (comparator) { 14861 isCommon = false; 14862 includes = arrayIncludesWith; 14863 } 14864 else if (length >= LARGE_ARRAY_SIZE) { 14865 var set = iteratee ? null : createSet(array); 14866 if (set) { 14867 return setToArray(set); 14868 } 14869 isCommon = false; 14870 includes = cacheHas; 14871 seen = new SetCache; 14872 } 14873 else { 14874 seen = iteratee ? [] : result; 14875 } 14876 outer: 14877 while (++index < length) { 14878 var value = array[index], 14879 computed = iteratee ? iteratee(value) : value; 14880 14881 value = (comparator || value !== 0) ? value : 0; 14882 if (isCommon && computed === computed) { 14883 var seenIndex = seen.length; 14884 while (seenIndex--) { 14885 if (seen[seenIndex] === computed) { 14886 continue outer; 14887 } 14888 } 14889 if (iteratee) { 14890 seen.push(computed); 14891 } 14892 result.push(value); 14893 } 14894 else if (!includes(seen, computed, comparator)) { 14895 if (seen !== result) { 14896 seen.push(computed); 14897 } 14898 result.push(value); 14899 } 14900 } 14901 return result; 14902 } 14903 14904 /** 14905 * The base implementation of `_.unset`. 14906 * 14907 * @private 14908 * @param {Object} object The object to modify. 14909 * @param {Array|string} path The property path to unset. 14910 * @returns {boolean} Returns `true` if the property is deleted, else `false`. 14911 */ 14912 function baseUnset(object, path) { 14913 path = castPath(path, object); 14914 object = parent(object, path); 14915 return object == null || delete object[toKey(last(path))]; 14916 } 14917 14918 /** 14919 * The base implementation of `_.update`. 14920 * 14921 * @private 14922 * @param {Object} object The object to modify. 14923 * @param {Array|string} path The path of the property to update. 14924 * @param {Function} updater The function to produce the updated value. 14925 * @param {Function} [customizer] The function to customize path creation. 14926 * @returns {Object} Returns `object`. 14927 */ 14928 function baseUpdate(object, path, updater, customizer) { 14929 return baseSet(object, path, updater(baseGet(object, path)), customizer); 14930 } 14931 14932 /** 14933 * The base implementation of methods like `_.dropWhile` and `_.takeWhile` 14934 * without support for iteratee shorthands. 14935 * 14936 * @private 14937 * @param {Array} array The array to query. 14938 * @param {Function} predicate The function invoked per iteration. 14939 * @param {boolean} [isDrop] Specify dropping elements instead of taking them. 14940 * @param {boolean} [fromRight] Specify iterating from right to left. 14941 * @returns {Array} Returns the slice of `array`. 14942 */ 14943 function baseWhile(array, predicate, isDrop, fromRight) { 14944 var length = array.length, 14945 index = fromRight ? length : -1; 14946 14947 while ((fromRight ? index-- : ++index < length) && 14948 predicate(array[index], index, array)) {} 14949 14950 return isDrop 14951 ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) 14952 : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); 14953 } 14954 14955 /** 14956 * The base implementation of `wrapperValue` which returns the result of 14957 * performing a sequence of actions on the unwrapped `value`, where each 14958 * successive action is supplied the return value of the previous. 14959 * 14960 * @private 14961 * @param {*} value The unwrapped value. 14962 * @param {Array} actions Actions to perform to resolve the unwrapped value. 14963 * @returns {*} Returns the resolved value. 14964 */ 14965 function baseWrapperValue(value, actions) { 14966 var result = value; 14967 if (result instanceof LazyWrapper) { 14968 result = result.value(); 14969 } 14970 return arrayReduce(actions, function(result, action) { 14971 return action.func.apply(action.thisArg, arrayPush([result], action.args)); 14972 }, result); 14973 } 14974 14975 /** 14976 * The base implementation of methods like `_.xor`, without support for 14977 * iteratee shorthands, that accepts an array of arrays to inspect. 14978 * 14979 * @private 14980 * @param {Array} arrays The arrays to inspect. 14981 * @param {Function} [iteratee] The iteratee invoked per element. 14982 * @param {Function} [comparator] The comparator invoked per element. 14983 * @returns {Array} Returns the new array of values. 14984 */ 14985 function baseXor(arrays, iteratee, comparator) { 14986 var length = arrays.length; 14987 if (length < 2) { 14988 return length ? baseUniq(arrays[0]) : []; 14989 } 14990 var index = -1, 14991 result = Array(length); 14992 14993 while (++index < length) { 14994 var array = arrays[index], 14995 othIndex = -1; 14996 14997 while (++othIndex < length) { 14998 if (othIndex != index) { 14999 result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator); 15000 } 15001 } 15002 } 15003 return baseUniq(baseFlatten(result, 1), iteratee, comparator); 15004 } 15005 15006 /** 15007 * This base implementation of `_.zipObject` which assigns values using `assignFunc`. 15008 * 15009 * @private 15010 * @param {Array} props The property identifiers. 15011 * @param {Array} values The property values. 15012 * @param {Function} assignFunc The function to assign values. 15013 * @returns {Object} Returns the new object. 15014 */ 15015 function baseZipObject(props, values, assignFunc) { 15016 var index = -1, 15017 length = props.length, 15018 valsLength = values.length, 15019 result = {}; 15020 15021 while (++index < length) { 15022 var value = index < valsLength ? values[index] : undefined; 15023 assignFunc(result, props[index], value); 15024 } 15025 return result; 15026 } 15027 15028 /** 15029 * Casts `value` to an empty array if it's not an array like object. 15030 * 15031 * @private 15032 * @param {*} value The value to inspect. 15033 * @returns {Array|Object} Returns the cast array-like object. 15034 */ 15035 function castArrayLikeObject(value) { 15036 return isArrayLikeObject(value) ? value : []; 15037 } 15038 15039 /** 15040 * Casts `value` to `identity` if it's not a function. 15041 * 15042 * @private 15043 * @param {*} value The value to inspect. 15044 * @returns {Function} Returns cast function. 15045 */ 15046 function castFunction(value) { 15047 return typeof value == 'function' ? value : identity; 15048 } 15049 15050 /** 15051 * Casts `value` to a path array if it's not one. 15052 * 15053 * @private 15054 * @param {*} value The value to inspect. 15055 * @param {Object} [object] The object to query keys on. 15056 * @returns {Array} Returns the cast property path array. 15057 */ 15058 function castPath(value, object) { 15059 if (isArray(value)) { 15060 return value; 15061 } 15062 return isKey(value, object) ? [value] : stringToPath(toString(value)); 15063 } 15064 15065 /** 15066 * A `baseRest` alias which can be replaced with `identity` by module 15067 * replacement plugins. 15068 * 15069 * @private 15070 * @type {Function} 15071 * @param {Function} func The function to apply a rest parameter to. 15072 * @returns {Function} Returns the new function. 15073 */ 15074 var castRest = baseRest; 15075 15076 /** 15077 * Casts `array` to a slice if it's needed. 15078 * 15079 * @private 15080 * @param {Array} array The array to inspect. 15081 * @param {number} start The start position. 15082 * @param {number} [end=array.length] The end position. 15083 * @returns {Array} Returns the cast slice. 15084 */ 15085 function castSlice(array, start, end) { 15086 var length = array.length; 15087 end = end === undefined ? length : end; 15088 return (!start && end >= length) ? array : baseSlice(array, start, end); 15089 } 15090 15091 /** 15092 * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout). 15093 * 15094 * @private 15095 * @param {number|Object} id The timer id or timeout object of the timer to clear. 15096 */ 15097 var clearTimeout = ctxClearTimeout || function(id) { 15098 return root.clearTimeout(id); 15099 }; 15100 15101 /** 15102 * Creates a clone of `buffer`. 15103 * 15104 * @private 15105 * @param {Buffer} buffer The buffer to clone. 15106 * @param {boolean} [isDeep] Specify a deep clone. 15107 * @returns {Buffer} Returns the cloned buffer. 15108 */ 15109 function cloneBuffer(buffer, isDeep) { 15110 if (isDeep) { 15111 return buffer.slice(); 15112 } 15113 var length = buffer.length, 15114 result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); 15115 15116 buffer.copy(result); 15117 return result; 15118 } 15119 15120 /** 15121 * Creates a clone of `arrayBuffer`. 15122 * 15123 * @private 15124 * @param {ArrayBuffer} arrayBuffer The array buffer to clone. 15125 * @returns {ArrayBuffer} Returns the cloned array buffer. 15126 */ 15127 function cloneArrayBuffer(arrayBuffer) { 15128 var result = new arrayBuffer.constructor(arrayBuffer.byteLength); 15129 new Uint8Array(result).set(new Uint8Array(arrayBuffer)); 15130 return result; 15131 } 15132 15133 /** 15134 * Creates a clone of `dataView`. 15135 * 15136 * @private 15137 * @param {Object} dataView The data view to clone. 15138 * @param {boolean} [isDeep] Specify a deep clone. 15139 * @returns {Object} Returns the cloned data view. 15140 */ 15141 function cloneDataView(dataView, isDeep) { 15142 var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; 15143 return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); 15144 } 15145 15146 /** 15147 * Creates a clone of `regexp`. 15148 * 15149 * @private 15150 * @param {Object} regexp The regexp to clone. 15151 * @returns {Object} Returns the cloned regexp. 15152 */ 15153 function cloneRegExp(regexp) { 15154 var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); 15155 result.lastIndex = regexp.lastIndex; 15156 return result; 15157 } 15158 15159 /** 15160 * Creates a clone of the `symbol` object. 15161 * 15162 * @private 15163 * @param {Object} symbol The symbol object to clone. 15164 * @returns {Object} Returns the cloned symbol object. 15165 */ 15166 function cloneSymbol(symbol) { 15167 return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; 15168 } 15169 15170 /** 15171 * Creates a clone of `typedArray`. 15172 * 15173 * @private 15174 * @param {Object} typedArray The typed array to clone. 15175 * @param {boolean} [isDeep] Specify a deep clone. 15176 * @returns {Object} Returns the cloned typed array. 15177 */ 15178 function cloneTypedArray(typedArray, isDeep) { 15179 var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; 15180 return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); 15181 } 15182 15183 /** 15184 * Compares values to sort them in ascending order. 15185 * 15186 * @private 15187 * @param {*} value The value to compare. 15188 * @param {*} other The other value to compare. 15189 * @returns {number} Returns the sort order indicator for `value`. 15190 */ 15191 function compareAscending(value, other) { 15192 if (value !== other) { 15193 var valIsDefined = value !== undefined, 15194 valIsNull = value === null, 15195 valIsReflexive = value === value, 15196 valIsSymbol = isSymbol(value); 15197 15198 var othIsDefined = other !== undefined, 15199 othIsNull = other === null, 15200 othIsReflexive = other === other, 15201 othIsSymbol = isSymbol(other); 15202 15203 if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || 15204 (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || 15205 (valIsNull && othIsDefined && othIsReflexive) || 15206 (!valIsDefined && othIsReflexive) || 15207 !valIsReflexive) { 15208 return 1; 15209 } 15210 if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || 15211 (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || 15212 (othIsNull && valIsDefined && valIsReflexive) || 15213 (!othIsDefined && valIsReflexive) || 15214 !othIsReflexive) { 15215 return -1; 15216 } 15217 } 15218 return 0; 15219 } 15220 15221 /** 15222 * Used by `_.orderBy` to compare multiple properties of a value to another 15223 * and stable sort them. 15224 * 15225 * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, 15226 * specify an order of "desc" for descending or "asc" for ascending sort order 15227 * of corresponding values. 15228 * 15229 * @private 15230 * @param {Object} object The object to compare. 15231 * @param {Object} other The other object to compare. 15232 * @param {boolean[]|string[]} orders The order to sort by for each property. 15233 * @returns {number} Returns the sort order indicator for `object`. 15234 */ 15235 function compareMultiple(object, other, orders) { 15236 var index = -1, 15237 objCriteria = object.criteria, 15238 othCriteria = other.criteria, 15239 length = objCriteria.length, 15240 ordersLength = orders.length; 15241 15242 while (++index < length) { 15243 var result = compareAscending(objCriteria[index], othCriteria[index]); 15244 if (result) { 15245 if (index >= ordersLength) { 15246 return result; 15247 } 15248 var order = orders[index]; 15249 return result * (order == 'desc' ? -1 : 1); 15250 } 15251 } 15252 // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications 15253 // that causes it, under certain circumstances, to provide the same value for 15254 // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 15255 // for more details. 15256 // 15257 // This also ensures a stable sort in V8 and other engines. 15258 // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. 15259 return object.index - other.index; 15260 } 15261 15262 /** 15263 * Creates an array that is the composition of partially applied arguments, 15264 * placeholders, and provided arguments into a single array of arguments. 15265 * 15266 * @private 15267 * @param {Array} args The provided arguments. 15268 * @param {Array} partials The arguments to prepend to those provided. 15269 * @param {Array} holders The `partials` placeholder indexes. 15270 * @params {boolean} [isCurried] Specify composing for a curried function. 15271 * @returns {Array} Returns the new array of composed arguments. 15272 */ 15273 function composeArgs(args, partials, holders, isCurried) { 15274 var argsIndex = -1, 15275 argsLength = args.length, 15276 holdersLength = holders.length, 15277 leftIndex = -1, 15278 leftLength = partials.length, 15279 rangeLength = nativeMax(argsLength - holdersLength, 0), 15280 result = Array(leftLength + rangeLength), 15281 isUncurried = !isCurried; 15282 15283 while (++leftIndex < leftLength) { 15284 result[leftIndex] = partials[leftIndex]; 15285 } 15286 while (++argsIndex < holdersLength) { 15287 if (isUncurried || argsIndex < argsLength) { 15288 result[holders[argsIndex]] = args[argsIndex]; 15289 } 15290 } 15291 while (rangeLength--) { 15292 result[leftIndex++] = args[argsIndex++]; 15293 } 15294 return result; 15295 } 15296 15297 /** 15298 * This function is like `composeArgs` except that the arguments composition 15299 * is tailored for `_.partialRight`. 15300 * 15301 * @private 15302 * @param {Array} args The provided arguments. 15303 * @param {Array} partials The arguments to append to those provided. 15304 * @param {Array} holders The `partials` placeholder indexes. 15305 * @params {boolean} [isCurried] Specify composing for a curried function. 15306 * @returns {Array} Returns the new array of composed arguments. 15307 */ 15308 function composeArgsRight(args, partials, holders, isCurried) { 15309 var argsIndex = -1, 15310 argsLength = args.length, 15311 holdersIndex = -1, 15312 holdersLength = holders.length, 15313 rightIndex = -1, 15314 rightLength = partials.length, 15315 rangeLength = nativeMax(argsLength - holdersLength, 0), 15316 result = Array(rangeLength + rightLength), 15317 isUncurried = !isCurried; 15318 15319 while (++argsIndex < rangeLength) { 15320 result[argsIndex] = args[argsIndex]; 15321 } 15322 var offset = argsIndex; 15323 while (++rightIndex < rightLength) { 15324 result[offset + rightIndex] = partials[rightIndex]; 15325 } 15326 while (++holdersIndex < holdersLength) { 15327 if (isUncurried || argsIndex < argsLength) { 15328 result[offset + holders[holdersIndex]] = args[argsIndex++]; 15329 } 15330 } 15331 return result; 15332 } 15333 15334 /** 15335 * Copies the values of `source` to `array`. 15336 * 15337 * @private 15338 * @param {Array} source The array to copy values from. 15339 * @param {Array} [array=[]] The array to copy values to. 15340 * @returns {Array} Returns `array`. 15341 */ 15342 function copyArray(source, array) { 15343 var index = -1, 15344 length = source.length; 15345 15346 array || (array = Array(length)); 15347 while (++index < length) { 15348 array[index] = source[index]; 15349 } 15350 return array; 15351 } 15352 15353 /** 15354 * Copies properties of `source` to `object`. 15355 * 15356 * @private 15357 * @param {Object} source The object to copy properties from. 15358 * @param {Array} props The property identifiers to copy. 15359 * @param {Object} [object={}] The object to copy properties to. 15360 * @param {Function} [customizer] The function to customize copied values. 15361 * @returns {Object} Returns `object`. 15362 */ 15363 function copyObject(source, props, object, customizer) { 15364 var isNew = !object; 15365 object || (object = {}); 15366 15367 var index = -1, 15368 length = props.length; 15369 15370 while (++index < length) { 15371 var key = props[index]; 15372 15373 var newValue = customizer 15374 ? customizer(object[key], source[key], key, object, source) 15375 : undefined; 15376 15377 if (newValue === undefined) { 15378 newValue = source[key]; 15379 } 15380 if (isNew) { 15381 baseAssignValue(object, key, newValue); 15382 } else { 15383 assignValue(object, key, newValue); 15384 } 15385 } 15386 return object; 15387 } 15388 15389 /** 15390 * Copies own symbols of `source` to `object`. 15391 * 15392 * @private 15393 * @param {Object} source The object to copy symbols from. 15394 * @param {Object} [object={}] The object to copy symbols to. 15395 * @returns {Object} Returns `object`. 15396 */ 15397 function copySymbols(source, object) { 15398 return copyObject(source, getSymbols(source), object); 15399 } 15400 15401 /** 15402 * Copies own and inherited symbols of `source` to `object`. 15403 * 15404 * @private 15405 * @param {Object} source The object to copy symbols from. 15406 * @param {Object} [object={}] The object to copy symbols to. 15407 * @returns {Object} Returns `object`. 15408 */ 15409 function copySymbolsIn(source, object) { 15410 return copyObject(source, getSymbolsIn(source), object); 15411 } 15412 15413 /** 15414 * Creates a function like `_.groupBy`. 15415 * 15416 * @private 15417 * @param {Function} setter The function to set accumulator values. 15418 * @param {Function} [initializer] The accumulator object initializer. 15419 * @returns {Function} Returns the new aggregator function. 15420 */ 15421 function createAggregator(setter, initializer) { 15422 return function(collection, iteratee) { 15423 var func = isArray(collection) ? arrayAggregator : baseAggregator, 15424 accumulator = initializer ? initializer() : {}; 15425 15426 return func(collection, setter, getIteratee(iteratee, 2), accumulator); 15427 }; 15428 } 15429 15430 /** 15431 * Creates a function like `_.assign`. 15432 * 15433 * @private 15434 * @param {Function} assigner The function to assign values. 15435 * @returns {Function} Returns the new assigner function. 15436 */ 15437 function createAssigner(assigner) { 15438 return baseRest(function(object, sources) { 15439 var index = -1, 15440 length = sources.length, 15441 customizer = length > 1 ? sources[length - 1] : undefined, 15442 guard = length > 2 ? sources[2] : undefined; 15443 15444 customizer = (assigner.length > 3 && typeof customizer == 'function') 15445 ? (length--, customizer) 15446 : undefined; 15447 15448 if (guard && isIterateeCall(sources[0], sources[1], guard)) { 15449 customizer = length < 3 ? undefined : customizer; 15450 length = 1; 15451 } 15452 object = Object(object); 15453 while (++index < length) { 15454 var source = sources[index]; 15455 if (source) { 15456 assigner(object, source, index, customizer); 15457 } 15458 } 15459 return object; 15460 }); 15461 } 15462 15463 /** 15464 * Creates a `baseEach` or `baseEachRight` function. 15465 * 15466 * @private 15467 * @param {Function} eachFunc The function to iterate over a collection. 15468 * @param {boolean} [fromRight] Specify iterating from right to left. 15469 * @returns {Function} Returns the new base function. 15470 */ 15471 function createBaseEach(eachFunc, fromRight) { 15472 return function(collection, iteratee) { 15473 if (collection == null) { 15474 return collection; 15475 } 15476 if (!isArrayLike(collection)) { 15477 return eachFunc(collection, iteratee); 15478 } 15479 var length = collection.length, 15480 index = fromRight ? length : -1, 15481 iterable = Object(collection); 15482 15483 while ((fromRight ? index-- : ++index < length)) { 15484 if (iteratee(iterable[index], index, iterable) === false) { 15485 break; 15486 } 15487 } 15488 return collection; 15489 }; 15490 } 15491 15492 /** 15493 * Creates a base function for methods like `_.forIn` and `_.forOwn`. 15494 * 15495 * @private 15496 * @param {boolean} [fromRight] Specify iterating from right to left. 15497 * @returns {Function} Returns the new base function. 15498 */ 15499 function createBaseFor(fromRight) { 15500 return function(object, iteratee, keysFunc) { 15501 var index = -1, 15502 iterable = Object(object), 15503 props = keysFunc(object), 15504 length = props.length; 15505 15506 while (length--) { 15507 var key = props[fromRight ? length : ++index]; 15508 if (iteratee(iterable[key], key, iterable) === false) { 15509 break; 15510 } 15511 } 15512 return object; 15513 }; 15514 } 15515 15516 /** 15517 * Creates a function that wraps `func` to invoke it with the optional `this` 15518 * binding of `thisArg`. 15519 * 15520 * @private 15521 * @param {Function} func The function to wrap. 15522 * @param {number} bitmask The bitmask flags. See `createWrap` for more details. 15523 * @param {*} [thisArg] The `this` binding of `func`. 15524 * @returns {Function} Returns the new wrapped function. 15525 */ 15526 function createBind(func, bitmask, thisArg) { 15527 var isBind = bitmask & WRAP_BIND_FLAG, 15528 Ctor = createCtor(func); 15529 15530 function wrapper() { 15531 var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; 15532 return fn.apply(isBind ? thisArg : this, arguments); 15533 } 15534 return wrapper; 15535 } 15536 15537 /** 15538 * Creates a function like `_.lowerFirst`. 15539 * 15540 * @private 15541 * @param {string} methodName The name of the `String` case method to use. 15542 * @returns {Function} Returns the new case function. 15543 */ 15544 function createCaseFirst(methodName) { 15545 return function(string) { 15546 string = toString(string); 15547 15548 var strSymbols = hasUnicode(string) 15549 ? stringToArray(string) 15550 : undefined; 15551 15552 var chr = strSymbols 15553 ? strSymbols[0] 15554 : string.charAt(0); 15555 15556 var trailing = strSymbols 15557 ? castSlice(strSymbols, 1).join('') 15558 : string.slice(1); 15559 15560 return chr[methodName]() + trailing; 15561 }; 15562 } 15563 15564 /** 15565 * Creates a function like `_.camelCase`. 15566 * 15567 * @private 15568 * @param {Function} callback The function to combine each word. 15569 * @returns {Function} Returns the new compounder function. 15570 */ 15571 function createCompounder(callback) { 15572 return function(string) { 15573 return arrayReduce(words(deburr(string).replace(reApos, '')), callback, ''); 15574 }; 15575 } 15576 15577 /** 15578 * Creates a function that produces an instance of `Ctor` regardless of 15579 * whether it was invoked as part of a `new` expression or by `call` or `apply`. 15580 * 15581 * @private 15582 * @param {Function} Ctor The constructor to wrap. 15583 * @returns {Function} Returns the new wrapped function. 15584 */ 15585 function createCtor(Ctor) { 15586 return function() { 15587 // Use a `switch` statement to work with class constructors. See 15588 // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist 15589 // for more details. 15590 var args = arguments; 15591 switch (args.length) { 15592 case 0: return new Ctor; 15593 case 1: return new Ctor(args[0]); 15594 case 2: return new Ctor(args[0], args[1]); 15595 case 3: return new Ctor(args[0], args[1], args[2]); 15596 case 4: return new Ctor(args[0], args[1], args[2], args[3]); 15597 case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); 15598 case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); 15599 case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); 15600 } 15601 var thisBinding = baseCreate(Ctor.prototype), 15602 result = Ctor.apply(thisBinding, args); 15603 15604 // Mimic the constructor's `return` behavior. 15605 // See https://es5.github.io/#x13.2.2 for more details. 15606 return isObject(result) ? result : thisBinding; 15607 }; 15608 } 15609 15610 /** 15611 * Creates a function that wraps `func` to enable currying. 15612 * 15613 * @private 15614 * @param {Function} func The function to wrap. 15615 * @param {number} bitmask The bitmask flags. See `createWrap` for more details. 15616 * @param {number} arity The arity of `func`. 15617 * @returns {Function} Returns the new wrapped function. 15618 */ 15619 function createCurry(func, bitmask, arity) { 15620 var Ctor = createCtor(func); 15621 15622 function wrapper() { 15623 var length = arguments.length, 15624 args = Array(length), 15625 index = length, 15626 placeholder = getHolder(wrapper); 15627 15628 while (index--) { 15629 args[index] = arguments[index]; 15630 } 15631 var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder) 15632 ? [] 15633 : replaceHolders(args, placeholder); 15634 15635 length -= holders.length; 15636 if (length < arity) { 15637 return createRecurry( 15638 func, bitmask, createHybrid, wrapper.placeholder, undefined, 15639 args, holders, undefined, undefined, arity - length); 15640 } 15641 var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; 15642 return apply(fn, this, args); 15643 } 15644 return wrapper; 15645 } 15646 15647 /** 15648 * Creates a `_.find` or `_.findLast` function. 15649 * 15650 * @private 15651 * @param {Function} findIndexFunc The function to find the collection index. 15652 * @returns {Function} Returns the new find function. 15653 */ 15654 function createFind(findIndexFunc) { 15655 return function(collection, predicate, fromIndex) { 15656 var iterable = Object(collection); 15657 if (!isArrayLike(collection)) { 15658 var iteratee = getIteratee(predicate, 3); 15659 collection = keys(collection); 15660 predicate = function(key) { return iteratee(iterable[key], key, iterable); }; 15661 } 15662 var index = findIndexFunc(collection, predicate, fromIndex); 15663 return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; 15664 }; 15665 } 15666 15667 /** 15668 * Creates a `_.flow` or `_.flowRight` function. 15669 * 15670 * @private 15671 * @param {boolean} [fromRight] Specify iterating from right to left. 15672 * @returns {Function} Returns the new flow function. 15673 */ 15674 function createFlow(fromRight) { 15675 return flatRest(function(funcs) { 15676 var length = funcs.length, 15677 index = length, 15678 prereq = LodashWrapper.prototype.thru; 15679 15680 if (fromRight) { 15681 funcs.reverse(); 15682 } 15683 while (index--) { 15684 var func = funcs[index]; 15685 if (typeof func != 'function') { 15686 throw new TypeError(FUNC_ERROR_TEXT); 15687 } 15688 if (prereq && !wrapper && getFuncName(func) == 'wrapper') { 15689 var wrapper = new LodashWrapper([], true); 15690 } 15691 } 15692 index = wrapper ? index : length; 15693 while (++index < length) { 15694 func = funcs[index]; 15695 15696 var funcName = getFuncName(func), 15697 data = funcName == 'wrapper' ? getData(func) : undefined; 15698 15699 if (data && isLaziable(data[0]) && 15700 data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) && 15701 !data[4].length && data[9] == 1 15702 ) { 15703 wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); 15704 } else { 15705 wrapper = (func.length == 1 && isLaziable(func)) 15706 ? wrapper[funcName]() 15707 : wrapper.thru(func); 15708 } 15709 } 15710 return function() { 15711 var args = arguments, 15712 value = args[0]; 15713 15714 if (wrapper && args.length == 1 && isArray(value)) { 15715 return wrapper.plant(value).value(); 15716 } 15717 var index = 0, 15718 result = length ? funcs[index].apply(this, args) : value; 15719 15720 while (++index < length) { 15721 result = funcs[index].call(this, result); 15722 } 15723 return result; 15724 }; 15725 }); 15726 } 15727 15728 /** 15729 * Creates a function that wraps `func` to invoke it with optional `this` 15730 * binding of `thisArg`, partial application, and currying. 15731 * 15732 * @private 15733 * @param {Function|string} func The function or method name to wrap. 15734 * @param {number} bitmask The bitmask flags. See `createWrap` for more details. 15735 * @param {*} [thisArg] The `this` binding of `func`. 15736 * @param {Array} [partials] The arguments to prepend to those provided to 15737 * the new function. 15738 * @param {Array} [holders] The `partials` placeholder indexes. 15739 * @param {Array} [partialsRight] The arguments to append to those provided 15740 * to the new function. 15741 * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. 15742 * @param {Array} [argPos] The argument positions of the new function. 15743 * @param {number} [ary] The arity cap of `func`. 15744 * @param {number} [arity] The arity of `func`. 15745 * @returns {Function} Returns the new wrapped function. 15746 */ 15747 function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { 15748 var isAry = bitmask & WRAP_ARY_FLAG, 15749 isBind = bitmask & WRAP_BIND_FLAG, 15750 isBindKey = bitmask & WRAP_BIND_KEY_FLAG, 15751 isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG), 15752 isFlip = bitmask & WRAP_FLIP_FLAG, 15753 Ctor = isBindKey ? undefined : createCtor(func); 15754 15755 function wrapper() { 15756 var length = arguments.length, 15757 args = Array(length), 15758 index = length; 15759 15760 while (index--) { 15761 args[index] = arguments[index]; 15762 } 15763 if (isCurried) { 15764 var placeholder = getHolder(wrapper), 15765 holdersCount = countHolders(args, placeholder); 15766 } 15767 if (partials) { 15768 args = composeArgs(args, partials, holders, isCurried); 15769 } 15770 if (partialsRight) { 15771 args = composeArgsRight(args, partialsRight, holdersRight, isCurried); 15772 } 15773 length -= holdersCount; 15774 if (isCurried && length < arity) { 15775 var newHolders = replaceHolders(args, placeholder); 15776 return createRecurry( 15777 func, bitmask, createHybrid, wrapper.placeholder, thisArg, 15778 args, newHolders, argPos, ary, arity - length 15779 ); 15780 } 15781 var thisBinding = isBind ? thisArg : this, 15782 fn = isBindKey ? thisBinding[func] : func; 15783 15784 length = args.length; 15785 if (argPos) { 15786 args = reorder(args, argPos); 15787 } else if (isFlip && length > 1) { 15788 args.reverse(); 15789 } 15790 if (isAry && ary < length) { 15791 args.length = ary; 15792 } 15793 if (this && this !== root && this instanceof wrapper) { 15794 fn = Ctor || createCtor(fn); 15795 } 15796 return fn.apply(thisBinding, args); 15797 } 15798 return wrapper; 15799 } 15800 15801 /** 15802 * Creates a function like `_.invertBy`. 15803 * 15804 * @private 15805 * @param {Function} setter The function to set accumulator values. 15806 * @param {Function} toIteratee The function to resolve iteratees. 15807 * @returns {Function} Returns the new inverter function. 15808 */ 15809 function createInverter(setter, toIteratee) { 15810 return function(object, iteratee) { 15811 return baseInverter(object, setter, toIteratee(iteratee), {}); 15812 }; 15813 } 15814 15815 /** 15816 * Creates a function that performs a mathematical operation on two values. 15817 * 15818 * @private 15819 * @param {Function} operator The function to perform the operation. 15820 * @param {number} [defaultValue] The value used for `undefined` arguments. 15821 * @returns {Function} Returns the new mathematical operation function. 15822 */ 15823 function createMathOperation(operator, defaultValue) { 15824 return function(value, other) { 15825 var result; 15826 if (value === undefined && other === undefined) { 15827 return defaultValue; 15828 } 15829 if (value !== undefined) { 15830 result = value; 15831 } 15832 if (other !== undefined) { 15833 if (result === undefined) { 15834 return other; 15835 } 15836 if (typeof value == 'string' || typeof other == 'string') { 15837 value = baseToString(value); 15838 other = baseToString(other); 15839 } else { 15840 value = baseToNumber(value); 15841 other = baseToNumber(other); 15842 } 15843 result = operator(value, other); 15844 } 15845 return result; 15846 }; 15847 } 15848 15849 /** 15850 * Creates a function like `_.over`. 15851 * 15852 * @private 15853 * @param {Function} arrayFunc The function to iterate over iteratees. 15854 * @returns {Function} Returns the new over function. 15855 */ 15856 function createOver(arrayFunc) { 15857 return flatRest(function(iteratees) { 15858 iteratees = arrayMap(iteratees, baseUnary(getIteratee())); 15859 return baseRest(function(args) { 15860 var thisArg = this; 15861 return arrayFunc(iteratees, function(iteratee) { 15862 return apply(iteratee, thisArg, args); 15863 }); 15864 }); 15865 }); 15866 } 15867 15868 /** 15869 * Creates the padding for `string` based on `length`. The `chars` string 15870 * is truncated if the number of characters exceeds `length`. 15871 * 15872 * @private 15873 * @param {number} length The padding length. 15874 * @param {string} [chars=' '] The string used as padding. 15875 * @returns {string} Returns the padding for `string`. 15876 */ 15877 function createPadding(length, chars) { 15878 chars = chars === undefined ? ' ' : baseToString(chars); 15879 15880 var charsLength = chars.length; 15881 if (charsLength < 2) { 15882 return charsLength ? baseRepeat(chars, length) : chars; 15883 } 15884 var result = baseRepeat(chars, nativeCeil(length / stringSize(chars))); 15885 return hasUnicode(chars) 15886 ? castSlice(stringToArray(result), 0, length).join('') 15887 : result.slice(0, length); 15888 } 15889 15890 /** 15891 * Creates a function that wraps `func` to invoke it with the `this` binding 15892 * of `thisArg` and `partials` prepended to the arguments it receives. 15893 * 15894 * @private 15895 * @param {Function} func The function to wrap. 15896 * @param {number} bitmask The bitmask flags. See `createWrap` for more details. 15897 * @param {*} thisArg The `this` binding of `func`. 15898 * @param {Array} partials The arguments to prepend to those provided to 15899 * the new function. 15900 * @returns {Function} Returns the new wrapped function. 15901 */ 15902 function createPartial(func, bitmask, thisArg, partials) { 15903 var isBind = bitmask & WRAP_BIND_FLAG, 15904 Ctor = createCtor(func); 15905 15906 function wrapper() { 15907 var argsIndex = -1, 15908 argsLength = arguments.length, 15909 leftIndex = -1, 15910 leftLength = partials.length, 15911 args = Array(leftLength + argsLength), 15912 fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; 15913 15914 while (++leftIndex < leftLength) { 15915 args[leftIndex] = partials[leftIndex]; 15916 } 15917 while (argsLength--) { 15918 args[leftIndex++] = arguments[++argsIndex]; 15919 } 15920 return apply(fn, isBind ? thisArg : this, args); 15921 } 15922 return wrapper; 15923 } 15924 15925 /** 15926 * Creates a `_.range` or `_.rangeRight` function. 15927 * 15928 * @private 15929 * @param {boolean} [fromRight] Specify iterating from right to left. 15930 * @returns {Function} Returns the new range function. 15931 */ 15932 function createRange(fromRight) { 15933 return function(start, end, step) { 15934 if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { 15935 end = step = undefined; 15936 } 15937 // Ensure the sign of `-0` is preserved. 15938 start = toFinite(start); 15939 if (end === undefined) { 15940 end = start; 15941 start = 0; 15942 } else { 15943 end = toFinite(end); 15944 } 15945 step = step === undefined ? (start < end ? 1 : -1) : toFinite(step); 15946 return baseRange(start, end, step, fromRight); 15947 }; 15948 } 15949 15950 /** 15951 * Creates a function that performs a relational operation on two values. 15952 * 15953 * @private 15954 * @param {Function} operator The function to perform the operation. 15955 * @returns {Function} Returns the new relational operation function. 15956 */ 15957 function createRelationalOperation(operator) { 15958 return function(value, other) { 15959 if (!(typeof value == 'string' && typeof other == 'string')) { 15960 value = toNumber(value); 15961 other = toNumber(other); 15962 } 15963 return operator(value, other); 15964 }; 15965 } 15966 15967 /** 15968 * Creates a function that wraps `func` to continue currying. 15969 * 15970 * @private 15971 * @param {Function} func The function to wrap. 15972 * @param {number} bitmask The bitmask flags. See `createWrap` for more details. 15973 * @param {Function} wrapFunc The function to create the `func` wrapper. 15974 * @param {*} placeholder The placeholder value. 15975 * @param {*} [thisArg] The `this` binding of `func`. 15976 * @param {Array} [partials] The arguments to prepend to those provided to 15977 * the new function. 15978 * @param {Array} [holders] The `partials` placeholder indexes. 15979 * @param {Array} [argPos] The argument positions of the new function. 15980 * @param {number} [ary] The arity cap of `func`. 15981 * @param {number} [arity] The arity of `func`. 15982 * @returns {Function} Returns the new wrapped function. 15983 */ 15984 function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { 15985 var isCurry = bitmask & WRAP_CURRY_FLAG, 15986 newHolders = isCurry ? holders : undefined, 15987 newHoldersRight = isCurry ? undefined : holders, 15988 newPartials = isCurry ? partials : undefined, 15989 newPartialsRight = isCurry ? undefined : partials; 15990 15991 bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG); 15992 bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG); 15993 15994 if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) { 15995 bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG); 15996 } 15997 var newData = [ 15998 func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, 15999 newHoldersRight, argPos, ary, arity 16000 ]; 16001 16002 var result = wrapFunc.apply(undefined, newData); 16003 if (isLaziable(func)) { 16004 setData(result, newData); 16005 } 16006 result.placeholder = placeholder; 16007 return setWrapToString(result, func, bitmask); 16008 } 16009 16010 /** 16011 * Creates a function like `_.round`. 16012 * 16013 * @private 16014 * @param {string} methodName The name of the `Math` method to use when rounding. 16015 * @returns {Function} Returns the new round function. 16016 */ 16017 function createRound(methodName) { 16018 var func = Math[methodName]; 16019 return function(number, precision) { 16020 number = toNumber(number); 16021 precision = precision == null ? 0 : nativeMin(toInteger(precision), 292); 16022 if (precision && nativeIsFinite(number)) { 16023 // Shift with exponential notation to avoid floating-point issues. 16024 // See [MDN](https://mdn.io/round#Examples) for more details. 16025 var pair = (toString(number) + 'e').split('e'), 16026 value = func(pair[0] + 'e' + (+pair[1] + precision)); 16027 16028 pair = (toString(value) + 'e').split('e'); 16029 return +(pair[0] + 'e' + (+pair[1] - precision)); 16030 } 16031 return func(number); 16032 }; 16033 } 16034 16035 /** 16036 * Creates a set object of `values`. 16037 * 16038 * @private 16039 * @param {Array} values The values to add to the set. 16040 * @returns {Object} Returns the new set. 16041 */ 16042 var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) { 16043 return new Set(values); 16044 }; 16045 16046 /** 16047 * Creates a `_.toPairs` or `_.toPairsIn` function. 16048 * 16049 * @private 16050 * @param {Function} keysFunc The function to get the keys of a given object. 16051 * @returns {Function} Returns the new pairs function. 16052 */ 16053 function createToPairs(keysFunc) { 16054 return function(object) { 16055 var tag = getTag(object); 16056 if (tag == mapTag) { 16057 return mapToArray(object); 16058 } 16059 if (tag == setTag) { 16060 return setToPairs(object); 16061 } 16062 return baseToPairs(object, keysFunc(object)); 16063 }; 16064 } 16065 16066 /** 16067 * Creates a function that either curries or invokes `func` with optional 16068 * `this` binding and partially applied arguments. 16069 * 16070 * @private 16071 * @param {Function|string} func The function or method name to wrap. 16072 * @param {number} bitmask The bitmask flags. 16073 * 1 - `_.bind` 16074 * 2 - `_.bindKey` 16075 * 4 - `_.curry` or `_.curryRight` of a bound function 16076 * 8 - `_.curry` 16077 * 16 - `_.curryRight` 16078 * 32 - `_.partial` 16079 * 64 - `_.partialRight` 16080 * 128 - `_.rearg` 16081 * 256 - `_.ary` 16082 * 512 - `_.flip` 16083 * @param {*} [thisArg] The `this` binding of `func`. 16084 * @param {Array} [partials] The arguments to be partially applied. 16085 * @param {Array} [holders] The `partials` placeholder indexes. 16086 * @param {Array} [argPos] The argument positions of the new function. 16087 * @param {number} [ary] The arity cap of `func`. 16088 * @param {number} [arity] The arity of `func`. 16089 * @returns {Function} Returns the new wrapped function. 16090 */ 16091 function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { 16092 var isBindKey = bitmask & WRAP_BIND_KEY_FLAG; 16093 if (!isBindKey && typeof func != 'function') { 16094 throw new TypeError(FUNC_ERROR_TEXT); 16095 } 16096 var length = partials ? partials.length : 0; 16097 if (!length) { 16098 bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG); 16099 partials = holders = undefined; 16100 } 16101 ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0); 16102 arity = arity === undefined ? arity : toInteger(arity); 16103 length -= holders ? holders.length : 0; 16104 16105 if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) { 16106 var partialsRight = partials, 16107 holdersRight = holders; 16108 16109 partials = holders = undefined; 16110 } 16111 var data = isBindKey ? undefined : getData(func); 16112 16113 var newData = [ 16114 func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, 16115 argPos, ary, arity 16116 ]; 16117 16118 if (data) { 16119 mergeData(newData, data); 16120 } 16121 func = newData[0]; 16122 bitmask = newData[1]; 16123 thisArg = newData[2]; 16124 partials = newData[3]; 16125 holders = newData[4]; 16126 arity = newData[9] = newData[9] === undefined 16127 ? (isBindKey ? 0 : func.length) 16128 : nativeMax(newData[9] - length, 0); 16129 16130 if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) { 16131 bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG); 16132 } 16133 if (!bitmask || bitmask == WRAP_BIND_FLAG) { 16134 var result = createBind(func, bitmask, thisArg); 16135 } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) { 16136 result = createCurry(func, bitmask, arity); 16137 } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) { 16138 result = createPartial(func, bitmask, thisArg, partials); 16139 } else { 16140 result = createHybrid.apply(undefined, newData); 16141 } 16142 var setter = data ? baseSetData : setData; 16143 return setWrapToString(setter(result, newData), func, bitmask); 16144 } 16145 16146 /** 16147 * Used by `_.defaults` to customize its `_.assignIn` use to assign properties 16148 * of source objects to the destination object for all destination properties 16149 * that resolve to `undefined`. 16150 * 16151 * @private 16152 * @param {*} objValue The destination value. 16153 * @param {*} srcValue The source value. 16154 * @param {string} key The key of the property to assign. 16155 * @param {Object} object The parent object of `objValue`. 16156 * @returns {*} Returns the value to assign. 16157 */ 16158 function customDefaultsAssignIn(objValue, srcValue, key, object) { 16159 if (objValue === undefined || 16160 (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { 16161 return srcValue; 16162 } 16163 return objValue; 16164 } 16165 16166 /** 16167 * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source 16168 * objects into destination objects that are passed thru. 16169 * 16170 * @private 16171 * @param {*} objValue The destination value. 16172 * @param {*} srcValue The source value. 16173 * @param {string} key The key of the property to merge. 16174 * @param {Object} object The parent object of `objValue`. 16175 * @param {Object} source The parent object of `srcValue`. 16176 * @param {Object} [stack] Tracks traversed source values and their merged 16177 * counterparts. 16178 * @returns {*} Returns the value to assign. 16179 */ 16180 function customDefaultsMerge(objValue, srcValue, key, object, source, stack) { 16181 if (isObject(objValue) && isObject(srcValue)) { 16182 // Recursively merge objects and arrays (susceptible to call stack limits). 16183 stack.set(srcValue, objValue); 16184 baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack); 16185 stack['delete'](srcValue); 16186 } 16187 return objValue; 16188 } 16189 16190 /** 16191 * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain 16192 * objects. 16193 * 16194 * @private 16195 * @param {*} value The value to inspect. 16196 * @param {string} key The key of the property to inspect. 16197 * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`. 16198 */ 16199 function customOmitClone(value) { 16200 return isPlainObject(value) ? undefined : value; 16201 } 16202 16203 /** 16204 * A specialized version of `baseIsEqualDeep` for arrays with support for 16205 * partial deep comparisons. 16206 * 16207 * @private 16208 * @param {Array} array The array to compare. 16209 * @param {Array} other The other array to compare. 16210 * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. 16211 * @param {Function} customizer The function to customize comparisons. 16212 * @param {Function} equalFunc The function to determine equivalents of values. 16213 * @param {Object} stack Tracks traversed `array` and `other` objects. 16214 * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. 16215 */ 16216 function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { 16217 var isPartial = bitmask & COMPARE_PARTIAL_FLAG, 16218 arrLength = array.length, 16219 othLength = other.length; 16220 16221 if (arrLength != othLength && !(isPartial && othLength > arrLength)) { 16222 return false; 16223 } 16224 // Check that cyclic values are equal. 16225 var arrStacked = stack.get(array); 16226 var othStacked = stack.get(other); 16227 if (arrStacked && othStacked) { 16228 return arrStacked == other && othStacked == array; 16229 } 16230 var index = -1, 16231 result = true, 16232 seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; 16233 16234 stack.set(array, other); 16235 stack.set(other, array); 16236 16237 // Ignore non-index properties. 16238 while (++index < arrLength) { 16239 var arrValue = array[index], 16240 othValue = other[index]; 16241 16242 if (customizer) { 16243 var compared = isPartial 16244 ? customizer(othValue, arrValue, index, other, array, stack) 16245 : customizer(arrValue, othValue, index, array, other, stack); 16246 } 16247 if (compared !== undefined) { 16248 if (compared) { 16249 continue; 16250 } 16251 result = false; 16252 break; 16253 } 16254 // Recursively compare arrays (susceptible to call stack limits). 16255 if (seen) { 16256 if (!arraySome(other, function(othValue, othIndex) { 16257 if (!cacheHas(seen, othIndex) && 16258 (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { 16259 return seen.push(othIndex); 16260 } 16261 })) { 16262 result = false; 16263 break; 16264 } 16265 } else if (!( 16266 arrValue === othValue || 16267 equalFunc(arrValue, othValue, bitmask, customizer, stack) 16268 )) { 16269 result = false; 16270 break; 16271 } 16272 } 16273 stack['delete'](array); 16274 stack['delete'](other); 16275 return result; 16276 } 16277 16278 /** 16279 * A specialized version of `baseIsEqualDeep` for comparing objects of 16280 * the same `toStringTag`. 16281 * 16282 * **Note:** This function only supports comparing values with tags of 16283 * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. 16284 * 16285 * @private 16286 * @param {Object} object The object to compare. 16287 * @param {Object} other The other object to compare. 16288 * @param {string} tag The `toStringTag` of the objects to compare. 16289 * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. 16290 * @param {Function} customizer The function to customize comparisons. 16291 * @param {Function} equalFunc The function to determine equivalents of values. 16292 * @param {Object} stack Tracks traversed `object` and `other` objects. 16293 * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. 16294 */ 16295 function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { 16296 switch (tag) { 16297 case dataViewTag: 16298 if ((object.byteLength != other.byteLength) || 16299 (object.byteOffset != other.byteOffset)) { 16300 return false; 16301 } 16302 object = object.buffer; 16303 other = other.buffer; 16304 16305 case arrayBufferTag: 16306 if ((object.byteLength != other.byteLength) || 16307 !equalFunc(new Uint8Array(object), new Uint8Array(other))) { 16308 return false; 16309 } 16310 return true; 16311 16312 case boolTag: 16313 case dateTag: 16314 case numberTag: 16315 // Coerce booleans to `1` or `0` and dates to milliseconds. 16316 // Invalid dates are coerced to `NaN`. 16317 return eq(+object, +other); 16318 16319 case errorTag: 16320 return object.name == other.name && object.message == other.message; 16321 16322 case regexpTag: 16323 case stringTag: 16324 // Coerce regexes to strings and treat strings, primitives and objects, 16325 // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring 16326 // for more details. 16327 return object == (other + ''); 16328 16329 case mapTag: 16330 var convert = mapToArray; 16331 16332 case setTag: 16333 var isPartial = bitmask & COMPARE_PARTIAL_FLAG; 16334 convert || (convert = setToArray); 16335 16336 if (object.size != other.size && !isPartial) { 16337 return false; 16338 } 16339 // Assume cyclic values are equal. 16340 var stacked = stack.get(object); 16341 if (stacked) { 16342 return stacked == other; 16343 } 16344 bitmask |= COMPARE_UNORDERED_FLAG; 16345 16346 // Recursively compare objects (susceptible to call stack limits). 16347 stack.set(object, other); 16348 var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); 16349 stack['delete'](object); 16350 return result; 16351 16352 case symbolTag: 16353 if (symbolValueOf) { 16354 return symbolValueOf.call(object) == symbolValueOf.call(other); 16355 } 16356 } 16357 return false; 16358 } 16359 16360 /** 16361 * A specialized version of `baseIsEqualDeep` for objects with support for 16362 * partial deep comparisons. 16363 * 16364 * @private 16365 * @param {Object} object The object to compare. 16366 * @param {Object} other The other object to compare. 16367 * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. 16368 * @param {Function} customizer The function to customize comparisons. 16369 * @param {Function} equalFunc The function to determine equivalents of values. 16370 * @param {Object} stack Tracks traversed `object` and `other` objects. 16371 * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. 16372 */ 16373 function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { 16374 var isPartial = bitmask & COMPARE_PARTIAL_FLAG, 16375 objProps = getAllKeys(object), 16376 objLength = objProps.length, 16377 othProps = getAllKeys(other), 16378 othLength = othProps.length; 16379 16380 if (objLength != othLength && !isPartial) { 16381 return false; 16382 } 16383 var index = objLength; 16384 while (index--) { 16385 var key = objProps[index]; 16386 if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { 16387 return false; 16388 } 16389 } 16390 // Check that cyclic values are equal. 16391 var objStacked = stack.get(object); 16392 var othStacked = stack.get(other); 16393 if (objStacked && othStacked) { 16394 return objStacked == other && othStacked == object; 16395 } 16396 var result = true; 16397 stack.set(object, other); 16398 stack.set(other, object); 16399 16400 var skipCtor = isPartial; 16401 while (++index < objLength) { 16402 key = objProps[index]; 16403 var objValue = object[key], 16404 othValue = other[key]; 16405 16406 if (customizer) { 16407 var compared = isPartial 16408 ? customizer(othValue, objValue, key, other, object, stack) 16409 : customizer(objValue, othValue, key, object, other, stack); 16410 } 16411 // Recursively compare objects (susceptible to call stack limits). 16412 if (!(compared === undefined 16413 ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) 16414 : compared 16415 )) { 16416 result = false; 16417 break; 16418 } 16419 skipCtor || (skipCtor = key == 'constructor'); 16420 } 16421 if (result && !skipCtor) { 16422 var objCtor = object.constructor, 16423 othCtor = other.constructor; 16424 16425 // Non `Object` object instances with different constructors are not equal. 16426 if (objCtor != othCtor && 16427 ('constructor' in object && 'constructor' in other) && 16428 !(typeof objCtor == 'function' && objCtor instanceof objCtor && 16429 typeof othCtor == 'function' && othCtor instanceof othCtor)) { 16430 result = false; 16431 } 16432 } 16433 stack['delete'](object); 16434 stack['delete'](other); 16435 return result; 16436 } 16437 16438 /** 16439 * A specialized version of `baseRest` which flattens the rest array. 16440 * 16441 * @private 16442 * @param {Function} func The function to apply a rest parameter to. 16443 * @returns {Function} Returns the new function. 16444 */ 16445 function flatRest(func) { 16446 return setToString(overRest(func, undefined, flatten), func + ''); 16447 } 16448 16449 /** 16450 * Creates an array of own enumerable property names and symbols of `object`. 16451 * 16452 * @private 16453 * @param {Object} object The object to query. 16454 * @returns {Array} Returns the array of property names and symbols. 16455 */ 16456 function getAllKeys(object) { 16457 return baseGetAllKeys(object, keys, getSymbols); 16458 } 16459 16460 /** 16461 * Creates an array of own and inherited enumerable property names and 16462 * symbols of `object`. 16463 * 16464 * @private 16465 * @param {Object} object The object to query. 16466 * @returns {Array} Returns the array of property names and symbols. 16467 */ 16468 function getAllKeysIn(object) { 16469 return baseGetAllKeys(object, keysIn, getSymbolsIn); 16470 } 16471 16472 /** 16473 * Gets metadata for `func`. 16474 * 16475 * @private 16476 * @param {Function} func The function to query. 16477 * @returns {*} Returns the metadata for `func`. 16478 */ 16479 var getData = !metaMap ? noop : function(func) { 16480 return metaMap.get(func); 16481 }; 16482 16483 /** 16484 * Gets the name of `func`. 16485 * 16486 * @private 16487 * @param {Function} func The function to query. 16488 * @returns {string} Returns the function name. 16489 */ 16490 function getFuncName(func) { 16491 var result = (func.name + ''), 16492 array = realNames[result], 16493 length = hasOwnProperty.call(realNames, result) ? array.length : 0; 16494 16495 while (length--) { 16496 var data = array[length], 16497 otherFunc = data.func; 16498 if (otherFunc == null || otherFunc == func) { 16499 return data.name; 16500 } 16501 } 16502 return result; 16503 } 16504 16505 /** 16506 * Gets the argument placeholder value for `func`. 16507 * 16508 * @private 16509 * @param {Function} func The function to inspect. 16510 * @returns {*} Returns the placeholder value. 16511 */ 16512 function getHolder(func) { 16513 var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func; 16514 return object.placeholder; 16515 } 16516 16517 /** 16518 * Gets the appropriate "iteratee" function. If `_.iteratee` is customized, 16519 * this function returns the custom method, otherwise it returns `baseIteratee`. 16520 * If arguments are provided, the chosen function is invoked with them and 16521 * its result is returned. 16522 * 16523 * @private 16524 * @param {*} [value] The value to convert to an iteratee. 16525 * @param {number} [arity] The arity of the created iteratee. 16526 * @returns {Function} Returns the chosen function or its result. 16527 */ 16528 function getIteratee() { 16529 var result = lodash.iteratee || iteratee; 16530 result = result === iteratee ? baseIteratee : result; 16531 return arguments.length ? result(arguments[0], arguments[1]) : result; 16532 } 16533 16534 /** 16535 * Gets the data for `map`. 16536 * 16537 * @private 16538 * @param {Object} map The map to query. 16539 * @param {string} key The reference key. 16540 * @returns {*} Returns the map data. 16541 */ 16542 function getMapData(map, key) { 16543 var data = map.__data__; 16544 return isKeyable(key) 16545 ? data[typeof key == 'string' ? 'string' : 'hash'] 16546 : data.map; 16547 } 16548 16549 /** 16550 * Gets the property names, values, and compare flags of `object`. 16551 * 16552 * @private 16553 * @param {Object} object The object to query. 16554 * @returns {Array} Returns the match data of `object`. 16555 */ 16556 function getMatchData(object) { 16557 var result = keys(object), 16558 length = result.length; 16559 16560 while (length--) { 16561 var key = result[length], 16562 value = object[key]; 16563 16564 result[length] = [key, value, isStrictComparable(value)]; 16565 } 16566 return result; 16567 } 16568 16569 /** 16570 * Gets the native function at `key` of `object`. 16571 * 16572 * @private 16573 * @param {Object} object The object to query. 16574 * @param {string} key The key of the method to get. 16575 * @returns {*} Returns the function if it's native, else `undefined`. 16576 */ 16577 function getNative(object, key) { 16578 var value = getValue(object, key); 16579 return baseIsNative(value) ? value : undefined; 16580 } 16581 16582 /** 16583 * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. 16584 * 16585 * @private 16586 * @param {*} value The value to query. 16587 * @returns {string} Returns the raw `toStringTag`. 16588 */ 16589 function getRawTag(value) { 16590 var isOwn = hasOwnProperty.call(value, symToStringTag), 16591 tag = value[symToStringTag]; 16592 16593 try { 16594 value[symToStringTag] = undefined; 16595 var unmasked = true; 16596 } catch (e) {} 16597 16598 var result = nativeObjectToString.call(value); 16599 if (unmasked) { 16600 if (isOwn) { 16601 value[symToStringTag] = tag; 16602 } else { 16603 delete value[symToStringTag]; 16604 } 16605 } 16606 return result; 16607 } 16608 16609 /** 16610 * Creates an array of the own enumerable symbols of `object`. 16611 * 16612 * @private 16613 * @param {Object} object The object to query. 16614 * @returns {Array} Returns the array of symbols. 16615 */ 16616 var getSymbols = !nativeGetSymbols ? stubArray : function(object) { 16617 if (object == null) { 16618 return []; 16619 } 16620 object = Object(object); 16621 return arrayFilter(nativeGetSymbols(object), function(symbol) { 16622 return propertyIsEnumerable.call(object, symbol); 16623 }); 16624 }; 16625 16626 /** 16627 * Creates an array of the own and inherited enumerable symbols of `object`. 16628 * 16629 * @private 16630 * @param {Object} object The object to query. 16631 * @returns {Array} Returns the array of symbols. 16632 */ 16633 var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) { 16634 var result = []; 16635 while (object) { 16636 arrayPush(result, getSymbols(object)); 16637 object = getPrototype(object); 16638 } 16639 return result; 16640 }; 16641 16642 /** 16643 * Gets the `toStringTag` of `value`. 16644 * 16645 * @private 16646 * @param {*} value The value to query. 16647 * @returns {string} Returns the `toStringTag`. 16648 */ 16649 var getTag = baseGetTag; 16650 16651 // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. 16652 if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || 16653 (Map && getTag(new Map) != mapTag) || 16654 (Promise && getTag(Promise.resolve()) != promiseTag) || 16655 (Set && getTag(new Set) != setTag) || 16656 (WeakMap && getTag(new WeakMap) != weakMapTag)) { 16657 getTag = function(value) { 16658 var result = baseGetTag(value), 16659 Ctor = result == objectTag ? value.constructor : undefined, 16660 ctorString = Ctor ? toSource(Ctor) : ''; 16661 16662 if (ctorString) { 16663 switch (ctorString) { 16664 case dataViewCtorString: return dataViewTag; 16665 case mapCtorString: return mapTag; 16666 case promiseCtorString: return promiseTag; 16667 case setCtorString: return setTag; 16668 case weakMapCtorString: return weakMapTag; 16669 } 16670 } 16671 return result; 16672 }; 16673 } 16674 16675 /** 16676 * Gets the view, applying any `transforms` to the `start` and `end` positions. 16677 * 16678 * @private 16679 * @param {number} start The start of the view. 16680 * @param {number} end The end of the view. 16681 * @param {Array} transforms The transformations to apply to the view. 16682 * @returns {Object} Returns an object containing the `start` and `end` 16683 * positions of the view. 16684 */ 16685 function getView(start, end, transforms) { 16686 var index = -1, 16687 length = transforms.length; 16688 16689 while (++index < length) { 16690 var data = transforms[index], 16691 size = data.size; 16692 16693 switch (data.type) { 16694 case 'drop': start += size; break; 16695 case 'dropRight': end -= size; break; 16696 case 'take': end = nativeMin(end, start + size); break; 16697 case 'takeRight': start = nativeMax(start, end - size); break; 16698 } 16699 } 16700 return { 'start': start, 'end': end }; 16701 } 16702 16703 /** 16704 * Extracts wrapper details from the `source` body comment. 16705 * 16706 * @private 16707 * @param {string} source The source to inspect. 16708 * @returns {Array} Returns the wrapper details. 16709 */ 16710 function getWrapDetails(source) { 16711 var match = source.match(reWrapDetails); 16712 return match ? match[1].split(reSplitDetails) : []; 16713 } 16714 16715 /** 16716 * Checks if `path` exists on `object`. 16717 * 16718 * @private 16719 * @param {Object} object The object to query. 16720 * @param {Array|string} path The path to check. 16721 * @param {Function} hasFunc The function to check properties. 16722 * @returns {boolean} Returns `true` if `path` exists, else `false`. 16723 */ 16724 function hasPath(object, path, hasFunc) { 16725 path = castPath(path, object); 16726 16727 var index = -1, 16728 length = path.length, 16729 result = false; 16730 16731 while (++index < length) { 16732 var key = toKey(path[index]); 16733 if (!(result = object != null && hasFunc(object, key))) { 16734 break; 16735 } 16736 object = object[key]; 16737 } 16738 if (result || ++index != length) { 16739 return result; 16740 } 16741 length = object == null ? 0 : object.length; 16742 return !!length && isLength(length) && isIndex(key, length) && 16743 (isArray(object) || isArguments(object)); 16744 } 16745 16746 /** 16747 * Initializes an array clone. 16748 * 16749 * @private 16750 * @param {Array} array The array to clone. 16751 * @returns {Array} Returns the initialized clone. 16752 */ 16753 function initCloneArray(array) { 16754 var length = array.length, 16755 result = new array.constructor(length); 16756 16757 // Add properties assigned by `RegExp#exec`. 16758 if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { 16759 result.index = array.index; 16760 result.input = array.input; 16761 } 16762 return result; 16763 } 16764 16765 /** 16766 * Initializes an object clone. 16767 * 16768 * @private 16769 * @param {Object} object The object to clone. 16770 * @returns {Object} Returns the initialized clone. 16771 */ 16772 function initCloneObject(object) { 16773 return (typeof object.constructor == 'function' && !isPrototype(object)) 16774 ? baseCreate(getPrototype(object)) 16775 : {}; 16776 } 16777 16778 /** 16779 * Initializes an object clone based on its `toStringTag`. 16780 * 16781 * **Note:** This function only supports cloning values with tags of 16782 * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. 16783 * 16784 * @private 16785 * @param {Object} object The object to clone. 16786 * @param {string} tag The `toStringTag` of the object to clone. 16787 * @param {boolean} [isDeep] Specify a deep clone. 16788 * @returns {Object} Returns the initialized clone. 16789 */ 16790 function initCloneByTag(object, tag, isDeep) { 16791 var Ctor = object.constructor; 16792 switch (tag) { 16793 case arrayBufferTag: 16794 return cloneArrayBuffer(object); 16795 16796 case boolTag: 16797 case dateTag: 16798 return new Ctor(+object); 16799 16800 case dataViewTag: 16801 return cloneDataView(object, isDeep); 16802 16803 case float32Tag: case float64Tag: 16804 case int8Tag: case int16Tag: case int32Tag: 16805 case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: 16806 return cloneTypedArray(object, isDeep); 16807 16808 case mapTag: 16809 return new Ctor; 16810 16811 case numberTag: 16812 case stringTag: 16813 return new Ctor(object); 16814 16815 case regexpTag: 16816 return cloneRegExp(object); 16817 16818 case setTag: 16819 return new Ctor; 16820 16821 case symbolTag: 16822 return cloneSymbol(object); 16823 } 16824 } 16825 16826 /** 16827 * Inserts wrapper `details` in a comment at the top of the `source` body. 16828 * 16829 * @private 16830 * @param {string} source The source to modify. 16831 * @returns {Array} details The details to insert. 16832 * @returns {string} Returns the modified source. 16833 */ 16834 function insertWrapDetails(source, details) { 16835 var length = details.length; 16836 if (!length) { 16837 return source; 16838 } 16839 var lastIndex = length - 1; 16840 details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex]; 16841 details = details.join(length > 2 ? ', ' : ' '); 16842 return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n'); 16843 } 16844 16845 /** 16846 * Checks if `value` is a flattenable `arguments` object or array. 16847 * 16848 * @private 16849 * @param {*} value The value to check. 16850 * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. 16851 */ 16852 function isFlattenable(value) { 16853 return isArray(value) || isArguments(value) || 16854 !!(spreadableSymbol && value && value[spreadableSymbol]); 16855 } 16856 16857 /** 16858 * Checks if `value` is a valid array-like index. 16859 * 16860 * @private 16861 * @param {*} value The value to check. 16862 * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. 16863 * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. 16864 */ 16865 function isIndex(value, length) { 16866 var type = typeof value; 16867 length = length == null ? MAX_SAFE_INTEGER : length; 16868 16869 return !!length && 16870 (type == 'number' || 16871 (type != 'symbol' && reIsUint.test(value))) && 16872 (value > -1 && value % 1 == 0 && value < length); 16873 } 16874 16875 /** 16876 * Checks if the given arguments are from an iteratee call. 16877 * 16878 * @private 16879 * @param {*} value The potential iteratee value argument. 16880 * @param {*} index The potential iteratee index or key argument. 16881 * @param {*} object The potential iteratee object argument. 16882 * @returns {boolean} Returns `true` if the arguments are from an iteratee call, 16883 * else `false`. 16884 */ 16885 function isIterateeCall(value, index, object) { 16886 if (!isObject(object)) { 16887 return false; 16888 } 16889 var type = typeof index; 16890 if (type == 'number' 16891 ? (isArrayLike(object) && isIndex(index, object.length)) 16892 : (type == 'string' && index in object) 16893 ) { 16894 return eq(object[index], value); 16895 } 16896 return false; 16897 } 16898 16899 /** 16900 * Checks if `value` is a property name and not a property path. 16901 * 16902 * @private 16903 * @param {*} value The value to check. 16904 * @param {Object} [object] The object to query keys on. 16905 * @returns {boolean} Returns `true` if `value` is a property name, else `false`. 16906 */ 16907 function isKey(value, object) { 16908 if (isArray(value)) { 16909 return false; 16910 } 16911 var type = typeof value; 16912 if (type == 'number' || type == 'symbol' || type == 'boolean' || 16913 value == null || isSymbol(value)) { 16914 return true; 16915 } 16916 return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || 16917 (object != null && value in Object(object)); 16918 } 16919 16920 /** 16921 * Checks if `value` is suitable for use as unique object key. 16922 * 16923 * @private 16924 * @param {*} value The value to check. 16925 * @returns {boolean} Returns `true` if `value` is suitable, else `false`. 16926 */ 16927 function isKeyable(value) { 16928 var type = typeof value; 16929 return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') 16930 ? (value !== '__proto__') 16931 : (value === null); 16932 } 16933 16934 /** 16935 * Checks if `func` has a lazy counterpart. 16936 * 16937 * @private 16938 * @param {Function} func The function to check. 16939 * @returns {boolean} Returns `true` if `func` has a lazy counterpart, 16940 * else `false`. 16941 */ 16942 function isLaziable(func) { 16943 var funcName = getFuncName(func), 16944 other = lodash[funcName]; 16945 16946 if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) { 16947 return false; 16948 } 16949 if (func === other) { 16950 return true; 16951 } 16952 var data = getData(other); 16953 return !!data && func === data[0]; 16954 } 16955 16956 /** 16957 * Checks if `func` has its source masked. 16958 * 16959 * @private 16960 * @param {Function} func The function to check. 16961 * @returns {boolean} Returns `true` if `func` is masked, else `false`. 16962 */ 16963 function isMasked(func) { 16964 return !!maskSrcKey && (maskSrcKey in func); 16965 } 16966 16967 /** 16968 * Checks if `func` is capable of being masked. 16969 * 16970 * @private 16971 * @param {*} value The value to check. 16972 * @returns {boolean} Returns `true` if `func` is maskable, else `false`. 16973 */ 16974 var isMaskable = coreJsData ? isFunction : stubFalse; 16975 16976 /** 16977 * Checks if `value` is likely a prototype object. 16978 * 16979 * @private 16980 * @param {*} value The value to check. 16981 * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. 16982 */ 16983 function isPrototype(value) { 16984 var Ctor = value && value.constructor, 16985 proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; 16986 16987 return value === proto; 16988 } 16989 16990 /** 16991 * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. 16992 * 16993 * @private 16994 * @param {*} value The value to check. 16995 * @returns {boolean} Returns `true` if `value` if suitable for strict 16996 * equality comparisons, else `false`. 16997 */ 16998 function isStrictComparable(value) { 16999 return value === value && !isObject(value); 17000 } 17001 17002 /** 17003 * A specialized version of `matchesProperty` for source values suitable 17004 * for strict equality comparisons, i.e. `===`. 17005 * 17006 * @private 17007 * @param {string} key The key of the property to get. 17008 * @param {*} srcValue The value to match. 17009 * @returns {Function} Returns the new spec function. 17010 */ 17011 function matchesStrictComparable(key, srcValue) { 17012 return function(object) { 17013 if (object == null) { 17014 return false; 17015 } 17016 return object[key] === srcValue && 17017 (srcValue !== undefined || (key in Object(object))); 17018 }; 17019 } 17020 17021 /** 17022 * A specialized version of `_.memoize` which clears the memoized function's 17023 * cache when it exceeds `MAX_MEMOIZE_SIZE`. 17024 * 17025 * @private 17026 * @param {Function} func The function to have its output memoized. 17027 * @returns {Function} Returns the new memoized function. 17028 */ 17029 function memoizeCapped(func) { 17030 var result = memoize(func, function(key) { 17031 if (cache.size === MAX_MEMOIZE_SIZE) { 17032 cache.clear(); 17033 } 17034 return key; 17035 }); 17036 17037 var cache = result.cache; 17038 return result; 17039 } 17040 17041 /** 17042 * Merges the function metadata of `source` into `data`. 17043 * 17044 * Merging metadata reduces the number of wrappers used to invoke a function. 17045 * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` 17046 * may be applied regardless of execution order. Methods like `_.ary` and 17047 * `_.rearg` modify function arguments, making the order in which they are 17048 * executed important, preventing the merging of metadata. However, we make 17049 * an exception for a safe combined case where curried functions have `_.ary` 17050 * and or `_.rearg` applied. 17051 * 17052 * @private 17053 * @param {Array} data The destination metadata. 17054 * @param {Array} source The source metadata. 17055 * @returns {Array} Returns `data`. 17056 */ 17057 function mergeData(data, source) { 17058 var bitmask = data[1], 17059 srcBitmask = source[1], 17060 newBitmask = bitmask | srcBitmask, 17061 isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG); 17062 17063 var isCombo = 17064 ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) || 17065 ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) || 17066 ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG)); 17067 17068 // Exit early if metadata can't be merged. 17069 if (!(isCommon || isCombo)) { 17070 return data; 17071 } 17072 // Use source `thisArg` if available. 17073 if (srcBitmask & WRAP_BIND_FLAG) { 17074 data[2] = source[2]; 17075 // Set when currying a bound function. 17076 newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG; 17077 } 17078 // Compose partial arguments. 17079 var value = source[3]; 17080 if (value) { 17081 var partials = data[3]; 17082 data[3] = partials ? composeArgs(partials, value, source[4]) : value; 17083 data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4]; 17084 } 17085 // Compose partial right arguments. 17086 value = source[5]; 17087 if (value) { 17088 partials = data[5]; 17089 data[5] = partials ? composeArgsRight(partials, value, source[6]) : value; 17090 data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6]; 17091 } 17092 // Use source `argPos` if available. 17093 value = source[7]; 17094 if (value) { 17095 data[7] = value; 17096 } 17097 // Use source `ary` if it's smaller. 17098 if (srcBitmask & WRAP_ARY_FLAG) { 17099 data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); 17100 } 17101 // Use source `arity` if one is not provided. 17102 if (data[9] == null) { 17103 data[9] = source[9]; 17104 } 17105 // Use source `func` and merge bitmasks. 17106 data[0] = source[0]; 17107 data[1] = newBitmask; 17108 17109 return data; 17110 } 17111 17112 /** 17113 * This function is like 17114 * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) 17115 * except that it includes inherited enumerable properties. 17116 * 17117 * @private 17118 * @param {Object} object The object to query. 17119 * @returns {Array} Returns the array of property names. 17120 */ 17121 function nativeKeysIn(object) { 17122 var result = []; 17123 if (object != null) { 17124 for (var key in Object(object)) { 17125 result.push(key); 17126 } 17127 } 17128 return result; 17129 } 17130 17131 /** 17132 * Converts `value` to a string using `Object.prototype.toString`. 17133 * 17134 * @private 17135 * @param {*} value The value to convert. 17136 * @returns {string} Returns the converted string. 17137 */ 17138 function objectToString(value) { 17139 return nativeObjectToString.call(value); 17140 } 17141 17142 /** 17143 * A specialized version of `baseRest` which transforms the rest array. 17144 * 17145 * @private 17146 * @param {Function} func The function to apply a rest parameter to. 17147 * @param {number} [start=func.length-1] The start position of the rest parameter. 17148 * @param {Function} transform The rest array transform. 17149 * @returns {Function} Returns the new function. 17150 */ 17151 function overRest(func, start, transform) { 17152 start = nativeMax(start === undefined ? (func.length - 1) : start, 0); 17153 return function() { 17154 var args = arguments, 17155 index = -1, 17156 length = nativeMax(args.length - start, 0), 17157 array = Array(length); 17158 17159 while (++index < length) { 17160 array[index] = args[start + index]; 17161 } 17162 index = -1; 17163 var otherArgs = Array(start + 1); 17164 while (++index < start) { 17165 otherArgs[index] = args[index]; 17166 } 17167 otherArgs[start] = transform(array); 17168 return apply(func, this, otherArgs); 17169 }; 17170 } 17171 17172 /** 17173 * Gets the parent value at `path` of `object`. 17174 * 17175 * @private 17176 * @param {Object} object The object to query. 17177 * @param {Array} path The path to get the parent value of. 17178 * @returns {*} Returns the parent value. 17179 */ 17180 function parent(object, path) { 17181 return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1)); 17182 } 17183 17184 /** 17185 * Reorder `array` according to the specified indexes where the element at 17186 * the first index is assigned as the first element, the element at 17187 * the second index is assigned as the second element, and so on. 17188 * 17189 * @private 17190 * @param {Array} array The array to reorder. 17191 * @param {Array} indexes The arranged array indexes. 17192 * @returns {Array} Returns `array`. 17193 */ 17194 function reorder(array, indexes) { 17195 var arrLength = array.length, 17196 length = nativeMin(indexes.length, arrLength), 17197 oldArray = copyArray(array); 17198 17199 while (length--) { 17200 var index = indexes[length]; 17201 array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined; 17202 } 17203 return array; 17204 } 17205 17206 /** 17207 * Gets the value at `key`, unless `key` is "__proto__" or "constructor". 17208 * 17209 * @private 17210 * @param {Object} object The object to query. 17211 * @param {string} key The key of the property to get. 17212 * @returns {*} Returns the property value. 17213 */ 17214 function safeGet(object, key) { 17215 if (key === 'constructor' && typeof object[key] === 'function') { 17216 return; 17217 } 17218 17219 if (key == '__proto__') { 17220 return; 17221 } 17222 17223 return object[key]; 17224 } 17225 17226 /** 17227 * Sets metadata for `func`. 17228 * 17229 * **Note:** If this function becomes hot, i.e. is invoked a lot in a short 17230 * period of time, it will trip its breaker and transition to an identity 17231 * function to avoid garbage collection pauses in V8. See 17232 * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070) 17233 * for more details. 17234 * 17235 * @private 17236 * @param {Function} func The function to associate metadata with. 17237 * @param {*} data The metadata. 17238 * @returns {Function} Returns `func`. 17239 */ 17240 var setData = shortOut(baseSetData); 17241 17242 /** 17243 * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout). 17244 * 17245 * @private 17246 * @param {Function} func The function to delay. 17247 * @param {number} wait The number of milliseconds to delay invocation. 17248 * @returns {number|Object} Returns the timer id or timeout object. 17249 */ 17250 var setTimeout = ctxSetTimeout || function(func, wait) { 17251 return root.setTimeout(func, wait); 17252 }; 17253 17254 /** 17255 * Sets the `toString` method of `func` to return `string`. 17256 * 17257 * @private 17258 * @param {Function} func The function to modify. 17259 * @param {Function} string The `toString` result. 17260 * @returns {Function} Returns `func`. 17261 */ 17262 var setToString = shortOut(baseSetToString); 17263 17264 /** 17265 * Sets the `toString` method of `wrapper` to mimic the source of `reference` 17266 * with wrapper details in a comment at the top of the source body. 17267 * 17268 * @private 17269 * @param {Function} wrapper The function to modify. 17270 * @param {Function} reference The reference function. 17271 * @param {number} bitmask The bitmask flags. See `createWrap` for more details. 17272 * @returns {Function} Returns `wrapper`. 17273 */ 17274 function setWrapToString(wrapper, reference, bitmask) { 17275 var source = (reference + ''); 17276 return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask))); 17277 } 17278 17279 /** 17280 * Creates a function that'll short out and invoke `identity` instead 17281 * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` 17282 * milliseconds. 17283 * 17284 * @private 17285 * @param {Function} func The function to restrict. 17286 * @returns {Function} Returns the new shortable function. 17287 */ 17288 function shortOut(func) { 17289 var count = 0, 17290 lastCalled = 0; 17291 17292 return function() { 17293 var stamp = nativeNow(), 17294 remaining = HOT_SPAN - (stamp - lastCalled); 17295 17296 lastCalled = stamp; 17297 if (remaining > 0) { 17298 if (++count >= HOT_COUNT) { 17299 return arguments[0]; 17300 } 17301 } else { 17302 count = 0; 17303 } 17304 return func.apply(undefined, arguments); 17305 }; 17306 } 17307 17308 /** 17309 * A specialized version of `_.shuffle` which mutates and sets the size of `array`. 17310 * 17311 * @private 17312 * @param {Array} array The array to shuffle. 17313 * @param {number} [size=array.length] The size of `array`. 17314 * @returns {Array} Returns `array`. 17315 */ 17316 function shuffleSelf(array, size) { 17317 var index = -1, 17318 length = array.length, 17319 lastIndex = length - 1; 17320 17321 size = size === undefined ? length : size; 17322 while (++index < size) { 17323 var rand = baseRandom(index, lastIndex), 17324 value = array[rand]; 17325 17326 array[rand] = array[index]; 17327 array[index] = value; 17328 } 17329 array.length = size; 17330 return array; 17331 } 17332 17333 /** 17334 * Converts `string` to a property path array. 17335 * 17336 * @private 17337 * @param {string} string The string to convert. 17338 * @returns {Array} Returns the property path array. 17339 */ 17340 var stringToPath = memoizeCapped(function(string) { 17341 var result = []; 17342 if (string.charCodeAt(0) === 46 /* . */) { 17343 result.push(''); 17344 } 17345 string.replace(rePropName, function(match, number, quote, subString) { 17346 result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); 17347 }); 17348 return result; 17349 }); 17350 17351 /** 17352 * Converts `value` to a string key if it's not a string or symbol. 17353 * 17354 * @private 17355 * @param {*} value The value to inspect. 17356 * @returns {string|symbol} Returns the key. 17357 */ 17358 function toKey(value) { 17359 if (typeof value == 'string' || isSymbol(value)) { 17360 return value; 17361 } 17362 var result = (value + ''); 17363 return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; 17364 } 17365 17366 /** 17367 * Converts `func` to its source code. 17368 * 17369 * @private 17370 * @param {Function} func The function to convert. 17371 * @returns {string} Returns the source code. 17372 */ 17373 function toSource(func) { 17374 if (func != null) { 17375 try { 17376 return funcToString.call(func); 17377 } catch (e) {} 17378 try { 17379 return (func + ''); 17380 } catch (e) {} 17381 } 17382 return ''; 17383 } 17384 17385 /** 17386 * Updates wrapper `details` based on `bitmask` flags. 17387 * 17388 * @private 17389 * @returns {Array} details The details to modify. 17390 * @param {number} bitmask The bitmask flags. See `createWrap` for more details. 17391 * @returns {Array} Returns `details`. 17392 */ 17393 function updateWrapDetails(details, bitmask) { 17394 arrayEach(wrapFlags, function(pair) { 17395 var value = '_.' + pair[0]; 17396 if ((bitmask & pair[1]) && !arrayIncludes(details, value)) { 17397 details.push(value); 17398 } 17399 }); 17400 return details.sort(); 17401 } 17402 17403 /** 17404 * Creates a clone of `wrapper`. 17405 * 17406 * @private 17407 * @param {Object} wrapper The wrapper to clone. 17408 * @returns {Object} Returns the cloned wrapper. 17409 */ 17410 function wrapperClone(wrapper) { 17411 if (wrapper instanceof LazyWrapper) { 17412 return wrapper.clone(); 17413 } 17414 var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); 17415 result.__actions__ = copyArray(wrapper.__actions__); 17416 result.__index__ = wrapper.__index__; 17417 result.__values__ = wrapper.__values__; 17418 return result; 17419 } 17420 17421 /*------------------------------------------------------------------------*/ 17422 17423 /** 17424 * Creates an array of elements split into groups the length of `size`. 17425 * If `array` can't be split evenly, the final chunk will be the remaining 17426 * elements. 17427 * 17428 * @static 17429 * @memberOf _ 17430 * @since 3.0.0 17431 * @category Array 17432 * @param {Array} array The array to process. 17433 * @param {number} [size=1] The length of each chunk 17434 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 17435 * @returns {Array} Returns the new array of chunks. 17436 * @example 17437 * 17438 * _.chunk(['a', 'b', 'c', 'd'], 2); 17439 * // => [['a', 'b'], ['c', 'd']] 17440 * 17441 * _.chunk(['a', 'b', 'c', 'd'], 3); 17442 * // => [['a', 'b', 'c'], ['d']] 17443 */ 17444 function chunk(array, size, guard) { 17445 if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) { 17446 size = 1; 17447 } else { 17448 size = nativeMax(toInteger(size), 0); 17449 } 17450 var length = array == null ? 0 : array.length; 17451 if (!length || size < 1) { 17452 return []; 17453 } 17454 var index = 0, 17455 resIndex = 0, 17456 result = Array(nativeCeil(length / size)); 17457 17458 while (index < length) { 17459 result[resIndex++] = baseSlice(array, index, (index += size)); 17460 } 17461 return result; 17462 } 17463 17464 /** 17465 * Creates an array with all falsey values removed. The values `false`, `null`, 17466 * `0`, `""`, `undefined`, and `NaN` are falsey. 17467 * 17468 * @static 17469 * @memberOf _ 17470 * @since 0.1.0 17471 * @category Array 17472 * @param {Array} array The array to compact. 17473 * @returns {Array} Returns the new array of filtered values. 17474 * @example 17475 * 17476 * _.compact([0, 1, false, 2, '', 3]); 17477 * // => [1, 2, 3] 17478 */ 17479 function compact(array) { 17480 var index = -1, 17481 length = array == null ? 0 : array.length, 17482 resIndex = 0, 17483 result = []; 17484 17485 while (++index < length) { 17486 var value = array[index]; 17487 if (value) { 17488 result[resIndex++] = value; 17489 } 17490 } 17491 return result; 17492 } 17493 17494 /** 17495 * Creates a new array concatenating `array` with any additional arrays 17496 * and/or values. 17497 * 17498 * @static 17499 * @memberOf _ 17500 * @since 4.0.0 17501 * @category Array 17502 * @param {Array} array The array to concatenate. 17503 * @param {...*} [values] The values to concatenate. 17504 * @returns {Array} Returns the new concatenated array. 17505 * @example 17506 * 17507 * var array = [1]; 17508 * var other = _.concat(array, 2, [3], [[4]]); 17509 * 17510 * console.log(other); 17511 * // => [1, 2, 3, [4]] 17512 * 17513 * console.log(array); 17514 * // => [1] 17515 */ 17516 function concat() { 17517 var length = arguments.length; 17518 if (!length) { 17519 return []; 17520 } 17521 var args = Array(length - 1), 17522 array = arguments[0], 17523 index = length; 17524 17525 while (index--) { 17526 args[index - 1] = arguments[index]; 17527 } 17528 return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); 17529 } 17530 17531 /** 17532 * Creates an array of `array` values not included in the other given arrays 17533 * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) 17534 * for equality comparisons. The order and references of result values are 17535 * determined by the first array. 17536 * 17537 * **Note:** Unlike `_.pullAll`, this method returns a new array. 17538 * 17539 * @static 17540 * @memberOf _ 17541 * @since 0.1.0 17542 * @category Array 17543 * @param {Array} array The array to inspect. 17544 * @param {...Array} [values] The values to exclude. 17545 * @returns {Array} Returns the new array of filtered values. 17546 * @see _.without, _.xor 17547 * @example 17548 * 17549 * _.difference([2, 1], [2, 3]); 17550 * // => [1] 17551 */ 17552 var difference = baseRest(function(array, values) { 17553 return isArrayLikeObject(array) 17554 ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) 17555 : []; 17556 }); 17557 17558 /** 17559 * This method is like `_.difference` except that it accepts `iteratee` which 17560 * is invoked for each element of `array` and `values` to generate the criterion 17561 * by which they're compared. The order and references of result values are 17562 * determined by the first array. The iteratee is invoked with one argument: 17563 * (value). 17564 * 17565 * **Note:** Unlike `_.pullAllBy`, this method returns a new array. 17566 * 17567 * @static 17568 * @memberOf _ 17569 * @since 4.0.0 17570 * @category Array 17571 * @param {Array} array The array to inspect. 17572 * @param {...Array} [values] The values to exclude. 17573 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. 17574 * @returns {Array} Returns the new array of filtered values. 17575 * @example 17576 * 17577 * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor); 17578 * // => [1.2] 17579 * 17580 * // The `_.property` iteratee shorthand. 17581 * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'); 17582 * // => [{ 'x': 2 }] 17583 */ 17584 var differenceBy = baseRest(function(array, values) { 17585 var iteratee = last(values); 17586 if (isArrayLikeObject(iteratee)) { 17587 iteratee = undefined; 17588 } 17589 return isArrayLikeObject(array) 17590 ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)) 17591 : []; 17592 }); 17593 17594 /** 17595 * This method is like `_.difference` except that it accepts `comparator` 17596 * which is invoked to compare elements of `array` to `values`. The order and 17597 * references of result values are determined by the first array. The comparator 17598 * is invoked with two arguments: (arrVal, othVal). 17599 * 17600 * **Note:** Unlike `_.pullAllWith`, this method returns a new array. 17601 * 17602 * @static 17603 * @memberOf _ 17604 * @since 4.0.0 17605 * @category Array 17606 * @param {Array} array The array to inspect. 17607 * @param {...Array} [values] The values to exclude. 17608 * @param {Function} [comparator] The comparator invoked per element. 17609 * @returns {Array} Returns the new array of filtered values. 17610 * @example 17611 * 17612 * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; 17613 * 17614 * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual); 17615 * // => [{ 'x': 2, 'y': 1 }] 17616 */ 17617 var differenceWith = baseRest(function(array, values) { 17618 var comparator = last(values); 17619 if (isArrayLikeObject(comparator)) { 17620 comparator = undefined; 17621 } 17622 return isArrayLikeObject(array) 17623 ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator) 17624 : []; 17625 }); 17626 17627 /** 17628 * Creates a slice of `array` with `n` elements dropped from the beginning. 17629 * 17630 * @static 17631 * @memberOf _ 17632 * @since 0.5.0 17633 * @category Array 17634 * @param {Array} array The array to query. 17635 * @param {number} [n=1] The number of elements to drop. 17636 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 17637 * @returns {Array} Returns the slice of `array`. 17638 * @example 17639 * 17640 * _.drop([1, 2, 3]); 17641 * // => [2, 3] 17642 * 17643 * _.drop([1, 2, 3], 2); 17644 * // => [3] 17645 * 17646 * _.drop([1, 2, 3], 5); 17647 * // => [] 17648 * 17649 * _.drop([1, 2, 3], 0); 17650 * // => [1, 2, 3] 17651 */ 17652 function drop(array, n, guard) { 17653 var length = array == null ? 0 : array.length; 17654 if (!length) { 17655 return []; 17656 } 17657 n = (guard || n === undefined) ? 1 : toInteger(n); 17658 return baseSlice(array, n < 0 ? 0 : n, length); 17659 } 17660 17661 /** 17662 * Creates a slice of `array` with `n` elements dropped from the end. 17663 * 17664 * @static 17665 * @memberOf _ 17666 * @since 3.0.0 17667 * @category Array 17668 * @param {Array} array The array to query. 17669 * @param {number} [n=1] The number of elements to drop. 17670 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 17671 * @returns {Array} Returns the slice of `array`. 17672 * @example 17673 * 17674 * _.dropRight([1, 2, 3]); 17675 * // => [1, 2] 17676 * 17677 * _.dropRight([1, 2, 3], 2); 17678 * // => [1] 17679 * 17680 * _.dropRight([1, 2, 3], 5); 17681 * // => [] 17682 * 17683 * _.dropRight([1, 2, 3], 0); 17684 * // => [1, 2, 3] 17685 */ 17686 function dropRight(array, n, guard) { 17687 var length = array == null ? 0 : array.length; 17688 if (!length) { 17689 return []; 17690 } 17691 n = (guard || n === undefined) ? 1 : toInteger(n); 17692 n = length - n; 17693 return baseSlice(array, 0, n < 0 ? 0 : n); 17694 } 17695 17696 /** 17697 * Creates a slice of `array` excluding elements dropped from the end. 17698 * Elements are dropped until `predicate` returns falsey. The predicate is 17699 * invoked with three arguments: (value, index, array). 17700 * 17701 * @static 17702 * @memberOf _ 17703 * @since 3.0.0 17704 * @category Array 17705 * @param {Array} array The array to query. 17706 * @param {Function} [predicate=_.identity] The function invoked per iteration. 17707 * @returns {Array} Returns the slice of `array`. 17708 * @example 17709 * 17710 * var users = [ 17711 * { 'user': 'barney', 'active': true }, 17712 * { 'user': 'fred', 'active': false }, 17713 * { 'user': 'pebbles', 'active': false } 17714 * ]; 17715 * 17716 * _.dropRightWhile(users, function(o) { return !o.active; }); 17717 * // => objects for ['barney'] 17718 * 17719 * // The `_.matches` iteratee shorthand. 17720 * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false }); 17721 * // => objects for ['barney', 'fred'] 17722 * 17723 * // The `_.matchesProperty` iteratee shorthand. 17724 * _.dropRightWhile(users, ['active', false]); 17725 * // => objects for ['barney'] 17726 * 17727 * // The `_.property` iteratee shorthand. 17728 * _.dropRightWhile(users, 'active'); 17729 * // => objects for ['barney', 'fred', 'pebbles'] 17730 */ 17731 function dropRightWhile(array, predicate) { 17732 return (array && array.length) 17733 ? baseWhile(array, getIteratee(predicate, 3), true, true) 17734 : []; 17735 } 17736 17737 /** 17738 * Creates a slice of `array` excluding elements dropped from the beginning. 17739 * Elements are dropped until `predicate` returns falsey. The predicate is 17740 * invoked with three arguments: (value, index, array). 17741 * 17742 * @static 17743 * @memberOf _ 17744 * @since 3.0.0 17745 * @category Array 17746 * @param {Array} array The array to query. 17747 * @param {Function} [predicate=_.identity] The function invoked per iteration. 17748 * @returns {Array} Returns the slice of `array`. 17749 * @example 17750 * 17751 * var users = [ 17752 * { 'user': 'barney', 'active': false }, 17753 * { 'user': 'fred', 'active': false }, 17754 * { 'user': 'pebbles', 'active': true } 17755 * ]; 17756 * 17757 * _.dropWhile(users, function(o) { return !o.active; }); 17758 * // => objects for ['pebbles'] 17759 * 17760 * // The `_.matches` iteratee shorthand. 17761 * _.dropWhile(users, { 'user': 'barney', 'active': false }); 17762 * // => objects for ['fred', 'pebbles'] 17763 * 17764 * // The `_.matchesProperty` iteratee shorthand. 17765 * _.dropWhile(users, ['active', false]); 17766 * // => objects for ['pebbles'] 17767 * 17768 * // The `_.property` iteratee shorthand. 17769 * _.dropWhile(users, 'active'); 17770 * // => objects for ['barney', 'fred', 'pebbles'] 17771 */ 17772 function dropWhile(array, predicate) { 17773 return (array && array.length) 17774 ? baseWhile(array, getIteratee(predicate, 3), true) 17775 : []; 17776 } 17777 17778 /** 17779 * Fills elements of `array` with `value` from `start` up to, but not 17780 * including, `end`. 17781 * 17782 * **Note:** This method mutates `array`. 17783 * 17784 * @static 17785 * @memberOf _ 17786 * @since 3.2.0 17787 * @category Array 17788 * @param {Array} array The array to fill. 17789 * @param {*} value The value to fill `array` with. 17790 * @param {number} [start=0] The start position. 17791 * @param {number} [end=array.length] The end position. 17792 * @returns {Array} Returns `array`. 17793 * @example 17794 * 17795 * var array = [1, 2, 3]; 17796 * 17797 * _.fill(array, 'a'); 17798 * console.log(array); 17799 * // => ['a', 'a', 'a'] 17800 * 17801 * _.fill(Array(3), 2); 17802 * // => [2, 2, 2] 17803 * 17804 * _.fill([4, 6, 8, 10], '*', 1, 3); 17805 * // => [4, '*', '*', 10] 17806 */ 17807 function fill(array, value, start, end) { 17808 var length = array == null ? 0 : array.length; 17809 if (!length) { 17810 return []; 17811 } 17812 if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { 17813 start = 0; 17814 end = length; 17815 } 17816 return baseFill(array, value, start, end); 17817 } 17818 17819 /** 17820 * This method is like `_.find` except that it returns the index of the first 17821 * element `predicate` returns truthy for instead of the element itself. 17822 * 17823 * @static 17824 * @memberOf _ 17825 * @since 1.1.0 17826 * @category Array 17827 * @param {Array} array The array to inspect. 17828 * @param {Function} [predicate=_.identity] The function invoked per iteration. 17829 * @param {number} [fromIndex=0] The index to search from. 17830 * @returns {number} Returns the index of the found element, else `-1`. 17831 * @example 17832 * 17833 * var users = [ 17834 * { 'user': 'barney', 'active': false }, 17835 * { 'user': 'fred', 'active': false }, 17836 * { 'user': 'pebbles', 'active': true } 17837 * ]; 17838 * 17839 * _.findIndex(users, function(o) { return o.user == 'barney'; }); 17840 * // => 0 17841 * 17842 * // The `_.matches` iteratee shorthand. 17843 * _.findIndex(users, { 'user': 'fred', 'active': false }); 17844 * // => 1 17845 * 17846 * // The `_.matchesProperty` iteratee shorthand. 17847 * _.findIndex(users, ['active', false]); 17848 * // => 0 17849 * 17850 * // The `_.property` iteratee shorthand. 17851 * _.findIndex(users, 'active'); 17852 * // => 2 17853 */ 17854 function findIndex(array, predicate, fromIndex) { 17855 var length = array == null ? 0 : array.length; 17856 if (!length) { 17857 return -1; 17858 } 17859 var index = fromIndex == null ? 0 : toInteger(fromIndex); 17860 if (index < 0) { 17861 index = nativeMax(length + index, 0); 17862 } 17863 return baseFindIndex(array, getIteratee(predicate, 3), index); 17864 } 17865 17866 /** 17867 * This method is like `_.findIndex` except that it iterates over elements 17868 * of `collection` from right to left. 17869 * 17870 * @static 17871 * @memberOf _ 17872 * @since 2.0.0 17873 * @category Array 17874 * @param {Array} array The array to inspect. 17875 * @param {Function} [predicate=_.identity] The function invoked per iteration. 17876 * @param {number} [fromIndex=array.length-1] The index to search from. 17877 * @returns {number} Returns the index of the found element, else `-1`. 17878 * @example 17879 * 17880 * var users = [ 17881 * { 'user': 'barney', 'active': true }, 17882 * { 'user': 'fred', 'active': false }, 17883 * { 'user': 'pebbles', 'active': false } 17884 * ]; 17885 * 17886 * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); 17887 * // => 2 17888 * 17889 * // The `_.matches` iteratee shorthand. 17890 * _.findLastIndex(users, { 'user': 'barney', 'active': true }); 17891 * // => 0 17892 * 17893 * // The `_.matchesProperty` iteratee shorthand. 17894 * _.findLastIndex(users, ['active', false]); 17895 * // => 2 17896 * 17897 * // The `_.property` iteratee shorthand. 17898 * _.findLastIndex(users, 'active'); 17899 * // => 0 17900 */ 17901 function findLastIndex(array, predicate, fromIndex) { 17902 var length = array == null ? 0 : array.length; 17903 if (!length) { 17904 return -1; 17905 } 17906 var index = length - 1; 17907 if (fromIndex !== undefined) { 17908 index = toInteger(fromIndex); 17909 index = fromIndex < 0 17910 ? nativeMax(length + index, 0) 17911 : nativeMin(index, length - 1); 17912 } 17913 return baseFindIndex(array, getIteratee(predicate, 3), index, true); 17914 } 17915 17916 /** 17917 * Flattens `array` a single level deep. 17918 * 17919 * @static 17920 * @memberOf _ 17921 * @since 0.1.0 17922 * @category Array 17923 * @param {Array} array The array to flatten. 17924 * @returns {Array} Returns the new flattened array. 17925 * @example 17926 * 17927 * _.flatten([1, [2, [3, [4]], 5]]); 17928 * // => [1, 2, [3, [4]], 5] 17929 */ 17930 function flatten(array) { 17931 var length = array == null ? 0 : array.length; 17932 return length ? baseFlatten(array, 1) : []; 17933 } 17934 17935 /** 17936 * Recursively flattens `array`. 17937 * 17938 * @static 17939 * @memberOf _ 17940 * @since 3.0.0 17941 * @category Array 17942 * @param {Array} array The array to flatten. 17943 * @returns {Array} Returns the new flattened array. 17944 * @example 17945 * 17946 * _.flattenDeep([1, [2, [3, [4]], 5]]); 17947 * // => [1, 2, 3, 4, 5] 17948 */ 17949 function flattenDeep(array) { 17950 var length = array == null ? 0 : array.length; 17951 return length ? baseFlatten(array, INFINITY) : []; 17952 } 17953 17954 /** 17955 * Recursively flatten `array` up to `depth` times. 17956 * 17957 * @static 17958 * @memberOf _ 17959 * @since 4.4.0 17960 * @category Array 17961 * @param {Array} array The array to flatten. 17962 * @param {number} [depth=1] The maximum recursion depth. 17963 * @returns {Array} Returns the new flattened array. 17964 * @example 17965 * 17966 * var array = [1, [2, [3, [4]], 5]]; 17967 * 17968 * _.flattenDepth(array, 1); 17969 * // => [1, 2, [3, [4]], 5] 17970 * 17971 * _.flattenDepth(array, 2); 17972 * // => [1, 2, 3, [4], 5] 17973 */ 17974 function flattenDepth(array, depth) { 17975 var length = array == null ? 0 : array.length; 17976 if (!length) { 17977 return []; 17978 } 17979 depth = depth === undefined ? 1 : toInteger(depth); 17980 return baseFlatten(array, depth); 17981 } 17982 17983 /** 17984 * The inverse of `_.toPairs`; this method returns an object composed 17985 * from key-value `pairs`. 17986 * 17987 * @static 17988 * @memberOf _ 17989 * @since 4.0.0 17990 * @category Array 17991 * @param {Array} pairs The key-value pairs. 17992 * @returns {Object} Returns the new object. 17993 * @example 17994 * 17995 * _.fromPairs([['a', 1], ['b', 2]]); 17996 * // => { 'a': 1, 'b': 2 } 17997 */ 17998 function fromPairs(pairs) { 17999 var index = -1, 18000 length = pairs == null ? 0 : pairs.length, 18001 result = {}; 18002 18003 while (++index < length) { 18004 var pair = pairs[index]; 18005 result[pair[0]] = pair[1]; 18006 } 18007 return result; 18008 } 18009 18010 /** 18011 * Gets the first element of `array`. 18012 * 18013 * @static 18014 * @memberOf _ 18015 * @since 0.1.0 18016 * @alias first 18017 * @category Array 18018 * @param {Array} array The array to query. 18019 * @returns {*} Returns the first element of `array`. 18020 * @example 18021 * 18022 * _.head([1, 2, 3]); 18023 * // => 1 18024 * 18025 * _.head([]); 18026 * // => undefined 18027 */ 18028 function head(array) { 18029 return (array && array.length) ? array[0] : undefined; 18030 } 18031 18032 /** 18033 * Gets the index at which the first occurrence of `value` is found in `array` 18034 * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) 18035 * for equality comparisons. If `fromIndex` is negative, it's used as the 18036 * offset from the end of `array`. 18037 * 18038 * @static 18039 * @memberOf _ 18040 * @since 0.1.0 18041 * @category Array 18042 * @param {Array} array The array to inspect. 18043 * @param {*} value The value to search for. 18044 * @param {number} [fromIndex=0] The index to search from. 18045 * @returns {number} Returns the index of the matched value, else `-1`. 18046 * @example 18047 * 18048 * _.indexOf([1, 2, 1, 2], 2); 18049 * // => 1 18050 * 18051 * // Search from the `fromIndex`. 18052 * _.indexOf([1, 2, 1, 2], 2, 2); 18053 * // => 3 18054 */ 18055 function indexOf(array, value, fromIndex) { 18056 var length = array == null ? 0 : array.length; 18057 if (!length) { 18058 return -1; 18059 } 18060 var index = fromIndex == null ? 0 : toInteger(fromIndex); 18061 if (index < 0) { 18062 index = nativeMax(length + index, 0); 18063 } 18064 return baseIndexOf(array, value, index); 18065 } 18066 18067 /** 18068 * Gets all but the last element of `array`. 18069 * 18070 * @static 18071 * @memberOf _ 18072 * @since 0.1.0 18073 * @category Array 18074 * @param {Array} array The array to query. 18075 * @returns {Array} Returns the slice of `array`. 18076 * @example 18077 * 18078 * _.initial([1, 2, 3]); 18079 * // => [1, 2] 18080 */ 18081 function initial(array) { 18082 var length = array == null ? 0 : array.length; 18083 return length ? baseSlice(array, 0, -1) : []; 18084 } 18085 18086 /** 18087 * Creates an array of unique values that are included in all given arrays 18088 * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) 18089 * for equality comparisons. The order and references of result values are 18090 * determined by the first array. 18091 * 18092 * @static 18093 * @memberOf _ 18094 * @since 0.1.0 18095 * @category Array 18096 * @param {...Array} [arrays] The arrays to inspect. 18097 * @returns {Array} Returns the new array of intersecting values. 18098 * @example 18099 * 18100 * _.intersection([2, 1], [2, 3]); 18101 * // => [2] 18102 */ 18103 var intersection = baseRest(function(arrays) { 18104 var mapped = arrayMap(arrays, castArrayLikeObject); 18105 return (mapped.length && mapped[0] === arrays[0]) 18106 ? baseIntersection(mapped) 18107 : []; 18108 }); 18109 18110 /** 18111 * This method is like `_.intersection` except that it accepts `iteratee` 18112 * which is invoked for each element of each `arrays` to generate the criterion 18113 * by which they're compared. The order and references of result values are 18114 * determined by the first array. The iteratee is invoked with one argument: 18115 * (value). 18116 * 18117 * @static 18118 * @memberOf _ 18119 * @since 4.0.0 18120 * @category Array 18121 * @param {...Array} [arrays] The arrays to inspect. 18122 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. 18123 * @returns {Array} Returns the new array of intersecting values. 18124 * @example 18125 * 18126 * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor); 18127 * // => [2.1] 18128 * 18129 * // The `_.property` iteratee shorthand. 18130 * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); 18131 * // => [{ 'x': 1 }] 18132 */ 18133 var intersectionBy = baseRest(function(arrays) { 18134 var iteratee = last(arrays), 18135 mapped = arrayMap(arrays, castArrayLikeObject); 18136 18137 if (iteratee === last(mapped)) { 18138 iteratee = undefined; 18139 } else { 18140 mapped.pop(); 18141 } 18142 return (mapped.length && mapped[0] === arrays[0]) 18143 ? baseIntersection(mapped, getIteratee(iteratee, 2)) 18144 : []; 18145 }); 18146 18147 /** 18148 * This method is like `_.intersection` except that it accepts `comparator` 18149 * which is invoked to compare elements of `arrays`. The order and references 18150 * of result values are determined by the first array. The comparator is 18151 * invoked with two arguments: (arrVal, othVal). 18152 * 18153 * @static 18154 * @memberOf _ 18155 * @since 4.0.0 18156 * @category Array 18157 * @param {...Array} [arrays] The arrays to inspect. 18158 * @param {Function} [comparator] The comparator invoked per element. 18159 * @returns {Array} Returns the new array of intersecting values. 18160 * @example 18161 * 18162 * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; 18163 * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; 18164 * 18165 * _.intersectionWith(objects, others, _.isEqual); 18166 * // => [{ 'x': 1, 'y': 2 }] 18167 */ 18168 var intersectionWith = baseRest(function(arrays) { 18169 var comparator = last(arrays), 18170 mapped = arrayMap(arrays, castArrayLikeObject); 18171 18172 comparator = typeof comparator == 'function' ? comparator : undefined; 18173 if (comparator) { 18174 mapped.pop(); 18175 } 18176 return (mapped.length && mapped[0] === arrays[0]) 18177 ? baseIntersection(mapped, undefined, comparator) 18178 : []; 18179 }); 18180 18181 /** 18182 * Converts all elements in `array` into a string separated by `separator`. 18183 * 18184 * @static 18185 * @memberOf _ 18186 * @since 4.0.0 18187 * @category Array 18188 * @param {Array} array The array to convert. 18189 * @param {string} [separator=','] The element separator. 18190 * @returns {string} Returns the joined string. 18191 * @example 18192 * 18193 * _.join(['a', 'b', 'c'], '~'); 18194 * // => 'a~b~c' 18195 */ 18196 function join(array, separator) { 18197 return array == null ? '' : nativeJoin.call(array, separator); 18198 } 18199 18200 /** 18201 * Gets the last element of `array`. 18202 * 18203 * @static 18204 * @memberOf _ 18205 * @since 0.1.0 18206 * @category Array 18207 * @param {Array} array The array to query. 18208 * @returns {*} Returns the last element of `array`. 18209 * @example 18210 * 18211 * _.last([1, 2, 3]); 18212 * // => 3 18213 */ 18214 function last(array) { 18215 var length = array == null ? 0 : array.length; 18216 return length ? array[length - 1] : undefined; 18217 } 18218 18219 /** 18220 * This method is like `_.indexOf` except that it iterates over elements of 18221 * `array` from right to left. 18222 * 18223 * @static 18224 * @memberOf _ 18225 * @since 0.1.0 18226 * @category Array 18227 * @param {Array} array The array to inspect. 18228 * @param {*} value The value to search for. 18229 * @param {number} [fromIndex=array.length-1] The index to search from. 18230 * @returns {number} Returns the index of the matched value, else `-1`. 18231 * @example 18232 * 18233 * _.lastIndexOf([1, 2, 1, 2], 2); 18234 * // => 3 18235 * 18236 * // Search from the `fromIndex`. 18237 * _.lastIndexOf([1, 2, 1, 2], 2, 2); 18238 * // => 1 18239 */ 18240 function lastIndexOf(array, value, fromIndex) { 18241 var length = array == null ? 0 : array.length; 18242 if (!length) { 18243 return -1; 18244 } 18245 var index = length; 18246 if (fromIndex !== undefined) { 18247 index = toInteger(fromIndex); 18248 index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1); 18249 } 18250 return value === value 18251 ? strictLastIndexOf(array, value, index) 18252 : baseFindIndex(array, baseIsNaN, index, true); 18253 } 18254 18255 /** 18256 * Gets the element at index `n` of `array`. If `n` is negative, the nth 18257 * element from the end is returned. 18258 * 18259 * @static 18260 * @memberOf _ 18261 * @since 4.11.0 18262 * @category Array 18263 * @param {Array} array The array to query. 18264 * @param {number} [n=0] The index of the element to return. 18265 * @returns {*} Returns the nth element of `array`. 18266 * @example 18267 * 18268 * var array = ['a', 'b', 'c', 'd']; 18269 * 18270 * _.nth(array, 1); 18271 * // => 'b' 18272 * 18273 * _.nth(array, -2); 18274 * // => 'c'; 18275 */ 18276 function nth(array, n) { 18277 return (array && array.length) ? baseNth(array, toInteger(n)) : undefined; 18278 } 18279 18280 /** 18281 * Removes all given values from `array` using 18282 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) 18283 * for equality comparisons. 18284 * 18285 * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove` 18286 * to remove elements from an array by predicate. 18287 * 18288 * @static 18289 * @memberOf _ 18290 * @since 2.0.0 18291 * @category Array 18292 * @param {Array} array The array to modify. 18293 * @param {...*} [values] The values to remove. 18294 * @returns {Array} Returns `array`. 18295 * @example 18296 * 18297 * var array = ['a', 'b', 'c', 'a', 'b', 'c']; 18298 * 18299 * _.pull(array, 'a', 'c'); 18300 * console.log(array); 18301 * // => ['b', 'b'] 18302 */ 18303 var pull = baseRest(pullAll); 18304 18305 /** 18306 * This method is like `_.pull` except that it accepts an array of values to remove. 18307 * 18308 * **Note:** Unlike `_.difference`, this method mutates `array`. 18309 * 18310 * @static 18311 * @memberOf _ 18312 * @since 4.0.0 18313 * @category Array 18314 * @param {Array} array The array to modify. 18315 * @param {Array} values The values to remove. 18316 * @returns {Array} Returns `array`. 18317 * @example 18318 * 18319 * var array = ['a', 'b', 'c', 'a', 'b', 'c']; 18320 * 18321 * _.pullAll(array, ['a', 'c']); 18322 * console.log(array); 18323 * // => ['b', 'b'] 18324 */ 18325 function pullAll(array, values) { 18326 return (array && array.length && values && values.length) 18327 ? basePullAll(array, values) 18328 : array; 18329 } 18330 18331 /** 18332 * This method is like `_.pullAll` except that it accepts `iteratee` which is 18333 * invoked for each element of `array` and `values` to generate the criterion 18334 * by which they're compared. The iteratee is invoked with one argument: (value). 18335 * 18336 * **Note:** Unlike `_.differenceBy`, this method mutates `array`. 18337 * 18338 * @static 18339 * @memberOf _ 18340 * @since 4.0.0 18341 * @category Array 18342 * @param {Array} array The array to modify. 18343 * @param {Array} values The values to remove. 18344 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. 18345 * @returns {Array} Returns `array`. 18346 * @example 18347 * 18348 * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }]; 18349 * 18350 * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x'); 18351 * console.log(array); 18352 * // => [{ 'x': 2 }] 18353 */ 18354 function pullAllBy(array, values, iteratee) { 18355 return (array && array.length && values && values.length) 18356 ? basePullAll(array, values, getIteratee(iteratee, 2)) 18357 : array; 18358 } 18359 18360 /** 18361 * This method is like `_.pullAll` except that it accepts `comparator` which 18362 * is invoked to compare elements of `array` to `values`. The comparator is 18363 * invoked with two arguments: (arrVal, othVal). 18364 * 18365 * **Note:** Unlike `_.differenceWith`, this method mutates `array`. 18366 * 18367 * @static 18368 * @memberOf _ 18369 * @since 4.6.0 18370 * @category Array 18371 * @param {Array} array The array to modify. 18372 * @param {Array} values The values to remove. 18373 * @param {Function} [comparator] The comparator invoked per element. 18374 * @returns {Array} Returns `array`. 18375 * @example 18376 * 18377 * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }]; 18378 * 18379 * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual); 18380 * console.log(array); 18381 * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }] 18382 */ 18383 function pullAllWith(array, values, comparator) { 18384 return (array && array.length && values && values.length) 18385 ? basePullAll(array, values, undefined, comparator) 18386 : array; 18387 } 18388 18389 /** 18390 * Removes elements from `array` corresponding to `indexes` and returns an 18391 * array of removed elements. 18392 * 18393 * **Note:** Unlike `_.at`, this method mutates `array`. 18394 * 18395 * @static 18396 * @memberOf _ 18397 * @since 3.0.0 18398 * @category Array 18399 * @param {Array} array The array to modify. 18400 * @param {...(number|number[])} [indexes] The indexes of elements to remove. 18401 * @returns {Array} Returns the new array of removed elements. 18402 * @example 18403 * 18404 * var array = ['a', 'b', 'c', 'd']; 18405 * var pulled = _.pullAt(array, [1, 3]); 18406 * 18407 * console.log(array); 18408 * // => ['a', 'c'] 18409 * 18410 * console.log(pulled); 18411 * // => ['b', 'd'] 18412 */ 18413 var pullAt = flatRest(function(array, indexes) { 18414 var length = array == null ? 0 : array.length, 18415 result = baseAt(array, indexes); 18416 18417 basePullAt(array, arrayMap(indexes, function(index) { 18418 return isIndex(index, length) ? +index : index; 18419 }).sort(compareAscending)); 18420 18421 return result; 18422 }); 18423 18424 /** 18425 * Removes all elements from `array` that `predicate` returns truthy for 18426 * and returns an array of the removed elements. The predicate is invoked 18427 * with three arguments: (value, index, array). 18428 * 18429 * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull` 18430 * to pull elements from an array by value. 18431 * 18432 * @static 18433 * @memberOf _ 18434 * @since 2.0.0 18435 * @category Array 18436 * @param {Array} array The array to modify. 18437 * @param {Function} [predicate=_.identity] The function invoked per iteration. 18438 * @returns {Array} Returns the new array of removed elements. 18439 * @example 18440 * 18441 * var array = [1, 2, 3, 4]; 18442 * var evens = _.remove(array, function(n) { 18443 * return n % 2 == 0; 18444 * }); 18445 * 18446 * console.log(array); 18447 * // => [1, 3] 18448 * 18449 * console.log(evens); 18450 * // => [2, 4] 18451 */ 18452 function remove(array, predicate) { 18453 var result = []; 18454 if (!(array && array.length)) { 18455 return result; 18456 } 18457 var index = -1, 18458 indexes = [], 18459 length = array.length; 18460 18461 predicate = getIteratee(predicate, 3); 18462 while (++index < length) { 18463 var value = array[index]; 18464 if (predicate(value, index, array)) { 18465 result.push(value); 18466 indexes.push(index); 18467 } 18468 } 18469 basePullAt(array, indexes); 18470 return result; 18471 } 18472 18473 /** 18474 * Reverses `array` so that the first element becomes the last, the second 18475 * element becomes the second to last, and so on. 18476 * 18477 * **Note:** This method mutates `array` and is based on 18478 * [`Array#reverse`](https://mdn.io/Array/reverse). 18479 * 18480 * @static 18481 * @memberOf _ 18482 * @since 4.0.0 18483 * @category Array 18484 * @param {Array} array The array to modify. 18485 * @returns {Array} Returns `array`. 18486 * @example 18487 * 18488 * var array = [1, 2, 3]; 18489 * 18490 * _.reverse(array); 18491 * // => [3, 2, 1] 18492 * 18493 * console.log(array); 18494 * // => [3, 2, 1] 18495 */ 18496 function reverse(array) { 18497 return array == null ? array : nativeReverse.call(array); 18498 } 18499 18500 /** 18501 * Creates a slice of `array` from `start` up to, but not including, `end`. 18502 * 18503 * **Note:** This method is used instead of 18504 * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are 18505 * returned. 18506 * 18507 * @static 18508 * @memberOf _ 18509 * @since 3.0.0 18510 * @category Array 18511 * @param {Array} array The array to slice. 18512 * @param {number} [start=0] The start position. 18513 * @param {number} [end=array.length] The end position. 18514 * @returns {Array} Returns the slice of `array`. 18515 */ 18516 function slice(array, start, end) { 18517 var length = array == null ? 0 : array.length; 18518 if (!length) { 18519 return []; 18520 } 18521 if (end && typeof end != 'number' && isIterateeCall(array, start, end)) { 18522 start = 0; 18523 end = length; 18524 } 18525 else { 18526 start = start == null ? 0 : toInteger(start); 18527 end = end === undefined ? length : toInteger(end); 18528 } 18529 return baseSlice(array, start, end); 18530 } 18531 18532 /** 18533 * Uses a binary search to determine the lowest index at which `value` 18534 * should be inserted into `array` in order to maintain its sort order. 18535 * 18536 * @static 18537 * @memberOf _ 18538 * @since 0.1.0 18539 * @category Array 18540 * @param {Array} array The sorted array to inspect. 18541 * @param {*} value The value to evaluate. 18542 * @returns {number} Returns the index at which `value` should be inserted 18543 * into `array`. 18544 * @example 18545 * 18546 * _.sortedIndex([30, 50], 40); 18547 * // => 1 18548 */ 18549 function sortedIndex(array, value) { 18550 return baseSortedIndex(array, value); 18551 } 18552 18553 /** 18554 * This method is like `_.sortedIndex` except that it accepts `iteratee` 18555 * which is invoked for `value` and each element of `array` to compute their 18556 * sort ranking. The iteratee is invoked with one argument: (value). 18557 * 18558 * @static 18559 * @memberOf _ 18560 * @since 4.0.0 18561 * @category Array 18562 * @param {Array} array The sorted array to inspect. 18563 * @param {*} value The value to evaluate. 18564 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. 18565 * @returns {number} Returns the index at which `value` should be inserted 18566 * into `array`. 18567 * @example 18568 * 18569 * var objects = [{ 'x': 4 }, { 'x': 5 }]; 18570 * 18571 * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); 18572 * // => 0 18573 * 18574 * // The `_.property` iteratee shorthand. 18575 * _.sortedIndexBy(objects, { 'x': 4 }, 'x'); 18576 * // => 0 18577 */ 18578 function sortedIndexBy(array, value, iteratee) { 18579 return baseSortedIndexBy(array, value, getIteratee(iteratee, 2)); 18580 } 18581 18582 /** 18583 * This method is like `_.indexOf` except that it performs a binary 18584 * search on a sorted `array`. 18585 * 18586 * @static 18587 * @memberOf _ 18588 * @since 4.0.0 18589 * @category Array 18590 * @param {Array} array The array to inspect. 18591 * @param {*} value The value to search for. 18592 * @returns {number} Returns the index of the matched value, else `-1`. 18593 * @example 18594 * 18595 * _.sortedIndexOf([4, 5, 5, 5, 6], 5); 18596 * // => 1 18597 */ 18598 function sortedIndexOf(array, value) { 18599 var length = array == null ? 0 : array.length; 18600 if (length) { 18601 var index = baseSortedIndex(array, value); 18602 if (index < length && eq(array[index], value)) { 18603 return index; 18604 } 18605 } 18606 return -1; 18607 } 18608 18609 /** 18610 * This method is like `_.sortedIndex` except that it returns the highest 18611 * index at which `value` should be inserted into `array` in order to 18612 * maintain its sort order. 18613 * 18614 * @static 18615 * @memberOf _ 18616 * @since 3.0.0 18617 * @category Array 18618 * @param {Array} array The sorted array to inspect. 18619 * @param {*} value The value to evaluate. 18620 * @returns {number} Returns the index at which `value` should be inserted 18621 * into `array`. 18622 * @example 18623 * 18624 * _.sortedLastIndex([4, 5, 5, 5, 6], 5); 18625 * // => 4 18626 */ 18627 function sortedLastIndex(array, value) { 18628 return baseSortedIndex(array, value, true); 18629 } 18630 18631 /** 18632 * This method is like `_.sortedLastIndex` except that it accepts `iteratee` 18633 * which is invoked for `value` and each element of `array` to compute their 18634 * sort ranking. The iteratee is invoked with one argument: (value). 18635 * 18636 * @static 18637 * @memberOf _ 18638 * @since 4.0.0 18639 * @category Array 18640 * @param {Array} array The sorted array to inspect. 18641 * @param {*} value The value to evaluate. 18642 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. 18643 * @returns {number} Returns the index at which `value` should be inserted 18644 * into `array`. 18645 * @example 18646 * 18647 * var objects = [{ 'x': 4 }, { 'x': 5 }]; 18648 * 18649 * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); 18650 * // => 1 18651 * 18652 * // The `_.property` iteratee shorthand. 18653 * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x'); 18654 * // => 1 18655 */ 18656 function sortedLastIndexBy(array, value, iteratee) { 18657 return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true); 18658 } 18659 18660 /** 18661 * This method is like `_.lastIndexOf` except that it performs a binary 18662 * search on a sorted `array`. 18663 * 18664 * @static 18665 * @memberOf _ 18666 * @since 4.0.0 18667 * @category Array 18668 * @param {Array} array The array to inspect. 18669 * @param {*} value The value to search for. 18670 * @returns {number} Returns the index of the matched value, else `-1`. 18671 * @example 18672 * 18673 * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5); 18674 * // => 3 18675 */ 18676 function sortedLastIndexOf(array, value) { 18677 var length = array == null ? 0 : array.length; 18678 if (length) { 18679 var index = baseSortedIndex(array, value, true) - 1; 18680 if (eq(array[index], value)) { 18681 return index; 18682 } 18683 } 18684 return -1; 18685 } 18686 18687 /** 18688 * This method is like `_.uniq` except that it's designed and optimized 18689 * for sorted arrays. 18690 * 18691 * @static 18692 * @memberOf _ 18693 * @since 4.0.0 18694 * @category Array 18695 * @param {Array} array The array to inspect. 18696 * @returns {Array} Returns the new duplicate free array. 18697 * @example 18698 * 18699 * _.sortedUniq([1, 1, 2]); 18700 * // => [1, 2] 18701 */ 18702 function sortedUniq(array) { 18703 return (array && array.length) 18704 ? baseSortedUniq(array) 18705 : []; 18706 } 18707 18708 /** 18709 * This method is like `_.uniqBy` except that it's designed and optimized 18710 * for sorted arrays. 18711 * 18712 * @static 18713 * @memberOf _ 18714 * @since 4.0.0 18715 * @category Array 18716 * @param {Array} array The array to inspect. 18717 * @param {Function} [iteratee] The iteratee invoked per element. 18718 * @returns {Array} Returns the new duplicate free array. 18719 * @example 18720 * 18721 * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor); 18722 * // => [1.1, 2.3] 18723 */ 18724 function sortedUniqBy(array, iteratee) { 18725 return (array && array.length) 18726 ? baseSortedUniq(array, getIteratee(iteratee, 2)) 18727 : []; 18728 } 18729 18730 /** 18731 * Gets all but the first element of `array`. 18732 * 18733 * @static 18734 * @memberOf _ 18735 * @since 4.0.0 18736 * @category Array 18737 * @param {Array} array The array to query. 18738 * @returns {Array} Returns the slice of `array`. 18739 * @example 18740 * 18741 * _.tail([1, 2, 3]); 18742 * // => [2, 3] 18743 */ 18744 function tail(array) { 18745 var length = array == null ? 0 : array.length; 18746 return length ? baseSlice(array, 1, length) : []; 18747 } 18748 18749 /** 18750 * Creates a slice of `array` with `n` elements taken from the beginning. 18751 * 18752 * @static 18753 * @memberOf _ 18754 * @since 0.1.0 18755 * @category Array 18756 * @param {Array} array The array to query. 18757 * @param {number} [n=1] The number of elements to take. 18758 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 18759 * @returns {Array} Returns the slice of `array`. 18760 * @example 18761 * 18762 * _.take([1, 2, 3]); 18763 * // => [1] 18764 * 18765 * _.take([1, 2, 3], 2); 18766 * // => [1, 2] 18767 * 18768 * _.take([1, 2, 3], 5); 18769 * // => [1, 2, 3] 18770 * 18771 * _.take([1, 2, 3], 0); 18772 * // => [] 18773 */ 18774 function take(array, n, guard) { 18775 if (!(array && array.length)) { 18776 return []; 18777 } 18778 n = (guard || n === undefined) ? 1 : toInteger(n); 18779 return baseSlice(array, 0, n < 0 ? 0 : n); 18780 } 18781 18782 /** 18783 * Creates a slice of `array` with `n` elements taken from the end. 18784 * 18785 * @static 18786 * @memberOf _ 18787 * @since 3.0.0 18788 * @category Array 18789 * @param {Array} array The array to query. 18790 * @param {number} [n=1] The number of elements to take. 18791 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 18792 * @returns {Array} Returns the slice of `array`. 18793 * @example 18794 * 18795 * _.takeRight([1, 2, 3]); 18796 * // => [3] 18797 * 18798 * _.takeRight([1, 2, 3], 2); 18799 * // => [2, 3] 18800 * 18801 * _.takeRight([1, 2, 3], 5); 18802 * // => [1, 2, 3] 18803 * 18804 * _.takeRight([1, 2, 3], 0); 18805 * // => [] 18806 */ 18807 function takeRight(array, n, guard) { 18808 var length = array == null ? 0 : array.length; 18809 if (!length) { 18810 return []; 18811 } 18812 n = (guard || n === undefined) ? 1 : toInteger(n); 18813 n = length - n; 18814 return baseSlice(array, n < 0 ? 0 : n, length); 18815 } 18816 18817 /** 18818 * Creates a slice of `array` with elements taken from the end. Elements are 18819 * taken until `predicate` returns falsey. The predicate is invoked with 18820 * three arguments: (value, index, array). 18821 * 18822 * @static 18823 * @memberOf _ 18824 * @since 3.0.0 18825 * @category Array 18826 * @param {Array} array The array to query. 18827 * @param {Function} [predicate=_.identity] The function invoked per iteration. 18828 * @returns {Array} Returns the slice of `array`. 18829 * @example 18830 * 18831 * var users = [ 18832 * { 'user': 'barney', 'active': true }, 18833 * { 'user': 'fred', 'active': false }, 18834 * { 'user': 'pebbles', 'active': false } 18835 * ]; 18836 * 18837 * _.takeRightWhile(users, function(o) { return !o.active; }); 18838 * // => objects for ['fred', 'pebbles'] 18839 * 18840 * // The `_.matches` iteratee shorthand. 18841 * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false }); 18842 * // => objects for ['pebbles'] 18843 * 18844 * // The `_.matchesProperty` iteratee shorthand. 18845 * _.takeRightWhile(users, ['active', false]); 18846 * // => objects for ['fred', 'pebbles'] 18847 * 18848 * // The `_.property` iteratee shorthand. 18849 * _.takeRightWhile(users, 'active'); 18850 * // => [] 18851 */ 18852 function takeRightWhile(array, predicate) { 18853 return (array && array.length) 18854 ? baseWhile(array, getIteratee(predicate, 3), false, true) 18855 : []; 18856 } 18857 18858 /** 18859 * Creates a slice of `array` with elements taken from the beginning. Elements 18860 * are taken until `predicate` returns falsey. The predicate is invoked with 18861 * three arguments: (value, index, array). 18862 * 18863 * @static 18864 * @memberOf _ 18865 * @since 3.0.0 18866 * @category Array 18867 * @param {Array} array The array to query. 18868 * @param {Function} [predicate=_.identity] The function invoked per iteration. 18869 * @returns {Array} Returns the slice of `array`. 18870 * @example 18871 * 18872 * var users = [ 18873 * { 'user': 'barney', 'active': false }, 18874 * { 'user': 'fred', 'active': false }, 18875 * { 'user': 'pebbles', 'active': true } 18876 * ]; 18877 * 18878 * _.takeWhile(users, function(o) { return !o.active; }); 18879 * // => objects for ['barney', 'fred'] 18880 * 18881 * // The `_.matches` iteratee shorthand. 18882 * _.takeWhile(users, { 'user': 'barney', 'active': false }); 18883 * // => objects for ['barney'] 18884 * 18885 * // The `_.matchesProperty` iteratee shorthand. 18886 * _.takeWhile(users, ['active', false]); 18887 * // => objects for ['barney', 'fred'] 18888 * 18889 * // The `_.property` iteratee shorthand. 18890 * _.takeWhile(users, 'active'); 18891 * // => [] 18892 */ 18893 function takeWhile(array, predicate) { 18894 return (array && array.length) 18895 ? baseWhile(array, getIteratee(predicate, 3)) 18896 : []; 18897 } 18898 18899 /** 18900 * Creates an array of unique values, in order, from all given arrays using 18901 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) 18902 * for equality comparisons. 18903 * 18904 * @static 18905 * @memberOf _ 18906 * @since 0.1.0 18907 * @category Array 18908 * @param {...Array} [arrays] The arrays to inspect. 18909 * @returns {Array} Returns the new array of combined values. 18910 * @example 18911 * 18912 * _.union([2], [1, 2]); 18913 * // => [2, 1] 18914 */ 18915 var union = baseRest(function(arrays) { 18916 return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true)); 18917 }); 18918 18919 /** 18920 * This method is like `_.union` except that it accepts `iteratee` which is 18921 * invoked for each element of each `arrays` to generate the criterion by 18922 * which uniqueness is computed. Result values are chosen from the first 18923 * array in which the value occurs. The iteratee is invoked with one argument: 18924 * (value). 18925 * 18926 * @static 18927 * @memberOf _ 18928 * @since 4.0.0 18929 * @category Array 18930 * @param {...Array} [arrays] The arrays to inspect. 18931 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. 18932 * @returns {Array} Returns the new array of combined values. 18933 * @example 18934 * 18935 * _.unionBy([2.1], [1.2, 2.3], Math.floor); 18936 * // => [2.1, 1.2] 18937 * 18938 * // The `_.property` iteratee shorthand. 18939 * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); 18940 * // => [{ 'x': 1 }, { 'x': 2 }] 18941 */ 18942 var unionBy = baseRest(function(arrays) { 18943 var iteratee = last(arrays); 18944 if (isArrayLikeObject(iteratee)) { 18945 iteratee = undefined; 18946 } 18947 return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)); 18948 }); 18949 18950 /** 18951 * This method is like `_.union` except that it accepts `comparator` which 18952 * is invoked to compare elements of `arrays`. Result values are chosen from 18953 * the first array in which the value occurs. The comparator is invoked 18954 * with two arguments: (arrVal, othVal). 18955 * 18956 * @static 18957 * @memberOf _ 18958 * @since 4.0.0 18959 * @category Array 18960 * @param {...Array} [arrays] The arrays to inspect. 18961 * @param {Function} [comparator] The comparator invoked per element. 18962 * @returns {Array} Returns the new array of combined values. 18963 * @example 18964 * 18965 * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; 18966 * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; 18967 * 18968 * _.unionWith(objects, others, _.isEqual); 18969 * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] 18970 */ 18971 var unionWith = baseRest(function(arrays) { 18972 var comparator = last(arrays); 18973 comparator = typeof comparator == 'function' ? comparator : undefined; 18974 return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator); 18975 }); 18976 18977 /** 18978 * Creates a duplicate-free version of an array, using 18979 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) 18980 * for equality comparisons, in which only the first occurrence of each element 18981 * is kept. The order of result values is determined by the order they occur 18982 * in the array. 18983 * 18984 * @static 18985 * @memberOf _ 18986 * @since 0.1.0 18987 * @category Array 18988 * @param {Array} array The array to inspect. 18989 * @returns {Array} Returns the new duplicate free array. 18990 * @example 18991 * 18992 * _.uniq([2, 1, 2]); 18993 * // => [2, 1] 18994 */ 18995 function uniq(array) { 18996 return (array && array.length) ? baseUniq(array) : []; 18997 } 18998 18999 /** 19000 * This method is like `_.uniq` except that it accepts `iteratee` which is 19001 * invoked for each element in `array` to generate the criterion by which 19002 * uniqueness is computed. The order of result values is determined by the 19003 * order they occur in the array. The iteratee is invoked with one argument: 19004 * (value). 19005 * 19006 * @static 19007 * @memberOf _ 19008 * @since 4.0.0 19009 * @category Array 19010 * @param {Array} array The array to inspect. 19011 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. 19012 * @returns {Array} Returns the new duplicate free array. 19013 * @example 19014 * 19015 * _.uniqBy([2.1, 1.2, 2.3], Math.floor); 19016 * // => [2.1, 1.2] 19017 * 19018 * // The `_.property` iteratee shorthand. 19019 * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); 19020 * // => [{ 'x': 1 }, { 'x': 2 }] 19021 */ 19022 function uniqBy(array, iteratee) { 19023 return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : []; 19024 } 19025 19026 /** 19027 * This method is like `_.uniq` except that it accepts `comparator` which 19028 * is invoked to compare elements of `array`. The order of result values is 19029 * determined by the order they occur in the array.The comparator is invoked 19030 * with two arguments: (arrVal, othVal). 19031 * 19032 * @static 19033 * @memberOf _ 19034 * @since 4.0.0 19035 * @category Array 19036 * @param {Array} array The array to inspect. 19037 * @param {Function} [comparator] The comparator invoked per element. 19038 * @returns {Array} Returns the new duplicate free array. 19039 * @example 19040 * 19041 * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }]; 19042 * 19043 * _.uniqWith(objects, _.isEqual); 19044 * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }] 19045 */ 19046 function uniqWith(array, comparator) { 19047 comparator = typeof comparator == 'function' ? comparator : undefined; 19048 return (array && array.length) ? baseUniq(array, undefined, comparator) : []; 19049 } 19050 19051 /** 19052 * This method is like `_.zip` except that it accepts an array of grouped 19053 * elements and creates an array regrouping the elements to their pre-zip 19054 * configuration. 19055 * 19056 * @static 19057 * @memberOf _ 19058 * @since 1.2.0 19059 * @category Array 19060 * @param {Array} array The array of grouped elements to process. 19061 * @returns {Array} Returns the new array of regrouped elements. 19062 * @example 19063 * 19064 * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]); 19065 * // => [['a', 1, true], ['b', 2, false]] 19066 * 19067 * _.unzip(zipped); 19068 * // => [['a', 'b'], [1, 2], [true, false]] 19069 */ 19070 function unzip(array) { 19071 if (!(array && array.length)) { 19072 return []; 19073 } 19074 var length = 0; 19075 array = arrayFilter(array, function(group) { 19076 if (isArrayLikeObject(group)) { 19077 length = nativeMax(group.length, length); 19078 return true; 19079 } 19080 }); 19081 return baseTimes(length, function(index) { 19082 return arrayMap(array, baseProperty(index)); 19083 }); 19084 } 19085 19086 /** 19087 * This method is like `_.unzip` except that it accepts `iteratee` to specify 19088 * how regrouped values should be combined. The iteratee is invoked with the 19089 * elements of each group: (...group). 19090 * 19091 * @static 19092 * @memberOf _ 19093 * @since 3.8.0 19094 * @category Array 19095 * @param {Array} array The array of grouped elements to process. 19096 * @param {Function} [iteratee=_.identity] The function to combine 19097 * regrouped values. 19098 * @returns {Array} Returns the new array of regrouped elements. 19099 * @example 19100 * 19101 * var zipped = _.zip([1, 2], [10, 20], [100, 200]); 19102 * // => [[1, 10, 100], [2, 20, 200]] 19103 * 19104 * _.unzipWith(zipped, _.add); 19105 * // => [3, 30, 300] 19106 */ 19107 function unzipWith(array, iteratee) { 19108 if (!(array && array.length)) { 19109 return []; 19110 } 19111 var result = unzip(array); 19112 if (iteratee == null) { 19113 return result; 19114 } 19115 return arrayMap(result, function(group) { 19116 return apply(iteratee, undefined, group); 19117 }); 19118 } 19119 19120 /** 19121 * Creates an array excluding all given values using 19122 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) 19123 * for equality comparisons. 19124 * 19125 * **Note:** Unlike `_.pull`, this method returns a new array. 19126 * 19127 * @static 19128 * @memberOf _ 19129 * @since 0.1.0 19130 * @category Array 19131 * @param {Array} array The array to inspect. 19132 * @param {...*} [values] The values to exclude. 19133 * @returns {Array} Returns the new array of filtered values. 19134 * @see _.difference, _.xor 19135 * @example 19136 * 19137 * _.without([2, 1, 2, 3], 1, 2); 19138 * // => [3] 19139 */ 19140 var without = baseRest(function(array, values) { 19141 return isArrayLikeObject(array) 19142 ? baseDifference(array, values) 19143 : []; 19144 }); 19145 19146 /** 19147 * Creates an array of unique values that is the 19148 * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference) 19149 * of the given arrays. The order of result values is determined by the order 19150 * they occur in the arrays. 19151 * 19152 * @static 19153 * @memberOf _ 19154 * @since 2.4.0 19155 * @category Array 19156 * @param {...Array} [arrays] The arrays to inspect. 19157 * @returns {Array} Returns the new array of filtered values. 19158 * @see _.difference, _.without 19159 * @example 19160 * 19161 * _.xor([2, 1], [2, 3]); 19162 * // => [1, 3] 19163 */ 19164 var xor = baseRest(function(arrays) { 19165 return baseXor(arrayFilter(arrays, isArrayLikeObject)); 19166 }); 19167 19168 /** 19169 * This method is like `_.xor` except that it accepts `iteratee` which is 19170 * invoked for each element of each `arrays` to generate the criterion by 19171 * which by which they're compared. The order of result values is determined 19172 * by the order they occur in the arrays. The iteratee is invoked with one 19173 * argument: (value). 19174 * 19175 * @static 19176 * @memberOf _ 19177 * @since 4.0.0 19178 * @category Array 19179 * @param {...Array} [arrays] The arrays to inspect. 19180 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. 19181 * @returns {Array} Returns the new array of filtered values. 19182 * @example 19183 * 19184 * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor); 19185 * // => [1.2, 3.4] 19186 * 19187 * // The `_.property` iteratee shorthand. 19188 * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); 19189 * // => [{ 'x': 2 }] 19190 */ 19191 var xorBy = baseRest(function(arrays) { 19192 var iteratee = last(arrays); 19193 if (isArrayLikeObject(iteratee)) { 19194 iteratee = undefined; 19195 } 19196 return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2)); 19197 }); 19198 19199 /** 19200 * This method is like `_.xor` except that it accepts `comparator` which is 19201 * invoked to compare elements of `arrays`. The order of result values is 19202 * determined by the order they occur in the arrays. The comparator is invoked 19203 * with two arguments: (arrVal, othVal). 19204 * 19205 * @static 19206 * @memberOf _ 19207 * @since 4.0.0 19208 * @category Array 19209 * @param {...Array} [arrays] The arrays to inspect. 19210 * @param {Function} [comparator] The comparator invoked per element. 19211 * @returns {Array} Returns the new array of filtered values. 19212 * @example 19213 * 19214 * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; 19215 * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; 19216 * 19217 * _.xorWith(objects, others, _.isEqual); 19218 * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] 19219 */ 19220 var xorWith = baseRest(function(arrays) { 19221 var comparator = last(arrays); 19222 comparator = typeof comparator == 'function' ? comparator : undefined; 19223 return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator); 19224 }); 19225 19226 /** 19227 * Creates an array of grouped elements, the first of which contains the 19228 * first elements of the given arrays, the second of which contains the 19229 * second elements of the given arrays, and so on. 19230 * 19231 * @static 19232 * @memberOf _ 19233 * @since 0.1.0 19234 * @category Array 19235 * @param {...Array} [arrays] The arrays to process. 19236 * @returns {Array} Returns the new array of grouped elements. 19237 * @example 19238 * 19239 * _.zip(['a', 'b'], [1, 2], [true, false]); 19240 * // => [['a', 1, true], ['b', 2, false]] 19241 */ 19242 var zip = baseRest(unzip); 19243 19244 /** 19245 * This method is like `_.fromPairs` except that it accepts two arrays, 19246 * one of property identifiers and one of corresponding values. 19247 * 19248 * @static 19249 * @memberOf _ 19250 * @since 0.4.0 19251 * @category Array 19252 * @param {Array} [props=[]] The property identifiers. 19253 * @param {Array} [values=[]] The property values. 19254 * @returns {Object} Returns the new object. 19255 * @example 19256 * 19257 * _.zipObject(['a', 'b'], [1, 2]); 19258 * // => { 'a': 1, 'b': 2 } 19259 */ 19260 function zipObject(props, values) { 19261 return baseZipObject(props || [], values || [], assignValue); 19262 } 19263 19264 /** 19265 * This method is like `_.zipObject` except that it supports property paths. 19266 * 19267 * @static 19268 * @memberOf _ 19269 * @since 4.1.0 19270 * @category Array 19271 * @param {Array} [props=[]] The property identifiers. 19272 * @param {Array} [values=[]] The property values. 19273 * @returns {Object} Returns the new object. 19274 * @example 19275 * 19276 * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]); 19277 * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } } 19278 */ 19279 function zipObjectDeep(props, values) { 19280 return baseZipObject(props || [], values || [], baseSet); 19281 } 19282 19283 /** 19284 * This method is like `_.zip` except that it accepts `iteratee` to specify 19285 * how grouped values should be combined. The iteratee is invoked with the 19286 * elements of each group: (...group). 19287 * 19288 * @static 19289 * @memberOf _ 19290 * @since 3.8.0 19291 * @category Array 19292 * @param {...Array} [arrays] The arrays to process. 19293 * @param {Function} [iteratee=_.identity] The function to combine 19294 * grouped values. 19295 * @returns {Array} Returns the new array of grouped elements. 19296 * @example 19297 * 19298 * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) { 19299 * return a + b + c; 19300 * }); 19301 * // => [111, 222] 19302 */ 19303 var zipWith = baseRest(function(arrays) { 19304 var length = arrays.length, 19305 iteratee = length > 1 ? arrays[length - 1] : undefined; 19306 19307 iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined; 19308 return unzipWith(arrays, iteratee); 19309 }); 19310 19311 /*------------------------------------------------------------------------*/ 19312 19313 /** 19314 * Creates a `lodash` wrapper instance that wraps `value` with explicit method 19315 * chain sequences enabled. The result of such sequences must be unwrapped 19316 * with `_#value`. 19317 * 19318 * @static 19319 * @memberOf _ 19320 * @since 1.3.0 19321 * @category Seq 19322 * @param {*} value The value to wrap. 19323 * @returns {Object} Returns the new `lodash` wrapper instance. 19324 * @example 19325 * 19326 * var users = [ 19327 * { 'user': 'barney', 'age': 36 }, 19328 * { 'user': 'fred', 'age': 40 }, 19329 * { 'user': 'pebbles', 'age': 1 } 19330 * ]; 19331 * 19332 * var youngest = _ 19333 * .chain(users) 19334 * .sortBy('age') 19335 * .map(function(o) { 19336 * return o.user + ' is ' + o.age; 19337 * }) 19338 * .head() 19339 * .value(); 19340 * // => 'pebbles is 1' 19341 */ 19342 function chain(value) { 19343 var result = lodash(value); 19344 result.__chain__ = true; 19345 return result; 19346 } 19347 19348 /** 19349 * This method invokes `interceptor` and returns `value`. The interceptor 19350 * is invoked with one argument; (value). The purpose of this method is to 19351 * "tap into" a method chain sequence in order to modify intermediate results. 19352 * 19353 * @static 19354 * @memberOf _ 19355 * @since 0.1.0 19356 * @category Seq 19357 * @param {*} value The value to provide to `interceptor`. 19358 * @param {Function} interceptor The function to invoke. 19359 * @returns {*} Returns `value`. 19360 * @example 19361 * 19362 * _([1, 2, 3]) 19363 * .tap(function(array) { 19364 * // Mutate input array. 19365 * array.pop(); 19366 * }) 19367 * .reverse() 19368 * .value(); 19369 * // => [2, 1] 19370 */ 19371 function tap(value, interceptor) { 19372 interceptor(value); 19373 return value; 19374 } 19375 19376 /** 19377 * This method is like `_.tap` except that it returns the result of `interceptor`. 19378 * The purpose of this method is to "pass thru" values replacing intermediate 19379 * results in a method chain sequence. 19380 * 19381 * @static 19382 * @memberOf _ 19383 * @since 3.0.0 19384 * @category Seq 19385 * @param {*} value The value to provide to `interceptor`. 19386 * @param {Function} interceptor The function to invoke. 19387 * @returns {*} Returns the result of `interceptor`. 19388 * @example 19389 * 19390 * _(' abc ') 19391 * .chain() 19392 * .trim() 19393 * .thru(function(value) { 19394 * return [value]; 19395 * }) 19396 * .value(); 19397 * // => ['abc'] 19398 */ 19399 function thru(value, interceptor) { 19400 return interceptor(value); 19401 } 19402 19403 /** 19404 * This method is the wrapper version of `_.at`. 19405 * 19406 * @name at 19407 * @memberOf _ 19408 * @since 1.0.0 19409 * @category Seq 19410 * @param {...(string|string[])} [paths] The property paths to pick. 19411 * @returns {Object} Returns the new `lodash` wrapper instance. 19412 * @example 19413 * 19414 * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; 19415 * 19416 * _(object).at(['a[0].b.c', 'a[1]']).value(); 19417 * // => [3, 4] 19418 */ 19419 var wrapperAt = flatRest(function(paths) { 19420 var length = paths.length, 19421 start = length ? paths[0] : 0, 19422 value = this.__wrapped__, 19423 interceptor = function(object) { return baseAt(object, paths); }; 19424 19425 if (length > 1 || this.__actions__.length || 19426 !(value instanceof LazyWrapper) || !isIndex(start)) { 19427 return this.thru(interceptor); 19428 } 19429 value = value.slice(start, +start + (length ? 1 : 0)); 19430 value.__actions__.push({ 19431 'func': thru, 19432 'args': [interceptor], 19433 'thisArg': undefined 19434 }); 19435 return new LodashWrapper(value, this.__chain__).thru(function(array) { 19436 if (length && !array.length) { 19437 array.push(undefined); 19438 } 19439 return array; 19440 }); 19441 }); 19442 19443 /** 19444 * Creates a `lodash` wrapper instance with explicit method chain sequences enabled. 19445 * 19446 * @name chain 19447 * @memberOf _ 19448 * @since 0.1.0 19449 * @category Seq 19450 * @returns {Object} Returns the new `lodash` wrapper instance. 19451 * @example 19452 * 19453 * var users = [ 19454 * { 'user': 'barney', 'age': 36 }, 19455 * { 'user': 'fred', 'age': 40 } 19456 * ]; 19457 * 19458 * // A sequence without explicit chaining. 19459 * _(users).head(); 19460 * // => { 'user': 'barney', 'age': 36 } 19461 * 19462 * // A sequence with explicit chaining. 19463 * _(users) 19464 * .chain() 19465 * .head() 19466 * .pick('user') 19467 * .value(); 19468 * // => { 'user': 'barney' } 19469 */ 19470 function wrapperChain() { 19471 return chain(this); 19472 } 19473 19474 /** 19475 * Executes the chain sequence and returns the wrapped result. 19476 * 19477 * @name commit 19478 * @memberOf _ 19479 * @since 3.2.0 19480 * @category Seq 19481 * @returns {Object} Returns the new `lodash` wrapper instance. 19482 * @example 19483 * 19484 * var array = [1, 2]; 19485 * var wrapped = _(array).push(3); 19486 * 19487 * console.log(array); 19488 * // => [1, 2] 19489 * 19490 * wrapped = wrapped.commit(); 19491 * console.log(array); 19492 * // => [1, 2, 3] 19493 * 19494 * wrapped.last(); 19495 * // => 3 19496 * 19497 * console.log(array); 19498 * // => [1, 2, 3] 19499 */ 19500 function wrapperCommit() { 19501 return new LodashWrapper(this.value(), this.__chain__); 19502 } 19503 19504 /** 19505 * Gets the next value on a wrapped object following the 19506 * [iterator protocol](https://mdn.io/iteration_protocols#iterator). 19507 * 19508 * @name next 19509 * @memberOf _ 19510 * @since 4.0.0 19511 * @category Seq 19512 * @returns {Object} Returns the next iterator value. 19513 * @example 19514 * 19515 * var wrapped = _([1, 2]); 19516 * 19517 * wrapped.next(); 19518 * // => { 'done': false, 'value': 1 } 19519 * 19520 * wrapped.next(); 19521 * // => { 'done': false, 'value': 2 } 19522 * 19523 * wrapped.next(); 19524 * // => { 'done': true, 'value': undefined } 19525 */ 19526 function wrapperNext() { 19527 if (this.__values__ === undefined) { 19528 this.__values__ = toArray(this.value()); 19529 } 19530 var done = this.__index__ >= this.__values__.length, 19531 value = done ? undefined : this.__values__[this.__index__++]; 19532 19533 return { 'done': done, 'value': value }; 19534 } 19535 19536 /** 19537 * Enables the wrapper to be iterable. 19538 * 19539 * @name Symbol.iterator 19540 * @memberOf _ 19541 * @since 4.0.0 19542 * @category Seq 19543 * @returns {Object} Returns the wrapper object. 19544 * @example 19545 * 19546 * var wrapped = _([1, 2]); 19547 * 19548 * wrapped[Symbol.iterator]() === wrapped; 19549 * // => true 19550 * 19551 * Array.from(wrapped); 19552 * // => [1, 2] 19553 */ 19554 function wrapperToIterator() { 19555 return this; 19556 } 19557 19558 /** 19559 * Creates a clone of the chain sequence planting `value` as the wrapped value. 19560 * 19561 * @name plant 19562 * @memberOf _ 19563 * @since 3.2.0 19564 * @category Seq 19565 * @param {*} value The value to plant. 19566 * @returns {Object} Returns the new `lodash` wrapper instance. 19567 * @example 19568 * 19569 * function square(n) { 19570 * return n * n; 19571 * } 19572 * 19573 * var wrapped = _([1, 2]).map(square); 19574 * var other = wrapped.plant([3, 4]); 19575 * 19576 * other.value(); 19577 * // => [9, 16] 19578 * 19579 * wrapped.value(); 19580 * // => [1, 4] 19581 */ 19582 function wrapperPlant(value) { 19583 var result, 19584 parent = this; 19585 19586 while (parent instanceof baseLodash) { 19587 var clone = wrapperClone(parent); 19588 clone.__index__ = 0; 19589 clone.__values__ = undefined; 19590 if (result) { 19591 previous.__wrapped__ = clone; 19592 } else { 19593 result = clone; 19594 } 19595 var previous = clone; 19596 parent = parent.__wrapped__; 19597 } 19598 previous.__wrapped__ = value; 19599 return result; 19600 } 19601 19602 /** 19603 * This method is the wrapper version of `_.reverse`. 19604 * 19605 * **Note:** This method mutates the wrapped array. 19606 * 19607 * @name reverse 19608 * @memberOf _ 19609 * @since 0.1.0 19610 * @category Seq 19611 * @returns {Object} Returns the new `lodash` wrapper instance. 19612 * @example 19613 * 19614 * var array = [1, 2, 3]; 19615 * 19616 * _(array).reverse().value() 19617 * // => [3, 2, 1] 19618 * 19619 * console.log(array); 19620 * // => [3, 2, 1] 19621 */ 19622 function wrapperReverse() { 19623 var value = this.__wrapped__; 19624 if (value instanceof LazyWrapper) { 19625 var wrapped = value; 19626 if (this.__actions__.length) { 19627 wrapped = new LazyWrapper(this); 19628 } 19629 wrapped = wrapped.reverse(); 19630 wrapped.__actions__.push({ 19631 'func': thru, 19632 'args': [reverse], 19633 'thisArg': undefined 19634 }); 19635 return new LodashWrapper(wrapped, this.__chain__); 19636 } 19637 return this.thru(reverse); 19638 } 19639 19640 /** 19641 * Executes the chain sequence to resolve the unwrapped value. 19642 * 19643 * @name value 19644 * @memberOf _ 19645 * @since 0.1.0 19646 * @alias toJSON, valueOf 19647 * @category Seq 19648 * @returns {*} Returns the resolved unwrapped value. 19649 * @example 19650 * 19651 * _([1, 2, 3]).value(); 19652 * // => [1, 2, 3] 19653 */ 19654 function wrapperValue() { 19655 return baseWrapperValue(this.__wrapped__, this.__actions__); 19656 } 19657 19658 /*------------------------------------------------------------------------*/ 19659 19660 /** 19661 * Creates an object composed of keys generated from the results of running 19662 * each element of `collection` thru `iteratee`. The corresponding value of 19663 * each key is the number of times the key was returned by `iteratee`. The 19664 * iteratee is invoked with one argument: (value). 19665 * 19666 * @static 19667 * @memberOf _ 19668 * @since 0.5.0 19669 * @category Collection 19670 * @param {Array|Object} collection The collection to iterate over. 19671 * @param {Function} [iteratee=_.identity] The iteratee to transform keys. 19672 * @returns {Object} Returns the composed aggregate object. 19673 * @example 19674 * 19675 * _.countBy([6.1, 4.2, 6.3], Math.floor); 19676 * // => { '4': 1, '6': 2 } 19677 * 19678 * // The `_.property` iteratee shorthand. 19679 * _.countBy(['one', 'two', 'three'], 'length'); 19680 * // => { '3': 2, '5': 1 } 19681 */ 19682 var countBy = createAggregator(function(result, value, key) { 19683 if (hasOwnProperty.call(result, key)) { 19684 ++result[key]; 19685 } else { 19686 baseAssignValue(result, key, 1); 19687 } 19688 }); 19689 19690 /** 19691 * Checks if `predicate` returns truthy for **all** elements of `collection`. 19692 * Iteration is stopped once `predicate` returns falsey. The predicate is 19693 * invoked with three arguments: (value, index|key, collection). 19694 * 19695 * **Note:** This method returns `true` for 19696 * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because 19697 * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of 19698 * elements of empty collections. 19699 * 19700 * @static 19701 * @memberOf _ 19702 * @since 0.1.0 19703 * @category Collection 19704 * @param {Array|Object} collection The collection to iterate over. 19705 * @param {Function} [predicate=_.identity] The function invoked per iteration. 19706 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 19707 * @returns {boolean} Returns `true` if all elements pass the predicate check, 19708 * else `false`. 19709 * @example 19710 * 19711 * _.every([true, 1, null, 'yes'], Boolean); 19712 * // => false 19713 * 19714 * var users = [ 19715 * { 'user': 'barney', 'age': 36, 'active': false }, 19716 * { 'user': 'fred', 'age': 40, 'active': false } 19717 * ]; 19718 * 19719 * // The `_.matches` iteratee shorthand. 19720 * _.every(users, { 'user': 'barney', 'active': false }); 19721 * // => false 19722 * 19723 * // The `_.matchesProperty` iteratee shorthand. 19724 * _.every(users, ['active', false]); 19725 * // => true 19726 * 19727 * // The `_.property` iteratee shorthand. 19728 * _.every(users, 'active'); 19729 * // => false 19730 */ 19731 function every(collection, predicate, guard) { 19732 var func = isArray(collection) ? arrayEvery : baseEvery; 19733 if (guard && isIterateeCall(collection, predicate, guard)) { 19734 predicate = undefined; 19735 } 19736 return func(collection, getIteratee(predicate, 3)); 19737 } 19738 19739 /** 19740 * Iterates over elements of `collection`, returning an array of all elements 19741 * `predicate` returns truthy for. The predicate is invoked with three 19742 * arguments: (value, index|key, collection). 19743 * 19744 * **Note:** Unlike `_.remove`, this method returns a new array. 19745 * 19746 * @static 19747 * @memberOf _ 19748 * @since 0.1.0 19749 * @category Collection 19750 * @param {Array|Object} collection The collection to iterate over. 19751 * @param {Function} [predicate=_.identity] The function invoked per iteration. 19752 * @returns {Array} Returns the new filtered array. 19753 * @see _.reject 19754 * @example 19755 * 19756 * var users = [ 19757 * { 'user': 'barney', 'age': 36, 'active': true }, 19758 * { 'user': 'fred', 'age': 40, 'active': false } 19759 * ]; 19760 * 19761 * _.filter(users, function(o) { return !o.active; }); 19762 * // => objects for ['fred'] 19763 * 19764 * // The `_.matches` iteratee shorthand. 19765 * _.filter(users, { 'age': 36, 'active': true }); 19766 * // => objects for ['barney'] 19767 * 19768 * // The `_.matchesProperty` iteratee shorthand. 19769 * _.filter(users, ['active', false]); 19770 * // => objects for ['fred'] 19771 * 19772 * // The `_.property` iteratee shorthand. 19773 * _.filter(users, 'active'); 19774 * // => objects for ['barney'] 19775 * 19776 * // Combining several predicates using `_.overEvery` or `_.overSome`. 19777 * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); 19778 * // => objects for ['fred', 'barney'] 19779 */ 19780 function filter(collection, predicate) { 19781 var func = isArray(collection) ? arrayFilter : baseFilter; 19782 return func(collection, getIteratee(predicate, 3)); 19783 } 19784 19785 /** 19786 * Iterates over elements of `collection`, returning the first element 19787 * `predicate` returns truthy for. The predicate is invoked with three 19788 * arguments: (value, index|key, collection). 19789 * 19790 * @static 19791 * @memberOf _ 19792 * @since 0.1.0 19793 * @category Collection 19794 * @param {Array|Object} collection The collection to inspect. 19795 * @param {Function} [predicate=_.identity] The function invoked per iteration. 19796 * @param {number} [fromIndex=0] The index to search from. 19797 * @returns {*} Returns the matched element, else `undefined`. 19798 * @example 19799 * 19800 * var users = [ 19801 * { 'user': 'barney', 'age': 36, 'active': true }, 19802 * { 'user': 'fred', 'age': 40, 'active': false }, 19803 * { 'user': 'pebbles', 'age': 1, 'active': true } 19804 * ]; 19805 * 19806 * _.find(users, function(o) { return o.age < 40; }); 19807 * // => object for 'barney' 19808 * 19809 * // The `_.matches` iteratee shorthand. 19810 * _.find(users, { 'age': 1, 'active': true }); 19811 * // => object for 'pebbles' 19812 * 19813 * // The `_.matchesProperty` iteratee shorthand. 19814 * _.find(users, ['active', false]); 19815 * // => object for 'fred' 19816 * 19817 * // The `_.property` iteratee shorthand. 19818 * _.find(users, 'active'); 19819 * // => object for 'barney' 19820 */ 19821 var find = createFind(findIndex); 19822 19823 /** 19824 * This method is like `_.find` except that it iterates over elements of 19825 * `collection` from right to left. 19826 * 19827 * @static 19828 * @memberOf _ 19829 * @since 2.0.0 19830 * @category Collection 19831 * @param {Array|Object} collection The collection to inspect. 19832 * @param {Function} [predicate=_.identity] The function invoked per iteration. 19833 * @param {number} [fromIndex=collection.length-1] The index to search from. 19834 * @returns {*} Returns the matched element, else `undefined`. 19835 * @example 19836 * 19837 * _.findLast([1, 2, 3, 4], function(n) { 19838 * return n % 2 == 1; 19839 * }); 19840 * // => 3 19841 */ 19842 var findLast = createFind(findLastIndex); 19843 19844 /** 19845 * Creates a flattened array of values by running each element in `collection` 19846 * thru `iteratee` and flattening the mapped results. The iteratee is invoked 19847 * with three arguments: (value, index|key, collection). 19848 * 19849 * @static 19850 * @memberOf _ 19851 * @since 4.0.0 19852 * @category Collection 19853 * @param {Array|Object} collection The collection to iterate over. 19854 * @param {Function} [iteratee=_.identity] The function invoked per iteration. 19855 * @returns {Array} Returns the new flattened array. 19856 * @example 19857 * 19858 * function duplicate(n) { 19859 * return [n, n]; 19860 * } 19861 * 19862 * _.flatMap([1, 2], duplicate); 19863 * // => [1, 1, 2, 2] 19864 */ 19865 function flatMap(collection, iteratee) { 19866 return baseFlatten(map(collection, iteratee), 1); 19867 } 19868 19869 /** 19870 * This method is like `_.flatMap` except that it recursively flattens the 19871 * mapped results. 19872 * 19873 * @static 19874 * @memberOf _ 19875 * @since 4.7.0 19876 * @category Collection 19877 * @param {Array|Object} collection The collection to iterate over. 19878 * @param {Function} [iteratee=_.identity] The function invoked per iteration. 19879 * @returns {Array} Returns the new flattened array. 19880 * @example 19881 * 19882 * function duplicate(n) { 19883 * return [[[n, n]]]; 19884 * } 19885 * 19886 * _.flatMapDeep([1, 2], duplicate); 19887 * // => [1, 1, 2, 2] 19888 */ 19889 function flatMapDeep(collection, iteratee) { 19890 return baseFlatten(map(collection, iteratee), INFINITY); 19891 } 19892 19893 /** 19894 * This method is like `_.flatMap` except that it recursively flattens the 19895 * mapped results up to `depth` times. 19896 * 19897 * @static 19898 * @memberOf _ 19899 * @since 4.7.0 19900 * @category Collection 19901 * @param {Array|Object} collection The collection to iterate over. 19902 * @param {Function} [iteratee=_.identity] The function invoked per iteration. 19903 * @param {number} [depth=1] The maximum recursion depth. 19904 * @returns {Array} Returns the new flattened array. 19905 * @example 19906 * 19907 * function duplicate(n) { 19908 * return [[[n, n]]]; 19909 * } 19910 * 19911 * _.flatMapDepth([1, 2], duplicate, 2); 19912 * // => [[1, 1], [2, 2]] 19913 */ 19914 function flatMapDepth(collection, iteratee, depth) { 19915 depth = depth === undefined ? 1 : toInteger(depth); 19916 return baseFlatten(map(collection, iteratee), depth); 19917 } 19918 19919 /** 19920 * Iterates over elements of `collection` and invokes `iteratee` for each element. 19921 * The iteratee is invoked with three arguments: (value, index|key, collection). 19922 * Iteratee functions may exit iteration early by explicitly returning `false`. 19923 * 19924 * **Note:** As with other "Collections" methods, objects with a "length" 19925 * property are iterated like arrays. To avoid this behavior use `_.forIn` 19926 * or `_.forOwn` for object iteration. 19927 * 19928 * @static 19929 * @memberOf _ 19930 * @since 0.1.0 19931 * @alias each 19932 * @category Collection 19933 * @param {Array|Object} collection The collection to iterate over. 19934 * @param {Function} [iteratee=_.identity] The function invoked per iteration. 19935 * @returns {Array|Object} Returns `collection`. 19936 * @see _.forEachRight 19937 * @example 19938 * 19939 * _.forEach([1, 2], function(value) { 19940 * console.log(value); 19941 * }); 19942 * // => Logs `1` then `2`. 19943 * 19944 * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { 19945 * console.log(key); 19946 * }); 19947 * // => Logs 'a' then 'b' (iteration order is not guaranteed). 19948 */ 19949 function forEach(collection, iteratee) { 19950 var func = isArray(collection) ? arrayEach : baseEach; 19951 return func(collection, getIteratee(iteratee, 3)); 19952 } 19953 19954 /** 19955 * This method is like `_.forEach` except that it iterates over elements of 19956 * `collection` from right to left. 19957 * 19958 * @static 19959 * @memberOf _ 19960 * @since 2.0.0 19961 * @alias eachRight 19962 * @category Collection 19963 * @param {Array|Object} collection The collection to iterate over. 19964 * @param {Function} [iteratee=_.identity] The function invoked per iteration. 19965 * @returns {Array|Object} Returns `collection`. 19966 * @see _.forEach 19967 * @example 19968 * 19969 * _.forEachRight([1, 2], function(value) { 19970 * console.log(value); 19971 * }); 19972 * // => Logs `2` then `1`. 19973 */ 19974 function forEachRight(collection, iteratee) { 19975 var func = isArray(collection) ? arrayEachRight : baseEachRight; 19976 return func(collection, getIteratee(iteratee, 3)); 19977 } 19978 19979 /** 19980 * Creates an object composed of keys generated from the results of running 19981 * each element of `collection` thru `iteratee`. The order of grouped values 19982 * is determined by the order they occur in `collection`. The corresponding 19983 * value of each key is an array of elements responsible for generating the 19984 * key. The iteratee is invoked with one argument: (value). 19985 * 19986 * @static 19987 * @memberOf _ 19988 * @since 0.1.0 19989 * @category Collection 19990 * @param {Array|Object} collection The collection to iterate over. 19991 * @param {Function} [iteratee=_.identity] The iteratee to transform keys. 19992 * @returns {Object} Returns the composed aggregate object. 19993 * @example 19994 * 19995 * _.groupBy([6.1, 4.2, 6.3], Math.floor); 19996 * // => { '4': [4.2], '6': [6.1, 6.3] } 19997 * 19998 * // The `_.property` iteratee shorthand. 19999 * _.groupBy(['one', 'two', 'three'], 'length'); 20000 * // => { '3': ['one', 'two'], '5': ['three'] } 20001 */ 20002 var groupBy = createAggregator(function(result, value, key) { 20003 if (hasOwnProperty.call(result, key)) { 20004 result[key].push(value); 20005 } else { 20006 baseAssignValue(result, key, [value]); 20007 } 20008 }); 20009 20010 /** 20011 * Checks if `value` is in `collection`. If `collection` is a string, it's 20012 * checked for a substring of `value`, otherwise 20013 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) 20014 * is used for equality comparisons. If `fromIndex` is negative, it's used as 20015 * the offset from the end of `collection`. 20016 * 20017 * @static 20018 * @memberOf _ 20019 * @since 0.1.0 20020 * @category Collection 20021 * @param {Array|Object|string} collection The collection to inspect. 20022 * @param {*} value The value to search for. 20023 * @param {number} [fromIndex=0] The index to search from. 20024 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. 20025 * @returns {boolean} Returns `true` if `value` is found, else `false`. 20026 * @example 20027 * 20028 * _.includes([1, 2, 3], 1); 20029 * // => true 20030 * 20031 * _.includes([1, 2, 3], 1, 2); 20032 * // => false 20033 * 20034 * _.includes({ 'a': 1, 'b': 2 }, 1); 20035 * // => true 20036 * 20037 * _.includes('abcd', 'bc'); 20038 * // => true 20039 */ 20040 function includes(collection, value, fromIndex, guard) { 20041 collection = isArrayLike(collection) ? collection : values(collection); 20042 fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0; 20043 20044 var length = collection.length; 20045 if (fromIndex < 0) { 20046 fromIndex = nativeMax(length + fromIndex, 0); 20047 } 20048 return isString(collection) 20049 ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1) 20050 : (!!length && baseIndexOf(collection, value, fromIndex) > -1); 20051 } 20052 20053 /** 20054 * Invokes the method at `path` of each element in `collection`, returning 20055 * an array of the results of each invoked method. Any additional arguments 20056 * are provided to each invoked method. If `path` is a function, it's invoked 20057 * for, and `this` bound to, each element in `collection`. 20058 * 20059 * @static 20060 * @memberOf _ 20061 * @since 4.0.0 20062 * @category Collection 20063 * @param {Array|Object} collection The collection to iterate over. 20064 * @param {Array|Function|string} path The path of the method to invoke or 20065 * the function invoked per iteration. 20066 * @param {...*} [args] The arguments to invoke each method with. 20067 * @returns {Array} Returns the array of results. 20068 * @example 20069 * 20070 * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort'); 20071 * // => [[1, 5, 7], [1, 2, 3]] 20072 * 20073 * _.invokeMap([123, 456], String.prototype.split, ''); 20074 * // => [['1', '2', '3'], ['4', '5', '6']] 20075 */ 20076 var invokeMap = baseRest(function(collection, path, args) { 20077 var index = -1, 20078 isFunc = typeof path == 'function', 20079 result = isArrayLike(collection) ? Array(collection.length) : []; 20080 20081 baseEach(collection, function(value) { 20082 result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args); 20083 }); 20084 return result; 20085 }); 20086 20087 /** 20088 * Creates an object composed of keys generated from the results of running 20089 * each element of `collection` thru `iteratee`. The corresponding value of 20090 * each key is the last element responsible for generating the key. The 20091 * iteratee is invoked with one argument: (value). 20092 * 20093 * @static 20094 * @memberOf _ 20095 * @since 4.0.0 20096 * @category Collection 20097 * @param {Array|Object} collection The collection to iterate over. 20098 * @param {Function} [iteratee=_.identity] The iteratee to transform keys. 20099 * @returns {Object} Returns the composed aggregate object. 20100 * @example 20101 * 20102 * var array = [ 20103 * { 'dir': 'left', 'code': 97 }, 20104 * { 'dir': 'right', 'code': 100 } 20105 * ]; 20106 * 20107 * _.keyBy(array, function(o) { 20108 * return String.fromCharCode(o.code); 20109 * }); 20110 * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } 20111 * 20112 * _.keyBy(array, 'dir'); 20113 * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } 20114 */ 20115 var keyBy = createAggregator(function(result, value, key) { 20116 baseAssignValue(result, key, value); 20117 }); 20118 20119 /** 20120 * Creates an array of values by running each element in `collection` thru 20121 * `iteratee`. The iteratee is invoked with three arguments: 20122 * (value, index|key, collection). 20123 * 20124 * Many lodash methods are guarded to work as iteratees for methods like 20125 * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. 20126 * 20127 * The guarded methods are: 20128 * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, 20129 * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, 20130 * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, 20131 * `template`, `trim`, `trimEnd`, `trimStart`, and `words` 20132 * 20133 * @static 20134 * @memberOf _ 20135 * @since 0.1.0 20136 * @category Collection 20137 * @param {Array|Object} collection The collection to iterate over. 20138 * @param {Function} [iteratee=_.identity] The function invoked per iteration. 20139 * @returns {Array} Returns the new mapped array. 20140 * @example 20141 * 20142 * function square(n) { 20143 * return n * n; 20144 * } 20145 * 20146 * _.map([4, 8], square); 20147 * // => [16, 64] 20148 * 20149 * _.map({ 'a': 4, 'b': 8 }, square); 20150 * // => [16, 64] (iteration order is not guaranteed) 20151 * 20152 * var users = [ 20153 * { 'user': 'barney' }, 20154 * { 'user': 'fred' } 20155 * ]; 20156 * 20157 * // The `_.property` iteratee shorthand. 20158 * _.map(users, 'user'); 20159 * // => ['barney', 'fred'] 20160 */ 20161 function map(collection, iteratee) { 20162 var func = isArray(collection) ? arrayMap : baseMap; 20163 return func(collection, getIteratee(iteratee, 3)); 20164 } 20165 20166 /** 20167 * This method is like `_.sortBy` except that it allows specifying the sort 20168 * orders of the iteratees to sort by. If `orders` is unspecified, all values 20169 * are sorted in ascending order. Otherwise, specify an order of "desc" for 20170 * descending or "asc" for ascending sort order of corresponding values. 20171 * 20172 * @static 20173 * @memberOf _ 20174 * @since 4.0.0 20175 * @category Collection 20176 * @param {Array|Object} collection The collection to iterate over. 20177 * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]] 20178 * The iteratees to sort by. 20179 * @param {string[]} [orders] The sort orders of `iteratees`. 20180 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. 20181 * @returns {Array} Returns the new sorted array. 20182 * @example 20183 * 20184 * var users = [ 20185 * { 'user': 'fred', 'age': 48 }, 20186 * { 'user': 'barney', 'age': 34 }, 20187 * { 'user': 'fred', 'age': 40 }, 20188 * { 'user': 'barney', 'age': 36 } 20189 * ]; 20190 * 20191 * // Sort by `user` in ascending order and by `age` in descending order. 20192 * _.orderBy(users, ['user', 'age'], ['asc', 'desc']); 20193 * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] 20194 */ 20195 function orderBy(collection, iteratees, orders, guard) { 20196 if (collection == null) { 20197 return []; 20198 } 20199 if (!isArray(iteratees)) { 20200 iteratees = iteratees == null ? [] : [iteratees]; 20201 } 20202 orders = guard ? undefined : orders; 20203 if (!isArray(orders)) { 20204 orders = orders == null ? [] : [orders]; 20205 } 20206 return baseOrderBy(collection, iteratees, orders); 20207 } 20208 20209 /** 20210 * Creates an array of elements split into two groups, the first of which 20211 * contains elements `predicate` returns truthy for, the second of which 20212 * contains elements `predicate` returns falsey for. The predicate is 20213 * invoked with one argument: (value). 20214 * 20215 * @static 20216 * @memberOf _ 20217 * @since 3.0.0 20218 * @category Collection 20219 * @param {Array|Object} collection The collection to iterate over. 20220 * @param {Function} [predicate=_.identity] The function invoked per iteration. 20221 * @returns {Array} Returns the array of grouped elements. 20222 * @example 20223 * 20224 * var users = [ 20225 * { 'user': 'barney', 'age': 36, 'active': false }, 20226 * { 'user': 'fred', 'age': 40, 'active': true }, 20227 * { 'user': 'pebbles', 'age': 1, 'active': false } 20228 * ]; 20229 * 20230 * _.partition(users, function(o) { return o.active; }); 20231 * // => objects for [['fred'], ['barney', 'pebbles']] 20232 * 20233 * // The `_.matches` iteratee shorthand. 20234 * _.partition(users, { 'age': 1, 'active': false }); 20235 * // => objects for [['pebbles'], ['barney', 'fred']] 20236 * 20237 * // The `_.matchesProperty` iteratee shorthand. 20238 * _.partition(users, ['active', false]); 20239 * // => objects for [['barney', 'pebbles'], ['fred']] 20240 * 20241 * // The `_.property` iteratee shorthand. 20242 * _.partition(users, 'active'); 20243 * // => objects for [['fred'], ['barney', 'pebbles']] 20244 */ 20245 var partition = createAggregator(function(result, value, key) { 20246 result[key ? 0 : 1].push(value); 20247 }, function() { return [[], []]; }); 20248 20249 /** 20250 * Reduces `collection` to a value which is the accumulated result of running 20251 * each element in `collection` thru `iteratee`, where each successive 20252 * invocation is supplied the return value of the previous. If `accumulator` 20253 * is not given, the first element of `collection` is used as the initial 20254 * value. The iteratee is invoked with four arguments: 20255 * (accumulator, value, index|key, collection). 20256 * 20257 * Many lodash methods are guarded to work as iteratees for methods like 20258 * `_.reduce`, `_.reduceRight`, and `_.transform`. 20259 * 20260 * The guarded methods are: 20261 * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, 20262 * and `sortBy` 20263 * 20264 * @static 20265 * @memberOf _ 20266 * @since 0.1.0 20267 * @category Collection 20268 * @param {Array|Object} collection The collection to iterate over. 20269 * @param {Function} [iteratee=_.identity] The function invoked per iteration. 20270 * @param {*} [accumulator] The initial value. 20271 * @returns {*} Returns the accumulated value. 20272 * @see _.reduceRight 20273 * @example 20274 * 20275 * _.reduce([1, 2], function(sum, n) { 20276 * return sum + n; 20277 * }, 0); 20278 * // => 3 20279 * 20280 * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { 20281 * (result[value] || (result[value] = [])).push(key); 20282 * return result; 20283 * }, {}); 20284 * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) 20285 */ 20286 function reduce(collection, iteratee, accumulator) { 20287 var func = isArray(collection) ? arrayReduce : baseReduce, 20288 initAccum = arguments.length < 3; 20289 20290 return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach); 20291 } 20292 20293 /** 20294 * This method is like `_.reduce` except that it iterates over elements of 20295 * `collection` from right to left. 20296 * 20297 * @static 20298 * @memberOf _ 20299 * @since 0.1.0 20300 * @category Collection 20301 * @param {Array|Object} collection The collection to iterate over. 20302 * @param {Function} [iteratee=_.identity] The function invoked per iteration. 20303 * @param {*} [accumulator] The initial value. 20304 * @returns {*} Returns the accumulated value. 20305 * @see _.reduce 20306 * @example 20307 * 20308 * var array = [[0, 1], [2, 3], [4, 5]]; 20309 * 20310 * _.reduceRight(array, function(flattened, other) { 20311 * return flattened.concat(other); 20312 * }, []); 20313 * // => [4, 5, 2, 3, 0, 1] 20314 */ 20315 function reduceRight(collection, iteratee, accumulator) { 20316 var func = isArray(collection) ? arrayReduceRight : baseReduce, 20317 initAccum = arguments.length < 3; 20318 20319 return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight); 20320 } 20321 20322 /** 20323 * The opposite of `_.filter`; this method returns the elements of `collection` 20324 * that `predicate` does **not** return truthy for. 20325 * 20326 * @static 20327 * @memberOf _ 20328 * @since 0.1.0 20329 * @category Collection 20330 * @param {Array|Object} collection The collection to iterate over. 20331 * @param {Function} [predicate=_.identity] The function invoked per iteration. 20332 * @returns {Array} Returns the new filtered array. 20333 * @see _.filter 20334 * @example 20335 * 20336 * var users = [ 20337 * { 'user': 'barney', 'age': 36, 'active': false }, 20338 * { 'user': 'fred', 'age': 40, 'active': true } 20339 * ]; 20340 * 20341 * _.reject(users, function(o) { return !o.active; }); 20342 * // => objects for ['fred'] 20343 * 20344 * // The `_.matches` iteratee shorthand. 20345 * _.reject(users, { 'age': 40, 'active': true }); 20346 * // => objects for ['barney'] 20347 * 20348 * // The `_.matchesProperty` iteratee shorthand. 20349 * _.reject(users, ['active', false]); 20350 * // => objects for ['fred'] 20351 * 20352 * // The `_.property` iteratee shorthand. 20353 * _.reject(users, 'active'); 20354 * // => objects for ['barney'] 20355 */ 20356 function reject(collection, predicate) { 20357 var func = isArray(collection) ? arrayFilter : baseFilter; 20358 return func(collection, negate(getIteratee(predicate, 3))); 20359 } 20360 20361 /** 20362 * Gets a random element from `collection`. 20363 * 20364 * @static 20365 * @memberOf _ 20366 * @since 2.0.0 20367 * @category Collection 20368 * @param {Array|Object} collection The collection to sample. 20369 * @returns {*} Returns the random element. 20370 * @example 20371 * 20372 * _.sample([1, 2, 3, 4]); 20373 * // => 2 20374 */ 20375 function sample(collection) { 20376 var func = isArray(collection) ? arraySample : baseSample; 20377 return func(collection); 20378 } 20379 20380 /** 20381 * Gets `n` random elements at unique keys from `collection` up to the 20382 * size of `collection`. 20383 * 20384 * @static 20385 * @memberOf _ 20386 * @since 4.0.0 20387 * @category Collection 20388 * @param {Array|Object} collection The collection to sample. 20389 * @param {number} [n=1] The number of elements to sample. 20390 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 20391 * @returns {Array} Returns the random elements. 20392 * @example 20393 * 20394 * _.sampleSize([1, 2, 3], 2); 20395 * // => [3, 1] 20396 * 20397 * _.sampleSize([1, 2, 3], 4); 20398 * // => [2, 3, 1] 20399 */ 20400 function sampleSize(collection, n, guard) { 20401 if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) { 20402 n = 1; 20403 } else { 20404 n = toInteger(n); 20405 } 20406 var func = isArray(collection) ? arraySampleSize : baseSampleSize; 20407 return func(collection, n); 20408 } 20409 20410 /** 20411 * Creates an array of shuffled values, using a version of the 20412 * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). 20413 * 20414 * @static 20415 * @memberOf _ 20416 * @since 0.1.0 20417 * @category Collection 20418 * @param {Array|Object} collection The collection to shuffle. 20419 * @returns {Array} Returns the new shuffled array. 20420 * @example 20421 * 20422 * _.shuffle([1, 2, 3, 4]); 20423 * // => [4, 1, 3, 2] 20424 */ 20425 function shuffle(collection) { 20426 var func = isArray(collection) ? arrayShuffle : baseShuffle; 20427 return func(collection); 20428 } 20429 20430 /** 20431 * Gets the size of `collection` by returning its length for array-like 20432 * values or the number of own enumerable string keyed properties for objects. 20433 * 20434 * @static 20435 * @memberOf _ 20436 * @since 0.1.0 20437 * @category Collection 20438 * @param {Array|Object|string} collection The collection to inspect. 20439 * @returns {number} Returns the collection size. 20440 * @example 20441 * 20442 * _.size([1, 2, 3]); 20443 * // => 3 20444 * 20445 * _.size({ 'a': 1, 'b': 2 }); 20446 * // => 2 20447 * 20448 * _.size('pebbles'); 20449 * // => 7 20450 */ 20451 function size(collection) { 20452 if (collection == null) { 20453 return 0; 20454 } 20455 if (isArrayLike(collection)) { 20456 return isString(collection) ? stringSize(collection) : collection.length; 20457 } 20458 var tag = getTag(collection); 20459 if (tag == mapTag || tag == setTag) { 20460 return collection.size; 20461 } 20462 return baseKeys(collection).length; 20463 } 20464 20465 /** 20466 * Checks if `predicate` returns truthy for **any** element of `collection`. 20467 * Iteration is stopped once `predicate` returns truthy. The predicate is 20468 * invoked with three arguments: (value, index|key, collection). 20469 * 20470 * @static 20471 * @memberOf _ 20472 * @since 0.1.0 20473 * @category Collection 20474 * @param {Array|Object} collection The collection to iterate over. 20475 * @param {Function} [predicate=_.identity] The function invoked per iteration. 20476 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 20477 * @returns {boolean} Returns `true` if any element passes the predicate check, 20478 * else `false`. 20479 * @example 20480 * 20481 * _.some([null, 0, 'yes', false], Boolean); 20482 * // => true 20483 * 20484 * var users = [ 20485 * { 'user': 'barney', 'active': true }, 20486 * { 'user': 'fred', 'active': false } 20487 * ]; 20488 * 20489 * // The `_.matches` iteratee shorthand. 20490 * _.some(users, { 'user': 'barney', 'active': false }); 20491 * // => false 20492 * 20493 * // The `_.matchesProperty` iteratee shorthand. 20494 * _.some(users, ['active', false]); 20495 * // => true 20496 * 20497 * // The `_.property` iteratee shorthand. 20498 * _.some(users, 'active'); 20499 * // => true 20500 */ 20501 function some(collection, predicate, guard) { 20502 var func = isArray(collection) ? arraySome : baseSome; 20503 if (guard && isIterateeCall(collection, predicate, guard)) { 20504 predicate = undefined; 20505 } 20506 return func(collection, getIteratee(predicate, 3)); 20507 } 20508 20509 /** 20510 * Creates an array of elements, sorted in ascending order by the results of 20511 * running each element in a collection thru each iteratee. This method 20512 * performs a stable sort, that is, it preserves the original sort order of 20513 * equal elements. The iteratees are invoked with one argument: (value). 20514 * 20515 * @static 20516 * @memberOf _ 20517 * @since 0.1.0 20518 * @category Collection 20519 * @param {Array|Object} collection The collection to iterate over. 20520 * @param {...(Function|Function[])} [iteratees=[_.identity]] 20521 * The iteratees to sort by. 20522 * @returns {Array} Returns the new sorted array. 20523 * @example 20524 * 20525 * var users = [ 20526 * { 'user': 'fred', 'age': 48 }, 20527 * { 'user': 'barney', 'age': 36 }, 20528 * { 'user': 'fred', 'age': 30 }, 20529 * { 'user': 'barney', 'age': 34 } 20530 * ]; 20531 * 20532 * _.sortBy(users, [function(o) { return o.user; }]); 20533 * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] 20534 * 20535 * _.sortBy(users, ['user', 'age']); 20536 * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] 20537 */ 20538 var sortBy = baseRest(function(collection, iteratees) { 20539 if (collection == null) { 20540 return []; 20541 } 20542 var length = iteratees.length; 20543 if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) { 20544 iteratees = []; 20545 } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) { 20546 iteratees = [iteratees[0]]; 20547 } 20548 return baseOrderBy(collection, baseFlatten(iteratees, 1), []); 20549 }); 20550 20551 /*------------------------------------------------------------------------*/ 20552 20553 /** 20554 * Gets the timestamp of the number of milliseconds that have elapsed since 20555 * the Unix epoch (1 January 1970 00:00:00 UTC). 20556 * 20557 * @static 20558 * @memberOf _ 20559 * @since 2.4.0 20560 * @category Date 20561 * @returns {number} Returns the timestamp. 20562 * @example 20563 * 20564 * _.defer(function(stamp) { 20565 * console.log(_.now() - stamp); 20566 * }, _.now()); 20567 * // => Logs the number of milliseconds it took for the deferred invocation. 20568 */ 20569 var now = ctxNow || function() { 20570 return root.Date.now(); 20571 }; 20572 20573 /*------------------------------------------------------------------------*/ 20574 20575 /** 20576 * The opposite of `_.before`; this method creates a function that invokes 20577 * `func` once it's called `n` or more times. 20578 * 20579 * @static 20580 * @memberOf _ 20581 * @since 0.1.0 20582 * @category Function 20583 * @param {number} n The number of calls before `func` is invoked. 20584 * @param {Function} func The function to restrict. 20585 * @returns {Function} Returns the new restricted function. 20586 * @example 20587 * 20588 * var saves = ['profile', 'settings']; 20589 * 20590 * var done = _.after(saves.length, function() { 20591 * console.log('done saving!'); 20592 * }); 20593 * 20594 * _.forEach(saves, function(type) { 20595 * asyncSave({ 'type': type, 'complete': done }); 20596 * }); 20597 * // => Logs 'done saving!' after the two async saves have completed. 20598 */ 20599 function after(n, func) { 20600 if (typeof func != 'function') { 20601 throw new TypeError(FUNC_ERROR_TEXT); 20602 } 20603 n = toInteger(n); 20604 return function() { 20605 if (--n < 1) { 20606 return func.apply(this, arguments); 20607 } 20608 }; 20609 } 20610 20611 /** 20612 * Creates a function that invokes `func`, with up to `n` arguments, 20613 * ignoring any additional arguments. 20614 * 20615 * @static 20616 * @memberOf _ 20617 * @since 3.0.0 20618 * @category Function 20619 * @param {Function} func The function to cap arguments for. 20620 * @param {number} [n=func.length] The arity cap. 20621 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 20622 * @returns {Function} Returns the new capped function. 20623 * @example 20624 * 20625 * _.map(['6', '8', '10'], _.ary(parseInt, 1)); 20626 * // => [6, 8, 10] 20627 */ 20628 function ary(func, n, guard) { 20629 n = guard ? undefined : n; 20630 n = (func && n == null) ? func.length : n; 20631 return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n); 20632 } 20633 20634 /** 20635 * Creates a function that invokes `func`, with the `this` binding and arguments 20636 * of the created function, while it's called less than `n` times. Subsequent 20637 * calls to the created function return the result of the last `func` invocation. 20638 * 20639 * @static 20640 * @memberOf _ 20641 * @since 3.0.0 20642 * @category Function 20643 * @param {number} n The number of calls at which `func` is no longer invoked. 20644 * @param {Function} func The function to restrict. 20645 * @returns {Function} Returns the new restricted function. 20646 * @example 20647 * 20648 * jQuery(element).on('click', _.before(5, addContactToList)); 20649 * // => Allows adding up to 4 contacts to the list. 20650 */ 20651 function before(n, func) { 20652 var result; 20653 if (typeof func != 'function') { 20654 throw new TypeError(FUNC_ERROR_TEXT); 20655 } 20656 n = toInteger(n); 20657 return function() { 20658 if (--n > 0) { 20659 result = func.apply(this, arguments); 20660 } 20661 if (n <= 1) { 20662 func = undefined; 20663 } 20664 return result; 20665 }; 20666 } 20667 20668 /** 20669 * Creates a function that invokes `func` with the `this` binding of `thisArg` 20670 * and `partials` prepended to the arguments it receives. 20671 * 20672 * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, 20673 * may be used as a placeholder for partially applied arguments. 20674 * 20675 * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" 20676 * property of bound functions. 20677 * 20678 * @static 20679 * @memberOf _ 20680 * @since 0.1.0 20681 * @category Function 20682 * @param {Function} func The function to bind. 20683 * @param {*} thisArg The `this` binding of `func`. 20684 * @param {...*} [partials] The arguments to be partially applied. 20685 * @returns {Function} Returns the new bound function. 20686 * @example 20687 * 20688 * function greet(greeting, punctuation) { 20689 * return greeting + ' ' + this.user + punctuation; 20690 * } 20691 * 20692 * var object = { 'user': 'fred' }; 20693 * 20694 * var bound = _.bind(greet, object, 'hi'); 20695 * bound('!'); 20696 * // => 'hi fred!' 20697 * 20698 * // Bound with placeholders. 20699 * var bound = _.bind(greet, object, _, '!'); 20700 * bound('hi'); 20701 * // => 'hi fred!' 20702 */ 20703 var bind = baseRest(function(func, thisArg, partials) { 20704 var bitmask = WRAP_BIND_FLAG; 20705 if (partials.length) { 20706 var holders = replaceHolders(partials, getHolder(bind)); 20707 bitmask |= WRAP_PARTIAL_FLAG; 20708 } 20709 return createWrap(func, bitmask, thisArg, partials, holders); 20710 }); 20711 20712 /** 20713 * Creates a function that invokes the method at `object[key]` with `partials` 20714 * prepended to the arguments it receives. 20715 * 20716 * This method differs from `_.bind` by allowing bound functions to reference 20717 * methods that may be redefined or don't yet exist. See 20718 * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern) 20719 * for more details. 20720 * 20721 * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic 20722 * builds, may be used as a placeholder for partially applied arguments. 20723 * 20724 * @static 20725 * @memberOf _ 20726 * @since 0.10.0 20727 * @category Function 20728 * @param {Object} object The object to invoke the method on. 20729 * @param {string} key The key of the method. 20730 * @param {...*} [partials] The arguments to be partially applied. 20731 * @returns {Function} Returns the new bound function. 20732 * @example 20733 * 20734 * var object = { 20735 * 'user': 'fred', 20736 * 'greet': function(greeting, punctuation) { 20737 * return greeting + ' ' + this.user + punctuation; 20738 * } 20739 * }; 20740 * 20741 * var bound = _.bindKey(object, 'greet', 'hi'); 20742 * bound('!'); 20743 * // => 'hi fred!' 20744 * 20745 * object.greet = function(greeting, punctuation) { 20746 * return greeting + 'ya ' + this.user + punctuation; 20747 * }; 20748 * 20749 * bound('!'); 20750 * // => 'hiya fred!' 20751 * 20752 * // Bound with placeholders. 20753 * var bound = _.bindKey(object, 'greet', _, '!'); 20754 * bound('hi'); 20755 * // => 'hiya fred!' 20756 */ 20757 var bindKey = baseRest(function(object, key, partials) { 20758 var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG; 20759 if (partials.length) { 20760 var holders = replaceHolders(partials, getHolder(bindKey)); 20761 bitmask |= WRAP_PARTIAL_FLAG; 20762 } 20763 return createWrap(key, bitmask, object, partials, holders); 20764 }); 20765 20766 /** 20767 * Creates a function that accepts arguments of `func` and either invokes 20768 * `func` returning its result, if at least `arity` number of arguments have 20769 * been provided, or returns a function that accepts the remaining `func` 20770 * arguments, and so on. The arity of `func` may be specified if `func.length` 20771 * is not sufficient. 20772 * 20773 * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds, 20774 * may be used as a placeholder for provided arguments. 20775 * 20776 * **Note:** This method doesn't set the "length" property of curried functions. 20777 * 20778 * @static 20779 * @memberOf _ 20780 * @since 2.0.0 20781 * @category Function 20782 * @param {Function} func The function to curry. 20783 * @param {number} [arity=func.length] The arity of `func`. 20784 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 20785 * @returns {Function} Returns the new curried function. 20786 * @example 20787 * 20788 * var abc = function(a, b, c) { 20789 * return [a, b, c]; 20790 * }; 20791 * 20792 * var curried = _.curry(abc); 20793 * 20794 * curried(1)(2)(3); 20795 * // => [1, 2, 3] 20796 * 20797 * curried(1, 2)(3); 20798 * // => [1, 2, 3] 20799 * 20800 * curried(1, 2, 3); 20801 * // => [1, 2, 3] 20802 * 20803 * // Curried with placeholders. 20804 * curried(1)(_, 3)(2); 20805 * // => [1, 2, 3] 20806 */ 20807 function curry(func, arity, guard) { 20808 arity = guard ? undefined : arity; 20809 var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity); 20810 result.placeholder = curry.placeholder; 20811 return result; 20812 } 20813 20814 /** 20815 * This method is like `_.curry` except that arguments are applied to `func` 20816 * in the manner of `_.partialRight` instead of `_.partial`. 20817 * 20818 * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic 20819 * builds, may be used as a placeholder for provided arguments. 20820 * 20821 * **Note:** This method doesn't set the "length" property of curried functions. 20822 * 20823 * @static 20824 * @memberOf _ 20825 * @since 3.0.0 20826 * @category Function 20827 * @param {Function} func The function to curry. 20828 * @param {number} [arity=func.length] The arity of `func`. 20829 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 20830 * @returns {Function} Returns the new curried function. 20831 * @example 20832 * 20833 * var abc = function(a, b, c) { 20834 * return [a, b, c]; 20835 * }; 20836 * 20837 * var curried = _.curryRight(abc); 20838 * 20839 * curried(3)(2)(1); 20840 * // => [1, 2, 3] 20841 * 20842 * curried(2, 3)(1); 20843 * // => [1, 2, 3] 20844 * 20845 * curried(1, 2, 3); 20846 * // => [1, 2, 3] 20847 * 20848 * // Curried with placeholders. 20849 * curried(3)(1, _)(2); 20850 * // => [1, 2, 3] 20851 */ 20852 function curryRight(func, arity, guard) { 20853 arity = guard ? undefined : arity; 20854 var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity); 20855 result.placeholder = curryRight.placeholder; 20856 return result; 20857 } 20858 20859 /** 20860 * Creates a debounced function that delays invoking `func` until after `wait` 20861 * milliseconds have elapsed since the last time the debounced function was 20862 * invoked. The debounced function comes with a `cancel` method to cancel 20863 * delayed `func` invocations and a `flush` method to immediately invoke them. 20864 * Provide `options` to indicate whether `func` should be invoked on the 20865 * leading and/or trailing edge of the `wait` timeout. The `func` is invoked 20866 * with the last arguments provided to the debounced function. Subsequent 20867 * calls to the debounced function return the result of the last `func` 20868 * invocation. 20869 * 20870 * **Note:** If `leading` and `trailing` options are `true`, `func` is 20871 * invoked on the trailing edge of the timeout only if the debounced function 20872 * is invoked more than once during the `wait` timeout. 20873 * 20874 * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred 20875 * until to the next tick, similar to `setTimeout` with a timeout of `0`. 20876 * 20877 * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) 20878 * for details over the differences between `_.debounce` and `_.throttle`. 20879 * 20880 * @static 20881 * @memberOf _ 20882 * @since 0.1.0 20883 * @category Function 20884 * @param {Function} func The function to debounce. 20885 * @param {number} [wait=0] The number of milliseconds to delay. 20886 * @param {Object} [options={}] The options object. 20887 * @param {boolean} [options.leading=false] 20888 * Specify invoking on the leading edge of the timeout. 20889 * @param {number} [options.maxWait] 20890 * The maximum time `func` is allowed to be delayed before it's invoked. 20891 * @param {boolean} [options.trailing=true] 20892 * Specify invoking on the trailing edge of the timeout. 20893 * @returns {Function} Returns the new debounced function. 20894 * @example 20895 * 20896 * // Avoid costly calculations while the window size is in flux. 20897 * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); 20898 * 20899 * // Invoke `sendMail` when clicked, debouncing subsequent calls. 20900 * jQuery(element).on('click', _.debounce(sendMail, 300, { 20901 * 'leading': true, 20902 * 'trailing': false 20903 * })); 20904 * 20905 * // Ensure `batchLog` is invoked once after 1 second of debounced calls. 20906 * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); 20907 * var source = new EventSource('/stream'); 20908 * jQuery(source).on('message', debounced); 20909 * 20910 * // Cancel the trailing debounced invocation. 20911 * jQuery(window).on('popstate', debounced.cancel); 20912 */ 20913 function debounce(func, wait, options) { 20914 var lastArgs, 20915 lastThis, 20916 maxWait, 20917 result, 20918 timerId, 20919 lastCallTime, 20920 lastInvokeTime = 0, 20921 leading = false, 20922 maxing = false, 20923 trailing = true; 20924 20925 if (typeof func != 'function') { 20926 throw new TypeError(FUNC_ERROR_TEXT); 20927 } 20928 wait = toNumber(wait) || 0; 20929 if (isObject(options)) { 20930 leading = !!options.leading; 20931 maxing = 'maxWait' in options; 20932 maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; 20933 trailing = 'trailing' in options ? !!options.trailing : trailing; 20934 } 20935 20936 function invokeFunc(time) { 20937 var args = lastArgs, 20938 thisArg = lastThis; 20939 20940 lastArgs = lastThis = undefined; 20941 lastInvokeTime = time; 20942 result = func.apply(thisArg, args); 20943 return result; 20944 } 20945 20946 function leadingEdge(time) { 20947 // Reset any `maxWait` timer. 20948 lastInvokeTime = time; 20949 // Start the timer for the trailing edge. 20950 timerId = setTimeout(timerExpired, wait); 20951 // Invoke the leading edge. 20952 return leading ? invokeFunc(time) : result; 20953 } 20954 20955 function remainingWait(time) { 20956 var timeSinceLastCall = time - lastCallTime, 20957 timeSinceLastInvoke = time - lastInvokeTime, 20958 timeWaiting = wait - timeSinceLastCall; 20959 20960 return maxing 20961 ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) 20962 : timeWaiting; 20963 } 20964 20965 function shouldInvoke(time) { 20966 var timeSinceLastCall = time - lastCallTime, 20967 timeSinceLastInvoke = time - lastInvokeTime; 20968 20969 // Either this is the first call, activity has stopped and we're at the 20970 // trailing edge, the system time has gone backwards and we're treating 20971 // it as the trailing edge, or we've hit the `maxWait` limit. 20972 return (lastCallTime === undefined || (timeSinceLastCall >= wait) || 20973 (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); 20974 } 20975 20976 function timerExpired() { 20977 var time = now(); 20978 if (shouldInvoke(time)) { 20979 return trailingEdge(time); 20980 } 20981 // Restart the timer. 20982 timerId = setTimeout(timerExpired, remainingWait(time)); 20983 } 20984 20985 function trailingEdge(time) { 20986 timerId = undefined; 20987 20988 // Only invoke if we have `lastArgs` which means `func` has been 20989 // debounced at least once. 20990 if (trailing && lastArgs) { 20991 return invokeFunc(time); 20992 } 20993 lastArgs = lastThis = undefined; 20994 return result; 20995 } 20996 20997 function cancel() { 20998 if (timerId !== undefined) { 20999 clearTimeout(timerId); 21000 } 21001 lastInvokeTime = 0; 21002 lastArgs = lastCallTime = lastThis = timerId = undefined; 21003 } 21004 21005 function flush() { 21006 return timerId === undefined ? result : trailingEdge(now()); 21007 } 21008 21009 function debounced() { 21010 var time = now(), 21011 isInvoking = shouldInvoke(time); 21012 21013 lastArgs = arguments; 21014 lastThis = this; 21015 lastCallTime = time; 21016 21017 if (isInvoking) { 21018 if (timerId === undefined) { 21019 return leadingEdge(lastCallTime); 21020 } 21021 if (maxing) { 21022 // Handle invocations in a tight loop. 21023 clearTimeout(timerId); 21024 timerId = setTimeout(timerExpired, wait); 21025 return invokeFunc(lastCallTime); 21026 } 21027 } 21028 if (timerId === undefined) { 21029 timerId = setTimeout(timerExpired, wait); 21030 } 21031 return result; 21032 } 21033 debounced.cancel = cancel; 21034 debounced.flush = flush; 21035 return debounced; 21036 } 21037 21038 /** 21039 * Defers invoking the `func` until the current call stack has cleared. Any 21040 * additional arguments are provided to `func` when it's invoked. 21041 * 21042 * @static 21043 * @memberOf _ 21044 * @since 0.1.0 21045 * @category Function 21046 * @param {Function} func The function to defer. 21047 * @param {...*} [args] The arguments to invoke `func` with. 21048 * @returns {number} Returns the timer id. 21049 * @example 21050 * 21051 * _.defer(function(text) { 21052 * console.log(text); 21053 * }, 'deferred'); 21054 * // => Logs 'deferred' after one millisecond. 21055 */ 21056 var defer = baseRest(function(func, args) { 21057 return baseDelay(func, 1, args); 21058 }); 21059 21060 /** 21061 * Invokes `func` after `wait` milliseconds. Any additional arguments are 21062 * provided to `func` when it's invoked. 21063 * 21064 * @static 21065 * @memberOf _ 21066 * @since 0.1.0 21067 * @category Function 21068 * @param {Function} func The function to delay. 21069 * @param {number} wait The number of milliseconds to delay invocation. 21070 * @param {...*} [args] The arguments to invoke `func` with. 21071 * @returns {number} Returns the timer id. 21072 * @example 21073 * 21074 * _.delay(function(text) { 21075 * console.log(text); 21076 * }, 1000, 'later'); 21077 * // => Logs 'later' after one second. 21078 */ 21079 var delay = baseRest(function(func, wait, args) { 21080 return baseDelay(func, toNumber(wait) || 0, args); 21081 }); 21082 21083 /** 21084 * Creates a function that invokes `func` with arguments reversed. 21085 * 21086 * @static 21087 * @memberOf _ 21088 * @since 4.0.0 21089 * @category Function 21090 * @param {Function} func The function to flip arguments for. 21091 * @returns {Function} Returns the new flipped function. 21092 * @example 21093 * 21094 * var flipped = _.flip(function() { 21095 * return _.toArray(arguments); 21096 * }); 21097 * 21098 * flipped('a', 'b', 'c', 'd'); 21099 * // => ['d', 'c', 'b', 'a'] 21100 */ 21101 function flip(func) { 21102 return createWrap(func, WRAP_FLIP_FLAG); 21103 } 21104 21105 /** 21106 * Creates a function that memoizes the result of `func`. If `resolver` is 21107 * provided, it determines the cache key for storing the result based on the 21108 * arguments provided to the memoized function. By default, the first argument 21109 * provided to the memoized function is used as the map cache key. The `func` 21110 * is invoked with the `this` binding of the memoized function. 21111 * 21112 * **Note:** The cache is exposed as the `cache` property on the memoized 21113 * function. Its creation may be customized by replacing the `_.memoize.Cache` 21114 * constructor with one whose instances implement the 21115 * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) 21116 * method interface of `clear`, `delete`, `get`, `has`, and `set`. 21117 * 21118 * @static 21119 * @memberOf _ 21120 * @since 0.1.0 21121 * @category Function 21122 * @param {Function} func The function to have its output memoized. 21123 * @param {Function} [resolver] The function to resolve the cache key. 21124 * @returns {Function} Returns the new memoized function. 21125 * @example 21126 * 21127 * var object = { 'a': 1, 'b': 2 }; 21128 * var other = { 'c': 3, 'd': 4 }; 21129 * 21130 * var values = _.memoize(_.values); 21131 * values(object); 21132 * // => [1, 2] 21133 * 21134 * values(other); 21135 * // => [3, 4] 21136 * 21137 * object.a = 2; 21138 * values(object); 21139 * // => [1, 2] 21140 * 21141 * // Modify the result cache. 21142 * values.cache.set(object, ['a', 'b']); 21143 * values(object); 21144 * // => ['a', 'b'] 21145 * 21146 * // Replace `_.memoize.Cache`. 21147 * _.memoize.Cache = WeakMap; 21148 */ 21149 function memoize(func, resolver) { 21150 if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { 21151 throw new TypeError(FUNC_ERROR_TEXT); 21152 } 21153 var memoized = function() { 21154 var args = arguments, 21155 key = resolver ? resolver.apply(this, args) : args[0], 21156 cache = memoized.cache; 21157 21158 if (cache.has(key)) { 21159 return cache.get(key); 21160 } 21161 var result = func.apply(this, args); 21162 memoized.cache = cache.set(key, result) || cache; 21163 return result; 21164 }; 21165 memoized.cache = new (memoize.Cache || MapCache); 21166 return memoized; 21167 } 21168 21169 // Expose `MapCache`. 21170 memoize.Cache = MapCache; 21171 21172 /** 21173 * Creates a function that negates the result of the predicate `func`. The 21174 * `func` predicate is invoked with the `this` binding and arguments of the 21175 * created function. 21176 * 21177 * @static 21178 * @memberOf _ 21179 * @since 3.0.0 21180 * @category Function 21181 * @param {Function} predicate The predicate to negate. 21182 * @returns {Function} Returns the new negated function. 21183 * @example 21184 * 21185 * function isEven(n) { 21186 * return n % 2 == 0; 21187 * } 21188 * 21189 * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); 21190 * // => [1, 3, 5] 21191 */ 21192 function negate(predicate) { 21193 if (typeof predicate != 'function') { 21194 throw new TypeError(FUNC_ERROR_TEXT); 21195 } 21196 return function() { 21197 var args = arguments; 21198 switch (args.length) { 21199 case 0: return !predicate.call(this); 21200 case 1: return !predicate.call(this, args[0]); 21201 case 2: return !predicate.call(this, args[0], args[1]); 21202 case 3: return !predicate.call(this, args[0], args[1], args[2]); 21203 } 21204 return !predicate.apply(this, args); 21205 }; 21206 } 21207 21208 /** 21209 * Creates a function that is restricted to invoking `func` once. Repeat calls 21210 * to the function return the value of the first invocation. The `func` is 21211 * invoked with the `this` binding and arguments of the created function. 21212 * 21213 * @static 21214 * @memberOf _ 21215 * @since 0.1.0 21216 * @category Function 21217 * @param {Function} func The function to restrict. 21218 * @returns {Function} Returns the new restricted function. 21219 * @example 21220 * 21221 * var initialize = _.once(createApplication); 21222 * initialize(); 21223 * initialize(); 21224 * // => `createApplication` is invoked once 21225 */ 21226 function once(func) { 21227 return before(2, func); 21228 } 21229 21230 /** 21231 * Creates a function that invokes `func` with its arguments transformed. 21232 * 21233 * @static 21234 * @since 4.0.0 21235 * @memberOf _ 21236 * @category Function 21237 * @param {Function} func The function to wrap. 21238 * @param {...(Function|Function[])} [transforms=[_.identity]] 21239 * The argument transforms. 21240 * @returns {Function} Returns the new function. 21241 * @example 21242 * 21243 * function doubled(n) { 21244 * return n * 2; 21245 * } 21246 * 21247 * function square(n) { 21248 * return n * n; 21249 * } 21250 * 21251 * var func = _.overArgs(function(x, y) { 21252 * return [x, y]; 21253 * }, [square, doubled]); 21254 * 21255 * func(9, 3); 21256 * // => [81, 6] 21257 * 21258 * func(10, 5); 21259 * // => [100, 10] 21260 */ 21261 var overArgs = castRest(function(func, transforms) { 21262 transforms = (transforms.length == 1 && isArray(transforms[0])) 21263 ? arrayMap(transforms[0], baseUnary(getIteratee())) 21264 : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee())); 21265 21266 var funcsLength = transforms.length; 21267 return baseRest(function(args) { 21268 var index = -1, 21269 length = nativeMin(args.length, funcsLength); 21270 21271 while (++index < length) { 21272 args[index] = transforms[index].call(this, args[index]); 21273 } 21274 return apply(func, this, args); 21275 }); 21276 }); 21277 21278 /** 21279 * Creates a function that invokes `func` with `partials` prepended to the 21280 * arguments it receives. This method is like `_.bind` except it does **not** 21281 * alter the `this` binding. 21282 * 21283 * The `_.partial.placeholder` value, which defaults to `_` in monolithic 21284 * builds, may be used as a placeholder for partially applied arguments. 21285 * 21286 * **Note:** This method doesn't set the "length" property of partially 21287 * applied functions. 21288 * 21289 * @static 21290 * @memberOf _ 21291 * @since 0.2.0 21292 * @category Function 21293 * @param {Function} func The function to partially apply arguments to. 21294 * @param {...*} [partials] The arguments to be partially applied. 21295 * @returns {Function} Returns the new partially applied function. 21296 * @example 21297 * 21298 * function greet(greeting, name) { 21299 * return greeting + ' ' + name; 21300 * } 21301 * 21302 * var sayHelloTo = _.partial(greet, 'hello'); 21303 * sayHelloTo('fred'); 21304 * // => 'hello fred' 21305 * 21306 * // Partially applied with placeholders. 21307 * var greetFred = _.partial(greet, _, 'fred'); 21308 * greetFred('hi'); 21309 * // => 'hi fred' 21310 */ 21311 var partial = baseRest(function(func, partials) { 21312 var holders = replaceHolders(partials, getHolder(partial)); 21313 return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders); 21314 }); 21315 21316 /** 21317 * This method is like `_.partial` except that partially applied arguments 21318 * are appended to the arguments it receives. 21319 * 21320 * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic 21321 * builds, may be used as a placeholder for partially applied arguments. 21322 * 21323 * **Note:** This method doesn't set the "length" property of partially 21324 * applied functions. 21325 * 21326 * @static 21327 * @memberOf _ 21328 * @since 1.0.0 21329 * @category Function 21330 * @param {Function} func The function to partially apply arguments to. 21331 * @param {...*} [partials] The arguments to be partially applied. 21332 * @returns {Function} Returns the new partially applied function. 21333 * @example 21334 * 21335 * function greet(greeting, name) { 21336 * return greeting + ' ' + name; 21337 * } 21338 * 21339 * var greetFred = _.partialRight(greet, 'fred'); 21340 * greetFred('hi'); 21341 * // => 'hi fred' 21342 * 21343 * // Partially applied with placeholders. 21344 * var sayHelloTo = _.partialRight(greet, 'hello', _); 21345 * sayHelloTo('fred'); 21346 * // => 'hello fred' 21347 */ 21348 var partialRight = baseRest(function(func, partials) { 21349 var holders = replaceHolders(partials, getHolder(partialRight)); 21350 return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders); 21351 }); 21352 21353 /** 21354 * Creates a function that invokes `func` with arguments arranged according 21355 * to the specified `indexes` where the argument value at the first index is 21356 * provided as the first argument, the argument value at the second index is 21357 * provided as the second argument, and so on. 21358 * 21359 * @static 21360 * @memberOf _ 21361 * @since 3.0.0 21362 * @category Function 21363 * @param {Function} func The function to rearrange arguments for. 21364 * @param {...(number|number[])} indexes The arranged argument indexes. 21365 * @returns {Function} Returns the new function. 21366 * @example 21367 * 21368 * var rearged = _.rearg(function(a, b, c) { 21369 * return [a, b, c]; 21370 * }, [2, 0, 1]); 21371 * 21372 * rearged('b', 'c', 'a') 21373 * // => ['a', 'b', 'c'] 21374 */ 21375 var rearg = flatRest(function(func, indexes) { 21376 return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes); 21377 }); 21378 21379 /** 21380 * Creates a function that invokes `func` with the `this` binding of the 21381 * created function and arguments from `start` and beyond provided as 21382 * an array. 21383 * 21384 * **Note:** This method is based on the 21385 * [rest parameter](https://mdn.io/rest_parameters). 21386 * 21387 * @static 21388 * @memberOf _ 21389 * @since 4.0.0 21390 * @category Function 21391 * @param {Function} func The function to apply a rest parameter to. 21392 * @param {number} [start=func.length-1] The start position of the rest parameter. 21393 * @returns {Function} Returns the new function. 21394 * @example 21395 * 21396 * var say = _.rest(function(what, names) { 21397 * return what + ' ' + _.initial(names).join(', ') + 21398 * (_.size(names) > 1 ? ', & ' : '') + _.last(names); 21399 * }); 21400 * 21401 * say('hello', 'fred', 'barney', 'pebbles'); 21402 * // => 'hello fred, barney, & pebbles' 21403 */ 21404 function rest(func, start) { 21405 if (typeof func != 'function') { 21406 throw new TypeError(FUNC_ERROR_TEXT); 21407 } 21408 start = start === undefined ? start : toInteger(start); 21409 return baseRest(func, start); 21410 } 21411 21412 /** 21413 * Creates a function that invokes `func` with the `this` binding of the 21414 * create function and an array of arguments much like 21415 * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply). 21416 * 21417 * **Note:** This method is based on the 21418 * [spread operator](https://mdn.io/spread_operator). 21419 * 21420 * @static 21421 * @memberOf _ 21422 * @since 3.2.0 21423 * @category Function 21424 * @param {Function} func The function to spread arguments over. 21425 * @param {number} [start=0] The start position of the spread. 21426 * @returns {Function} Returns the new function. 21427 * @example 21428 * 21429 * var say = _.spread(function(who, what) { 21430 * return who + ' says ' + what; 21431 * }); 21432 * 21433 * say(['fred', 'hello']); 21434 * // => 'fred says hello' 21435 * 21436 * var numbers = Promise.all([ 21437 * Promise.resolve(40), 21438 * Promise.resolve(36) 21439 * ]); 21440 * 21441 * numbers.then(_.spread(function(x, y) { 21442 * return x + y; 21443 * })); 21444 * // => a Promise of 76 21445 */ 21446 function spread(func, start) { 21447 if (typeof func != 'function') { 21448 throw new TypeError(FUNC_ERROR_TEXT); 21449 } 21450 start = start == null ? 0 : nativeMax(toInteger(start), 0); 21451 return baseRest(function(args) { 21452 var array = args[start], 21453 otherArgs = castSlice(args, 0, start); 21454 21455 if (array) { 21456 arrayPush(otherArgs, array); 21457 } 21458 return apply(func, this, otherArgs); 21459 }); 21460 } 21461 21462 /** 21463 * Creates a throttled function that only invokes `func` at most once per 21464 * every `wait` milliseconds. The throttled function comes with a `cancel` 21465 * method to cancel delayed `func` invocations and a `flush` method to 21466 * immediately invoke them. Provide `options` to indicate whether `func` 21467 * should be invoked on the leading and/or trailing edge of the `wait` 21468 * timeout. The `func` is invoked with the last arguments provided to the 21469 * throttled function. Subsequent calls to the throttled function return the 21470 * result of the last `func` invocation. 21471 * 21472 * **Note:** If `leading` and `trailing` options are `true`, `func` is 21473 * invoked on the trailing edge of the timeout only if the throttled function 21474 * is invoked more than once during the `wait` timeout. 21475 * 21476 * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred 21477 * until to the next tick, similar to `setTimeout` with a timeout of `0`. 21478 * 21479 * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) 21480 * for details over the differences between `_.throttle` and `_.debounce`. 21481 * 21482 * @static 21483 * @memberOf _ 21484 * @since 0.1.0 21485 * @category Function 21486 * @param {Function} func The function to throttle. 21487 * @param {number} [wait=0] The number of milliseconds to throttle invocations to. 21488 * @param {Object} [options={}] The options object. 21489 * @param {boolean} [options.leading=true] 21490 * Specify invoking on the leading edge of the timeout. 21491 * @param {boolean} [options.trailing=true] 21492 * Specify invoking on the trailing edge of the timeout. 21493 * @returns {Function} Returns the new throttled function. 21494 * @example 21495 * 21496 * // Avoid excessively updating the position while scrolling. 21497 * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); 21498 * 21499 * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes. 21500 * var throttled = _.throttle(renewToken, 300000, { 'trailing': false }); 21501 * jQuery(element).on('click', throttled); 21502 * 21503 * // Cancel the trailing throttled invocation. 21504 * jQuery(window).on('popstate', throttled.cancel); 21505 */ 21506 function throttle(func, wait, options) { 21507 var leading = true, 21508 trailing = true; 21509 21510 if (typeof func != 'function') { 21511 throw new TypeError(FUNC_ERROR_TEXT); 21512 } 21513 if (isObject(options)) { 21514 leading = 'leading' in options ? !!options.leading : leading; 21515 trailing = 'trailing' in options ? !!options.trailing : trailing; 21516 } 21517 return debounce(func, wait, { 21518 'leading': leading, 21519 'maxWait': wait, 21520 'trailing': trailing 21521 }); 21522 } 21523 21524 /** 21525 * Creates a function that accepts up to one argument, ignoring any 21526 * additional arguments. 21527 * 21528 * @static 21529 * @memberOf _ 21530 * @since 4.0.0 21531 * @category Function 21532 * @param {Function} func The function to cap arguments for. 21533 * @returns {Function} Returns the new capped function. 21534 * @example 21535 * 21536 * _.map(['6', '8', '10'], _.unary(parseInt)); 21537 * // => [6, 8, 10] 21538 */ 21539 function unary(func) { 21540 return ary(func, 1); 21541 } 21542 21543 /** 21544 * Creates a function that provides `value` to `wrapper` as its first 21545 * argument. Any additional arguments provided to the function are appended 21546 * to those provided to the `wrapper`. The wrapper is invoked with the `this` 21547 * binding of the created function. 21548 * 21549 * @static 21550 * @memberOf _ 21551 * @since 0.1.0 21552 * @category Function 21553 * @param {*} value The value to wrap. 21554 * @param {Function} [wrapper=identity] The wrapper function. 21555 * @returns {Function} Returns the new function. 21556 * @example 21557 * 21558 * var p = _.wrap(_.escape, function(func, text) { 21559 * return '<p>' + func(text) + '</p>'; 21560 * }); 21561 * 21562 * p('fred, barney, & pebbles'); 21563 * // => '<p>fred, barney, & pebbles</p>' 21564 */ 21565 function wrap(value, wrapper) { 21566 return partial(castFunction(wrapper), value); 21567 } 21568 21569 /*------------------------------------------------------------------------*/ 21570 21571 /** 21572 * Casts `value` as an array if it's not one. 21573 * 21574 * @static 21575 * @memberOf _ 21576 * @since 4.4.0 21577 * @category Lang 21578 * @param {*} value The value to inspect. 21579 * @returns {Array} Returns the cast array. 21580 * @example 21581 * 21582 * _.castArray(1); 21583 * // => [1] 21584 * 21585 * _.castArray({ 'a': 1 }); 21586 * // => [{ 'a': 1 }] 21587 * 21588 * _.castArray('abc'); 21589 * // => ['abc'] 21590 * 21591 * _.castArray(null); 21592 * // => [null] 21593 * 21594 * _.castArray(undefined); 21595 * // => [undefined] 21596 * 21597 * _.castArray(); 21598 * // => [] 21599 * 21600 * var array = [1, 2, 3]; 21601 * console.log(_.castArray(array) === array); 21602 * // => true 21603 */ 21604 function castArray() { 21605 if (!arguments.length) { 21606 return []; 21607 } 21608 var value = arguments[0]; 21609 return isArray(value) ? value : [value]; 21610 } 21611 21612 /** 21613 * Creates a shallow clone of `value`. 21614 * 21615 * **Note:** This method is loosely based on the 21616 * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) 21617 * and supports cloning arrays, array buffers, booleans, date objects, maps, 21618 * numbers, `Object` objects, regexes, sets, strings, symbols, and typed 21619 * arrays. The own enumerable properties of `arguments` objects are cloned 21620 * as plain objects. An empty object is returned for uncloneable values such 21621 * as error objects, functions, DOM nodes, and WeakMaps. 21622 * 21623 * @static 21624 * @memberOf _ 21625 * @since 0.1.0 21626 * @category Lang 21627 * @param {*} value The value to clone. 21628 * @returns {*} Returns the cloned value. 21629 * @see _.cloneDeep 21630 * @example 21631 * 21632 * var objects = [{ 'a': 1 }, { 'b': 2 }]; 21633 * 21634 * var shallow = _.clone(objects); 21635 * console.log(shallow[0] === objects[0]); 21636 * // => true 21637 */ 21638 function clone(value) { 21639 return baseClone(value, CLONE_SYMBOLS_FLAG); 21640 } 21641 21642 /** 21643 * This method is like `_.clone` except that it accepts `customizer` which 21644 * is invoked to produce the cloned value. If `customizer` returns `undefined`, 21645 * cloning is handled by the method instead. The `customizer` is invoked with 21646 * up to four arguments; (value [, index|key, object, stack]). 21647 * 21648 * @static 21649 * @memberOf _ 21650 * @since 4.0.0 21651 * @category Lang 21652 * @param {*} value The value to clone. 21653 * @param {Function} [customizer] The function to customize cloning. 21654 * @returns {*} Returns the cloned value. 21655 * @see _.cloneDeepWith 21656 * @example 21657 * 21658 * function customizer(value) { 21659 * if (_.isElement(value)) { 21660 * return value.cloneNode(false); 21661 * } 21662 * } 21663 * 21664 * var el = _.cloneWith(document.body, customizer); 21665 * 21666 * console.log(el === document.body); 21667 * // => false 21668 * console.log(el.nodeName); 21669 * // => 'BODY' 21670 * console.log(el.childNodes.length); 21671 * // => 0 21672 */ 21673 function cloneWith(value, customizer) { 21674 customizer = typeof customizer == 'function' ? customizer : undefined; 21675 return baseClone(value, CLONE_SYMBOLS_FLAG, customizer); 21676 } 21677 21678 /** 21679 * This method is like `_.clone` except that it recursively clones `value`. 21680 * 21681 * @static 21682 * @memberOf _ 21683 * @since 1.0.0 21684 * @category Lang 21685 * @param {*} value The value to recursively clone. 21686 * @returns {*} Returns the deep cloned value. 21687 * @see _.clone 21688 * @example 21689 * 21690 * var objects = [{ 'a': 1 }, { 'b': 2 }]; 21691 * 21692 * var deep = _.cloneDeep(objects); 21693 * console.log(deep[0] === objects[0]); 21694 * // => false 21695 */ 21696 function cloneDeep(value) { 21697 return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); 21698 } 21699 21700 /** 21701 * This method is like `_.cloneWith` except that it recursively clones `value`. 21702 * 21703 * @static 21704 * @memberOf _ 21705 * @since 4.0.0 21706 * @category Lang 21707 * @param {*} value The value to recursively clone. 21708 * @param {Function} [customizer] The function to customize cloning. 21709 * @returns {*} Returns the deep cloned value. 21710 * @see _.cloneWith 21711 * @example 21712 * 21713 * function customizer(value) { 21714 * if (_.isElement(value)) { 21715 * return value.cloneNode(true); 21716 * } 21717 * } 21718 * 21719 * var el = _.cloneDeepWith(document.body, customizer); 21720 * 21721 * console.log(el === document.body); 21722 * // => false 21723 * console.log(el.nodeName); 21724 * // => 'BODY' 21725 * console.log(el.childNodes.length); 21726 * // => 20 21727 */ 21728 function cloneDeepWith(value, customizer) { 21729 customizer = typeof customizer == 'function' ? customizer : undefined; 21730 return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer); 21731 } 21732 21733 /** 21734 * Checks if `object` conforms to `source` by invoking the predicate 21735 * properties of `source` with the corresponding property values of `object`. 21736 * 21737 * **Note:** This method is equivalent to `_.conforms` when `source` is 21738 * partially applied. 21739 * 21740 * @static 21741 * @memberOf _ 21742 * @since 4.14.0 21743 * @category Lang 21744 * @param {Object} object The object to inspect. 21745 * @param {Object} source The object of property predicates to conform to. 21746 * @returns {boolean} Returns `true` if `object` conforms, else `false`. 21747 * @example 21748 * 21749 * var object = { 'a': 1, 'b': 2 }; 21750 * 21751 * _.conformsTo(object, { 'b': function(n) { return n > 1; } }); 21752 * // => true 21753 * 21754 * _.conformsTo(object, { 'b': function(n) { return n > 2; } }); 21755 * // => false 21756 */ 21757 function conformsTo(object, source) { 21758 return source == null || baseConformsTo(object, source, keys(source)); 21759 } 21760 21761 /** 21762 * Performs a 21763 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) 21764 * comparison between two values to determine if they are equivalent. 21765 * 21766 * @static 21767 * @memberOf _ 21768 * @since 4.0.0 21769 * @category Lang 21770 * @param {*} value The value to compare. 21771 * @param {*} other The other value to compare. 21772 * @returns {boolean} Returns `true` if the values are equivalent, else `false`. 21773 * @example 21774 * 21775 * var object = { 'a': 1 }; 21776 * var other = { 'a': 1 }; 21777 * 21778 * _.eq(object, object); 21779 * // => true 21780 * 21781 * _.eq(object, other); 21782 * // => false 21783 * 21784 * _.eq('a', 'a'); 21785 * // => true 21786 * 21787 * _.eq('a', Object('a')); 21788 * // => false 21789 * 21790 * _.eq(NaN, NaN); 21791 * // => true 21792 */ 21793 function eq(value, other) { 21794 return value === other || (value !== value && other !== other); 21795 } 21796 21797 /** 21798 * Checks if `value` is greater than `other`. 21799 * 21800 * @static 21801 * @memberOf _ 21802 * @since 3.9.0 21803 * @category Lang 21804 * @param {*} value The value to compare. 21805 * @param {*} other The other value to compare. 21806 * @returns {boolean} Returns `true` if `value` is greater than `other`, 21807 * else `false`. 21808 * @see _.lt 21809 * @example 21810 * 21811 * _.gt(3, 1); 21812 * // => true 21813 * 21814 * _.gt(3, 3); 21815 * // => false 21816 * 21817 * _.gt(1, 3); 21818 * // => false 21819 */ 21820 var gt = createRelationalOperation(baseGt); 21821 21822 /** 21823 * Checks if `value` is greater than or equal to `other`. 21824 * 21825 * @static 21826 * @memberOf _ 21827 * @since 3.9.0 21828 * @category Lang 21829 * @param {*} value The value to compare. 21830 * @param {*} other The other value to compare. 21831 * @returns {boolean} Returns `true` if `value` is greater than or equal to 21832 * `other`, else `false`. 21833 * @see _.lte 21834 * @example 21835 * 21836 * _.gte(3, 1); 21837 * // => true 21838 * 21839 * _.gte(3, 3); 21840 * // => true 21841 * 21842 * _.gte(1, 3); 21843 * // => false 21844 */ 21845 var gte = createRelationalOperation(function(value, other) { 21846 return value >= other; 21847 }); 21848 21849 /** 21850 * Checks if `value` is likely an `arguments` object. 21851 * 21852 * @static 21853 * @memberOf _ 21854 * @since 0.1.0 21855 * @category Lang 21856 * @param {*} value The value to check. 21857 * @returns {boolean} Returns `true` if `value` is an `arguments` object, 21858 * else `false`. 21859 * @example 21860 * 21861 * _.isArguments(function() { return arguments; }()); 21862 * // => true 21863 * 21864 * _.isArguments([1, 2, 3]); 21865 * // => false 21866 */ 21867 var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { 21868 return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && 21869 !propertyIsEnumerable.call(value, 'callee'); 21870 }; 21871 21872 /** 21873 * Checks if `value` is classified as an `Array` object. 21874 * 21875 * @static 21876 * @memberOf _ 21877 * @since 0.1.0 21878 * @category Lang 21879 * @param {*} value The value to check. 21880 * @returns {boolean} Returns `true` if `value` is an array, else `false`. 21881 * @example 21882 * 21883 * _.isArray([1, 2, 3]); 21884 * // => true 21885 * 21886 * _.isArray(document.body.children); 21887 * // => false 21888 * 21889 * _.isArray('abc'); 21890 * // => false 21891 * 21892 * _.isArray(_.noop); 21893 * // => false 21894 */ 21895 var isArray = Array.isArray; 21896 21897 /** 21898 * Checks if `value` is classified as an `ArrayBuffer` object. 21899 * 21900 * @static 21901 * @memberOf _ 21902 * @since 4.3.0 21903 * @category Lang 21904 * @param {*} value The value to check. 21905 * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. 21906 * @example 21907 * 21908 * _.isArrayBuffer(new ArrayBuffer(2)); 21909 * // => true 21910 * 21911 * _.isArrayBuffer(new Array(2)); 21912 * // => false 21913 */ 21914 var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer; 21915 21916 /** 21917 * Checks if `value` is array-like. A value is considered array-like if it's 21918 * not a function and has a `value.length` that's an integer greater than or 21919 * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. 21920 * 21921 * @static 21922 * @memberOf _ 21923 * @since 4.0.0 21924 * @category Lang 21925 * @param {*} value The value to check. 21926 * @returns {boolean} Returns `true` if `value` is array-like, else `false`. 21927 * @example 21928 * 21929 * _.isArrayLike([1, 2, 3]); 21930 * // => true 21931 * 21932 * _.isArrayLike(document.body.children); 21933 * // => true 21934 * 21935 * _.isArrayLike('abc'); 21936 * // => true 21937 * 21938 * _.isArrayLike(_.noop); 21939 * // => false 21940 */ 21941 function isArrayLike(value) { 21942 return value != null && isLength(value.length) && !isFunction(value); 21943 } 21944 21945 /** 21946 * This method is like `_.isArrayLike` except that it also checks if `value` 21947 * is an object. 21948 * 21949 * @static 21950 * @memberOf _ 21951 * @since 4.0.0 21952 * @category Lang 21953 * @param {*} value The value to check. 21954 * @returns {boolean} Returns `true` if `value` is an array-like object, 21955 * else `false`. 21956 * @example 21957 * 21958 * _.isArrayLikeObject([1, 2, 3]); 21959 * // => true 21960 * 21961 * _.isArrayLikeObject(document.body.children); 21962 * // => true 21963 * 21964 * _.isArrayLikeObject('abc'); 21965 * // => false 21966 * 21967 * _.isArrayLikeObject(_.noop); 21968 * // => false 21969 */ 21970 function isArrayLikeObject(value) { 21971 return isObjectLike(value) && isArrayLike(value); 21972 } 21973 21974 /** 21975 * Checks if `value` is classified as a boolean primitive or object. 21976 * 21977 * @static 21978 * @memberOf _ 21979 * @since 0.1.0 21980 * @category Lang 21981 * @param {*} value The value to check. 21982 * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. 21983 * @example 21984 * 21985 * _.isBoolean(false); 21986 * // => true 21987 * 21988 * _.isBoolean(null); 21989 * // => false 21990 */ 21991 function isBoolean(value) { 21992 return value === true || value === false || 21993 (isObjectLike(value) && baseGetTag(value) == boolTag); 21994 } 21995 21996 /** 21997 * Checks if `value` is a buffer. 21998 * 21999 * @static 22000 * @memberOf _ 22001 * @since 4.3.0 22002 * @category Lang 22003 * @param {*} value The value to check. 22004 * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. 22005 * @example 22006 * 22007 * _.isBuffer(new Buffer(2)); 22008 * // => true 22009 * 22010 * _.isBuffer(new Uint8Array(2)); 22011 * // => false 22012 */ 22013 var isBuffer = nativeIsBuffer || stubFalse; 22014 22015 /** 22016 * Checks if `value` is classified as a `Date` object. 22017 * 22018 * @static 22019 * @memberOf _ 22020 * @since 0.1.0 22021 * @category Lang 22022 * @param {*} value The value to check. 22023 * @returns {boolean} Returns `true` if `value` is a date object, else `false`. 22024 * @example 22025 * 22026 * _.isDate(new Date); 22027 * // => true 22028 * 22029 * _.isDate('Mon April 23 2012'); 22030 * // => false 22031 */ 22032 var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate; 22033 22034 /** 22035 * Checks if `value` is likely a DOM element. 22036 * 22037 * @static 22038 * @memberOf _ 22039 * @since 0.1.0 22040 * @category Lang 22041 * @param {*} value The value to check. 22042 * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`. 22043 * @example 22044 * 22045 * _.isElement(document.body); 22046 * // => true 22047 * 22048 * _.isElement('<body>'); 22049 * // => false 22050 */ 22051 function isElement(value) { 22052 return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value); 22053 } 22054 22055 /** 22056 * Checks if `value` is an empty object, collection, map, or set. 22057 * 22058 * Objects are considered empty if they have no own enumerable string keyed 22059 * properties. 22060 * 22061 * Array-like values such as `arguments` objects, arrays, buffers, strings, or 22062 * jQuery-like collections are considered empty if they have a `length` of `0`. 22063 * Similarly, maps and sets are considered empty if they have a `size` of `0`. 22064 * 22065 * @static 22066 * @memberOf _ 22067 * @since 0.1.0 22068 * @category Lang 22069 * @param {*} value The value to check. 22070 * @returns {boolean} Returns `true` if `value` is empty, else `false`. 22071 * @example 22072 * 22073 * _.isEmpty(null); 22074 * // => true 22075 * 22076 * _.isEmpty(true); 22077 * // => true 22078 * 22079 * _.isEmpty(1); 22080 * // => true 22081 * 22082 * _.isEmpty([1, 2, 3]); 22083 * // => false 22084 * 22085 * _.isEmpty({ 'a': 1 }); 22086 * // => false 22087 */ 22088 function isEmpty(value) { 22089 if (value == null) { 22090 return true; 22091 } 22092 if (isArrayLike(value) && 22093 (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || 22094 isBuffer(value) || isTypedArray(value) || isArguments(value))) { 22095 return !value.length; 22096 } 22097 var tag = getTag(value); 22098 if (tag == mapTag || tag == setTag) { 22099 return !value.size; 22100 } 22101 if (isPrototype(value)) { 22102 return !baseKeys(value).length; 22103 } 22104 for (var key in value) { 22105 if (hasOwnProperty.call(value, key)) { 22106 return false; 22107 } 22108 } 22109 return true; 22110 } 22111 22112 /** 22113 * Performs a deep comparison between two values to determine if they are 22114 * equivalent. 22115 * 22116 * **Note:** This method supports comparing arrays, array buffers, booleans, 22117 * date objects, error objects, maps, numbers, `Object` objects, regexes, 22118 * sets, strings, symbols, and typed arrays. `Object` objects are compared 22119 * by their own, not inherited, enumerable properties. Functions and DOM 22120 * nodes are compared by strict equality, i.e. `===`. 22121 * 22122 * @static 22123 * @memberOf _ 22124 * @since 0.1.0 22125 * @category Lang 22126 * @param {*} value The value to compare. 22127 * @param {*} other The other value to compare. 22128 * @returns {boolean} Returns `true` if the values are equivalent, else `false`. 22129 * @example 22130 * 22131 * var object = { 'a': 1 }; 22132 * var other = { 'a': 1 }; 22133 * 22134 * _.isEqual(object, other); 22135 * // => true 22136 * 22137 * object === other; 22138 * // => false 22139 */ 22140 function isEqual(value, other) { 22141 return baseIsEqual(value, other); 22142 } 22143 22144 /** 22145 * This method is like `_.isEqual` except that it accepts `customizer` which 22146 * is invoked to compare values. If `customizer` returns `undefined`, comparisons 22147 * are handled by the method instead. The `customizer` is invoked with up to 22148 * six arguments: (objValue, othValue [, index|key, object, other, stack]). 22149 * 22150 * @static 22151 * @memberOf _ 22152 * @since 4.0.0 22153 * @category Lang 22154 * @param {*} value The value to compare. 22155 * @param {*} other The other value to compare. 22156 * @param {Function} [customizer] The function to customize comparisons. 22157 * @returns {boolean} Returns `true` if the values are equivalent, else `false`. 22158 * @example 22159 * 22160 * function isGreeting(value) { 22161 * return /^h(?:i|ello)$/.test(value); 22162 * } 22163 * 22164 * function customizer(objValue, othValue) { 22165 * if (isGreeting(objValue) && isGreeting(othValue)) { 22166 * return true; 22167 * } 22168 * } 22169 * 22170 * var array = ['hello', 'goodbye']; 22171 * var other = ['hi', 'goodbye']; 22172 * 22173 * _.isEqualWith(array, other, customizer); 22174 * // => true 22175 */ 22176 function isEqualWith(value, other, customizer) { 22177 customizer = typeof customizer == 'function' ? customizer : undefined; 22178 var result = customizer ? customizer(value, other) : undefined; 22179 return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result; 22180 } 22181 22182 /** 22183 * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, 22184 * `SyntaxError`, `TypeError`, or `URIError` object. 22185 * 22186 * @static 22187 * @memberOf _ 22188 * @since 3.0.0 22189 * @category Lang 22190 * @param {*} value The value to check. 22191 * @returns {boolean} Returns `true` if `value` is an error object, else `false`. 22192 * @example 22193 * 22194 * _.isError(new Error); 22195 * // => true 22196 * 22197 * _.isError(Error); 22198 * // => false 22199 */ 22200 function isError(value) { 22201 if (!isObjectLike(value)) { 22202 return false; 22203 } 22204 var tag = baseGetTag(value); 22205 return tag == errorTag || tag == domExcTag || 22206 (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value)); 22207 } 22208 22209 /** 22210 * Checks if `value` is a finite primitive number. 22211 * 22212 * **Note:** This method is based on 22213 * [`Number.isFinite`](https://mdn.io/Number/isFinite). 22214 * 22215 * @static 22216 * @memberOf _ 22217 * @since 0.1.0 22218 * @category Lang 22219 * @param {*} value The value to check. 22220 * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. 22221 * @example 22222 * 22223 * _.isFinite(3); 22224 * // => true 22225 * 22226 * _.isFinite(Number.MIN_VALUE); 22227 * // => true 22228 * 22229 * _.isFinite(Infinity); 22230 * // => false 22231 * 22232 * _.isFinite('3'); 22233 * // => false 22234 */ 22235 function isFinite(value) { 22236 return typeof value == 'number' && nativeIsFinite(value); 22237 } 22238 22239 /** 22240 * Checks if `value` is classified as a `Function` object. 22241 * 22242 * @static 22243 * @memberOf _ 22244 * @since 0.1.0 22245 * @category Lang 22246 * @param {*} value The value to check. 22247 * @returns {boolean} Returns `true` if `value` is a function, else `false`. 22248 * @example 22249 * 22250 * _.isFunction(_); 22251 * // => true 22252 * 22253 * _.isFunction(/abc/); 22254 * // => false 22255 */ 22256 function isFunction(value) { 22257 if (!isObject(value)) { 22258 return false; 22259 } 22260 // The use of `Object#toString` avoids issues with the `typeof` operator 22261 // in Safari 9 which returns 'object' for typed arrays and other constructors. 22262 var tag = baseGetTag(value); 22263 return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; 22264 } 22265 22266 /** 22267 * Checks if `value` is an integer. 22268 * 22269 * **Note:** This method is based on 22270 * [`Number.isInteger`](https://mdn.io/Number/isInteger). 22271 * 22272 * @static 22273 * @memberOf _ 22274 * @since 4.0.0 22275 * @category Lang 22276 * @param {*} value The value to check. 22277 * @returns {boolean} Returns `true` if `value` is an integer, else `false`. 22278 * @example 22279 * 22280 * _.isInteger(3); 22281 * // => true 22282 * 22283 * _.isInteger(Number.MIN_VALUE); 22284 * // => false 22285 * 22286 * _.isInteger(Infinity); 22287 * // => false 22288 * 22289 * _.isInteger('3'); 22290 * // => false 22291 */ 22292 function isInteger(value) { 22293 return typeof value == 'number' && value == toInteger(value); 22294 } 22295 22296 /** 22297 * Checks if `value` is a valid array-like length. 22298 * 22299 * **Note:** This method is loosely based on 22300 * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). 22301 * 22302 * @static 22303 * @memberOf _ 22304 * @since 4.0.0 22305 * @category Lang 22306 * @param {*} value The value to check. 22307 * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. 22308 * @example 22309 * 22310 * _.isLength(3); 22311 * // => true 22312 * 22313 * _.isLength(Number.MIN_VALUE); 22314 * // => false 22315 * 22316 * _.isLength(Infinity); 22317 * // => false 22318 * 22319 * _.isLength('3'); 22320 * // => false 22321 */ 22322 function isLength(value) { 22323 return typeof value == 'number' && 22324 value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; 22325 } 22326 22327 /** 22328 * Checks if `value` is the 22329 * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) 22330 * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) 22331 * 22332 * @static 22333 * @memberOf _ 22334 * @since 0.1.0 22335 * @category Lang 22336 * @param {*} value The value to check. 22337 * @returns {boolean} Returns `true` if `value` is an object, else `false`. 22338 * @example 22339 * 22340 * _.isObject({}); 22341 * // => true 22342 * 22343 * _.isObject([1, 2, 3]); 22344 * // => true 22345 * 22346 * _.isObject(_.noop); 22347 * // => true 22348 * 22349 * _.isObject(null); 22350 * // => false 22351 */ 22352 function isObject(value) { 22353 var type = typeof value; 22354 return value != null && (type == 'object' || type == 'function'); 22355 } 22356 22357 /** 22358 * Checks if `value` is object-like. A value is object-like if it's not `null` 22359 * and has a `typeof` result of "object". 22360 * 22361 * @static 22362 * @memberOf _ 22363 * @since 4.0.0 22364 * @category Lang 22365 * @param {*} value The value to check. 22366 * @returns {boolean} Returns `true` if `value` is object-like, else `false`. 22367 * @example 22368 * 22369 * _.isObjectLike({}); 22370 * // => true 22371 * 22372 * _.isObjectLike([1, 2, 3]); 22373 * // => true 22374 * 22375 * _.isObjectLike(_.noop); 22376 * // => false 22377 * 22378 * _.isObjectLike(null); 22379 * // => false 22380 */ 22381 function isObjectLike(value) { 22382 return value != null && typeof value == 'object'; 22383 } 22384 22385 /** 22386 * Checks if `value` is classified as a `Map` object. 22387 * 22388 * @static 22389 * @memberOf _ 22390 * @since 4.3.0 22391 * @category Lang 22392 * @param {*} value The value to check. 22393 * @returns {boolean} Returns `true` if `value` is a map, else `false`. 22394 * @example 22395 * 22396 * _.isMap(new Map); 22397 * // => true 22398 * 22399 * _.isMap(new WeakMap); 22400 * // => false 22401 */ 22402 var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap; 22403 22404 /** 22405 * Performs a partial deep comparison between `object` and `source` to 22406 * determine if `object` contains equivalent property values. 22407 * 22408 * **Note:** This method is equivalent to `_.matches` when `source` is 22409 * partially applied. 22410 * 22411 * Partial comparisons will match empty array and empty object `source` 22412 * values against any array or object value, respectively. See `_.isEqual` 22413 * for a list of supported value comparisons. 22414 * 22415 * @static 22416 * @memberOf _ 22417 * @since 3.0.0 22418 * @category Lang 22419 * @param {Object} object The object to inspect. 22420 * @param {Object} source The object of property values to match. 22421 * @returns {boolean} Returns `true` if `object` is a match, else `false`. 22422 * @example 22423 * 22424 * var object = { 'a': 1, 'b': 2 }; 22425 * 22426 * _.isMatch(object, { 'b': 2 }); 22427 * // => true 22428 * 22429 * _.isMatch(object, { 'b': 1 }); 22430 * // => false 22431 */ 22432 function isMatch(object, source) { 22433 return object === source || baseIsMatch(object, source, getMatchData(source)); 22434 } 22435 22436 /** 22437 * This method is like `_.isMatch` except that it accepts `customizer` which 22438 * is invoked to compare values. If `customizer` returns `undefined`, comparisons 22439 * are handled by the method instead. The `customizer` is invoked with five 22440 * arguments: (objValue, srcValue, index|key, object, source). 22441 * 22442 * @static 22443 * @memberOf _ 22444 * @since 4.0.0 22445 * @category Lang 22446 * @param {Object} object The object to inspect. 22447 * @param {Object} source The object of property values to match. 22448 * @param {Function} [customizer] The function to customize comparisons. 22449 * @returns {boolean} Returns `true` if `object` is a match, else `false`. 22450 * @example 22451 * 22452 * function isGreeting(value) { 22453 * return /^h(?:i|ello)$/.test(value); 22454 * } 22455 * 22456 * function customizer(objValue, srcValue) { 22457 * if (isGreeting(objValue) && isGreeting(srcValue)) { 22458 * return true; 22459 * } 22460 * } 22461 * 22462 * var object = { 'greeting': 'hello' }; 22463 * var source = { 'greeting': 'hi' }; 22464 * 22465 * _.isMatchWith(object, source, customizer); 22466 * // => true 22467 */ 22468 function isMatchWith(object, source, customizer) { 22469 customizer = typeof customizer == 'function' ? customizer : undefined; 22470 return baseIsMatch(object, source, getMatchData(source), customizer); 22471 } 22472 22473 /** 22474 * Checks if `value` is `NaN`. 22475 * 22476 * **Note:** This method is based on 22477 * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as 22478 * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for 22479 * `undefined` and other non-number values. 22480 * 22481 * @static 22482 * @memberOf _ 22483 * @since 0.1.0 22484 * @category Lang 22485 * @param {*} value The value to check. 22486 * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. 22487 * @example 22488 * 22489 * _.isNaN(NaN); 22490 * // => true 22491 * 22492 * _.isNaN(new Number(NaN)); 22493 * // => true 22494 * 22495 * isNaN(undefined); 22496 * // => true 22497 * 22498 * _.isNaN(undefined); 22499 * // => false 22500 */ 22501 function isNaN(value) { 22502 // An `NaN` primitive is the only value that is not equal to itself. 22503 // Perform the `toStringTag` check first to avoid errors with some 22504 // ActiveX objects in IE. 22505 return isNumber(value) && value != +value; 22506 } 22507 22508 /** 22509 * Checks if `value` is a pristine native function. 22510 * 22511 * **Note:** This method can't reliably detect native functions in the presence 22512 * of the core-js package because core-js circumvents this kind of detection. 22513 * Despite multiple requests, the core-js maintainer has made it clear: any 22514 * attempt to fix the detection will be obstructed. As a result, we're left 22515 * with little choice but to throw an error. Unfortunately, this also affects 22516 * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill), 22517 * which rely on core-js. 22518 * 22519 * @static 22520 * @memberOf _ 22521 * @since 3.0.0 22522 * @category Lang 22523 * @param {*} value The value to check. 22524 * @returns {boolean} Returns `true` if `value` is a native function, 22525 * else `false`. 22526 * @example 22527 * 22528 * _.isNative(Array.prototype.push); 22529 * // => true 22530 * 22531 * _.isNative(_); 22532 * // => false 22533 */ 22534 function isNative(value) { 22535 if (isMaskable(value)) { 22536 throw new Error(CORE_ERROR_TEXT); 22537 } 22538 return baseIsNative(value); 22539 } 22540 22541 /** 22542 * Checks if `value` is `null`. 22543 * 22544 * @static 22545 * @memberOf _ 22546 * @since 0.1.0 22547 * @category Lang 22548 * @param {*} value The value to check. 22549 * @returns {boolean} Returns `true` if `value` is `null`, else `false`. 22550 * @example 22551 * 22552 * _.isNull(null); 22553 * // => true 22554 * 22555 * _.isNull(void 0); 22556 * // => false 22557 */ 22558 function isNull(value) { 22559 return value === null; 22560 } 22561 22562 /** 22563 * Checks if `value` is `null` or `undefined`. 22564 * 22565 * @static 22566 * @memberOf _ 22567 * @since 4.0.0 22568 * @category Lang 22569 * @param {*} value The value to check. 22570 * @returns {boolean} Returns `true` if `value` is nullish, else `false`. 22571 * @example 22572 * 22573 * _.isNil(null); 22574 * // => true 22575 * 22576 * _.isNil(void 0); 22577 * // => true 22578 * 22579 * _.isNil(NaN); 22580 * // => false 22581 */ 22582 function isNil(value) { 22583 return value == null; 22584 } 22585 22586 /** 22587 * Checks if `value` is classified as a `Number` primitive or object. 22588 * 22589 * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are 22590 * classified as numbers, use the `_.isFinite` method. 22591 * 22592 * @static 22593 * @memberOf _ 22594 * @since 0.1.0 22595 * @category Lang 22596 * @param {*} value The value to check. 22597 * @returns {boolean} Returns `true` if `value` is a number, else `false`. 22598 * @example 22599 * 22600 * _.isNumber(3); 22601 * // => true 22602 * 22603 * _.isNumber(Number.MIN_VALUE); 22604 * // => true 22605 * 22606 * _.isNumber(Infinity); 22607 * // => true 22608 * 22609 * _.isNumber('3'); 22610 * // => false 22611 */ 22612 function isNumber(value) { 22613 return typeof value == 'number' || 22614 (isObjectLike(value) && baseGetTag(value) == numberTag); 22615 } 22616 22617 /** 22618 * Checks if `value` is a plain object, that is, an object created by the 22619 * `Object` constructor or one with a `[[Prototype]]` of `null`. 22620 * 22621 * @static 22622 * @memberOf _ 22623 * @since 0.8.0 22624 * @category Lang 22625 * @param {*} value The value to check. 22626 * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. 22627 * @example 22628 * 22629 * function Foo() { 22630 * this.a = 1; 22631 * } 22632 * 22633 * _.isPlainObject(new Foo); 22634 * // => false 22635 * 22636 * _.isPlainObject([1, 2, 3]); 22637 * // => false 22638 * 22639 * _.isPlainObject({ 'x': 0, 'y': 0 }); 22640 * // => true 22641 * 22642 * _.isPlainObject(Object.create(null)); 22643 * // => true 22644 */ 22645 function isPlainObject(value) { 22646 if (!isObjectLike(value) || baseGetTag(value) != objectTag) { 22647 return false; 22648 } 22649 var proto = getPrototype(value); 22650 if (proto === null) { 22651 return true; 22652 } 22653 var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; 22654 return typeof Ctor == 'function' && Ctor instanceof Ctor && 22655 funcToString.call(Ctor) == objectCtorString; 22656 } 22657 22658 /** 22659 * Checks if `value` is classified as a `RegExp` object. 22660 * 22661 * @static 22662 * @memberOf _ 22663 * @since 0.1.0 22664 * @category Lang 22665 * @param {*} value The value to check. 22666 * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. 22667 * @example 22668 * 22669 * _.isRegExp(/abc/); 22670 * // => true 22671 * 22672 * _.isRegExp('/abc/'); 22673 * // => false 22674 */ 22675 var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; 22676 22677 /** 22678 * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754 22679 * double precision number which isn't the result of a rounded unsafe integer. 22680 * 22681 * **Note:** This method is based on 22682 * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger). 22683 * 22684 * @static 22685 * @memberOf _ 22686 * @since 4.0.0 22687 * @category Lang 22688 * @param {*} value The value to check. 22689 * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`. 22690 * @example 22691 * 22692 * _.isSafeInteger(3); 22693 * // => true 22694 * 22695 * _.isSafeInteger(Number.MIN_VALUE); 22696 * // => false 22697 * 22698 * _.isSafeInteger(Infinity); 22699 * // => false 22700 * 22701 * _.isSafeInteger('3'); 22702 * // => false 22703 */ 22704 function isSafeInteger(value) { 22705 return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER; 22706 } 22707 22708 /** 22709 * Checks if `value` is classified as a `Set` object. 22710 * 22711 * @static 22712 * @memberOf _ 22713 * @since 4.3.0 22714 * @category Lang 22715 * @param {*} value The value to check. 22716 * @returns {boolean} Returns `true` if `value` is a set, else `false`. 22717 * @example 22718 * 22719 * _.isSet(new Set); 22720 * // => true 22721 * 22722 * _.isSet(new WeakSet); 22723 * // => false 22724 */ 22725 var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; 22726 22727 /** 22728 * Checks if `value` is classified as a `String` primitive or object. 22729 * 22730 * @static 22731 * @since 0.1.0 22732 * @memberOf _ 22733 * @category Lang 22734 * @param {*} value The value to check. 22735 * @returns {boolean} Returns `true` if `value` is a string, else `false`. 22736 * @example 22737 * 22738 * _.isString('abc'); 22739 * // => true 22740 * 22741 * _.isString(1); 22742 * // => false 22743 */ 22744 function isString(value) { 22745 return typeof value == 'string' || 22746 (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); 22747 } 22748 22749 /** 22750 * Checks if `value` is classified as a `Symbol` primitive or object. 22751 * 22752 * @static 22753 * @memberOf _ 22754 * @since 4.0.0 22755 * @category Lang 22756 * @param {*} value The value to check. 22757 * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. 22758 * @example 22759 * 22760 * _.isSymbol(Symbol.iterator); 22761 * // => true 22762 * 22763 * _.isSymbol('abc'); 22764 * // => false 22765 */ 22766 function isSymbol(value) { 22767 return typeof value == 'symbol' || 22768 (isObjectLike(value) && baseGetTag(value) == symbolTag); 22769 } 22770 22771 /** 22772 * Checks if `value` is classified as a typed array. 22773 * 22774 * @static 22775 * @memberOf _ 22776 * @since 3.0.0 22777 * @category Lang 22778 * @param {*} value The value to check. 22779 * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. 22780 * @example 22781 * 22782 * _.isTypedArray(new Uint8Array); 22783 * // => true 22784 * 22785 * _.isTypedArray([]); 22786 * // => false 22787 */ 22788 var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; 22789 22790 /** 22791 * Checks if `value` is `undefined`. 22792 * 22793 * @static 22794 * @since 0.1.0 22795 * @memberOf _ 22796 * @category Lang 22797 * @param {*} value The value to check. 22798 * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. 22799 * @example 22800 * 22801 * _.isUndefined(void 0); 22802 * // => true 22803 * 22804 * _.isUndefined(null); 22805 * // => false 22806 */ 22807 function isUndefined(value) { 22808 return value === undefined; 22809 } 22810 22811 /** 22812 * Checks if `value` is classified as a `WeakMap` object. 22813 * 22814 * @static 22815 * @memberOf _ 22816 * @since 4.3.0 22817 * @category Lang 22818 * @param {*} value The value to check. 22819 * @returns {boolean} Returns `true` if `value` is a weak map, else `false`. 22820 * @example 22821 * 22822 * _.isWeakMap(new WeakMap); 22823 * // => true 22824 * 22825 * _.isWeakMap(new Map); 22826 * // => false 22827 */ 22828 function isWeakMap(value) { 22829 return isObjectLike(value) && getTag(value) == weakMapTag; 22830 } 22831 22832 /** 22833 * Checks if `value` is classified as a `WeakSet` object. 22834 * 22835 * @static 22836 * @memberOf _ 22837 * @since 4.3.0 22838 * @category Lang 22839 * @param {*} value The value to check. 22840 * @returns {boolean} Returns `true` if `value` is a weak set, else `false`. 22841 * @example 22842 * 22843 * _.isWeakSet(new WeakSet); 22844 * // => true 22845 * 22846 * _.isWeakSet(new Set); 22847 * // => false 22848 */ 22849 function isWeakSet(value) { 22850 return isObjectLike(value) && baseGetTag(value) == weakSetTag; 22851 } 22852 22853 /** 22854 * Checks if `value` is less than `other`. 22855 * 22856 * @static 22857 * @memberOf _ 22858 * @since 3.9.0 22859 * @category Lang 22860 * @param {*} value The value to compare. 22861 * @param {*} other The other value to compare. 22862 * @returns {boolean} Returns `true` if `value` is less than `other`, 22863 * else `false`. 22864 * @see _.gt 22865 * @example 22866 * 22867 * _.lt(1, 3); 22868 * // => true 22869 * 22870 * _.lt(3, 3); 22871 * // => false 22872 * 22873 * _.lt(3, 1); 22874 * // => false 22875 */ 22876 var lt = createRelationalOperation(baseLt); 22877 22878 /** 22879 * Checks if `value` is less than or equal to `other`. 22880 * 22881 * @static 22882 * @memberOf _ 22883 * @since 3.9.0 22884 * @category Lang 22885 * @param {*} value The value to compare. 22886 * @param {*} other The other value to compare. 22887 * @returns {boolean} Returns `true` if `value` is less than or equal to 22888 * `other`, else `false`. 22889 * @see _.gte 22890 * @example 22891 * 22892 * _.lte(1, 3); 22893 * // => true 22894 * 22895 * _.lte(3, 3); 22896 * // => true 22897 * 22898 * _.lte(3, 1); 22899 * // => false 22900 */ 22901 var lte = createRelationalOperation(function(value, other) { 22902 return value <= other; 22903 }); 22904 22905 /** 22906 * Converts `value` to an array. 22907 * 22908 * @static 22909 * @since 0.1.0 22910 * @memberOf _ 22911 * @category Lang 22912 * @param {*} value The value to convert. 22913 * @returns {Array} Returns the converted array. 22914 * @example 22915 * 22916 * _.toArray({ 'a': 1, 'b': 2 }); 22917 * // => [1, 2] 22918 * 22919 * _.toArray('abc'); 22920 * // => ['a', 'b', 'c'] 22921 * 22922 * _.toArray(1); 22923 * // => [] 22924 * 22925 * _.toArray(null); 22926 * // => [] 22927 */ 22928 function toArray(value) { 22929 if (!value) { 22930 return []; 22931 } 22932 if (isArrayLike(value)) { 22933 return isString(value) ? stringToArray(value) : copyArray(value); 22934 } 22935 if (symIterator && value[symIterator]) { 22936 return iteratorToArray(value[symIterator]()); 22937 } 22938 var tag = getTag(value), 22939 func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values); 22940 22941 return func(value); 22942 } 22943 22944 /** 22945 * Converts `value` to a finite number. 22946 * 22947 * @static 22948 * @memberOf _ 22949 * @since 4.12.0 22950 * @category Lang 22951 * @param {*} value The value to convert. 22952 * @returns {number} Returns the converted number. 22953 * @example 22954 * 22955 * _.toFinite(3.2); 22956 * // => 3.2 22957 * 22958 * _.toFinite(Number.MIN_VALUE); 22959 * // => 5e-324 22960 * 22961 * _.toFinite(Infinity); 22962 * // => 1.7976931348623157e+308 22963 * 22964 * _.toFinite('3.2'); 22965 * // => 3.2 22966 */ 22967 function toFinite(value) { 22968 if (!value) { 22969 return value === 0 ? value : 0; 22970 } 22971 value = toNumber(value); 22972 if (value === INFINITY || value === -INFINITY) { 22973 var sign = (value < 0 ? -1 : 1); 22974 return sign * MAX_INTEGER; 22975 } 22976 return value === value ? value : 0; 22977 } 22978 22979 /** 22980 * Converts `value` to an integer. 22981 * 22982 * **Note:** This method is loosely based on 22983 * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). 22984 * 22985 * @static 22986 * @memberOf _ 22987 * @since 4.0.0 22988 * @category Lang 22989 * @param {*} value The value to convert. 22990 * @returns {number} Returns the converted integer. 22991 * @example 22992 * 22993 * _.toInteger(3.2); 22994 * // => 3 22995 * 22996 * _.toInteger(Number.MIN_VALUE); 22997 * // => 0 22998 * 22999 * _.toInteger(Infinity); 23000 * // => 1.7976931348623157e+308 23001 * 23002 * _.toInteger('3.2'); 23003 * // => 3 23004 */ 23005 function toInteger(value) { 23006 var result = toFinite(value), 23007 remainder = result % 1; 23008 23009 return result === result ? (remainder ? result - remainder : result) : 0; 23010 } 23011 23012 /** 23013 * Converts `value` to an integer suitable for use as the length of an 23014 * array-like object. 23015 * 23016 * **Note:** This method is based on 23017 * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). 23018 * 23019 * @static 23020 * @memberOf _ 23021 * @since 4.0.0 23022 * @category Lang 23023 * @param {*} value The value to convert. 23024 * @returns {number} Returns the converted integer. 23025 * @example 23026 * 23027 * _.toLength(3.2); 23028 * // => 3 23029 * 23030 * _.toLength(Number.MIN_VALUE); 23031 * // => 0 23032 * 23033 * _.toLength(Infinity); 23034 * // => 4294967295 23035 * 23036 * _.toLength('3.2'); 23037 * // => 3 23038 */ 23039 function toLength(value) { 23040 return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0; 23041 } 23042 23043 /** 23044 * Converts `value` to a number. 23045 * 23046 * @static 23047 * @memberOf _ 23048 * @since 4.0.0 23049 * @category Lang 23050 * @param {*} value The value to process. 23051 * @returns {number} Returns the number. 23052 * @example 23053 * 23054 * _.toNumber(3.2); 23055 * // => 3.2 23056 * 23057 * _.toNumber(Number.MIN_VALUE); 23058 * // => 5e-324 23059 * 23060 * _.toNumber(Infinity); 23061 * // => Infinity 23062 * 23063 * _.toNumber('3.2'); 23064 * // => 3.2 23065 */ 23066 function toNumber(value) { 23067 if (typeof value == 'number') { 23068 return value; 23069 } 23070 if (isSymbol(value)) { 23071 return NAN; 23072 } 23073 if (isObject(value)) { 23074 var other = typeof value.valueOf == 'function' ? value.valueOf() : value; 23075 value = isObject(other) ? (other + '') : other; 23076 } 23077 if (typeof value != 'string') { 23078 return value === 0 ? value : +value; 23079 } 23080 value = baseTrim(value); 23081 var isBinary = reIsBinary.test(value); 23082 return (isBinary || reIsOctal.test(value)) 23083 ? freeParseInt(value.slice(2), isBinary ? 2 : 8) 23084 : (reIsBadHex.test(value) ? NAN : +value); 23085 } 23086 23087 /** 23088 * Converts `value` to a plain object flattening inherited enumerable string 23089 * keyed properties of `value` to own properties of the plain object. 23090 * 23091 * @static 23092 * @memberOf _ 23093 * @since 3.0.0 23094 * @category Lang 23095 * @param {*} value The value to convert. 23096 * @returns {Object} Returns the converted plain object. 23097 * @example 23098 * 23099 * function Foo() { 23100 * this.b = 2; 23101 * } 23102 * 23103 * Foo.prototype.c = 3; 23104 * 23105 * _.assign({ 'a': 1 }, new Foo); 23106 * // => { 'a': 1, 'b': 2 } 23107 * 23108 * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); 23109 * // => { 'a': 1, 'b': 2, 'c': 3 } 23110 */ 23111 function toPlainObject(value) { 23112 return copyObject(value, keysIn(value)); 23113 } 23114 23115 /** 23116 * Converts `value` to a safe integer. A safe integer can be compared and 23117 * represented correctly. 23118 * 23119 * @static 23120 * @memberOf _ 23121 * @since 4.0.0 23122 * @category Lang 23123 * @param {*} value The value to convert. 23124 * @returns {number} Returns the converted integer. 23125 * @example 23126 * 23127 * _.toSafeInteger(3.2); 23128 * // => 3 23129 * 23130 * _.toSafeInteger(Number.MIN_VALUE); 23131 * // => 0 23132 * 23133 * _.toSafeInteger(Infinity); 23134 * // => 9007199254740991 23135 * 23136 * _.toSafeInteger('3.2'); 23137 * // => 3 23138 */ 23139 function toSafeInteger(value) { 23140 return value 23141 ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER) 23142 : (value === 0 ? value : 0); 23143 } 23144 23145 /** 23146 * Converts `value` to a string. An empty string is returned for `null` 23147 * and `undefined` values. The sign of `-0` is preserved. 23148 * 23149 * @static 23150 * @memberOf _ 23151 * @since 4.0.0 23152 * @category Lang 23153 * @param {*} value The value to convert. 23154 * @returns {string} Returns the converted string. 23155 * @example 23156 * 23157 * _.toString(null); 23158 * // => '' 23159 * 23160 * _.toString(-0); 23161 * // => '-0' 23162 * 23163 * _.toString([1, 2, 3]); 23164 * // => '1,2,3' 23165 */ 23166 function toString(value) { 23167 return value == null ? '' : baseToString(value); 23168 } 23169 23170 /*------------------------------------------------------------------------*/ 23171 23172 /** 23173 * Assigns own enumerable string keyed properties of source objects to the 23174 * destination object. Source objects are applied from left to right. 23175 * Subsequent sources overwrite property assignments of previous sources. 23176 * 23177 * **Note:** This method mutates `object` and is loosely based on 23178 * [`Object.assign`](https://mdn.io/Object/assign). 23179 * 23180 * @static 23181 * @memberOf _ 23182 * @since 0.10.0 23183 * @category Object 23184 * @param {Object} object The destination object. 23185 * @param {...Object} [sources] The source objects. 23186 * @returns {Object} Returns `object`. 23187 * @see _.assignIn 23188 * @example 23189 * 23190 * function Foo() { 23191 * this.a = 1; 23192 * } 23193 * 23194 * function Bar() { 23195 * this.c = 3; 23196 * } 23197 * 23198 * Foo.prototype.b = 2; 23199 * Bar.prototype.d = 4; 23200 * 23201 * _.assign({ 'a': 0 }, new Foo, new Bar); 23202 * // => { 'a': 1, 'c': 3 } 23203 */ 23204 var assign = createAssigner(function(object, source) { 23205 if (isPrototype(source) || isArrayLike(source)) { 23206 copyObject(source, keys(source), object); 23207 return; 23208 } 23209 for (var key in source) { 23210 if (hasOwnProperty.call(source, key)) { 23211 assignValue(object, key, source[key]); 23212 } 23213 } 23214 }); 23215 23216 /** 23217 * This method is like `_.assign` except that it iterates over own and 23218 * inherited source properties. 23219 * 23220 * **Note:** This method mutates `object`. 23221 * 23222 * @static 23223 * @memberOf _ 23224 * @since 4.0.0 23225 * @alias extend 23226 * @category Object 23227 * @param {Object} object The destination object. 23228 * @param {...Object} [sources] The source objects. 23229 * @returns {Object} Returns `object`. 23230 * @see _.assign 23231 * @example 23232 * 23233 * function Foo() { 23234 * this.a = 1; 23235 * } 23236 * 23237 * function Bar() { 23238 * this.c = 3; 23239 * } 23240 * 23241 * Foo.prototype.b = 2; 23242 * Bar.prototype.d = 4; 23243 * 23244 * _.assignIn({ 'a': 0 }, new Foo, new Bar); 23245 * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } 23246 */ 23247 var assignIn = createAssigner(function(object, source) { 23248 copyObject(source, keysIn(source), object); 23249 }); 23250 23251 /** 23252 * This method is like `_.assignIn` except that it accepts `customizer` 23253 * which is invoked to produce the assigned values. If `customizer` returns 23254 * `undefined`, assignment is handled by the method instead. The `customizer` 23255 * is invoked with five arguments: (objValue, srcValue, key, object, source). 23256 * 23257 * **Note:** This method mutates `object`. 23258 * 23259 * @static 23260 * @memberOf _ 23261 * @since 4.0.0 23262 * @alias extendWith 23263 * @category Object 23264 * @param {Object} object The destination object. 23265 * @param {...Object} sources The source objects. 23266 * @param {Function} [customizer] The function to customize assigned values. 23267 * @returns {Object} Returns `object`. 23268 * @see _.assignWith 23269 * @example 23270 * 23271 * function customizer(objValue, srcValue) { 23272 * return _.isUndefined(objValue) ? srcValue : objValue; 23273 * } 23274 * 23275 * var defaults = _.partialRight(_.assignInWith, customizer); 23276 * 23277 * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); 23278 * // => { 'a': 1, 'b': 2 } 23279 */ 23280 var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { 23281 copyObject(source, keysIn(source), object, customizer); 23282 }); 23283 23284 /** 23285 * This method is like `_.assign` except that it accepts `customizer` 23286 * which is invoked to produce the assigned values. If `customizer` returns 23287 * `undefined`, assignment is handled by the method instead. The `customizer` 23288 * is invoked with five arguments: (objValue, srcValue, key, object, source). 23289 * 23290 * **Note:** This method mutates `object`. 23291 * 23292 * @static 23293 * @memberOf _ 23294 * @since 4.0.0 23295 * @category Object 23296 * @param {Object} object The destination object. 23297 * @param {...Object} sources The source objects. 23298 * @param {Function} [customizer] The function to customize assigned values. 23299 * @returns {Object} Returns `object`. 23300 * @see _.assignInWith 23301 * @example 23302 * 23303 * function customizer(objValue, srcValue) { 23304 * return _.isUndefined(objValue) ? srcValue : objValue; 23305 * } 23306 * 23307 * var defaults = _.partialRight(_.assignWith, customizer); 23308 * 23309 * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); 23310 * // => { 'a': 1, 'b': 2 } 23311 */ 23312 var assignWith = createAssigner(function(object, source, srcIndex, customizer) { 23313 copyObject(source, keys(source), object, customizer); 23314 }); 23315 23316 /** 23317 * Creates an array of values corresponding to `paths` of `object`. 23318 * 23319 * @static 23320 * @memberOf _ 23321 * @since 1.0.0 23322 * @category Object 23323 * @param {Object} object The object to iterate over. 23324 * @param {...(string|string[])} [paths] The property paths to pick. 23325 * @returns {Array} Returns the picked values. 23326 * @example 23327 * 23328 * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; 23329 * 23330 * _.at(object, ['a[0].b.c', 'a[1]']); 23331 * // => [3, 4] 23332 */ 23333 var at = flatRest(baseAt); 23334 23335 /** 23336 * Creates an object that inherits from the `prototype` object. If a 23337 * `properties` object is given, its own enumerable string keyed properties 23338 * are assigned to the created object. 23339 * 23340 * @static 23341 * @memberOf _ 23342 * @since 2.3.0 23343 * @category Object 23344 * @param {Object} prototype The object to inherit from. 23345 * @param {Object} [properties] The properties to assign to the object. 23346 * @returns {Object} Returns the new object. 23347 * @example 23348 * 23349 * function Shape() { 23350 * this.x = 0; 23351 * this.y = 0; 23352 * } 23353 * 23354 * function Circle() { 23355 * Shape.call(this); 23356 * } 23357 * 23358 * Circle.prototype = _.create(Shape.prototype, { 23359 * 'constructor': Circle 23360 * }); 23361 * 23362 * var circle = new Circle; 23363 * circle instanceof Circle; 23364 * // => true 23365 * 23366 * circle instanceof Shape; 23367 * // => true 23368 */ 23369 function create(prototype, properties) { 23370 var result = baseCreate(prototype); 23371 return properties == null ? result : baseAssign(result, properties); 23372 } 23373 23374 /** 23375 * Assigns own and inherited enumerable string keyed properties of source 23376 * objects to the destination object for all destination properties that 23377 * resolve to `undefined`. Source objects are applied from left to right. 23378 * Once a property is set, additional values of the same property are ignored. 23379 * 23380 * **Note:** This method mutates `object`. 23381 * 23382 * @static 23383 * @since 0.1.0 23384 * @memberOf _ 23385 * @category Object 23386 * @param {Object} object The destination object. 23387 * @param {...Object} [sources] The source objects. 23388 * @returns {Object} Returns `object`. 23389 * @see _.defaultsDeep 23390 * @example 23391 * 23392 * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); 23393 * // => { 'a': 1, 'b': 2 } 23394 */ 23395 var defaults = baseRest(function(object, sources) { 23396 object = Object(object); 23397 23398 var index = -1; 23399 var length = sources.length; 23400 var guard = length > 2 ? sources[2] : undefined; 23401 23402 if (guard && isIterateeCall(sources[0], sources[1], guard)) { 23403 length = 1; 23404 } 23405 23406 while (++index < length) { 23407 var source = sources[index]; 23408 var props = keysIn(source); 23409 var propsIndex = -1; 23410 var propsLength = props.length; 23411 23412 while (++propsIndex < propsLength) { 23413 var key = props[propsIndex]; 23414 var value = object[key]; 23415 23416 if (value === undefined || 23417 (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { 23418 object[key] = source[key]; 23419 } 23420 } 23421 } 23422 23423 return object; 23424 }); 23425 23426 /** 23427 * This method is like `_.defaults` except that it recursively assigns 23428 * default properties. 23429 * 23430 * **Note:** This method mutates `object`. 23431 * 23432 * @static 23433 * @memberOf _ 23434 * @since 3.10.0 23435 * @category Object 23436 * @param {Object} object The destination object. 23437 * @param {...Object} [sources] The source objects. 23438 * @returns {Object} Returns `object`. 23439 * @see _.defaults 23440 * @example 23441 * 23442 * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } }); 23443 * // => { 'a': { 'b': 2, 'c': 3 } } 23444 */ 23445 var defaultsDeep = baseRest(function(args) { 23446 args.push(undefined, customDefaultsMerge); 23447 return apply(mergeWith, undefined, args); 23448 }); 23449 23450 /** 23451 * This method is like `_.find` except that it returns the key of the first 23452 * element `predicate` returns truthy for instead of the element itself. 23453 * 23454 * @static 23455 * @memberOf _ 23456 * @since 1.1.0 23457 * @category Object 23458 * @param {Object} object The object to inspect. 23459 * @param {Function} [predicate=_.identity] The function invoked per iteration. 23460 * @returns {string|undefined} Returns the key of the matched element, 23461 * else `undefined`. 23462 * @example 23463 * 23464 * var users = { 23465 * 'barney': { 'age': 36, 'active': true }, 23466 * 'fred': { 'age': 40, 'active': false }, 23467 * 'pebbles': { 'age': 1, 'active': true } 23468 * }; 23469 * 23470 * _.findKey(users, function(o) { return o.age < 40; }); 23471 * // => 'barney' (iteration order is not guaranteed) 23472 * 23473 * // The `_.matches` iteratee shorthand. 23474 * _.findKey(users, { 'age': 1, 'active': true }); 23475 * // => 'pebbles' 23476 * 23477 * // The `_.matchesProperty` iteratee shorthand. 23478 * _.findKey(users, ['active', false]); 23479 * // => 'fred' 23480 * 23481 * // The `_.property` iteratee shorthand. 23482 * _.findKey(users, 'active'); 23483 * // => 'barney' 23484 */ 23485 function findKey(object, predicate) { 23486 return baseFindKey(object, getIteratee(predicate, 3), baseForOwn); 23487 } 23488 23489 /** 23490 * This method is like `_.findKey` except that it iterates over elements of 23491 * a collection in the opposite order. 23492 * 23493 * @static 23494 * @memberOf _ 23495 * @since 2.0.0 23496 * @category Object 23497 * @param {Object} object The object to inspect. 23498 * @param {Function} [predicate=_.identity] The function invoked per iteration. 23499 * @returns {string|undefined} Returns the key of the matched element, 23500 * else `undefined`. 23501 * @example 23502 * 23503 * var users = { 23504 * 'barney': { 'age': 36, 'active': true }, 23505 * 'fred': { 'age': 40, 'active': false }, 23506 * 'pebbles': { 'age': 1, 'active': true } 23507 * }; 23508 * 23509 * _.findLastKey(users, function(o) { return o.age < 40; }); 23510 * // => returns 'pebbles' assuming `_.findKey` returns 'barney' 23511 * 23512 * // The `_.matches` iteratee shorthand. 23513 * _.findLastKey(users, { 'age': 36, 'active': true }); 23514 * // => 'barney' 23515 * 23516 * // The `_.matchesProperty` iteratee shorthand. 23517 * _.findLastKey(users, ['active', false]); 23518 * // => 'fred' 23519 * 23520 * // The `_.property` iteratee shorthand. 23521 * _.findLastKey(users, 'active'); 23522 * // => 'pebbles' 23523 */ 23524 function findLastKey(object, predicate) { 23525 return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight); 23526 } 23527 23528 /** 23529 * Iterates over own and inherited enumerable string keyed properties of an 23530 * object and invokes `iteratee` for each property. The iteratee is invoked 23531 * with three arguments: (value, key, object). Iteratee functions may exit 23532 * iteration early by explicitly returning `false`. 23533 * 23534 * @static 23535 * @memberOf _ 23536 * @since 0.3.0 23537 * @category Object 23538 * @param {Object} object The object to iterate over. 23539 * @param {Function} [iteratee=_.identity] The function invoked per iteration. 23540 * @returns {Object} Returns `object`. 23541 * @see _.forInRight 23542 * @example 23543 * 23544 * function Foo() { 23545 * this.a = 1; 23546 * this.b = 2; 23547 * } 23548 * 23549 * Foo.prototype.c = 3; 23550 * 23551 * _.forIn(new Foo, function(value, key) { 23552 * console.log(key); 23553 * }); 23554 * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). 23555 */ 23556 function forIn(object, iteratee) { 23557 return object == null 23558 ? object 23559 : baseFor(object, getIteratee(iteratee, 3), keysIn); 23560 } 23561 23562 /** 23563 * This method is like `_.forIn` except that it iterates over properties of 23564 * `object` in the opposite order. 23565 * 23566 * @static 23567 * @memberOf _ 23568 * @since 2.0.0 23569 * @category Object 23570 * @param {Object} object The object to iterate over. 23571 * @param {Function} [iteratee=_.identity] The function invoked per iteration. 23572 * @returns {Object} Returns `object`. 23573 * @see _.forIn 23574 * @example 23575 * 23576 * function Foo() { 23577 * this.a = 1; 23578 * this.b = 2; 23579 * } 23580 * 23581 * Foo.prototype.c = 3; 23582 * 23583 * _.forInRight(new Foo, function(value, key) { 23584 * console.log(key); 23585 * }); 23586 * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'. 23587 */ 23588 function forInRight(object, iteratee) { 23589 return object == null 23590 ? object 23591 : baseForRight(object, getIteratee(iteratee, 3), keysIn); 23592 } 23593 23594 /** 23595 * Iterates over own enumerable string keyed properties of an object and 23596 * invokes `iteratee` for each property. The iteratee is invoked with three 23597 * arguments: (value, key, object). Iteratee functions may exit iteration 23598 * early by explicitly returning `false`. 23599 * 23600 * @static 23601 * @memberOf _ 23602 * @since 0.3.0 23603 * @category Object 23604 * @param {Object} object The object to iterate over. 23605 * @param {Function} [iteratee=_.identity] The function invoked per iteration. 23606 * @returns {Object} Returns `object`. 23607 * @see _.forOwnRight 23608 * @example 23609 * 23610 * function Foo() { 23611 * this.a = 1; 23612 * this.b = 2; 23613 * } 23614 * 23615 * Foo.prototype.c = 3; 23616 * 23617 * _.forOwn(new Foo, function(value, key) { 23618 * console.log(key); 23619 * }); 23620 * // => Logs 'a' then 'b' (iteration order is not guaranteed). 23621 */ 23622 function forOwn(object, iteratee) { 23623 return object && baseForOwn(object, getIteratee(iteratee, 3)); 23624 } 23625 23626 /** 23627 * This method is like `_.forOwn` except that it iterates over properties of 23628 * `object` in the opposite order. 23629 * 23630 * @static 23631 * @memberOf _ 23632 * @since 2.0.0 23633 * @category Object 23634 * @param {Object} object The object to iterate over. 23635 * @param {Function} [iteratee=_.identity] The function invoked per iteration. 23636 * @returns {Object} Returns `object`. 23637 * @see _.forOwn 23638 * @example 23639 * 23640 * function Foo() { 23641 * this.a = 1; 23642 * this.b = 2; 23643 * } 23644 * 23645 * Foo.prototype.c = 3; 23646 * 23647 * _.forOwnRight(new Foo, function(value, key) { 23648 * console.log(key); 23649 * }); 23650 * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'. 23651 */ 23652 function forOwnRight(object, iteratee) { 23653 return object && baseForOwnRight(object, getIteratee(iteratee, 3)); 23654 } 23655 23656 /** 23657 * Creates an array of function property names from own enumerable properties 23658 * of `object`. 23659 * 23660 * @static 23661 * @since 0.1.0 23662 * @memberOf _ 23663 * @category Object 23664 * @param {Object} object The object to inspect. 23665 * @returns {Array} Returns the function names. 23666 * @see _.functionsIn 23667 * @example 23668 * 23669 * function Foo() { 23670 * this.a = _.constant('a'); 23671 * this.b = _.constant('b'); 23672 * } 23673 * 23674 * Foo.prototype.c = _.constant('c'); 23675 * 23676 * _.functions(new Foo); 23677 * // => ['a', 'b'] 23678 */ 23679 function functions(object) { 23680 return object == null ? [] : baseFunctions(object, keys(object)); 23681 } 23682 23683 /** 23684 * Creates an array of function property names from own and inherited 23685 * enumerable properties of `object`. 23686 * 23687 * @static 23688 * @memberOf _ 23689 * @since 4.0.0 23690 * @category Object 23691 * @param {Object} object The object to inspect. 23692 * @returns {Array} Returns the function names. 23693 * @see _.functions 23694 * @example 23695 * 23696 * function Foo() { 23697 * this.a = _.constant('a'); 23698 * this.b = _.constant('b'); 23699 * } 23700 * 23701 * Foo.prototype.c = _.constant('c'); 23702 * 23703 * _.functionsIn(new Foo); 23704 * // => ['a', 'b', 'c'] 23705 */ 23706 function functionsIn(object) { 23707 return object == null ? [] : baseFunctions(object, keysIn(object)); 23708 } 23709 23710 /** 23711 * Gets the value at `path` of `object`. If the resolved value is 23712 * `undefined`, the `defaultValue` is returned in its place. 23713 * 23714 * @static 23715 * @memberOf _ 23716 * @since 3.7.0 23717 * @category Object 23718 * @param {Object} object The object to query. 23719 * @param {Array|string} path The path of the property to get. 23720 * @param {*} [defaultValue] The value returned for `undefined` resolved values. 23721 * @returns {*} Returns the resolved value. 23722 * @example 23723 * 23724 * var object = { 'a': [{ 'b': { 'c': 3 } }] }; 23725 * 23726 * _.get(object, 'a[0].b.c'); 23727 * // => 3 23728 * 23729 * _.get(object, ['a', '0', 'b', 'c']); 23730 * // => 3 23731 * 23732 * _.get(object, 'a.b.c', 'default'); 23733 * // => 'default' 23734 */ 23735 function get(object, path, defaultValue) { 23736 var result = object == null ? undefined : baseGet(object, path); 23737 return result === undefined ? defaultValue : result; 23738 } 23739 23740 /** 23741 * Checks if `path` is a direct property of `object`. 23742 * 23743 * @static 23744 * @since 0.1.0 23745 * @memberOf _ 23746 * @category Object 23747 * @param {Object} object The object to query. 23748 * @param {Array|string} path The path to check. 23749 * @returns {boolean} Returns `true` if `path` exists, else `false`. 23750 * @example 23751 * 23752 * var object = { 'a': { 'b': 2 } }; 23753 * var other = _.create({ 'a': _.create({ 'b': 2 }) }); 23754 * 23755 * _.has(object, 'a'); 23756 * // => true 23757 * 23758 * _.has(object, 'a.b'); 23759 * // => true 23760 * 23761 * _.has(object, ['a', 'b']); 23762 * // => true 23763 * 23764 * _.has(other, 'a'); 23765 * // => false 23766 */ 23767 function has(object, path) { 23768 return object != null && hasPath(object, path, baseHas); 23769 } 23770 23771 /** 23772 * Checks if `path` is a direct or inherited property of `object`. 23773 * 23774 * @static 23775 * @memberOf _ 23776 * @since 4.0.0 23777 * @category Object 23778 * @param {Object} object The object to query. 23779 * @param {Array|string} path The path to check. 23780 * @returns {boolean} Returns `true` if `path` exists, else `false`. 23781 * @example 23782 * 23783 * var object = _.create({ 'a': _.create({ 'b': 2 }) }); 23784 * 23785 * _.hasIn(object, 'a'); 23786 * // => true 23787 * 23788 * _.hasIn(object, 'a.b'); 23789 * // => true 23790 * 23791 * _.hasIn(object, ['a', 'b']); 23792 * // => true 23793 * 23794 * _.hasIn(object, 'b'); 23795 * // => false 23796 */ 23797 function hasIn(object, path) { 23798 return object != null && hasPath(object, path, baseHasIn); 23799 } 23800 23801 /** 23802 * Creates an object composed of the inverted keys and values of `object`. 23803 * If `object` contains duplicate values, subsequent values overwrite 23804 * property assignments of previous values. 23805 * 23806 * @static 23807 * @memberOf _ 23808 * @since 0.7.0 23809 * @category Object 23810 * @param {Object} object The object to invert. 23811 * @returns {Object} Returns the new inverted object. 23812 * @example 23813 * 23814 * var object = { 'a': 1, 'b': 2, 'c': 1 }; 23815 * 23816 * _.invert(object); 23817 * // => { '1': 'c', '2': 'b' } 23818 */ 23819 var invert = createInverter(function(result, value, key) { 23820 if (value != null && 23821 typeof value.toString != 'function') { 23822 value = nativeObjectToString.call(value); 23823 } 23824 23825 result[value] = key; 23826 }, constant(identity)); 23827 23828 /** 23829 * This method is like `_.invert` except that the inverted object is generated 23830 * from the results of running each element of `object` thru `iteratee`. The 23831 * corresponding inverted value of each inverted key is an array of keys 23832 * responsible for generating the inverted value. The iteratee is invoked 23833 * with one argument: (value). 23834 * 23835 * @static 23836 * @memberOf _ 23837 * @since 4.1.0 23838 * @category Object 23839 * @param {Object} object The object to invert. 23840 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. 23841 * @returns {Object} Returns the new inverted object. 23842 * @example 23843 * 23844 * var object = { 'a': 1, 'b': 2, 'c': 1 }; 23845 * 23846 * _.invertBy(object); 23847 * // => { '1': ['a', 'c'], '2': ['b'] } 23848 * 23849 * _.invertBy(object, function(value) { 23850 * return 'group' + value; 23851 * }); 23852 * // => { 'group1': ['a', 'c'], 'group2': ['b'] } 23853 */ 23854 var invertBy = createInverter(function(result, value, key) { 23855 if (value != null && 23856 typeof value.toString != 'function') { 23857 value = nativeObjectToString.call(value); 23858 } 23859 23860 if (hasOwnProperty.call(result, value)) { 23861 result[value].push(key); 23862 } else { 23863 result[value] = [key]; 23864 } 23865 }, getIteratee); 23866 23867 /** 23868 * Invokes the method at `path` of `object`. 23869 * 23870 * @static 23871 * @memberOf _ 23872 * @since 4.0.0 23873 * @category Object 23874 * @param {Object} object The object to query. 23875 * @param {Array|string} path The path of the method to invoke. 23876 * @param {...*} [args] The arguments to invoke the method with. 23877 * @returns {*} Returns the result of the invoked method. 23878 * @example 23879 * 23880 * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] }; 23881 * 23882 * _.invoke(object, 'a[0].b.c.slice', 1, 3); 23883 * // => [2, 3] 23884 */ 23885 var invoke = baseRest(baseInvoke); 23886 23887 /** 23888 * Creates an array of the own enumerable property names of `object`. 23889 * 23890 * **Note:** Non-object values are coerced to objects. See the 23891 * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) 23892 * for more details. 23893 * 23894 * @static 23895 * @since 0.1.0 23896 * @memberOf _ 23897 * @category Object 23898 * @param {Object} object The object to query. 23899 * @returns {Array} Returns the array of property names. 23900 * @example 23901 * 23902 * function Foo() { 23903 * this.a = 1; 23904 * this.b = 2; 23905 * } 23906 * 23907 * Foo.prototype.c = 3; 23908 * 23909 * _.keys(new Foo); 23910 * // => ['a', 'b'] (iteration order is not guaranteed) 23911 * 23912 * _.keys('hi'); 23913 * // => ['0', '1'] 23914 */ 23915 function keys(object) { 23916 return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); 23917 } 23918 23919 /** 23920 * Creates an array of the own and inherited enumerable property names of `object`. 23921 * 23922 * **Note:** Non-object values are coerced to objects. 23923 * 23924 * @static 23925 * @memberOf _ 23926 * @since 3.0.0 23927 * @category Object 23928 * @param {Object} object The object to query. 23929 * @returns {Array} Returns the array of property names. 23930 * @example 23931 * 23932 * function Foo() { 23933 * this.a = 1; 23934 * this.b = 2; 23935 * } 23936 * 23937 * Foo.prototype.c = 3; 23938 * 23939 * _.keysIn(new Foo); 23940 * // => ['a', 'b', 'c'] (iteration order is not guaranteed) 23941 */ 23942 function keysIn(object) { 23943 return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); 23944 } 23945 23946 /** 23947 * The opposite of `_.mapValues`; this method creates an object with the 23948 * same values as `object` and keys generated by running each own enumerable 23949 * string keyed property of `object` thru `iteratee`. The iteratee is invoked 23950 * with three arguments: (value, key, object). 23951 * 23952 * @static 23953 * @memberOf _ 23954 * @since 3.8.0 23955 * @category Object 23956 * @param {Object} object The object to iterate over. 23957 * @param {Function} [iteratee=_.identity] The function invoked per iteration. 23958 * @returns {Object} Returns the new mapped object. 23959 * @see _.mapValues 23960 * @example 23961 * 23962 * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) { 23963 * return key + value; 23964 * }); 23965 * // => { 'a1': 1, 'b2': 2 } 23966 */ 23967 function mapKeys(object, iteratee) { 23968 var result = {}; 23969 iteratee = getIteratee(iteratee, 3); 23970 23971 baseForOwn(object, function(value, key, object) { 23972 baseAssignValue(result, iteratee(value, key, object), value); 23973 }); 23974 return result; 23975 } 23976 23977 /** 23978 * Creates an object with the same keys as `object` and values generated 23979 * by running each own enumerable string keyed property of `object` thru 23980 * `iteratee`. The iteratee is invoked with three arguments: 23981 * (value, key, object). 23982 * 23983 * @static 23984 * @memberOf _ 23985 * @since 2.4.0 23986 * @category Object 23987 * @param {Object} object The object to iterate over. 23988 * @param {Function} [iteratee=_.identity] The function invoked per iteration. 23989 * @returns {Object} Returns the new mapped object. 23990 * @see _.mapKeys 23991 * @example 23992 * 23993 * var users = { 23994 * 'fred': { 'user': 'fred', 'age': 40 }, 23995 * 'pebbles': { 'user': 'pebbles', 'age': 1 } 23996 * }; 23997 * 23998 * _.mapValues(users, function(o) { return o.age; }); 23999 * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) 24000 * 24001 * // The `_.property` iteratee shorthand. 24002 * _.mapValues(users, 'age'); 24003 * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) 24004 */ 24005 function mapValues(object, iteratee) { 24006 var result = {}; 24007 iteratee = getIteratee(iteratee, 3); 24008 24009 baseForOwn(object, function(value, key, object) { 24010 baseAssignValue(result, key, iteratee(value, key, object)); 24011 }); 24012 return result; 24013 } 24014 24015 /** 24016 * This method is like `_.assign` except that it recursively merges own and 24017 * inherited enumerable string keyed properties of source objects into the 24018 * destination object. Source properties that resolve to `undefined` are 24019 * skipped if a destination value exists. Array and plain object properties 24020 * are merged recursively. Other objects and value types are overridden by 24021 * assignment. Source objects are applied from left to right. Subsequent 24022 * sources overwrite property assignments of previous sources. 24023 * 24024 * **Note:** This method mutates `object`. 24025 * 24026 * @static 24027 * @memberOf _ 24028 * @since 0.5.0 24029 * @category Object 24030 * @param {Object} object The destination object. 24031 * @param {...Object} [sources] The source objects. 24032 * @returns {Object} Returns `object`. 24033 * @example 24034 * 24035 * var object = { 24036 * 'a': [{ 'b': 2 }, { 'd': 4 }] 24037 * }; 24038 * 24039 * var other = { 24040 * 'a': [{ 'c': 3 }, { 'e': 5 }] 24041 * }; 24042 * 24043 * _.merge(object, other); 24044 * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } 24045 */ 24046 var merge = createAssigner(function(object, source, srcIndex) { 24047 baseMerge(object, source, srcIndex); 24048 }); 24049 24050 /** 24051 * This method is like `_.merge` except that it accepts `customizer` which 24052 * is invoked to produce the merged values of the destination and source 24053 * properties. If `customizer` returns `undefined`, merging is handled by the 24054 * method instead. The `customizer` is invoked with six arguments: 24055 * (objValue, srcValue, key, object, source, stack). 24056 * 24057 * **Note:** This method mutates `object`. 24058 * 24059 * @static 24060 * @memberOf _ 24061 * @since 4.0.0 24062 * @category Object 24063 * @param {Object} object The destination object. 24064 * @param {...Object} sources The source objects. 24065 * @param {Function} customizer The function to customize assigned values. 24066 * @returns {Object} Returns `object`. 24067 * @example 24068 * 24069 * function customizer(objValue, srcValue) { 24070 * if (_.isArray(objValue)) { 24071 * return objValue.concat(srcValue); 24072 * } 24073 * } 24074 * 24075 * var object = { 'a': [1], 'b': [2] }; 24076 * var other = { 'a': [3], 'b': [4] }; 24077 * 24078 * _.mergeWith(object, other, customizer); 24079 * // => { 'a': [1, 3], 'b': [2, 4] } 24080 */ 24081 var mergeWith = createAssigner(function(object, source, srcIndex, customizer) { 24082 baseMerge(object, source, srcIndex, customizer); 24083 }); 24084 24085 /** 24086 * The opposite of `_.pick`; this method creates an object composed of the 24087 * own and inherited enumerable property paths of `object` that are not omitted. 24088 * 24089 * **Note:** This method is considerably slower than `_.pick`. 24090 * 24091 * @static 24092 * @since 0.1.0 24093 * @memberOf _ 24094 * @category Object 24095 * @param {Object} object The source object. 24096 * @param {...(string|string[])} [paths] The property paths to omit. 24097 * @returns {Object} Returns the new object. 24098 * @example 24099 * 24100 * var object = { 'a': 1, 'b': '2', 'c': 3 }; 24101 * 24102 * _.omit(object, ['a', 'c']); 24103 * // => { 'b': '2' } 24104 */ 24105 var omit = flatRest(function(object, paths) { 24106 var result = {}; 24107 if (object == null) { 24108 return result; 24109 } 24110 var isDeep = false; 24111 paths = arrayMap(paths, function(path) { 24112 path = castPath(path, object); 24113 isDeep || (isDeep = path.length > 1); 24114 return path; 24115 }); 24116 copyObject(object, getAllKeysIn(object), result); 24117 if (isDeep) { 24118 result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone); 24119 } 24120 var length = paths.length; 24121 while (length--) { 24122 baseUnset(result, paths[length]); 24123 } 24124 return result; 24125 }); 24126 24127 /** 24128 * The opposite of `_.pickBy`; this method creates an object composed of 24129 * the own and inherited enumerable string keyed properties of `object` that 24130 * `predicate` doesn't return truthy for. The predicate is invoked with two 24131 * arguments: (value, key). 24132 * 24133 * @static 24134 * @memberOf _ 24135 * @since 4.0.0 24136 * @category Object 24137 * @param {Object} object The source object. 24138 * @param {Function} [predicate=_.identity] The function invoked per property. 24139 * @returns {Object} Returns the new object. 24140 * @example 24141 * 24142 * var object = { 'a': 1, 'b': '2', 'c': 3 }; 24143 * 24144 * _.omitBy(object, _.isNumber); 24145 * // => { 'b': '2' } 24146 */ 24147 function omitBy(object, predicate) { 24148 return pickBy(object, negate(getIteratee(predicate))); 24149 } 24150 24151 /** 24152 * Creates an object composed of the picked `object` properties. 24153 * 24154 * @static 24155 * @since 0.1.0 24156 * @memberOf _ 24157 * @category Object 24158 * @param {Object} object The source object. 24159 * @param {...(string|string[])} [paths] The property paths to pick. 24160 * @returns {Object} Returns the new object. 24161 * @example 24162 * 24163 * var object = { 'a': 1, 'b': '2', 'c': 3 }; 24164 * 24165 * _.pick(object, ['a', 'c']); 24166 * // => { 'a': 1, 'c': 3 } 24167 */ 24168 var pick = flatRest(function(object, paths) { 24169 return object == null ? {} : basePick(object, paths); 24170 }); 24171 24172 /** 24173 * Creates an object composed of the `object` properties `predicate` returns 24174 * truthy for. The predicate is invoked with two arguments: (value, key). 24175 * 24176 * @static 24177 * @memberOf _ 24178 * @since 4.0.0 24179 * @category Object 24180 * @param {Object} object The source object. 24181 * @param {Function} [predicate=_.identity] The function invoked per property. 24182 * @returns {Object} Returns the new object. 24183 * @example 24184 * 24185 * var object = { 'a': 1, 'b': '2', 'c': 3 }; 24186 * 24187 * _.pickBy(object, _.isNumber); 24188 * // => { 'a': 1, 'c': 3 } 24189 */ 24190 function pickBy(object, predicate) { 24191 if (object == null) { 24192 return {}; 24193 } 24194 var props = arrayMap(getAllKeysIn(object), function(prop) { 24195 return [prop]; 24196 }); 24197 predicate = getIteratee(predicate); 24198 return basePickBy(object, props, function(value, path) { 24199 return predicate(value, path[0]); 24200 }); 24201 } 24202 24203 /** 24204 * This method is like `_.get` except that if the resolved value is a 24205 * function it's invoked with the `this` binding of its parent object and 24206 * its result is returned. 24207 * 24208 * @static 24209 * @since 0.1.0 24210 * @memberOf _ 24211 * @category Object 24212 * @param {Object} object The object to query. 24213 * @param {Array|string} path The path of the property to resolve. 24214 * @param {*} [defaultValue] The value returned for `undefined` resolved values. 24215 * @returns {*} Returns the resolved value. 24216 * @example 24217 * 24218 * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; 24219 * 24220 * _.result(object, 'a[0].b.c1'); 24221 * // => 3 24222 * 24223 * _.result(object, 'a[0].b.c2'); 24224 * // => 4 24225 * 24226 * _.result(object, 'a[0].b.c3', 'default'); 24227 * // => 'default' 24228 * 24229 * _.result(object, 'a[0].b.c3', _.constant('default')); 24230 * // => 'default' 24231 */ 24232 function result(object, path, defaultValue) { 24233 path = castPath(path, object); 24234 24235 var index = -1, 24236 length = path.length; 24237 24238 // Ensure the loop is entered when path is empty. 24239 if (!length) { 24240 length = 1; 24241 object = undefined; 24242 } 24243 while (++index < length) { 24244 var value = object == null ? undefined : object[toKey(path[index])]; 24245 if (value === undefined) { 24246 index = length; 24247 value = defaultValue; 24248 } 24249 object = isFunction(value) ? value.call(object) : value; 24250 } 24251 return object; 24252 } 24253 24254 /** 24255 * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, 24256 * it's created. Arrays are created for missing index properties while objects 24257 * are created for all other missing properties. Use `_.setWith` to customize 24258 * `path` creation. 24259 * 24260 * **Note:** This method mutates `object`. 24261 * 24262 * @static 24263 * @memberOf _ 24264 * @since 3.7.0 24265 * @category Object 24266 * @param {Object} object The object to modify. 24267 * @param {Array|string} path The path of the property to set. 24268 * @param {*} value The value to set. 24269 * @returns {Object} Returns `object`. 24270 * @example 24271 * 24272 * var object = { 'a': [{ 'b': { 'c': 3 } }] }; 24273 * 24274 * _.set(object, 'a[0].b.c', 4); 24275 * console.log(object.a[0].b.c); 24276 * // => 4 24277 * 24278 * _.set(object, ['x', '0', 'y', 'z'], 5); 24279 * console.log(object.x[0].y.z); 24280 * // => 5 24281 */ 24282 function set(object, path, value) { 24283 return object == null ? object : baseSet(object, path, value); 24284 } 24285 24286 /** 24287 * This method is like `_.set` except that it accepts `customizer` which is 24288 * invoked to produce the objects of `path`. If `customizer` returns `undefined` 24289 * path creation is handled by the method instead. The `customizer` is invoked 24290 * with three arguments: (nsValue, key, nsObject). 24291 * 24292 * **Note:** This method mutates `object`. 24293 * 24294 * @static 24295 * @memberOf _ 24296 * @since 4.0.0 24297 * @category Object 24298 * @param {Object} object The object to modify. 24299 * @param {Array|string} path The path of the property to set. 24300 * @param {*} value The value to set. 24301 * @param {Function} [customizer] The function to customize assigned values. 24302 * @returns {Object} Returns `object`. 24303 * @example 24304 * 24305 * var object = {}; 24306 * 24307 * _.setWith(object, '[0][1]', 'a', Object); 24308 * // => { '0': { '1': 'a' } } 24309 */ 24310 function setWith(object, path, value, customizer) { 24311 customizer = typeof customizer == 'function' ? customizer : undefined; 24312 return object == null ? object : baseSet(object, path, value, customizer); 24313 } 24314 24315 /** 24316 * Creates an array of own enumerable string keyed-value pairs for `object` 24317 * which can be consumed by `_.fromPairs`. If `object` is a map or set, its 24318 * entries are returned. 24319 * 24320 * @static 24321 * @memberOf _ 24322 * @since 4.0.0 24323 * @alias entries 24324 * @category Object 24325 * @param {Object} object The object to query. 24326 * @returns {Array} Returns the key-value pairs. 24327 * @example 24328 * 24329 * function Foo() { 24330 * this.a = 1; 24331 * this.b = 2; 24332 * } 24333 * 24334 * Foo.prototype.c = 3; 24335 * 24336 * _.toPairs(new Foo); 24337 * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed) 24338 */ 24339 var toPairs = createToPairs(keys); 24340 24341 /** 24342 * Creates an array of own and inherited enumerable string keyed-value pairs 24343 * for `object` which can be consumed by `_.fromPairs`. If `object` is a map 24344 * or set, its entries are returned. 24345 * 24346 * @static 24347 * @memberOf _ 24348 * @since 4.0.0 24349 * @alias entriesIn 24350 * @category Object 24351 * @param {Object} object The object to query. 24352 * @returns {Array} Returns the key-value pairs. 24353 * @example 24354 * 24355 * function Foo() { 24356 * this.a = 1; 24357 * this.b = 2; 24358 * } 24359 * 24360 * Foo.prototype.c = 3; 24361 * 24362 * _.toPairsIn(new Foo); 24363 * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed) 24364 */ 24365 var toPairsIn = createToPairs(keysIn); 24366 24367 /** 24368 * An alternative to `_.reduce`; this method transforms `object` to a new 24369 * `accumulator` object which is the result of running each of its own 24370 * enumerable string keyed properties thru `iteratee`, with each invocation 24371 * potentially mutating the `accumulator` object. If `accumulator` is not 24372 * provided, a new object with the same `[[Prototype]]` will be used. The 24373 * iteratee is invoked with four arguments: (accumulator, value, key, object). 24374 * Iteratee functions may exit iteration early by explicitly returning `false`. 24375 * 24376 * @static 24377 * @memberOf _ 24378 * @since 1.3.0 24379 * @category Object 24380 * @param {Object} object The object to iterate over. 24381 * @param {Function} [iteratee=_.identity] The function invoked per iteration. 24382 * @param {*} [accumulator] The custom accumulator value. 24383 * @returns {*} Returns the accumulated value. 24384 * @example 24385 * 24386 * _.transform([2, 3, 4], function(result, n) { 24387 * result.push(n *= n); 24388 * return n % 2 == 0; 24389 * }, []); 24390 * // => [4, 9] 24391 * 24392 * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { 24393 * (result[value] || (result[value] = [])).push(key); 24394 * }, {}); 24395 * // => { '1': ['a', 'c'], '2': ['b'] } 24396 */ 24397 function transform(object, iteratee, accumulator) { 24398 var isArr = isArray(object), 24399 isArrLike = isArr || isBuffer(object) || isTypedArray(object); 24400 24401 iteratee = getIteratee(iteratee, 4); 24402 if (accumulator == null) { 24403 var Ctor = object && object.constructor; 24404 if (isArrLike) { 24405 accumulator = isArr ? new Ctor : []; 24406 } 24407 else if (isObject(object)) { 24408 accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {}; 24409 } 24410 else { 24411 accumulator = {}; 24412 } 24413 } 24414 (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) { 24415 return iteratee(accumulator, value, index, object); 24416 }); 24417 return accumulator; 24418 } 24419 24420 /** 24421 * Removes the property at `path` of `object`. 24422 * 24423 * **Note:** This method mutates `object`. 24424 * 24425 * @static 24426 * @memberOf _ 24427 * @since 4.0.0 24428 * @category Object 24429 * @param {Object} object The object to modify. 24430 * @param {Array|string} path The path of the property to unset. 24431 * @returns {boolean} Returns `true` if the property is deleted, else `false`. 24432 * @example 24433 * 24434 * var object = { 'a': [{ 'b': { 'c': 7 } }] }; 24435 * _.unset(object, 'a[0].b.c'); 24436 * // => true 24437 * 24438 * console.log(object); 24439 * // => { 'a': [{ 'b': {} }] }; 24440 * 24441 * _.unset(object, ['a', '0', 'b', 'c']); 24442 * // => true 24443 * 24444 * console.log(object); 24445 * // => { 'a': [{ 'b': {} }] }; 24446 */ 24447 function unset(object, path) { 24448 return object == null ? true : baseUnset(object, path); 24449 } 24450 24451 /** 24452 * This method is like `_.set` except that accepts `updater` to produce the 24453 * value to set. Use `_.updateWith` to customize `path` creation. The `updater` 24454 * is invoked with one argument: (value). 24455 * 24456 * **Note:** This method mutates `object`. 24457 * 24458 * @static 24459 * @memberOf _ 24460 * @since 4.6.0 24461 * @category Object 24462 * @param {Object} object The object to modify. 24463 * @param {Array|string} path The path of the property to set. 24464 * @param {Function} updater The function to produce the updated value. 24465 * @returns {Object} Returns `object`. 24466 * @example 24467 * 24468 * var object = { 'a': [{ 'b': { 'c': 3 } }] }; 24469 * 24470 * _.update(object, 'a[0].b.c', function(n) { return n * n; }); 24471 * console.log(object.a[0].b.c); 24472 * // => 9 24473 * 24474 * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; }); 24475 * console.log(object.x[0].y.z); 24476 * // => 0 24477 */ 24478 function update(object, path, updater) { 24479 return object == null ? object : baseUpdate(object, path, castFunction(updater)); 24480 } 24481 24482 /** 24483 * This method is like `_.update` except that it accepts `customizer` which is 24484 * invoked to produce the objects of `path`. If `customizer` returns `undefined` 24485 * path creation is handled by the method instead. The `customizer` is invoked 24486 * with three arguments: (nsValue, key, nsObject). 24487 * 24488 * **Note:** This method mutates `object`. 24489 * 24490 * @static 24491 * @memberOf _ 24492 * @since 4.6.0 24493 * @category Object 24494 * @param {Object} object The object to modify. 24495 * @param {Array|string} path The path of the property to set. 24496 * @param {Function} updater The function to produce the updated value. 24497 * @param {Function} [customizer] The function to customize assigned values. 24498 * @returns {Object} Returns `object`. 24499 * @example 24500 * 24501 * var object = {}; 24502 * 24503 * _.updateWith(object, '[0][1]', _.constant('a'), Object); 24504 * // => { '0': { '1': 'a' } } 24505 */ 24506 function updateWith(object, path, updater, customizer) { 24507 customizer = typeof customizer == 'function' ? customizer : undefined; 24508 return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer); 24509 } 24510 24511 /** 24512 * Creates an array of the own enumerable string keyed property values of `object`. 24513 * 24514 * **Note:** Non-object values are coerced to objects. 24515 * 24516 * @static 24517 * @since 0.1.0 24518 * @memberOf _ 24519 * @category Object 24520 * @param {Object} object The object to query. 24521 * @returns {Array} Returns the array of property values. 24522 * @example 24523 * 24524 * function Foo() { 24525 * this.a = 1; 24526 * this.b = 2; 24527 * } 24528 * 24529 * Foo.prototype.c = 3; 24530 * 24531 * _.values(new Foo); 24532 * // => [1, 2] (iteration order is not guaranteed) 24533 * 24534 * _.values('hi'); 24535 * // => ['h', 'i'] 24536 */ 24537 function values(object) { 24538 return object == null ? [] : baseValues(object, keys(object)); 24539 } 24540 24541 /** 24542 * Creates an array of the own and inherited enumerable string keyed property 24543 * values of `object`. 24544 * 24545 * **Note:** Non-object values are coerced to objects. 24546 * 24547 * @static 24548 * @memberOf _ 24549 * @since 3.0.0 24550 * @category Object 24551 * @param {Object} object The object to query. 24552 * @returns {Array} Returns the array of property values. 24553 * @example 24554 * 24555 * function Foo() { 24556 * this.a = 1; 24557 * this.b = 2; 24558 * } 24559 * 24560 * Foo.prototype.c = 3; 24561 * 24562 * _.valuesIn(new Foo); 24563 * // => [1, 2, 3] (iteration order is not guaranteed) 24564 */ 24565 function valuesIn(object) { 24566 return object == null ? [] : baseValues(object, keysIn(object)); 24567 } 24568 24569 /*------------------------------------------------------------------------*/ 24570 24571 /** 24572 * Clamps `number` within the inclusive `lower` and `upper` bounds. 24573 * 24574 * @static 24575 * @memberOf _ 24576 * @since 4.0.0 24577 * @category Number 24578 * @param {number} number The number to clamp. 24579 * @param {number} [lower] The lower bound. 24580 * @param {number} upper The upper bound. 24581 * @returns {number} Returns the clamped number. 24582 * @example 24583 * 24584 * _.clamp(-10, -5, 5); 24585 * // => -5 24586 * 24587 * _.clamp(10, -5, 5); 24588 * // => 5 24589 */ 24590 function clamp(number, lower, upper) { 24591 if (upper === undefined) { 24592 upper = lower; 24593 lower = undefined; 24594 } 24595 if (upper !== undefined) { 24596 upper = toNumber(upper); 24597 upper = upper === upper ? upper : 0; 24598 } 24599 if (lower !== undefined) { 24600 lower = toNumber(lower); 24601 lower = lower === lower ? lower : 0; 24602 } 24603 return baseClamp(toNumber(number), lower, upper); 24604 } 24605 24606 /** 24607 * Checks if `n` is between `start` and up to, but not including, `end`. If 24608 * `end` is not specified, it's set to `start` with `start` then set to `0`. 24609 * If `start` is greater than `end` the params are swapped to support 24610 * negative ranges. 24611 * 24612 * @static 24613 * @memberOf _ 24614 * @since 3.3.0 24615 * @category Number 24616 * @param {number} number The number to check. 24617 * @param {number} [start=0] The start of the range. 24618 * @param {number} end The end of the range. 24619 * @returns {boolean} Returns `true` if `number` is in the range, else `false`. 24620 * @see _.range, _.rangeRight 24621 * @example 24622 * 24623 * _.inRange(3, 2, 4); 24624 * // => true 24625 * 24626 * _.inRange(4, 8); 24627 * // => true 24628 * 24629 * _.inRange(4, 2); 24630 * // => false 24631 * 24632 * _.inRange(2, 2); 24633 * // => false 24634 * 24635 * _.inRange(1.2, 2); 24636 * // => true 24637 * 24638 * _.inRange(5.2, 4); 24639 * // => false 24640 * 24641 * _.inRange(-3, -2, -6); 24642 * // => true 24643 */ 24644 function inRange(number, start, end) { 24645 start = toFinite(start); 24646 if (end === undefined) { 24647 end = start; 24648 start = 0; 24649 } else { 24650 end = toFinite(end); 24651 } 24652 number = toNumber(number); 24653 return baseInRange(number, start, end); 24654 } 24655 24656 /** 24657 * Produces a random number between the inclusive `lower` and `upper` bounds. 24658 * If only one argument is provided a number between `0` and the given number 24659 * is returned. If `floating` is `true`, or either `lower` or `upper` are 24660 * floats, a floating-point number is returned instead of an integer. 24661 * 24662 * **Note:** JavaScript follows the IEEE-754 standard for resolving 24663 * floating-point values which can produce unexpected results. 24664 * 24665 * @static 24666 * @memberOf _ 24667 * @since 0.7.0 24668 * @category Number 24669 * @param {number} [lower=0] The lower bound. 24670 * @param {number} [upper=1] The upper bound. 24671 * @param {boolean} [floating] Specify returning a floating-point number. 24672 * @returns {number} Returns the random number. 24673 * @example 24674 * 24675 * _.random(0, 5); 24676 * // => an integer between 0 and 5 24677 * 24678 * _.random(5); 24679 * // => also an integer between 0 and 5 24680 * 24681 * _.random(5, true); 24682 * // => a floating-point number between 0 and 5 24683 * 24684 * _.random(1.2, 5.2); 24685 * // => a floating-point number between 1.2 and 5.2 24686 */ 24687 function random(lower, upper, floating) { 24688 if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) { 24689 upper = floating = undefined; 24690 } 24691 if (floating === undefined) { 24692 if (typeof upper == 'boolean') { 24693 floating = upper; 24694 upper = undefined; 24695 } 24696 else if (typeof lower == 'boolean') { 24697 floating = lower; 24698 lower = undefined; 24699 } 24700 } 24701 if (lower === undefined && upper === undefined) { 24702 lower = 0; 24703 upper = 1; 24704 } 24705 else { 24706 lower = toFinite(lower); 24707 if (upper === undefined) { 24708 upper = lower; 24709 lower = 0; 24710 } else { 24711 upper = toFinite(upper); 24712 } 24713 } 24714 if (lower > upper) { 24715 var temp = lower; 24716 lower = upper; 24717 upper = temp; 24718 } 24719 if (floating || lower % 1 || upper % 1) { 24720 var rand = nativeRandom(); 24721 return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper); 24722 } 24723 return baseRandom(lower, upper); 24724 } 24725 24726 /*------------------------------------------------------------------------*/ 24727 24728 /** 24729 * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). 24730 * 24731 * @static 24732 * @memberOf _ 24733 * @since 3.0.0 24734 * @category String 24735 * @param {string} [string=''] The string to convert. 24736 * @returns {string} Returns the camel cased string. 24737 * @example 24738 * 24739 * _.camelCase('Foo Bar'); 24740 * // => 'fooBar' 24741 * 24742 * _.camelCase('--foo-bar--'); 24743 * // => 'fooBar' 24744 * 24745 * _.camelCase('__FOO_BAR__'); 24746 * // => 'fooBar' 24747 */ 24748 var camelCase = createCompounder(function(result, word, index) { 24749 word = word.toLowerCase(); 24750 return result + (index ? capitalize(word) : word); 24751 }); 24752 24753 /** 24754 * Converts the first character of `string` to upper case and the remaining 24755 * to lower case. 24756 * 24757 * @static 24758 * @memberOf _ 24759 * @since 3.0.0 24760 * @category String 24761 * @param {string} [string=''] The string to capitalize. 24762 * @returns {string} Returns the capitalized string. 24763 * @example 24764 * 24765 * _.capitalize('FRED'); 24766 * // => 'Fred' 24767 */ 24768 function capitalize(string) { 24769 return upperFirst(toString(string).toLowerCase()); 24770 } 24771 24772 /** 24773 * Deburrs `string` by converting 24774 * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) 24775 * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A) 24776 * letters to basic Latin letters and removing 24777 * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). 24778 * 24779 * @static 24780 * @memberOf _ 24781 * @since 3.0.0 24782 * @category String 24783 * @param {string} [string=''] The string to deburr. 24784 * @returns {string} Returns the deburred string. 24785 * @example 24786 * 24787 * _.deburr('déjà vu'); 24788 * // => 'deja vu' 24789 */ 24790 function deburr(string) { 24791 string = toString(string); 24792 return string && string.replace(reLatin, deburrLetter).replace(reComboMark, ''); 24793 } 24794 24795 /** 24796 * Checks if `string` ends with the given target string. 24797 * 24798 * @static 24799 * @memberOf _ 24800 * @since 3.0.0 24801 * @category String 24802 * @param {string} [string=''] The string to inspect. 24803 * @param {string} [target] The string to search for. 24804 * @param {number} [position=string.length] The position to search up to. 24805 * @returns {boolean} Returns `true` if `string` ends with `target`, 24806 * else `false`. 24807 * @example 24808 * 24809 * _.endsWith('abc', 'c'); 24810 * // => true 24811 * 24812 * _.endsWith('abc', 'b'); 24813 * // => false 24814 * 24815 * _.endsWith('abc', 'b', 2); 24816 * // => true 24817 */ 24818 function endsWith(string, target, position) { 24819 string = toString(string); 24820 target = baseToString(target); 24821 24822 var length = string.length; 24823 position = position === undefined 24824 ? length 24825 : baseClamp(toInteger(position), 0, length); 24826 24827 var end = position; 24828 position -= target.length; 24829 return position >= 0 && string.slice(position, end) == target; 24830 } 24831 24832 /** 24833 * Converts the characters "&", "<", ">", '"', and "'" in `string` to their 24834 * corresponding HTML entities. 24835 * 24836 * **Note:** No other characters are escaped. To escape additional 24837 * characters use a third-party library like [_he_](https://mths.be/he). 24838 * 24839 * Though the ">" character is escaped for symmetry, characters like 24840 * ">" and "/" don't need escaping in HTML and have no special meaning 24841 * unless they're part of a tag or unquoted attribute value. See 24842 * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) 24843 * (under "semi-related fun fact") for more details. 24844 * 24845 * When working with HTML you should always 24846 * [quote attribute values](http://wonko.com/post/html-escaping) to reduce 24847 * XSS vectors. 24848 * 24849 * @static 24850 * @since 0.1.0 24851 * @memberOf _ 24852 * @category String 24853 * @param {string} [string=''] The string to escape. 24854 * @returns {string} Returns the escaped string. 24855 * @example 24856 * 24857 * _.escape('fred, barney, & pebbles'); 24858 * // => 'fred, barney, & pebbles' 24859 */ 24860 function escape(string) { 24861 string = toString(string); 24862 return (string && reHasUnescapedHtml.test(string)) 24863 ? string.replace(reUnescapedHtml, escapeHtmlChar) 24864 : string; 24865 } 24866 24867 /** 24868 * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", 24869 * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`. 24870 * 24871 * @static 24872 * @memberOf _ 24873 * @since 3.0.0 24874 * @category String 24875 * @param {string} [string=''] The string to escape. 24876 * @returns {string} Returns the escaped string. 24877 * @example 24878 * 24879 * _.escapeRegExp('[lodash](https://lodash.com/)'); 24880 * // => '\[lodash\]\(https://lodash\.com/\)' 24881 */ 24882 function escapeRegExp(string) { 24883 string = toString(string); 24884 return (string && reHasRegExpChar.test(string)) 24885 ? string.replace(reRegExpChar, '\\$&') 24886 : string; 24887 } 24888 24889 /** 24890 * Converts `string` to 24891 * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). 24892 * 24893 * @static 24894 * @memberOf _ 24895 * @since 3.0.0 24896 * @category String 24897 * @param {string} [string=''] The string to convert. 24898 * @returns {string} Returns the kebab cased string. 24899 * @example 24900 * 24901 * _.kebabCase('Foo Bar'); 24902 * // => 'foo-bar' 24903 * 24904 * _.kebabCase('fooBar'); 24905 * // => 'foo-bar' 24906 * 24907 * _.kebabCase('__FOO_BAR__'); 24908 * // => 'foo-bar' 24909 */ 24910 var kebabCase = createCompounder(function(result, word, index) { 24911 return result + (index ? '-' : '') + word.toLowerCase(); 24912 }); 24913 24914 /** 24915 * Converts `string`, as space separated words, to lower case. 24916 * 24917 * @static 24918 * @memberOf _ 24919 * @since 4.0.0 24920 * @category String 24921 * @param {string} [string=''] The string to convert. 24922 * @returns {string} Returns the lower cased string. 24923 * @example 24924 * 24925 * _.lowerCase('--Foo-Bar--'); 24926 * // => 'foo bar' 24927 * 24928 * _.lowerCase('fooBar'); 24929 * // => 'foo bar' 24930 * 24931 * _.lowerCase('__FOO_BAR__'); 24932 * // => 'foo bar' 24933 */ 24934 var lowerCase = createCompounder(function(result, word, index) { 24935 return result + (index ? ' ' : '') + word.toLowerCase(); 24936 }); 24937 24938 /** 24939 * Converts the first character of `string` to lower case. 24940 * 24941 * @static 24942 * @memberOf _ 24943 * @since 4.0.0 24944 * @category String 24945 * @param {string} [string=''] The string to convert. 24946 * @returns {string} Returns the converted string. 24947 * @example 24948 * 24949 * _.lowerFirst('Fred'); 24950 * // => 'fred' 24951 * 24952 * _.lowerFirst('FRED'); 24953 * // => 'fRED' 24954 */ 24955 var lowerFirst = createCaseFirst('toLowerCase'); 24956 24957 /** 24958 * Pads `string` on the left and right sides if it's shorter than `length`. 24959 * Padding characters are truncated if they can't be evenly divided by `length`. 24960 * 24961 * @static 24962 * @memberOf _ 24963 * @since 3.0.0 24964 * @category String 24965 * @param {string} [string=''] The string to pad. 24966 * @param {number} [length=0] The padding length. 24967 * @param {string} [chars=' '] The string used as padding. 24968 * @returns {string} Returns the padded string. 24969 * @example 24970 * 24971 * _.pad('abc', 8); 24972 * // => ' abc ' 24973 * 24974 * _.pad('abc', 8, '_-'); 24975 * // => '_-abc_-_' 24976 * 24977 * _.pad('abc', 3); 24978 * // => 'abc' 24979 */ 24980 function pad(string, length, chars) { 24981 string = toString(string); 24982 length = toInteger(length); 24983 24984 var strLength = length ? stringSize(string) : 0; 24985 if (!length || strLength >= length) { 24986 return string; 24987 } 24988 var mid = (length - strLength) / 2; 24989 return ( 24990 createPadding(nativeFloor(mid), chars) + 24991 string + 24992 createPadding(nativeCeil(mid), chars) 24993 ); 24994 } 24995 24996 /** 24997 * Pads `string` on the right side if it's shorter than `length`. Padding 24998 * characters are truncated if they exceed `length`. 24999 * 25000 * @static 25001 * @memberOf _ 25002 * @since 4.0.0 25003 * @category String 25004 * @param {string} [string=''] The string to pad. 25005 * @param {number} [length=0] The padding length. 25006 * @param {string} [chars=' '] The string used as padding. 25007 * @returns {string} Returns the padded string. 25008 * @example 25009 * 25010 * _.padEnd('abc', 6); 25011 * // => 'abc ' 25012 * 25013 * _.padEnd('abc', 6, '_-'); 25014 * // => 'abc_-_' 25015 * 25016 * _.padEnd('abc', 3); 25017 * // => 'abc' 25018 */ 25019 function padEnd(string, length, chars) { 25020 string = toString(string); 25021 length = toInteger(length); 25022 25023 var strLength = length ? stringSize(string) : 0; 25024 return (length && strLength < length) 25025 ? (string + createPadding(length - strLength, chars)) 25026 : string; 25027 } 25028 25029 /** 25030 * Pads `string` on the left side if it's shorter than `length`. Padding 25031 * characters are truncated if they exceed `length`. 25032 * 25033 * @static 25034 * @memberOf _ 25035 * @since 4.0.0 25036 * @category String 25037 * @param {string} [string=''] The string to pad. 25038 * @param {number} [length=0] The padding length. 25039 * @param {string} [chars=' '] The string used as padding. 25040 * @returns {string} Returns the padded string. 25041 * @example 25042 * 25043 * _.padStart('abc', 6); 25044 * // => ' abc' 25045 * 25046 * _.padStart('abc', 6, '_-'); 25047 * // => '_-_abc' 25048 * 25049 * _.padStart('abc', 3); 25050 * // => 'abc' 25051 */ 25052 function padStart(string, length, chars) { 25053 string = toString(string); 25054 length = toInteger(length); 25055 25056 var strLength = length ? stringSize(string) : 0; 25057 return (length && strLength < length) 25058 ? (createPadding(length - strLength, chars) + string) 25059 : string; 25060 } 25061 25062 /** 25063 * Converts `string` to an integer of the specified radix. If `radix` is 25064 * `undefined` or `0`, a `radix` of `10` is used unless `value` is a 25065 * hexadecimal, in which case a `radix` of `16` is used. 25066 * 25067 * **Note:** This method aligns with the 25068 * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`. 25069 * 25070 * @static 25071 * @memberOf _ 25072 * @since 1.1.0 25073 * @category String 25074 * @param {string} string The string to convert. 25075 * @param {number} [radix=10] The radix to interpret `value` by. 25076 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 25077 * @returns {number} Returns the converted integer. 25078 * @example 25079 * 25080 * _.parseInt('08'); 25081 * // => 8 25082 * 25083 * _.map(['6', '08', '10'], _.parseInt); 25084 * // => [6, 8, 10] 25085 */ 25086 function parseInt(string, radix, guard) { 25087 if (guard || radix == null) { 25088 radix = 0; 25089 } else if (radix) { 25090 radix = +radix; 25091 } 25092 return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0); 25093 } 25094 25095 /** 25096 * Repeats the given string `n` times. 25097 * 25098 * @static 25099 * @memberOf _ 25100 * @since 3.0.0 25101 * @category String 25102 * @param {string} [string=''] The string to repeat. 25103 * @param {number} [n=1] The number of times to repeat the string. 25104 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 25105 * @returns {string} Returns the repeated string. 25106 * @example 25107 * 25108 * _.repeat('*', 3); 25109 * // => '***' 25110 * 25111 * _.repeat('abc', 2); 25112 * // => 'abcabc' 25113 * 25114 * _.repeat('abc', 0); 25115 * // => '' 25116 */ 25117 function repeat(string, n, guard) { 25118 if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) { 25119 n = 1; 25120 } else { 25121 n = toInteger(n); 25122 } 25123 return baseRepeat(toString(string), n); 25124 } 25125 25126 /** 25127 * Replaces matches for `pattern` in `string` with `replacement`. 25128 * 25129 * **Note:** This method is based on 25130 * [`String#replace`](https://mdn.io/String/replace). 25131 * 25132 * @static 25133 * @memberOf _ 25134 * @since 4.0.0 25135 * @category String 25136 * @param {string} [string=''] The string to modify. 25137 * @param {RegExp|string} pattern The pattern to replace. 25138 * @param {Function|string} replacement The match replacement. 25139 * @returns {string} Returns the modified string. 25140 * @example 25141 * 25142 * _.replace('Hi Fred', 'Fred', 'Barney'); 25143 * // => 'Hi Barney' 25144 */ 25145 function replace() { 25146 var args = arguments, 25147 string = toString(args[0]); 25148 25149 return args.length < 3 ? string : string.replace(args[1], args[2]); 25150 } 25151 25152 /** 25153 * Converts `string` to 25154 * [snake case](https://en.wikipedia.org/wiki/Snake_case). 25155 * 25156 * @static 25157 * @memberOf _ 25158 * @since 3.0.0 25159 * @category String 25160 * @param {string} [string=''] The string to convert. 25161 * @returns {string} Returns the snake cased string. 25162 * @example 25163 * 25164 * _.snakeCase('Foo Bar'); 25165 * // => 'foo_bar' 25166 * 25167 * _.snakeCase('fooBar'); 25168 * // => 'foo_bar' 25169 * 25170 * _.snakeCase('--FOO-BAR--'); 25171 * // => 'foo_bar' 25172 */ 25173 var snakeCase = createCompounder(function(result, word, index) { 25174 return result + (index ? '_' : '') + word.toLowerCase(); 25175 }); 25176 25177 /** 25178 * Splits `string` by `separator`. 25179 * 25180 * **Note:** This method is based on 25181 * [`String#split`](https://mdn.io/String/split). 25182 * 25183 * @static 25184 * @memberOf _ 25185 * @since 4.0.0 25186 * @category String 25187 * @param {string} [string=''] The string to split. 25188 * @param {RegExp|string} separator The separator pattern to split by. 25189 * @param {number} [limit] The length to truncate results to. 25190 * @returns {Array} Returns the string segments. 25191 * @example 25192 * 25193 * _.split('a-b-c', '-', 2); 25194 * // => ['a', 'b'] 25195 */ 25196 function split(string, separator, limit) { 25197 if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) { 25198 separator = limit = undefined; 25199 } 25200 limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0; 25201 if (!limit) { 25202 return []; 25203 } 25204 string = toString(string); 25205 if (string && ( 25206 typeof separator == 'string' || 25207 (separator != null && !isRegExp(separator)) 25208 )) { 25209 separator = baseToString(separator); 25210 if (!separator && hasUnicode(string)) { 25211 return castSlice(stringToArray(string), 0, limit); 25212 } 25213 } 25214 return string.split(separator, limit); 25215 } 25216 25217 /** 25218 * Converts `string` to 25219 * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage). 25220 * 25221 * @static 25222 * @memberOf _ 25223 * @since 3.1.0 25224 * @category String 25225 * @param {string} [string=''] The string to convert. 25226 * @returns {string} Returns the start cased string. 25227 * @example 25228 * 25229 * _.startCase('--foo-bar--'); 25230 * // => 'Foo Bar' 25231 * 25232 * _.startCase('fooBar'); 25233 * // => 'Foo Bar' 25234 * 25235 * _.startCase('__FOO_BAR__'); 25236 * // => 'FOO BAR' 25237 */ 25238 var startCase = createCompounder(function(result, word, index) { 25239 return result + (index ? ' ' : '') + upperFirst(word); 25240 }); 25241 25242 /** 25243 * Checks if `string` starts with the given target string. 25244 * 25245 * @static 25246 * @memberOf _ 25247 * @since 3.0.0 25248 * @category String 25249 * @param {string} [string=''] The string to inspect. 25250 * @param {string} [target] The string to search for. 25251 * @param {number} [position=0] The position to search from. 25252 * @returns {boolean} Returns `true` if `string` starts with `target`, 25253 * else `false`. 25254 * @example 25255 * 25256 * _.startsWith('abc', 'a'); 25257 * // => true 25258 * 25259 * _.startsWith('abc', 'b'); 25260 * // => false 25261 * 25262 * _.startsWith('abc', 'b', 1); 25263 * // => true 25264 */ 25265 function startsWith(string, target, position) { 25266 string = toString(string); 25267 position = position == null 25268 ? 0 25269 : baseClamp(toInteger(position), 0, string.length); 25270 25271 target = baseToString(target); 25272 return string.slice(position, position + target.length) == target; 25273 } 25274 25275 /** 25276 * Creates a compiled template function that can interpolate data properties 25277 * in "interpolate" delimiters, HTML-escape interpolated data properties in 25278 * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data 25279 * properties may be accessed as free variables in the template. If a setting 25280 * object is given, it takes precedence over `_.templateSettings` values. 25281 * 25282 * **Note:** In the development build `_.template` utilizes 25283 * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl) 25284 * for easier debugging. 25285 * 25286 * For more information on precompiling templates see 25287 * [lodash's custom builds documentation](https://lodash.com/custom-builds). 25288 * 25289 * For more information on Chrome extension sandboxes see 25290 * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval). 25291 * 25292 * @static 25293 * @since 0.1.0 25294 * @memberOf _ 25295 * @category String 25296 * @param {string} [string=''] The template string. 25297 * @param {Object} [options={}] The options object. 25298 * @param {RegExp} [options.escape=_.templateSettings.escape] 25299 * The HTML "escape" delimiter. 25300 * @param {RegExp} [options.evaluate=_.templateSettings.evaluate] 25301 * The "evaluate" delimiter. 25302 * @param {Object} [options.imports=_.templateSettings.imports] 25303 * An object to import into the template as free variables. 25304 * @param {RegExp} [options.interpolate=_.templateSettings.interpolate] 25305 * The "interpolate" delimiter. 25306 * @param {string} [options.sourceURL='lodash.templateSources[n]'] 25307 * The sourceURL of the compiled template. 25308 * @param {string} [options.variable='obj'] 25309 * The data object variable name. 25310 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 25311 * @returns {Function} Returns the compiled template function. 25312 * @example 25313 * 25314 * // Use the "interpolate" delimiter to create a compiled template. 25315 * var compiled = _.template('hello <%= user %>!'); 25316 * compiled({ 'user': 'fred' }); 25317 * // => 'hello fred!' 25318 * 25319 * // Use the HTML "escape" delimiter to escape data property values. 25320 * var compiled = _.template('<b><%- value %></b>'); 25321 * compiled({ 'value': '<script>' }); 25322 * // => '<b><script></b>' 25323 * 25324 * // Use the "evaluate" delimiter to execute JavaScript and generate HTML. 25325 * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>'); 25326 * compiled({ 'users': ['fred', 'barney'] }); 25327 * // => '<li>fred</li><li>barney</li>' 25328 * 25329 * // Use the internal `print` function in "evaluate" delimiters. 25330 * var compiled = _.template('<% print("hello " + user); %>!'); 25331 * compiled({ 'user': 'barney' }); 25332 * // => 'hello barney!' 25333 * 25334 * // Use the ES template literal delimiter as an "interpolate" delimiter. 25335 * // Disable support by replacing the "interpolate" delimiter. 25336 * var compiled = _.template('hello ${ user }!'); 25337 * compiled({ 'user': 'pebbles' }); 25338 * // => 'hello pebbles!' 25339 * 25340 * // Use backslashes to treat delimiters as plain text. 25341 * var compiled = _.template('<%= "\\<%- value %\\>" %>'); 25342 * compiled({ 'value': 'ignored' }); 25343 * // => '<%- value %>' 25344 * 25345 * // Use the `imports` option to import `jQuery` as `jq`. 25346 * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>'; 25347 * var compiled = _.template(text, { 'imports': { 'jq': jQuery } }); 25348 * compiled({ 'users': ['fred', 'barney'] }); 25349 * // => '<li>fred</li><li>barney</li>' 25350 * 25351 * // Use the `sourceURL` option to specify a custom sourceURL for the template. 25352 * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' }); 25353 * compiled(data); 25354 * // => Find the source of "greeting.jst" under the Sources tab or Resources panel of the web inspector. 25355 * 25356 * // Use the `variable` option to ensure a with-statement isn't used in the compiled template. 25357 * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' }); 25358 * compiled.source; 25359 * // => function(data) { 25360 * // var __t, __p = ''; 25361 * // __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!'; 25362 * // return __p; 25363 * // } 25364 * 25365 * // Use custom template delimiters. 25366 * _.templateSettings.interpolate = /{{([\s\S]+?)}}/g; 25367 * var compiled = _.template('hello {{ user }}!'); 25368 * compiled({ 'user': 'mustache' }); 25369 * // => 'hello mustache!' 25370 * 25371 * // Use the `source` property to inline compiled templates for meaningful 25372 * // line numbers in error messages and stack traces. 25373 * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\ 25374 * var JST = {\ 25375 * "main": ' + _.template(mainText).source + '\ 25376 * };\ 25377 * '); 25378 */ 25379 function template(string, options, guard) { 25380 // Based on John Resig's `tmpl` implementation 25381 // (http://ejohn.org/blog/javascript-micro-templating/) 25382 // and Laura Doktorova's doT.js (https://github.com/olado/doT). 25383 var settings = lodash.templateSettings; 25384 25385 if (guard && isIterateeCall(string, options, guard)) { 25386 options = undefined; 25387 } 25388 string = toString(string); 25389 options = assignInWith({}, options, settings, customDefaultsAssignIn); 25390 25391 var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn), 25392 importsKeys = keys(imports), 25393 importsValues = baseValues(imports, importsKeys); 25394 25395 var isEscaping, 25396 isEvaluating, 25397 index = 0, 25398 interpolate = options.interpolate || reNoMatch, 25399 source = "__p += '"; 25400 25401 // Compile the regexp to match each delimiter. 25402 var reDelimiters = RegExp( 25403 (options.escape || reNoMatch).source + '|' + 25404 interpolate.source + '|' + 25405 (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' + 25406 (options.evaluate || reNoMatch).source + '|$' 25407 , 'g'); 25408 25409 // Use a sourceURL for easier debugging. 25410 // The sourceURL gets injected into the source that's eval-ed, so be careful 25411 // to normalize all kinds of whitespace, so e.g. newlines (and unicode versions of it) can't sneak in 25412 // and escape the comment, thus injecting code that gets evaled. 25413 var sourceURL = '//# sourceURL=' + 25414 (hasOwnProperty.call(options, 'sourceURL') 25415 ? (options.sourceURL + '').replace(/\s/g, ' ') 25416 : ('lodash.templateSources[' + (++templateCounter) + ']') 25417 ) + '\n'; 25418 25419 string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) { 25420 interpolateValue || (interpolateValue = esTemplateValue); 25421 25422 // Escape characters that can't be included in string literals. 25423 source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar); 25424 25425 // Replace delimiters with snippets. 25426 if (escapeValue) { 25427 isEscaping = true; 25428 source += "' +\n__e(" + escapeValue + ") +\n'"; 25429 } 25430 if (evaluateValue) { 25431 isEvaluating = true; 25432 source += "';\n" + evaluateValue + ";\n__p += '"; 25433 } 25434 if (interpolateValue) { 25435 source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'"; 25436 } 25437 index = offset + match.length; 25438 25439 // The JS engine embedded in Adobe products needs `match` returned in 25440 // order to produce the correct `offset` value. 25441 return match; 25442 }); 25443 25444 source += "';\n"; 25445 25446 // If `variable` is not specified wrap a with-statement around the generated 25447 // code to add the data object to the top of the scope chain. 25448 var variable = hasOwnProperty.call(options, 'variable') && options.variable; 25449 if (!variable) { 25450 source = 'with (obj) {\n' + source + '\n}\n'; 25451 } 25452 // Throw an error if a forbidden character was found in `variable`, to prevent 25453 // potential command injection attacks. 25454 else if (reForbiddenIdentifierChars.test(variable)) { 25455 throw new Error(INVALID_TEMPL_VAR_ERROR_TEXT); 25456 } 25457 25458 // Cleanup code by stripping empty strings. 25459 source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source) 25460 .replace(reEmptyStringMiddle, '$1') 25461 .replace(reEmptyStringTrailing, '$1;'); 25462 25463 // Frame code as the function body. 25464 source = 'function(' + (variable || 'obj') + ') {\n' + 25465 (variable 25466 ? '' 25467 : 'obj || (obj = {});\n' 25468 ) + 25469 "var __t, __p = ''" + 25470 (isEscaping 25471 ? ', __e = _.escape' 25472 : '' 25473 ) + 25474 (isEvaluating 25475 ? ', __j = Array.prototype.join;\n' + 25476 "function print() { __p += __j.call(arguments, '') }\n" 25477 : ';\n' 25478 ) + 25479 source + 25480 'return __p\n}'; 25481 25482 var result = attempt(function() { 25483 return Function(importsKeys, sourceURL + 'return ' + source) 25484 .apply(undefined, importsValues); 25485 }); 25486 25487 // Provide the compiled function's source by its `toString` method or 25488 // the `source` property as a convenience for inlining compiled templates. 25489 result.source = source; 25490 if (isError(result)) { 25491 throw result; 25492 } 25493 return result; 25494 } 25495 25496 /** 25497 * Converts `string`, as a whole, to lower case just like 25498 * [String#toLowerCase](https://mdn.io/toLowerCase). 25499 * 25500 * @static 25501 * @memberOf _ 25502 * @since 4.0.0 25503 * @category String 25504 * @param {string} [string=''] The string to convert. 25505 * @returns {string} Returns the lower cased string. 25506 * @example 25507 * 25508 * _.toLower('--Foo-Bar--'); 25509 * // => '--foo-bar--' 25510 * 25511 * _.toLower('fooBar'); 25512 * // => 'foobar' 25513 * 25514 * _.toLower('__FOO_BAR__'); 25515 * // => '__foo_bar__' 25516 */ 25517 function toLower(value) { 25518 return toString(value).toLowerCase(); 25519 } 25520 25521 /** 25522 * Converts `string`, as a whole, to upper case just like 25523 * [String#toUpperCase](https://mdn.io/toUpperCase). 25524 * 25525 * @static 25526 * @memberOf _ 25527 * @since 4.0.0 25528 * @category String 25529 * @param {string} [string=''] The string to convert. 25530 * @returns {string} Returns the upper cased string. 25531 * @example 25532 * 25533 * _.toUpper('--foo-bar--'); 25534 * // => '--FOO-BAR--' 25535 * 25536 * _.toUpper('fooBar'); 25537 * // => 'FOOBAR' 25538 * 25539 * _.toUpper('__foo_bar__'); 25540 * // => '__FOO_BAR__' 25541 */ 25542 function toUpper(value) { 25543 return toString(value).toUpperCase(); 25544 } 25545 25546 /** 25547 * Removes leading and trailing whitespace or specified characters from `string`. 25548 * 25549 * @static 25550 * @memberOf _ 25551 * @since 3.0.0 25552 * @category String 25553 * @param {string} [string=''] The string to trim. 25554 * @param {string} [chars=whitespace] The characters to trim. 25555 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 25556 * @returns {string} Returns the trimmed string. 25557 * @example 25558 * 25559 * _.trim(' abc '); 25560 * // => 'abc' 25561 * 25562 * _.trim('-_-abc-_-', '_-'); 25563 * // => 'abc' 25564 * 25565 * _.map([' foo ', ' bar '], _.trim); 25566 * // => ['foo', 'bar'] 25567 */ 25568 function trim(string, chars, guard) { 25569 string = toString(string); 25570 if (string && (guard || chars === undefined)) { 25571 return baseTrim(string); 25572 } 25573 if (!string || !(chars = baseToString(chars))) { 25574 return string; 25575 } 25576 var strSymbols = stringToArray(string), 25577 chrSymbols = stringToArray(chars), 25578 start = charsStartIndex(strSymbols, chrSymbols), 25579 end = charsEndIndex(strSymbols, chrSymbols) + 1; 25580 25581 return castSlice(strSymbols, start, end).join(''); 25582 } 25583 25584 /** 25585 * Removes trailing whitespace or specified characters from `string`. 25586 * 25587 * @static 25588 * @memberOf _ 25589 * @since 4.0.0 25590 * @category String 25591 * @param {string} [string=''] The string to trim. 25592 * @param {string} [chars=whitespace] The characters to trim. 25593 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 25594 * @returns {string} Returns the trimmed string. 25595 * @example 25596 * 25597 * _.trimEnd(' abc '); 25598 * // => ' abc' 25599 * 25600 * _.trimEnd('-_-abc-_-', '_-'); 25601 * // => '-_-abc' 25602 */ 25603 function trimEnd(string, chars, guard) { 25604 string = toString(string); 25605 if (string && (guard || chars === undefined)) { 25606 return string.slice(0, trimmedEndIndex(string) + 1); 25607 } 25608 if (!string || !(chars = baseToString(chars))) { 25609 return string; 25610 } 25611 var strSymbols = stringToArray(string), 25612 end = charsEndIndex(strSymbols, stringToArray(chars)) + 1; 25613 25614 return castSlice(strSymbols, 0, end).join(''); 25615 } 25616 25617 /** 25618 * Removes leading whitespace or specified characters from `string`. 25619 * 25620 * @static 25621 * @memberOf _ 25622 * @since 4.0.0 25623 * @category String 25624 * @param {string} [string=''] The string to trim. 25625 * @param {string} [chars=whitespace] The characters to trim. 25626 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 25627 * @returns {string} Returns the trimmed string. 25628 * @example 25629 * 25630 * _.trimStart(' abc '); 25631 * // => 'abc ' 25632 * 25633 * _.trimStart('-_-abc-_-', '_-'); 25634 * // => 'abc-_-' 25635 */ 25636 function trimStart(string, chars, guard) { 25637 string = toString(string); 25638 if (string && (guard || chars === undefined)) { 25639 return string.replace(reTrimStart, ''); 25640 } 25641 if (!string || !(chars = baseToString(chars))) { 25642 return string; 25643 } 25644 var strSymbols = stringToArray(string), 25645 start = charsStartIndex(strSymbols, stringToArray(chars)); 25646 25647 return castSlice(strSymbols, start).join(''); 25648 } 25649 25650 /** 25651 * Truncates `string` if it's longer than the given maximum string length. 25652 * The last characters of the truncated string are replaced with the omission 25653 * string which defaults to "...". 25654 * 25655 * @static 25656 * @memberOf _ 25657 * @since 4.0.0 25658 * @category String 25659 * @param {string} [string=''] The string to truncate. 25660 * @param {Object} [options={}] The options object. 25661 * @param {number} [options.length=30] The maximum string length. 25662 * @param {string} [options.omission='...'] The string to indicate text is omitted. 25663 * @param {RegExp|string} [options.separator] The separator pattern to truncate to. 25664 * @returns {string} Returns the truncated string. 25665 * @example 25666 * 25667 * _.truncate('hi-diddly-ho there, neighborino'); 25668 * // => 'hi-diddly-ho there, neighbo...' 25669 * 25670 * _.truncate('hi-diddly-ho there, neighborino', { 25671 * 'length': 24, 25672 * 'separator': ' ' 25673 * }); 25674 * // => 'hi-diddly-ho there,...' 25675 * 25676 * _.truncate('hi-diddly-ho there, neighborino', { 25677 * 'length': 24, 25678 * 'separator': /,? +/ 25679 * }); 25680 * // => 'hi-diddly-ho there...' 25681 * 25682 * _.truncate('hi-diddly-ho there, neighborino', { 25683 * 'omission': ' [...]' 25684 * }); 25685 * // => 'hi-diddly-ho there, neig [...]' 25686 */ 25687 function truncate(string, options) { 25688 var length = DEFAULT_TRUNC_LENGTH, 25689 omission = DEFAULT_TRUNC_OMISSION; 25690 25691 if (isObject(options)) { 25692 var separator = 'separator' in options ? options.separator : separator; 25693 length = 'length' in options ? toInteger(options.length) : length; 25694 omission = 'omission' in options ? baseToString(options.omission) : omission; 25695 } 25696 string = toString(string); 25697 25698 var strLength = string.length; 25699 if (hasUnicode(string)) { 25700 var strSymbols = stringToArray(string); 25701 strLength = strSymbols.length; 25702 } 25703 if (length >= strLength) { 25704 return string; 25705 } 25706 var end = length - stringSize(omission); 25707 if (end < 1) { 25708 return omission; 25709 } 25710 var result = strSymbols 25711 ? castSlice(strSymbols, 0, end).join('') 25712 : string.slice(0, end); 25713 25714 if (separator === undefined) { 25715 return result + omission; 25716 } 25717 if (strSymbols) { 25718 end += (result.length - end); 25719 } 25720 if (isRegExp(separator)) { 25721 if (string.slice(end).search(separator)) { 25722 var match, 25723 substring = result; 25724 25725 if (!separator.global) { 25726 separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g'); 25727 } 25728 separator.lastIndex = 0; 25729 while ((match = separator.exec(substring))) { 25730 var newEnd = match.index; 25731 } 25732 result = result.slice(0, newEnd === undefined ? end : newEnd); 25733 } 25734 } else if (string.indexOf(baseToString(separator), end) != end) { 25735 var index = result.lastIndexOf(separator); 25736 if (index > -1) { 25737 result = result.slice(0, index); 25738 } 25739 } 25740 return result + omission; 25741 } 25742 25743 /** 25744 * The inverse of `_.escape`; this method converts the HTML entities 25745 * `&`, `<`, `>`, `"`, and `'` in `string` to 25746 * their corresponding characters. 25747 * 25748 * **Note:** No other HTML entities are unescaped. To unescape additional 25749 * HTML entities use a third-party library like [_he_](https://mths.be/he). 25750 * 25751 * @static 25752 * @memberOf _ 25753 * @since 0.6.0 25754 * @category String 25755 * @param {string} [string=''] The string to unescape. 25756 * @returns {string} Returns the unescaped string. 25757 * @example 25758 * 25759 * _.unescape('fred, barney, & pebbles'); 25760 * // => 'fred, barney, & pebbles' 25761 */ 25762 function unescape(string) { 25763 string = toString(string); 25764 return (string && reHasEscapedHtml.test(string)) 25765 ? string.replace(reEscapedHtml, unescapeHtmlChar) 25766 : string; 25767 } 25768 25769 /** 25770 * Converts `string`, as space separated words, to upper case. 25771 * 25772 * @static 25773 * @memberOf _ 25774 * @since 4.0.0 25775 * @category String 25776 * @param {string} [string=''] The string to convert. 25777 * @returns {string} Returns the upper cased string. 25778 * @example 25779 * 25780 * _.upperCase('--foo-bar'); 25781 * // => 'FOO BAR' 25782 * 25783 * _.upperCase('fooBar'); 25784 * // => 'FOO BAR' 25785 * 25786 * _.upperCase('__foo_bar__'); 25787 * // => 'FOO BAR' 25788 */ 25789 var upperCase = createCompounder(function(result, word, index) { 25790 return result + (index ? ' ' : '') + word.toUpperCase(); 25791 }); 25792 25793 /** 25794 * Converts the first character of `string` to upper case. 25795 * 25796 * @static 25797 * @memberOf _ 25798 * @since 4.0.0 25799 * @category String 25800 * @param {string} [string=''] The string to convert. 25801 * @returns {string} Returns the converted string. 25802 * @example 25803 * 25804 * _.upperFirst('fred'); 25805 * // => 'Fred' 25806 * 25807 * _.upperFirst('FRED'); 25808 * // => 'FRED' 25809 */ 25810 var upperFirst = createCaseFirst('toUpperCase'); 25811 25812 /** 25813 * Splits `string` into an array of its words. 25814 * 25815 * @static 25816 * @memberOf _ 25817 * @since 3.0.0 25818 * @category String 25819 * @param {string} [string=''] The string to inspect. 25820 * @param {RegExp|string} [pattern] The pattern to match words. 25821 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 25822 * @returns {Array} Returns the words of `string`. 25823 * @example 25824 * 25825 * _.words('fred, barney, & pebbles'); 25826 * // => ['fred', 'barney', 'pebbles'] 25827 * 25828 * _.words('fred, barney, & pebbles', /[^, ]+/g); 25829 * // => ['fred', 'barney', '&', 'pebbles'] 25830 */ 25831 function words(string, pattern, guard) { 25832 string = toString(string); 25833 pattern = guard ? undefined : pattern; 25834 25835 if (pattern === undefined) { 25836 return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string); 25837 } 25838 return string.match(pattern) || []; 25839 } 25840 25841 /*------------------------------------------------------------------------*/ 25842 25843 /** 25844 * Attempts to invoke `func`, returning either the result or the caught error 25845 * object. Any additional arguments are provided to `func` when it's invoked. 25846 * 25847 * @static 25848 * @memberOf _ 25849 * @since 3.0.0 25850 * @category Util 25851 * @param {Function} func The function to attempt. 25852 * @param {...*} [args] The arguments to invoke `func` with. 25853 * @returns {*} Returns the `func` result or error object. 25854 * @example 25855 * 25856 * // Avoid throwing errors for invalid selectors. 25857 * var elements = _.attempt(function(selector) { 25858 * return document.querySelectorAll(selector); 25859 * }, '>_>'); 25860 * 25861 * if (_.isError(elements)) { 25862 * elements = []; 25863 * } 25864 */ 25865 var attempt = baseRest(function(func, args) { 25866 try { 25867 return apply(func, undefined, args); 25868 } catch (e) { 25869 return isError(e) ? e : new Error(e); 25870 } 25871 }); 25872 25873 /** 25874 * Binds methods of an object to the object itself, overwriting the existing 25875 * method. 25876 * 25877 * **Note:** This method doesn't set the "length" property of bound functions. 25878 * 25879 * @static 25880 * @since 0.1.0 25881 * @memberOf _ 25882 * @category Util 25883 * @param {Object} object The object to bind and assign the bound methods to. 25884 * @param {...(string|string[])} methodNames The object method names to bind. 25885 * @returns {Object} Returns `object`. 25886 * @example 25887 * 25888 * var view = { 25889 * 'label': 'docs', 25890 * 'click': function() { 25891 * console.log('clicked ' + this.label); 25892 * } 25893 * }; 25894 * 25895 * _.bindAll(view, ['click']); 25896 * jQuery(element).on('click', view.click); 25897 * // => Logs 'clicked docs' when clicked. 25898 */ 25899 var bindAll = flatRest(function(object, methodNames) { 25900 arrayEach(methodNames, function(key) { 25901 key = toKey(key); 25902 baseAssignValue(object, key, bind(object[key], object)); 25903 }); 25904 return object; 25905 }); 25906 25907 /** 25908 * Creates a function that iterates over `pairs` and invokes the corresponding 25909 * function of the first predicate to return truthy. The predicate-function 25910 * pairs are invoked with the `this` binding and arguments of the created 25911 * function. 25912 * 25913 * @static 25914 * @memberOf _ 25915 * @since 4.0.0 25916 * @category Util 25917 * @param {Array} pairs The predicate-function pairs. 25918 * @returns {Function} Returns the new composite function. 25919 * @example 25920 * 25921 * var func = _.cond([ 25922 * [_.matches({ 'a': 1 }), _.constant('matches A')], 25923 * [_.conforms({ 'b': _.isNumber }), _.constant('matches B')], 25924 * [_.stubTrue, _.constant('no match')] 25925 * ]); 25926 * 25927 * func({ 'a': 1, 'b': 2 }); 25928 * // => 'matches A' 25929 * 25930 * func({ 'a': 0, 'b': 1 }); 25931 * // => 'matches B' 25932 * 25933 * func({ 'a': '1', 'b': '2' }); 25934 * // => 'no match' 25935 */ 25936 function cond(pairs) { 25937 var length = pairs == null ? 0 : pairs.length, 25938 toIteratee = getIteratee(); 25939 25940 pairs = !length ? [] : arrayMap(pairs, function(pair) { 25941 if (typeof pair[1] != 'function') { 25942 throw new TypeError(FUNC_ERROR_TEXT); 25943 } 25944 return [toIteratee(pair[0]), pair[1]]; 25945 }); 25946 25947 return baseRest(function(args) { 25948 var index = -1; 25949 while (++index < length) { 25950 var pair = pairs[index]; 25951 if (apply(pair[0], this, args)) { 25952 return apply(pair[1], this, args); 25953 } 25954 } 25955 }); 25956 } 25957 25958 /** 25959 * Creates a function that invokes the predicate properties of `source` with 25960 * the corresponding property values of a given object, returning `true` if 25961 * all predicates return truthy, else `false`. 25962 * 25963 * **Note:** The created function is equivalent to `_.conformsTo` with 25964 * `source` partially applied. 25965 * 25966 * @static 25967 * @memberOf _ 25968 * @since 4.0.0 25969 * @category Util 25970 * @param {Object} source The object of property predicates to conform to. 25971 * @returns {Function} Returns the new spec function. 25972 * @example 25973 * 25974 * var objects = [ 25975 * { 'a': 2, 'b': 1 }, 25976 * { 'a': 1, 'b': 2 } 25977 * ]; 25978 * 25979 * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } })); 25980 * // => [{ 'a': 1, 'b': 2 }] 25981 */ 25982 function conforms(source) { 25983 return baseConforms(baseClone(source, CLONE_DEEP_FLAG)); 25984 } 25985 25986 /** 25987 * Creates a function that returns `value`. 25988 * 25989 * @static 25990 * @memberOf _ 25991 * @since 2.4.0 25992 * @category Util 25993 * @param {*} value The value to return from the new function. 25994 * @returns {Function} Returns the new constant function. 25995 * @example 25996 * 25997 * var objects = _.times(2, _.constant({ 'a': 1 })); 25998 * 25999 * console.log(objects); 26000 * // => [{ 'a': 1 }, { 'a': 1 }] 26001 * 26002 * console.log(objects[0] === objects[1]); 26003 * // => true 26004 */ 26005 function constant(value) { 26006 return function() { 26007 return value; 26008 }; 26009 } 26010 26011 /** 26012 * Checks `value` to determine whether a default value should be returned in 26013 * its place. The `defaultValue` is returned if `value` is `NaN`, `null`, 26014 * or `undefined`. 26015 * 26016 * @static 26017 * @memberOf _ 26018 * @since 4.14.0 26019 * @category Util 26020 * @param {*} value The value to check. 26021 * @param {*} defaultValue The default value. 26022 * @returns {*} Returns the resolved value. 26023 * @example 26024 * 26025 * _.defaultTo(1, 10); 26026 * // => 1 26027 * 26028 * _.defaultTo(undefined, 10); 26029 * // => 10 26030 */ 26031 function defaultTo(value, defaultValue) { 26032 return (value == null || value !== value) ? defaultValue : value; 26033 } 26034 26035 /** 26036 * Creates a function that returns the result of invoking the given functions 26037 * with the `this` binding of the created function, where each successive 26038 * invocation is supplied the return value of the previous. 26039 * 26040 * @static 26041 * @memberOf _ 26042 * @since 3.0.0 26043 * @category Util 26044 * @param {...(Function|Function[])} [funcs] The functions to invoke. 26045 * @returns {Function} Returns the new composite function. 26046 * @see _.flowRight 26047 * @example 26048 * 26049 * function square(n) { 26050 * return n * n; 26051 * } 26052 * 26053 * var addSquare = _.flow([_.add, square]); 26054 * addSquare(1, 2); 26055 * // => 9 26056 */ 26057 var flow = createFlow(); 26058 26059 /** 26060 * This method is like `_.flow` except that it creates a function that 26061 * invokes the given functions from right to left. 26062 * 26063 * @static 26064 * @since 3.0.0 26065 * @memberOf _ 26066 * @category Util 26067 * @param {...(Function|Function[])} [funcs] The functions to invoke. 26068 * @returns {Function} Returns the new composite function. 26069 * @see _.flow 26070 * @example 26071 * 26072 * function square(n) { 26073 * return n * n; 26074 * } 26075 * 26076 * var addSquare = _.flowRight([square, _.add]); 26077 * addSquare(1, 2); 26078 * // => 9 26079 */ 26080 var flowRight = createFlow(true); 26081 26082 /** 26083 * This method returns the first argument it receives. 26084 * 26085 * @static 26086 * @since 0.1.0 26087 * @memberOf _ 26088 * @category Util 26089 * @param {*} value Any value. 26090 * @returns {*} Returns `value`. 26091 * @example 26092 * 26093 * var object = { 'a': 1 }; 26094 * 26095 * console.log(_.identity(object) === object); 26096 * // => true 26097 */ 26098 function identity(value) { 26099 return value; 26100 } 26101 26102 /** 26103 * Creates a function that invokes `func` with the arguments of the created 26104 * function. If `func` is a property name, the created function returns the 26105 * property value for a given element. If `func` is an array or object, the 26106 * created function returns `true` for elements that contain the equivalent 26107 * source properties, otherwise it returns `false`. 26108 * 26109 * @static 26110 * @since 4.0.0 26111 * @memberOf _ 26112 * @category Util 26113 * @param {*} [func=_.identity] The value to convert to a callback. 26114 * @returns {Function} Returns the callback. 26115 * @example 26116 * 26117 * var users = [ 26118 * { 'user': 'barney', 'age': 36, 'active': true }, 26119 * { 'user': 'fred', 'age': 40, 'active': false } 26120 * ]; 26121 * 26122 * // The `_.matches` iteratee shorthand. 26123 * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true })); 26124 * // => [{ 'user': 'barney', 'age': 36, 'active': true }] 26125 * 26126 * // The `_.matchesProperty` iteratee shorthand. 26127 * _.filter(users, _.iteratee(['user', 'fred'])); 26128 * // => [{ 'user': 'fred', 'age': 40 }] 26129 * 26130 * // The `_.property` iteratee shorthand. 26131 * _.map(users, _.iteratee('user')); 26132 * // => ['barney', 'fred'] 26133 * 26134 * // Create custom iteratee shorthands. 26135 * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) { 26136 * return !_.isRegExp(func) ? iteratee(func) : function(string) { 26137 * return func.test(string); 26138 * }; 26139 * }); 26140 * 26141 * _.filter(['abc', 'def'], /ef/); 26142 * // => ['def'] 26143 */ 26144 function iteratee(func) { 26145 return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG)); 26146 } 26147 26148 /** 26149 * Creates a function that performs a partial deep comparison between a given 26150 * object and `source`, returning `true` if the given object has equivalent 26151 * property values, else `false`. 26152 * 26153 * **Note:** The created function is equivalent to `_.isMatch` with `source` 26154 * partially applied. 26155 * 26156 * Partial comparisons will match empty array and empty object `source` 26157 * values against any array or object value, respectively. See `_.isEqual` 26158 * for a list of supported value comparisons. 26159 * 26160 * **Note:** Multiple values can be checked by combining several matchers 26161 * using `_.overSome` 26162 * 26163 * @static 26164 * @memberOf _ 26165 * @since 3.0.0 26166 * @category Util 26167 * @param {Object} source The object of property values to match. 26168 * @returns {Function} Returns the new spec function. 26169 * @example 26170 * 26171 * var objects = [ 26172 * { 'a': 1, 'b': 2, 'c': 3 }, 26173 * { 'a': 4, 'b': 5, 'c': 6 } 26174 * ]; 26175 * 26176 * _.filter(objects, _.matches({ 'a': 4, 'c': 6 })); 26177 * // => [{ 'a': 4, 'b': 5, 'c': 6 }] 26178 * 26179 * // Checking for several possible values 26180 * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })])); 26181 * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }] 26182 */ 26183 function matches(source) { 26184 return baseMatches(baseClone(source, CLONE_DEEP_FLAG)); 26185 } 26186 26187 /** 26188 * Creates a function that performs a partial deep comparison between the 26189 * value at `path` of a given object to `srcValue`, returning `true` if the 26190 * object value is equivalent, else `false`. 26191 * 26192 * **Note:** Partial comparisons will match empty array and empty object 26193 * `srcValue` values against any array or object value, respectively. See 26194 * `_.isEqual` for a list of supported value comparisons. 26195 * 26196 * **Note:** Multiple values can be checked by combining several matchers 26197 * using `_.overSome` 26198 * 26199 * @static 26200 * @memberOf _ 26201 * @since 3.2.0 26202 * @category Util 26203 * @param {Array|string} path The path of the property to get. 26204 * @param {*} srcValue The value to match. 26205 * @returns {Function} Returns the new spec function. 26206 * @example 26207 * 26208 * var objects = [ 26209 * { 'a': 1, 'b': 2, 'c': 3 }, 26210 * { 'a': 4, 'b': 5, 'c': 6 } 26211 * ]; 26212 * 26213 * _.find(objects, _.matchesProperty('a', 4)); 26214 * // => { 'a': 4, 'b': 5, 'c': 6 } 26215 * 26216 * // Checking for several possible values 26217 * _.filter(objects, _.overSome([_.matchesProperty('a', 1), _.matchesProperty('a', 4)])); 26218 * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }] 26219 */ 26220 function matchesProperty(path, srcValue) { 26221 return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG)); 26222 } 26223 26224 /** 26225 * Creates a function that invokes the method at `path` of a given object. 26226 * Any additional arguments are provided to the invoked method. 26227 * 26228 * @static 26229 * @memberOf _ 26230 * @since 3.7.0 26231 * @category Util 26232 * @param {Array|string} path The path of the method to invoke. 26233 * @param {...*} [args] The arguments to invoke the method with. 26234 * @returns {Function} Returns the new invoker function. 26235 * @example 26236 * 26237 * var objects = [ 26238 * { 'a': { 'b': _.constant(2) } }, 26239 * { 'a': { 'b': _.constant(1) } } 26240 * ]; 26241 * 26242 * _.map(objects, _.method('a.b')); 26243 * // => [2, 1] 26244 * 26245 * _.map(objects, _.method(['a', 'b'])); 26246 * // => [2, 1] 26247 */ 26248 var method = baseRest(function(path, args) { 26249 return function(object) { 26250 return baseInvoke(object, path, args); 26251 }; 26252 }); 26253 26254 /** 26255 * The opposite of `_.method`; this method creates a function that invokes 26256 * the method at a given path of `object`. Any additional arguments are 26257 * provided to the invoked method. 26258 * 26259 * @static 26260 * @memberOf _ 26261 * @since 3.7.0 26262 * @category Util 26263 * @param {Object} object The object to query. 26264 * @param {...*} [args] The arguments to invoke the method with. 26265 * @returns {Function} Returns the new invoker function. 26266 * @example 26267 * 26268 * var array = _.times(3, _.constant), 26269 * object = { 'a': array, 'b': array, 'c': array }; 26270 * 26271 * _.map(['a[2]', 'c[0]'], _.methodOf(object)); 26272 * // => [2, 0] 26273 * 26274 * _.map([['a', '2'], ['c', '0']], _.methodOf(object)); 26275 * // => [2, 0] 26276 */ 26277 var methodOf = baseRest(function(object, args) { 26278 return function(path) { 26279 return baseInvoke(object, path, args); 26280 }; 26281 }); 26282 26283 /** 26284 * Adds all own enumerable string keyed function properties of a source 26285 * object to the destination object. If `object` is a function, then methods 26286 * are added to its prototype as well. 26287 * 26288 * **Note:** Use `_.runInContext` to create a pristine `lodash` function to 26289 * avoid conflicts caused by modifying the original. 26290 * 26291 * @static 26292 * @since 0.1.0 26293 * @memberOf _ 26294 * @category Util 26295 * @param {Function|Object} [object=lodash] The destination object. 26296 * @param {Object} source The object of functions to add. 26297 * @param {Object} [options={}] The options object. 26298 * @param {boolean} [options.chain=true] Specify whether mixins are chainable. 26299 * @returns {Function|Object} Returns `object`. 26300 * @example 26301 * 26302 * function vowels(string) { 26303 * return _.filter(string, function(v) { 26304 * return /[aeiou]/i.test(v); 26305 * }); 26306 * } 26307 * 26308 * _.mixin({ 'vowels': vowels }); 26309 * _.vowels('fred'); 26310 * // => ['e'] 26311 * 26312 * _('fred').vowels().value(); 26313 * // => ['e'] 26314 * 26315 * _.mixin({ 'vowels': vowels }, { 'chain': false }); 26316 * _('fred').vowels(); 26317 * // => ['e'] 26318 */ 26319 function mixin(object, source, options) { 26320 var props = keys(source), 26321 methodNames = baseFunctions(source, props); 26322 26323 if (options == null && 26324 !(isObject(source) && (methodNames.length || !props.length))) { 26325 options = source; 26326 source = object; 26327 object = this; 26328 methodNames = baseFunctions(source, keys(source)); 26329 } 26330 var chain = !(isObject(options) && 'chain' in options) || !!options.chain, 26331 isFunc = isFunction(object); 26332 26333 arrayEach(methodNames, function(methodName) { 26334 var func = source[methodName]; 26335 object[methodName] = func; 26336 if (isFunc) { 26337 object.prototype[methodName] = function() { 26338 var chainAll = this.__chain__; 26339 if (chain || chainAll) { 26340 var result = object(this.__wrapped__), 26341 actions = result.__actions__ = copyArray(this.__actions__); 26342 26343 actions.push({ 'func': func, 'args': arguments, 'thisArg': object }); 26344 result.__chain__ = chainAll; 26345 return result; 26346 } 26347 return func.apply(object, arrayPush([this.value()], arguments)); 26348 }; 26349 } 26350 }); 26351 26352 return object; 26353 } 26354 26355 /** 26356 * Reverts the `_` variable to its previous value and returns a reference to 26357 * the `lodash` function. 26358 * 26359 * @static 26360 * @since 0.1.0 26361 * @memberOf _ 26362 * @category Util 26363 * @returns {Function} Returns the `lodash` function. 26364 * @example 26365 * 26366 * var lodash = _.noConflict(); 26367 */ 26368 function noConflict() { 26369 if (root._ === this) { 26370 root._ = oldDash; 26371 } 26372 return this; 26373 } 26374 26375 /** 26376 * This method returns `undefined`. 26377 * 26378 * @static 26379 * @memberOf _ 26380 * @since 2.3.0 26381 * @category Util 26382 * @example 26383 * 26384 * _.times(2, _.noop); 26385 * // => [undefined, undefined] 26386 */ 26387 function noop() { 26388 // No operation performed. 26389 } 26390 26391 /** 26392 * Creates a function that gets the argument at index `n`. If `n` is negative, 26393 * the nth argument from the end is returned. 26394 * 26395 * @static 26396 * @memberOf _ 26397 * @since 4.0.0 26398 * @category Util 26399 * @param {number} [n=0] The index of the argument to return. 26400 * @returns {Function} Returns the new pass-thru function. 26401 * @example 26402 * 26403 * var func = _.nthArg(1); 26404 * func('a', 'b', 'c', 'd'); 26405 * // => 'b' 26406 * 26407 * var func = _.nthArg(-2); 26408 * func('a', 'b', 'c', 'd'); 26409 * // => 'c' 26410 */ 26411 function nthArg(n) { 26412 n = toInteger(n); 26413 return baseRest(function(args) { 26414 return baseNth(args, n); 26415 }); 26416 } 26417 26418 /** 26419 * Creates a function that invokes `iteratees` with the arguments it receives 26420 * and returns their results. 26421 * 26422 * @static 26423 * @memberOf _ 26424 * @since 4.0.0 26425 * @category Util 26426 * @param {...(Function|Function[])} [iteratees=[_.identity]] 26427 * The iteratees to invoke. 26428 * @returns {Function} Returns the new function. 26429 * @example 26430 * 26431 * var func = _.over([Math.max, Math.min]); 26432 * 26433 * func(1, 2, 3, 4); 26434 * // => [4, 1] 26435 */ 26436 var over = createOver(arrayMap); 26437 26438 /** 26439 * Creates a function that checks if **all** of the `predicates` return 26440 * truthy when invoked with the arguments it receives. 26441 * 26442 * Following shorthands are possible for providing predicates. 26443 * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate. 26444 * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them. 26445 * 26446 * @static 26447 * @memberOf _ 26448 * @since 4.0.0 26449 * @category Util 26450 * @param {...(Function|Function[])} [predicates=[_.identity]] 26451 * The predicates to check. 26452 * @returns {Function} Returns the new function. 26453 * @example 26454 * 26455 * var func = _.overEvery([Boolean, isFinite]); 26456 * 26457 * func('1'); 26458 * // => true 26459 * 26460 * func(null); 26461 * // => false 26462 * 26463 * func(NaN); 26464 * // => false 26465 */ 26466 var overEvery = createOver(arrayEvery); 26467 26468 /** 26469 * Creates a function that checks if **any** of the `predicates` return 26470 * truthy when invoked with the arguments it receives. 26471 * 26472 * Following shorthands are possible for providing predicates. 26473 * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate. 26474 * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them. 26475 * 26476 * @static 26477 * @memberOf _ 26478 * @since 4.0.0 26479 * @category Util 26480 * @param {...(Function|Function[])} [predicates=[_.identity]] 26481 * The predicates to check. 26482 * @returns {Function} Returns the new function. 26483 * @example 26484 * 26485 * var func = _.overSome([Boolean, isFinite]); 26486 * 26487 * func('1'); 26488 * // => true 26489 * 26490 * func(null); 26491 * // => true 26492 * 26493 * func(NaN); 26494 * // => false 26495 * 26496 * var matchesFunc = _.overSome([{ 'a': 1 }, { 'a': 2 }]) 26497 * var matchesPropertyFunc = _.overSome([['a', 1], ['a', 2]]) 26498 */ 26499 var overSome = createOver(arraySome); 26500 26501 /** 26502 * Creates a function that returns the value at `path` of a given object. 26503 * 26504 * @static 26505 * @memberOf _ 26506 * @since 2.4.0 26507 * @category Util 26508 * @param {Array|string} path The path of the property to get. 26509 * @returns {Function} Returns the new accessor function. 26510 * @example 26511 * 26512 * var objects = [ 26513 * { 'a': { 'b': 2 } }, 26514 * { 'a': { 'b': 1 } } 26515 * ]; 26516 * 26517 * _.map(objects, _.property('a.b')); 26518 * // => [2, 1] 26519 * 26520 * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); 26521 * // => [1, 2] 26522 */ 26523 function property(path) { 26524 return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path); 26525 } 26526 26527 /** 26528 * The opposite of `_.property`; this method creates a function that returns 26529 * the value at a given path of `object`. 26530 * 26531 * @static 26532 * @memberOf _ 26533 * @since 3.0.0 26534 * @category Util 26535 * @param {Object} object The object to query. 26536 * @returns {Function} Returns the new accessor function. 26537 * @example 26538 * 26539 * var array = [0, 1, 2], 26540 * object = { 'a': array, 'b': array, 'c': array }; 26541 * 26542 * _.map(['a[2]', 'c[0]'], _.propertyOf(object)); 26543 * // => [2, 0] 26544 * 26545 * _.map([['a', '2'], ['c', '0']], _.propertyOf(object)); 26546 * // => [2, 0] 26547 */ 26548 function propertyOf(object) { 26549 return function(path) { 26550 return object == null ? undefined : baseGet(object, path); 26551 }; 26552 } 26553 26554 /** 26555 * Creates an array of numbers (positive and/or negative) progressing from 26556 * `start` up to, but not including, `end`. A step of `-1` is used if a negative 26557 * `start` is specified without an `end` or `step`. If `end` is not specified, 26558 * it's set to `start` with `start` then set to `0`. 26559 * 26560 * **Note:** JavaScript follows the IEEE-754 standard for resolving 26561 * floating-point values which can produce unexpected results. 26562 * 26563 * @static 26564 * @since 0.1.0 26565 * @memberOf _ 26566 * @category Util 26567 * @param {number} [start=0] The start of the range. 26568 * @param {number} end The end of the range. 26569 * @param {number} [step=1] The value to increment or decrement by. 26570 * @returns {Array} Returns the range of numbers. 26571 * @see _.inRange, _.rangeRight 26572 * @example 26573 * 26574 * _.range(4); 26575 * // => [0, 1, 2, 3] 26576 * 26577 * _.range(-4); 26578 * // => [0, -1, -2, -3] 26579 * 26580 * _.range(1, 5); 26581 * // => [1, 2, 3, 4] 26582 * 26583 * _.range(0, 20, 5); 26584 * // => [0, 5, 10, 15] 26585 * 26586 * _.range(0, -4, -1); 26587 * // => [0, -1, -2, -3] 26588 * 26589 * _.range(1, 4, 0); 26590 * // => [1, 1, 1] 26591 * 26592 * _.range(0); 26593 * // => [] 26594 */ 26595 var range = createRange(); 26596 26597 /** 26598 * This method is like `_.range` except that it populates values in 26599 * descending order. 26600 * 26601 * @static 26602 * @memberOf _ 26603 * @since 4.0.0 26604 * @category Util 26605 * @param {number} [start=0] The start of the range. 26606 * @param {number} end The end of the range. 26607 * @param {number} [step=1] The value to increment or decrement by. 26608 * @returns {Array} Returns the range of numbers. 26609 * @see _.inRange, _.range 26610 * @example 26611 * 26612 * _.rangeRight(4); 26613 * // => [3, 2, 1, 0] 26614 * 26615 * _.rangeRight(-4); 26616 * // => [-3, -2, -1, 0] 26617 * 26618 * _.rangeRight(1, 5); 26619 * // => [4, 3, 2, 1] 26620 * 26621 * _.rangeRight(0, 20, 5); 26622 * // => [15, 10, 5, 0] 26623 * 26624 * _.rangeRight(0, -4, -1); 26625 * // => [-3, -2, -1, 0] 26626 * 26627 * _.rangeRight(1, 4, 0); 26628 * // => [1, 1, 1] 26629 * 26630 * _.rangeRight(0); 26631 * // => [] 26632 */ 26633 var rangeRight = createRange(true); 26634 26635 /** 26636 * This method returns a new empty array. 26637 * 26638 * @static 26639 * @memberOf _ 26640 * @since 4.13.0 26641 * @category Util 26642 * @returns {Array} Returns the new empty array. 26643 * @example 26644 * 26645 * var arrays = _.times(2, _.stubArray); 26646 * 26647 * console.log(arrays); 26648 * // => [[], []] 26649 * 26650 * console.log(arrays[0] === arrays[1]); 26651 * // => false 26652 */ 26653 function stubArray() { 26654 return []; 26655 } 26656 26657 /** 26658 * This method returns `false`. 26659 * 26660 * @static 26661 * @memberOf _ 26662 * @since 4.13.0 26663 * @category Util 26664 * @returns {boolean} Returns `false`. 26665 * @example 26666 * 26667 * _.times(2, _.stubFalse); 26668 * // => [false, false] 26669 */ 26670 function stubFalse() { 26671 return false; 26672 } 26673 26674 /** 26675 * This method returns a new empty object. 26676 * 26677 * @static 26678 * @memberOf _ 26679 * @since 4.13.0 26680 * @category Util 26681 * @returns {Object} Returns the new empty object. 26682 * @example 26683 * 26684 * var objects = _.times(2, _.stubObject); 26685 * 26686 * console.log(objects); 26687 * // => [{}, {}] 26688 * 26689 * console.log(objects[0] === objects[1]); 26690 * // => false 26691 */ 26692 function stubObject() { 26693 return {}; 26694 } 26695 26696 /** 26697 * This method returns an empty string. 26698 * 26699 * @static 26700 * @memberOf _ 26701 * @since 4.13.0 26702 * @category Util 26703 * @returns {string} Returns the empty string. 26704 * @example 26705 * 26706 * _.times(2, _.stubString); 26707 * // => ['', ''] 26708 */ 26709 function stubString() { 26710 return ''; 26711 } 26712 26713 /** 26714 * This method returns `true`. 26715 * 26716 * @static 26717 * @memberOf _ 26718 * @since 4.13.0 26719 * @category Util 26720 * @returns {boolean} Returns `true`. 26721 * @example 26722 * 26723 * _.times(2, _.stubTrue); 26724 * // => [true, true] 26725 */ 26726 function stubTrue() { 26727 return true; 26728 } 26729 26730 /** 26731 * Invokes the iteratee `n` times, returning an array of the results of 26732 * each invocation. The iteratee is invoked with one argument; (index). 26733 * 26734 * @static 26735 * @since 0.1.0 26736 * @memberOf _ 26737 * @category Util 26738 * @param {number} n The number of times to invoke `iteratee`. 26739 * @param {Function} [iteratee=_.identity] The function invoked per iteration. 26740 * @returns {Array} Returns the array of results. 26741 * @example 26742 * 26743 * _.times(3, String); 26744 * // => ['0', '1', '2'] 26745 * 26746 * _.times(4, _.constant(0)); 26747 * // => [0, 0, 0, 0] 26748 */ 26749 function times(n, iteratee) { 26750 n = toInteger(n); 26751 if (n < 1 || n > MAX_SAFE_INTEGER) { 26752 return []; 26753 } 26754 var index = MAX_ARRAY_LENGTH, 26755 length = nativeMin(n, MAX_ARRAY_LENGTH); 26756 26757 iteratee = getIteratee(iteratee); 26758 n -= MAX_ARRAY_LENGTH; 26759 26760 var result = baseTimes(length, iteratee); 26761 while (++index < n) { 26762 iteratee(index); 26763 } 26764 return result; 26765 } 26766 26767 /** 26768 * Converts `value` to a property path array. 26769 * 26770 * @static 26771 * @memberOf _ 26772 * @since 4.0.0 26773 * @category Util 26774 * @param {*} value The value to convert. 26775 * @returns {Array} Returns the new property path array. 26776 * @example 26777 * 26778 * _.toPath('a.b.c'); 26779 * // => ['a', 'b', 'c'] 26780 * 26781 * _.toPath('a[0].b.c'); 26782 * // => ['a', '0', 'b', 'c'] 26783 */ 26784 function toPath(value) { 26785 if (isArray(value)) { 26786 return arrayMap(value, toKey); 26787 } 26788 return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value))); 26789 } 26790 26791 /** 26792 * Generates a unique ID. If `prefix` is given, the ID is appended to it. 26793 * 26794 * @static 26795 * @since 0.1.0 26796 * @memberOf _ 26797 * @category Util 26798 * @param {string} [prefix=''] The value to prefix the ID with. 26799 * @returns {string} Returns the unique ID. 26800 * @example 26801 * 26802 * _.uniqueId('contact_'); 26803 * // => 'contact_104' 26804 * 26805 * _.uniqueId(); 26806 * // => '105' 26807 */ 26808 function uniqueId(prefix) { 26809 var id = ++idCounter; 26810 return toString(prefix) + id; 26811 } 26812 26813 /*------------------------------------------------------------------------*/ 26814 26815 /** 26816 * Adds two numbers. 26817 * 26818 * @static 26819 * @memberOf _ 26820 * @since 3.4.0 26821 * @category Math 26822 * @param {number} augend The first number in an addition. 26823 * @param {number} addend The second number in an addition. 26824 * @returns {number} Returns the total. 26825 * @example 26826 * 26827 * _.add(6, 4); 26828 * // => 10 26829 */ 26830 var add = createMathOperation(function(augend, addend) { 26831 return augend + addend; 26832 }, 0); 26833 26834 /** 26835 * Computes `number` rounded up to `precision`. 26836 * 26837 * @static 26838 * @memberOf _ 26839 * @since 3.10.0 26840 * @category Math 26841 * @param {number} number The number to round up. 26842 * @param {number} [precision=0] The precision to round up to. 26843 * @returns {number} Returns the rounded up number. 26844 * @example 26845 * 26846 * _.ceil(4.006); 26847 * // => 5 26848 * 26849 * _.ceil(6.004, 2); 26850 * // => 6.01 26851 * 26852 * _.ceil(6040, -2); 26853 * // => 6100 26854 */ 26855 var ceil = createRound('ceil'); 26856 26857 /** 26858 * Divide two numbers. 26859 * 26860 * @static 26861 * @memberOf _ 26862 * @since 4.7.0 26863 * @category Math 26864 * @param {number} dividend The first number in a division. 26865 * @param {number} divisor The second number in a division. 26866 * @returns {number} Returns the quotient. 26867 * @example 26868 * 26869 * _.divide(6, 4); 26870 * // => 1.5 26871 */ 26872 var divide = createMathOperation(function(dividend, divisor) { 26873 return dividend / divisor; 26874 }, 1); 26875 26876 /** 26877 * Computes `number` rounded down to `precision`. 26878 * 26879 * @static 26880 * @memberOf _ 26881 * @since 3.10.0 26882 * @category Math 26883 * @param {number} number The number to round down. 26884 * @param {number} [precision=0] The precision to round down to. 26885 * @returns {number} Returns the rounded down number. 26886 * @example 26887 * 26888 * _.floor(4.006); 26889 * // => 4 26890 * 26891 * _.floor(0.046, 2); 26892 * // => 0.04 26893 * 26894 * _.floor(4060, -2); 26895 * // => 4000 26896 */ 26897 var floor = createRound('floor'); 26898 26899 /** 26900 * Computes the maximum value of `array`. If `array` is empty or falsey, 26901 * `undefined` is returned. 26902 * 26903 * @static 26904 * @since 0.1.0 26905 * @memberOf _ 26906 * @category Math 26907 * @param {Array} array The array to iterate over. 26908 * @returns {*} Returns the maximum value. 26909 * @example 26910 * 26911 * _.max([4, 2, 8, 6]); 26912 * // => 8 26913 * 26914 * _.max([]); 26915 * // => undefined 26916 */ 26917 function max(array) { 26918 return (array && array.length) 26919 ? baseExtremum(array, identity, baseGt) 26920 : undefined; 26921 } 26922 26923 /** 26924 * This method is like `_.max` except that it accepts `iteratee` which is 26925 * invoked for each element in `array` to generate the criterion by which 26926 * the value is ranked. The iteratee is invoked with one argument: (value). 26927 * 26928 * @static 26929 * @memberOf _ 26930 * @since 4.0.0 26931 * @category Math 26932 * @param {Array} array The array to iterate over. 26933 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. 26934 * @returns {*} Returns the maximum value. 26935 * @example 26936 * 26937 * var objects = [{ 'n': 1 }, { 'n': 2 }]; 26938 * 26939 * _.maxBy(objects, function(o) { return o.n; }); 26940 * // => { 'n': 2 } 26941 * 26942 * // The `_.property` iteratee shorthand. 26943 * _.maxBy(objects, 'n'); 26944 * // => { 'n': 2 } 26945 */ 26946 function maxBy(array, iteratee) { 26947 return (array && array.length) 26948 ? baseExtremum(array, getIteratee(iteratee, 2), baseGt) 26949 : undefined; 26950 } 26951 26952 /** 26953 * Computes the mean of the values in `array`. 26954 * 26955 * @static 26956 * @memberOf _ 26957 * @since 4.0.0 26958 * @category Math 26959 * @param {Array} array The array to iterate over. 26960 * @returns {number} Returns the mean. 26961 * @example 26962 * 26963 * _.mean([4, 2, 8, 6]); 26964 * // => 5 26965 */ 26966 function mean(array) { 26967 return baseMean(array, identity); 26968 } 26969 26970 /** 26971 * This method is like `_.mean` except that it accepts `iteratee` which is 26972 * invoked for each element in `array` to generate the value to be averaged. 26973 * The iteratee is invoked with one argument: (value). 26974 * 26975 * @static 26976 * @memberOf _ 26977 * @since 4.7.0 26978 * @category Math 26979 * @param {Array} array The array to iterate over. 26980 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. 26981 * @returns {number} Returns the mean. 26982 * @example 26983 * 26984 * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }]; 26985 * 26986 * _.meanBy(objects, function(o) { return o.n; }); 26987 * // => 5 26988 * 26989 * // The `_.property` iteratee shorthand. 26990 * _.meanBy(objects, 'n'); 26991 * // => 5 26992 */ 26993 function meanBy(array, iteratee) { 26994 return baseMean(array, getIteratee(iteratee, 2)); 26995 } 26996 26997 /** 26998 * Computes the minimum value of `array`. If `array` is empty or falsey, 26999 * `undefined` is returned. 27000 * 27001 * @static 27002 * @since 0.1.0 27003 * @memberOf _ 27004 * @category Math 27005 * @param {Array} array The array to iterate over. 27006 * @returns {*} Returns the minimum value. 27007 * @example 27008 * 27009 * _.min([4, 2, 8, 6]); 27010 * // => 2 27011 * 27012 * _.min([]); 27013 * // => undefined 27014 */ 27015 function min(array) { 27016 return (array && array.length) 27017 ? baseExtremum(array, identity, baseLt) 27018 : undefined; 27019 } 27020 27021 /** 27022 * This method is like `_.min` except that it accepts `iteratee` which is 27023 * invoked for each element in `array` to generate the criterion by which 27024 * the value is ranked. The iteratee is invoked with one argument: (value). 27025 * 27026 * @static 27027 * @memberOf _ 27028 * @since 4.0.0 27029 * @category Math 27030 * @param {Array} array The array to iterate over. 27031 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. 27032 * @returns {*} Returns the minimum value. 27033 * @example 27034 * 27035 * var objects = [{ 'n': 1 }, { 'n': 2 }]; 27036 * 27037 * _.minBy(objects, function(o) { return o.n; }); 27038 * // => { 'n': 1 } 27039 * 27040 * // The `_.property` iteratee shorthand. 27041 * _.minBy(objects, 'n'); 27042 * // => { 'n': 1 } 27043 */ 27044 function minBy(array, iteratee) { 27045 return (array && array.length) 27046 ? baseExtremum(array, getIteratee(iteratee, 2), baseLt) 27047 : undefined; 27048 } 27049 27050 /** 27051 * Multiply two numbers. 27052 * 27053 * @static 27054 * @memberOf _ 27055 * @since 4.7.0 27056 * @category Math 27057 * @param {number} multiplier The first number in a multiplication. 27058 * @param {number} multiplicand The second number in a multiplication. 27059 * @returns {number} Returns the product. 27060 * @example 27061 * 27062 * _.multiply(6, 4); 27063 * // => 24 27064 */ 27065 var multiply = createMathOperation(function(multiplier, multiplicand) { 27066 return multiplier * multiplicand; 27067 }, 1); 27068 27069 /** 27070 * Computes `number` rounded to `precision`. 27071 * 27072 * @static 27073 * @memberOf _ 27074 * @since 3.10.0 27075 * @category Math 27076 * @param {number} number The number to round. 27077 * @param {number} [precision=0] The precision to round to. 27078 * @returns {number} Returns the rounded number. 27079 * @example 27080 * 27081 * _.round(4.006); 27082 * // => 4 27083 * 27084 * _.round(4.006, 2); 27085 * // => 4.01 27086 * 27087 * _.round(4060, -2); 27088 * // => 4100 27089 */ 27090 var round = createRound('round'); 27091 27092 /** 27093 * Subtract two numbers. 27094 * 27095 * @static 27096 * @memberOf _ 27097 * @since 4.0.0 27098 * @category Math 27099 * @param {number} minuend The first number in a subtraction. 27100 * @param {number} subtrahend The second number in a subtraction. 27101 * @returns {number} Returns the difference. 27102 * @example 27103 * 27104 * _.subtract(6, 4); 27105 * // => 2 27106 */ 27107 var subtract = createMathOperation(function(minuend, subtrahend) { 27108 return minuend - subtrahend; 27109 }, 0); 27110 27111 /** 27112 * Computes the sum of the values in `array`. 27113 * 27114 * @static 27115 * @memberOf _ 27116 * @since 3.4.0 27117 * @category Math 27118 * @param {Array} array The array to iterate over. 27119 * @returns {number} Returns the sum. 27120 * @example 27121 * 27122 * _.sum([4, 2, 8, 6]); 27123 * // => 20 27124 */ 27125 function sum(array) { 27126 return (array && array.length) 27127 ? baseSum(array, identity) 27128 : 0; 27129 } 27130 27131 /** 27132 * This method is like `_.sum` except that it accepts `iteratee` which is 27133 * invoked for each element in `array` to generate the value to be summed. 27134 * The iteratee is invoked with one argument: (value). 27135 * 27136 * @static 27137 * @memberOf _ 27138 * @since 4.0.0 27139 * @category Math 27140 * @param {Array} array The array to iterate over. 27141 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. 27142 * @returns {number} Returns the sum. 27143 * @example 27144 * 27145 * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }]; 27146 * 27147 * _.sumBy(objects, function(o) { return o.n; }); 27148 * // => 20 27149 * 27150 * // The `_.property` iteratee shorthand. 27151 * _.sumBy(objects, 'n'); 27152 * // => 20 27153 */ 27154 function sumBy(array, iteratee) { 27155 return (array && array.length) 27156 ? baseSum(array, getIteratee(iteratee, 2)) 27157 : 0; 27158 } 27159 27160 /*------------------------------------------------------------------------*/ 27161 27162 // Add methods that return wrapped values in chain sequences. 27163 lodash.after = after; 27164 lodash.ary = ary; 27165 lodash.assign = assign; 27166 lodash.assignIn = assignIn; 27167 lodash.assignInWith = assignInWith; 27168 lodash.assignWith = assignWith; 27169 lodash.at = at; 27170 lodash.before = before; 27171 lodash.bind = bind; 27172 lodash.bindAll = bindAll; 27173 lodash.bindKey = bindKey; 27174 lodash.castArray = castArray; 27175 lodash.chain = chain; 27176 lodash.chunk = chunk; 27177 lodash.compact = compact; 27178 lodash.concat = concat; 27179 lodash.cond = cond; 27180 lodash.conforms = conforms; 27181 lodash.constant = constant; 27182 lodash.countBy = countBy; 27183 lodash.create = create; 27184 lodash.curry = curry; 27185 lodash.curryRight = curryRight; 27186 lodash.debounce = debounce; 27187 lodash.defaults = defaults; 27188 lodash.defaultsDeep = defaultsDeep; 27189 lodash.defer = defer; 27190 lodash.delay = delay; 27191 lodash.difference = difference; 27192 lodash.differenceBy = differenceBy; 27193 lodash.differenceWith = differenceWith; 27194 lodash.drop = drop; 27195 lodash.dropRight = dropRight; 27196 lodash.dropRightWhile = dropRightWhile; 27197 lodash.dropWhile = dropWhile; 27198 lodash.fill = fill; 27199 lodash.filter = filter; 27200 lodash.flatMap = flatMap; 27201 lodash.flatMapDeep = flatMapDeep; 27202 lodash.flatMapDepth = flatMapDepth; 27203 lodash.flatten = flatten; 27204 lodash.flattenDeep = flattenDeep; 27205 lodash.flattenDepth = flattenDepth; 27206 lodash.flip = flip; 27207 lodash.flow = flow; 27208 lodash.flowRight = flowRight; 27209 lodash.fromPairs = fromPairs; 27210 lodash.functions = functions; 27211 lodash.functionsIn = functionsIn; 27212 lodash.groupBy = groupBy; 27213 lodash.initial = initial; 27214 lodash.intersection = intersection; 27215 lodash.intersectionBy = intersectionBy; 27216 lodash.intersectionWith = intersectionWith; 27217 lodash.invert = invert; 27218 lodash.invertBy = invertBy; 27219 lodash.invokeMap = invokeMap; 27220 lodash.iteratee = iteratee; 27221 lodash.keyBy = keyBy; 27222 lodash.keys = keys; 27223 lodash.keysIn = keysIn; 27224 lodash.map = map; 27225 lodash.mapKeys = mapKeys; 27226 lodash.mapValues = mapValues; 27227 lodash.matches = matches; 27228 lodash.matchesProperty = matchesProperty; 27229 lodash.memoize = memoize; 27230 lodash.merge = merge; 27231 lodash.mergeWith = mergeWith; 27232 lodash.method = method; 27233 lodash.methodOf = methodOf; 27234 lodash.mixin = mixin; 27235 lodash.negate = negate; 27236 lodash.nthArg = nthArg; 27237 lodash.omit = omit; 27238 lodash.omitBy = omitBy; 27239 lodash.once = once; 27240 lodash.orderBy = orderBy; 27241 lodash.over = over; 27242 lodash.overArgs = overArgs; 27243 lodash.overEvery = overEvery; 27244 lodash.overSome = overSome; 27245 lodash.partial = partial; 27246 lodash.partialRight = partialRight; 27247 lodash.partition = partition; 27248 lodash.pick = pick; 27249 lodash.pickBy = pickBy; 27250 lodash.property = property; 27251 lodash.propertyOf = propertyOf; 27252 lodash.pull = pull; 27253 lodash.pullAll = pullAll; 27254 lodash.pullAllBy = pullAllBy; 27255 lodash.pullAllWith = pullAllWith; 27256 lodash.pullAt = pullAt; 27257 lodash.range = range; 27258 lodash.rangeRight = rangeRight; 27259 lodash.rearg = rearg; 27260 lodash.reject = reject; 27261 lodash.remove = remove; 27262 lodash.rest = rest; 27263 lodash.reverse = reverse; 27264 lodash.sampleSize = sampleSize; 27265 lodash.set = set; 27266 lodash.setWith = setWith; 27267 lodash.shuffle = shuffle; 27268 lodash.slice = slice; 27269 lodash.sortBy = sortBy; 27270 lodash.sortedUniq = sortedUniq; 27271 lodash.sortedUniqBy = sortedUniqBy; 27272 lodash.split = split; 27273 lodash.spread = spread; 27274 lodash.tail = tail; 27275 lodash.take = take; 27276 lodash.takeRight = takeRight; 27277 lodash.takeRightWhile = takeRightWhile; 27278 lodash.takeWhile = takeWhile; 27279 lodash.tap = tap; 27280 lodash.throttle = throttle; 27281 lodash.thru = thru; 27282 lodash.toArray = toArray; 27283 lodash.toPairs = toPairs; 27284 lodash.toPairsIn = toPairsIn; 27285 lodash.toPath = toPath; 27286 lodash.toPlainObject = toPlainObject; 27287 lodash.transform = transform; 27288 lodash.unary = unary; 27289 lodash.union = union; 27290 lodash.unionBy = unionBy; 27291 lodash.unionWith = unionWith; 27292 lodash.uniq = uniq; 27293 lodash.uniqBy = uniqBy; 27294 lodash.uniqWith = uniqWith; 27295 lodash.unset = unset; 27296 lodash.unzip = unzip; 27297 lodash.unzipWith = unzipWith; 27298 lodash.update = update; 27299 lodash.updateWith = updateWith; 27300 lodash.values = values; 27301 lodash.valuesIn = valuesIn; 27302 lodash.without = without; 27303 lodash.words = words; 27304 lodash.wrap = wrap; 27305 lodash.xor = xor; 27306 lodash.xorBy = xorBy; 27307 lodash.xorWith = xorWith; 27308 lodash.zip = zip; 27309 lodash.zipObject = zipObject; 27310 lodash.zipObjectDeep = zipObjectDeep; 27311 lodash.zipWith = zipWith; 27312 27313 // Add aliases. 27314 lodash.entries = toPairs; 27315 lodash.entriesIn = toPairsIn; 27316 lodash.extend = assignIn; 27317 lodash.extendWith = assignInWith; 27318 27319 // Add methods to `lodash.prototype`. 27320 mixin(lodash, lodash); 27321 27322 /*------------------------------------------------------------------------*/ 27323 27324 // Add methods that return unwrapped values in chain sequences. 27325 lodash.add = add; 27326 lodash.attempt = attempt; 27327 lodash.camelCase = camelCase; 27328 lodash.capitalize = capitalize; 27329 lodash.ceil = ceil; 27330 lodash.clamp = clamp; 27331 lodash.clone = clone; 27332 lodash.cloneDeep = cloneDeep; 27333 lodash.cloneDeepWith = cloneDeepWith; 27334 lodash.cloneWith = cloneWith; 27335 lodash.conformsTo = conformsTo; 27336 lodash.deburr = deburr; 27337 lodash.defaultTo = defaultTo; 27338 lodash.divide = divide; 27339 lodash.endsWith = endsWith; 27340 lodash.eq = eq; 27341 lodash.escape = escape; 27342 lodash.escapeRegExp = escapeRegExp; 27343 lodash.every = every; 27344 lodash.find = find; 27345 lodash.findIndex = findIndex; 27346 lodash.findKey = findKey; 27347 lodash.findLast = findLast; 27348 lodash.findLastIndex = findLastIndex; 27349 lodash.findLastKey = findLastKey; 27350 lodash.floor = floor; 27351 lodash.forEach = forEach; 27352 lodash.forEachRight = forEachRight; 27353 lodash.forIn = forIn; 27354 lodash.forInRight = forInRight; 27355 lodash.forOwn = forOwn; 27356 lodash.forOwnRight = forOwnRight; 27357 lodash.get = get; 27358 lodash.gt = gt; 27359 lodash.gte = gte; 27360 lodash.has = has; 27361 lodash.hasIn = hasIn; 27362 lodash.head = head; 27363 lodash.identity = identity; 27364 lodash.includes = includes; 27365 lodash.indexOf = indexOf; 27366 lodash.inRange = inRange; 27367 lodash.invoke = invoke; 27368 lodash.isArguments = isArguments; 27369 lodash.isArray = isArray; 27370 lodash.isArrayBuffer = isArrayBuffer; 27371 lodash.isArrayLike = isArrayLike; 27372 lodash.isArrayLikeObject = isArrayLikeObject; 27373 lodash.isBoolean = isBoolean; 27374 lodash.isBuffer = isBuffer; 27375 lodash.isDate = isDate; 27376 lodash.isElement = isElement; 27377 lodash.isEmpty = isEmpty; 27378 lodash.isEqual = isEqual; 27379 lodash.isEqualWith = isEqualWith; 27380 lodash.isError = isError; 27381 lodash.isFinite = isFinite; 27382 lodash.isFunction = isFunction; 27383 lodash.isInteger = isInteger; 27384 lodash.isLength = isLength; 27385 lodash.isMap = isMap; 27386 lodash.isMatch = isMatch; 27387 lodash.isMatchWith = isMatchWith; 27388 lodash.isNaN = isNaN; 27389 lodash.isNative = isNative; 27390 lodash.isNil = isNil; 27391 lodash.isNull = isNull; 27392 lodash.isNumber = isNumber; 27393 lodash.isObject = isObject; 27394 lodash.isObjectLike = isObjectLike; 27395 lodash.isPlainObject = isPlainObject; 27396 lodash.isRegExp = isRegExp; 27397 lodash.isSafeInteger = isSafeInteger; 27398 lodash.isSet = isSet; 27399 lodash.isString = isString; 27400 lodash.isSymbol = isSymbol; 27401 lodash.isTypedArray = isTypedArray; 27402 lodash.isUndefined = isUndefined; 27403 lodash.isWeakMap = isWeakMap; 27404 lodash.isWeakSet = isWeakSet; 27405 lodash.join = join; 27406 lodash.kebabCase = kebabCase; 27407 lodash.last = last; 27408 lodash.lastIndexOf = lastIndexOf; 27409 lodash.lowerCase = lowerCase; 27410 lodash.lowerFirst = lowerFirst; 27411 lodash.lt = lt; 27412 lodash.lte = lte; 27413 lodash.max = max; 27414 lodash.maxBy = maxBy; 27415 lodash.mean = mean; 27416 lodash.meanBy = meanBy; 27417 lodash.min = min; 27418 lodash.minBy = minBy; 27419 lodash.stubArray = stubArray; 27420 lodash.stubFalse = stubFalse; 27421 lodash.stubObject = stubObject; 27422 lodash.stubString = stubString; 27423 lodash.stubTrue = stubTrue; 27424 lodash.multiply = multiply; 27425 lodash.nth = nth; 27426 lodash.noConflict = noConflict; 27427 lodash.noop = noop; 27428 lodash.now = now; 27429 lodash.pad = pad; 27430 lodash.padEnd = padEnd; 27431 lodash.padStart = padStart; 27432 lodash.parseInt = parseInt; 27433 lodash.random = random; 27434 lodash.reduce = reduce; 27435 lodash.reduceRight = reduceRight; 27436 lodash.repeat = repeat; 27437 lodash.replace = replace; 27438 lodash.result = result; 27439 lodash.round = round; 27440 lodash.runInContext = runInContext; 27441 lodash.sample = sample; 27442 lodash.size = size; 27443 lodash.snakeCase = snakeCase; 27444 lodash.some = some; 27445 lodash.sortedIndex = sortedIndex; 27446 lodash.sortedIndexBy = sortedIndexBy; 27447 lodash.sortedIndexOf = sortedIndexOf; 27448 lodash.sortedLastIndex = sortedLastIndex; 27449 lodash.sortedLastIndexBy = sortedLastIndexBy; 27450 lodash.sortedLastIndexOf = sortedLastIndexOf; 27451 lodash.startCase = startCase; 27452 lodash.startsWith = startsWith; 27453 lodash.subtract = subtract; 27454 lodash.sum = sum; 27455 lodash.sumBy = sumBy; 27456 lodash.template = template; 27457 lodash.times = times; 27458 lodash.toFinite = toFinite; 27459 lodash.toInteger = toInteger; 27460 lodash.toLength = toLength; 27461 lodash.toLower = toLower; 27462 lodash.toNumber = toNumber; 27463 lodash.toSafeInteger = toSafeInteger; 27464 lodash.toString = toString; 27465 lodash.toUpper = toUpper; 27466 lodash.trim = trim; 27467 lodash.trimEnd = trimEnd; 27468 lodash.trimStart = trimStart; 27469 lodash.truncate = truncate; 27470 lodash.unescape = unescape; 27471 lodash.uniqueId = uniqueId; 27472 lodash.upperCase = upperCase; 27473 lodash.upperFirst = upperFirst; 27474 27475 // Add aliases. 27476 lodash.each = forEach; 27477 lodash.eachRight = forEachRight; 27478 lodash.first = head; 27479 27480 mixin(lodash, (function() { 27481 var source = {}; 27482 baseForOwn(lodash, function(func, methodName) { 27483 if (!hasOwnProperty.call(lodash.prototype, methodName)) { 27484 source[methodName] = func; 27485 } 27486 }); 27487 return source; 27488 }()), { 'chain': false }); 27489 27490 /*------------------------------------------------------------------------*/ 27491 27492 /** 27493 * The semantic version number. 27494 * 27495 * @static 27496 * @memberOf _ 27497 * @type {string} 27498 */ 27499 lodash.VERSION = VERSION; 27500 27501 // Assign default placeholders. 27502 arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) { 27503 lodash[methodName].placeholder = lodash; 27504 }); 27505 27506 // Add `LazyWrapper` methods for `_.drop` and `_.take` variants. 27507 arrayEach(['drop', 'take'], function(methodName, index) { 27508 LazyWrapper.prototype[methodName] = function(n) { 27509 n = n === undefined ? 1 : nativeMax(toInteger(n), 0); 27510 27511 var result = (this.__filtered__ && !index) 27512 ? new LazyWrapper(this) 27513 : this.clone(); 27514 27515 if (result.__filtered__) { 27516 result.__takeCount__ = nativeMin(n, result.__takeCount__); 27517 } else { 27518 result.__views__.push({ 27519 'size': nativeMin(n, MAX_ARRAY_LENGTH), 27520 'type': methodName + (result.__dir__ < 0 ? 'Right' : '') 27521 }); 27522 } 27523 return result; 27524 }; 27525 27526 LazyWrapper.prototype[methodName + 'Right'] = function(n) { 27527 return this.reverse()[methodName](n).reverse(); 27528 }; 27529 }); 27530 27531 // Add `LazyWrapper` methods that accept an `iteratee` value. 27532 arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) { 27533 var type = index + 1, 27534 isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG; 27535 27536 LazyWrapper.prototype[methodName] = function(iteratee) { 27537 var result = this.clone(); 27538 result.__iteratees__.push({ 27539 'iteratee': getIteratee(iteratee, 3), 27540 'type': type 27541 }); 27542 result.__filtered__ = result.__filtered__ || isFilter; 27543 return result; 27544 }; 27545 }); 27546 27547 // Add `LazyWrapper` methods for `_.head` and `_.last`. 27548 arrayEach(['head', 'last'], function(methodName, index) { 27549 var takeName = 'take' + (index ? 'Right' : ''); 27550 27551 LazyWrapper.prototype[methodName] = function() { 27552 return this[takeName](1).value()[0]; 27553 }; 27554 }); 27555 27556 // Add `LazyWrapper` methods for `_.initial` and `_.tail`. 27557 arrayEach(['initial', 'tail'], function(methodName, index) { 27558 var dropName = 'drop' + (index ? '' : 'Right'); 27559 27560 LazyWrapper.prototype[methodName] = function() { 27561 return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1); 27562 }; 27563 }); 27564 27565 LazyWrapper.prototype.compact = function() { 27566 return this.filter(identity); 27567 }; 27568 27569 LazyWrapper.prototype.find = function(predicate) { 27570 return this.filter(predicate).head(); 27571 }; 27572 27573 LazyWrapper.prototype.findLast = function(predicate) { 27574 return this.reverse().find(predicate); 27575 }; 27576 27577 LazyWrapper.prototype.invokeMap = baseRest(function(path, args) { 27578 if (typeof path == 'function') { 27579 return new LazyWrapper(this); 27580 } 27581 return this.map(function(value) { 27582 return baseInvoke(value, path, args); 27583 }); 27584 }); 27585 27586 LazyWrapper.prototype.reject = function(predicate) { 27587 return this.filter(negate(getIteratee(predicate))); 27588 }; 27589 27590 LazyWrapper.prototype.slice = function(start, end) { 27591 start = toInteger(start); 27592 27593 var result = this; 27594 if (result.__filtered__ && (start > 0 || end < 0)) { 27595 return new LazyWrapper(result); 27596 } 27597 if (start < 0) { 27598 result = result.takeRight(-start); 27599 } else if (start) { 27600 result = result.drop(start); 27601 } 27602 if (end !== undefined) { 27603 end = toInteger(end); 27604 result = end < 0 ? result.dropRight(-end) : result.take(end - start); 27605 } 27606 return result; 27607 }; 27608 27609 LazyWrapper.prototype.takeRightWhile = function(predicate) { 27610 return this.reverse().takeWhile(predicate).reverse(); 27611 }; 27612 27613 LazyWrapper.prototype.toArray = function() { 27614 return this.take(MAX_ARRAY_LENGTH); 27615 }; 27616 27617 // Add `LazyWrapper` methods to `lodash.prototype`. 27618 baseForOwn(LazyWrapper.prototype, function(func, methodName) { 27619 var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName), 27620 isTaker = /^(?:head|last)$/.test(methodName), 27621 lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName], 27622 retUnwrapped = isTaker || /^find/.test(methodName); 27623 27624 if (!lodashFunc) { 27625 return; 27626 } 27627 lodash.prototype[methodName] = function() { 27628 var value = this.__wrapped__, 27629 args = isTaker ? [1] : arguments, 27630 isLazy = value instanceof LazyWrapper, 27631 iteratee = args[0], 27632 useLazy = isLazy || isArray(value); 27633 27634 var interceptor = function(value) { 27635 var result = lodashFunc.apply(lodash, arrayPush([value], args)); 27636 return (isTaker && chainAll) ? result[0] : result; 27637 }; 27638 27639 if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) { 27640 // Avoid lazy use if the iteratee has a "length" value other than `1`. 27641 isLazy = useLazy = false; 27642 } 27643 var chainAll = this.__chain__, 27644 isHybrid = !!this.__actions__.length, 27645 isUnwrapped = retUnwrapped && !chainAll, 27646 onlyLazy = isLazy && !isHybrid; 27647 27648 if (!retUnwrapped && useLazy) { 27649 value = onlyLazy ? value : new LazyWrapper(this); 27650 var result = func.apply(value, args); 27651 result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined }); 27652 return new LodashWrapper(result, chainAll); 27653 } 27654 if (isUnwrapped && onlyLazy) { 27655 return func.apply(this, args); 27656 } 27657 result = this.thru(interceptor); 27658 return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result; 27659 }; 27660 }); 27661 27662 // Add `Array` methods to `lodash.prototype`. 27663 arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) { 27664 var func = arrayProto[methodName], 27665 chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru', 27666 retUnwrapped = /^(?:pop|shift)$/.test(methodName); 27667 27668 lodash.prototype[methodName] = function() { 27669 var args = arguments; 27670 if (retUnwrapped && !this.__chain__) { 27671 var value = this.value(); 27672 return func.apply(isArray(value) ? value : [], args); 27673 } 27674 return this[chainName](function(value) { 27675 return func.apply(isArray(value) ? value : [], args); 27676 }); 27677 }; 27678 }); 27679 27680 // Map minified method names to their real names. 27681 baseForOwn(LazyWrapper.prototype, function(func, methodName) { 27682 var lodashFunc = lodash[methodName]; 27683 if (lodashFunc) { 27684 var key = lodashFunc.name + ''; 27685 if (!hasOwnProperty.call(realNames, key)) { 27686 realNames[key] = []; 27687 } 27688 realNames[key].push({ 'name': methodName, 'func': lodashFunc }); 27689 } 27690 }); 27691 27692 realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{ 27693 'name': 'wrapper', 27694 'func': undefined 27695 }]; 27696 27697 // Add methods to `LazyWrapper`. 27698 LazyWrapper.prototype.clone = lazyClone; 27699 LazyWrapper.prototype.reverse = lazyReverse; 27700 LazyWrapper.prototype.value = lazyValue; 27701 27702 // Add chain sequence methods to the `lodash` wrapper. 27703 lodash.prototype.at = wrapperAt; 27704 lodash.prototype.chain = wrapperChain; 27705 lodash.prototype.commit = wrapperCommit; 27706 lodash.prototype.next = wrapperNext; 27707 lodash.prototype.plant = wrapperPlant; 27708 lodash.prototype.reverse = wrapperReverse; 27709 lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue; 27710 27711 // Add lazy aliases. 27712 lodash.prototype.first = lodash.prototype.head; 27713 27714 if (symIterator) { 27715 lodash.prototype[symIterator] = wrapperToIterator; 27716 } 27717 return lodash; 27718 }); 27719 27720 /*--------------------------------------------------------------------------*/ 27721 27722 // Export lodash. 27723 var _ = runInContext(); 27724 27725 // Some AMD build optimizers, like r.js, check for condition patterns like: 27726 if (true) { 27727 // Expose Lodash on the global object to prevent errors when Lodash is 27728 // loaded by a script tag in the presence of an AMD loader. 27729 // See http://requirejs.org/docs/errors.html#mismatch for more details. 27730 // Use `_.noConflict` to remove Lodash from the global object. 27731 root._ = _; 27732 27733 // Define as an anonymous module so, through path mapping, it can be 27734 // referenced as the "underscore" module. 27735 !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() { 27736 return _; 27737 }).call(exports, __webpack_require__, exports, module), 27738 __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); 27739 } 27740 // Check for `exports` after `define` in case a build optimizer adds it. 27741 else {} 27742}.call(this)); 27743 27744 27745/***/ }), 27746
27747/***/ "./resources/sass/app.scss": 27748/*!*********************************!*\ 27749 !*** ./resources/sass/app.scss ***! 27750 \*********************************/ 27751/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 27752 27753"use strict"; 27754__webpack_require__.r(__webpack_exports__); 27755// extracted by mini-css-extract-plugin 27756 27757 27758/***/ }), 27759
27760/***/ "./resources/css/app.css": 27761/*!*******************************!*\ 27762 !*** ./resources/css/app.css ***! 27763 \*******************************/ 27764/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 27765 27766"use strict"; 27767__webpack_require__.r(__webpack_exports__); 27768// extracted by mini-css-extract-plugin 27769 27770 27771/***/ }), 27772
vendor: 5,636 bytes, lines 27773-27966
27773/***/ "./node_modules/process/browser.js": 27774/*!*****************************************!*\ 27775 !*** ./node_modules/process/browser.js ***! 27776 \*****************************************/ 27777/***/ ((module) => { 27778 27779// shim for using process in browser 27780var process = module.exports = {}; 27781 27782// cached from whatever global is present so that test runners that stub it 27783// don't break things. But we need to wrap it in a try catch in case it is 27784// wrapped in strict mode code which doesn't define any globals. It's inside a 27785// function because try/catches deoptimize in certain engines. 27786 27787var cachedSetTimeout; 27788var cachedClearTimeout; 27789 27790function defaultSetTimout() { 27791 throw new Error('setTimeout has not been defined'); 27792} 27793function defaultClearTimeout () { 27794 throw new Error('clearTimeout has not been defined'); 27795} 27796(function () { 27797 try { 27798 if (typeof setTimeout === 'function') { 27799 cachedSetTimeout = setTimeout; 27800 } else { 27801 cachedSetTimeout = defaultSetTimout; 27802 } 27803 } catch (e) { 27804 cachedSetTimeout = defaultSetTimout; 27805 } 27806 try { 27807 if (typeof clearTimeout === 'function') { 27808 cachedClearTimeout = clearTimeout; 27809 } else { 27810 cachedClearTimeout = defaultClearTimeout; 27811 } 27812 } catch (e) { 27813 cachedClearTimeout = defaultClearTimeout; 27814 } 27815} ()) 27816function runTimeout(fun) { 27817 if (cachedSetTimeout === setTimeout) { 27818 //normal enviroments in sane situations 27819 return setTimeout(fun, 0); 27820 } 27821 // if setTimeout wasn't available but was latter defined 27822 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { 27823 cachedSetTimeout = setTimeout; 27824 return setTimeout(fun, 0); 27825 } 27826 try { 27827 // when when somebody has screwed with setTimeout but no I.E. maddness 27828 return cachedSetTimeout(fun, 0); 27829 } catch(e){ 27830 try { 27831 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally 27832 return cachedSetTimeout.call(null, fun, 0); 27833 } catch(e){ 27834 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error 27835 return cachedSetTimeout.call(this, fun, 0); 27836 } 27837 } 27838 27839 27840} 27841function runClearTimeout(marker) { 27842 if (cachedClearTimeout === clearTimeout) { 27843 //normal enviroments in sane situations 27844 return clearTimeout(marker); 27845 } 27846 // if clearTimeout wasn't available but was latter defined 27847 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { 27848 cachedClearTimeout = clearTimeout; 27849 return clearTimeout(marker); 27850 } 27851 try { 27852 // when when somebody has screwed with setTimeout but no I.E. maddness 27853 return cachedClearTimeout(marker); 27854 } catch (e){ 27855 try { 27856 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally 27857 return cachedClearTimeout.call(null, marker); 27858 } catch (e){ 27859 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. 27860 // Some versions of I.E. have different rules for clearTimeout vs setTimeout 27861 return cachedClearTimeout.call(this, marker); 27862 } 27863 } 27864 27865 27866 27867} 27868var queue = []; 27869var draining = false; 27870var currentQueue; 27871var queueIndex = -1; 27872 27873function cleanUpNextTick() { 27874 if (!draining || !currentQueue) { 27875 return; 27876 } 27877 draining = false; 27878 if (currentQueue.length) { 27879 queue = currentQueue.concat(queue); 27880 } else { 27881 queueIndex = -1; 27882 } 27883 if (queue.length) { 27884 drainQueue(); 27885 } 27886} 27887 27888function drainQueue() { 27889 if (draining) { 27890 return; 27891 } 27892 var timeout = runTimeout(cleanUpNextTick); 27893 draining = true; 27894 27895 var len = queue.length; 27896 while(len) { 27897 currentQueue = queue; 27898 queue = []; 27899 while (++queueIndex < len) { 27900 if (currentQueue) { 27901 currentQueue[queueIndex].run(); 27902 } 27903 } 27904 queueIndex = -1; 27905 len = queue.length; 27906 } 27907 currentQueue = null; 27908 draining = false; 27909 runClearTimeout(timeout); 27910} 27911 27912process.nextTick = function (fun) { 27913 var args = new Array(arguments.length - 1); 27914 if (arguments.length > 1) { 27915 for (var i = 1; i < arguments.length; i++) { 27916 args[i - 1] = arguments[i]; 27917 } 27918 } 27919 queue.push(new Item(fun, args)); 27920 if (queue.length === 1 && !draining) { 27921 runTimeout(drainQueue); 27922 } 27923}; 27924 27925// v8 likes predictible objects 27926function Item(fun, array) { 27927 this.fun = fun; 27928 this.array = array; 27929} 27930Item.prototype.run = function () { 27931 this.fun.apply(null, this.array); 27932}; 27933process.title = 'browser'; 27934process.browser = true; 27935process.env = {}; 27936process.argv = []; 27937process.version = ''; // empty string to avoid regexp issues 27938process.versions = {}; 27939 27940function noop() {} 27941 27942process.on = noop; 27943process.addListener = noop; 27944process.once = noop; 27945process.off = noop; 27946process.removeListener = noop; 27947process.removeAllListeners = noop; 27948process.emit = noop; 27949process.prependListener = noop; 27950process.prependOnceListener = noop; 27951 27952process.listeners = function (name) { return [] } 27953 27954process.binding = function (name) { 27955 throw new Error('process.binding is not supported'); 27956}; 27957 27958process.cwd = function () { return '/' }; 27959process.chdir = function (dir) { 27960 throw new Error('process.chdir is not supported'); 27961}; 27962process.umask = function() { return 0; }; 27963 27964 27965/***/ }), 27966
27967/***/ "./resources/js/components/ExampleComponent.vue": 27968/*!******************************************************!*\ 27969 !*** ./resources/js/components/ExampleComponent.vue ***! 27970 \******************************************************/ 27971/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 27972 27973"use strict"; 27974__webpack_require__.r(__webpack_exports__); 27975/* harmony export */ __webpack_require__.d(__webpack_exports__, { 27976/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 27977/* harmony export */ }); 27978/* harmony import */ var _ExampleComponent_vue_vue_type_template_id_299e239e___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ExampleComponent.vue?vue&type=template&id=299e239e& */ "./resources/js/components/ExampleComponent.vue?vue&type=template&id=299e239e&"); 27979/* harmony import */ var _ExampleComponent_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ExampleComponent.vue?vue&type=script&lang=js& */ "./resources/js/components/ExampleComponent.vue?vue&type=script&lang=js&"); 27980/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js"); 27981 27982 27983 27984 27985 27986/* normalize component */ 27987; 27988var component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])( 27989 _ExampleComponent_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"], 27990 _ExampleComponent_vue_vue_type_template_id_299e239e___WEBPACK_IMPORTED_MODULE_0__.render, 27991 _ExampleComponent_vue_vue_type_template_id_299e239e___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns, 27992 false, 27993 null, 27994 null, 27995 null 27996 27997) 27998 27999/* hot reload */ 28000if (false) { var api; } 28001component.options.__file = "resources/js/components/ExampleComponent.vue" 28002/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports); 28003 28004/***/ }), 28005
28006/***/ "./resources/js/components/RoleAssignButton.vue": 28007/*!******************************************************!*\ 28008 !*** ./resources/js/components/RoleAssignButton.vue ***! 28009 \******************************************************/ 28010/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 28011 28012"use strict"; 28013__webpack_require__.r(__webpack_exports__); 28014/* harmony export */ __webpack_require__.d(__webpack_exports__, { 28015/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 28016/* harmony export */ }); 28017/* harmony import */ var _RoleAssignButton_vue_vue_type_template_id_3d01b0fc_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./RoleAssignButton.vue?vue&type=template&id=3d01b0fc&scoped=true& */ "./resources/js/components/RoleAssignButton.vue?vue&type=template&id=3d01b0fc&scoped=true&"); 28018/* harmony import */ var _RoleAssignButton_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./RoleAssignButton.vue?vue&type=script&lang=js& */ "./resources/js/components/RoleAssignButton.vue?vue&type=script&lang=js&"); 28019/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js"); 28020 28021 28022 28023 28024 28025/* normalize component */ 28026; 28027var component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])( 28028 _RoleAssignButton_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"], 28029 _RoleAssignButton_vue_vue_type_template_id_3d01b0fc_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render, 28030 _RoleAssignButton_vue_vue_type_template_id_3d01b0fc_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns, 28031 false, 28032 null, 28033 "3d01b0fc", 28034 null 28035 28036) 28037 28038/* hot reload */ 28039if (false) { var api; } 28040component.options.__file = "resources/js/components/RoleAssignButton.vue" 28041/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports); 28042 28043/***/ }), 28044 28045/***/ "./resources/js/components/ExampleComponent.vue?vue&type=script&lang=js&": 28046/*!*******************************************************************************!*\ 28047 !*** ./resources/js/components/ExampleComponent.vue?vue&type=script&lang=js& ***! 28048 \*******************************************************************************/ 28049/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 28050 28051"use strict"; 28052__webpack_require__.r(__webpack_exports__); 28053/* harmony export */ __webpack_require__.d(__webpack_exports__, { 28054/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 28055/* harmony export */ }); 28056/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_0_rules_0_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ExampleComponent_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ExampleComponent.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/ExampleComponent.vue?vue&type=script&lang=js&"); 28057 /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_0_rules_0_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ExampleComponent_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]); 28058 28059/***/ }), 28060 28061/***/ "./resources/js/components/RoleAssignButton.vue?vue&type=script&lang=js&": 28062/*!*******************************************************************************!*\ 28063 !*** ./resources/js/components/RoleAssignButton.vue?vue&type=script&lang=js& ***! 28064 \*******************************************************************************/ 28065/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 28066 28067"use strict"; 28068__webpack_require__.r(__webpack_exports__); 28069/* harmony export */ __webpack_require__.d(__webpack_exports__, { 28070/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 28071/* harmony export */ }); 28072/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_0_rules_0_use_
280720_node_modules_vue_loader_lib_index_js_vue_loader_options_RoleAssignButton_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RoleAssignButton.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/RoleAssignButton.vue?vue&type=script&lang=js&"); 28073 /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_0_rules_0_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_RoleAssignButton_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]); 28074 28075/***/ }), 28076 28077/***/ "./resources/js/components/ExampleComponent.vue?vue&type=template&id=299e239e&": 28078/*!*************************************************************************************!*\ 28079 !*** ./resources/js/components/ExampleComponent.vue?vue&type=template&id=299e239e& ***! 28080 \*************************************************************************************/ 28081/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 28082 28083"use strict"; 28084__webpack_require__.r(__webpack_exports__); 28085/* harmony export */ __webpack_require__.d(__webpack_exports__, { 28086/* harmony export */ "render": () => (/* reexport safe */ _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_ExampleComponent_vue_vue_type_template_id_299e239e___WEBPACK_IMPORTED_MODULE_0__.render), 28087/* harmony export */ "staticRenderFns": () => (/* reexport safe */ _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_ExampleComponent_vue_vue_type_template_id_299e239e___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns) 28088/* harmony export */ }); 28089/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_ExampleComponent_vue_vue_type_template_id_299e239e___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ExampleComponent.vue?vue&type=template&id=299e239e& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/ExampleComponent.vue?vue&type=template&id=299e239e&"); 28090 28091 28092/***/ }), 28093 28094/***/ "./resources/js/components/RoleAssignButton.vue?vue&type=template&id=3d01b0fc&scoped=true&": 28095/*!*************************************************************************************************!*\ 28096 !*** ./resources/js/components/RoleAssignButton.vue?vue&type=template&id=3d01b0fc&scoped=true& ***! 28097 \*************************************************************************************************/ 28098/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 28099 28100"use strict"; 28101__webpack_require__.r(__webpack_exports__); 28102/* harmony export */ __webpack_require__.d(__webpack_exports__, { 28103/* harmony export */ "render": () => (/* reexport safe */ _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_RoleAssignButton_vue_vue_type_template_id_3d01b0fc_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render), 28104/* harmony export */ "staticRenderFns": () => (/* reexport safe */ _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_RoleAssignButton_vue_vue_type_template_id_3d01b0fc_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns) 28105/* harmony export */ }); 28106/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_RoleAssignButton_vue_vue_type_template_id_3d01b0fc_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RoleAssignButton.vue?vue&type=template&id=3d01b0fc&scoped=true& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/RoleAssignButton.vue?vue&type=template&id=3d01b0fc&scoped=true&"); 28107 28108 28109/***/ }), 28110 28111/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/ExampleComponent.vue?vue&type=template&id=299e239e&": 28112/*!****************************************************************************************************************************************************************************************************************************!*\ 28113 !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/ExampleComponent.vue?vue&type=template&id=299e239e& ***! 28114 \****************************************************************************************************************************************************************************************************************************/ 28115/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 28116 28117"use strict"; 28118__webpack_require__.r(__webpack_exports__); 28119/* harmony export */ __webpack_require__.d(__webpack_exports__, { 28120/* harmony export */ "render": () => (/* binding */ render), 28121/* harmony export */ "staticRenderFns": () => (/* binding */ staticRenderFns) 28122/* harmony export */ }); 28123var render = function () { 28124 var _vm = this 28125 var _h = _vm.$createElement 28126 var _c = _vm._self._c || _h 28127 return _vm._m(0) 28128} 28129var staticRenderFns = [ 28130 function () { 28131 var _vm = this 28132 var _h = _vm.$createElement 28133 var _c = _vm._self._c || _h 28134 return _c("div", { staticClass: "container" }, [ 28135 _c("div", { staticClass: "row justify-content-center" }, [ 28136 _c("div", { staticClass: "col-md-8" }, [ 28137 _c("div", { staticClass: "card" }, [ 28138 _c("div", { staticClass: "card-header" }, [ 28139 _vm._v("Example Component"), 28140 ]), 28141 _vm._v(" "), 28142 _c("div", { staticClass: "card-body" }, [ 28143 _vm._v( 28144 "\n I'm an example component.\n " 28145 ), 28146 ]), 28147 ]), 28148 ]), 28149 ]), 28150 ]) 28151 }, 28152] 28153render._withStripped = true 28154 28155 28156 28157/***/ }), 28158 28159/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/RoleAssignButton.vue?vue&type=template&id=3d01b0fc&scoped=true&": 28160/*!****************************************************************************************************************************************************************************************************************************************!*\ 28161 !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/RoleAssignButton.vue?vue&type=template&id=3d01b0fc&scoped=true& ***! 28162 \****************************************************************************************************************************************************************************************************************************************/ 28163/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 28164 28165"use strict"; 28166__webpack_require__.r(__webpack_exports__); 28167/* harmony export */ __webpack_require__.d(__webpack_exports__, { 28168/* harmony export */ "render": () => (/* binding */ render), 28169/* harmony export */ "staticRenderFns": () => (/* binding */ staticRenderFns) 28170/* harmony export */ }); 28171var render = function () { 28172 var _vm = this 28173 var _h = _vm.$createElement 28174 var _c = _vm._self._c || _h 28175 return _c("div", [ 28176 _c("button", { 28177 staticClass: "btn btn-primary", 28178 domProps: { textContent: _vm._s(_vm.buttonText) }, 28179 on: { click: _vm.roleAssignment }, 28180 }), 28181 ]) 28182} 28183var staticRenderFns = [] 28184render._withStripped = true 28185 28186 28187 28188/***/ }), 28189
vendor: 3,365 bytes, lines 28190-28302
28190/***/ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js": 28191/*!********************************************************************!*\ 28192 !*** ./node_modules/vue-loader/lib/runtime/componentNormalizer.js ***! 28193 \********************************************************************/ 28194/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 28195 28196"use strict"; 28197__webpack_require__.r(__webpack_exports__); 28198/* harmony export */ __webpack_require__.d(__webpack_exports__, { 28199/* harmony export */ "default": () => (/* binding */ normalizeComponent) 28200/* harmony export */ }); 28201/* globals __VUE_SSR_CONTEXT__ */ 28202 28203// IMPORTANT: Do NOT use ES2015 features in this file (except for modules). 28204// This module is a runtime utility for cleaner component module output and will 28205// be included in the final webpack user bundle. 28206 28207function normalizeComponent ( 28208 scriptExports, 28209 render, 28210 staticRenderFns, 28211 functionalTemplate, 28212 injectStyles, 28213 scopeId, 28214 moduleIdentifier, /* server only */ 28215 shadowMode /* vue-cli only */ 28216) { 28217 // Vue.extend constructor export interop 28218 var options = typeof scriptExports === 'function' 28219 ? scriptExports.options 28220 : scriptExports 28221 28222 // render functions 28223 if (render) { 28224 options.render = render 28225 options.staticRenderFns = staticRenderFns 28226 options._compiled = true 28227 } 28228 28229 // functional template 28230 if (functionalTemplate) { 28231 options.functional = true 28232 } 28233 28234 // scopedId 28235 if (scopeId) { 28236 options._scopeId = 'data-v-' + scopeId 28237 } 28238 28239 var hook 28240 if (moduleIdentifier) { // server build 28241 hook = function (context) { 28242 // 2.3 injection 28243 context = 28244 context || // cached call 28245 (this.$vnode && this.$vnode.ssrContext) || // stateful 28246 (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional 28247 // 2.2 with runInNewContext: true 28248 if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') { 28249 context = __VUE_SSR_CONTEXT__ 28250 } 28251 // inject component styles 28252 if (injectStyles) { 28253 injectStyles.call(this, context) 28254 } 28255 // register component module identifier for async chunk inferrence 28256 if (context && context._registeredComponents) { 28257 context._registeredComponents.add(moduleIdentifier) 28258 } 28259 } 28260 // used by ssr in case component is cached and beforeCreate 28261 // never gets called 28262 options._ssrRegister = hook 28263 } else if (injectStyles) { 28264 hook = shadowMode 28265 ? function () { 28266 injectStyles.call( 28267 this, 28268 (options.functional ? this.parent : this).$root.$options.shadowRoot 28269 ) 28270 } 28271 : injectStyles 28272 } 28273 28274 if (hook) { 28275 if (options.functional) { 28276 // for template-only hot-reload because in that case the render fn doesn't 28277 // go through the normalizer 28278 options._injectStyles = hook 28279 // register for functional component in vue file 28280 var originalRender = options.render 28281 options.render = function renderWithStyleInjection (h, context) { 28282 hook.call(context) 28283 return originalRender(h, context) 28284 } 28285 } else { 28286 // inject component registration as beforeCreate hook 28287 var existing = options.beforeCreate 28288 options.beforeCreate = existing 28289 ? [].concat(existing, hook) 28290 : [hook] 28291 } 28292 } 28293 28294 return { 28295 exports: scriptExports, 28296 options: options 28297 } 28298} 28299 28300 28301/***/ }), 28302
vendor: 324,061 bytes, lines 28303-40345
28303/***/ "./node_modules/vue/dist/vue.esm.js": 28304/*!******************************************!*\ 28305 !*** ./node_modules/vue/dist/vue.esm.js ***! 28306 \******************************************/ 28307/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 28308 28309"use strict"; 28310__webpack_require__.r(__webpack_exports__); 28311/* harmony export */ __webpack_require__.d(__webpack_exports__, { 28312/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 28313/* harmony export */ }); 28314/*! 28315 * Vue.js v2.6.14 28316 * (c) 2014-2021 Evan You 28317 * Released under the MIT License. 28318 */ 28319/* */ 28320 28321var emptyObject = Object.freeze({}); 28322 28323// These helpers produce better VM code in JS engines due to their 28324// explicitness and function inlining. 28325function isUndef (v) { 28326 return v === undefined || v === null 28327} 28328 28329function isDef (v) { 28330 return v !== undefined && v !== null 28331} 28332 28333function isTrue (v) { 28334 return v === true 28335} 28336 28337function isFalse (v) { 28338 return v === false 28339} 28340 28341/** 28342 * Check if value is primitive. 28343 */ 28344function isPrimitive (value) { 28345 return ( 28346 typeof value === 'string' || 28347 typeof value === 'number' || 28348 // $flow-disable-line 28349 typeof value === 'symbol' || 28350 typeof value === 'boolean' 28351 ) 28352} 28353 28354/** 28355 * Quick object check - this is primarily used to tell 28356 * Objects from primitive values when we know the value 28357 * is a JSON-compliant type. 28358 */ 28359function isObject (obj) { 28360 return obj !== null && typeof obj === 'object' 28361} 28362 28363/** 28364 * Get the raw type string of a value, e.g., [object Object]. 28365 */ 28366var _toString = Object.prototype.toString; 28367 28368function toRawType (value) { 28369 return _toString.call(value).slice(8, -1) 28370} 28371 28372/** 28373 * Strict object type check. Only returns true 28374 * for plain JavaScript objects. 28375 */ 28376function isPlainObject (obj) { 28377 return _toString.call(obj) === '[object Object]' 28378} 28379 28380function isRegExp (v) { 28381 return _toString.call(v) === '[object RegExp]' 28382} 28383 28384/** 28385 * Check if val is a valid array index. 28386 */ 28387function isValidArrayIndex (val) { 28388 var n = parseFloat(String(val)); 28389 return n >= 0 && Math.floor(n) === n && isFinite(val) 28390} 28391 28392function isPromise (val) { 28393 return ( 28394 isDef(val) && 28395 typeof val.then === 'function' && 28396 typeof val.catch === 'function' 28397 ) 28398} 28399 28400/** 28401 * Convert a value to a string that is actually rendered. 28402 */ 28403function toString (val) { 28404 return val == null 28405 ? '' 28406 : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString) 28407 ? JSON.stringify(val, null, 2) 28408 : String(val) 28409} 28410 28411/** 28412 * Convert an input value to a number for persistence. 28413 * If the conversion fails, return original string. 28414 */ 28415function toNumber (val) { 28416 var n = parseFloat(val); 28417 return isNaN(n) ? val : n 28418} 28419 28420/** 28421 * Make a map and return a function for checking if a key 28422 * is in that map. 28423 */ 28424function makeMap ( 28425 str, 28426 expectsLowerCase 28427) { 28428 var map = Object.create(null); 28429 var list = str.split(','); 28430 for (var i = 0; i < list.length; i++) { 28431 map[list[i]] = true; 28432 } 28433 return expectsLowerCase 28434 ? function (val) { return map[val.toLowerCase()]; } 28435 : function (val) { return map[val]; } 28436} 28437 28438/** 28439 * Check if a tag is a built-in tag. 28440 */ 28441var isBuiltInTag = makeMap('slot,component', true); 28442 28443/** 28444 * Check if an attribute is a reserved attribute. 28445 */ 28446var isReservedAttribute = makeMap('key,ref,slot,slot-scope,is'); 28447 28448/** 28449 * Remove an item from an array. 28450 */ 28451function remove (arr, item) { 28452 if (arr.length) { 28453 var index = arr.indexOf(item); 28454 if (index > -1) { 28455 return arr.splice(index, 1) 28456 } 28457 } 28458} 28459 28460/** 28461 * Check whether an object has the property. 28462 */ 28463var hasOwnProperty = Object.prototype.hasOwnProperty; 28464function hasOwn (obj, key) { 28465 return hasOwnProperty.call(obj, key) 28466} 28467 28468/** 28469 * Create a cached version of a pure function. 28470 */ 28471function cached (fn) { 28472 var cache = Object.create(null); 28473 return (function cachedFn (str) { 28474 var hit = cache[str]; 28475 return hit || (cache[str] = fn(str)) 28476 }) 28477} 28478 28479/** 28480 * Camelize a hyphen-delimited string. 28481 */ 28482var camelizeRE = /-(\w)/g; 28483var camelize = cached(function (str) { 28484 return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; }) 28485}); 28486 28487/** 28488 * Capitalize a string. 28489 */ 28490var capitalize = cached(function (str) { 28491 return str.charAt(0).toUpperCase() + str.slice(1) 28492}); 28493 28494/** 28495 * Hyphenate a camelCase string. 28496 */ 28497var hyphenateRE = /\B([A-Z])/g; 28498var hyphenate = cached(function (str) { 28499 return str.replace(hyphenateRE, '-$1').toLowerCase() 28500}); 28501 28502/** 28503 * Simple bind polyfill for environments that do not support it, 28504 * e.g., PhantomJS 1.x. Technically, we don't need this anymore 28505 * since native bind is now performant enough in most browsers. 28506 * But removing it would mean breaking code that was able to run in 28507 * PhantomJS 1.x, so this must be kept for backward compatibility. 28508 */ 28509 28510/* istanbul ignore next */ 28511function polyfillBind (fn, ctx) { 28512 function boundFn (a) { 28513 var l = arguments.length; 28514 return l 28515 ? l > 1 28516 ? fn.apply(ctx, arguments) 28517 : fn.call(ctx, a) 28518 : fn.call(ctx) 28519 } 28520 28521 boundFn._length = fn.length; 28522 return boundFn 28523} 28524 28525function nativeBind (fn, ctx) { 28526 return fn.bind(ctx) 28527} 28528 28529var bind = Function.prototype.bind 28530 ? nativeBind 28531 : polyfillBind; 28532 28533/** 28534 * Convert an Array-like object to a real Array. 28535 */ 28536function toArray (list, start) { 28537 start = start || 0; 28538 var i = list.length - start; 28539 var ret = new Array(i); 28540 while (i--) { 28541 ret[i] = list[i + start]; 28542 } 28543 return ret 28544} 28545 28546/** 28547 * Mix properties into target object. 28548 */ 28549function extend (to, _from) { 28550 for (var key in _from) { 28551 to[key] = _from[key]; 28552 } 28553 return to 28554} 28555 28556/** 28557 * Merge an Array of Objects into a single Object. 28558 */ 28559function toObject (arr) { 28560 var res = {}; 28561 for (var i = 0; i < arr.length; i++) { 28562 if (arr[i]) { 28563 extend(res, arr[i]); 28564 } 28565 } 28566 return res 28567} 28568 28569/* eslint-disable no-unused-vars */ 28570 28571/** 28572 * Perform no operation. 28573 * Stubbing args to make Flow happy without leaving useless transpiled code 28574 * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/). 28575 */ 28576function noop (a, b, c) {} 28577 28578/** 28579 * Always return false. 28580 */ 28581var no = function (a, b, c) { return false; }; 28582 28583/* eslint-enable no-unused-vars */ 28584 28585/** 28586 * Return the same value. 28587 */ 28588var identity = function (_) { return _; }; 28589 28590/** 28591 * Generate a string containing static keys from compiler modules. 28592 */ 28593function genStaticKeys (modules) { 28594 return modules.reduce(function (keys, m) { 28595 return keys.concat(m.staticKeys || []) 28596 }, []).join(',') 28597} 28598 28599/** 28600 * Check if two values are loosely equal - that is, 28601 * if they are plain objects, do they have the same shape? 28602 */ 28603function looseEqual (a, b) { 28604 if (a === b) { return true } 28605 var isObjectA = isObject(a); 28606 var isObjectB = isObject(b); 28607 if (isObjectA && isObjectB) { 28608 try { 28609 var isArrayA = Array.isArray(a); 28610 var isArrayB = Array.isArray(b); 28611 if (isArrayA && isArrayB) { 28612 return a.length === b.length && a.every(function (e, i) { 28613 return looseEqual(e, b[i]) 28614 }) 28615 } else if (a instanceof Date && b instanceof Date) { 28616 return a.getTime() === b.getTime() 28617 } else if (!isArrayA && !isArrayB) { 28618 var keysA = Object.keys(a); 28619 var keysB = Object.keys(b); 28620 return keysA.length === keysB.length && keysA.every(function (key) { 28621 return looseEqual(a[key], b[key]) 28622 }) 28623 } else { 28624 /* istanbul ignore next */ 28625 return false 28626 } 28627 } catch (e) { 28628 /* istanbul ignore next */ 28629 return false 28630 } 28631 } else if (!isObjectA && !isObjectB) { 28632 return String(a) === String(b) 28633 } else { 28634 return false 28635 } 28636} 28637 28638/** 28639 * Return the first index at which a loosely equal value can be 28640 * found in the array (if value is a plain object, the array must 28641 * contain an object of the same shape), or -1 if it is not present. 28642 */ 28643function looseIndexOf (arr, val) { 28644 for (var i = 0; i < arr.length; i++) { 28645 if (looseEqual(arr[i], val)) { return i } 28646 } 28647 return -1 28648} 28649 28650/** 28651 * Ensure a function is called only once. 28652 */ 28653function once (fn) { 28654 var called = false; 28655 return function () { 28656 if (!called) { 28657 called = true; 28658 fn.apply(this, arguments); 28659 } 28660 } 28661} 28662 28663var SSR_ATTR = 'data-server-rendered'; 28664 28665var ASSET_TYPES = [ 28666 'component', 28667 'directive', 28668 'filter' 28669]; 28670 28671var LIFECYCLE_HOOKS = [ 28672 'beforeCreate', 28673 'created', 28674 'beforeMount', 28675 'mounted', 28676 'beforeUpdate', 28677 'updated', 28678 'beforeDestroy', 28679 'destroyed', 28680 'activated', 28681 'deactivated', 28682 'errorCaptured', 28683 'serverPrefetch' 28684]; 28685 28686/* */ 28687 28688 28689 28690var config = ({ 28691 /** 28692 * Option merge strategies (used in core/util/options) 28693 */ 28694 // $flow-disable-line 28695 optionMergeStrategies: Object.create(null), 28696 28697 /** 28698 * Whether to suppress warnings. 28699 */ 28700 silent: false, 28701 28702 /** 28703 * Show production mode tip message on boot? 28704 */ 28705 productionTip: "development" !== 'production', 28706 28707 /** 28708 * Whether to enable devtools 28709 */ 28710 devtools: "development" !== 'production', 28711 28712 /** 28713 * Whether to record perf 28714 */ 28715 performance: false, 28716 28717 /** 28718 * Error handler for watcher errors 28719 */ 28720 errorHandler: null, 28721 28722 /** 28723 * Warn handler for watcher warns 28724 */ 28725 warnHandler: null, 28726 28727 /** 28728 * Ignore certain custom elements 28729 */ 28730 ignoredElements: [], 28731 28732 /** 28733 * Custom user key aliases for v-on 28734 */ 28735 // $flow-disable-line 28736 keyCodes: Object.create(null), 28737 28738 /** 28739 * Check if a tag is reserved so that it cannot be registered as a 28740 * component. This is platform-dependent and may be overwritten. 28741 */ 28742 isReservedTag: no, 28743 28744 /** 28745 * Check if an attribute is reserved so that it cannot be used as a component 28746 * prop. This is platform-dependent and may be overwritten. 28747 */ 28748 isReservedAttr: no, 28749 28750 /** 28751 * Check if a tag is an unknown element. 28752 * Platform-dependent. 28753 */ 28754 isUnknownElement: no, 28755 28756 /** 28757 * Get the namespace of an element 28758 */ 28759 getTagNamespace: noop, 28760 28761 /** 28762 * Parse the real tag name for the specific platform. 28763 */ 28764 parsePlatformTagName: identity, 28765 28766 /** 28767 * Check if an attribute must be bound using property, e.g. value 28768 * Platform-dependent. 28769 */ 28770 mustUseProp: no, 28771 28772 /** 28773 * Perform updates asynchronously. Intended to be used by Vue Test Utils 28774 * This will significantly reduce performance if set to false. 28775 */ 28776 async: true, 28777 28778 /** 28779 * Exposed for legacy reasons 28780 */ 28781 _lifecycleHooks: LIFECYCLE_HOOKS 28782}); 28783 28784/* */ 28785 28786/** 28787 * unicode letters used for parsing html tags, component names and property paths. 28788 * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname 28789 * skipping \u10000-\uEFFFF due to it freezing up PhantomJS 28790 */ 28791var unicodeRegExp = /a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/; 28792 28793/** 28794 * Check if a string starts with $ or _ 28795 */ 28796function isReserved (str) { 28797 var c = (str + '').charCodeAt(0); 28798 return c === 0x24 || c === 0x5F 28799} 28800 28801/** 28802 * Define a property. 28803 */ 28804function def (obj, key, val, enumerable) { 28805 Object.defineProperty(obj, key, { 28806 value: val, 28807 enumerable: !!enumerable, 28808 writable: true, 28809 configurable: true 28810 }); 28811} 28812 28813/** 28814 * Parse simple path. 28815 */ 28816var bailRE = new RegExp(("[^" + (unicodeRegExp.source) + ".$_\\d]")); 28817function parsePath (path) { 28818 if (bailRE.test(path)) { 28819 return 28820 } 28821 var segments = path.split('.'); 28822 return function (obj) { 28823 for (var i = 0; i < segments.length; i++) { 28824 if (!obj) { return } 28825 obj = obj[segments[i]]; 28826 } 28827 return obj 28828 } 28829} 28830 28831/* */ 28832 28833// can we use __proto__? 28834var hasProto = '__proto__' in {}; 28835 28836// Browser environment sniffing 28837var inBrowser = typeof window !== 'undefined'; 28838var inWeex = typeof WXEnvironment !== 'undefined' && !!WXEnvironment.platform; 28839var weexPlatform = inWeex && WXEnvironment.platform.toLowerCase(); 28840var UA = inBrowser && window.navigator.userAgent.toLowerCase(); 28841var isIE = UA && /msie|trident/.test(UA); 28842var isIE9 = UA && UA.indexOf('msie 9.0') > 0; 28843var isEdge = UA && UA.indexOf('edge/') > 0; 28844var isAndroid = (UA && UA.indexOf('android') > 0) || (weexPlatform === 'android'); 28845var isIOS = (UA && /iphone|ipad|ipod|ios/.test(UA)) || (weexPlatform === 'ios'); 28846var isChrome = UA && /chrome\/\d+/.test(UA) && !isEdge; 28847var isPhantomJS = UA && /phantomjs/.test(UA); 28848var isFF = UA && UA.match(/firefox\/(\d+)/); 28849 28850// Firefox has a "watch" function on Object.prototype... 28851var nativeWatch = ({}).watch; 28852 28853var supportsPassive = false; 28854if (inBrowser) { 28855 try { 28856 var opts = {}; 28857 Object.defineProperty(opts, 'passive', ({ 28858 get: function get () { 28859 /* istanbul ignore next */ 28860 supportsPassive = true; 28861 } 28862 })); // https://github.com/facebook/flow/issues/285 28863 window.addEventListener('test-passive', null, opts); 28864 } catch (e) {} 28865} 28866 28867// this needs to be lazy-evaled because vue may be required before 28868// vue-server-renderer can set VUE_ENV 28869var _isServer; 28870var isServerRendering = function () { 28871 if (_isServer === undefined) { 28872 /* istanbul ignore if */ 28873 if (!inBrowser && !inWeex && typeof __webpack_require__.g !== 'undefined') { 28874 // detect presence of vue-server-renderer and avoid 28875 // Webpack shimming the process 28876 _isServer = __webpack_require__.g['process'] && __webpack_require__.g['process'].env.VUE_ENV === 'server'; 28877 } else { 28878 _isServer = false; 28879 } 28880 } 28881 return _isServer 28882}; 28883 28884// detect devtools 28885var devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__; 28886 28887/* istanbul ignore next */ 28888function isNative (Ctor) { 28889 return typeof Ctor === 'function' && /native code/.test(Ctor.toString()) 28890} 28891 28892var hasSymbol = 28893 typeof Symbol !== 'undefined' && isNative(Symbol) && 28894 typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys); 28895 28896var _Set; 28897/* istanbul ignore if */ // $flow-disable-line 28898if (typeof Set !== 'undefined' && isNative(Set)) { 28899 // use native Set when available. 28900 _Set = Set; 28901} else { 28902 // a non-standard Set polyfill that only works with primitive keys. 28903 _Set = /*@__PURE__*/(function () { 28904 function Set () { 28905 this.set = Object.create(null); 28906 } 28907 Set.prototype.has = function has (key) { 28908 return this.set[key] === true 28909 }; 28910 Set.prototype.add = function add (key) { 28911 this.set[key] = true; 28912 }; 28913 Set.prototype.clear = function clear () { 28914 this.set = Object.create(null); 28915 }; 28916 28917 return Set; 28918 }()); 28919} 28920 28921/* */ 28922 28923var warn = noop; 28924var tip = noop; 28925var generateComponentTrace = (noop); // work around flow check 28926var formatComponentName = (noop); 28927 28928if (true) { 28929 var hasConsole = typeof console !== 'undefined'; 28930 var classifyRE = /(?:^|[-_])(\w)/g; 28931 var classify = function (str) { return str 28932 .replace(classifyRE, function (c) { return c.toUpperCase(); }) 28933 .replace(/[-_]/g, ''); }; 28934 28935 warn = function (msg, vm) { 28936 var trace = vm ? generateComponentTrace(vm) : ''; 28937 28938 if (config.warnHandler) { 28939 config.warnHandler.call(null, msg, vm, trace); 28940 } else if (hasConsole && (!config.silent)) { 28941 console.error(("[Vue warn]: " + msg + trace)); 28942 } 28943 }; 28944 28945 tip = function (msg, vm) { 28946 if (hasConsole && (!config.silent)) { 28947 console.warn("[Vue tip]: " + msg + ( 28948 vm ? generateComponentTrace(vm) : '' 28949 )); 28950 } 28951 }; 28952 28953 formatComponentName = function (vm, includeFile) { 28954 if (vm.$root === vm) { 28955 return '<Root>' 28956 } 28957 var options = typeof vm === 'function' && vm.cid != null 28958 ? vm.options 28959 : vm._isVue 28960 ? vm.$options || vm.constructor.options 28961 : vm; 28962 var name = options.name || options._componentTag; 28963 var file = options.__file; 28964 if (!name && file) { 28965 var match = file.match(/([^/\\]+)\.vue$/); 28966 name = match && match[1]; 28967 } 28968 28969 return ( 28970 (name ? ("<" + (classify(name)) + ">") : "<Anonymous>") + 28971 (file && includeFile !== false ? (" at " + file) : '') 28972 ) 28973 }; 28974 28975 var repeat = function (str, n) { 28976 var res = ''; 28977 while (n) { 28978 if (n % 2 === 1) { res += str; } 28979 if (n > 1) { str += str; } 28980 n >>= 1; 28981 } 28982 return res 28983 }; 28984 28985 generateComponentTrace = function (vm) { 28986 if (vm._isVue && vm.$parent) { 28987 var tree = []; 28988 var currentRecursiveSequence = 0; 28989 while (vm) { 28990 if (tree.length > 0) { 28991 var last = tree[tree.length - 1]; 28992 if (last.constructor === vm.constructor) { 28993 currentRecursiveSequence++; 28994 vm = vm.$parent; 28995 continue 28996 } else if (currentRecursiveSequence > 0) { 28997 tree[tree.length - 1] = [last, currentRecursiveSequence]; 28998 currentRecursiveSequence = 0; 28999 } 29000 } 29001 tree.push(vm); 29002 vm = vm.$parent; 29003 } 29004 return '\n\nfound in\n\n' + tree 29005 .map(function (vm, i) { return ("" + (i === 0 ? '---> ' : repeat(' ', 5 + i * 2)) + (Array.isArray(vm) 29006 ? ((formatComponentName(vm[0])) + "... (" + (vm[1]) + " recursive calls)") 29007 : formatComponentName(vm))); }) 29008 .join('\n') 29009 } else { 29010 return ("\n\n(found in " + (formatComponentName(vm)) + ")") 29011 } 29012 }; 29013} 29014 29015/* */ 29016 29017var uid = 0; 29018 29019/** 29020 * A dep is an observable that can have multiple 29021 * directives subscribing to it. 29022 */ 29023var Dep = function Dep () { 29024 this.id = uid++; 29025 this.subs = []; 29026}; 29027 29028Dep.prototype.addSub = function addSub (sub) { 29029 this.subs.push(sub); 29030}; 29031 29032Dep.prototype.removeSub = function removeSub (sub) { 29033 remove(this.subs, sub); 29034}; 29035 29036Dep.prototype.depend = function depend () { 29037 if (Dep.target) { 29038 Dep.target.addDep(this); 29039 } 29040}; 29041 29042Dep.prototype.notify = function notify () { 29043 // stabilize the subscriber list first 29044 var subs = this.subs.slice(); 29045 if ( true && !config.async) { 29046 // subs aren't sorted in scheduler if not running async 29047 // we need to sort them now to make sure they fire in correct 29048 // order 29049 subs.sort(function (a, b) { return a.id - b.id; }); 29050 } 29051 for (var i = 0, l = subs.length; i < l; i++) { 29052 subs[i].update(); 29053 } 29054}; 29055 29056// The current target watcher being evaluated. 29057// This is globally unique because only one watcher 29058// can be evaluated at a time. 29059Dep.target = null; 29060var targetStack = []; 29061 29062function pushTarget (target) { 29063 targetStack.push(target); 29064 Dep.target = target; 29065} 29066 29067function popTarget () { 29068 targetStack.pop(); 29069 Dep.target = targetStack[targetStack.length - 1]; 29070} 29071 29072/* */ 29073 29074var VNode = function VNode ( 29075 tag, 29076 data, 29077 children, 29078 text, 29079 elm, 29080 context, 29081 componentOptions, 29082 asyncFactory 29083) { 29084 this.tag = tag; 29085 this.data = data; 29086 this.children = children; 29087 this.text = text; 29088 this.elm = elm; 29089 this.ns = undefined; 29090 this.context = context; 29091 this.fnContext = undefined; 29092 this.fnOptions = undefined; 29093 this.fnScopeId = undefined; 29094 this.key = data && data.key; 29095 this.componentOptions = componentOptions; 29096 this.componentInstance = undefined; 29097 this.parent = undefined; 29098 this.raw = false; 29099 this.isStatic = false; 29100 this.isRootInsert = true; 29101 this.isComment = false; 29102 this.isCloned = false; 29103 this.isOnce = false; 29104 this.asyncFactory = asyncFactory; 29105 this.asyncMeta = undefined; 29106 this.isAsyncPlaceholder = false; 29107}; 29108 29109var prototypeAccessors = { child: { configurable: true } }; 29110 29111// DEPRECATED: alias for componentInstance for backwards compat. 29112/* istanbul ignore next */ 29113prototypeAccessors.child.get = function () { 29114 return this.componentInstance 29115}; 29116 29117Object.defineProperties( VNode.prototype, prototypeAccessors ); 29118 29119var createEmptyVNode = function (text) { 29120 if ( text === void 0 ) text = ''; 29121 29122 var node = new VNode(); 29123 node.text = text; 29124 node.isComment = true; 29125 return node 29126}; 29127 29128function createTextVNode (val) { 29129 return new VNode(undefined, undefined, undefined, String(val)) 29130} 29131 29132// optimized shallow clone 29133// used for static nodes and slot nodes because they may be reused across 29134// multiple renders, cloning them avoids errors when DOM manipulations rely 29135// on their elm reference. 29136function cloneVNode (vnode) { 29137 var cloned = new VNode( 29138 vnode.tag, 29139 vnode.data, 29140 // #7975 29141 // clone children array to avoid mutating original in case of cloning 29142 // a child. 29143 vnode.children && vnode.children.slice(), 29144 vnode.text, 29145 vnode.elm, 29146 vnode.context, 29147 vnode.componentOptions, 29148 vnode.asyncFactory 29149 ); 29150 cloned.ns = vnode.ns; 29151 cloned.isStatic = vnode.isStatic; 29152 cloned.key = vnode.key; 29153 cloned.isComment = vnode.isComment; 29154 cloned.fnContext = vnode.fnContext; 29155 cloned.fnOptions = vnode.fnOptions; 29156 cloned.fnScopeId = vnode.fnScopeId; 29157 cloned.asyncMeta = vnode.asyncMeta; 29158 cloned.isCloned = true; 29159 return cloned 29160} 29161 29162/* 29163 * not type checking this file because flow doesn't play well with 29164 * dynamically accessing methods on Array prototype 29165 */ 29166 29167var arrayProto = Array.prototype; 29168var arrayMethods = Object.create(arrayProto); 29169 29170var methodsToPatch = [ 29171 'push', 29172 'pop', 29173 'shift', 29174 'unshift', 29175 'splice', 29176 'sort', 29177 'reverse' 29178]; 29179 29180/** 29181 * Intercept mutating methods and emit events 29182 */ 29183methodsToPatch.forEach(function (method) { 29184 // cache original method 29185 var original = arrayProto[method]; 29186 def(arrayMethods, method, function mutator () { 29187 var args = [], len = arguments.length; 29188 while ( len-- ) args[ len ] = arguments[ len ]; 29189 29190 var result = original.apply(this, args); 29191 var ob = this.__ob__; 29192 var inserted; 29193 switch (method) { 29194 case 'push': 29195 case 'unshift': 29196 inserted = args; 29197 break 29198 case 'splice': 29199 inserted = args.slice(2); 29200 break 29201 } 29202 if (inserted) { ob.observeArray(inserted); } 29203 // notify change 29204 ob.dep.notify(); 29205 return result 29206 }); 29207}); 29208 29209/* */ 29210 29211var arrayKeys = Object.getOwnPropertyNames(arrayMethods); 29212 29213/** 29214 * In some cases we may want to disable observation inside a component's 29215 * update computation. 29216 */ 29217var shouldObserve = true; 29218 29219function toggleObserving (value) { 29220 shouldObserve = value; 29221} 29222 29223/** 29224 * Observer class that is attached to each observed 29225 * object. Once attached, the observer converts the target 29226 * object's property keys into getter/setters that 29227 * collect dependencies and dispatch updates. 29228 */ 29229var Observer = function Observer (value) { 29230 this.value = value; 29231 this.dep = new Dep(); 29232 this.vmCount = 0; 29233 def(value, '__ob__', this); 29234 if (Array.isArray(value)) { 29235 if (hasProto) { 29236 protoAugment(value, arrayMethods); 29237 } else { 29238 copyAugment(value, arrayMethods, arrayKeys); 29239 } 29240 this.observeArray(value); 29241 } else { 29242 this.walk(value); 29243 } 29244}; 29245 29246/** 29247 * Walk through all properties and convert them into 29248 * getter/setters. This method should only be called when 29249 * value type is Object. 29250 */ 29251Observer.prototype.walk = function walk (obj) { 29252 var keys = Object.keys(obj); 29253 for (var i = 0; i < keys.length; i++) { 29254 defineReactive$$1(obj, keys[i]); 29255 } 29256}; 29257 29258/** 29259 * Observe a list of Array items. 29260 */ 29261Observer.prototype.observeArray = function observeArray (items) { 29262 for (var i = 0, l = items.length; i < l; i++) { 29263 observe(items[i]); 29264 } 29265}; 29266 29267// helpers 29268 29269/** 29270 * Augment a target Object or Array by intercepting 29271 * the prototype chain using __proto__ 29272 */ 29273function protoAugment (target, src) { 29274 /* eslint-disable no-proto */ 29275 target.__proto__ = src; 29276 /* eslint-enable no-proto */ 29277} 29278 29279/** 29280 * Augment a target Object or Array by defining 29281 * hidden properties. 29282 */ 29283/* istanbul ignore next */ 29284function copyAugment (target, src, keys) { 29285 for (var i = 0, l = keys.length; i < l; i++) { 29286 var key = keys[i]; 29287 def(target, key, src[key]); 29288 } 29289} 29290 29291/** 29292 * Attempt to create an observer instance for a value, 29293 * returns the new observer if successfully observed, 29294 * or the existing observer if the value already has one. 29295 */ 29296function observe (value, asRootData) { 29297 if (!isObject(value) || value instanceof VNode) { 29298 return 29299 } 29300 var ob; 29301 if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) { 29302 ob = value.__ob__; 29303 } else if ( 29304 shouldObserve && 29305 !isServerRendering() && 29306 (Array.isArray(value) || isPlainObject(value)) && 29307 Object.isExtensible(value) && 29308 !value._isVue 29309 ) { 29310 ob = new Observer(value); 29311 } 29312 if (asRootData && ob) { 29313 ob.vmCount++; 29314 } 29315 return ob 29316} 29317 29318/** 29319 * Define a reactive property on an Object. 29320 */ 29321function defineReactive$$1 ( 29322 obj, 29323 key, 29324 val, 29325 customSetter, 29326 shallow 29327) { 29328 var dep = new Dep(); 29329 29330 var property = Object.getOwnPropertyDescriptor(obj, key); 29331 if (property && property.configurable === false) { 29332 return 29333 } 29334 29335 // cater for pre-defined getter/setters 29336 var getter = property && property.get; 29337 var setter = property && property.set; 29338 if ((!getter || setter) && arguments.length === 2) { 29339 val = obj[key]; 29340 } 29341 29342 var childOb = !shallow && observe(val); 29343 Object.defineProperty(obj, key, { 29344 enumerable: true, 29345 configurable: true, 29346 get: function reactiveGetter () { 29347 var value = getter ? getter.call(obj) : val; 29348 if (Dep.target) { 29349 dep.depend(); 29350 if (childOb) { 29351 childOb.dep.depend(); 29352 if (Array.isArray(value)) { 29353 dependArray(value); 29354 } 29355 } 29356 } 29357 return value 29358 }, 29359 set: function reactiveSetter (newVal) { 29360 var value = getter ? getter.call(obj) : val; 29361 /* eslint-disable no-self-compare */ 29362 if (newVal === value || (newVal !== newVal && value !== value)) { 29363 return 29364 } 29365 /* eslint-enable no-self-compare */ 29366 if ( true && customSetter) { 29367 customSetter(); 29368 } 29369 // #7981: for accessor properties without setter 29370 if (getter && !setter) { return } 29371 if (setter) { 29372 setter.call(obj, newVal); 29373 } else { 29374 val = newVal; 29375 } 29376 childOb = !shallow && observe(newVal); 29377 dep.notify(); 29378 } 29379 }); 29380} 29381 29382/** 29383 * Set a property on an object. Adds the new property and 29384 * triggers change notification if the property doesn't 29385 * already exist. 29386 */ 29387function set (target, key, val) { 29388 if ( true && 29389 (isUndef(target) || isPrimitive(target)) 29390 ) { 29391 warn(("Cannot set reactive property on undefined, null, or primitive value: " + ((target)))); 29392 } 29393 if (Array.isArray(target) && isValidArrayIndex(key)) { 29394 target.length = Math.max(target.length, key); 29395 target.splice(key, 1, val); 29396 return val 29397 } 29398 if (key in target && !(key in Object.prototype)) { 29399 target[key] = val; 29400 return val 29401 } 29402 var ob = (target).__ob__; 29403 if (target._isVue || (ob && ob.vmCount)) { 29404 true && warn( 29405 'Avoid adding reactive properties to a Vue instance or its root $data ' + 29406 'at runtime - declare it upfront in the data option.' 29407 ); 29408 return val 29409 } 29410 if (!ob) { 29411 target[key] = val; 29412 return val 29413 } 29414 defineReactive$$1(ob.value, key, val); 29415 ob.dep.notify(); 29416 return val 29417} 29418 29419/** 29420 * Delete a property and trigger change if necessary. 29421 */ 29422function del (target, key) { 29423 if ( true && 29424 (isUndef(target) || isPrimitive(target)) 29425 ) { 29426 warn(("Cannot delete reactive property on undefined, null, or primitive value: " + ((target)))); 29427 } 29428 if (Array.isArray(target) && isValidArrayIndex(key)) { 29429 target.splice(key, 1); 29430 return 29431 } 29432 var ob = (target).__ob__; 29433 if (target._isVue || (ob && ob.vmCount)) { 29434 true && warn( 29435 'Avoid deleting properties on a Vue instance or its root $data ' + 29436 '- just set it to null.' 29437 ); 29438 return 29439 } 29440 if (!hasOwn(target, key)) { 29441 return 29442 } 29443 delete target[key]; 29444 if (!ob) { 29445 return 29446 } 29447 ob.dep.notify(); 29448} 29449 29450/** 29451 * Collect dependencies on array elements when the array is touched, since 29452 * we cannot intercept array element access like property getters. 29453 */ 29454function dependArray (value) { 29455 for (var e = (void 0), i = 0, l = value.length; i < l; i++) { 29456 e = value[i]; 29457 e && e.__ob__ && e.__ob__.dep.depend(); 29458 if (Array.isArray(e)) { 29459 dependArray(e); 29460 } 29461 } 29462} 29463 29464/* */ 29465 29466/** 29467 * Option overwriting strategies are functions that handle 29468 * how to merge a parent option value and a child option 29469 * value into the final value. 29470 */ 29471var strats = config.optionMergeStrategies; 29472 29473/** 29474 * Options with restrictions 29475 */ 29476if (true) { 29477 strats.el = strats.propsData = function (parent, child, vm, key) { 29478 if (!vm) { 29479 warn( 29480 "option \"" + key + "\" can only be used during instance " + 29481 'creation with the `new` keyword.' 29482 ); 29483 } 29484 return defaultStrat(parent, child) 29485 }; 29486} 29487 29488/** 29489 * Helper that recursively merges two data objects together. 29490 */ 29491function mergeData (to, from) { 29492 if (!from) { return to } 29493 var key, toVal, fromVal; 29494 29495 var keys = hasSymbol 29496 ? Reflect.ownKeys(from) 29497 : Object.keys(from); 29498 29499 for (var i = 0; i < keys.length; i++) { 29500 key = keys[i]; 29501 // in case the object is already observed... 29502 if (key === '__ob__') { continue } 29503 toVal = to[key]; 29504 fromVal = from[key]; 29505 if (!hasOwn(to, key)) { 29506 set(to, key, fromVal); 29507 } else if ( 29508 toVal !== fromVal && 29509 isPlainObject(toVal) && 29510 isPlainObject(fromVal) 29511 ) { 29512 mergeData(toVal, fromVal); 29513 } 29514 } 29515 return to 29516} 29517 29518/** 29519 * Data 29520 */ 29521function mergeDataOrFn ( 29522 parentVal, 29523 childVal, 29524 vm 29525) { 29526 if (!vm) { 29527 // in a Vue.extend merge, both should be functions 29528 if (!childVal) { 29529 return parentVal 29530 } 29531 if (!parentVal) { 29532 return childVal 29533 } 29534 // when parentVal & childVal are both present, 29535 // we need to return a function that returns the 29536 // merged result of both functions... no need to 29537 // check if parentVal is a function here because 29538 // it has to be a function to pass previous merges. 29539 return function mergedDataFn () { 29540 return mergeData( 29541 typeof childVal === 'function' ? childVal.call(this, this) : childVal, 29542 typeof parentVal === 'function' ? parentVal.call(this, this) : parentVal 29543 ) 29544 } 29545 } else { 29546 return function mergedInstanceDataFn () { 29547 // instance merge 29548 var instanceData = typeof childVal === 'function' 29549 ? childVal.call(vm, vm) 29550 : childVal; 29551 var defaultData = typeof parentVal === 'function' 29552 ? parentVal.call(vm, vm) 29553 : parentVal; 29554 if (instanceData) { 29555 return mergeData(instanceData, defaultData) 29556 } else { 29557 return defaultData 29558 } 29559 } 29560 } 29561} 29562 29563strats.data = function ( 29564 parentVal, 29565 childVal, 29566 vm 29567) { 29568 if (!vm) { 29569 if (childVal && typeof childVal !== 'function') { 29570 true && warn( 29571 'The "data" option should be a function ' + 29572 'that returns a per-instance value in component ' + 29573 'definitions.', 29574 vm 29575 ); 29576 29577 return parentVal 29578 } 29579 return mergeDataOrFn(parentVal, childVal) 29580 } 29581 29582 return mergeDataOrFn(parentVal, childVal, vm) 29583}; 29584 29585/** 29586 * Hooks and props are merged as arrays. 29587 */ 29588function mergeHook ( 29589 parentVal, 29590 childVal 29591) { 29592 var res = childVal 29593 ? parentVal 29594 ? parentVal.concat(childVal) 29595 : Array.isArray(childVal) 29596 ? childVal 29597 : [childVal] 29598 : parentVal; 29599 return res 29600 ? dedupeHooks(res) 29601 : res 29602} 29603 29604function dedupeHooks (hooks) { 29605 var res = []; 29606 for (var i = 0; i < hooks.length; i++) { 29607 if (res.indexOf(hooks[i]) === -1) { 29608 res.push(hooks[i]); 29609 } 29610 } 29611 return res 29612} 29613 29614LIFECYCLE_HOOKS.forEach(function (hook) { 29615 strats[hook] = mergeHook; 29616}); 29617 29618/** 29619 * Assets 29620 * 29621 * When a vm is present (instance creation), we need to do 29622 * a three-way merge between constructor options, instance 29623 * options and parent options. 29624 */ 29625function mergeAssets ( 29626 parentVal, 29627 childVal, 29628 vm, 29629 key 29630) { 29631 var res = Object.create(parentVal || null); 29632 if (childVal) { 29633 true && assertObjectType(key, childVal, vm); 29634 return extend(res, childVal) 29635 } else { 29636 return res 29637 } 29638} 29639 29640ASSET_TYPES.forEach(function (type) { 29641 strats[type + 's'] = mergeAssets; 29642}); 29643 29644/** 29645 * Watchers. 29646 * 29647 * Watchers hashes should not overwrite one 29648 * another, so we merge them as arrays. 29649 */ 29650strats.watch = function ( 29651 parentVal, 29652 childVal, 29653 vm, 29654 key 29655) { 29656 // work around Firefox's Object.prototype.watch... 29657 if (parentVal === nativeWatch) { parentVal = undefined; } 29658 if (childVal === nativeWatch) { childVal = undefined; } 29659 /* istanbul ignore if */ 29660 if (!childVal) { return Object.create(parentVal || null) } 29661 if (true) { 29662 assertObjectType(key, childVal, vm); 29663 } 29664 if (!parentVal) { return childVal } 29665 var ret = {}; 29666 extend(ret, parentVal); 29667 for (var key$1 in childVal) { 29668 var parent = ret[key$1]; 29669 var child = childVal[key$1]; 29670 if (parent && !Array.isArray(parent)) { 29671 parent = [parent]; 29672 } 29673 ret[key$1] = parent 29674 ? parent.concat(child) 29675 : Array.isArray(child) ? child : [child]; 29676 } 29677 return ret 29678}; 29679 29680/** 29681 * Other object hashes. 29682 */ 29683strats.props = 29684strats.methods = 29685strats.inject = 29686strats.computed = function ( 29687 parentVal, 29688 childVal, 29689 vm, 29690 key 29691) { 29692 if (childVal && "development" !== 'production') { 29693 assertObjectType(key, childVal, vm); 29694 } 29695 if (!parentVal) { return childVal } 29696 var ret = Object.create(null); 29697 extend(ret, parentVal); 29698 if (childVal) { extend(ret, childVal); } 29699 return ret 29700}; 29701strats.provide = mergeDataOrFn; 29702 29703/** 29704 * Default strategy. 29705 */ 29706var defaultStrat = function (parentVal, childVal) { 29707 return childVal === undefined 29708 ? parentVal 29709 : childVal 29710}; 29711 29712/** 29713 * Validate component names 29714 */ 29715function checkComponents (options) { 29716 for (var key in options.components) { 29717 validateComponentName(key); 29718 } 29719} 29720 29721function validateComponentName (name) { 29722 if (!new RegExp(("^[a-zA-Z][\\-\\.0-9_" + (unicodeRegExp.source) + "]*$")).test(name)) { 29723 warn( 29724 'Invalid component name: "' + name + '". Component names ' + 29725 'should conform to valid custom element name in html5 specification.' 29726 ); 29727 } 29728 if (isBuiltInTag(name) || config.isReservedTag(name)) { 29729 warn( 29730 'Do not use built-in or reserved HTML elements as component ' + 29731 'id: ' + name 29732 ); 29733 } 29734} 29735 29736/** 29737 * Ensure all props option syntax are normalized into the 29738 * Object-based format. 29739 */ 29740function normalizeProps (options, vm) { 29741 var props = options.props; 29742 if (!props) { return } 29743 var res = {}; 29744 var i, val, name; 29745 if (Array.isArray(props)) { 29746 i = props.length; 29747 while (i--) { 29748 val = props[i]; 29749 if (typeof val === 'string') { 29750 name = camelize(val); 29751 res[name] = { type: null }; 29752 } else if (true) { 29753 warn('props must be strings when using array syntax.'); 29754 } 29755 } 29756 } else if (isPlainObject(props)) { 29757 for (var key in props) { 29758 val = props[key]; 29759 name = camelize(key); 29760 res[name] = isPlainObject(val) 29761 ? val 29762 : { type: val }; 29763 } 29764 } else if (true) { 29765 warn( 29766 "Invalid value for option \"props\": expected an Array or an Object, " + 29767 "but got " + (toRawType(props)) + ".", 29768 vm 29769 ); 29770 } 29771 options.props = res; 29772} 29773 29774/** 29775 * Normalize all injections into Object-based format 29776 */ 29777function normalizeInject (options, vm) { 29778 var inject = options.inject; 29779 if (!inject) { return } 29780 var normalized = options.inject = {}; 29781 if (Array.isArray(inject)) { 29782 for (var i = 0; i < inject.length; i++) { 29783 normalized[inject[i]] = { from: inject[i] }; 29784 } 29785 } else if (isPlainObject(inject)) { 29786 for (var key in inject) { 29787 var val = inject[key]; 29788 normalized[key] = isPlainObject(val) 29789 ? extend({ from: key }, val) 29790 : { from: val }; 29791 } 29792 } else if (true) { 29793 warn( 29794 "Invalid value for option \"inject\": expected an Array or an Object, " + 29795 "but got " + (toRawType(inject)) + ".", 29796 vm 29797 ); 29798 } 29799} 29800 29801/** 29802 * Normalize raw function directives into object format. 29803 */ 29804function normalizeDirectives (options) { 29805 var dirs = options.directives; 29806 if (dirs) { 29807 for (var key in dirs) { 29808 var def$$1 = dirs[key]; 29809 if (typeof def$$1 === 'function') { 29810 dirs[key] = { bind: def$$1, update: def$$1 }; 29811 } 29812 } 29813 } 29814} 29815 29816function assertObjectType (name, value, vm) { 29817 if (!isPlainObject(value)) { 29818 warn( 29819 "Invalid value for option \"" + name + "\": expected an Object, " + 29820 "but got " + (toRawType(value)) + ".", 29821 vm 29822 ); 29823 } 29824} 29825 29826/** 29827 * Merge two option objects into a new one. 29828 * Core utility used in both instantiation and inheritance. 29829 */ 29830function mergeOptions ( 29831 parent, 29832 child, 29833 vm 29834) { 29835 if (true) { 29836 checkComponents(child); 29837 } 29838 29839 if (typeof child === 'function') { 29840 child = child.options; 29841 } 29842 29843 normalizeProps(child, vm); 29844 normalizeInject(child, vm); 29845 normalizeDirectives(child); 29846 29847 // Apply extends and mixins on the child options, 29848 // but only if it is a raw options object that isn't 29849 // the result of another mergeOptions call. 29850 // Only merged options has the _base property. 29851 if (!child._base) { 29852 if (child.extends) { 29853 parent = mergeOptions(parent, child.extends, vm); 29854 } 29855 if (child.mixins) { 29856 for (var i = 0, l = child.mixins.length; i < l; i++) { 29857 parent = mergeOptions(parent, child.mixins[i], vm); 29858 } 29859 } 29860 } 29861 29862 var options = {}; 29863 var key; 29864 for (key in parent) { 29865 mergeField(key); 29866 } 29867 for (key in child) { 29868 if (!hasOwn(parent, key)) { 29869 mergeField(key); 29870 } 29871 } 29872 function mergeField (key) { 29873 var strat = strats[key] || defaultStrat; 29874 options[key] = strat(parent[key], child[key], vm, key); 29875 } 29876 return options 29877} 29878 29879/** 29880 * Resolve an asset. 29881 * This function is used because child instances need access 29882 * to assets defined in its ancestor chain. 29883 */ 29884function resolveAsset ( 29885 options, 29886 type, 29887 id, 29888 warnMissing 29889) { 29890 /* istanbul ignore if */ 29891 if (typeof id !== 'string') { 29892 return 29893 } 29894 var assets = options[type]; 29895 // check local registration variations first 29896 if (hasOwn(assets, id)) { return assets[id] } 29897 var camelizedId = camelize(id); 29898 if (hasOwn(assets, camelizedId)) { return assets[camelizedId] } 29899 var PascalCaseId = capitalize(camelizedId); 29900 if (hasOwn(assets, PascalCaseId)) { return assets[PascalCaseId] } 29901 // fallback to prototype chain 29902 var res = assets[id] || assets[camelizedId] || assets[PascalCaseId]; 29903 if ( true && warnMissing && !res) { 29904 warn( 29905 'Failed to resolve ' + type.slice(0, -1) + ': ' + id, 29906 options 29907 ); 29908 } 29909 return res 29910} 29911 29912/* */ 29913 29914 29915 29916function validateProp ( 29917 key, 29918 propOptions, 29919 propsData, 29920 vm 29921) { 29922 var prop = propOptions[key]; 29923 var absent = !hasOwn(propsData, key); 29924 var value = propsData[key]; 29925 // boolean casting 29926 var booleanIndex = getTypeIndex(Boolean, prop.type); 29927 if (booleanIndex > -1) { 29928 if (absent && !hasOwn(prop, 'default')) { 29929 value = false; 29930 } else if (value === '' || value === hyphenate(key)) { 29931 // only cast empty string / same name to boolean if 29932 // boolean has higher priority 29933 var stringIndex = getTypeIndex(String, prop.type); 29934 if (stringIndex < 0 || booleanIndex < stringIndex) { 29935 value = true; 29936 } 29937 } 29938 } 29939 // check default value 29940 if (value === undefined) { 29941 value = getPropDefaultValue(vm, prop, key); 29942 // since the default value is a fresh copy, 29943 // make sure to observe it. 29944 var prevShouldObserve = shouldObserve; 29945 toggleObserving(true); 29946 observe(value); 29947 toggleObserving(prevShouldObserve); 29948 } 29949 if ( 29950 true 29951 ) { 29952 assertProp(prop, key, value, vm, absent); 29953 } 29954 return value 29955} 29956 29957/** 29958 * Get the default value of a prop. 29959 */ 29960function getPropDefaultValue (vm, prop, key) { 29961 // no default, return undefined 29962 if (!hasOwn(prop, 'default')) { 29963 return undefined 29964 } 29965 var def = prop.default; 29966 // warn against non-factory defaults for Object & Array 29967 if ( true && isObject(def)) { 29968 warn( 29969 'Invalid default value for prop "' + key + '": ' + 29970 'Props with type Object/Array must use a factory function ' + 29971 'to return the default value.', 29972 vm 29973 ); 29974 } 29975 // the raw prop value was also undefined from previous render, 29976 // return previous default value to avoid unnecessary watcher trigger 29977 if (vm && vm.$options.propsData && 29978 vm.$options.propsData[key] === undefined && 29979 vm._props[key] !== undefined 29980 ) { 29981 return vm._props[key] 29982 } 29983 // call factory function for non-Function types 29984 // a value is Function if its prototype is function even across different execution context 29985 return typeof def === 'function' && getType(prop.type) !== 'Function' 29986 ? def.call(vm) 29987 : def 29988} 29989 29990/** 29991 * Assert whether a prop is valid. 29992 */ 29993function assertProp ( 29994 prop, 29995 name, 29996 value, 29997 vm, 29998 absent 29999) { 30000 if (prop.required && absent) { 30001 warn( 30002 'Missing required prop: "' + name + '"', 30003 vm 30004 ); 30005 return 30006 } 30007 if (value == null && !prop.required) { 30008 return 30009 } 30010 var type = prop.type; 30011 var valid = !type || type === true; 30012 var expectedTypes = []; 30013 if (type) { 30014 if (!Array.isArray(type)) { 30015 type = [type]; 30016 } 30017 for (var i = 0; i < type.length && !valid; i++) { 30018 var assertedType = assertType(value, type[i], vm); 30019 expectedTypes.push(assertedType.expectedType || ''); 30020 valid = assertedType.valid; 30021 } 30022 } 30023 30024 var haveExpectedTypes = expectedTypes.some(function (t) { return t; }); 30025 if (!valid && haveExpectedTypes) { 30026 warn( 30027 getInvalidTypeMessage(name, value, expectedTypes), 30028 vm 30029 ); 30030 return 30031 } 30032 var validator = prop.validator; 30033 if (validator) { 30034 if (!validator(value)) { 30035 warn( 30036 'Invalid prop: custom validator check failed for prop "' + name + '".', 30037 vm 30038 ); 30039 } 30040 } 30041} 30042 30043var simpleCheckRE = /^(String|Number|Boolean|Function|Symbol|BigInt)$/; 30044 30045function assertType (value, type, vm) { 30046 var valid; 30047 var expectedType = getType(type); 30048 if (simpleCheckRE.test(expectedType)) { 30049 var t = typeof value; 30050 valid = t === expectedType.toLowerCase(); 30051 // for primitive wrapper objects 30052 if (!valid && t === 'object') { 30053 valid = value instanceof type; 30054 } 30055 } else if (expectedType === 'Object') { 30056 valid = isPlainObject(value); 30057 } else if (expectedType === 'Array') { 30058 valid = Array.isArray(value); 30059 } else { 30060 try { 30061 valid = value instanceof type; 30062 } catch (e) { 30063 warn('Invalid prop type: "' + String(type) + '" is not a constructor', vm); 30064 valid = false; 30065 } 30066 } 30067 return { 30068 valid: valid, 30069 expectedType: expectedType 30070 } 30071} 30072 30073var functionTypeCheckRE = /^\s*function (\w+)/; 30074 30075/** 30076 * Use function string name to check built-in types, 30077 * because a simple equality check will fail when running 30078 * across different vms / iframes. 30079 */ 30080function getType (fn) { 30081 var match = fn && fn.toString().match(functionTypeCheckRE); 30082 return match ? match[1] : '' 30083} 30084 30085function isSameType (a, b) { 30086 return getType(a) === getType(b) 30087} 30088 30089function getTypeIndex (type, expectedTypes) { 30090 if (!Array.isArray(expectedTypes)) { 30091 return isSameType(expectedTypes, type) ? 0 : -1 30092 } 30093 for (var i = 0, len = expectedTypes.length; i < len; i++) { 30094 if (isSameType(expectedTypes[i], type)) { 30095 return i 30096 } 30097 } 30098 return -1 30099} 30100 30101function getInvalidTypeMessage (name, value, expectedTypes) { 30102 var message = "Invalid prop: type check failed for prop \"" + name + "\"." + 30103 " Expected " + (expectedTypes.map(capitalize).join(', ')); 30104 var expectedType = expectedTypes[0]; 30105 var receivedType = toRawType(value); 30106 // check if we need to specify expected value 30107 if ( 30108 expectedTypes.length === 1 && 30109 isExplicable(expectedType) && 30110 isExplicable(typeof value) && 30111 !isBoolean(expectedType, receivedType) 30112 ) { 30113 message += " with value " + (styleValue(value, expectedType)); 30114 } 30115 message += ", got " + receivedType + " "; 30116 // check if we need to specify received value 30117 if (isExplicable(receivedType)) { 30118 message += "with value " + (styleValue(value, receivedType)) + "."; 30119 } 30120 return message 30121} 30122 30123function styleValue (value, type) { 30124 if (type === 'String') { 30125 return ("\"" + value + "\"") 30126 } else if (type === 'Number') { 30127 return ("" + (Number(value))) 30128 } else { 30129 return ("" + value) 30130 } 30131} 30132 30133var EXPLICABLE_TYPES = ['string', 'number', 'boolean']; 30134function isExplicable (value) { 30135 return EXPLICABLE_TYPES.some(function (elem) { return value.toLowerCase() === elem; }) 30136} 30137 30138function isBoolean () { 30139 var args = [], len = arguments.length; 30140 while ( len-- ) args[ len ] = arguments[ len ]; 30141 30142 return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; }) 30143} 30144 30145/* */ 30146 30147function handleError (err, vm, info) { 30148 // Deactivate deps tracking while processing error handler to avoid possible infinite rendering. 30149 // See: https://github.com/vuejs/vuex/issues/1505 30150 pushTarget(); 30151 try { 30152 if (vm) { 30153 var cur = vm; 30154 while ((cur = cur.$parent)) { 30155 var hooks = cur.$options.errorCaptured; 30156 if (hooks) { 30157 for (var i = 0; i < hooks.length; i++) { 30158 try { 30159 var capture = hooks[i].call(cur, err, vm, info) === false; 30160 if (capture) { return } 30161 } catch (e) { 30162 globalHandleError(e, cur, 'errorCaptured hook'); 30163 } 30164 } 30165 } 30166 } 30167 } 30168 globalHandleError(err, vm, info); 30169 } finally { 30170 popTarget(); 30171 } 30172} 30173 30174function invokeWithErrorHandling ( 30175 handler, 30176 context, 30177 args, 30178 vm, 30179 info 30180) { 30181 var res; 30182 try { 30183 res = args ? handler.apply(context, args) : handler.call(context); 30184 if (res && !res._isVue && isPromise(res) && !res._handled) { 30185 res.catch(function (e) { return handleError(e, vm, info + " (Promise/async)"); }); 30186 // issue #9511 30187 // avoid catch triggering multiple times when nested calls 30188 res._handled = true; 30189 } 30190 } catch (e) { 30191 handleError(e, vm, info); 30192 } 30193 return res 30194} 30195 30196function globalHandleError (err, vm, info) { 30197 if (config.errorHandler) { 30198 try { 30199 return config.errorHandler.call(null, err, vm, info) 30200 } catch (e) { 30201 // if the user intentionally throws the original error in the handler, 30202 // do not log it twice 30203 if (e !== err) { 30204 logError(e, null, 'config.errorHandler'); 30205 } 30206 } 30207 } 30208 logError(err, vm, info); 30209} 30210 30211function logError (err, vm, info) { 30212 if (true) { 30213 warn(("Error in " + info + ": \"" + (err.toString()) + "\""), vm); 30214 } 30215 /* istanbul ignore else */ 30216 if ((inBrowser || inWeex) && typeof console !== 'undefined') { 30217 console.error(err); 30218 } else { 30219 throw err 30220 } 30221} 30222 30223/* */ 30224 30225var isUsingMicroTask = false; 30226 30227var callbacks = []; 30228var pending = false; 30229 30230function flushCallbacks () { 30231 pending = false; 30232 var copies = callbacks.slice(0); 30233 callbacks.length = 0; 30234 for (var i = 0; i < copies.length; i++) { 30235 copies[i](); 30236 } 30237} 30238 30239// Here we have async deferring wrappers using microtasks. 30240// In 2.5 we used (macro) tasks (in combination with microtasks). 30241// However, it has subtle problems when state is changed right before repaint 30242// (e.g. #6813, out-in transitions). 30243// Also, using (macro) tasks in event handler would cause some weird behaviors 30244// that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109). 30245// So we now use microtasks everywhere, again. 30246// A major drawback of this tradeoff is that there are some scenarios 30247// where microtasks have too high a priority and fire in between supposedly 30248// sequential events (e.g. #4521, #6690, which have workarounds) 30249// or even between bubbling of the same event (#6566). 30250var timerFunc; 30251 30252// The nextTick behavior leverages the microtask queue, which can be accessed 30253// via either native Promise.then or MutationObserver. 30254// MutationObserver has wider support, however it is seriously bugged in 30255// UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It 30256// completely stops working after triggering a few times... so, if native 30257// Promise is available, we will use it: 30258/* istanbul ignore next, $flow-disable-line */ 30259if (typeof Promise !== 'undefined' && isNative(Promise)) { 30260 var p = Promise.resolve(); 30261 timerFunc = function () { 30262 p.then(flushCallbacks); 30263 // In problematic UIWebViews, Promise.then doesn't completely break, but 30264 // it can get stuck in a weird state where callbacks are pushed into the 30265 // microtask queue but the queue isn't being flushed, until the browser 30266 // needs to do some other work, e.g. handle a timer. Therefore we can 30267 // "force" the microtask queue to be flushed by adding an empty timer. 30268 if (isIOS) { setTimeout(noop); } 30269 }; 30270 isUsingMicroTask = true; 30271} else if (!isIE && typeof MutationObserver !== 'undefined' && ( 30272 isNative(MutationObserver) || 30273 // PhantomJS and iOS 7.x 30274 MutationObserver.toString() === '[object MutationObserverConstructor]' 30275)) { 30276 // Use MutationObserver where native Promise is not available, 30277 // e.g. PhantomJS, iOS7, Android 4.4 30278 // (#6466 MutationObserver is unreliable in IE11) 30279 var counter = 1; 30280 var observer = new MutationObserver(flushCallbacks); 30281 var textNode = document.createTextNode(String(counter)); 30282 observer.observe(textNode, { 30283 characterData: true 30284 }); 30285 timerFunc = function () { 30286 counter = (counter + 1) % 2; 30287 textNode.data = String(counter); 30288 }; 30289 isUsingMicroTask = true; 30290} else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) { 30291 // Fallback to setImmediate. 30292 // Technically it leverages the (macro) task queue, 30293 // but it is still a better choice than setTimeout. 30294 timerFunc = function () { 30295 setImmediate(flushCallbacks); 30296 }; 30297} else { 30298 // Fallback to setTimeout. 30299 timerFunc = function () { 30300 setTimeout(flushCallbacks, 0); 30301 }; 30302} 30303 30304function nextTick (cb, ctx) { 30305 var _resolve; 30306 callbacks.push(function () { 30307 if (cb) { 30308 try { 30309 cb.call(ctx); 30310 } catch (e) { 30311 handleError(e, ctx, 'nextTick'); 30312 } 30313 } else if (_resolve) { 30314 _resolve(ctx); 30315 } 30316 }); 30317 if (!pending) { 30318 pending = true; 30319 timerFunc(); 30320 } 30321 // $flow-disable-line 30322 if (!cb && typeof Promise !== 'undefined') { 30323 return new Promise(function (resolve) { 30324 _resolve = resolve; 30325 }) 30326 } 30327} 30328 30329/* */ 30330 30331var mark; 30332var measure; 30333 30334if (true) { 30335 var perf = inBrowser && window.performance; 30336 /* istanbul ignore if */ 30337 if ( 30338 perf && 30339 perf.mark && 30340 perf.measure && 30341 perf.clearMarks && 30342 perf.clearMeasures 30343 ) { 30344 mark = function (tag) { return perf.mark(tag); }; 30345 measure = function (name, startTag, endTag) { 30346 perf.measure(name, startTag, endTag); 30347 perf.clearMarks(startTag); 30348 perf.clearMarks(endTag); 30349 // perf.clearMeasures(name) 30350 }; 30351 } 30352} 30353 30354/* not type checking this file because flow doesn't play well with Proxy */ 30355 30356var initProxy; 30357 30358if (true) { 30359 var allowedGlobals = makeMap( 30360 'Infinity,undefined,NaN,isFinite,isNaN,' + 30361 'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' + 30362 'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,' + 30363 'require' // for Webpack/Browserify 30364 ); 30365 30366 var warnNonPresent = function (target, key) { 30367 warn( 30368 "Property or method \"" + key + "\" is not defined on the instance but " + 30369 'referenced during render. Make sure that this property is reactive, ' + 30370 'either in the data option, or for class-based components, by ' + 30371 'initializing the property. ' + 30372 'See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.', 30373 target 30374 ); 30375 }; 30376 30377 var warnReservedPrefix = function (target, key) { 30378 warn( 30379 "Property \"" + key + "\" must be accessed with \"$data." + key + "\" because " + 30380 'properties starting with "$" or "_" are not proxied in the Vue instance to ' + 30381 'prevent conflicts with Vue internals. ' + 30382 'See: https://vuejs.org/v2/api/#data', 30383 target 30384 ); 30385 }; 30386 30387 var hasProxy = 30388 typeof Proxy !== 'undefined' && isNative(Proxy); 30389 30390 if (hasProxy) { 30391 var isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact'); 30392 config.keyCodes = new Proxy(config.keyCodes, { 30393 set: function set (target, key, value) { 30394 if (isBuiltInModifier(key)) { 30395 warn(("Avoid overwriting built-in modifier in config.keyCodes: ." + key)); 30396 return false 30397 } else { 30398 target[key] = value; 30399 return true 30400 } 30401 } 30402 }); 30403 } 30404 30405 var hasHandler = { 30406 has: function has (target, key) { 30407 var has = key in target; 30408 var isAllowed = allowedGlobals(key) || 30409 (typeof key === 'string' && key.charAt(0) === '_' && !(key in target.$data)); 30410 if (!has && !isAllowed) { 30411 if (key in target.$data) { warnReservedPrefix(target, key); } 30412 else { warnNonPresent(target, key); } 30413 } 30414 return has || !isAllowed 30415 } 30416 }; 30417 30418 var getHandler = { 30419 get: function get (target, key) { 30420 if (typeof key === 'string' && !(key in target)) { 30421 if (key in target.$data) { warnReservedPrefix(target, key); } 30422 else { warnNonPresent(target, key); } 30423 } 30424 return target[key] 30425 } 30426 }; 30427 30428 initProxy = function initProxy (vm) { 30429 if (hasProxy) { 30430 // determine which proxy handler to use 30431 var options = vm.$options; 30432 var handlers = options.render && options.render._withStripped 30433 ? getHandler 30434 : hasHandler; 30435 vm._renderProxy = new Proxy(vm, handlers); 30436 } else { 30437 vm._renderProxy = vm; 30438 } 30439 }; 30440} 30441 30442/* */ 30443 30444var seenObjects = new _Set(); 30445 30446/** 30447 * Recursively traverse an object to evoke all converted 30448 * getters, so that every nested property inside the object 30449 * is collected as a "deep" dependency. 30450 */ 30451function traverse (val) { 30452 _traverse(val, seenObjects); 30453 seenObjects.clear(); 30454} 30455 30456function _traverse (val, seen) { 30457 var i, keys; 30458 var isA = Array.isArray(val); 30459 if ((!isA && !isObject(val)) || Object.isFrozen(val) || val instanceof VNode) { 30460 return 30461 } 30462 if (val.__ob__) { 30463 var depId = val.__ob__.dep.id; 30464 if (seen.has(depId)) { 30465 return 30466 } 30467 seen.add(depId); 30468 } 30469 if (isA) { 30470 i = val.length; 30471 while (i--) { _traverse(val[i], seen); } 30472 } else { 30473 keys = Object.keys(val); 30474 i = keys.length; 30475 while (i--) { _traverse(val[keys[i]], seen); } 30476 } 30477} 30478 30479/* */ 30480 30481var normalizeEvent = cached(function (name) { 30482 var passive = name.charAt(0) === '&'; 30483 name = passive ? name.slice(1) : name; 30484 var once$$1 = name.charAt(0) === '~'; // Prefixed last, checked first 30485 name = once$$1 ? name.slice(1) : name; 30486 var capture = name.charAt(0) === '!'; 30487 name = capture ? name.slice(1) : name; 30488 return { 30489 name: name, 30490 once: once$$1, 30491 capture: capture, 30492 passive: passive 30493 } 30494}); 30495 30496function createFnInvoker (fns, vm) { 30497 function invoker () { 30498 var arguments$1 = arguments; 30499 30500 var fns = invoker.fns; 30501 if (Array.isArray(fns)) { 30502 var cloned = fns.slice(); 30503 for (var i = 0; i < cloned.length; i++) { 30504 invokeWithErrorHandling(cloned[i], null, arguments$1, vm, "v-on handler"); 30505 } 30506 } else { 30507 // return handler return value for single handlers 30508 return invokeWithErrorHandling(fns, null, arguments, vm, "v-on handler") 30509 } 30510 } 30511 invoker.fns = fns; 30512 return invoker 30513} 30514 30515function updateListeners ( 30516 on, 30517 oldOn, 30518 add, 30519 remove$$1, 30520 createOnceHandler, 30521 vm 30522) { 30523 var name, def$$1, cur, old, event; 30524 for (name in on) { 30525 def$$1 = cur = on[name]; 30526 old = oldOn[name]; 30527 event = normalizeEvent(name); 30528 if (isUndef(cur)) { 30529 true && warn( 30530 "Invalid handler for event \"" + (event.name) + "\": got " + String(cur), 30531 vm 30532 ); 30533 } else if (isUndef(old)) { 30534 if (isUndef(cur.fns)) { 30535 cur = on[name] = createFnInvoker(cur, vm); 30536 } 30537 if (isTrue(event.once)) { 30538 cur = on[name] = createOnceHandler(event.name, cur, event.capture); 30539 } 30540 add(event.name, cur, event.capture, event.passive, event.params); 30541 } else if (cur !== old) { 30542 old.fns = cur; 30543 on[name] = old; 30544 } 30545 } 30546 for (name in oldOn) { 30547 if (isUndef(on[name])) { 30548 event = normalizeEvent(name); 30549 remove$$1(event.name, oldOn[name], event.capture); 30550 } 30551 } 30552} 30553 30554/* */ 30555 30556function mergeVNodeHook (def, hookKey, hook) { 30557 if (def instanceof VNode) { 30558 def = def.data.hook || (def.data.hook = {}); 30559 } 30560 var invoker; 30561 var oldHook = def[hookKey]; 30562 30563 function wrappedHook () { 30564 hook.apply(this, arguments); 30565 // important: remove merged hook to ensure it's called only once 30566 // and prevent memory leak 30567 remove(invoker.fns, wrappedHook); 30568 } 30569 30570 if (isUndef(oldHook)) { 30571 // no existing hook 30572 invoker = createFnInvoker([wrappedHook]); 30573 } else { 30574 /* istanbul ignore if */ 30575 if (isDef(oldHook.fns) && isTrue(oldHook.merged)) { 30576 // already a merged invoker 30577 invoker = oldHook; 30578 invoker.fns.push(wrappedHook); 30579 } else { 30580 // existing plain hook 30581 invoker = createFnInvoker([oldHook, wrappedHook]); 30582 } 30583 } 30584 30585 invoker.merged = true; 30586 def[hookKey] = invoker; 30587} 30588 30589/* */ 30590 30591function extractPropsFromVNodeData ( 30592 data, 30593 Ctor, 30594 tag 30595) { 30596 // we are only extracting raw values here. 30597 // validation and default values are handled in the child 30598 // component itself. 30599 var propOptions = Ctor.options.props; 30600 if (isUndef(propOptions)) { 30601 return 30602 } 30603 var res = {}; 30604 var attrs = data.attrs; 30605 var props = data.props; 30606 if (isDef(attrs) || isDef(props)) { 30607 for (var key in propOptions) { 30608 var altKey = hyphenate(key); 30609 if (true) { 30610 var keyInLowerCase = key.toLowerCase(); 30611 if ( 30612 key !== keyInLowerCase && 30613 attrs && hasOwn(attrs, keyInLowerCase) 30614 ) { 30615 tip( 30616 "Prop \"" + keyInLowerCase + "\" is passed to component " + 30617 (formatComponentName(tag || Ctor)) + ", but the declared prop name is" + 30618 " \"" + key + "\". " + 30619 "Note that HTML attributes are case-insensitive and camelCased " + 30620 "props need to use their kebab-case equivalents when using in-DOM " + 30621 "templates. You should probably use \"" + altKey + "\" instead of \"" + key + "\"." 30622 ); 30623 } 30624 } 30625 checkProp(res, props, key, altKey, true) || 30626 checkProp(res, attrs, key, altKey, false); 30627 } 30628 } 30629 return res 30630} 30631 30632function checkProp ( 30633 res, 30634 hash, 30635 key, 30636 altKey, 30637 preserve 30638) { 30639 if (isDef(hash)) { 30640 if (hasOwn(hash, key)) { 30641 res[key] = hash[key]; 30642 if (!preserve) { 30643 delete hash[key]; 30644 } 30645 return true 30646 } else if (hasOwn(hash, altKey)) { 30647 res[key] = hash[altKey]; 30648 if (!preserve) { 30649 delete hash[altKey]; 30650 } 30651 return true 30652 } 30653 } 30654 return false 30655} 30656 30657/* */ 30658 30659// The template compiler attempts to minimize the need for normalization by 30660// statically analyzing the template at compile time. 30661// 30662// For plain HTML markup, normalization can be completely skipped because the 30663// generated render function is guaranteed to return Array<VNode>. There are 30664// two cases where extra normalization is needed: 30665 30666// 1. When the children contains components - because a functional component 30667// may return an Array instead of a single root. In this case, just a simple 30668// normalization is needed - if any child is an Array, we flatten the whole 30669// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep 30670// because functional components already normalize their own children. 30671function simpleNormalizeChildren (children) { 30672 for (var i = 0; i < children.length; i++) { 30673 if (Array.isArray(children[i])) { 30674 return Array.prototype.concat.apply([], children) 30675 } 30676 } 30677 return children 30678} 30679 30680// 2. When the children contains constructs that always generated nested Arrays, 30681// e.g. <template>, <slot>, v-for, or when the children is provided by user 30682// with hand-written render functions / JSX. In such cases a full normalization 30683// is needed to cater to all possible types of children values. 30684function normalizeChildren (children) { 30685 return isPrimitive(children) 30686 ? [createTextVNode(children)] 30687 : Array.isArray(children) 30688 ? normalizeArrayChildren(children) 30689 : undefined 30690} 30691 30692function isTextNode (node) { 30693 return isDef(node) && isDef(node.text) && isFalse(node.isComment) 30694} 30695 30696function normalizeArrayChildren (children, nestedIndex) { 30697 var res = []; 30698 var i, c, lastIndex, last; 30699 for (i = 0; i < children.length; i++) { 30700 c = children[i]; 30701 if (isUndef(c) || typeof c === 'boolean') { continue } 30702 lastIndex = res.length - 1; 30703 last = res[lastIndex]; 30704 // nested 30705 if (Array.isArray(c)) { 30706 if (c.length > 0) { 30707 c = normalizeArrayChildren(c, ((nestedIndex || '') + "_" + i)); 30708 // merge adjacent text nodes 30709 if (isTextNode(c[0]) && isTextNode(last)) { 30710 res[lastIndex] = createTextVNode(last.text + (c[0]).text); 30711 c.shift(); 30712 } 30713 res.push.apply(res, c); 30714 } 30715 } else if (isPrimitive(c)) { 30716 if (isTextNode(last)) { 30717 // merge adjacent text nodes 30718 // this is necessary for SSR hydration because text nodes are 30719 // essentially merged when rendered to HTML strings 30720 res[lastIndex] = createTextVNode(last.text + c); 30721 } else if (c !== '') { 30722 // convert primitive to vnode 30723 res.push(createTextVNode(c)); 30724 } 30725 } else { 30726 if (isTextNode(c) && isTextNode(last)) { 30727 // merge adjacent text nodes 30728 res[lastIndex] = createTextVNode(last.text + c.text); 30729 } else { 30730 // default key for nested array children (likely generated by v-for) 30731 if (isTrue(children._isVList) && 30732 isDef(c.tag) && 30733 isUndef(c.key) && 30734 isDef(nestedIndex)) { 30735 c.key = "__vlist" + nestedIndex + "_" + i + "__"; 30736 } 30737 res.push(c); 30738 } 30739 } 30740 } 30741 return res 30742} 30743 30744/* */ 30745 30746function initProvide (vm) { 30747 var provide = vm.$options.provide; 30748 if (provide) { 30749 vm._provided = typeof provide === 'function' 30750 ? provide.call(vm) 30751 : provide; 30752 } 30753} 30754 30755function initInjections (vm) { 30756 var result = resolveInject(vm.$options.inject, vm); 30757 if (result) { 30758 toggleObserving(false); 30759 Object.keys(result).forEach(function (key) { 30760 /* istanbul ignore else */ 30761 if (true) { 30762 defineReactive$$1(vm, key, result[key], function () { 30763 warn( 30764 "Avoid mutating an injected value directly since the changes will be " + 30765 "overwritten whenever the provided component re-renders. " + 30766 "injection being mutated: \"" + key + "\"", 30767 vm 30768 ); 30769 }); 30770 } else {} 30771 }); 30772 toggleObserving(true); 30773 } 30774} 30775 30776function resolveInject (inject, vm) { 30777 if (inject) { 30778 // inject is :any because flow is not smart enough to figure out cached 30779 var result = Object.create(null); 30780 var keys = hasSymbol 30781 ? Reflect.ownKeys(inject) 30782 : Object.keys(inject); 30783 30784 for (var i = 0; i < keys.length; i++) { 30785 var key = keys[i]; 30786 // #6574 in case the inject object is observed... 30787 if (key === '__ob__') { continue } 30788 var provideKey = inject[key].from; 30789 var source = vm; 30790 while (source) { 30791 if (source._provided && hasOwn(source._provided, provideKey)) { 30792 result[key] = source._provided[provideKey]; 30793 break 30794 } 30795 source = source.$parent; 30796 } 30797 if (!source) { 30798 if ('default' in inject[key]) { 30799 var provideDefault = inject[key].default; 30800 result[key] = typeof provideDefault === 'function' 30801 ? provideDefault.call(vm) 30802 : provideDefault; 30803 } else if (true) { 30804 warn(("Injection \"" + key + "\" not found"), vm); 30805 } 30806 } 30807 } 30808 return result 30809 } 30810} 30811 30812/* */ 30813 30814 30815 30816/** 30817 * Runtime helper for resolving raw children VNodes into a slot object. 30818 */ 30819function resolveSlots ( 30820 children, 30821 context 30822) { 30823 if (!children || !children.length) { 30824 return {} 30825 } 30826 var slots = {}; 30827 for (var i = 0, l = children.length; i < l; i++) { 30828 var child = children[i]; 30829 var data = child.data; 30830 // remove slot attribute if the node is resolved as a Vue slot node 30831 if (data && data.attrs && data.attrs.slot) { 30832 delete data.attrs.slot; 30833 } 30834 // named slots should only be respected if the vnode was rendered in the 30835 // same context. 30836 if ((child.context === context || child.fnContext === context) && 30837 data && data.slot != null 30838 ) { 30839 var name = data.slot; 30840 var slot = (slots[name] || (slots[name] = [])); 30841 if (child.tag === 'template') { 30842 slot.push.apply(slot, child.children || []); 30843 } else { 30844 slot.push(child); 30845 } 30846 } else { 30847 (slots.default || (slots.default = [])).push(child); 30848 } 30849 } 30850 // ignore slots that contains only whitespace 30851 for (var name$1 in slots) { 30852 if (slots[name$1].every(isWhitespace)) { 30853 delete slots[name$1]; 30854 } 30855 } 30856 return slots 30857} 30858 30859function isWhitespace (node) { 30860 return (node.isComment && !node.asyncFactory) || node.text === ' ' 30861} 30862 30863/* */ 30864 30865function isAsyncPlaceholder (node) { 30866 return node.isComment && node.asyncFactory 30867} 30868 30869/* */ 30870 30871function normalizeScopedSlots ( 30872 slots, 30873 normalSlots, 30874 prevSlots 30875) { 30876 var res; 30877 var hasNormalSlots = Object.keys(normalSlots).length > 0; 30878 var isStable = slots ? !!slots.$stable : !hasNormalSlots; 30879 var key = slots && slots.$key; 30880 if (!slots) { 30881 res = {}; 30882 } else if (slots._normalized) { 30883 // fast path 1: child component re-render only, parent did not change 30884 return slots._normalized 30885 } else if ( 30886 isStable && 30887 prevSlots && 30888 prevSlots !== emptyObject && 30889 key === prevSlots.$key && 30890 !hasNormalSlots && 30891 !prevSlots.$hasNormal 30892 ) { 30893 // fast path 2: stable scoped slots w/ no normal slots to proxy, 30894 // only need to normalize once 30895 return prevSlots 30896 } else { 30897 res = {}; 30898 for (var key$1 in slots) { 30899 if (slots[key$1] && key$1[0] !== '$') { 30900 res[key$1] = normalizeScopedSlot(normalSlots, key$1, slots[key$1]); 30901 } 30902 } 30903 } 30904 // expose normal slots on scopedSlots 30905 for (var key$2 in normalSlots) { 30906 if (!(key$2 in res)) { 30907 res[key$2] = proxyNormalSlot(normalSlots, key$2); 30908 } 30909 } 30910 // avoriaz seems to mock a non-extensible $scopedSlots object 30911 // and when that is passed down this would cause an error 30912 if (slots && Object.isExtensible(slots)) { 30913 (slots)._normalized = res; 30914 } 30915 def(res, '$stable', isStable); 30916 def(res, '$key', key); 30917 def(res, '$hasNormal', hasNormalSlots); 30918 return res 30919} 30920 30921function normalizeScopedSlot(normalSlots, key, fn) { 30922 var normalized = function () { 30923 var res = arguments.length ? fn.apply(null, arguments) : fn({}); 30924 res = res && typeof res === 'object' && !Array.isArray(res) 30925 ? [res] // single vnode 30926 : normalizeChildren(res); 30927 var vnode = res && res[0]; 30928 return res && ( 30929 !vnode || 30930 (res.length === 1 && vnode.isComment && !isAsyncPlaceholder(vnode)) // #9658, #10391 30931 ) ? undefined 30932 : res 30933 }; 30934 // this is a slot using the new v-slot syntax without scope. although it is 30935 // compiled as a scoped slot, render fn users would expect it to be present 30936 // on this.$slots because the usage is semantically a normal slot. 30937 if (fn.proxy) { 30938 Object.defineProperty(normalSlots, key, { 30939 get: normalized, 30940 enumerable: true, 30941 configurable: true 30942 }); 30943 } 30944 return normalized 30945} 30946 30947function proxyNormalSlot(slots, key) { 30948 return function () { return slots[key]; } 30949} 30950 30951/* */ 30952 30953/** 30954 * Runtime helper for rendering v-for lists. 30955 */ 30956function renderList ( 30957 val, 30958 render 30959) { 30960 var ret, i, l, keys, key; 30961 if (Array.isArray(val) || typeof val === 'string') { 30962 ret = new Array(val.length); 30963 for (i = 0, l = val.length; i < l; i++) { 30964 ret[i] = render(val[i], i); 30965 } 30966 } else if (typeof val === 'number') { 30967 ret = new Array(val); 30968 for (i = 0; i < val; i++) { 30969 ret[i] = render(i + 1, i); 30970 } 30971 } else if (isObject(val)) { 30972 if (hasSymbol && val[Symbol.iterator]) { 30973 ret = []; 30974 var iterator = val[Symbol.iterator](); 30975 var result = iterator.next(); 30976 while (!result.done) { 30977 ret.push(render(result.value, ret.length)); 30978 result = iterator.next(); 30979 } 30980 } else { 30981 keys = Object.keys(val); 30982 ret = new Array(keys.length); 30983 for (i = 0, l = keys.length; i < l; i++) { 30984 key = keys[i]; 30985 ret[i] = render(val[key], key, i); 30986 } 30987 } 30988 } 30989 if (!isDef(ret)) { 30990 ret = []; 30991 } 30992 (ret)._isVList = true; 30993 return ret 30994} 30995 30996/* */ 30997 30998/** 30999 * Runtime helper for rendering <slot> 31000 */ 31001function renderSlot ( 31002 name, 31003 fallbackRender, 31004 props, 31005 bindObject 31006) { 31007 var scopedSlotFn = this.$scopedSlots[name]; 31008 var nodes; 31009 if (scopedSlotFn) { 31010 // scoped slot 31011 props = props || {}; 31012 if (bindObject) { 31013 if ( true && !isObject(bindObject)) { 31014 warn('slot v-bind without argument expects an Object', this); 31015 } 31016 props = extend(extend({}, bindObject), props); 31017 } 31018 nodes = 31019 scopedSlotFn(props) || 31020 (typeof fallbackRender === 'function' ? fallbackRender() : fallbackRender); 31021 } else { 31022 nodes = 31023 this.$slots[name] || 31024 (typeof fallbackRender === 'function' ? fallbackRender() : fallbackRender); 31025 } 31026 31027 var target = props && props.slot; 31028 if (target) { 31029 return this.$createElement('template', { slot: target }, nodes) 31030 } else { 31031 return nodes 31032 } 31033} 31034 31035/* */ 31036 31037/** 31038 * Runtime helper for resolving filters 31039 */ 31040function resolveFilter (id) { 31041 return resolveAsset(this.$options, 'filters', id, true) || identity 31042} 31043 31044/* */ 31045 31046function isKeyNotMatch (expect, actual) { 31047 if (Array.isArray(expect)) { 31048 return expect.indexOf(actual) === -1 31049 } else { 31050 return expect !== actual 31051 } 31052} 31053 31054/** 31055 * Runtime helper for checking keyCodes from config. 31056 * exposed as Vue.prototype._k 31057 * passing in eventKeyName as last argument separately for backwards compat 31058 */ 31059function checkKeyCodes ( 31060 eventKeyCode, 31061 key, 31062 builtInKeyCode, 31063 eventKeyName, 31064 builtInKeyName 31065) { 31066 var mappedKeyCode = config.keyCodes[key] || builtInKeyCode; 31067 if (builtInKeyName && eventKeyName && !config.keyCodes[key]) { 31068 return isKeyNotMatch(builtInKeyName, eventKeyName) 31069 } else if (mappedKeyCode) { 31070 return isKeyNotMatch(mappedKeyCode, eventKeyCode) 31071 } else if (eventKeyName) { 31072 return hyphenate(eventKeyName) !== key 31073 } 31074 return eventKeyCode === undefined 31075} 31076 31077/* */ 31078 31079/** 31080 * Runtime helper for merging v-bind="object" into a VNode's data. 31081 */ 31082function bindObjectProps ( 31083 data, 31084 tag, 31085 value, 31086 asProp, 31087 isSync 31088) { 31089 if (value) { 31090 if (!isObject(value)) { 31091 true && warn( 31092 'v-bind without argument expects an Object or Array value', 31093 this 31094 ); 31095 } else { 31096 if (Array.isArray(value)) { 31097 value = toObject(value); 31098 } 31099 var hash; 31100 var loop = function ( key ) { 31101 if ( 31102 key === 'class' || 31103 key === 'style' || 31104 isReservedAttribute(key) 31105 ) { 31106 hash = data; 31107 } else { 31108 var type = data.attrs && data.attrs.type; 31109 hash = asProp || config.mustUseProp(tag, type, key) 31110 ? data.domProps || (data.domProps = {}) 31111 : data.attrs || (data.attrs = {}); 31112 } 31113 var camelizedKey = camelize(key); 31114 var hyphenatedKey = hyphenate(key); 31115 if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) { 31116 hash[key] = value[key]; 31117 31118 if (isSync) { 31119 var on = data.on || (data.on = {}); 31120 on[("update:" + key)] = function ($event) { 31121 value[key] = $event; 31122 }; 31123 } 31124 } 31125 }; 31126 31127 for (var key in value) loop( key ); 31128 } 31129 } 31130 return data 31131} 31132 31133/* */ 31134 31135/** 31136 * Runtime helper for rendering static trees. 31137 */ 31138function renderStatic ( 31139 index, 31140 isInFor 31141) { 31142 var cached = this._staticTrees || (this._staticTrees = []); 31143 var tree = cached[index]; 31144 // if has already-rendered static tree and not inside v-for, 31145 // we can reuse the same tree. 31146 if (tree && !isInFor) { 31147 return tree 31148 } 31149 // otherwise, render a fresh tree. 31150 tree = cached[index] = this.$options.staticRenderFns[index].call( 31151 this._renderProxy, 31152 null, 31153 this // for render fns generated for functional component templates 31154 ); 31155 markStatic(tree, ("__static__" + index), false); 31156 return tree 31157} 31158 31159/** 31160 * Runtime helper for v-once. 31161 * Effectively it means marking the node as static with a unique key. 31162 */ 31163function markOnce ( 31164 tree, 31165 index, 31166 key 31167) { 31168 markStatic(tree, ("__once__" + index + (key ? ("_" + key) : "")), true); 31169 return tree 31170} 31171 31172function markStatic ( 31173 tree, 31174 key, 31175 isOnce 31176) { 31177 if (Array.isArray(tree)) { 31178 for (var i = 0; i < tree.length; i++) { 31179 if (tree[i] && typeof tree[i] !== 'string') { 31180 markStaticNode(tree[i], (key + "_" + i), isOnce); 31181 } 31182 } 31183 } else { 31184 markStaticNode(tree, key, isOnce); 31185 } 31186} 31187 31188function markStaticNode (node, key, isOnce) { 31189 node.isStatic = true; 31190 node.key = key; 31191 node.isOnce = isOnce; 31192} 31193 31194/* */ 31195 31196function bindObjectListeners (data, value) { 31197 if (value) { 31198 if (!isPlainObject(value)) { 31199 true && warn( 31200 'v-on without argument expects an Object value', 31201 this 31202 ); 31203 } else { 31204 var on = data.on = data.on ? extend({}, data.on) : {}; 31205 for (var key in value) { 31206 var existing = on[key]; 31207 var ours = value[key]; 31208 on[key] = existing ? [].concat(existing, ours) : ours; 31209 } 31210 } 31211 } 31212 return data 31213} 31214 31215/* */ 31216 31217function resolveScopedSlots ( 31218 fns, // see flow/vnode 31219 res, 31220 // the following are added in 2.6 31221 hasDynamicKeys, 31222 contentHashKey 31223) { 31224 res = res || { $stable: !hasDynamicKeys }; 31225 for (var i = 0; i < fns.length; i++) { 31226 var slot = fns[i]; 31227 if (Array.isArray(slot)) { 31228 resolveScopedSlots(slot, res, hasDynamicKeys); 31229 } else if (slot) { 31230 // marker for reverse proxying v-slot without scope on this.$slots 31231 if (slot.proxy) { 31232 slot.fn.proxy = true; 31233 } 31234 res[slot.key] = slot.fn; 31235 } 31236 } 31237 if (contentHashKey) { 31238 (res).$key = contentHashKey; 31239 } 31240 return res 31241} 31242 31243/* */ 31244 31245function bindDynamicKeys (baseObj, values) { 31246 for (var i = 0; i < values.length; i += 2) { 31247 var key = values[i]; 31248 if (typeof key === 'string' && key) { 31249 baseObj[values[i]] = values[i + 1]; 31250 } else if ( true && key !== '' && key !== null) { 31251 // null is a special value for explicitly removing a binding 31252 warn( 31253 ("Invalid value for dynamic directive argument (expected string or null): " + key), 31254 this 31255 ); 31256 } 31257 } 31258 return baseObj 31259} 31260 31261// helper to dynamically append modifier runtime markers to event names. 31262// ensure only append when value is already string, otherwise it will be cast 31263// to string and cause the type check to miss. 31264function prependModifier (value, symbol) { 31265 return typeof value === 'string' ? symbol + value : value 31266} 31267 31268/* */ 31269 31270function installRenderHelpers (target) { 31271 target._o = markOnce; 31272 target._n = toNumber; 31273 target._s = toString; 31274 target._l = renderList; 31275 target._t = renderSlot; 31276 target._q = looseEqual; 31277 target._i = looseIndexOf; 31278 target._m = renderStatic; 31279 target._f = resolveFilter; 31280 target._k = checkKeyCodes; 31281 target._b = bindObjectProps; 31282 target._v = createTextVNode; 31283 target._e = createEmptyVNode; 31284 target._u = resolveScopedSlots; 31285 target._g = bindObjectListeners; 31286 target._d = bindDynamicKeys; 31287 target._p = prependModifier; 31288} 31289 31290/* */ 31291 31292function FunctionalRenderContext ( 31293 data, 31294 props, 31295 children, 31296 parent, 31297 Ctor 31298) { 31299 var this$1 = this; 31300 31301 var options = Ctor.options; 31302 // ensure the createElement function in functional components 31303 // gets a unique context - this is necessary for correct named slot check 31304 var contextVm; 31305 if (hasOwn(parent, '_uid')) { 31306 contextVm = Object.create(parent); 31307 // $flow-disable-line 31308 contextVm._original = parent; 31309 } else { 31310 // the context vm passed in is a functional context as well. 31311 // in this case we want to make sure we are able to get a hold to the 31312 // real context instance. 31313 contextVm = parent; 31314 // $flow-disable-line 31315 parent = parent._original; 31316 } 31317 var isCompiled = isTrue(options._compiled); 31318 var needNormalization = !isCompiled; 31319 31320 this.data = data; 31321 this.props = props; 31322 this.children = children; 31323 this.parent = parent; 31324 this.listeners = data.on || emptyObject; 31325 this.injections = resolveInject(options.inject, parent); 31326 this.slots = function () { 31327 if (!this$1.$slots) { 31328 normalizeScopedSlots( 31329 data.scopedSlots, 31330 this$1.$slots = resolveSlots(children, parent) 31331 ); 31332 } 31333 return this$1.$slots 31334 }; 31335 31336 Object.defineProperty(this, 'scopedSlots', ({ 31337 enumerable: true, 31338 get: function get () { 31339 return normalizeScopedSlots(data.scopedSlots, this.slots()) 31340 } 31341 })); 31342 31343 // support for compiled functional template 31344 if (isCompiled) { 31345 // exposing $options for renderStatic() 31346 this.$options = options; 31347 // pre-resolve slots for renderSlot() 31348 this.$slots = this.slots(); 31349 this.$scopedSlots = normalizeScopedSlots(data.scopedSlots, this.$slots); 31350 } 31351 31352 if (options._scopeId) { 31353 this._c = function (a, b, c, d) { 31354 var vnode = createElement(contextVm, a, b, c, d, needNormalization); 31355 if (vnode && !Array.isArray(vnode)) { 31356 vnode.fnScopeId = options._scopeId; 31357 vnode.fnContext = parent; 31358 } 31359 return vnode 31360 }; 31361 } else { 31362 this._c = function (a, b, c, d) { return createElement(contextVm, a, b, c, d, needNormalization); }; 31363 } 31364} 31365 31366installRenderHelpers(FunctionalRenderContext.prototype); 31367 31368function createFunctionalComponent ( 31369 Ctor, 31370 propsData, 31371 data, 31372 contextVm, 31373 children 31374) { 31375 var options = Ctor.options; 31376 var props = {}; 31377 var propOptions = options.props; 31378 if (isDef(propOptions)) { 31379 for (var key in propOptions) { 31380 props[key] = validateProp(key, propOptions, propsData || emptyObject); 31381 } 31382 } else { 31383 if (isDef(data.attrs)) { mergeProps(props, data.attrs); } 31384 if (isDef(data.props)) { mergeProps(props, data.props); } 31385 } 31386 31387 var renderContext = new FunctionalRenderContext( 31388 data, 31389 props, 31390 children, 31391 contextVm, 31392 Ctor 31393 ); 31394 31395 var vnode = options.render.call(null, renderContext._c, renderContext); 31396 31397 if (vnode instanceof VNode) { 31398 return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext) 31399 } else if (Array.isArray(vnode)) { 31400 var vnodes = normalizeChildren(vnode) || []; 31401 var res = new Array(vnodes.length); 31402 for (var i = 0; i < vnodes.length; i++) { 31403 res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext); 31404 } 31405 return res 31406 } 31407} 31408 31409function cloneAndMarkFunctionalResult (vnode, data, contextVm, options, renderContext) { 31410 // #7817 clone node before setting fnContext, otherwise if the node is reused 31411 // (e.g. it was from a cached normal slot) the fnContext causes named slots 31412 // that should not be matched to match. 31413 var clone = cloneVNode(vnode); 31414 clone.fnContext = contextVm; 31415 clone.fnOptions = options; 31416 if (true) { 31417 (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext = renderContext; 31418 } 31419 if (data.slot) { 31420 (clone.data || (clone.data = {})).slot = data.slot; 31421 } 31422 return clone 31423} 31424 31425function mergeProps (to, from) { 31426 for (var key in from) { 31427 to[camelize(key)] = from[key]; 31428 } 31429} 31430 31431/* */ 31432 31433/* */ 31434 31435/* */ 31436 31437/* */ 31438 31439// inline hooks to be invoked on component VNodes during patch 31440var componentVNodeHooks = { 31441 init: function init (vnode, hydrating) { 31442 if ( 31443 vnode.componentInstance && 31444 !vnode.componentInstance._isDestroyed && 31445 vnode.data.keepAlive 31446 ) { 31447 // kept-alive components, treat as a patch 31448 var mountedNode = vnode; // work around flow 31449 componentVNodeHooks.prepatch(mountedNode, mountedNode); 31450 } else { 31451 var child = vnode.componentInstance = createComponentInstanceForVnode( 31452 vnode, 31453 activeInstance 31454 ); 31455 child.$mount(hydrating ? vnode.elm : undefined, hydrating); 31456 } 31457 }, 31458 31459 prepatch: function prepatch (oldVnode, vnode) { 31460 var options = vnode.componentOptions; 31461 var child = vnode.componentInstance = oldVnode.componentInstance; 31462 updateChildComponent( 31463 child, 31464 options.propsData, // updated props 31465 options.listeners, // updated listeners 31466 vnode, // new parent vnode 31467 options.children // new children 31468 ); 31469 }, 31470 31471 insert: function insert (vnode) { 31472 var context = vnode.context; 31473 var componentInstance = vnode.componentInstance; 31474 if (!componentInstance._isMounted) { 31475 componentInstance._isMounted = true; 31476 callHook(componentInstance, 'mounted'); 31477 } 31478 if (vnode.data.keepAlive) { 31479 if (context._isMounted) { 31480 // vue-router#1212 31481 // During updates, a kept-alive component's child components may 31482 // change, so directly walking the tree here may call activated hooks 31483 // on incorrect children. Instead we push them into a queue which will 31484 // be processed after the whole patch process ended. 31485 queueActivatedComponent(componentInstance); 31486 } else { 31487 activateChildComponent(componentInstance, true /* direct */); 31488 } 31489 } 31490 }, 31491 31492 destroy: function destroy (vnode) { 31493 var componentInstance = vnode.componentInstance; 31494 if (!componentInstance._isDestroyed) { 31495 if (!vnode.data.keepAlive) { 31496 componentInstance.$destroy(); 31497 } else { 31498 deactivateChildComponent(componentInstance, true /* direct */); 31499 } 31500 } 31501 } 31502}; 31503 31504var hooksToMerge = Object.keys(componentVNodeHooks); 31505 31506function createComponent ( 31507 Ctor, 31508 data, 31509 context, 31510 children, 31511 tag 31512) { 31513 if (isUndef(Ctor)) { 31514 return 31515 } 31516 31517 var baseCtor = context.$options._base; 31518 31519 // plain options object: turn it into a constructor 31520 if (isObject(Ctor)) { 31521 Ctor = baseCtor.extend(Ctor); 31522 } 31523 31524 // if at this stage it's not a constructor or an async component factory, 31525 // reject. 31526 if (typeof Ctor !== 'function') { 31527 if (true) { 31528 warn(("Invalid Component definition: " + (String(Ctor))), context); 31529 } 31530 return 31531 } 31532 31533 // async component 31534 var asyncFactory; 31535 if (isUndef(Ctor.cid)) { 31536 asyncFactory = Ctor; 31537 Ctor = resolveAsyncComponent(asyncFactory, baseCtor); 31538 if (Ctor === undefined) { 31539 // return a placeholder node for async component, which is rendered 31540 // as a comment node but preserves all the raw information for the node. 31541 // the information will be used for async server-rendering and hydration. 31542 return createAsyncPlaceholder( 31543 asyncFactory, 31544 data, 31545 context, 31546 children, 31547 tag 31548 ) 31549 } 31550 } 31551 31552 data = data || {}; 31553 31554 // resolve constructor options in case global mixins are applied after 31555 // component constructor creation 31556 resolveConstructorOptions(Ctor); 31557 31558 // transform component v-model data into props & events 31559 if (isDef(data.model)) { 31560 transformModel(Ctor.options, data); 31561 } 31562 31563 // extract props 31564 var propsData = extractPropsFromVNodeData(data, Ctor, tag); 31565 31566 // functional component 31567 if (isTrue(Ctor.options.functional)) { 31568 return createFunctionalComponent(Ctor, propsData, data, context, children) 31569 } 31570 31571 // extract listeners, since these needs to be treated as 31572 // child component listeners instead of DOM listeners 31573 var listeners = data.on; 31574 // replace with listeners with .native modifier 31575 // so it gets processed during parent component patch. 31576 data.on = data.nativeOn; 31577 31578 if (isTrue(Ctor.options.abstract)) { 31579 // abstract components do not keep anything 31580 // other than props & listeners & slot 31581 31582 // work around flow 31583 var slot = data.slot; 31584 data = {}; 31585 if (slot) { 31586 data.slot = slot; 31587 } 31588 } 31589 31590 // install component management hooks onto the placeholder node 31591 installComponentHooks(data); 31592 31593 // return a placeholder vnode 31594 var name = Ctor.options.name || tag; 31595 var vnode = new VNode( 31596 ("vue-component-" + (Ctor.cid) + (name ? ("-" + name) : '')), 31597 data, undefined, undefined, undefined, context, 31598 { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children }, 31599 asyncFactory 31600 ); 31601 31602 return vnode 31603} 31604 31605function createComponentInstanceForVnode ( 31606 // we know it's MountedComponentVNode but flow doesn't 31607 vnode, 31608 // activeInstance in lifecycle state 31609 parent 31610) { 31611 var options = { 31612 _isComponent: true, 31613 _parentVnode: vnode, 31614 parent: parent 31615 }; 31616 // check inline-template render functions 31617 var inlineTemplate = vnode.data.inlineTemplate; 31618 if (isDef(inlineTemplate)) { 31619 options.render = inlineTemplate.render; 31620 options.staticRenderFns = inlineTemplate.staticRenderFns; 31621 } 31622 return new vnode.componentOptions.Ctor(options) 31623} 31624 31625function installComponentHooks (data) { 31626 var hooks = data.hook || (data.hook = {}); 31627 for (var i = 0; i < hooksToMerge.length; i++) { 31628 var key = hooksToMerge[i]; 31629 var existing = hooks[key]; 31630 var toMerge = componentVNodeHooks[key]; 31631 if (existing !== toMerge && !(existing && existing._merged)) { 31632 hooks[key] = existing ? mergeHook$1(toMerge, existing) : toMerge; 31633 } 31634 } 31635} 31636 31637function mergeHook$1 (f1, f2) { 31638 var merged = function (a, b) { 31639 // flow complains about extra args which is why we use any 31640 f1(a, b); 31641 f2(a, b); 31642 }; 31643 merged._merged = true; 31644 return merged 31645} 31646 31647// transform component v-model info (value and callback) into 31648// prop and event handler respectively. 31649function transformModel (options, data) { 31650 var prop = (options.model && options.model.prop) || 'value'; 31651 var event = (options.model && options.model.event) || 'input' 31652 ;(data.attrs || (data.attrs = {}))[prop] = data.model.value; 31653 var on = data.on || (data.on = {}); 31654 var existing = on[event]; 31655 var callback = data.model.callback; 31656 if (isDef(existing)) { 31657 if ( 31658 Array.isArray(existing) 31659 ? existing.indexOf(callback) === -1 31660 : existing !== callback 31661 ) { 31662 on[event] = [callback].concat(existing); 31663 } 31664 } else { 31665 on[event] = callback; 31666 } 31667} 31668 31669/* */ 31670 31671var SIMPLE_NORMALIZE = 1; 31672var ALWAYS_NORMALIZE = 2; 31673 31674// wrapper function for providing a more flexible interface 31675// without getting yelled at by flow 31676function createElement ( 31677 context, 31678 tag, 31679 data, 31680 children, 31681 normalizationType, 31682 alwaysNormalize 31683) { 31684 if (Array.isArray(data) || isPrimitive(data)) { 31685 normalizationType = children; 31686 children = data; 31687 data = undefined; 31688 } 31689 if (isTrue(alwaysNormalize)) { 31690 normalizationType = ALWAYS_NORMALIZE; 31691 } 31692 return _createElement(context, tag, data, children, normalizationType) 31693} 31694 31695function _createElement ( 31696 context, 31697 tag, 31698 data, 31699 children, 31700 normalizationType 31701) { 31702 if (isDef(data) && isDef((data).__ob__)) { 31703 true && warn( 31704 "Avoid using observed data object as vnode data: " + (JSON.stringify(data)) + "\n" + 31705 'Always create fresh vnode data objects in each render!', 31706 context 31707 ); 31708 return createEmptyVNode() 31709 } 31710 // object syntax in v-bind 31711 if (isDef(data) && isDef(data.is)) { 31712 tag = data.is; 31713 } 31714 if (!tag) { 31715 // in case of component :is set to falsy value 31716 return createEmptyVNode() 31717 } 31718 // warn against non-primitive key 31719 if ( true && 31720 isDef(data) && isDef(data.key) && !isPrimitive(data.key) 31721 ) { 31722 { 31723 warn( 31724 'Avoid using non-primitive value as key, ' + 31725 'use string/number value instead.', 31726 context 31727 ); 31728 } 31729 } 31730 // support single function children as default scoped slot 31731 if (Array.isArray(children) && 31732 typeof children[0] === 'function' 31733 ) { 31734 data = data || {}; 31735 data.scopedSlots = { default: children[0] }; 31736 children.length = 0; 31737 } 31738 if (normalizationType === ALWAYS_NORMALIZE) { 31739 children = normalizeChildren(children); 31740 } else if (normalizationType === SIMPLE_NORMALIZE) { 31741 children = simpleNormalizeChildren(children); 31742 } 31743 var vnode, ns; 31744 if (typeof tag === 'string') { 31745 var Ctor; 31746 ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag); 31747 if (config.isReservedTag(tag)) { 31748 // platform built-in elements 31749 if ( true && isDef(data) && isDef(data.nativeOn) && data.tag !== 'component') { 31750 warn( 31751 ("The .native modifier for v-on is only valid on components but it was used on <" + tag + ">."), 31752 context 31753 ); 31754 } 31755 vnode = new VNode( 31756 config.parsePlatformTagName(tag), data, children, 31757 undefined, undefined, context 31758 ); 31759 } else if ((!data || !data.pre) && isDef(Ctor = resolveAsset(context.$options, 'components', tag))) { 31760 // component 31761 vnode = createComponent(Ctor, data, context, children, tag); 31762 } else { 31763 // unknown or unlisted namespaced elements 31764 // check at runtime because it may get assigned a namespace when its 31765 // parent normalizes children 31766 vnode = new VNode( 31767 tag, data, children, 31768 undefined, undefined, context 31769 ); 31770 } 31771 } else { 31772 // direct component options / constructor 31773 vnode = createComponent(tag, data, context, children); 31774 } 31775 if (Array.isArray(vnode)) { 31776 return vnode 31777 } else if (isDef(vnode)) { 31778 if (isDef(ns)) { applyNS(vnode, ns); } 31779 if (isDef(data)) { registerDeepBindings(data); } 31780 return vnode 31781 } else { 31782 return createEmptyVNode() 31783 } 31784} 31785 31786function applyNS (vnode, ns, force) { 31787 vnode.ns = ns; 31788 if (vnode.tag === 'foreignObject') { 31789 // use default namespace inside foreignObject 31790 ns = undefined; 31791 force = true; 31792 } 31793 if (isDef(vnode.children)) { 31794 for (var i = 0, l = vnode.children.length; i < l; i++) { 31795 var child = vnode.children[i]; 31796 if (isDef(child.tag) && ( 31797 isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) { 31798 applyNS(child, ns, force); 31799 } 31800 } 31801 } 31802} 31803 31804// ref #5318 31805// necessary to ensure parent re-render when deep bindings like :style and 31806// :class are used on slot nodes 31807function registerDeepBindings (data) { 31808 if (isObject(data.style)) { 31809 traverse(data.style); 31810 } 31811 if (isObject(data.class)) { 31812 traverse(data.class); 31813 } 31814} 31815 31816/* */ 31817 31818function initRender (vm) { 31819 vm._vnode = null; // the root of the child tree 31820 vm._staticTrees = null; // v-once cached trees 31821 var options = vm.$options; 31822 var parentVnode = vm.$vnode = options._parentVnode; // the placeholder node in parent tree 31823 var renderContext = parentVnode && parentVnode.context; 31824 vm.$slots = resolveSlots(options._renderChildren, renderContext); 31825 vm.$scopedSlots = emptyObject; 31826 // bind the createElement fn to this instance 31827 // so that we get proper render context inside it. 31828 // args order: tag, data, children, normalizationType, alwaysNormalize 31829 // internal version is used by render functions compiled from templates 31830 vm._c = function (a, b, c, d) { return createElement(vm, a, b, c, d, false); }; 31831 // normalization is always applied for the public version, used in 31832 // user-written render functions. 31833 vm.$createElement = function (a, b, c, d) { return createElement(vm, a, b, c, d, true); }; 31834 31835 // $attrs & $listeners are exposed for easier HOC creation. 31836 // they need to be reactive so that HOCs using them are always updated 31837 var parentData = parentVnode && parentVnode.data; 31838 31839 /* istanbul ignore else */ 31840 if (true) { 31841 defineReactive$$1(vm, '$attrs', parentData && parentData.attrs || emptyObject, function () { 31842 !isUpdatingChildComponent && warn("$attrs is readonly.", vm); 31843 }, true); 31844 defineReactive$$1(vm, '$listeners', options._parentListeners || emptyObject, function () { 31845 !isUpdatingChildComponent && warn("$listeners is readonly.", vm); 31846 }, true); 31847 } else {} 31848} 31849 31850var currentRenderingInstance = null; 31851 31852function renderMixin (Vue) { 31853 // install runtime convenience helpers 31854 installRenderHelpers(Vue.prototype); 31855 31856 Vue.prototype.$nextTick = function (fn) { 31857 return nextTick(fn, this) 31858 }; 31859 31860 Vue.prototype._render = function () { 31861 var vm = this; 31862 var ref = vm.$options; 31863 var render = ref.render; 31864 var _parentVnode = ref._parentVnode; 31865 31866 if (_parentVnode) { 31867 vm.$scopedSlots = normalizeScopedSlots( 31868 _parentVnode.data.scopedSlots, 31869 vm.$slots, 31870 vm.$scopedSlots 31871 ); 31872 } 31873 31874 // set parent vnode. this allows render functions to have access 31875 // to the data on the placeholder node. 31876 vm.$vnode = _parentVnode; 31877 // render self 31878 var vnode; 31879 try { 31880 // There's no need to maintain a stack because all render fns are called 31881 // separately from one another. Nested component's render fns are called 31882 // when parent component is patched. 31883 currentRenderingInstance = vm; 31884 vnode = render.call(vm._renderProxy, vm.$createElement); 31885 } catch (e) { 31886 handleError(e, vm, "render"); 31887 // return error render result, 31888 // or previous vnode to prevent render error causing blank component 31889 /* istanbul ignore else */ 31890 if ( true && vm.$options.renderError) { 31891 try { 31892 vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e); 31893 } catch (e) { 31894 handleError(e, vm, "renderError"); 31895 vnode = vm._vnode; 31896 } 31897 } else { 31898 vnode = vm._vnode; 31899 } 31900 } finally { 31901 currentRenderingInstance = null; 31902 } 31903 // if the returned array contains only a single node, allow it 31904 if (Array.isArray(vnode) && vnode.length === 1) { 31905 vnode = vnode[0]; 31906 } 31907 // return empty vnode in case the render function errored out 31908 if (!(vnode instanceof VNode)) { 31909 if ( true && Array.isArray(vnode)) { 31910 warn( 31911 'Multiple root nodes returned from render function. Render function ' + 31912 'should return a single root node.', 31913 vm 31914 ); 31915 } 31916 vnode = createEmptyVNode(); 31917 } 31918 // set parent 31919 vnode.parent = _parentVnode; 31920 return vnode 31921 }; 31922} 31923 31924/* */ 31925 31926function ensureCtor (comp, base) { 31927 if ( 31928 comp.__esModule || 31929 (hasSymbol && comp[Symbol.toStringTag] === 'Module') 31930 ) { 31931 comp = comp.default; 31932 } 31933 return isObject(comp) 31934 ? base.extend(comp) 31935 : comp 31936} 31937 31938function createAsyncPlaceholder ( 31939 factory, 31940 data, 31941 context, 31942 children, 31943 tag 31944) { 31945 var node = createEmptyVNode(); 31946 node.asyncFactory = factory; 31947 node.asyncMeta = { data: data, context: context, children: children, tag: tag }; 31948 return node 31949} 31950 31951function resolveAsyncComponent ( 31952 factory, 31953 baseCtor 31954) { 31955 if (isTrue(factory.error) && isDef(factory.errorComp)) { 31956 return factory.errorComp 31957 } 31958 31959 if (isDef(factory.resolved)) { 31960 return factory.resolved 31961 } 31962 31963 var owner = currentRenderingInstance; 31964 if (owner && isDef(factory.owners) && factory.owners.indexOf(owner) === -1) { 31965 // already pending 31966 factory.owners.push(owner); 31967 } 31968 31969 if (isTrue(factory.loading) && isDef(factory.loadingComp)) { 31970 return factory.loadingComp 31971 } 31972 31973 if (owner && !isDef(factory.owners)) { 31974 var owners = factory.owners = [owner]; 31975 var sync = true; 31976 var timerLoading = null; 31977 var timerTimeout = null 31978 31979 ;(owner).$on('hook:destroyed', function () { return remove(owners, owner); }); 31980 31981 var forceRender = function (renderCompleted) { 31982 for (var i = 0, l = owners.length; i < l; i++) { 31983 (owners[i]).$forceUpdate(); 31984 } 31985 31986 if (renderCompleted) { 31987 owners.length = 0; 31988 if (timerLoading !== null) { 31989 clearTimeout(timerLoading); 31990 timerLoading = null; 31991 } 31992 if (timerTimeout !== null) { 31993 clearTimeout(timerTimeout); 31994 timerTimeout = null; 31995 } 31996 } 31997 }; 31998 31999 var resolve = once(function (res) { 32000 // cache resolved 32001 factory.resolved = ensureCtor(res, baseCtor); 32002 // invoke callbacks only if this is not a synchronous resolve 32003 // (async resolves are shimmed as synchronous during SSR) 32004 if (!sync) { 32005 forceRender(true); 32006 } else { 32007 owners.length = 0; 32008 } 32009 }); 32010 32011 var reject = once(function (reason) { 32012 true && warn( 32013 "Failed to resolve async component: " + (String(factory)) + 32014 (reason ? ("\nReason: " + reason) : '') 32015 ); 32016 if (isDef(factory.errorComp)) { 32017 factory.error = true; 32018 forceRender(true); 32019 } 32020 }); 32021 32022 var res = factory(resolve, reject); 32023 32024 if (isObject(res)) { 32025 if (isPromise(res)) { 32026 // () => Promise 32027 if (isUndef(factory.resolved)) { 32028 res.then(resolve, reject); 32029 } 32030 } else if (isPromise(res.component)) { 32031 res.component.then(resolve, reject); 32032 32033 if (isDef(res.error)) { 32034 factory.errorComp = ensureCtor(res.error, baseCtor); 32035 } 32036 32037 if (isDef(res.loading)) { 32038 factory.loadingComp = ensureCtor(res.loading, baseCtor); 32039 if (res.delay === 0) { 32040 factory.loading = true; 32041 } else { 32042 timerLoading = setTimeout(function () { 32043 timerLoading = null; 32044 if (isUndef(factory.resolved) && isUndef(factory.error)) { 32045 factory.loading = true; 32046 forceRender(false); 32047 } 32048 }, res.delay || 200); 32049 } 32050 } 32051 32052 if (isDef(res.timeout)) { 32053 timerTimeout = setTimeout(function () { 32054 timerTimeout = null; 32055 if (isUndef(factory.resolved)) { 32056 reject( 32057 true 32058 ? ("timeout (" + (res.timeout) + "ms)") 32059 : 0 32060 ); 32061 } 32062 }, res.timeout); 32063 } 32064 } 32065 } 32066 32067 sync = false; 32068 // return in case resolved synchronously 32069 return factory.loading 32070 ? factory.loadingComp 32071 : factory.resolved 32072 } 32073} 32074 32075/* */ 32076 32077function getFirstComponentChild (children) { 32078 if (Array.isArray(children)) { 32079 for (var i = 0; i < children.length; i++) { 32080 var c = children[i]; 32081 if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) { 32082 return c 32083 } 32084 } 32085 } 32086} 32087 32088/* */ 32089 32090/* */ 32091 32092function initEvents (vm) { 32093 vm._events = Object.create(null); 32094 vm._hasHookEvent = false; 32095 // init parent attached events 32096 var listeners = vm.$options._parentListeners; 32097 if (listeners) { 32098 updateComponentListeners(vm, listeners); 32099 } 32100} 32101 32102var target; 32103 32104function add (event, fn) { 32105 target.$on(event, fn); 32106} 32107 32108function remove$1 (event, fn) { 32109 target.$off(event, fn); 32110} 32111 32112function createOnceHandler (event, fn) { 32113 var _target = target; 32114 return function onceHandler () { 32115 var res = fn.apply(null, arguments); 32116 if (res !== null) { 32117 _target.$off(event, onceHandler); 32118 } 32119 } 32120} 32121 32122function updateComponentListeners ( 32123 vm, 32124 listeners, 32125 oldListeners 32126) { 32127 target = vm; 32128 updateListeners(listeners, oldListeners || {}, add, remove$1, createOnceHandler, vm); 32129 target = undefined; 32130} 32131 32132function eventsMixin (Vue) { 32133 var hookRE = /^hook:/; 32134 Vue.prototype.$on = function (event, fn) { 32135 var vm = this; 32136 if (Array.isArray(event)) { 32137 for (var i = 0, l = event.length; i < l; i++) { 32138 vm.$on(event[i], fn); 32139 } 32140 } else { 32141 (vm._events[event] || (vm._events[event] = [])).push(fn); 32142 // optimize hook:event cost by using a boolean flag marked at registration 32143 // instead of a hash lookup 32144 if (hookRE.test(event)) { 32145 vm._hasHookEvent = true; 32146 } 32147 } 32148 return vm 32149 }; 32150 32151 Vue.prototype.$once = function (event, fn) { 32152 var vm = this; 32153 function on () { 32154 vm.$off(event, on); 32155 fn.apply(vm, arguments); 32156 } 32157 on.fn = fn; 32158 vm.$on(event, on); 32159 return vm 32160 }; 32161 32162 Vue.prototype.$off = function (event, fn) { 32163 var vm = this; 32164 // all 32165 if (!arguments.length) { 32166 vm._events = Object.create(null); 32167 return vm 32168 } 32169 // array of events 32170 if (Array.isArray(event)) { 32171 for (var i$1 = 0, l = event.length; i$1 < l; i$1++) { 32172 vm.$off(event[i$1], fn); 32173 } 32174 return vm 32175 } 32176 // specific event 32177 var cbs = vm._events[event]; 32178 if (!cbs) { 32179 return vm 32180 } 32181 if (!fn) { 32182 vm._events[event] = null; 32183 return vm 32184 } 32185 // specific handler 32186 var cb; 32187 var i = cbs.length; 32188 while (i--) { 32189 cb = cbs[i]; 32190 if (cb === fn || cb.fn === fn) { 32191 cbs.splice(i, 1); 32192 break 32193 } 32194 } 32195 return vm 32196 }; 32197 32198 Vue.prototype.$emit = function (event) { 32199 var vm = this; 32200 if (true) { 32201 var lowerCaseEvent = event.toLowerCase(); 32202 if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) { 32203 tip( 32204 "Event \"" + lowerCaseEvent + "\" is emitted in component " + 32205 (formatComponentName(vm)) + " but the handler is registered for \"" + event + "\". " + 32206 "Note that HTML attributes are case-insensitive and you cannot use " + 32207 "v-on to listen to camelCase events when using in-DOM templates. " + 32208 "You should probably use \"" + (hyphenate(event)) + "\" instead of \"" + event + "\"." 32209 ); 32210 } 32211 } 32212 var cbs = vm._events[event]; 32213 if (cbs) { 32214 cbs = cbs.length > 1 ? toArray(cbs) : cbs; 32215 var args = toArray(arguments, 1); 32216 var info = "event handler for \"" + event + "\""; 32217 for (var i = 0, l = cbs.length; i < l; i++) { 32218 invokeWithErrorHandling(cbs[i], vm, args, vm, info); 32219 } 32220 } 32221 return vm 32222 }; 32223} 32224 32225/* */ 32226 32227var activeInstance = null; 32228var isUpdatingChildComponent = false; 32229 32230function setActiveInstance(vm) { 32231 var prevActiveInstance = activeInstance; 32232 activeInstance = vm; 32233 return function () { 32234 activeInstance = prevActiveInstance; 32235 } 32236} 32237 32238function initLifecycle (vm) { 32239 var options = vm.$options; 32240 32241 // locate first non-abstract parent 32242 var parent = options.parent; 32243 if (parent && !options.abstract) { 32244 while (parent.$options.abstract && parent.$parent) { 32245 parent = parent.$parent; 32246 } 32247 parent.$children.push(vm); 32248 } 32249 32250 vm.$parent = parent; 32251 vm.$root = parent ? parent.$root : vm; 32252 32253 vm.$children = []; 32254 vm.$refs = {}; 32255 32256 vm._watcher = null; 32257 vm._inactive = null; 32258 vm._directInactive = false; 32259 vm._isMounted = false; 32260 vm._isDestroyed = false; 32261 vm._isBeingDestroyed = false; 32262} 32263 32264function lifecycleMixin (Vue) { 32265 Vue.prototype._update = function (vnode, hydrating) { 32266 var vm = this; 32267 var prevEl = vm.$el; 32268 var prevVnode = vm._vnode; 32269 var restoreActiveInstance = setActiveInstance(vm); 32270 vm._vnode = vnode; 32271 // Vue.prototype.__patch__ is injected in entry points 32272 // based on the rendering backend used. 32273 if (!prevVnode) { 32274 // initial render 32275 vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false /* removeOnly */); 32276 } else { 32277 // updates 32278 vm.$el = vm.__patch__(prevVnode, vnode); 32279 } 32280 restoreActiveInstance(); 32281 // update __vue__ reference 32282 if (prevEl) { 32283 prevEl.__vue__ = null; 32284 } 32285 if (vm.$el) { 32286 vm.$el.__vue__ = vm; 32287 } 32288 // if parent is an HOC, update its $el as well 32289 if (vm.$vnode && vm.$parent && vm.$vnode === vm.$parent._vnode) { 32290 vm.$parent.$el = vm.$el; 32291 } 32292 // updated hook is called by the scheduler to ensure that children are 32293 // updated in a parent's updated hook. 32294 }; 32295 32296 Vue.prototype.$forceUpdate = function () { 32297 var vm = this; 32298 if (vm._watcher) { 32299 vm._watcher.update(); 32300 } 32301 }; 32302 32303 Vue.prototype.$destroy = function () { 32304 var vm = this; 32305 if (vm._isBeingDestroyed) { 32306 return 32307 } 32308 callHook(vm, 'beforeDestroy'); 32309 vm._isBeingDestroyed = true; 32310 // remove self from parent 32311 var parent = vm.$parent; 32312 if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) { 32313 remove(parent.$children, vm); 32314 } 32315 // teardown watchers 32316 if (vm._watcher) { 32317 vm._watcher.teardown(); 32318 } 32319 var i = vm._watchers.length; 32320 while (i--) { 32321 vm._watchers[i].teardown(); 32322 } 32323 // remove reference from data ob 32324 // frozen object may not have observer. 32325 if (vm._data.__ob__) { 32326 vm._data.__ob__.vmCount--; 32327 } 32328 // call the last hook... 32329 vm._isDestroyed = true; 32330 // invoke destroy hooks on current rendered tree 32331 vm.__patch__(vm._vnode, null); 32332 // fire destroyed hook 32333 callHook(vm, 'destroyed'); 32334 // turn off all instance listeners. 32335 vm.$off(); 32336 // remove __vue__ reference 32337 if (vm.$el) { 32338 vm.$el.__vue__ = null; 32339 } 32340 // release circular reference (#6759) 32341 if (vm.$vnode) { 32342 vm.$vnode.parent = null; 32343 } 32344 }; 32345} 32346 32347function mountComponent ( 32348 vm, 32349 el, 32350 hydrating 32351) { 32352 vm.$el = el; 32353 if (!vm.$options.render) { 32354 vm.$options.render = createEmptyVNode; 32355 if (true) { 32356 /* istanbul ignore if */ 32357 if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') || 32358 vm.$options.el || el) { 32359 warn( 32360 'You are using the runtime-only build of Vue where the template ' + 32361 'compiler is not available. Either pre-compile the templates into ' + 32362 'render functions, or use the compiler-included build.', 32363 vm 32364 ); 32365 } else { 32366 warn( 32367 'Failed to mount component: template or render function not defined.', 32368 vm 32369 ); 32370 } 32371 } 32372 } 32373 callHook(vm, 'beforeMount'); 32374 32375 var updateComponent; 32376 /* istanbul ignore if */ 32377 if ( true && config.performance && mark) { 32378 updateComponent = function () { 32379 var name = vm._name; 32380 var id = vm._uid; 32381 var startTag = "vue-perf-start:" + id; 32382 var endTag = "vue-perf-end:" + id; 32383 32384 mark(startTag); 32385 var vnode = vm._render(); 32386 mark(endTag); 32387 measure(("vue " + name + " render"), startTag, endTag); 32388 32389 mark(startTag); 32390 vm._update(vnode, hydrating); 32391 mark(endTag); 32392 measure(("vue " + name + " patch"), startTag, endTag); 32393 }; 32394 } else { 32395 updateComponent = function () { 32396 vm._update(vm._render(), hydrating); 32397 }; 32398 } 32399 32400 // we set this to vm._watcher inside the watcher's constructor 32401 // since the watcher's initial patch may call $forceUpdate (e.g. inside child 32402 // component's mounted hook), which relies on vm._watcher being already defined 32403 new Watcher(vm, updateComponent, noop, { 32404 before: function before () { 32405 if (vm._isMounted && !vm._isDestroyed) { 32406 callHook(vm, 'beforeUpdate'); 32407 } 32408 } 32409 }, true /* isRenderWatcher */); 32410 hydrating = false; 32411 32412 // manually mounted instance, call mounted on self 32413 // mounted is called for render-created child components in its inserted hook 32414 if (vm.$vnode == null) { 32415 vm._isMounted = true; 32416 callHook(vm, 'mounted'); 32417 } 32418 return vm 32419} 32420 32421function updateChildComponent ( 32422 vm, 32423 propsData, 32424 listeners, 32425 parentVnode, 32426 renderChildren 32427) { 32428 if (true) { 32429 isUpdatingChildComponent = true; 32430 } 32431 32432 // determine whether component has slot children 32433 // we need to do this before overwriting $options._renderChildren. 32434 32435 // check if there are dynamic scopedSlots (hand-written or compiled but with 32436 // dynamic slot names). Static scoped slots compiled from template has the 32437 // "$stable" marker. 32438 var newScopedSlots = parentVnode.data.scopedSlots; 32439 var oldScopedSlots = vm.$scopedSlots; 32440 var hasDynamicScopedSlot = !!( 32441 (newScopedSlots && !newScopedSlots.$stable) || 32442 (oldScopedSlots !== emptyObject && !oldScopedSlots.$stable) || 32443 (newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key) || 32444 (!newScopedSlots && vm.$scopedSlots.$key) 32445 ); 32446 32447 // Any static slot children from the parent may have changed during parent's 32448 // update. Dynamic scoped slots may also have changed. In such cases, a forced 32449 // update is necessary to ensure correctness. 32450 var needsForceUpdate = !!( 32451 renderChildren || // has new static slots 32452 vm.$options._renderChildren || // has old static slots 32453 hasDynamicScopedSlot 32454 ); 32455 32456 vm.$options._parentVnode = parentVnode; 32457 vm.$vnode = parentVnode; // update vm's placeholder node without re-render 32458 32459 if (vm._vnode) { // update child tree's parent 32460 vm._vnode.parent = parentVnode; 32461 } 32462 vm.$options._renderChildren = renderChildren; 32463 32464 // update $attrs and $listeners hash 32465 // these are also reactive so they may trigger child update if the child 32466 // used them during render 32467 vm.$attrs = parentVnode.data.attrs || emptyObject; 32468 vm.$listeners = listeners || emptyObject; 32469 32470 // update props 32471 if (propsData && vm.$options.props) { 32472 toggleObserving(false); 32473 var props = vm._props; 32474 var propKeys = vm.$options._propKeys || []; 32475 for (var i = 0; i < propKeys.length; i++) { 32476 var key = propKeys[i]; 32477 var propOptions = vm.$options.props; // wtf flow? 32478 props[key] = validateProp(key, propOptions, propsData, vm); 32479 } 32480 toggleObserving(true); 32481 // keep a copy of raw propsData 32482 vm.$options.propsData = propsData; 32483 } 32484 32485 // update listeners 32486 listeners = listeners || emptyObject; 32487 var oldListeners = vm.$options._parentListeners; 32488 vm.$options._parentListeners = listeners; 32489 updateComponentListeners(vm, listeners, oldListeners); 32490 32491 // resolve slots + force update if has children 32492 if (needsForceUpdate) { 32493 vm.$slots = resolveSlots(renderChildren, parentVnode.context); 32494 vm.$forceUpdate(); 32495 } 32496 32497 if (true) { 32498 isUpdatingChildComponent = false; 32499 } 32500} 32501 32502function isInInactiveTree (vm) { 32503 while (vm && (vm = vm.$parent)) { 32504 if (vm._inactive) { return true } 32505 } 32506 return false 32507} 32508 32509function activateChildComponent (vm, direct) { 32510 if (direct) { 32511 vm._directInactive = false; 32512 if (isInInactiveTree(vm)) { 32513 return 32514 } 32515 } else if (vm._directInactive) { 32516 return 32517 } 32518 if (vm._inactive || vm._inactive === null) { 32519 vm._inactive = false; 32520 for (var i = 0; i < vm.$children.length; i++) { 32521 activateChildComponent(vm.$children[i]); 32522 } 32523 callHook(vm, 'activated'); 32524 } 32525} 32526 32527function deactivateChildComponent (vm, direct) { 32528 if (direct) { 32529 vm._directInactive = true; 32530 if (isInInactiveTree(vm)) { 32531 return 32532 } 32533 } 32534 if (!vm._inactive) { 32535 vm._inactive = true; 32536 for (var i = 0; i < vm.$children.length; i++) { 32537 deactivateChildComponent(vm.$children[i]); 32538 } 32539 callHook(vm, 'deactivated'); 32540 } 32541} 32542 32543function callHook (vm, hook) { 32544 // #7573 disable dep collection when invoking lifecycle hooks 32545 pushTarget(); 32546 var handlers = vm.$options[hook]; 32547 var info = hook + " hook"; 32548 if (handlers) { 32549 for (var i = 0, j = handlers.length; i < j; i++) { 32550 invokeWithErrorHandling(handlers[i], vm, null, vm, info); 32551 } 32552 } 32553 if (vm._hasHookEvent) { 32554 vm.$emit('hook:' + hook); 32555 } 32556 popTarget(); 32557} 32558 32559/* */ 32560 32561var MAX_UPDATE_COUNT = 100; 32562 32563var queue = []; 32564var activatedChildren = []; 32565var has = {}; 32566var circular = {}; 32567var waiting = false; 32568var flushing = false; 32569var index = 0; 32570 32571/** 32572 * Reset the scheduler's state. 32573 */ 32574function resetSchedulerState () { 32575 index = queue.length = activatedChildren.length = 0; 32576 has = {}; 32577 if (true) { 32578 circular = {}; 32579 } 32580 waiting = flushing = false; 32581} 32582 32583// Async edge case #6566 requires saving the timestamp when event listeners are 32584// attached. However, calling performance.now() has a perf overhead especially 32585// if the page has thousands of event listeners. Instead, we take a timestamp 32586// every time the scheduler flushes and use that for all event listeners 32587// attached during that flush. 32588var currentFlushTimestamp = 0; 32589 32590// Async edge case fix requires storing an event listener's attach timestamp. 32591var getNow = Date.now; 32592 32593// Determine what event timestamp the browser is using. Annoyingly, the 32594// timestamp can either be hi-res (relative to page load) or low-res 32595// (relative to UNIX epoch), so in order to compare time we have to use the 32596// same timestamp type when saving the flush timestamp. 32597// All IE versions use low-res event timestamps, and have problematic clock 32598// implementations (#9632) 32599if (inBrowser && !isIE) { 32600 var performance = window.performance; 32601 if ( 32602 performance && 32603 typeof performance.now === 'function' && 32604 getNow() > document.createEvent('Event').timeStamp 32605 ) { 32606 // if the event timestamp, although evaluated AFTER the Date.now(), is 32607 // smaller than it, it means the event is using a hi-res timestamp, 32608 // and we need to use the hi-res version for event listener timestamps as 32609 // well. 32610 getNow = function () { return performance.now(); }; 32611 } 32612} 32613 32614/** 32615 * Flush both queues and run the watchers. 32616 */ 32617function flushSchedulerQueue () { 32618 currentFlushTimestamp = getNow(); 32619 flushing = true; 32620 var watcher, id; 32621 32622 // Sort queue before flush. 32623 // This ensures that: 32624 // 1. Components are updated from parent to child. (because parent is always 32625 // created before the child) 32626 // 2. A component's user watchers are run before its render watcher (because 32627 // user watchers are created before the render watcher) 32628 // 3. If a component is destroyed during a parent component's watcher run, 32629 // its watchers can be skipped. 32630 queue.sort(function (a, b) { return a.id - b.id; }); 32631 32632 // do not cache length because more watchers might be pushed 32633 // as we run existing watchers 32634 for (index = 0; index < queue.length; index++) { 32635 watcher = queue[index]; 32636 if (watcher.before) { 32637 watcher.before(); 32638 } 32639 id = watcher.id; 32640 has[id] = null; 32641 watcher.run(); 32642 // in dev build, check and stop circular updates. 32643 if ( true && has[id] != null) { 32644 circular[id] = (circular[id] || 0) + 1; 32645 if (circular[id] > MAX_UPDATE_COUNT) { 32646 warn( 32647 'You may have an infinite update loop ' + ( 32648 watcher.user 32649 ? ("in watcher with expression \"" + (watcher.expression) + "\"") 32650 : "in a component render function." 32651 ), 32652 watcher.vm 32653 ); 32654 break 32655 } 32656 } 32657 } 32658 32659 // keep copies of post queues before resetting state 32660 var activatedQueue = activatedChildren.slice(); 32661 var updatedQueue = queue.slice(); 32662 32663 resetSchedulerState(); 32664 32665 // call component updated and activated hooks 32666 callActivatedHooks(activatedQueue); 32667 callUpdatedHooks(updatedQueue); 32668 32669 // devtool hook 32670 /* istanbul ignore if */ 32671 if (devtools && config.devtools) { 32672 devtools.emit('flush'); 32673 } 32674} 32675 32676function callUpdatedHooks (queue) { 32677 var i = queue.length; 32678 while (i--) { 32679 var watcher = queue[i]; 32680 var vm = watcher.vm; 32681 if (vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) { 32682 callHook(vm, 'updated'); 32683 } 32684 } 32685} 32686 32687/** 32688 * Queue a kept-alive component that was activated during patch. 32689 * The queue will be processed after the entire tree has been patched. 32690 */ 32691function queueActivatedComponent (vm) { 32692 // setting _inactive to false here so that a render function can 32693 // rely on checking whether it's in an inactive tree (e.g. router-view) 32694 vm._inactive = false; 32695 activatedChildren.push(vm); 32696} 32697 32698function callActivatedHooks (queue) { 32699 for (var i = 0; i < queue.length; i++) { 32700 queue[i]._inactive = true; 32701 activateChildComponent(queue[i], true /* true */); 32702 } 32703} 32704 32705/** 32706 * Push a watcher into the watcher queue. 32707 * Jobs with duplicate IDs will be skipped unless it's 32708 * pushed when the queue is being flushed. 32709 */ 32710function queueWatcher (watcher) { 32711 var id = watcher.id; 32712 if (has[id] == null) { 32713 has[id] = true; 32714 if (!flushing) { 32715 queue.push(watcher); 32716 } else { 32717 // if already flushing, splice the watcher based on its id 32718 // if already past its id, it will be run next immediately. 32719 var i = queue.length - 1; 32720 while (i > index && queue[i].id > watcher.id) { 32721 i--; 32722 } 32723 queue.splice(i + 1, 0, watcher); 32724 } 32725 // queue the flush 32726 if (!waiting) { 32727 waiting = true; 32728 32729 if ( true && !config.async) { 32730 flushSchedulerQueue(); 32731 return 32732 } 32733 nextTick(flushSchedulerQueue); 32734 } 32735 } 32736} 32737 32738/* */ 32739 32740 32741 32742var uid$2 = 0; 32743 32744/** 32745 * A watcher parses an expression, collects dependencies, 32746 * and fires callback when the expression value changes. 32747 * This is used for both the $watch() api and directives. 32748 */ 32749var Watcher = function Watcher ( 32750 vm, 32751 expOrFn, 32752 cb, 32753 options, 32754 isRenderWatcher 32755) { 32756 this.vm = vm; 32757 if (isRenderWatcher) { 32758 vm._watcher = this; 32759 } 32760 vm._watchers.push(this); 32761 // options 32762 if (options) { 32763 this.deep = !!options.deep; 32764 this.user = !!options.user; 32765 this.lazy = !!options.lazy; 32766 this.sync = !!options.sync; 32767 this.before = options.before; 32768 } else { 32769 this.deep = this.user = this.lazy = this.sync = false; 32770 } 32771 this.cb = cb; 32772 this.id = ++uid$2; // uid for batching 32773 this.active = true; 32774 this.dirty = this.lazy; // for lazy watchers 32775 this.deps = []; 32776 this.newDeps = []; 32777 this.depIds = new _Set(); 32778 this.newDepIds = new _Set(); 32779 this.expression = true 32780 ? expOrFn.toString() 32781 : 0; 32782 // parse expression for getter 32783 if (typeof expOrFn === 'function') { 32784 this.getter = expOrFn; 32785 } else { 32786 this.getter = parsePath(expOrFn); 32787 if (!this.getter) { 32788 this.getter = noop; 32789 true && warn( 32790 "Failed watching path: \"" + expOrFn + "\" " + 32791 'Watcher only accepts simple dot-delimited paths. ' + 32792 'For full control, use a function instead.', 32793 vm 32794 ); 32795 } 32796 } 32797 this.value = this.lazy 32798 ? undefined 32799 : this.get(); 32800}; 32801 32802/** 32803 * Evaluate the getter, and re-collect dependencies. 32804 */ 32805Watcher.prototype.get = function get () { 32806 pushTarget(this); 32807 var value; 32808 var vm = this.vm; 32809 try { 32810 value = this.getter.call(vm, vm); 32811 } catch (e) { 32812 if (this.user) { 32813 handleError(e, vm, ("getter for watcher \"" + (this.expression) + "\"")); 32814 } else { 32815 throw e 32816 } 32817 } finally { 32818 // "touch" every property so they are all tracked as 32819 // dependencies for deep watching 32820 if (this.deep) { 32821 traverse(value); 32822 } 32823 popTarget(); 32824 this.cleanupDeps(); 32825 } 32826 return value 32827}; 32828 32829/** 32830 * Add a dependency to this directive. 32831 */ 32832Watcher.prototype.addDep = function addDep (dep) { 32833 var id = dep.id; 32834 if (!this.newDepIds.has(id)) { 32835 this.newDepIds.add(id); 32836 this.newDeps.push(dep); 32837 if (!this.depIds.has(id)) { 32838 dep.addSub(this); 32839 } 32840 } 32841}; 32842 32843/** 32844 * Clean up for dependency collection. 32845 */ 32846Watcher.prototype.cleanupDeps = function cleanupDeps () { 32847 var i = this.deps.length; 32848 while (i--) { 32849 var dep = this.deps[i]; 32850 if (!this.newDepIds.has(dep.id)) { 32851 dep.removeSub(this); 32852 } 32853 } 32854 var tmp = this.depIds; 32855 this.depIds = this.newDepIds; 32856 this.newDepIds = tmp; 32857 this.newDepIds.clear(); 32858 tmp = this.deps; 32859 this.deps = this.newDeps; 32860 this.newDeps = tmp; 32861 this.newDeps.length = 0; 32862}; 32863 32864/** 32865 * Subscriber interface. 32866 * Will be called when a dependency changes. 32867 */ 32868Watcher.prototype.update = function update () { 32869 /* istanbul ignore else */ 32870 if (this.lazy) { 32871 this.dirty = true; 32872 } else if (this.sync) { 32873 this.run(); 32874 } else { 32875 queueWatcher(this); 32876 } 32877}; 32878 32879/** 32880 * Scheduler job interface. 32881 * Will be called by the scheduler. 32882 */ 32883Watcher.prototype.run = function run () { 32884 if (this.active) { 32885 var value = this.get(); 32886 if ( 32887 value !== this.value || 32888 // Deep watchers and watchers on Object/Arrays should fire even 32889 // when the value is the same, because the value may 32890 // have mutated. 32891 isObject(value) || 32892 this.deep 32893 ) { 32894 // set new value 32895 var oldValue = this.value; 32896 this.value = value; 32897 if (this.user) { 32898 var info = "callback for watcher \"" + (this.expression) + "\""; 32899 invokeWithErrorHandling(this.cb, this.vm, [value, oldValue], this.vm, info); 32900 } else { 32901 this.cb.call(this.vm, value, oldValue); 32902 } 32903 } 32904 } 32905}; 32906 32907/** 32908 * Evaluate the value of the watcher. 32909 * This only gets called for lazy watchers. 32910 */ 32911Watcher.prototype.evaluate = function evaluate () { 32912 this.value = this.get(); 32913 this.dirty = false; 32914}; 32915 32916/** 32917 * Depend on all deps collected by this watcher. 32918 */ 32919Watcher.prototype.depend = function depend () { 32920 var i = this.deps.length; 32921 while (i--) { 32922 this.deps[i].depend(); 32923 } 32924}; 32925 32926/** 32927 * Remove self from all dependencies' subscriber list. 32928 */ 32929Watcher.prototype.teardown = function teardown () { 32930 if (this.active) { 32931 // remove self from vm's watcher list 32932 // this is a somewhat expensive operation so we skip it 32933 // if the vm is being destroyed. 32934 if (!this.vm._isBeingDestroyed) { 32935 remove(this.vm._watchers, this); 32936 } 32937 var i = this.deps.length; 32938 while (i--) { 32939 this.deps[i].removeSub(this); 32940 } 32941 this.active = false; 32942 } 32943}; 32944 32945/* */ 32946 32947var sharedPropertyDefinition = { 32948 enumerable: true, 32949 configurable: true, 32950 get: noop, 32951 set: noop 32952}; 32953 32954function proxy (target, sourceKey, key) { 32955 sharedPropertyDefinition.get = function proxyGetter () { 32956 return this[sourceKey][key] 32957 }; 32958 sharedPropertyDefinition.set = function proxySetter (val) { 32959 this[sourceKey][key] = val; 32960 }; 32961 Object.defineProperty(target, key, sharedPropertyDefinition); 32962} 32963 32964function initState (vm) { 32965 vm._watchers = []; 32966 var opts = vm.$options; 32967 if (opts.props) { initProps(vm, opts.props); } 32968 if (opts.methods) { initMethods(vm, opts.methods); } 32969 if (opts.data) { 32970 initData(vm); 32971 } else { 32972 observe(vm._data = {}, true /* asRootData */); 32973 } 32974 if (opts.computed) { initComputed(vm, opts.computed); } 32975 if (opts.watch && opts.watch !== nativeWatch) { 32976 initWatch(vm, opts.watch); 32977 } 32978} 32979 32980function initProps (vm, propsOptions) { 32981 var propsData = vm.$options.propsData || {}; 32982 var props = vm._props = {}; 32983 // cache prop keys so that future props updates can iterate using Array 32984 // instead of dynamic object key enumeration. 32985 var keys = vm.$options._propKeys = []; 32986 var isRoot = !vm.$parent; 32987 // root instance props should be converted 32988 if (!isRoot) { 32989 toggleObserving(false); 32990 } 32991 var loop = function ( key ) { 32992 keys.push(key); 32993 var value = validateProp(key, propsOptions, propsData, vm); 32994 /* istanbul ignore else */ 32995 if (true) { 32996 var hyphenatedKey = hyphenate(key); 32997 if (isReservedAttribute(hyphenatedKey) || 32998 config.isReservedAttr(hyphenatedKey)) { 32999 warn( 33000 ("\"" + hyphenatedKey + "\" is a reserved attribute and cannot be used as component prop."), 33001 vm 33002 ); 33003 } 33004 defineReactive$$1(props, key, value, function () { 33005 if (!isRoot && !isUpdatingChildComponent) { 33006 warn( 33007 "Avoid mutating a prop directly since the value will be " + 33008 "overwritten whenever the parent component re-renders. " + 33009 "Instead, use a data or computed property based on the prop's " + 33010 "value. Prop being mutated: \"" + key + "\"", 33011 vm 33012 ); 33013 } 33014 }); 33015 } else {} 33016 // static props are already proxied on the component's prototype 33017 // during Vue.extend(). We only need to proxy props defined at 33018 // instantiation here. 33019 if (!(key in vm)) { 33020 proxy(vm, "_props", key); 33021 } 33022 }; 33023 33024 for (var key in propsOptions) loop( key ); 33025 toggleObserving(true); 33026} 33027 33028function initData (vm) { 33029 var data = vm.$options.data; 33030 data = vm._data = typeof data === 'function' 33031 ? getData(data, vm) 33032 : data || {}; 33033 if (!isPlainObject(data)) { 33034 data = {}; 33035 true && warn( 33036 'data functions should return an object:\n' + 33037 'https://vuejs.org/v2/guide/components.html#data-Must-Be-a-Function', 33038 vm 33039 ); 33040 } 33041 // proxy data on instance 33042 var keys = Object.keys(data); 33043 var props = vm.$options.props; 33044 var methods = vm.$options.methods; 33045 var i = keys.length; 33046 while (i--) { 33047 var key = keys[i]; 33048 if (true) { 33049 if (methods && hasOwn(methods, key)) { 33050 warn( 33051 ("Method \"" + key + "\" has already been defined as a data property."), 33052 vm 33053 ); 33054 } 33055 } 33056 if (props && hasOwn(props, key)) { 33057 true && warn( 33058 "The data property \"" + key + "\" is already declared as a prop. " + 33059 "Use prop default value instead.", 33060 vm 33061 ); 33062 } else if (!isReserved(key)) { 33063 proxy(vm, "_data", key); 33064 } 33065 } 33066 // observe data 33067 observe(data, true /* asRootData */); 33068} 33069 33070function getData (data, vm) { 33071 // #7573 disable dep collection when invoking data getters 33072 pushTarget(); 33073 try { 33074 return data.call(vm, vm) 33075 } catch (e) { 33076 handleError(e, vm, "data()"); 33077 return {} 33078 } finally { 33079 popTarget(); 33080 } 33081} 33082 33083var computedWatcherOptions = { lazy: true }; 33084 33085function initComputed (vm, computed) { 33086 // $flow-disable-line 33087 var watchers = vm._computedWatchers = Object.create(null); 33088 // computed properties are just getters during SSR 33089 var isSSR = isServerRendering(); 33090 33091 for (var key in computed) { 33092 var userDef = computed[key]; 33093 var getter = typeof userDef === 'function' ? userDef : userDef.get; 33094 if ( true && getter == null) { 33095 warn( 33096 ("Getter is missing for computed property \"" + key + "\"."), 33097 vm 33098 ); 33099 } 33100 33101 if (!isSSR) { 33102 // create internal watcher for the computed property. 33103 watchers[key] = new Watcher( 33104 vm, 33105 getter || noop, 33106 noop, 33107 computedWatcherOptions 33108 ); 33109 } 33110 33111 // component-defined computed properties are already defined on the 33112 // component prototype. We only need to define computed properties defined 33113 // at instantiation here. 33114 if (!(key in vm)) { 33115 defineComputed(vm, key, userDef); 33116 } else if (true) { 33117 if (key in vm.$data) { 33118 warn(("The computed property \"" + key + "\" is already defined in data."), vm); 33119 } else if (vm.$options.props && key in vm.$options.props) { 33120 warn(("The computed property \"" + key + "\" is already defined as a prop."), vm); 33121 } else if (vm.$options.methods && key in vm.$options.methods) { 33122 warn(("The computed property \"" + key + "\" is already defined as a method."), vm); 33123 } 33124 } 33125 } 33126} 33127 33128function defineComputed ( 33129 target, 33130 key, 33131 userDef 33132) { 33133 var shouldCache = !isServerRendering(); 33134 if (typeof userDef === 'function') { 33135 sharedPropertyDefinition.get = shouldCache 33136 ? createComputedGetter(key) 33137 : createGetterInvoker(userDef); 33138 sharedPropertyDefinition.set = noop; 33139 } else { 33140 sharedPropertyDefinition.get = userDef.get 33141 ? shouldCache && userDef.cache !== false 33142 ? createComputedGetter(key) 33143 : createGetterInvoker(userDef.get) 33144 : noop; 33145 sharedPropertyDefinition.set = userDef.set || noop; 33146 } 33147 if ( true && 33148 sharedPropertyDefinition.set === noop) { 33149 sharedPropertyDefinition.set = function () { 33150 warn( 33151 ("Computed property \"" + key + "\" was assigned to but it has no setter."), 33152 this 33153 ); 33154 }; 33155 } 33156 Object.defineProperty(target, key, sharedPropertyDefinition); 33157} 33158 33159function createComputedGetter (key) { 33160 return function computedGetter () { 33161 var watcher = this._computedWatchers && this._computedWatchers[key]; 33162 if (watcher) { 33163 if (watcher.dirty) { 33164 watcher.evaluate(); 33165 } 33166 if (Dep.target) { 33167 watcher.depend(); 33168 } 33169 return watcher.value 33170 } 33171 } 33172} 33173 33174function createGetterInvoker(fn) { 33175 return function computedGetter () { 33176 return fn.call(this, this) 33177 } 33178} 33179 33180function initMethods (vm, methods) { 33181 var props = vm.$options.props; 33182 for (var key in methods) { 33183 if (true) { 33184 if (typeof methods[key] !== 'function') { 33185 warn( 33186 "Method \"" + key + "\" has type \"" + (typeof methods[key]) + "\" in the component definition. " + 33187 "Did you reference the function correctly?", 33188 vm 33189 ); 33190 } 33191 if (props && hasOwn(props, key)) { 33192 warn( 33193 ("Method \"" + key + "\" has already been defined as a prop."), 33194 vm 33195 ); 33196 } 33197 if ((key in vm) && isReserved(key)) { 33198 warn( 33199 "Method \"" + key + "\" conflicts with an existing Vue instance method. " + 33200 "Avoid defining component methods that start with _ or $." 33201 ); 33202 } 33203 } 33204 vm[key] = typeof methods[key] !== 'function' ? noop : bind(methods[key], vm); 33205 } 33206} 33207 33208function initWatch (vm, watch) { 33209 for (var key in watch) { 33210 var handler = watch[key]; 33211 if (Array.isArray(handler)) { 33212 for (var i = 0; i < handler.length; i++) { 33213 createWatcher(vm, key, handler[i]); 33214 } 33215 } else { 33216 createWatcher(vm, key, handler); 33217 } 33218 } 33219} 33220 33221function createWatcher ( 33222 vm, 33223 expOrFn, 33224 handler, 33225 options 33226) { 33227 if (isPlainObject(handler)) { 33228 options = handler; 33229 handler = handler.handler; 33230 } 33231 if (typeof handler === 'string') { 33232 handler = vm[handler]; 33233 } 33234 return vm.$watch(expOrFn, handler, options) 33235} 33236 33237function stateMixin (Vue) { 33238 // flow somehow has problems with directly declared definition object 33239 // when using Object.defineProperty, so we have to procedurally build up 33240 // the object here. 33241 var dataDef = {}; 33242 dataDef.get = function () { return this._data }; 33243 var propsDef = {}; 33244 propsDef.get = function () { return this._props }; 33245 if (true) { 33246 dataDef.set = function () { 33247 warn( 33248 'Avoid replacing instance root $data. ' + 33249 'Use nested data properties instead.', 33250 this 33251 ); 33252 }; 33253 propsDef.set = function () { 33254 warn("$props is readonly.", this); 33255 }; 33256 } 33257 Object.defineProperty(Vue.prototype, '$data', dataDef); 33258 Object.defineProperty(Vue.prototype, '$props', propsDef); 33259 33260 Vue.prototype.$set = set; 33261 Vue.prototype.$delete = del; 33262 33263 Vue.prototype.$watch = function ( 33264 expOrFn, 33265 cb, 33266 options 33267 ) { 33268 var vm = this; 33269 if (isPlainObject(cb)) { 33270 return createWatcher(vm, expOrFn, cb, options) 33271 } 33272 options = options || {}; 33273 options.user = true; 33274 var watcher = new Watcher(vm, expOrFn, cb, options); 33275 if (options.immediate) { 33276 var info = "callback for immediate watcher \"" + (watcher.expression) + "\""; 33277 pushTarget(); 33278 invokeWithErrorHandling(cb, vm, [watcher.value], vm, info); 33279 popTarget(); 33280 } 33281 return function unwatchFn () { 33282 watcher.teardown(); 33283 } 33284 }; 33285} 33286 33287/* */ 33288 33289var uid$3 = 0; 33290 33291function initMixin (Vue) { 33292 Vue.prototype._init = function (options) { 33293 var vm = this; 33294 // a uid 33295 vm._uid = uid$3++; 33296 33297 var startTag, endTag; 33298 /* istanbul ignore if */ 33299 if ( true && config.performance && mark) { 33300 startTag = "vue-perf-start:" + (vm._uid); 33301 endTag = "vue-perf-end:" + (vm._uid); 33302 mark(startTag); 33303 } 33304 33305 // a flag to avoid this being observed 33306 vm._isVue = true; 33307 // merge options 33308 if (options && options._isComponent) { 33309 // optimize internal component instantiation 33310 // since dynamic options merging is pretty slow, and none of the 33311 // internal component options needs special treatment. 33312 initInternalComponent(vm, options); 33313 } else { 33314 vm.$options = mergeOptions( 33315 resolveConstructorOptions(vm.constructor), 33316 options || {}, 33317 vm 33318 ); 33319 } 33320 /* istanbul ignore else */ 33321 if (true) { 33322 initProxy(vm); 33323 } else {} 33324 // expose real self 33325 vm._self = vm; 33326 initLifecycle(vm); 33327 initEvents(vm); 33328 initRender(vm); 33329 callHook(vm, 'beforeCreate'); 33330 initInjections(vm); // resolve injections before data/props 33331 initState(vm); 33332 initProvide(vm); // resolve provide after data/props 33333 callHook(vm, 'created'); 33334 33335 /* istanbul ignore if */ 33336 if ( true && config.performance && mark) { 33337 vm._name = formatComponentName(vm, false); 33338 mark(endTag); 33339 measure(("vue " + (vm._name) + " init"), startTag, endTag); 33340 } 33341 33342 if (vm.$options.el) { 33343 vm.$mount(vm.$options.el); 33344 } 33345 }; 33346} 33347 33348function initInternalComponent (vm, options) { 33349 var opts = vm.$options = Object.create(vm.constructor.options); 33350 // doing this because it's faster than dynamic enumeration. 33351 var parentVnode = options._parentVnode; 33352 opts.parent = options.parent; 33353 opts._parentVnode = parentVnode; 33354 33355 var vnodeComponentOptions = parentVnode.componentOptions; 33356 opts.propsData = vnodeComponentOptions.propsData; 33357 opts._parentListeners = vnodeComponentOptions.listeners; 33358 opts._renderChildren = vnodeComponentOptions.children; 33359 opts._componentTag = vnodeComponentOptions.tag; 33360 33361 if (options.render) { 33362 opts.render = options.render; 33363 opts.staticRenderFns = options.staticRenderFns; 33364 } 33365} 33366 33367function resolveConstructorOptions (Ctor) { 33368 var options = Ctor.options; 33369 if (Ctor.super) { 33370 var superOptions = resolveConstructorOptions(Ctor.super); 33371 var cachedSuperOptions = Ctor.superOptions; 33372 if (superOptions !== cachedSuperOptions) { 33373 // super option changed, 33374 // need to resolve new options. 33375 Ctor.superOptions = superOptions; 33376 // check if there are any late-modified/attached options (#4976) 33377 var modifiedOptions = resolveModifiedOptions(Ctor); 33378 // update base extend options 33379 if (modifiedOptions) { 33380 extend(Ctor.extendOptions, modifiedOptions); 33381 } 33382 options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions); 33383 if (options.name) { 33384 options.components[options.name] = Ctor; 33385 } 33386 } 33387 } 33388 return options 33389} 33390 33391function resolveModifiedOptions (Ctor) { 33392 var modified; 33393 var latest = Ctor.options; 33394 var sealed = Ctor.sealedOptions; 33395 for (var key in latest) { 33396 if (latest[key] !== sealed[key]) { 33397 if (!modified) { modified = {}; } 33398 modified[key] = latest[key]; 33399 } 33400 } 33401 return modified 33402} 33403 33404function Vue (options) { 33405 if ( true && 33406 !(this instanceof Vue) 33407 ) { 33408 warn('Vue is a constructor and should be called with the `new` keyword'); 33409 } 33410 this._init(options); 33411} 33412 33413initMixin(Vue); 33414stateMixin(Vue); 33415eventsMixin(Vue); 33416lifecycleMixin(Vue); 33417renderMixin(Vue); 33418 33419/* */ 33420 33421function initUse (Vue) { 33422 Vue.use = function (plugin) { 33423 var installedPlugins = (this._installedPlugins || (this._installedPlugins = [])); 33424 if (installedPlugins.indexOf(plugin) > -1) { 33425 return this 33426 } 33427 33428 // additional parameters 33429 var args = toArray(arguments, 1); 33430 args.unshift(this); 33431 if (typeof plugin.install === 'function') { 33432 plugin.install.apply(plugin, args); 33433 } else if (typeof plugin === 'function') { 33434 plugin.apply(null, args); 33435 } 33436 installedPlugins.push(plugin); 33437 return this 33438 }; 33439} 33440 33441/* */ 33442 33443function initMixin$1 (Vue) { 33444 Vue.mixin = function (mixin) { 33445 this.options = mergeOptions(this.options, mixin); 33446 return this 33447 }; 33448} 33449 33450/* */ 33451 33452function initExtend (Vue) { 33453 /** 33454 * Each instance constructor, including Vue, has a unique 33455 * cid. This enables us to create wrapped "child 33456 * constructors" for prototypal inheritance and cache them. 33457 */ 33458 Vue.cid = 0; 33459 var cid = 1; 33460 33461 /** 33462 * Class inheritance 33463 */ 33464 Vue.extend = function (extendOptions) { 33465 extendOptions = extendOptions || {}; 33466 var Super = this; 33467 var SuperId = Super.cid; 33468 var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {}); 33469 if (cachedCtors[SuperId]) { 33470 return cachedCtors[SuperId] 33471 } 33472 33473 var name = extendOptions.name || Super.options.name; 33474 if ( true && name) { 33475 validateComponentName(name); 33476 } 33477 33478 var Sub = function VueComponent (options) { 33479 this._init(options); 33480 }; 33481 Sub.prototype = Object.create(Super.prototype); 33482 Sub.prototype.constructor = Sub; 33483 Sub.cid = cid++; 33484 Sub.options = mergeOptions( 33485 Super.options, 33486 extendOptions 33487 ); 33488 Sub['super'] = Super; 33489 33490 // For props and computed properties, we define the proxy getters on 33491 // the Vue instances at extension time, on the extended prototype. This 33492 // avoids Object.defineProperty calls for each instance created. 33493 if (Sub.options.props) { 33494 initProps$1(Sub); 33495 } 33496 if (Sub.options.computed) { 33497 initComputed$1(Sub); 33498 } 33499 33500 // allow further extension/mixin/plugin usage 33501 Sub.extend = Super.extend; 33502 Sub.mixin = Super.mixin; 33503 Sub.use = Super.use; 33504 33505 // create asset registers, so extended classes 33506 // can have their private assets too. 33507 ASSET_TYPES.forEach(function (type) { 33508 Sub[type] = Super[type]; 33509 }); 33510 // enable recursive self-lookup 33511 if (name) { 33512 Sub.options.components[name] = Sub; 33513 } 33514 33515 // keep a reference to the super options at extension time. 33516 // later at instantiation we can check if Super's options have 33517 // been updated. 33518 Sub.superOptions = Super.options; 33519 Sub.extendOptions = extendOptions; 33520 Sub.sealedOptions = extend({}, Sub.options); 33521 33522 // cache constructor 33523 cachedCtors[SuperId] = Sub; 33524 return Sub 33525 }; 33526} 33527 33528function initProps$1 (Comp) { 33529 var props = Comp.options.props; 33530 for (var key in props) { 33531 proxy(Comp.prototype, "_props", key); 33532 } 33533} 33534 33535function initComputed$1 (Comp) { 33536 var computed = Comp.options.computed; 33537 for (var key in computed) { 33538 defineComputed(Comp.prototype, key, computed[key]); 33539 } 33540} 33541 33542/* */ 33543 33544function initAssetRegisters (Vue) { 33545 /** 33546 * Create asset registration methods. 33547 */ 33548 ASSET_TYPES.forEach(function (type) { 33549 Vue[type] = function ( 33550 id, 33551 definition 33552 ) { 33553 if (!definition) { 33554 return this.options[type + 's'][id] 33555 } else { 33556 /* istanbul ignore if */ 33557 if ( true && type === 'component') { 33558 validateComponentName(id); 33559 } 33560 if (type === 'component' && isPlainObject(definition)) { 33561 definition.name = definition.name || id; 33562 definition = this.options._base.extend(definition); 33563 } 33564 if (type === 'directive' && typeof definition === 'function') { 33565 definition = { bind: definition, update: definition }; 33566 } 33567 this.options[type + 's'][id] = definition; 33568 return definition 33569 } 33570 }; 33571 }); 33572} 33573 33574/* */ 33575 33576 33577 33578 33579 33580function getComponentName (opts) { 33581 return opts && (opts.Ctor.options.name || opts.tag) 33582} 33583 33584function matches (pattern, name) { 33585 if (Array.isArray(pattern)) { 33586 return pattern.indexOf(name) > -1 33587 } else if (typeof pattern === 'string') { 33588 return pattern.split(',').indexOf(name) > -1 33589 } else if (isRegExp(pattern)) { 33590 return pattern.test(name) 33591 } 33592 /* istanbul ignore next */ 33593 return false 33594} 33595 33596function pruneCache (keepAliveInstance, filter) { 33597 var cache = keepAliveInstance.cache; 33598 var keys = keepAliveInstance.keys; 33599 var _vnode = keepAliveInstance._vnode; 33600 for (var key in cache) { 33601 var entry = cache[key]; 33602 if (entry) { 33603 var name = entry.name; 33604 if (name && !filter(name)) { 33605 pruneCacheEntry(cache, key, keys, _vnode); 33606 } 33607 } 33608 } 33609} 33610 33611function pruneCacheEntry ( 33612 cache, 33613 key, 33614 keys, 33615 current 33616) { 33617 var entry = cache[key]; 33618 if (entry && (!current || entry.tag !== current.tag)) { 33619 entry.componentInstance.$destroy(); 33620 } 33621 cache[key] = null; 33622 remove(keys, key); 33623} 33624 33625var patternTypes = [String, RegExp, Array]; 33626 33627var KeepAlive = { 33628 name: 'keep-alive', 33629 abstract: true, 33630 33631 props: { 33632 include: patternTypes, 33633 exclude: patternTypes, 33634 max: [String, Number] 33635 }, 33636 33637 methods: { 33638 cacheVNode: function cacheVNode() { 33639 var ref = this; 33640 var cache = ref.cache; 33641 var keys = ref.keys; 33642 var vnodeToCache = ref.vnodeToCache; 33643 var keyToCache = ref.keyToCache; 33644 if (vnodeToCache) { 33645 var tag = vnodeToCache.tag; 33646 var componentInstance = vnodeToCache.componentInstance; 33647 var componentOptions = vnodeToCache.componentOptions; 33648 cache[keyToCache] = { 33649 name: getComponentName(componentOptions), 33650 tag: tag, 33651 componentInstance: componentInstance, 33652 }; 33653 keys.push(keyToCache); 33654 // prune oldest entry 33655 if (this.max && keys.length > parseInt(this.max)) { 33656 pruneCacheEntry(cache, keys[0], keys, this._vnode); 33657 } 33658 this.vnodeToCache = null; 33659 } 33660 } 33661 }, 33662 33663 created: function created () { 33664 this.cache = Object.create(null); 33665 this.keys = []; 33666 }, 33667 33668 destroyed: function destroyed () { 33669 for (var key in this.cache) { 33670 pruneCacheEntry(this.cache, key, this.keys); 33671 } 33672 }, 33673 33674 mounted: function mounted () { 33675 var this$1 = this; 33676 33677 this.cacheVNode(); 33678 this.$watch('include', function (val) { 33679 pruneCache(this$1, function (name) { return matches(val, name); }); 33680 }); 33681 this.$watch('exclude', function (val) { 33682 pruneCache(this$1, function (name) { return !matches(val, name); }); 33683 }); 33684 }, 33685 33686 updated: function updated () { 33687 this.cacheVNode(); 33688 }, 33689 33690 render: function render () { 33691 var slot = this.$slots.default; 33692 var vnode = getFirstComponentChild(slot); 33693 var componentOptions = vnode && vnode.componentOptions; 33694 if (componentOptions) { 33695 // check pattern 33696 var name = getComponentName(componentOptions); 33697 var ref = this; 33698 var include = ref.include; 33699 var exclude = ref.exclude; 33700 if ( 33701 // not included 33702 (include && (!name || !matches(include, name))) || 33703 // excluded 33704 (exclude && name && matches(exclude, name)) 33705 ) { 33706 return vnode 33707 } 33708 33709 var ref$1 = this; 33710 var cache = ref$1.cache; 33711 var keys = ref$1.keys; 33712 var key = vnode.key == null 33713 // same constructor may get registered as different local components 33714 // so cid alone is not enough (#3269) 33715 ? componentOptions.Ctor.cid + (componentOptions.tag ? ("::" + (componentOptions.tag)) : '') 33716 : vnode.key; 33717 if (cache[key]) { 33718 vnode.componentInstance = cache[key].componentInstance; 33719 // make current key freshest 33720 remove(keys, key); 33721 keys.push(key); 33722 } else { 33723 // delay setting the cache until update 33724 this.vnodeToCache = vnode; 33725 this.keyToCache = key; 33726 } 33727 33728 vnode.data.keepAlive = true; 33729 } 33730 return vnode || (slot && slot[0]) 33731 } 33732}; 33733 33734var builtInComponents = { 33735 KeepAlive: KeepAlive 33736}; 33737 33738/* */ 33739 33740function initGlobalAPI (Vue) { 33741 // config 33742 var configDef = {}; 33743 configDef.get = function () { return config; }; 33744 if (true) { 33745 configDef.set = function () { 33746 warn( 33747 'Do not replace the Vue.config object, set individual fields instead.' 33748 ); 33749 }; 33750 } 33751 Object.defineProperty(Vue, 'config', configDef); 33752 33753 // exposed util methods. 33754 // NOTE: these are not considered part of the public API - avoid relying on 33755 // them unless you are aware of the risk. 33756 Vue.util = { 33757 warn: warn, 33758 extend: extend, 33759 mergeOptions: mergeOptions, 33760 defineReactive: defineReactive$$1 33761 }; 33762 33763 Vue.set = set; 33764 Vue.delete = del; 33765 Vue.nextTick = nextTick; 33766 33767 // 2.6 explicit observable API 33768 Vue.observable = function (obj) { 33769 observe(obj); 33770 return obj 33771 }; 33772 33773 Vue.options = Object.create(null); 33774 ASSET_TYPES.forEach(function (type) { 33775 Vue.options[type + 's'] = Object.create(null); 33776 }); 33777 33778 // this is used to identify the "base" constructor to extend all plain-object 33779 // components with in Weex's multi-instance scenarios. 33780 Vue.options._base = Vue; 33781 33782 extend(Vue.options.components, builtInComponents); 33783 33784 initUse(Vue); 33785 initMixin$1(Vue); 33786 initExtend(Vue); 33787 initAssetRegisters(Vue); 33788} 33789 33790initGlobalAPI(Vue); 33791 33792Object.defineProperty(Vue.prototype, '$isServer', { 33793 get: isServerRendering 33794}); 33795 33796Object.defineProperty(Vue.prototype, '$ssrContext', { 33797 get: function get () { 33798 /* istanbul ignore next */ 33799 return this.$vnode && this.$vnode.ssrContext 33800 } 33801}); 33802 33803// expose FunctionalRenderContext for ssr runtime helper installation 33804Object.defineProperty(Vue, 'FunctionalRenderContext', { 33805 value: FunctionalRenderContext 33806}); 33807 33808Vue.version = '2.6.14'; 33809 33810/* */ 33811 33812// these are reserved for web because they are directly compiled away 33813// during template compilation 33814var isReservedAttr = makeMap('style,class'); 33815 33816// attributes that should be using props for binding 33817var acceptValue = makeMap('input,textarea,option,select,progress'); 33818var mustUseProp = function (tag, type, attr) { 33819 return ( 33820 (attr === 'value' && acceptValue(tag)) && type !== 'button' || 33821 (attr === 'selected' && tag === 'option') || 33822 (attr === 'checked' && tag === 'input') || 33823 (attr === 'muted' && tag === 'video') 33824 ) 33825}; 33826 33827var isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck'); 33828 33829var isValidContentEditableValue = makeMap('events,caret,typing,plaintext-only'); 33830 33831var convertEnumeratedValue = function (key, value) { 33832 return isFalsyAttrValue(value) || value === 'false' 33833 ? 'false' 33834 // allow arbitrary string value for contenteditable 33835 : key === 'contenteditable' && isValidContentEditableValue(value) 33836 ? value 33837 : 'true' 33838}; 33839 33840var isBooleanAttr = makeMap( 33841 'allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' + 33842 'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' + 33843 'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' + 33844 'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' + 33845 'required,reversed,scoped,seamless,selected,sortable,' + 33846 'truespeed,typemustmatch,visible' 33847); 33848 33849var xlinkNS = 'http://www.w3.org/1999/xlink'; 33850 33851var isXlink = function (name) { 33852 return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink' 33853}; 33854 33855var getXlinkProp = function (name) { 33856 return isXlink(name) ? name.slice(6, name.length) : '' 33857}; 33858 33859var isFalsyAttrValue = function (val) { 33860 return val == null || val === false 33861}; 33862 33863/* */ 33864 33865function genClassForVnode (vnode) { 33866 var data = vnode.data; 33867 var parentNode = vnode; 33868 var childNode = vnode; 33869 while (isDef(childNode.componentInstance)) { 33870 childNode = childNode.componentInstance._vnode; 33871 if (childNode && childNode.data) { 33872 data = mergeClassData(childNode.data, data); 33873 } 33874 } 33875 while (isDef(parentNode = parentNode.parent)) { 33876 if (parentNode && parentNode.data) { 33877 data = mergeClassData(data, parentNode.data); 33878 } 33879 } 33880 return renderClass(data.staticClass, data.class) 33881} 33882 33883function mergeClassData (child, parent) { 33884 return { 33885 staticClass: concat(child.staticClass, parent.staticClass), 33886 class: isDef(child.class) 33887 ? [child.class, parent.class] 33888 : parent.class 33889 } 33890} 33891 33892function renderClass ( 33893 staticClass, 33894 dynamicClass 33895) { 33896 if (isDef(staticClass) || isDef(dynamicClass)) { 33897 return concat(staticClass, stringifyClass(dynamicClass)) 33898 } 33899 /* istanbul ignore next */ 33900 return '' 33901} 33902 33903function concat (a, b) { 33904 return a ? b ? (a + ' ' + b) : a : (b || '') 33905} 33906 33907function stringifyClass (value) { 33908 if (Array.isArray(value)) { 33909 return stringifyArray(value) 33910 } 33911 if (isObject(value)) { 33912 return stringifyObject(value) 33913 } 33914 if (typeof value === 'string') { 33915 return value 33916 } 33917 /* istanbul ignore next */ 33918 return '' 33919} 33920 33921function stringifyArray (value) { 33922 var res = ''; 33923 var stringified; 33924 for (var i = 0, l = value.length; i < l; i++) { 33925 if (isDef(stringified = stringifyClass(value[i])) && stringified !== '') { 33926 if (res) { res += ' '; } 33927 res += stringified; 33928 } 33929 } 33930 return res 33931} 33932 33933function stringifyObject (value) { 33934 var res = ''; 33935 for (var key in value) { 33936 if (value[key]) { 33937 if (res) { res += ' '; } 33938 res += key; 33939 } 33940 } 33941 return res 33942} 33943 33944/* */ 33945 33946var namespaceMap = { 33947 svg: 'http://www.w3.org/2000/svg', 33948 math: 'http://www.w3.org/1998/Math/MathML' 33949}; 33950 33951var isHTMLTag = makeMap( 33952 'html,body,base,head,link,meta,style,title,' + 33953 'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' + 33954 'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' + 33955 'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' + 33956 's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' + 33957 'embed,object,param,source,canvas,script,noscript,del,ins,' + 33958 'caption,col,colgroup,table,thead,tbody,td,th,tr,' + 33959 'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' + 33960 'output,progress,select,textarea,' + 33961 'details,dialog,menu,menuitem,summary,' + 33962 'content,element,shadow,template,blockquote,iframe,tfoot' 33963); 33964 33965// this map is intentionally selective, only covering SVG elements that may 33966// contain child elements. 33967var isSVG = makeMap( 33968 'svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' + 33969 'foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' + 33970 'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view', 33971 true 33972); 33973 33974var isPreTag = function (tag) { return tag === 'pre'; }; 33975 33976var isReservedTag = function (tag) { 33977 return isHTMLTag(tag) || isSVG(tag) 33978}; 33979 33980function getTagNamespace (tag) { 33981 if (isSVG(tag)) { 33982 return 'svg' 33983 } 33984 // basic support for MathML 33985 // note it doesn't support other MathML elements being component roots 33986 if (tag === 'math') { 33987 return 'math' 33988 } 33989} 33990 33991var unknownElementCache = Object.create(null); 33992function isUnknownElement (tag) { 33993 /* istanbul ignore if */ 33994 if (!inBrowser) { 33995 return true 33996 } 33997 if (isReservedTag(tag)) { 33998 return false 33999 } 34000 tag = tag.toLowerCase(); 34001 /* istanbul ignore if */ 34002 if (unknownElementCache[tag] != null) { 34003 return unknownElementCache[tag] 34004 } 34005 var el = document.createElement(tag); 34006 if (tag.indexOf('-') > -1) { 34007 // http://stackoverflow.com/a/28210364/1070244 34008 return (unknownElementCache[tag] = ( 34009 el.constructor === window.HTMLUnknownElement || 34010 el.constructor === window.HTMLElement 34011 )) 34012 } else { 34013 return (unknownElementCache[tag] = /HTMLUnknownElement/.test(el.toString())) 34014 } 34015} 34016 34017var isTextInputType = makeMap('text,number,password,search,email,tel,url'); 34018 34019/* */ 34020 34021/** 34022 * Query an element selector if it's not an element already. 34023 */ 34024function query (el) { 34025 if (typeof el === 'string') { 34026 var selected = document.querySelector(el); 34027 if (!selected) { 34028 true && warn( 34029 'Cannot find element: ' + el 34030 ); 34031 return document.createElement('div') 34032 } 34033 return selected 34034 } else { 34035 return el 34036 } 34037} 34038 34039/* */ 34040 34041function createElement$1 (tagName, vnode) { 34042 var elm = document.createElement(tagName); 34043 if (tagName !== 'select') { 34044 return elm 34045 } 34046 // false or null will remove the attribute but undefined will not 34047 if (vnode.data && vnode.data.attrs && vnode.data.attrs.multiple !== undefined) { 34048 elm.setAttribute('multiple', 'multiple'); 34049 } 34050 return elm 34051} 34052 34053function createElementNS (namespace, tagName) { 34054 return document.createElementNS(namespaceMap[namespace], tagName) 34055} 34056 34057function createTextNode (text) { 34058 return document.createTextNode(text) 34059} 34060 34061function createComment (text) { 34062 return document.createComment(text) 34063} 34064 34065function insertBefore (parentNode, newNode, referenceNode) { 34066 parentNode.insertBefore(newNode, referenceNode); 34067} 34068 34069function removeChild (node, child) { 34070 node.removeChild(child); 34071} 34072 34073function appendChild (node, child) { 34074 node.appendChild(child); 34075} 34076 34077function parentNode (node) { 34078 return node.parentNode 34079} 34080 34081function nextSibling (node) { 34082 return node.nextSibling 34083} 34084 34085function tagName (node) { 34086 return node.tagName 34087} 34088 34089function setTextContent (node, text) { 34090 node.textContent = text; 34091} 34092 34093function setStyleScope (node, scopeId) { 34094 node.setAttribute(scopeId, ''); 34095} 34096 34097var nodeOps = /*#__PURE__*/Object.freeze({ 34098 createElement: createElement$1, 34099 createElementNS: createElementNS, 34100 createTextNode: createTextNode, 34101 createComment: createComment, 34102 insertBefore: insertBefore, 34103 removeChild: removeChild, 34104 appendChild: appendChild, 34105 parentNode: parentNode, 34106 nextSibling: nextSibling, 34107 tagName: tagName, 34108 setTextContent: setTextContent, 34109 setStyleScope: setStyleScope 34110}); 34111 34112/* */ 34113 34114var ref = { 34115 create: function create (_, vnode) { 34116 registerRef(vnode); 34117 }, 34118 update: function update (oldVnode, vnode) { 34119 if (oldVnode.data.ref !== vnode.data.ref) { 34120 registerRef(oldVnode, true); 34121 registerRef(vnode); 34122 } 34123 }, 34124 destroy: function destroy (vnode) { 34125 registerRef(vnode, true); 34126 } 34127}; 34128 34129function registerRef (vnode, isRemoval) { 34130 var key = vnode.data.ref; 34131 if (!isDef(key)) { return } 34132 34133 var vm = vnode.context; 34134 var ref = vnode.componentInstance || vnode.elm; 34135 var refs = vm.$refs; 34136 if (isRemoval) { 34137 if (Array.isArray(refs[key])) { 34138 remove(refs[key], ref); 34139 } else if (refs[key] === ref) { 34140 refs[key] = undefined; 34141 } 34142 } else { 34143 if (vnode.data.refInFor) { 34144 if (!Array.isArray(refs[key])) { 34145 refs[key] = [ref]; 34146 } else if (refs[key].indexOf(ref) < 0) { 34147 // $flow-disable-line 34148 refs[key].push(ref); 34149 } 34150 } else { 34151 refs[key] = ref; 34152 } 34153 } 34154} 34155 34156/** 34157 * Virtual DOM patching algorithm based on Snabbdom by 34158 * Simon Friis Vindum (@paldepind) 34159 * Licensed under the MIT License 34160 * https://github.com/paldepind/snabbdom/blob/master/LICENSE 34161 * 34162 * modified by Evan You (@yyx990803) 34163 * 34164 * Not type-checking this because this file is perf-critical and the cost 34165 * of making flow understand it is not worth it. 34166 */ 34167 34168var emptyNode = new VNode('', {}, []); 34169 34170var hooks = ['create', 'activate', 'update', 'remove', 'destroy']; 34171 34172function sameVnode (a, b) { 34173 return ( 34174 a.key === b.key && 34175 a.asyncFactory === b.asyncFactory && ( 34176 ( 34177 a.tag === b.tag && 34178 a.isComment === b.isComment && 34179 isDef(a.data) === isDef(b.data) && 34180 sameInputType(a, b) 34181 ) || ( 34182 isTrue(a.isAsyncPlaceholder) && 34183 isUndef(b.asyncFactory.error) 34184 ) 34185 ) 34186 ) 34187} 34188 34189function sameInputType (a, b) { 34190 if (a.tag !== 'input') { return true } 34191 var i; 34192 var typeA = isDef(i = a.data) && isDef(i = i.attrs) && i.type; 34193 var typeB = isDef(i = b.data) && isDef(i = i.attrs) && i.type; 34194 return typeA === typeB || isTextInputType(typeA) && isTextInputType(typeB) 34195} 34196 34197function createKeyToOldIdx (children, beginIdx, endIdx) { 34198 var i, key; 34199 var map = {}; 34200 for (i = beginIdx; i <= endIdx; ++i) { 34201 key = children[i].key; 34202 if (isDef(key)) { map[key] = i; } 34203 } 34204 return map 34205} 34206 34207function createPatchFunction (backend) { 34208 var i, j; 34209 var cbs = {}; 34210 34211 var modules = backend.modules; 34212 var nodeOps = backend.nodeOps; 34213 34214 for (i = 0; i < hooks.length; ++i) { 34215 cbs[hooks[i]] = []; 34216 for (j = 0; j < modules.length; ++j) { 34217 if (isDef(modules[j][hooks[i]])) { 34218 cbs[hooks[i]].push(modules[j][hooks[i]]); 34219 } 34220 } 34221 } 34222 34223 function emptyNodeAt (elm) { 34224 return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm) 34225 } 34226 34227 function createRmCb (childElm, listeners) { 34228 function remove$$1 () { 34229 if (--remove$$1.listeners === 0) { 34230 removeNode(childElm); 34231 } 34232 } 34233 remove$$1.listeners = listeners; 34234 return remove$$1 34235 } 34236 34237 function removeNode (el) { 34238 var parent = nodeOps.parentNode(el); 34239 // element may have already been removed due to v-html / v-text 34240 if (isDef(parent)) { 34241 nodeOps.removeChild(parent, el); 34242 } 34243 } 34244 34245 function isUnknownElement$$1 (vnode, inVPre) { 34246 return ( 34247 !inVPre && 34248 !vnode.ns && 34249 !( 34250 config.ignoredElements.length && 34251 config.ignoredElements.some(function (ignore) { 34252 return isRegExp(ignore) 34253 ? ignore.test(vnode.tag) 34254 : ignore === vnode.tag 34255 }) 34256 ) && 34257 config.isUnknownElement(vnode.tag) 34258 ) 34259 } 34260 34261 var creatingElmInVPre = 0; 34262 34263 function createElm ( 34264 vnode, 34265 insertedVnodeQueue, 34266 parentElm, 34267 refElm, 34268 nested, 34269 ownerArray, 34270 index 34271 ) { 34272 if (isDef(vnode.elm) && isDef(ownerArray)) { 34273 // This vnode was used in a previous render! 34274 // now it's used as a new node, overwriting its elm would cause 34275 // potential patch errors down the road when it's used as an insertion 34276 // reference node. Instead, we clone the node on-demand before creating 34277 // associated DOM element for it. 34278 vnode = ownerArray[index] = cloneVNode(vnode); 34279 } 34280 34281 vnode.isRootInsert = !nested; // for transition enter check 34282 if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) { 34283 return 34284 } 34285 34286 var data = vnode.data; 34287 var children = vnode.children; 34288 var tag = vnode.tag; 34289 if (isDef(tag)) { 34290 if (true) { 34291 if (data && data.pre) { 34292 creatingElmInVPre++; 34293 } 34294 if (isUnknownElement$$1(vnode, creatingElmInVPre)) { 34295 warn( 34296 'Unknown custom element: <' + tag + '> - did you ' + 34297 'register the component correctly? For recursive components, ' + 34298 'make sure to provide the "name" option.', 34299 vnode.context 34300 ); 34301 } 34302 } 34303 34304 vnode.elm = vnode.ns 34305 ? nodeOps.createElementNS(vnode.ns, tag) 34306 : nodeOps.createElement(tag, vnode); 34307 setScope(vnode); 34308 34309 /* istanbul ignore if */ 34310 { 34311 createChildren(vnode, children, insertedVnodeQueue); 34312 if (isDef(data)) { 34313 invokeCreateHooks(vnode, insertedVnodeQueue); 34314 } 34315 insert(parentElm, vnode.elm, refElm); 34316 } 34317 34318 if ( true && data && data.pre) { 34319 creatingElmInVPre--; 34320 } 34321 } else if (isTrue(vnode.isComment)) { 34322 vnode.elm = nodeOps.createComment(vnode.text); 34323 insert(parentElm, vnode.elm, refElm); 34324 } else { 34325 vnode.elm = nodeOps.createTextNode(vnode.text); 34326 insert(parentElm, vnode.elm, refElm); 34327 } 34328 } 34329 34330 function createComponent (vnode, insertedVnodeQueue, parentElm, refElm) { 34331 var i = vnode.data; 34332 if (isDef(i)) { 34333 var isReactivated = isDef(vnode.componentInstance) && i.keepAlive; 34334 if (isDef(i = i.hook) && isDef(i = i.init)) { 34335 i(vnode, false /* hydrating */); 34336 } 34337 // after calling the init hook, if the vnode is a child component 34338 // it should've created a child instance and mounted it. the child 34339 // component also has set the placeholder vnode's elm. 34340 // in that case we can just return the element and be done. 34341 if (isDef(vnode.componentInstance)) { 34342 initComponent(vnode, insertedVnodeQueue); 34343 insert(parentElm, vnode.elm, refElm); 34344 if (isTrue(isReactivated)) { 34345 reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm); 34346 } 34347 return true 34348 } 34349 } 34350 } 34351 34352 function initComponent (vnode, insertedVnodeQueue) { 34353 if (isDef(vnode.data.pendingInsert)) { 34354 insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert); 34355 vnode.data.pendingInsert = null; 34356 } 34357 vnode.elm = vnode.componentInstance.$el; 34358 if (isPatchable(vnode)) { 34359 invokeCreateHooks(vnode, insertedVnodeQueue); 34360 setScope(vnode); 34361 } else { 34362 // empty component root. 34363 // skip all element-related modules except for ref (#3455) 34364 registerRef(vnode); 34365 // make sure to invoke the insert hook 34366 insertedVnodeQueue.push(vnode); 34367 } 34368 } 34369 34370 function reactivateComponent (vnode, insertedVnodeQueue, parentElm, refElm) { 34371 var i; 34372 // hack for #4339: a reactivated component with inner transition 34373 // does not trigger because the inner node's created hooks are not called 34374 // again. It's not ideal to involve module-specific logic in here but 34375 // there doesn't seem to be a better way to do it. 34376 var innerNode = vnode; 34377 while (innerNode.componentInstance) { 34378 innerNode = innerNode.componentInstance._vnode; 34379 if (isDef(i = innerNode.data) && isDef(i = i.transition)) { 34380 for (i = 0; i < cbs.activate.length; ++i) { 34381 cbs.activate[i](emptyNode, innerNode); 34382 } 34383 insertedVnodeQueue.push(innerNode); 34384 break 34385 } 34386 } 34387 // unlike a newly created component, 34388 // a reactivated keep-alive component doesn't insert itself 34389 insert(parentElm, vnode.elm, refElm); 34390 } 34391 34392 function insert (parent, elm, ref$$1) { 34393 if (isDef(parent)) { 34394 if (isDef(ref$$1)) { 34395 if (nodeOps.parentNode(ref$$1) === parent) { 34396 nodeOps.insertBefore(parent, elm, ref$$1); 34397 } 34398 } else { 34399 nodeOps.appendChild(parent, elm); 34400 } 34401 } 34402 } 34403 34404 function createChildren (vnode, children, insertedVnodeQueue) { 34405 if (Array.isArray(children)) { 34406 if (true) { 34407 checkDuplicateKeys(children); 34408 } 34409 for (var i = 0; i < children.length; ++i) { 34410 createElm(children[i], insertedVnodeQueue, vnode.elm, null, true, children, i); 34411 } 34412 } else if (isPrimitive(vnode.text)) { 34413 nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text))); 34414 } 34415 } 34416 34417 function isPatchable (vnode) { 34418 while (vnode.componentInstance) { 34419 vnode = vnode.componentInstance._vnode; 34420 } 34421 return isDef(vnode.tag) 34422 } 34423 34424 function invokeCreateHooks (vnode, insertedVnodeQueue) { 34425 for (var i$1 = 0; i$1 < cbs.create.length; ++i$1) { 34426 cbs.create[i$1](emptyNode, vnode); 34427 } 34428 i = vnode.data.hook; // Reuse variable 34429 if (isDef(i)) { 34430 if (isDef(i.create)) { i.create(emptyNode, vnode); } 34431 if (isDef(i.insert)) { insertedVnodeQueue.push(vnode); } 34432 } 34433 } 34434 34435 // set scope id attribute for scoped CSS. 34436 // this is implemented as a special case to avoid the overhead 34437 // of going through the normal attribute patching process. 34438 function setScope (vnode) { 34439 var i; 34440 if (isDef(i = vnode.fnScopeId)) { 34441 nodeOps.setStyleScope(vnode.elm, i); 34442 } else { 34443 var ancestor = vnode; 34444 while (ancestor) { 34445 if (isDef(i = ancestor.context) && isDef(i = i.$options._scopeId)) { 34446 nodeOps.setStyleScope(vnode.elm, i); 34447 } 34448 ancestor = ancestor.parent; 34449 } 34450 } 34451 // for slot content they should also get the scopeId from the host instance. 34452 if (isDef(i = activeInstance) && 34453 i !== vnode.context && 34454 i !== vnode.fnContext && 34455 isDef(i = i.$options._scopeId) 34456 ) { 34457 nodeOps.setStyleScope(vnode.elm, i); 34458 } 34459 } 34460 34461 function addVnodes (parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) { 34462 for (; startIdx <= endIdx; ++startIdx) { 34463 createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm, false, vnodes, startIdx); 34464 } 34465 } 34466 34467 function invokeDestroyHook (vnode) { 34468 var i, j; 34469 var data = vnode.data; 34470 if (isDef(data)) { 34471 if (isDef(i = data.hook) && isDef(i = i.destroy)) { i(vnode); } 34472 for (i = 0; i < cbs.destroy.length; ++i) { cbs.destroy[i](vnode); } 34473 } 34474 if (isDef(i = vnode.children)) { 34475 for (j = 0; j < vnode.children.length; ++j) { 34476 invokeDestroyHook(vnode.children[j]); 34477 } 34478 } 34479 } 34480 34481 function removeVnodes (vnodes, startIdx, endIdx) { 34482 for (; startIdx <= endIdx; ++startIdx) { 34483 var ch = vnodes[startIdx]; 34484 if (isDef(ch)) { 34485 if (isDef(ch.tag)) { 34486 removeAndInvokeRemoveHook(ch); 34487 invokeDestroyHook(ch); 34488 } else { // Text node 34489 removeNode(ch.elm); 34490 } 34491 } 34492 } 34493 } 34494 34495 function removeAndInvokeRemoveHook (vnode, rm) { 34496 if (isDef(rm) || isDef(vnode.data)) { 34497 var i; 34498 var listeners = cbs.remove.length + 1; 34499 if (isDef(rm)) { 34500 // we have a recursively passed down rm callback 34501 // increase the listeners count 34502 rm.listeners += listeners; 34503 } else { 34504 // directly removing 34505 rm = createRmCb(vnode.elm, listeners); 34506 } 34507 // recursively invoke hooks on child component root node 34508 if (isDef(i = vnode.componentInstance) && isDef(i = i._vnode) && isDef(i.data)) { 34509 removeAndInvokeRemoveHook(i, rm); 34510 } 34511 for (i = 0; i < cbs.remove.length; ++i) { 34512 cbs.remove[i](vnode, rm); 34513 } 34514 if (isDef(i = vnode.data.hook) && isDef(i = i.remove)) { 34515 i(vnode, rm); 34516 } else { 34517 rm(); 34518 } 34519 } else { 34520 removeNode(vnode.elm); 34521 } 34522 } 34523 34524 function updateChildren (parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) { 34525 var oldStartIdx = 0; 34526 var newStartIdx = 0; 34527 var oldEndIdx = oldCh.length - 1; 34528 var oldStartVnode = oldCh[0]; 34529 var oldEndVnode = oldCh[oldEndIdx]; 34530 var newEndIdx = newCh.length - 1; 34531 var newStartVnode = newCh[0]; 34532 var newEndVnode = newCh[newEndIdx]; 34533 var oldKeyToIdx, idxInOld, vnodeToMove, refElm; 34534 34535 // removeOnly is a special flag used only by <transition-group> 34536 // to ensure removed elements stay in correct relative positions 34537 // during leaving transitions 34538 var canMove = !removeOnly; 34539 34540 if (true) { 34541 checkDuplicateKeys(newCh); 34542 } 34543 34544 while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) { 34545 if (isUndef(oldStartVnode)) { 34546 oldStartVnode = oldCh[++oldStartIdx]; // Vnode has been moved left 34547 } else if (isUndef(oldEndVnode)) { 34548 oldEndVnode = oldCh[--oldEndIdx]; 34549 } else if (sameVnode(oldStartVnode, newStartVnode)) { 34550 patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx); 34551 oldStartVnode = oldCh[++oldStartIdx]; 34552 newStartVnode = newCh[++newStartIdx]; 34553 } else if (sameVnode(oldEndVnode, newEndVnode)) { 34554 patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx); 34555 oldEndVnode = oldCh[--oldEndIdx]; 34556 newEndVnode = newCh[--newEndIdx]; 34557 } else if (sameVnode(oldStartVnode, newEndVnode)) { // Vnode moved right 34558 patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx); 34559 canMove && nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm)); 34560 oldStartVnode = oldCh[++oldStartIdx]; 34561 newEndVnode = newCh[--newEndIdx]; 34562 } else if (sameVnode(oldEndVnode, newStartVnode)) { // Vnode moved left 34563 patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx); 34564 canMove && nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm); 34565 oldEndVnode = oldCh[--oldEndIdx]; 34566 newStartVnode = newCh[++newStartIdx]; 34567 } else { 34568 if (isUndef(oldKeyToIdx)) { oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx); } 34569 idxInOld = isDef(newStartVnode.key) 34570 ? oldKeyToIdx[newStartVnode.key] 34571 : findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx); 34572 if (isUndef(idxInOld)) { // New element 34573 createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx); 34574 } else { 34575 vnodeToMove = oldCh[idxInOld]; 34576 if (sameVnode(vnodeToMove, newStartVnode)) { 34577 patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue, newCh, newStartIdx); 34578 oldCh[idxInOld] = undefined; 34579 canMove && nodeOps.insertBefore(parentElm, vnodeToMove.elm, oldStartVnode.elm); 34580 } else { 34581 // same key but different element. treat as new element 34582 createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx); 34583 } 34584 } 34585 newStartVnode = newCh[++newStartIdx]; 34586 } 34587 } 34588 if (oldStartIdx > oldEndIdx) { 34589 refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm; 34590 addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue); 34591 } else if (newStartIdx > newEndIdx) { 34592 removeVnodes(oldCh, oldStartIdx, oldEndIdx); 34593 } 34594 } 34595 34596 function checkDuplicateKeys (children) { 34597 var seenKeys = {}; 34598 for (var i = 0; i < children.length; i++) { 34599 var vnode = children[i]; 34600 var key = vnode.key; 34601 if (isDef(key)) { 34602 if (seenKeys[key]) { 34603 warn( 34604 ("Duplicate keys detected: '" + key + "'. This may cause an update error."), 34605 vnode.context 34606 ); 34607 } else { 34608 seenKeys[key] = true; 34609 } 34610 } 34611 } 34612 } 34613 34614 function findIdxInOld (node, oldCh, start, end) { 34615 for (var i = start; i < end; i++) { 34616 var c = oldCh[i]; 34617 if (isDef(c) && sameVnode(node, c)) { return i } 34618 } 34619 } 34620 34621 function patchVnode ( 34622 oldVnode, 34623 vnode, 34624 insertedVnodeQueue, 34625 ownerArray, 34626 index, 34627 removeOnly 34628 ) { 34629 if (oldVnode === vnode) { 34630 return 34631 } 34632 34633 if (isDef(vnode.elm) && isDef(ownerArray)) { 34634 // clone reused vnode 34635 vnode = ownerArray[index] = cloneVNode(vnode); 34636 } 34637 34638 var elm = vnode.elm = oldVnode.elm; 34639 34640 if (isTrue(oldVnode.isAsyncPlaceholder)) { 34641 if (isDef(vnode.asyncFactory.resolved)) { 34642 hydrate(oldVnode.elm, vnode, insertedVnodeQueue); 34643 } else { 34644 vnode.isAsyncPlaceholder = true; 34645 } 34646 return 34647 } 34648 34649 // reuse element for static trees. 34650 // note we only do this if the vnode is cloned - 34651 // if the new node is not cloned it means the render functions have been 34652 // reset by the hot-reload-api and we need to do a proper re-render. 34653 if (isTrue(vnode.isStatic) && 34654 isTrue(oldVnode.isStatic) && 34655 vnode.key === oldVnode.key && 34656 (isTrue(vnode.isCloned) || isTrue(vnode.isOnce)) 34657 ) { 34658 vnode.componentInstance = oldVnode.componentInstance; 34659 return 34660 } 34661 34662 var i; 34663 var data = vnode.data; 34664 if (isDef(data) && isDef(i = data.hook) && isDef(i = i.prepatch)) { 34665 i(oldVnode, vnode); 34666 } 34667 34668 var oldCh = oldVnode.children; 34669 var ch = vnode.children; 34670 if (isDef(data) && isPatchable(vnode)) { 34671 for (i = 0; i < cbs.update.length; ++i) { cbs.update[i](oldVnode, vnode); } 34672 if (isDef(i = data.hook) && isDef(i = i.update)) { i(oldVnode, vnode); } 34673 } 34674 if (isUndef(vnode.text)) { 34675 if (isDef(oldCh) && isDef(ch)) { 34676 if (oldCh !== ch) { updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly); } 34677 } else if (isDef(ch)) { 34678 if (true) { 34679 checkDuplicateKeys(ch); 34680 } 34681 if (isDef(oldVnode.text)) { nodeOps.setTextContent(elm, ''); } 34682 addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue); 34683 } else if (isDef(oldCh)) { 34684 removeVnodes(oldCh, 0, oldCh.length - 1); 34685 } else if (isDef(oldVnode.text)) { 34686 nodeOps.setTextContent(elm, ''); 34687 } 34688 } else if (oldVnode.text !== vnode.text) { 34689 nodeOps.setTextContent(elm, vnode.text); 34690 } 34691 if (isDef(data)) { 34692 if (isDef(i = data.hook) && isDef(i = i.postpatch)) { i(oldVnode, vnode); } 34693 } 34694 } 34695 34696 function invokeInsertHook (vnode, queue, initial) { 34697 // delay insert hooks for component root nodes, invoke them after the 34698 // element is really inserted 34699 if (isTrue(initial) && isDef(vnode.parent)) { 34700 vnode.parent.data.pendingInsert = queue; 34701 } else { 34702 for (var i = 0; i < queue.length; ++i) { 34703 queue[i].data.hook.insert(queue[i]); 34704 } 34705 } 34706 } 34707 34708 var hydrationBailed = false; 34709 // list of modules that can skip create hook during hydration because they 34710 // are already rendered on the client or has no need for initialization 34711 // Note: style is excluded because it relies on initial clone for future 34712 // deep updates (#7063). 34713 var isRenderedModule = makeMap('attrs,class,staticClass,staticStyle,key'); 34714 34715 // Note: this is a browser-only function so we can assume elms are DOM nodes. 34716 function hydrate (elm, vnode, insertedVnodeQueue, inVPre) { 34717 var i; 34718 var tag = vnode.tag; 34719 var data = vnode.data; 34720 var children = vnode.children; 34721 inVPre = inVPre || (data && data.pre); 34722 vnode.elm = elm; 34723 34724 if (isTrue(vnode.isComment) && isDef(vnode.asyncFactory)) { 34725 vnode.isAsyncPlaceholder = true; 34726 return true 34727 } 34728 // assert node match 34729 if (true) { 34730 if (!assertNodeMatch(elm, vnode, inVPre)) { 34731 return false 34732 } 34733 } 34734 if (isDef(data)) { 34735 if (isDef(i = data.hook) && isDef(i = i.init)) { i(vnode, true /* hydrating */); } 34736 if (isDef(i = vnode.componentInstance)) { 34737 // child component. it should have hydrated its own tree. 34738 initComponent(vnode, insertedVnodeQueue); 34739 return true 34740 } 34741 } 34742 if (isDef(tag)) { 34743 if (isDef(children)) { 34744 // empty element, allow client to pick up and populate children 34745 if (!elm.hasChildNodes()) { 34746 createChildren(vnode, children, insertedVnodeQueue); 34747 } else { 34748 // v-html and domProps: innerHTML 34749 if (isDef(i = data) && isDef(i = i.domProps) && isDef(i = i.innerHTML)) { 34750 if (i !== elm.innerHTML) { 34751 /* istanbul ignore if */ 34752 if ( true && 34753 typeof console !== 'undefined' && 34754 !hydrationBailed 34755 ) { 34756 hydrationBailed = true; 34757 console.warn('Parent: ', elm); 34758 console.warn('server innerHTML: ', i); 34759 console.warn('client innerHTML: ', elm.innerHTML); 34760 } 34761 return false 34762 } 34763 } else { 34764 // iterate and compare children lists 34765 var childrenMatch = true; 34766 var childNode = elm.firstChild; 34767 for (var i$1 = 0; i$1 < children.length; i$1++) { 34768 if (!childNode || !hydrate(childNode, children[i$1], insertedVnodeQueue, inVPre)) { 34769 childrenMatch = false; 34770 break 34771 } 34772 childNode = childNode.nextSibling; 34773 } 34774 // if childNode is not null, it means the actual childNodes list is 34775 // longer than the virtual children list. 34776 if (!childrenMatch || childNode) { 34777 /* istanbul ignore if */ 34778 if ( true && 34779 typeof console !== 'undefined' && 34780 !hydrationBailed 34781 ) { 34782 hydrationBailed = true; 34783 console.warn('Parent: ', elm); 34784 console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children); 34785 } 34786 return false 34787 } 34788 } 34789 } 34790 } 34791 if (isDef(data)) { 34792 var fullInvoke = false; 34793 for (var key in data) { 34794 if (!isRenderedModule(key)) { 34795 fullInvoke = true; 34796 invokeCreateHooks(vnode, insertedVnodeQueue); 34797 break 34798 } 34799 } 34800 if (!fullInvoke && data['class']) { 34801 // ensure collecting deps for deep class bindings for future updates 34802 traverse(data['class']); 34803 } 34804 } 34805 } else if (elm.data !== vnode.text) { 34806 elm.data = vnode.text; 34807 } 34808 return true 34809 } 34810 34811 function assertNodeMatch (node, vnode, inVPre) { 34812 if (isDef(vnode.tag)) { 34813 return vnode.tag.indexOf('vue-component') === 0 || ( 34814 !isUnknownElement$$1(vnode, inVPre) && 34815 vnode.tag.toLowerCase() === (node.tagName && node.tagName.toLowerCase()) 34816 ) 34817 } else { 34818 return node.nodeType === (vnode.isComment ? 8 : 3) 34819 } 34820 } 34821 34822 return function patch (oldVnode, vnode, hydrating, removeOnly) { 34823 if (isUndef(vnode)) { 34824 if (isDef(oldVnode)) { invokeDestroyHook(oldVnode); } 34825 return 34826 } 34827 34828 var isInitialPatch = false; 34829 var insertedVnodeQueue = []; 34830 34831 if (isUndef(oldVnode)) { 34832 // empty mount (likely as component), create new root element 34833 isInitialPatch = true; 34834 createElm(vnode, insertedVnodeQueue); 34835 } else { 34836 var isRealElement = isDef(oldVnode.nodeType); 34837 if (!isRealElement && sameVnode(oldVnode, vnode)) { 34838 // patch existing root node 34839 patchVnode(oldVnode, vnode, insertedVnodeQueue, null, null, removeOnly); 34840 } else { 34841 if (isRealElement) { 34842 // mounting to a real element 34843 // check if this is server-rendered content and if we can perform 34844 // a successful hydration. 34845 if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) { 34846 oldVnode.removeAttribute(SSR_ATTR); 34847 hydrating = true; 34848 } 34849 if (isTrue(hydrating)) { 34850 if (hydrate(oldVnode, vnode, insertedVnodeQueue)) { 34851 invokeInsertHook(vnode, insertedVnodeQueue, true); 34852 return oldVnode 34853 } else if (true) { 34854 warn( 34855 'The client-side rendered virtual DOM tree is not matching ' + 34856 'server-rendered content. This is likely caused by incorrect ' + 34857 'HTML markup, for example nesting block-level elements inside ' + 34858 '<p>, or missing <tbody>. Bailing hydration and performing ' + 34859 'full client-side render.' 34860 ); 34861 } 34862 } 34863 // either not server-rendered, or hydration failed. 34864 // create an empty node and replace it 34865 oldVnode = emptyNodeAt(oldVnode); 34866 } 34867 34868 // replacing existing element 34869 var oldElm = oldVnode.elm; 34870 var parentElm = nodeOps.parentNode(oldElm); 34871 34872 // create new node 34873 createElm( 34874 vnode, 34875 insertedVnodeQueue, 34876 // extremely rare edge case: do not insert if old element is in a 34877 // leaving transition. Only happens when combining transition + 34878 // keep-alive + HOCs. (#4590) 34879 oldElm._leaveCb ? null : parentElm, 34880 nodeOps.nextSibling(oldElm) 34881 ); 34882 34883 // update parent placeholder node element, recursively 34884 if (isDef(vnode.parent)) { 34885 var ancestor = vnode.parent; 34886 var patchable = isPatchable(vnode); 34887 while (ancestor) { 34888 for (var i = 0; i < cbs.destroy.length; ++i) { 34889 cbs.destroy[i](ancestor); 34890 } 34891 ancestor.elm = vnode.elm; 34892 if (patchable) { 34893 for (var i$1 = 0; i$1 < cbs.create.length; ++i$1) { 34894 cbs.create[i$1](emptyNode, ancestor); 34895 } 34896 // #6513 34897 // invoke insert hooks that may have been merged by create hooks. 34898 // e.g. for directives that uses the "inserted" hook. 34899 var insert = ancestor.data.hook.insert; 34900 if (insert.merged) { 34901 // start at index 1 to avoid re-invoking component mounted hook 34902 for (var i$2 = 1; i$2 < insert.fns.length; i$2++) { 34903 insert.fns[i$2](); 34904 } 34905 } 34906 } else { 34907 registerRef(ancestor); 34908 } 34909 ancestor = ancestor.parent; 34910 } 34911 } 34912 34913 // destroy old node 34914 if (isDef(parentElm)) { 34915 removeVnodes([oldVnode], 0, 0); 34916 } else if (isDef(oldVnode.tag)) { 34917 invokeDestroyHook(oldVnode); 34918 } 34919 } 34920 } 34921 34922 invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch); 34923 return vnode.elm 34924 } 34925} 34926 34927/* */ 34928 34929var directives = { 34930 create: updateDirectives, 34931 update: updateDirectives, 34932 destroy: function unbindDirectives (vnode) { 34933 updateDirectives(vnode, emptyNode); 34934 } 34935}; 34936 34937function updateDirectives (oldVnode, vnode) { 34938 if (oldVnode.data.directives || vnode.data.directives) { 34939 _update(oldVnode, vnode); 34940 } 34941} 34942 34943function _update (oldVnode, vnode) { 34944 var isCreate = oldVnode === emptyNode; 34945 var isDestroy = vnode === emptyNode; 34946 var oldDirs = normalizeDirectives$1(oldVnode.data.directives, oldVnode.context); 34947 var newDirs = normalizeDirectives$1(vnode.data.directives, vnode.context); 34948 34949 var dirsWithInsert = []; 34950 var dirsWithPostpatch = []; 34951 34952 var key, oldDir, dir; 34953 for (key in newDirs) { 34954 oldDir = oldDirs[key]; 34955 dir = newDirs[key]; 34956 if (!oldDir) { 34957 // new directive, bind 34958 callHook$1(dir, 'bind', vnode, oldVnode); 34959 if (dir.def && dir.def.inserted) { 34960 dirsWithInsert.push(dir); 34961 } 34962 } else { 34963 // existing directive, update 34964 dir.oldValue = oldDir.value; 34965 dir.oldArg = oldDir.arg; 34966 callHook$1(dir, 'update', vnode, oldVnode); 34967 if (dir.def && dir.def.componentUpdated) { 34968 dirsWithPostpatch.push(dir); 34969 } 34970 } 34971 } 34972 34973 if (dirsWithInsert.length) { 34974 var callInsert = function () { 34975 for (var i = 0; i < dirsWithInsert.length; i++) { 34976 callHook$1(dirsWithInsert[i], 'inserted', vnode, oldVnode); 34977 } 34978 }; 34979 if (isCreate) { 34980 mergeVNodeHook(vnode, 'insert', callInsert); 34981 } else { 34982 callInsert(); 34983 } 34984 } 34985 34986 if (dirsWithPostpatch.length) { 34987 mergeVNodeHook(vnode, 'postpatch', function () { 34988 for (var i = 0; i < dirsWithPostpatch.length; i++) { 34989 callHook$1(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode); 34990 } 34991 }); 34992 } 34993 34994 if (!isCreate) { 34995 for (key in oldDirs) { 34996 if (!newDirs[key]) { 34997 // no longer present, unbind 34998 callHook$1(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy); 34999 } 35000 } 35001 } 35002} 35003 35004var emptyModifiers = Object.create(null); 35005 35006function normalizeDirectives$1 ( 35007 dirs, 35008 vm 35009) { 35010 var res = Object.create(null); 35011 if (!dirs) { 35012 // $flow-disable-line 35013 return res 35014 } 35015 var i, dir; 35016 for (i = 0; i < dirs.length; i++) { 35017 dir = dirs[i]; 35018 if (!dir.modifiers) { 35019 // $flow-disable-line 35020 dir.modifiers = emptyModifiers; 35021 } 35022 res[getRawDirName(dir)] = dir; 35023 dir.def = resolveAsset(vm.$options, 'directives', dir.name, true); 35024 } 35025 // $flow-disable-line 35026 return res 35027} 35028 35029function getRawDirName (dir) { 35030 return dir.rawName || ((dir.name) + "." + (Object.keys(dir.modifiers || {}).join('.'))) 35031} 35032 35033function callHook$1 (dir, hook, vnode, oldVnode, isDestroy) { 35034 var fn = dir.def && dir.def[hook]; 35035 if (fn) { 35036 try { 35037 fn(vnode.elm, dir, vnode, oldVnode, isDestroy); 35038 } catch (e) { 35039 handleError(e, vnode.context, ("directive " + (dir.name) + " " + hook + " hook")); 35040 } 35041 } 35042} 35043 35044var baseModules = [ 35045 ref, 35046 directives 35047]; 35048 35049/* */ 35050 35051function updateAttrs (oldVnode, vnode) { 35052 var opts = vnode.componentOptions; 35053 if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) { 35054 return 35055 } 35056 if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) { 35057 return 35058 } 35059 var key, cur, old; 35060 var elm = vnode.elm; 35061 var oldAttrs = oldVnode.data.attrs || {}; 35062 var attrs = vnode.data.attrs || {}; 35063 // clone observed objects, as the user probably wants to mutate it 35064 if (isDef(attrs.__ob__)) { 35065 attrs = vnode.data.attrs = extend({}, attrs); 35066 } 35067 35068 for (key in attrs) { 35069 cur = attrs[key]; 35070 old = oldAttrs[key]; 35071 if (old !== cur) { 35072 setAttr(elm, key, cur, vnode.data.pre); 35073 } 35074 } 35075 // #4391: in IE9, setting type can reset value for input[type=radio] 35076 // #6666: IE/Edge forces progress value down to 1 before setting a max 35077 /* istanbul ignore if */ 35078 if ((isIE || isEdge) && attrs.value !== oldAttrs.value) { 35079 setAttr(elm, 'value', attrs.value); 35080 } 35081 for (key in oldAttrs) { 35082 if (isUndef(attrs[key])) { 35083 if (isXlink(key)) { 35084 elm.removeAttributeNS(xlinkNS, getXlinkProp(key)); 35085 } else if (!isEnumeratedAttr(key)) { 35086 elm.removeAttribute(key); 35087 } 35088 } 35089 } 35090} 35091 35092function setAttr (el, key, value, isInPre) { 35093 if (isInPre || el.tagName.indexOf('-') > -1) { 35094 baseSetAttr(el, key, value); 35095 } else if (isBooleanAttr(key)) { 35096 // set attribute for blank value 35097 // e.g. <option disabled>Select one</option> 35098 if (isFalsyAttrValue(value)) { 35099 el.removeAttribute(key); 35100 } else { 35101 // technically allowfullscreen is a boolean attribute for <iframe>, 35102 // but Flash expects a value of "true" when used on <embed> tag 35103 value = key === 'allowfullscreen' && el.tagName === 'EMBED' 35104 ? 'true' 35105 : key; 35106 el.setAttribute(key, value); 35107 } 35108 } else if (isEnumeratedAttr(key)) { 35109 el.setAttribute(key, convertEnumeratedValue(key, value)); 35110 } else if (isXlink(key)) { 35111 if (isFalsyAttrValue(value)) { 35112 el.removeAttributeNS(xlinkNS, getXlinkProp(key)); 35113 } else { 35114 el.setAttributeNS(xlinkNS, key, value); 35115 } 35116 } else { 35117 baseSetAttr(el, key, value); 35118 } 35119} 35120 35121function baseSetAttr (el, key, value) { 35122 if (isFalsyAttrValue(value)) { 35123 el.removeAttribute(key); 35124 } else { 35125 // #7138: IE10 & 11 fires input event when setting placeholder on 35126 // <textarea>... block the first input event and remove the blocker 35127 // immediately. 35128 /* istanbul ignore if */ 35129 if ( 35130 isIE && !isIE9 && 35131 el.tagName === 'TEXTAREA' && 35132 key === 'placeholder' && value !== '' && !el.__ieph 35133 ) { 35134 var blocker = function (e) { 35135 e.stopImmediatePropagation(); 35136 el.removeEventListener('input', blocker); 35137 }; 35138 el.addEventListener('input', blocker); 35139 // $flow-disable-line 35140 el.__ieph = true; /* IE placeholder patched */ 35141 } 35142 el.setAttribute(key, value); 35143 } 35144} 35145 35146var attrs = { 35147 create: updateAttrs, 35148 update: updateAttrs 35149}; 35150 35151/* */ 35152 35153function updateClass (oldVnode, vnode) { 35154 var el = vnode.elm; 35155 var data = vnode.data; 35156 var oldData = oldVnode.data; 35157 if ( 35158 isUndef(data.staticClass) && 35159 isUndef(data.class) && ( 35160 isUndef(oldData) || ( 35161 isUndef(oldData.staticClass) && 35162 isUndef(oldData.class) 35163 ) 35164 ) 35165 ) { 35166 return 35167 } 35168 35169 var cls = genClassForVnode(vnode); 35170 35171 // handle transition classes 35172 var transitionClass = el._transitionClasses; 35173 if (isDef(transitionClass)) { 35174 cls = concat(cls, stringifyClass(transitionClass)); 35175 } 35176 35177 // set the class 35178 if (cls !== el._prevClass) { 35179 el.setAttribute('class', cls); 35180 el._prevClass = cls; 35181 } 35182} 35183 35184var klass = { 35185 create: updateClass, 35186 update: updateClass 35187}; 35188 35189/* */ 35190 35191var validDivisionCharRE = /[\w).+\-_$\]]/; 35192 35193function parseFilters (exp) { 35194 var inSingle = false; 35195 var inDouble = false; 35196 var inTemplateString = false; 35197 var inRegex = false; 35198 var curly = 0; 35199 var square = 0; 35200 var paren = 0; 35201 var lastFilterIndex = 0; 35202 var c, prev, i, expression, filters; 35203 35204 for (i = 0; i < exp.length; i++) { 35205 prev = c; 35206 c = exp.charCodeAt(i); 35207 if (inSingle) { 35208 if (c === 0x27 && prev !== 0x5C) { inSingle = false; } 35209 } else if (inDouble) { 35210 if (c === 0x22 && prev !== 0x5C) { inDouble = false; } 35211 } else if (inTemplateString) { 35212 if (c === 0x60 && prev !== 0x5C) { inTemplateString = false; } 35213 } else if (inRegex) { 35214 if (c === 0x2f && prev !== 0x5C) { inRegex = false; } 35215 } else if ( 35216 c === 0x7C && // pipe 35217 exp.charCodeAt(i + 1) !== 0x7C && 35218 exp.charCodeAt(i - 1) !== 0x7C && 35219 !curly && !square && !paren 35220 ) { 35221 if (expression === undefined) { 35222 // first filter, end of expression 35223 lastFilterIndex = i + 1; 35224 expression = exp.slice(0, i).trim(); 35225 } else { 35226 pushFilter(); 35227 } 35228 } else { 35229 switch (c) { 35230 case 0x22: inDouble = true; break // " 35231 case 0x27: inSingle = true; break // ' 35232 case 0x60: inTemplateString = true; break // ` 35233 case 0x28: paren++; break // ( 35234 case 0x29: paren--; break // ) 35235 case 0x5B: square++; break // [ 35236 case 0x5D: square--; break // ] 35237 case 0x7B: curly++; break // { 35238 case 0x7D: curly--; break // } 35239 } 35240 if (c === 0x2f) { // / 35241 var j = i - 1; 35242 var p = (void 0); 35243 // find first non-whitespace prev char 35244 for (; j >= 0; j--) { 35245 p = exp.charAt(j); 35246 if (p !== ' ') { break } 35247 } 35248 if (!p || !validDivisionCharRE.test(p)) { 35249 inRegex = true; 35250 } 35251 } 35252 } 35253 } 35254 35255 if (expression === undefined) { 35256 expression = exp.slice(0, i).trim(); 35257 } else if (lastFilterIndex !== 0) { 35258 pushFilter(); 35259 } 35260 35261 function pushFilter () { 35262 (filters || (filters = [])).push(exp.slice(lastFilterIndex, i).trim()); 35263 lastFilterIndex = i + 1; 35264 } 35265 35266 if (filters) { 35267 for (i = 0; i < filters.length; i++) { 35268 expression = wrapFilter(expression, filters[i]); 35269 } 35270 } 35271 35272 return expression 35273} 35274 35275function wrapFilter (exp, filter) { 35276 var i = filter.indexOf('('); 35277 if (i < 0) { 35278 // _f: resolveFilter 35279 return ("_f(\"" + filter + "\")(" + exp + ")") 35280 } else { 35281 var name = filter.slice(0, i); 35282 var args = filter.slice(i + 1); 35283 return ("_f(\"" + name + "\")(" + exp + (args !== ')' ? ',' + args : args)) 35284 } 35285} 35286 35287/* */ 35288 35289 35290 35291/* eslint-disable no-unused-vars */ 35292function baseWarn (msg, range) { 35293 console.error(("[Vue compiler]: " + msg)); 35294} 35295/* eslint-enable no-unused-vars */ 35296 35297function pluckModuleFunction ( 35298 modules, 35299 key 35300) { 35301 return modules 35302 ? modules.map(function (m) { return m[key]; }).filter(function (_) { return _; }) 35303 : [] 35304} 35305 35306function addProp (el, name, value, range, dynamic) { 35307 (el.props || (el.props = [])).push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range)); 35308 el.plain = false; 35309} 35310 35311function addAttr (el, name, value, range, dynamic) { 35312 var attrs = dynamic 35313 ? (el.dynamicAttrs || (el.dynamicAttrs = [])) 35314 : (el.attrs || (el.attrs = [])); 35315 attrs.push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range)); 35316 el.plain = false; 35317} 35318 35319// add a raw attr (use this in preTransforms) 35320function addRawAttr (el, name, value, range) { 35321 el.attrsMap[name] = value; 35322 el.attrsList.push(rangeSetItem({ name: name, value: value }, range)); 35323} 35324 35325function addDirective ( 35326 el, 35327 name, 35328 rawName, 35329 value, 35330 arg, 35331 isDynamicArg, 35332 modifiers, 35333 range 35334) { 35335 (el.directives || (el.directives = [])).push(rangeSetItem({ 35336 name: name, 35337 rawName: rawName, 35338 value: value, 35339 arg: arg, 35340 isDynamicArg: isDynamicArg, 35341 modifiers: modifiers 35342 }, range)); 35343 el.plain = false; 35344} 35345 35346function prependModifierMarker (symbol, name, dynamic) { 35347 return dynamic 35348 ? ("_p(" + name + ",\"" + symbol + "\")") 35349 : symbol + name // mark the event as captured 35350} 35351 35352function addHandler ( 35353 el, 35354 name, 35355 value, 35356 modifiers, 35357 important, 35358 warn, 35359 range, 35360 dynamic 35361) { 35362 modifiers = modifiers || emptyObject; 35363 // warn prevent and passive modifier 35364 /* istanbul ignore if */ 35365 if ( 35366 true && warn && 35367 modifiers.prevent && modifiers.passive 35368 ) { 35369 warn( 35370 'passive and prevent can\'t be used together. ' + 35371 'Passive handler can\'t prevent default event.', 35372 range 35373 ); 35374 } 35375 35376 // normalize click.right and click.middle since they don't actually fire 35377 // this is technically browser-specific, but at least for now browsers are 35378 // the only target envs that have right/middle clicks. 35379 if (modifiers.right) { 35380 if (dynamic) { 35381 name = "(" + name + ")==='click'?'contextmenu':(" + name + ")"; 35382 } else if (name === 'click') { 35383 name = 'contextmenu'; 35384 delete modifiers.right; 35385 } 35386 } else if (modifiers.middle) { 35387 if (dynamic) { 35388 name = "(" + name + ")==='click'?'mouseup':(" + name + ")"; 35389 } else if (name === 'click') { 35390 name = 'mouseup'; 35391 } 35392 } 35393 35394 // check capture modifier 35395 if (modifiers.capture) { 35396 delete modifiers.capture; 35397 name = prependModifierMarker('!', name, dynamic); 35398 } 35399 if (modifiers.once) { 35400 delete modifiers.once; 35401 name = prependModifierMarker('~', name, dynamic); 35402 } 35403 /* istanbul ignore if */ 35404 if (modifiers.passive) { 35405 delete modifiers.passive; 35406 name = prependModifierMarker('&', name, dynamic); 35407 } 35408 35409 var events; 35410 if (modifiers.native) { 35411 delete modifiers.native; 35412 events = el.nativeEvents || (el.nativeEvents = {}); 35413 } else { 35414 events = el.events || (el.events = {}); 35415 } 35416 35417 var newHandler = rangeSetItem({ value: value.trim(), dynamic: dynamic }, range); 35418 if (modifiers !== emptyObject) { 35419 newHandler.modifiers = modifiers; 35420 } 35421 35422 var handlers = events[name]; 35423 /* istanbul ignore if */ 35424 if (Array.isArray(handlers)) { 35425 important ? handlers.unshift(newHandler) : handlers.push(newHandler); 35426 } else if (handlers) { 35427 events[name] = important ? [newHandler, handlers] : [handlers, newHandler]; 35428 } else { 35429 events[name] = newHandler; 35430 } 35431 35432 el.plain = false; 35433} 35434 35435function getRawBindingAttr ( 35436 el, 35437 name 35438) { 35439 return el.rawAttrsMap[':' + name] || 35440 el.rawAttrsMap['v-bind:' + name] || 35441 el.rawAttrsMap[name] 35442} 35443 35444function getBindingAttr ( 35445 el, 35446 name, 35447 getStatic 35448) { 35449 var dynamicValue = 35450 getAndRemoveAttr(el, ':' + name) || 35451 getAndRemoveAttr(el, 'v-bind:' + name); 35452 if (dynamicValue != null) { 35453 return parseFilters(dynamicValue) 35454 } else if (getStatic !== false) { 35455 var staticValue = getAndRemoveAttr(el, name); 35456 if (staticValue != null) { 35457 return JSON.stringify(staticValue) 35458 } 35459 } 35460} 35461 35462// note: this only removes the attr from the Array (attrsList) so that it 35463// doesn't get processed by processAttrs. 35464// By default it does NOT remove it from the map (attrsMap) because the map is 35465// needed during codegen. 35466function getAndRemoveAttr ( 35467 el, 35468 name, 35469 removeFromMap 35470) { 35471 var val; 35472 if ((val = el.attrsMap[name]) != null) { 35473 var list = el.attrsList; 35474 for (var i = 0, l = list.length; i < l; i++) { 35475 if (list[i].name === name) { 35476 list.splice(i, 1); 35477 break 35478 } 35479 } 35480 } 35481 if (removeFromMap) { 35482 delete el.attrsMap[name]; 35483 } 35484 return val 35485} 35486 35487function getAndRemoveAttrByRegex ( 35488 el, 35489 name 35490) { 35491 var list = el.attrsList; 35492 for (var i = 0, l = list.length; i < l; i++) { 35493 var attr = list[i]; 35494 if (name.test(attr.name)) { 35495 list.splice(i, 1); 35496 return attr 35497 } 35498 } 35499} 35500 35501function rangeSetItem ( 35502 item, 35503 range 35504) { 35505 if (range) { 35506 if (range.start != null) { 35507 item.start = range.start; 35508 } 35509 if (range.end != null) { 35510 item.end = range.end; 35511 } 35512 } 35513 return item 35514} 35515 35516/* */ 35517 35518/** 35519 * Cross-platform code generation for component v-model 35520 */ 35521function genComponentModel ( 35522 el, 35523 value, 35524 modifiers 35525) { 35526 var ref = modifiers || {}; 35527 var number = ref.number; 35528 var trim = ref.trim; 35529 35530 var baseValueExpression = '$$v'; 35531 var valueExpression = baseValueExpression; 35532 if (trim) { 35533 valueExpression = 35534 "(typeof " + baseValueExpression + " === 'string'" + 35535 "? " + baseValueExpression + ".trim()" + 35536 ": " + baseValueExpression + ")"; 35537 } 35538 if (number) { 35539 valueExpression = "_n(" + valueExpression + ")"; 35540 } 35541 var assignment = genAssignmentCode(value, valueExpression); 35542 35543 el.model = { 35544 value: ("(" + value + ")"), 35545 expression: JSON.stringify(value), 35546 callback: ("function (" + baseValueExpression + ") {" + assignment + "}") 35547 }; 35548} 35549 35550/** 35551 * Cross-platform codegen helper for generating v-model value assignment code. 35552 */ 35553function genAssignmentCode ( 35554 value, 35555 assignment 35556) { 35557 var res = parseModel(value); 35558 if (res.key === null) { 35559 return (value + "=" + assignment) 35560 } else { 35561 return ("$set(" + (res.exp) + ", " + (res.key) + ", " + assignment + ")") 35562 } 35563} 35564 35565/** 35566 * Parse a v-model expression into a base path and a final key segment. 35567 * Handles both dot-path and possible square brackets. 35568 * 35569 * Possible cases: 35570 * 35571 * - test 35572 * - test[key] 35573 * - test[test1[key]] 35574 * - test["a"][key] 35575 * - xxx.test[a[a].test1[key]] 35576 * - test.xxx.a["asa"][test1[key]] 35577 * 35578 */ 35579 35580var len, str, chr, index$1, expressionPos, expressionEndPos; 35581 35582 35583 35584function parseModel (val) { 35585 // Fix https://github.com/vuejs/vue/pull/7730 35586 // allow v-model="obj.val " (trailing whitespace) 35587 val = val.trim(); 35588 len = val.length; 35589 35590 if (val.indexOf('[') < 0 || val.lastIndexOf(']') < len - 1) { 35591 index$1 = val.lastIndexOf('.'); 35592 if (index$1 > -1) { 35593 return { 35594 exp: val.slice(0, index$1), 35595 key: '"' + val.slice(index$1 + 1) + '"' 35596 } 35597 } else { 35598 return { 35599 exp: val, 35600 key: null 35601 } 35602 } 35603 } 35604 35605 str = val; 35606 index$1 = expressionPos = expressionEndPos = 0; 35607 35608 while (!eof()) { 35609 chr = next(); 35610 /* istanbul ignore if */ 35611 if (isStringStart(chr)) { 35612 parseString(chr); 35613 } else if (chr === 0x5B) { 35614 parseBracket(chr); 35615 } 35616 } 35617 35618 return { 35619 exp: val.slice(0, expressionPos), 35620 key: val.slice(expressionPos + 1, expressionEndPos) 35621 } 35622} 35623 35624function next () { 35625 return str.charCodeAt(++index$1) 35626} 35627 35628function eof () { 35629 return index$1 >= len 35630} 35631 35632function isStringStart (chr) { 35633 return chr === 0x22 || chr === 0x27 35634} 35635 35636function parseBracket (chr) { 35637 var inBracket = 1; 35638 expressionPos = index$1; 35639 while (!eof()) { 35640 chr = next(); 35641 if (isStringStart(chr)) { 35642 parseString(chr); 35643 continue 35644 } 35645 if (chr === 0x5B) { inBracket++; } 35646 if (chr === 0x5D) { inBracket--; } 35647 if (inBracket === 0) { 35648 expressionEndPos = index$1; 35649 break 35650 } 35651 } 35652} 35653 35654function parseString (chr) { 35655 var stringQuote = chr; 35656 while (!eof()) { 35657 chr = next(); 35658 if (chr === stringQuote) { 35659 break 35660 } 35661 } 35662} 35663 35664/* */ 35665 35666var warn$1; 35667 35668// in some cases, the event used has to be determined at runtime 35669// so we used some reserved tokens during compile. 35670var RANGE_TOKEN = '__r'; 35671var CHECKBOX_RADIO_TOKEN = '__c'; 35672 35673function model ( 35674 el, 35675 dir, 35676 _warn 35677) { 35678 warn$1 = _warn; 35679 var value = dir.value; 35680 var modifiers = dir.modifiers; 35681 var tag = el.tag; 35682 var type = el.attrsMap.type; 35683 35684 if (true) { 35685 // inputs with type="file" are read only and setting the input's 35686 // value will throw an error. 35687 if (tag === 'input' && type === 'file') { 35688 warn$1( 35689 "<" + (el.tag) + " v-model=\"" + value + "\" type=\"file\">:\n" + 35690 "File inputs are read only. Use a v-on:change listener instead.", 35691 el.rawAttrsMap['v-model'] 35692 ); 35693 } 35694 } 35695 35696 if (el.component) { 35697 genComponentModel(el, value, modifiers); 35698 // component v-model doesn't need extra runtime 35699 return false 35700 } else if (tag === 'select') { 35701 genSelect(el, value, modifiers); 35702 } else if (tag === 'input' && type === 'checkbox') { 35703 genCheckboxModel(el, value, modifiers); 35704 } else if (tag === 'input' && type === 'radio') { 35705 genRadioModel(el, value, modifiers); 35706 } else if (tag === 'input' || tag === 'textarea') { 35707 genDefaultModel(el, value, modifiers); 35708 } else if (!config.isReservedTag(tag)) { 35709 genComponentModel(el, value, modifiers); 35710 // component v-model doesn't need extra runtime 35711 return false 35712 } else if (true) { 35713 warn$1( 35714 "<" + (el.tag) + " v-model=\"" + value + "\">: " + 35715 "v-model is not supported on this element type. " + 35716 'If you are working with contenteditable, it\'s recommended to ' + 35717 'wrap a library dedicated for that purpose inside a custom component.', 35718 el.rawAttrsMap['v-model'] 35719 ); 35720 } 35721 35722 // ensure runtime directive metadata 35723 return true 35724} 35725 35726function genCheckboxModel ( 35727 el, 35728 value, 35729 modifiers 35730) { 35731 var number = modifiers && modifiers.number; 35732 var valueBinding = getBindingAttr(el, 'value') || 'null'; 35733 var trueValueBinding = getBindingAttr(el, 'true-value') || 'true'; 35734 var falseValueBinding = getBindingAttr(el, 'false-value') || 'false'; 35735 addProp(el, 'checked', 35736 "Array.isArray(" + value + ")" + 35737 "?_i(" + value + "," + valueBinding + ")>-1" + ( 35738 trueValueBinding === 'true' 35739 ? (":(" + value + ")") 35740 : (":_q(" + value + "," + trueValueBinding + ")") 35741 ) 35742 ); 35743 addHandler(el, 'change', 35744 "var $$a=" + value + "," + 35745 '$$el=$event.target,' + 35746 "$$c=$$el.checked?(" + trueValueBinding + "):(" + falseValueBinding + ");" + 35747 'if(Array.isArray($$a)){' + 35748 "var $$v=" + (number ? '_n(' + valueBinding + ')' : valueBinding) + "," + 35749 '$$i=_i($$a,$$v);' + 35750 "if($$el.checked){$$i<0&&(" + (genAssignmentCode(value, '$$a.concat([$$v])')) + ")}" + 35751 "else{$$i>-1&&(" + (genAssignmentCode(value, '$$a.slice(0,$$i).concat($$a.slice($$i+1))')) + ")}" + 35752 "}else{" + (genAssignmentCode(value, '$$c')) + "}", 35753 null, true 35754 ); 35755} 35756 35757function genRadioModel ( 35758 el, 35759 value, 35760 modifiers 35761) { 35762 var number = modifiers && modifiers.number; 35763 var valueBinding = getBindingAttr(el, 'value') || 'null'; 35764 valueBinding = number ? ("_n(" + valueBinding + ")") : valueBinding; 35765 addProp(el, 'checked', ("_q(" + value + "," + valueBinding + ")")); 35766 addHandler(el, 'change', genAssignmentCode(value, valueBinding), null, true); 35767} 35768 35769function genSelect ( 35770 el, 35771 value, 35772 modifiers 35773) { 35774 var number = modifiers && modifiers.number; 35775 var selectedVal = "Array.prototype.filter" + 35776 ".call($event.target.options,function(o){return o.selected})" + 35777 ".map(function(o){var val = \"_value\" in o ? o._value : o.value;" + 35778 "return " + (number ? '_n(val)' : 'val') + "})"; 35779 35780 var assignment = '$event.target.multiple ? $$selectedVal : $$selectedVal[0]'; 35781 var code = "var $$selectedVal = " + selectedVal + ";"; 35782 code = code + " " + (genAssignmentCode(value, assignment)); 35783 addHandler(el, 'change', code, null, true); 35784} 35785 35786function genDefaultModel ( 35787 el, 35788 value, 35789 modifiers 35790) { 35791 var type = el.attrsMap.type; 35792 35793 // warn if v-bind:value conflicts with v-model 35794 // except for inputs with v-bind:type 35795 if (true) { 35796 var value$1 = el.attrsMap['v-bind:value'] || el.attrsMap[':value']; 35797 var typeBinding = el.attrsMap['v-bind:type'] || el.attrsMap[':type']; 35798 if (value$1 && !typeBinding) { 35799 var binding = el.attrsMap['v-bind:value'] ? 'v-bind:value' : ':value'; 35800 warn$1( 35801 binding + "=\"" + value$1 + "\" conflicts with v-model on the same element " + 35802 'because the latter already expands to a value binding internally', 35803 el.rawAttrsMap[binding] 35804 ); 35805 } 35806 } 35807 35808 var ref = modifiers || {}; 35809 var lazy = ref.lazy; 35810 var number = ref.number; 35811 var trim = ref.trim; 35812 var needCompositionGuard = !lazy && type !== 'range'; 35813 var event = lazy 35814 ? 'change' 35815 : type === 'range' 35816 ? RANGE_TOKEN 35817 : 'input'; 35818 35819 var valueExpression = '$event.target.value'; 35820 if (trim) { 35821 valueExpression = "$event.target.value.trim()"; 35822 } 35823 if (number) { 35824 valueExpression = "_n(" + valueExpression + ")"; 35825 } 35826 35827 var code = genAssignmentCode(value, valueExpression); 35828 if (needCompositionGuard) { 35829 code = "if($event.target.composing)return;" + code; 35830 } 35831 35832 addProp(el, 'value', ("(" + value + ")")); 35833 addHandler(el, event, code, null, true); 35834 if (trim || number) { 35835 addHandler(el, 'blur', '$forceUpdate()'); 35836 } 35837} 35838 35839/* */ 35840 35841// normalize v-model event tokens that can only be determined at runtime. 35842// it's important to place the event as the first in the array because 35843// the whole point is ensuring the v-model callback gets called before 35844// user-attached handlers. 35845function normalizeEvents (on) { 35846 /* istanbul ignore if */ 35847 if (isDef(on[RANGE_TOKEN])) { 35848 // IE input[type=range] only supports `change` event 35849 var event = isIE ? 'change' : 'input'; 35850 on[event] = [].concat(on[RANGE_TOKEN], on[event] || []); 35851 delete on[RANGE_TOKEN]; 35852 } 35853 // This was originally intended to fix #4521 but no longer necessary 35854 // after 2.5. Keeping it for backwards compat with generated code from < 2.4 35855 /* istanbul ignore if */ 35856 if (isDef(on[CHECKBOX_RADIO_TOKEN])) { 35857 on.change = [].concat(on[CHECKBOX_RADIO_TOKEN], on.change || []); 35858 delete on[CHECKBOX_RADIO_TOKEN]; 35859 } 35860} 35861 35862var target$1; 35863 35864function createOnceHandler$1 (event, handler, capture) { 35865 var _target = target$1; // save current target element in closure 35866 return function onceHandler () { 35867 var res = handler.apply(null, arguments); 35868 if (res !== null) { 35869 remove$2(event, onceHandler, capture, _target); 35870 } 35871 } 35872} 35873 35874// #9446: Firefox <= 53 (in particular, ESR 52) has incorrect Event.timeStamp 35875// implementation and does not fire microtasks in between event propagation, so 35876// safe to exclude. 35877var useMicrotaskFix = isUsingMicroTask && !(isFF && Number(isFF[1]) <= 53); 35878 35879function add$1 ( 35880 name, 35881 handler, 35882 capture, 35883 passive 35884) { 35885 // async edge case #6566: inner click event triggers patch, event handler 35886 // attached to outer element during patch, and triggered again. This 35887 // happens because browsers fire microtask ticks between event propagation. 35888 // the solution is simple: we save the timestamp when a handler is attached, 35889 // and the handler would only fire if the event passed to it was fired 35890 // AFTER it was attached. 35891 if (useMicrotaskFix) { 35892 var attachedTimestamp = currentFlushTimestamp; 35893 var original = handler; 35894 handler = original._wrapper = function (e) { 35895 if ( 35896 // no bubbling, should always fire. 35897 // this is just a safety net in case event.timeStamp is unreliable in 35898 // certain weird environments... 35899 e.target === e.currentTarget || 35900 // event is fired after handler attachment 35901 e.timeStamp >= attachedTimestamp || 35902 // bail for environments that have buggy event.timeStamp implementations 35903 // #9462 iOS 9 bug: event.timeStamp is 0 after history.pushState 35904 // #9681 QtWebEngine event.timeStamp is negative value 35905 e.timeStamp <= 0 || 35906 // #9448 bail if event is fired in another document in a multi-page 35907 // electron/nw.js app, since event.timeStamp will be using a different 35908 // starting reference 35909 e.target.ownerDocument !== document 35910 ) { 35911 return original.apply(this, arguments) 35912 } 35913 }; 35914 } 35915 target$1.addEventListener( 35916 name, 35917 handler, 35918 supportsPassive 35919 ? { capture: capture, passive: passive } 35920 : capture 35921 ); 35922} 35923 35924function remove$2 ( 35925 name, 35926 handler, 35927 capture, 35928 _target 35929) { 35930 (_target || target$1).removeEventListener( 35931 name, 35932 handler._wrapper || handler, 35933 capture 35934 ); 35935} 35936 35937function updateDOMListeners (oldVnode, vnode) { 35938 if (isUndef(oldVnode.data.on) && isUndef(vnode.data.on)) { 35939 return 35940 } 35941 var on = vnode.data.on || {}; 35942 var oldOn = oldVnode.data.on || {}; 35943 target$1 = vnode.elm; 35944 normalizeEvents(on); 35945 updateListeners(on, oldOn, add$1, remove$2, createOnceHandler$1, vnode.context); 35946 target$1 = undefined; 35947} 35948 35949var events = { 35950 create: updateDOMListeners, 35951 update: updateDOMListeners 35952}; 35953 35954/* */ 35955 35956var svgContainer; 35957 35958function updateDOMProps (oldVnode, vnode) { 35959 if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) { 35960 return 35961 } 35962 var key, cur; 35963 var elm = vnode.elm; 35964 var oldProps = oldVnode.data.domProps || {}; 35965 var props = vnode.data.domProps || {}; 35966 // clone observed objects, as the user probably wants to mutate it 35967 if (isDef(props.__ob__)) { 35968 props = vnode.data.domProps = extend({}, props); 35969 } 35970 35971 for (key in oldProps) { 35972 if (!(key in props)) { 35973 elm[key] = ''; 35974 } 35975 } 35976 35977 for (key in props) { 35978 cur = props[key]; 35979 // ignore children if the node has textContent or innerHTML, 35980 // as these will throw away existing DOM nodes and cause removal errors 35981 // on subsequent patches (#3360) 35982 if (key === 'textContent' || key === 'innerHTML') { 35983 if (vnode.children) { vnode.children.length = 0; } 35984 if (cur === oldProps[key]) { continue } 35985 // #6601 work around Chrome version <= 55 bug where single textNode 35986 // replaced by innerHTML/textContent retains its parentNode property 35987 if (elm.childNodes.length === 1) { 35988 elm.removeChild(elm.childNodes[0]); 35989 } 35990 } 35991 35992 if (key === 'value' && elm.tagName !== 'PROGRESS') { 35993 // store value as _value as well since 35994 // non-string values will be stringified 35995 elm._value = cur; 35996 // avoid resetting cursor position when value is the same 35997 var strCur = isUndef(cur) ? '' : String(cur); 35998 if (shouldUpdateValue(elm, strCur)) { 35999 elm.value = strCur; 36000 } 36001 } else if (key === 'innerHTML' && isSVG(elm.tagName) && isUndef(elm.innerHTML)) { 36002 // IE doesn't support innerHTML for SVG elements 36003 svgContainer = svgContainer || document.createElement('div'); 36004 svgContainer.innerHTML = "<svg>" + cur + "</svg>"; 36005 var svg = svgContainer.firstChild; 36006 while (elm.firstChild) { 36007 elm.removeChild(elm.firstChild); 36008 } 36009 while (svg.firstChild) { 36010 elm.appendChild(svg.firstChild); 36011 } 36012 } else if ( 36013 // skip the update if old and new VDOM state is the same. 36014 // `value` is handled separately because the DOM value may be temporarily 36015 // out of sync with VDOM state due to focus, composition and modifiers. 36016 // This #4521 by skipping the unnecessary `checked` update. 36017 cur !== oldProps[key] 36018 ) { 36019 // some property updates can throw 36020 // e.g. `value` on <progress> w/ non-finite value 36021 try { 36022 elm[key] = cur; 36023 } catch (e) {} 36024 } 36025 } 36026} 36027 36028// check platforms/web/util/attrs.js acceptValue 36029 36030 36031function shouldUpdateValue (elm, checkVal) { 36032 return (!elm.composing && ( 36033 elm.tagName === 'OPTION' || 36034 isNotInFocusAndDirty(elm, checkVal) || 36035 isDirtyWithModifiers(elm, checkVal) 36036 )) 36037} 36038 36039function isNotInFocusAndDirty (elm, checkVal) { 36040 // return true when textbox (.number and .trim) loses focus and its value is 36041 // not equal to the updated value 36042 var notInFocus = true; 36043 // #6157 36044 // work around IE bug when accessing document.activeElement in an iframe 36045 try { notInFocus = document.activeElement !== elm; } catch (e) {} 36046 return notInFocus && elm.value !== checkVal 36047} 36048 36049function isDirtyWithModifiers (elm, newVal) { 36050 var value = elm.value; 36051 var modifiers = elm._vModifiers; // injected by v-model runtime 36052 if (isDef(modifiers)) { 36053 if (modifiers.number) { 36054 return toNumber(value) !== toNumber(newVal) 36055 } 36056 if (modifiers.trim) { 36057 return value.trim() !== newVal.trim() 36058 } 36059 } 36060 return value !== newVal 36061} 36062 36063var domProps = { 36064 create: updateDOMProps, 36065 update: updateDOMProps 36066}; 36067 36068/* */ 36069 36070var parseStyleText = cached(function (cssText) { 36071 var res = {}; 36072 var listDelimiter = /;(?![^(]*\))/g; 36073 var propertyDelimiter = /:(.+)/; 36074 cssText.split(listDelimiter).forEach(function (item) { 36075 if (item) { 36076 var tmp = item.split(propertyDelimiter); 36077 tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim()); 36078 } 36079 }); 36080 return res 36081}); 36082 36083// merge static and dynamic style data on the same vnode 36084function normalizeStyleData (data) { 36085 var style = normalizeStyleBinding(data.style); 36086 // static style is pre-processed into an object during compilation 36087 // and is always a fresh object, so it's safe to merge into it 36088 return data.staticStyle 36089 ? extend(data.staticStyle, style) 36090 : style 36091} 36092 36093// normalize possible array / string values into Object 36094function normalizeStyleBinding (bindingStyle) { 36095 if (Array.isArray(bindingStyle)) { 36096 return toObject(bindingStyle) 36097 } 36098 if (typeof bindingStyle === 'string') { 36099 return parseStyleText(bindingStyle) 36100 } 36101 return bindingStyle 36102} 36103 36104/** 36105 * parent component style should be after child's 36106 * so that parent component's style could override it 36107 */ 36108function getStyle (vnode, checkChild) { 36109 var res = {}; 36110 var styleData; 36111 36112 if (checkChild) { 36113 var childNode = vnode; 36114 while (childNode.componentInstance) { 36115 childNode = childNode.componentInstance._vnode; 36116 if ( 36117 childNode && childNode.data && 36118 (styleData = normalizeStyleData(childNode.data)) 36119 ) { 36120 extend(res, styleData); 36121 } 36122 } 36123 } 36124 36125 if ((styleData = normalizeStyleData(vnode.data))) { 36126 extend(res, styleData); 36127 } 36128 36129 var parentNode = vnode; 36130 while ((parentNode = parentNode.parent)) { 36131 if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) { 36132 extend(res, styleData); 36133 } 36134 } 36135 return res 36136} 36137 36138/* */ 36139 36140var cssVarRE = /^--/; 36141var importantRE = /\s*!important$/; 36142var setProp = function (el, name, val) { 36143 /* istanbul ignore if */ 36144 if (cssVarRE.test(name)) { 36145 el.style.setProperty(name, val); 36146 } else if (importantRE.test(val)) { 36147 el.style.setProperty(hyphenate(name), val.replace(importantRE, ''), 'important'); 36148 } else { 36149 var normalizedName = normalize(name); 36150 if (Array.isArray(val)) { 36151 // Support values array created by autoprefixer, e.g. 36152 // {display: ["-webkit-box", "-ms-flexbox", "flex"]} 36153 // Set them one by one, and the browser will only set those it can recognize 36154 for (var i = 0, len = val.length; i < len; i++) { 36155 el.style[normalizedName] = val[i]; 36156 } 36157 } else { 36158 el.style[normalizedName] = val; 36159 } 36160 } 36161}; 36162 36163var vendorNames = ['Webkit', 'Moz', 'ms']; 36164 36165var emptyStyle; 36166var normalize = cached(function (prop) { 36167 emptyStyle = emptyStyle || document.createElement('div').style; 36168 prop = camelize(prop); 36169 if (prop !== 'filter' && (prop in emptyStyle)) { 36170 return prop 36171 } 36172 var capName = prop.charAt(0).toUpperCase() + prop.slice(1); 36173 for (var i = 0; i < vendorNames.length; i++) { 36174 var name = vendorNames[i] + capName; 36175 if (name in emptyStyle) { 36176 return name 36177 } 36178 } 36179}); 36180 36181function updateStyle (oldVnode, vnode) { 36182 var data = vnode.data; 36183 var oldData = oldVnode.data; 36184 36185 if (isUndef(data.staticStyle) && isUndef(data.style) && 36186 isUndef(oldData.staticStyle) && isUndef(oldData.style) 36187 ) { 36188 return 36189 } 36190 36191 var cur, name; 36192 var el = vnode.elm; 36193 var oldStaticStyle = oldData.staticStyle; 36194 var oldStyleBinding = oldData.normalizedStyle || oldData.style || {}; 36195 36196 // if static style exists, stylebinding already merged into it when doing normalizeStyleData 36197 var oldStyle = oldStaticStyle || oldStyleBinding; 36198 36199 var style = normalizeStyleBinding(vnode.data.style) || {}; 36200 36201 // store normalized style under a different key for next diff 36202 // make sure to clone it if it's reactive, since the user likely wants 36203 // to mutate it. 36204 vnode.data.normalizedStyle = isDef(style.__ob__) 36205 ? extend({}, style) 36206 : style; 36207 36208 var newStyle = getStyle(vnode, true); 36209 36210 for (name in oldStyle) { 36211 if (isUndef(newStyle[name])) { 36212 setProp(el, name, ''); 36213 } 36214 } 36215 for (name in newStyle) { 36216 cur = newStyle[name]; 36217 if (cur !== oldStyle[name]) { 36218 // ie9 setting to null has no effect, must use empty string 36219 setProp(el, name, cur == null ? '' : cur); 36220 } 36221 } 36222} 36223 36224var style = { 36225 create: updateStyle, 36226 update: updateStyle 36227}; 36228 36229/* */ 36230 36231var whitespaceRE = /\s+/; 36232 36233/** 36234 * Add class with compatibility for SVG since classList is not supported on 36235 * SVG elements in IE 36236 */ 36237function addClass (el, cls) { 36238 /* istanbul ignore if */ 36239 if (!cls || !(cls = cls.trim())) { 36240 return 36241 } 36242 36243 /* istanbul ignore else */ 36244 if (el.classList) { 36245 if (cls.indexOf(' ') > -1) { 36246 cls.split(whitespaceRE).forEach(function (c) { return el.classList.add(c); }); 36247 } else { 36248 el.classList.add(cls); 36249 } 36250 } else { 36251 var cur = " " + (el.getAttribute('class') || '') + " "; 36252 if (cur.indexOf(' ' + cls + ' ') < 0) { 36253 el.setAttribute('class', (cur + cls).trim()); 36254 } 36255 } 36256} 36257 36258/** 36259 * Remove class with compatibility for SVG since classList is not supported on 36260 * SVG elements in IE 36261 */ 36262function removeClass (el, cls) { 36263 /* istanbul ignore if */ 36264 if (!cls || !(cls = cls.trim())) { 36265 return 36266 } 36267 36268 /* istanbul ignore else */ 36269 if (el.classList) { 36270 if (cls.indexOf(' ') > -1) { 36271 cls.split(whitespaceRE).forEach(function (c) { return el.classList.remove(c); }); 36272 } else { 36273 el.classList.remove(cls); 36274 } 36275 if (!el.classList.length) { 36276 el.removeAttribute('class'); 36277 } 36278 } else { 36279 var cur = " " + (el.getAttribute('class') || '') + " "; 36280 var tar = ' ' + cls + ' '; 36281 while (cur.indexOf(tar) >= 0) { 36282 cur = cur.replace(tar, ' '); 36283 } 36284 cur = cur.trim(); 36285 if (cur) { 36286 el.setAttribute('class', cur); 36287 } else { 36288 el.removeAttribute('class'); 36289 } 36290 } 36291} 36292 36293/* */ 36294 36295function resolveTransition (def$$1) { 36296 if (!def$$1) { 36297 return 36298 } 36299 /* istanbul ignore else */ 36300 if (typeof def$$1 === 'object') { 36301 var res = {}; 36302 if (def$$1.css !== false) { 36303 extend(res, autoCssTransition(def$$1.name || 'v')); 36304 } 36305 extend(res, def$$1); 36306 return res 36307 } else if (typeof def$$1 === 'string') { 36308 return autoCssTransition(def$$1) 36309 } 36310} 36311 36312var autoCssTransition = cached(function (name) { 36313 return { 36314 enterClass: (name + "-enter"), 36315 enterToClass: (name + "-enter-to"), 36316 enterActiveClass: (name + "-enter-active"), 36317 leaveClass: (name + "-leave"), 36318 leaveToClass: (name + "-leave-to"), 36319 leaveActiveClass: (name + "-leave-active") 36320 } 36321}); 36322 36323var hasTransition = inBrowser && !isIE9; 36324var TRANSITION = 'transition'; 36325var ANIMATION = 'animation'; 36326 36327// Transition property/event sniffing 36328var transitionProp = 'transition'; 36329var transitionEndEvent = 'transitionend'; 36330var animationProp = 'animation'; 36331var animationEndEvent = 'animationend'; 36332if (hasTransition) { 36333 /* istanbul ignore if */ 36334 if (window.ontransitionend === undefined && 36335 window.onwebkittransitionend !== undefined 36336 ) { 36337 transitionProp = 'WebkitTransition'; 36338 transitionEndEvent = 'webkitTransitionEnd'; 36339 } 36340 if (window.onanimationend === undefined && 36341 window.onwebkitanimationend !== undefined 36342 ) { 36343 animationProp = 'WebkitAnimation'; 36344 animationEndEvent = 'webkitAnimationEnd'; 36345 } 36346} 36347 36348// binding to window is necessary to make hot reload work in IE in strict mode 36349var raf = inBrowser 36350 ? window.requestAnimationFrame 36351 ? window.requestAnimationFrame.bind(window) 36352 : setTimeout 36353 : /* istanbul ignore next */ function (fn) { return fn(); }; 36354 36355function nextFrame (fn) { 36356 raf(function () { 36357 raf(fn); 36358 }); 36359} 36360 36361function addTransitionClass (el, cls) { 36362 var transitionClasses = el._transitionClasses || (el._transitionClasses = []); 36363 if (transitionClasses.indexOf(cls) < 0) { 36364 transitionClasses.push(cls); 36365 addClass(el, cls); 36366 } 36367} 36368 36369function removeTransitionClass (el, cls) { 36370 if (el._transitionClasses) { 36371 remove(el._transitionClasses, cls); 36372 } 36373 removeClass(el, cls); 36374} 36375 36376function whenTransitionEnds ( 36377 el, 36378 expectedType, 36379 cb 36380) { 36381 var ref = getTransitionInfo(el, expectedType); 36382 var type = ref.type; 36383 var timeout = ref.timeout; 36384 var propCount = ref.propCount; 36385 if (!type) { return cb() } 36386 var event = type === TRANSITION ? transitionEndEvent : animationEndEvent; 36387 var ended = 0; 36388 var end = function () { 36389 el.removeEventListener(event, onEnd); 36390 cb(); 36391 }; 36392 var onEnd = function (e) { 36393 if (e.target === el) { 36394 if (++ended >= propCount) { 36395 end(); 36396 } 36397 } 36398 }; 36399 setTimeout(function () { 36400 if (ended < propCount) { 36401 end(); 36402 } 36403 }, timeout + 1); 36404 el.addEventListener(event, onEnd); 36405} 36406 36407var transformRE = /\b(transform|all)(,|$)/; 36408 36409function getTransitionInfo (el, expectedType) { 36410 var styles = window.getComputedStyle(el); 36411 // JSDOM may return undefined for transition properties 36412 var transitionDelays = (styles[transitionProp + 'Delay'] || '').split(', '); 36413 var transitionDurations = (styles[transitionProp + 'Duration'] || '').split(', '); 36414 var transitionTimeout = getTimeout(transitionDelays, transitionDurations); 36415 var animationDelays = (styles[animationProp + 'Delay'] || '').split(', '); 36416 var animationDurations = (styles[animationProp + 'Duration'] || '').split(', '); 36417 var animationTimeout = getTimeout(animationDelays, animationDurations); 36418 36419 var type; 36420 var timeout = 0; 36421 var propCount = 0; 36422 /* istanbul ignore if */ 36423 if (expectedType === TRANSITION) { 36424 if (transitionTimeout > 0) { 36425 type = TRANSITION; 36426 timeout = transitionTimeout; 36427 propCount = transitionDurations.length; 36428 } 36429 } else if (expectedType === ANIMATION) { 36430 if (animationTimeout > 0) { 36431 type = ANIMATION; 36432 timeout = animationTimeout; 36433 propCount = animationDurations.length; 36434 } 36435 } else { 36436 timeout = Math.max(transitionTimeout, animationTimeout); 36437 type = timeout > 0 36438 ? transitionTimeout > animationTimeout 36439 ? TRANSITION 36440 : ANIMATION 36441 : null; 36442 propCount = type 36443 ? type === TRANSITION 36444 ? transitionDurations.length 36445 : animationDurations.length 36446 : 0; 36447 } 36448 var hasTransform = 36449 type === TRANSITION && 36450 transformRE.test(styles[transitionProp + 'Property']); 36451 return { 36452 type: type, 36453 timeout: timeout, 36454 propCount: propCount, 36455 hasTransform: hasTransform 36456 } 36457} 36458 36459function getTimeout (delays, durations) { 36460 /* istanbul ignore next */ 36461 while (delays.length < durations.length) { 36462 delays = delays.concat(delays); 36463 } 36464 36465 return Math.max.apply(null, durations.map(function (d, i) { 36466 return toMs(d) + toMs(delays[i]) 36467 })) 36468} 36469 36470// Old versions of Chromium (below 61.0.3163.100) formats floating pointer numbers 36471// in a locale-dependent way, using a comma instead of a dot. 36472// If comma is not replaced with a dot, the input will be rounded down (i.e. acting 36473// as a floor function) causing unexpected behaviors 36474function toMs (s) { 36475 return Number(s.slice(0, -1).replace(',', '.')) * 1000 36476} 36477 36478/* */ 36479 36480function enter (vnode, toggleDisplay) { 36481 var el = vnode.elm; 36482 36483 // call leave callback now 36484 if (isDef(el._leaveCb)) { 36485 el._leaveCb.cancelled = true; 36486 el._leaveCb(); 36487 } 36488 36489 var data = resolveTransition(vnode.data.transition); 36490 if (isUndef(data)) { 36491 return 36492 } 36493 36494 /* istanbul ignore if */ 36495 if (isDef(el._enterCb) || el.nodeType !== 1) { 36496 return 36497 } 36498 36499 var css = data.css; 36500 var type = data.type; 36501 var enterClass = data.enterClass; 36502 var enterToClass = data.enterToClass; 36503 var enterActiveClass = data.enterActiveClass; 36504 var appearClass = data.appearClass; 36505 var appearToClass = data.appearToClass; 36506 var appearActiveClass = data.appearActiveClass; 36507 var beforeEnter = data.beforeEnter; 36508 var enter = data.enter; 36509 var afterEnter = data.afterEnter; 36510 var enterCancelled = data.enterCancelled; 36511 var beforeAppear = data.beforeAppear; 36512 var appear = data.appear; 36513 var afterAppear = data.afterAppear; 36514 var appearCancelled = data.appearCancelled; 36515 var duration = data.duration; 36516 36517 // activeInstance will always be the <transition> component managing this 36518 // transition. One edge case to check is when the <transition> is placed 36519 // as the root node of a child component. In that case we need to check 36520 // <transition>'s parent for appear check. 36521 var context = activeInstance; 36522 var transitionNode = activeInstance.$vnode; 36523 while (transitionNode && transitionNode.parent) { 36524 context = transitionNode.context; 36525 transitionNode = transitionNode.parent; 36526 } 36527 36528 var isAppear = !context._isMounted || !vnode.isRootInsert; 36529 36530 if (isAppear && !appear && appear !== '') { 36531 return 36532 } 36533 36534 var startClass = isAppear && appearClass 36535 ? appearClass 36536 : enterClass; 36537 var activeClass = isAppear && appearActiveClass 36538 ? appearActiveClass 36539 : enterActiveClass; 36540 var toClass = isAppear && appearToClass 36541 ? appearToClass 36542 : enterToClass; 36543 36544 var beforeEnterHook = isAppear 36545 ? (beforeAppear || beforeEnter) 36546 : beforeEnter; 36547 var enterHook = isAppear 36548 ? (typeof appear === 'function' ? appear : enter) 36549 : enter; 36550 var afterEnterHook = isAppear 36551 ? (afterAppear || afterEnter) 36552 : afterEnter; 36553 var enterCancelledHook = isAppear 36554 ? (appearCancelled || enterCancelled) 36555 : enterCancelled; 36556 36557 var explicitEnterDuration = toNumber( 36558 isObject(duration) 36559 ? duration.enter 36560 : duration 36561 ); 36562 36563 if ( true && explicitEnterDuration != null) { 36564 checkDuration(explicitEnterDuration, 'enter', vnode); 36565 } 36566 36567 var expectsCSS = css !== false && !isIE9; 36568 var userWantsControl = getHookArgumentsLength(enterHook); 36569 36570 var cb = el._enterCb = once(function () { 36571 if (expectsCSS) { 36572 removeTransitionClass(el, toClass); 36573 removeTransitionClass(el, activeClass); 36574 } 36575 if (cb.cancelled) { 36576 if (expectsCSS) { 36577 removeTransitionClass(el, startClass); 36578 } 36579 enterCancelledHook && enterCancelledHook(el); 36580 } else { 36581 afterEnterHook && afterEnterHook(el); 36582 } 36583 el._enterCb = null; 36584 }); 36585 36586 if (!vnode.data.show) { 36587 // remove pending leave element on enter by injecting an insert hook 36588 mergeVNodeHook(vnode, 'insert', function () { 36589 var parent = el.parentNode; 36590 var pendingNode = parent && parent._pending && parent._pending[vnode.key]; 36591 if (pendingNode && 36592 pendingNode.tag === vnode.tag && 36593 pendingNode.elm._leaveCb 36594 ) { 36595 pendingNode.elm._leaveCb(); 36596 } 36597 enterHook && enterHook(el, cb); 36598 }); 36599 } 36600 36601 // start enter transition 36602 beforeEnterHook && beforeEnterHook(el); 36603 if (expectsCSS) { 36604 addTransitionClass(el, startClass); 36605 addTransitionClass(el, activeClass); 36606 nextFrame(function () { 36607 removeTransitionClass(el, startClass); 36608 if (!cb.cancelled) { 36609 addTransitionClass(el, toClass); 36610 if (!userWantsControl) { 36611 if (isValidDuration(explicitEnterDuration)) { 36612 setTimeout(cb, explicitEnterDuration); 36613 } else { 36614 whenTransitionEnds(el, type, cb); 36615 } 36616 } 36617 } 36618 }); 36619 } 36620 36621 if (vnode.data.show) { 36622 toggleDisplay && toggleDisplay(); 36623 enterHook && enterHook(el, cb); 36624 } 36625 36626 if (!expectsCSS && !userWantsControl) { 36627 cb(); 36628 } 36629} 36630 36631function leave (vnode, rm) { 36632 var el = vnode.elm; 36633 36634 // call enter callback now 36635 if (isDef(el._enterCb)) { 36636 el._enterCb.cancelled = true; 36637 el._enterCb(); 36638 } 36639 36640 var data = resolveTransition(vnode.data.transition); 36641 if (isUndef(data) || el.nodeType !== 1) { 36642 return rm() 36643 } 36644 36645 /* istanbul ignore if */ 36646 if (isDef(el._leaveCb)) { 36647 return 36648 } 36649 36650 var css = data.css; 36651 var type = data.type; 36652 var leaveClass = data.leaveClass; 36653 var leaveToClass = data.leaveToClass; 36654 var leaveActiveClass = data.leaveActiveClass; 36655 var beforeLeave = data.beforeLeave; 36656 var leave = data.leave; 36657 var afterLeave = data.afterLeave; 36658 var leaveCancelled = data.leaveCancelled; 36659 var delayLeave = data.delayLeave; 36660 var duration = data.duration; 36661 36662 var expectsCSS = css !== false && !isIE9; 36663 var userWantsControl = getHookArgumentsLength(leave); 36664 36665 var explicitLeaveDuration = toNumber( 36666 isObject(duration) 36667 ? duration.leave 36668 : duration 36669 ); 36670 36671 if ( true && isDef(explicitLeaveDuration)) { 36672 checkDuration(explicitLeaveDuration, 'leave', vnode); 36673 } 36674 36675 var cb = el._leaveCb = once(function () { 36676 if (el.parentNode && el.parentNode._pending) { 36677 el.parentNode._pending[vnode.key] = null; 36678 } 36679 if (expectsCSS) { 36680 removeTransitionClass(el, leaveToClass); 36681 removeTransitionClass(el, leaveActiveClass); 36682 } 36683 if (cb.cancelled) { 36684 if (expectsCSS) { 36685 removeTransitionClass(el, leaveClass); 36686 } 36687 leaveCancelled && leaveCancelled(el); 36688 } else { 36689 rm(); 36690 afterLeave && afterLeave(el); 36691 } 36692 el._leaveCb = null; 36693 }); 36694 36695 if (delayLeave) { 36696 delayLeave(performLeave); 36697 } else { 36698 performLeave(); 36699 } 36700 36701 function performLeave () { 36702 // the delayed leave may have already been cancelled 36703 if (cb.cancelled) { 36704 return 36705 } 36706 // record leaving element 36707 if (!vnode.data.show && el.parentNode) { 36708 (el.parentNode._pending || (el.parentNode._pending = {}))[(vnode.key)] = vnode; 36709 } 36710 beforeLeave && beforeLeave(el); 36711 if (expectsCSS) { 36712 addTransitionClass(el, leaveClass); 36713 addTransitionClass(el, leaveActiveClass); 36714 nextFrame(function () { 36715 removeTransitionClass(el, leaveClass); 36716 if (!cb.cancelled) { 36717 addTransitionClass(el, leaveToClass); 36718 if (!userWantsControl) { 36719 if (isValidDuration(explicitLeaveDuration)) { 36720 setTimeout(cb, explicitLeaveDuration); 36721 } else { 36722 whenTransitionEnds(el, type, cb); 36723 } 36724 } 36725 } 36726 }); 36727 } 36728 leave && leave(el, cb); 36729 if (!expectsCSS && !userWantsControl) { 36730 cb(); 36731 } 36732 } 36733} 36734 36735// only used in dev mode 36736function checkDuration (val, name, vnode) { 36737 if (typeof val !== 'number') { 36738 warn( 36739 "<transition> explicit " + name + " duration is not a valid number - " + 36740 "got " + (JSON.stringify(val)) + ".", 36741 vnode.context 36742 ); 36743 } else if (isNaN(val)) { 36744 warn( 36745 "<transition> explicit " + name + " duration is NaN - " + 36746 'the duration expression might be incorrect.', 36747 vnode.context 36748 ); 36749 } 36750} 36751 36752function isValidDuration (val) { 36753 return typeof val === 'number' && !isNaN(val) 36754} 36755 36756/** 36757 * Normalize a transition hook's argument length. The hook may be: 36758 * - a merged hook (invoker) with the original in .fns 36759 * - a wrapped component method (check ._length) 36760 * - a plain function (.length) 36761 */ 36762function getHookArgumentsLength (fn) { 36763 if (isUndef(fn)) { 36764 return false 36765 } 36766 var invokerFns = fn.fns; 36767 if (isDef(invokerFns)) { 36768 // invoker 36769 return getHookArgumentsLength( 36770 Array.isArray(invokerFns) 36771 ? invokerFns[0] 36772 : invokerFns 36773 ) 36774 } else { 36775 return (fn._length || fn.length) > 1 36776 } 36777} 36778 36779function _enter (_, vnode) { 36780 if (vnode.data.show !== true) { 36781 enter(vnode); 36782 } 36783} 36784 36785var transition = inBrowser ? { 36786 create: _enter, 36787 activate: _enter, 36788 remove: function remove$$1 (vnode, rm) { 36789 /* istanbul ignore else */ 36790 if (vnode.data.show !== true) { 36791 leave(vnode, rm); 36792 } else { 36793 rm(); 36794 } 36795 } 36796} : {}; 36797 36798var platformModules = [ 36799 attrs, 36800 klass, 36801 events, 36802 domProps, 36803 style, 36804 transition 36805]; 36806 36807/* */ 36808 36809// the directive module should be applied last, after all 36810// built-in modules have been applied. 36811var modules = platformModules.concat(baseModules); 36812 36813var patch = createPatchFunction({ nodeOps: nodeOps, modules: modules }); 36814 36815/** 36816 * Not type checking this file because flow doesn't like attaching 36817 * properties to Elements. 36818 */ 36819 36820/* istanbul ignore if */ 36821if (isIE9) { 36822 // http://www.matts411.com/post/internet-explorer-9-oninput/ 36823 document.addEventListener('selectionchange', function () { 36824 var el = document.activeElement; 36825 if (el && el.vmodel) { 36826 trigger(el, 'input'); 36827 } 36828 }); 36829} 36830 36831var directive = { 36832 inserted: function inserted (el, binding, vnode, oldVnode) { 36833 if (vnode.tag === 'select') { 36834 // #6903 36835 if (oldVnode.elm && !oldVnode.elm._vOptions) { 36836 mergeVNodeHook(vnode, 'postpatch', function () { 36837 directive.componentUpdated(el, binding, vnode); 36838 }); 36839 } else { 36840 setSelected(el, binding, vnode.context); 36841 } 36842 el._vOptions = [].map.call(el.options, getValue); 36843 } else if (vnode.tag === 'textarea' || isTextInputType(el.type)) { 36844 el._vModifiers = binding.modifiers; 36845 if (!binding.modifiers.lazy) { 36846 el.addEventListener('compositionstart', onCompositionStart); 36847 el.addEventListener('compositionend', onCompositionEnd); 36848 // Safari < 10.2 & UIWebView doesn't fire compositionend when 36849 // switching focus before confirming composition choice 36850 // this also fixes the issue where some browsers e.g. iOS Chrome 36851 // fires "change" instead of "input" on autocomplete. 36852 el.addEventListener('change', onCompositionEnd); 36853 /* istanbul ignore if */ 36854 if (isIE9) { 36855 el.vmodel = true; 36856 } 36857 } 36858 } 36859 }, 36860 36861 componentUpdated: function componentUpdated (el, binding, vnode) { 36862 if (vnode.tag === 'select') { 36863 setSelected(el, binding, vnode.context); 36864 // in case the options rendered by v-for have changed, 36865 // it's possible that the value is out-of-sync with the rendered options. 36866 // detect such cases and filter out values that no longer has a matching 36867 // option in the DOM. 36868 var prevOptions = el._vOptions; 36869 var curOptions = el._vOptions = [].map.call(el.options, getValue); 36870 if (curOptions.some(function (o, i) { return !looseEqual(o, prevOptions[i]); })) { 36871 // trigger change event if 36872 // no matching option found for at least one value 36873 var needReset = el.multiple 36874 ? binding.value.some(function (v) { return hasNoMatchingOption(v, curOptions); }) 36875 : binding.value !== binding.oldValue && hasNoMatchingOption(binding.value, curOptions); 36876 if (needReset) { 36877 trigger(el, 'change'); 36878 } 36879 } 36880 } 36881 } 36882}; 36883 36884function setSelected (el, binding, vm) { 36885 actuallySetSelected(el, binding, vm); 36886 /* istanbul ignore if */ 36887 if (isIE || isEdge) { 36888 setTimeout(function () { 36889 actuallySetSelected(el, binding, vm); 36890 }, 0); 36891 } 36892} 36893 36894function actuallySetSelected (el, binding, vm) { 36895 var value = binding.value; 36896 var isMultiple = el.multiple; 36897 if (isMultiple && !Array.isArray(value)) { 36898 true && warn( 36899 "<select multiple v-model=\"" + (binding.expression) + "\"> " + 36900 "expects an Array value for its binding, but got " + (Object.prototype.toString.call(value).slice(8, -1)), 36901 vm 36902 ); 36903 return 36904 } 36905 var selected, option; 36906 for (var i = 0, l = el.options.length; i < l; i++) { 36907 option = el.options[i]; 36908 if (isMultiple) { 36909 selected = looseIndexOf(value, getValue(option)) > -1; 36910 if (option.selected !== selected) { 36911 option.selected = selected; 36912 } 36913 } else { 36914 if (looseEqual(getValue(option), value)) { 36915 if (el.selectedIndex !== i) { 36916 el.selectedIndex = i; 36917 } 36918 return 36919 } 36920 } 36921 } 36922 if (!isMultiple) { 36923 el.selectedIndex = -1; 36924 } 36925} 36926 36927function hasNoMatchingOption (value, options) { 36928 return options.every(function (o) { return !looseEqual(o, value); }) 36929} 36930 36931function getValue (option) { 36932 return '_value' in option 36933 ? option._value 36934 : option.value 36935} 36936 36937function onCompositionStart (e) { 36938 e.target.composing = true; 36939} 36940 36941function onCompositionEnd (e) { 36942 // prevent triggering an input event for no reason 36943 if (!e.target.composing) { return } 36944 e.target.composing = false; 36945 trigger(e.target, 'input'); 36946} 36947 36948function trigger (el, type) { 36949 var e = document.createEvent('HTMLEvents'); 36950 e.initEvent(type, true, true); 36951 el.dispatchEvent(e); 36952} 36953 36954/* */ 36955 36956// recursively search for possible transition defined inside the component root 36957function locateNode (vnode) { 36958 return vnode.componentInstance && (!vnode.data || !vnode.data.transition) 36959 ? locateNode(vnode.componentInstance._vnode) 36960 : vnode 36961} 36962 36963var show = { 36964 bind: function bind (el, ref, vnode) { 36965 var value = ref.value; 36966 36967 vnode = locateNode(vnode); 36968 var transition$$1 = vnode.data && vnode.data.transition; 36969 var originalDisplay = el.__vOriginalDisplay = 36970 el.style.display === 'none' ? '' : el.style.display; 36971 if (value && transition$$1) { 36972 vnode.data.show = true; 36973 enter(vnode, function () { 36974 el.style.display = originalDisplay; 36975 }); 36976 } else { 36977 el.style.display = value ? originalDisplay : 'none'; 36978 } 36979 }, 36980 36981 update: function update (el, ref, vnode) { 36982 var value = ref.value; 36983 var oldValue = ref.oldValue; 36984 36985 /* istanbul ignore if */ 36986 if (!value === !oldValue) { return } 36987 vnode = locateNode(vnode); 36988 var transition$$1 = vnode.data && vnode.data.transition; 36989 if (transition$$1) { 36990 vnode.data.show = true; 36991 if (value) { 36992 enter(vnode, function () { 36993 el.style.display = el.__vOriginalDisplay; 36994 }); 36995 } else { 36996 leave(vnode, function () { 36997 el.style.display = 'none'; 36998 }); 36999 } 37000 } else { 37001 el.style.display = value ? el.__vOriginalDisplay : 'none'; 37002 } 37003 }, 37004 37005 unbind: function unbind ( 37006 el, 37007 binding, 37008 vnode, 37009 oldVnode, 37010 isDestroy 37011 ) { 37012 if (!isDestroy) { 37013 el.style.display = el.__vOriginalDisplay; 37014 } 37015 } 37016}; 37017 37018var platformDirectives = { 37019 model: directive, 37020 show: show 37021}; 37022 37023/* */ 37024 37025var transitionProps = { 37026 name: String, 37027 appear: Boolean, 37028 css: Boolean, 37029 mode: String, 37030 type: String, 37031 enterClass: String, 37032 leaveClass: String, 37033 enterToClass: String, 37034 leaveToClass: String, 37035 enterActiveClass: String, 37036 leaveActiveClass: String, 37037 appearClass: String, 37038 appearActiveClass: String, 37039 appearToClass: String, 37040 duration: [Number, String, Object] 37041}; 37042 37043// in case the child is also an abstract component, e.g. <keep-alive> 37044// we want to recursively retrieve the real component to be rendered 37045function getRealChild (vnode) { 37046 var compOptions = vnode && vnode.componentOptions; 37047 if (compOptions && compOptions.Ctor.options.abstract) { 37048 return getRealChild(getFirstComponentChild(compOptions.children)) 37049 } else { 37050 return vnode 37051 } 37052} 37053 37054function extractTransitionData (comp) { 37055 var data = {}; 37056 var options = comp.$options; 37057 // props 37058 for (var key in options.propsData) { 37059 data[key] = comp[key]; 37060 } 37061 // events. 37062 // extract listeners and pass them directly to the transition methods 37063 var listeners = options._parentListeners; 37064 for (var key$1 in listeners) { 37065 data[camelize(key$1)] = listeners[key$1]; 37066 } 37067 return data 37068} 37069 37070function placeholder (h, rawChild) { 37071 if (/\d-keep-alive$/.test(rawChild.tag)) { 37072 return h('keep-alive', { 37073 props: rawChild.componentOptions.propsData 37074 }) 37075 } 37076} 37077 37078function hasParentTransition (vnode) { 37079 while ((vnode = vnode.parent)) { 37080 if (vnode.data.transition) { 37081 return true 37082 } 37083 } 37084} 37085 37086function isSameChild (child, oldChild) { 37087 return oldChild.key === child.key && oldChild.tag === child.tag 37088} 37089 37090var isNotTextNode = function (c) { return c.tag || isAsyncPlaceholder(c); }; 37091 37092var isVShowDirective = function (d) { return d.name === 'show'; }; 37093 37094var Transition = { 37095 name: 'transition', 37096 props: transitionProps, 37097 abstract: true, 37098 37099 render: function render (h) { 37100 var this$1 = this; 37101 37102 var children = this.$slots.default; 37103 if (!children) { 37104 return 37105 } 37106 37107 // filter out text nodes (possible whitespaces) 37108 children = children.filter(isNotTextNode); 37109 /* istanbul ignore if */ 37110 if (!children.length) { 37111 return 37112 } 37113 37114 // warn multiple elements 37115 if ( true && children.length > 1) { 37116 warn( 37117 '<transition> can only be used on a single element. Use ' + 37118 '<transition-group> for lists.', 37119 this.$parent 37120 ); 37121 } 37122 37123 var mode = this.mode; 37124 37125 // warn invalid mode 37126 if ( true && 37127 mode && mode !== 'in-out' && mode !== 'out-in' 37128 ) { 37129 warn( 37130 'invalid <transition> mode: ' + mode, 37131 this.$parent 37132 ); 37133 } 37134 37135 var rawChild = children[0]; 37136 37137 // if this is a component root node and the component's 37138 // parent container node also has transition, skip. 37139 if (hasParentTransition(this.$vnode)) { 37140 return rawChild 37141 } 37142 37143 // apply transition data to child 37144 // use getRealChild() to ignore abstract components e.g. keep-alive 37145 var child = getRealChild(rawChild); 37146 /* istanbul ignore if */ 37147 if (!child) { 37148 return rawChild 37149 } 37150 37151 if (this._leaving) { 37152 return placeholder(h, rawChild) 37153 } 37154 37155 // ensure a key that is unique to the vnode type and to this transition 37156 // component instance. This key will be used to remove pending leaving nodes 37157 // during entering. 37158 var id = "__transition-" + (this._uid) + "-"; 37159 child.key = child.key == null 37160 ? child.isComment 37161 ? id + 'comment' 37162 : id + child.tag 37163 : isPrimitive(child.key) 37164 ? (String(child.key).indexOf(id) === 0 ? child.key : id + child.key) 37165 : child.key; 37166 37167 var data = (child.data || (child.data = {})).transition = extractTransitionData(this); 37168 var oldRawChild = this._vnode; 37169 var oldChild = getRealChild(oldRawChild); 37170 37171 // mark v-show 37172 // so that the transition module can hand over the control to the directive 37173 if (child.data.directives && child.data.directives.some(isVShowDirective)) { 37174 child.data.show = true; 37175 } 37176 37177 if ( 37178 oldChild && 37179 oldChild.data && 37180 !isSameChild(child, oldChild) && 37181 !isAsyncPlaceholder(oldChild) && 37182 // #6687 component root is a comment node 37183 !(oldChild.componentInstance && oldChild.componentInstance._vnode.isComment) 37184 ) { 37185 // replace old child transition data with fresh one 37186 // important for dynamic transitions! 37187 var oldData = oldChild.data.transition = extend({}, data); 37188 // handle transition mode 37189 if (mode === 'out-in') { 37190 // return placeholder node and queue update when leave finishes 37191 this._leaving = true; 37192 mergeVNodeHook(oldData, 'afterLeave', function () { 37193 this$1._leaving = false; 37194 this$1.$forceUpdate(); 37195 }); 37196 return placeholder(h, rawChild) 37197 } else if (mode === 'in-out') { 37198 if (isAsyncPlaceholder(child)) { 37199 return oldRawChild 37200 } 37201 var delayedLeave; 37202 var performLeave = function () { delayedLeave(); }; 37203 mergeVNodeHook(data, 'afterEnter', performLeave); 37204 mergeVNodeHook(data, 'enterCancelled', performLeave); 37205 mergeVNodeHook(oldData, 'delayLeave', function (leave) { delayedLeave = leave; }); 37206 } 37207 } 37208 37209 return rawChild 37210 } 37211}; 37212 37213/* */ 37214 37215var props = extend({ 37216 tag: String, 37217 moveClass: String 37218}, transitionProps); 37219 37220delete props.mode; 37221 37222var TransitionGroup = { 37223 props: props, 37224 37225 beforeMount: function beforeMount () { 37226 var this$1 = this; 37227 37228 var update = this._update; 37229 this._update = function (vnode, hydrating) { 37230 var restoreActiveInstance = setActiveInstance(this$1); 37231 // force removing pass 37232 this$1.__patch__( 37233 this$1._vnode, 37234 this$1.kept, 37235 false, // hydrating 37236 true // removeOnly (!important, avoids unnecessary moves) 37237 ); 37238 this$1._vnode = this$1.kept; 37239 restoreActiveInstance(); 37240 update.call(this$1, vnode, hydrating); 37241 }; 37242 }, 37243 37244 render: function render (h) { 37245 var tag = this.tag || this.$vnode.data.tag || 'span'; 37246 var map = Object.create(null); 37247 var prevChildren = this.prevChildren = this.children; 37248 var rawChildren = this.$slots.default || []; 37249 var children = this.children = []; 37250 var transitionData = extractTransitionData(this); 37251 37252 for (var i = 0; i < rawChildren.length; i++) { 37253 var c = rawChildren[i]; 37254 if (c.tag) { 37255 if (c.key != null && String(c.key).indexOf('__vlist') !== 0) { 37256 children.push(c); 37257 map[c.key] = c 37258 ;(c.data || (c.data = {})).transition = transitionData; 37259 } else if (true) { 37260 var opts = c.componentOptions; 37261 var name = opts ? (opts.Ctor.options.name || opts.tag || '') : c.tag; 37262 warn(("<transition-group> children must be keyed: <" + name + ">")); 37263 } 37264 } 37265 } 37266 37267 if (prevChildren) { 37268 var kept = []; 37269 var removed = []; 37270 for (var i$1 = 0; i$1 < prevChildren.length; i$1++) { 37271 var c$1 = prevChildren[i$1]; 37272 c$1.data.transition = transitionData; 37273 c$1.data.pos = c$1.elm.getBoundingClientRect(); 37274 if (map[c$1.key]) { 37275 kept.push(c$1); 37276 } else { 37277 removed.push(c$1); 37278 } 37279 } 37280 this.kept = h(tag, null, kept); 37281 this.removed = removed; 37282 } 37283 37284 return h(tag, null, children) 37285 }, 37286 37287 updated: function updated () { 37288 var children = this.prevChildren; 37289 var moveClass = this.moveClass || ((this.name || 'v') + '-move'); 37290 if (!children.length || !this.hasMove(children[0].elm, moveClass)) { 37291 return 37292 } 37293 37294 // we divide the work into three loops to avoid mixing DOM reads and writes 37295 // in each iteration - which helps prevent layout thrashing. 37296 children.forEach(callPendingCbs); 37297 children.forEach(recordPosition); 37298 children.forEach(applyTranslation); 37299 37300 // force reflow to put everything in position 37301 // assign to this to avoid being removed in tree-shaking 37302 // $flow-disable-line 37303 this._reflow = document.body.offsetHeight; 37304 37305 children.forEach(function (c) { 37306 if (c.data.moved) { 37307 var el = c.elm; 37308 var s = el.style; 37309 addTransitionClass(el, moveClass); 37310 s.transform = s.WebkitTransform = s.transitionDuration = ''; 37311 el.addEventListener(transitionEndEvent, el._moveCb = function cb (e) { 37312 if (e && e.target !== el) { 37313 return 37314 } 37315 if (!e || /transform$/.test(e.propertyName)) { 37316 el.removeEventListener(transitionEndEvent, cb); 37317 el._moveCb = null; 37318 removeTransitionClass(el, moveClass); 37319 } 37320 }); 37321 } 37322 }); 37323 }, 37324 37325 methods: { 37326 hasMove: function hasMove (el, moveClass) { 37327 /* istanbul ignore if */ 37328 if (!hasTransition) { 37329 return false 37330 } 37331 /* istanbul ignore if */ 37332 if (this._hasMove) { 37333 return this._hasMove 37334 } 37335 // Detect whether an element with the move class applied has 37336 // CSS transitions. Since the element may be inside an entering 37337 // transition at this very moment, we make a clone of it and remove 37338 // all other transition classes applied to ensure only the move class 37339 // is applied. 37340 var clone = el.cloneNode(); 37341 if (el._transitionClasses) { 37342 el._transitionClasses.forEach(function (cls) { removeClass(clone, cls); }); 37343 } 37344 addClass(clone, moveClass); 37345 clone.style.display = 'none'; 37346 this.$el.appendChild(clone); 37347 var info = getTransitionInfo(clone); 37348 this.$el.removeChild(clone); 37349 return (this._hasMove = info.hasTransform) 37350 } 37351 } 37352}; 37353 37354function callPendingCbs (c) { 37355 /* istanbul ignore if */ 37356 if (c.elm._moveCb) { 37357 c.elm._moveCb(); 37358 } 37359 /* istanbul ignore if */ 37360 if (c.elm._enterCb) { 37361 c.elm._enterCb(); 37362 } 37363} 37364 37365function recordPosition (c) { 37366 c.data.newPos = c.elm.getBoundingClientRect(); 37367} 37368 37369function applyTranslation (c) { 37370 var oldPos = c.data.pos; 37371 var newPos = c.data.newPos; 37372 var dx = oldPos.left - newPos.left; 37373 var dy = oldPos.top - newPos.top; 37374 if (dx || dy) { 37375 c.data.moved = true; 37376 var s = c.elm.style; 37377 s.transform = s.WebkitTransform = "translate(" + dx + "px," + dy + "px)"; 37378 s.transitionDuration = '0s'; 37379 } 37380} 37381 37382var platformComponents = { 37383 Transition: Transition, 37384 TransitionGroup: TransitionGroup 37385}; 37386 37387/* */ 37388 37389// install platform specific utils 37390Vue.config.mustUseProp = mustUseProp; 37391Vue.config.isReservedTag = isReservedTag; 37392Vue.config.isReservedAttr = isReservedAttr; 37393Vue.config.getTagNamespace = getTagNamespace; 37394Vue.config.isUnknownElement = isUnknownElement; 37395 37396// install platform runtime directives & components 37397extend(Vue.options.directives, platformDirectives); 37398extend(Vue.options.components, platformComponents); 37399 37400// install platform patch function 37401Vue.prototype.__patch__ = inBrowser ? patch : noop; 37402 37403// public mount method 37404Vue.prototype.$mount = function ( 37405 el, 37406 hydrating 37407) { 37408 el = el && inBrowser ? query(el) : undefined; 37409 return mountComponent(this, el, hydrating) 37410}; 37411 37412// devtools global hook 37413/* istanbul ignore next */ 37414if (inBrowser) { 37415 setTimeout(function () { 37416 if (config.devtools) { 37417 if (devtools) { 37418 devtools.emit('init', Vue); 37419 } else if ( 37420 true 37421 ) { 37422 console[console.info ? 'info' : 'log']( 37423 'Download the Vue Devtools extension for a better development experience:\n' + 37424 'https://github.com/vuejs/vue-devtools' 37425 ); 37426 } 37427 } 37428 if ( true && 37429 config.productionTip !== false && 37430 typeof console !== 'undefined' 37431 ) { 37432 console[console.info ? 'info' : 'log']( 37433 "You are running Vue in development mode.\n" + 37434 "Make sure to turn on production mode when deploying for production.\n" + 37435 "See more tips at https://vuejs.org/guide/deployment.html" 37436 ); 37437 } 37438 }, 0); 37439} 37440 37441/* */ 37442 37443var defaultTagRE = /\{\{((?:.|\r?\n)+?)\}\}/g; 37444var regexEscapeRE = /[-.*+?^${}()|[\]\/\\]/g; 37445 37446var buildRegex = cached(function (delimiters) { 37447 var open = delimiters[0].replace(regexEscapeRE, '\\$&'); 37448 var close = delimiters[1].replace(regexEscapeRE, '\\$&'); 37449 return new RegExp(open + '((?:.|\\n)+?)' + close, 'g') 37450}); 37451 37452 37453 37454function parseText ( 37455 text, 37456 delimiters 37457) { 37458 var tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE; 37459 if (!tagRE.test(text)) { 37460 return 37461 } 37462 var tokens = []; 37463 var rawTokens = []; 37464 var lastIndex = tagRE.lastIndex = 0; 37465 var match, index, tokenValue; 37466 while ((match = tagRE.exec(text))) { 37467 index = match.index; 37468 // push text token 37469 if (index > lastIndex) { 37470 rawTokens.push(tokenValue = text.slice(lastIndex, index)); 37471 tokens.push(JSON.stringify(tokenValue)); 37472 } 37473 // tag token 37474 var exp = parseFilters(match[1].trim()); 37475 tokens.push(("_s(" + exp + ")")); 37476 rawTokens.push({ '@binding': exp }); 37477 lastIndex = index + match[0].length; 37478 } 37479 if (lastIndex < text.length) { 37480 rawTokens.push(tokenValue = text.slice(lastIndex)); 37481 tokens.push(JSON.stringify(tokenValue)); 37482 } 37483 return { 37484 expression: tokens.join('+'), 37485 tokens: rawTokens 37486 } 37487} 37488 37489/* */ 37490 37491function transformNode (el, options) { 37492 var warn = options.warn || baseWarn; 37493 var staticClass = getAndRemoveAttr(el, 'class'); 37494 if ( true && staticClass) { 37495 var res = parseText(staticClass, options.delimiters); 37496 if (res) { 37497 warn( 37498 "class=\"" + staticClass + "\": " + 37499 'Interpolation inside attributes has been removed. ' + 37500 'Use v-bind or the colon shorthand instead. For example, ' + 37501 'instead of <div class="{{ val }}">, use <div :class="val">.', 37502 el.rawAttrsMap['class'] 37503 ); 37504 } 37505 } 37506 if (staticClass) { 37507 el.staticClass = JSON.stringify(staticClass); 37508 } 37509 var classBinding = getBindingAttr(el, 'class', false /* getStatic */); 37510 if (classBinding) { 37511 el.classBinding = classBinding; 37512 } 37513} 37514 37515function genData (el) { 37516 var data = ''; 37517 if (el.staticClass) { 37518 data += "staticClass:" + (el.staticClass) + ","; 37519 } 37520 if (el.classBinding) { 37521 data += "class:" + (el.classBinding) + ","; 37522 } 37523 return data 37524} 37525 37526var klass$1 = { 37527 staticKeys: ['staticClass'], 37528 transformNode: transformNode, 37529 genData: genData 37530}; 37531 37532/* */ 37533 37534function transformNode$1 (el, options) { 37535 var warn = options.warn || baseWarn; 37536 var staticStyle = getAndRemoveAttr(el, 'style'); 37537 if (staticStyle) { 37538 /* istanbul ignore if */ 37539 if (true) { 37540 var res = parseText(staticStyle, options.delimiters); 37541 if (res) { 37542 warn( 37543 "style=\"" + staticStyle + "\": " + 37544 'Interpolation inside attributes has been removed. ' + 37545 'Use v-bind or the colon shorthand instead. For example, ' + 37546 'instead of <div style="{{ val }}">, use <div :style="val">.', 37547 el.rawAttrsMap['style'] 37548 ); 37549 } 37550 } 37551 el.staticStyle = JSON.stringify(parseStyleText(staticStyle)); 37552 } 37553 37554 var styleBinding = getBindingAttr(el, 'style', false /* getStatic */); 37555 if (styleBinding) { 37556 el.styleBinding = styleBinding; 37557 } 37558} 37559 37560function genData$1 (el) { 37561 var data = ''; 37562 if (el.staticStyle) { 37563 data += "staticStyle:" + (el.staticStyle) + ","; 37564 } 37565 if (el.styleBinding) { 37566 data += "style:(" + (el.styleBinding) + "),"; 37567 } 37568 return data 37569} 37570 37571var style$1 = { 37572 staticKeys: ['staticStyle'], 37573 transformNode: transformNode$1, 37574 genData: genData$1 37575}; 37576 37577/* */ 37578 37579var decoder; 37580 37581var he = { 37582 decode: function decode (html) { 37583 decoder = decoder || document.createElement('div'); 37584 decoder.innerHTML = html; 37585 return decoder.textContent 37586 } 37587}; 37588 37589/* */ 37590 37591var isUnaryTag = makeMap( 37592 'area,base,br,col,embed,frame,hr,img,input,isindex,keygen,' + 37593 'link,meta,param,source,track,wbr' 37594); 37595 37596// Elements that you can, intentionally, leave open 37597// (and which close themselves) 37598var canBeLeftOpenTag = makeMap( 37599 'colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source' 37600); 37601 37602// HTML5 tags https://html.spec.whatwg.org/multipage/indices.html#elements-3 37603// Phrasing Content https://html.spec.whatwg.org/multipage/dom.html#phrasing-content 37604var isNonPhrasingTag = makeMap( 37605 'address,article,aside,base,blockquote,body,caption,col,colgroup,dd,' + 37606 'details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,' + 37607 'h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,' + 37608 'optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,' + 37609 'title,tr,track' 37610); 37611 37612/** 37613 * Not type-checking this file because it's mostly vendor code. 37614 */ 37615 37616// Regular Expressions for parsing tags and attributes 37617var attribute = /^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/; 37618var dynamicArgAttribute = /^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+?\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/; 37619var ncname = "[a-zA-Z_][\\-\\.0-9_a-zA-Z" + (unicodeRegExp.source) + "]*"; 37620var qnameCapture = "((?:" + ncname + "\\:)?" + ncname + ")"; 37621var startTagOpen = new RegExp(("^<" + qnameCapture)); 37622var startTagClose = /^\s*(\/?)>/; 37623var endTag = new RegExp(("^<\\/" + qnameCapture + "[^>]*>")); 37624var doctype = /^<!DOCTYPE [^>]+>/i; 37625// #7298: escape - to avoid being passed as HTML comment when inlined in page 37626var comment = /^<!\--/; 37627var conditionalComment = /^<!\[/; 37628 37629// Special Elements (can contain anything) 37630var isPlainTextElement = makeMap('script,style,textarea', true); 37631var reCache = {}; 37632 37633var decodingMap = { 37634 '<': '<', 37635 '>': '>', 37636 '"': '"', 37637 '&': '&', 37638 ' ': '\n', 37639 '	': '\t', 37640 ''': "'" 37641}; 37642var encodedAttr = /&(?:lt|gt|quot|amp|#39);/g; 37643var encodedAttrWithNewLines = /&(?:lt|gt|quot|amp|#39|#10|#9);/g; 37644 37645// #5992 37646var isIgnoreNewlineTag = makeMap('pre,textarea', true); 37647var shouldIgnoreFirstNewline = function (tag, html) { return tag && isIgnoreNewlineTag(tag) && html[0] === '\n'; }; 37648 37649function decodeAttr (value, shouldDecodeNewlines) { 37650 var re = shouldDecodeNewlines ? encodedAttrWithNewLines : encodedAttr; 37651 return value.replace(re, function (match) { return decodingMap[match]; }) 37652} 37653 37654function parseHTML (html, options) { 37655 var stack = []; 37656 var expectHTML = options.expectHTML; 37657 var isUnaryTag$$1 = options.isUnaryTag || no; 37658 var canBeLeftOpenTag$$1 = options.canBeLeftOpenTag || no; 37659 var index = 0; 37660 var last, lastTag; 37661 while (html) { 37662 last = html; 37663 // Make sure we're not in a plaintext content element like script/style 37664 if (!lastTag || !isPlainTextElement(lastTag)) { 37665 var textEnd = html.indexOf('<'); 37666 if (textEnd === 0) { 37667 // Comment: 37668 if (comment.test(html)) { 37669 var commentEnd = html.indexOf('-->'); 37670 37671 if (commentEnd >= 0) { 37672 if (options.shouldKeepComment) { 37673 options.comment(html.substring(4, commentEnd), index, index + commentEnd + 3); 37674 } 37675 advance(commentEnd + 3); 37676 continue 37677 } 37678 } 37679 37680 // http://en.wikipedia.org/wiki/Conditional_comment#Downlevel-revealed_conditional_comment 37681 if (conditionalComment.test(html)) { 37682 var conditionalEnd = html.indexOf(']>'); 37683 37684 if (conditionalEnd >= 0) { 37685 advance(conditionalEnd + 2); 37686 continue 37687 } 37688 } 37689 37690 // Doctype: 37691 var doctypeMatch = html.match(doctype); 37692 if (doctypeMatch) { 37693 advance(doctypeMatch[0].length); 37694 continue 37695 } 37696 37697 // End tag: 37698 var endTagMatch = html.match(endTag); 37699 if (endTagMatch) { 37700 var curIndex = index; 37701 advance(endTagMatch[0].length); 37702 parseEndTag(endTagMatch[1], curIndex, index); 37703 continue 37704 } 37705 37706 // Start tag: 37707 var startTagMatch = parseStartTag(); 37708 if (startTagMatch) { 37709 handleStartTag(startTagMatch); 37710 if (shouldIgnoreFirstNewline(startTagMatch.tagName, html)) { 37711 advance(1); 37712 } 37713 continue 37714 } 37715 } 37716 37717 var text = (void 0), rest = (void 0), next = (void 0); 37718 if (textEnd >= 0) { 37719 rest = html.slice(textEnd); 37720 while ( 37721 !endTag.test(rest) && 37722 !startTagOpen.test(rest) && 37723 !comment.test(rest) && 37724 !conditionalComment.test(rest) 37725 ) { 37726 // < in plain text, be forgiving and treat it as text 37727 next = rest.indexOf('<', 1); 37728 if (next < 0) { break } 37729 textEnd += next; 37730 rest = html.slice(textEnd); 37731 } 37732 text = html.substring(0, textEnd); 37733 } 37734 37735 if (textEnd < 0) { 37736 text = html; 37737 } 37738 37739 if (text) { 37740 advance(text.length); 37741 } 37742 37743 if (options.chars && text) { 37744 options.chars(text, index - text.length, index); 37745 } 37746 } else { 37747 var endTagLength = 0; 37748 var stackedTag = lastTag.toLowerCase(); 37749 var reStackedTag = reCache[stackedTag] || (reCache[stackedTag] = new RegExp('([\\s\\S]*?)(</' + stackedTag + '[^>]*>)', 'i')); 37750 var rest$1 = html.replace(reStackedTag, function (all, text, endTag) { 37751 endTagLength = endTag.length; 37752 if (!isPlainTextElement(stackedTag) && stackedTag !== 'noscript') { 37753 text = text 37754 .replace(/<!\--([\s\S]*?)-->/g, '$1') // #7298 37755 .replace(/<!\[CDATA\[([\s\S]*?)]]>/g, '$1'); 37756 } 37757 if (shouldIgnoreFirstNewline(stackedTag, text)) { 37758 text = text.slice(1); 37759 } 37760 if (options.chars) { 37761 options.chars(text); 37762 } 37763 return '' 37764 }); 37765 index += html.length - rest$1.length; 37766 html = rest$1; 37767 parseEndTag(stackedTag, index - endTagLength, index); 37768 } 37769 37770 if (html === last) { 37771 options.chars && options.chars(html); 37772 if ( true && !stack.length && options.warn) { 37773 options.warn(("Mal-formatted tag at end of template: \"" + html + "\""), { start: index + html.length }); 37774 } 37775 break 37776 } 37777 } 37778 37779 // Clean up any remaining tags 37780 parseEndTag(); 37781 37782 function advance (n) { 37783 index += n; 37784 html = html.substring(n); 37785 } 37786 37787 function parseStartTag () { 37788 var start = html.match(startTagOpen); 37789 if (start) { 37790 var match = { 37791 tagName: start[1], 37792 attrs: [], 37793 start: index 37794 }; 37795 advance(start[0].length); 37796 var end, attr; 37797 while (!(end = html.match(startTagClose)) && (attr = html.match(dynamicArgAttribute) || html.match(attribute))) { 37798 attr.start = index; 37799 advance(attr[0].length); 37800 attr.end = index; 37801 match.attrs.push(attr); 37802 } 37803 if (end) { 37804 match.unarySlash = end[1]; 37805 advance(end[0].length); 37806 match.end = index; 37807 return match 37808 } 37809 } 37810 } 37811 37812 function handleStartTag (match) { 37813 var tagName = match.tagName; 37814 var unarySlash = match.unarySlash; 37815 37816 if (expectHTML) { 37817 if (lastTag === 'p' && isNonPhrasingTag(tagName)) { 37818 parseEndTag(lastTag); 37819 } 37820 if (canBeLeftOpenTag$$1(tagName) && lastTag === tagName) { 37821 parseEndTag(tagName); 37822 } 37823 } 37824 37825 var unary = isUnaryTag$$1(tagName) || !!unarySlash; 37826 37827 var l = match.attrs.length; 37828 var attrs = new Array(l); 37829 for (var i = 0; i < l; i++) { 37830 var args = match.attrs[i]; 37831 var value = args[3] || args[4] || args[5] || ''; 37832 var shouldDecodeNewlines = tagName === 'a' && args[1] === 'href' 37833 ? options.shouldDecodeNewlinesForHref 37834 : options.shouldDecodeNewlines; 37835 attrs[i] = { 37836 name: args[1], 37837 value: decodeAttr(value, shouldDecodeNewlines) 37838 }; 37839 if ( true && options.outputSourceRange) { 37840 attrs[i].start = args.start + args[0].match(/^\s*/).length; 37841 attrs[i].end = args.end; 37842 } 37843 } 37844 37845 if (!unary) { 37846 stack.push({ tag: tagName, lowerCasedTag: tagName.toLowerCase(), attrs: attrs, start: match.start, end: match.end }); 37847 lastTag = tagName; 37848 } 37849 37850 if (options.start) { 37851 options.start(tagName, attrs, unary, match.start, match.end); 37852 } 37853 } 37854 37855 function parseEndTag (tagName, start, end) { 37856 var pos, lowerCasedTagName; 37857 if (start == null) { start = index; } 37858 if (end == null) { end = index; } 37859 37860 // Find the closest opened tag of the same type 37861 if (tagName) { 37862 lowerCasedTagName = tagName.toLowerCase(); 37863 for (pos = stack.length - 1; pos >= 0; pos--) { 37864 if (stack[pos].lowerCasedTag === lowerCasedTagName) { 37865 break 37866 } 37867 } 37868 } else { 37869 // If no tag name is provided, clean shop 37870 pos = 0; 37871 } 37872 37873 if (pos >= 0) { 37874 // Close all the open elements, up the stack 37875 for (var i = stack.length - 1; i >= pos; i--) { 37876 if ( true && 37877 (i > pos || !tagName) && 37878 options.warn 37879 ) { 37880 options.warn( 37881 ("tag <" + (stack[i].tag) + "> has no matching end tag."), 37882 { start: stack[i].start, end: stack[i].end } 37883 ); 37884 } 37885 if (options.end) { 37886 options.end(stack[i].tag, start, end); 37887 } 37888 } 37889 37890 // Remove the open elements from the stack 37891 stack.length = pos; 37892 lastTag = pos && stack[pos - 1].tag; 37893 } else if (lowerCasedTagName === 'br') { 37894 if (options.start) { 37895 options.start(tagName, [], true, start, end); 37896 } 37897 } else if (lowerCasedTagName === 'p') { 37898 if (options.start) { 37899 options.start(tagName, [], false, start, end); 37900 } 37901 if (options.end) { 37902 options.end(tagName, start, end); 37903 } 37904 } 37905 } 37906} 37907 37908/* */ 37909 37910var onRE = /^@|^v-on:/; 37911var dirRE = /^v-|^@|^:|^#/; 37912var forAliasRE = /([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/; 37913var forIteratorRE = /,([^,\}\]]*)(?:,([^,\}\]]*))?$/; 37914var stripParensRE = /^\(|\)$/g; 37915var dynamicArgRE = /^\[.*\]$/; 37916 37917var argRE = /:(.*)$/; 37918var bindRE = /^:|^\.|^v-bind:/; 37919var modifierRE = /\.[^.\]]+(?=[^\]]*$)/g; 37920 37921var slotRE = /^v-slot(:|$)|^#/; 37922 37923var lineBreakRE = /[\r\n]/; 37924var whitespaceRE$1 = /[ \f\t\r\n]+/g; 37925 37926var invalidAttributeRE = /[\s"'<>\/=]/; 37927 37928var decodeHTMLCached = cached(he.decode); 37929 37930var emptySlotScopeToken = "_empty_"; 37931 37932// configurable state 37933var warn$2; 37934var delimiters; 37935var transforms; 37936var preTransforms; 37937var postTransforms; 37938var platformIsPreTag; 37939var platformMustUseProp; 37940var platformGetTagNamespace; 37941var maybeComponent; 37942 37943function createASTElement ( 37944 tag, 37945 attrs, 37946 parent 37947) { 37948 return { 37949 type: 1, 37950 tag: tag, 37951 attrsList: attrs, 37952 attrsMap: makeAttrsMap(attrs), 37953 rawAttrsMap: {}, 37954 parent: parent, 37955 children: [] 37956 } 37957} 37958 37959/** 37960 * Convert HTML string to AST. 37961 */ 37962function parse ( 37963 template, 37964 options 37965) { 37966 warn$2 = options.warn || baseWarn; 37967 37968 platformIsPreTag = options.isPreTag || no; 37969 platformMustUseProp = options.mustUseProp || no; 37970 platformGetTagNamespace = options.getTagNamespace || no; 37971 var isReservedTag = options.isReservedTag || no; 37972 maybeComponent = function (el) { return !!( 37973 el.component || 37974 el.attrsMap[':is'] || 37975 el.attrsMap['v-bind:is'] || 37976 !(el.attrsMap.is ? isReservedTag(el.attrsMap.is) : isReservedTag(el.tag)) 37977 ); }; 37978 transforms = pluckModuleFunction(options.modules, 'transformNode'); 37979 preTransforms = pluckModuleFunction(options.modules, 'preTransformNode'); 37980 postTransforms = pluckModuleFunction(options.modules, 'postTransformNode'); 37981 37982 delimiters = options.delimiters; 37983 37984 var stack = []; 37985 var preserveWhitespace = options.preserveWhitespace !== false; 37986 var whitespaceOption = options.whitespace; 37987 var root; 37988 var currentParent; 37989 var inVPre = false; 37990 var inPre = false; 37991 var warned = false; 37992 37993 function warnOnce (msg, range) { 37994 if (!warned) { 37995 warned = true; 37996 warn$2(msg, range); 37997 } 37998 } 37999 38000 function closeElement (element) { 38001 trimEndingWhitespace(element); 38002 if (!inVPre && !element.processed) { 38003 element = processElement(element, options); 38004 } 38005 // tree management 38006 if (!stack.length && element !== root) { 38007 // allow root elements with v-if, v-else-if and v-else 38008 if (root.if && (element.elseif || element.else)) { 38009 if (true) { 38010 checkRootConstraints(element); 38011 } 38012 addIfCondition(root, { 38013 exp: element.elseif, 38014 block: element 38015 }); 38016 } else if (true) { 38017 warnOnce( 38018 "Component template should contain exactly one root element. " + 38019 "If you are using v-if on multiple elements, " + 38020 "use v-else-if to chain them instead.", 38021 { start: element.start } 38022 ); 38023 } 38024 } 38025 if (currentParent && !element.forbidden) { 38026 if (element.elseif || element.else) { 38027 processIfConditions(element, currentParent); 38028 } else { 38029 if (element.slotScope) { 38030 // scoped slot 38031 // keep it in the children list so that v-else(-if) conditions can 38032 // find it as the prev node. 38033 var name = element.slotTarget || '"default"' 38034 ;(currentParent.scopedSlots || (currentParent.scopedSlots = {}))[name] = element; 38035 } 38036 currentParent.children.push(element); 38037 element.parent = currentParent; 38038 } 38039 } 38040 38041 // final children cleanup 38042 // filter out scoped slots 38043 element.children = element.children.filter(function (c) { return !(c).slotScope; }); 38044 // remove trailing whitespace node again 38045 trimEndingWhitespace(element); 38046 38047 // check pre state 38048 if (element.pre) { 38049 inVPre = false; 38050 } 38051 if (platformIsPreTag(element.tag)) { 38052 inPre = false; 38053 } 38054 // apply post-transforms 38055 for (var i = 0; i < postTransforms.length; i++) { 38056 postTransforms[i](element, options); 38057 } 38058 } 38059 38060 function trimEndingWhitespace (el) { 38061 // remove trailing whitespace node 38062 if (!inPre) { 38063 var lastNode; 38064 while ( 38065 (lastNode = el.children[el.children.length - 1]) && 38066 lastNode.type === 3 && 38067 lastNode.text === ' ' 38068 ) { 38069 el.children.pop(); 38070 } 38071 } 38072 } 38073 38074 function checkRootConstraints (el) { 38075 if (el.tag === 'slot' || el.tag === 'template') { 38076 warnOnce( 38077 "Cannot use <" + (el.tag) + "> as component root element because it may " + 38078 'contain multiple nodes.', 38079 { start: el.start } 38080 ); 38081 } 38082 if (el.attrsMap.hasOwnProperty('v-for')) { 38083 warnOnce( 38084 'Cannot use v-for on stateful component root element because ' + 38085 'it renders multiple elements.', 38086 el.rawAttrsMap['v-for'] 38087 ); 38088 } 38089 } 38090 38091 parseHTML(template, { 38092 warn: warn$2, 38093 expectHTML: options.expectHTML, 38094 isUnaryTag: options.isUnaryTag, 38095 canBeLeftOpenTag: options.canBeLeftOpenTag, 38096 shouldDecodeNewlines: options.shouldDecodeNewlines, 38097 shouldDecodeNewlinesForHref: options.shouldDecodeNewlinesForHref, 38098 shouldKeepComment: options.comments, 38099 outputSourceRange: options.outputSourceRange, 38100 start: function start (tag, attrs, unary, start$1, end) { 38101 // check namespace. 38102 // inherit parent ns if there is one 38103 var ns = (currentParent && currentParent.ns) || platformGetTagNamespace(tag); 38104 38105 // handle IE svg bug 38106 /* istanbul ignore if */ 38107 if (isIE && ns === 'svg') { 38108 attrs = guardIESVGBug(attrs); 38109 } 38110 38111 var element = createASTElement(tag, attrs, currentParent); 38112 if (ns) { 38113 element.ns = ns; 38114 } 38115 38116 if (true) { 38117 if (options.outputSourceRange) { 38118 element.start = start$1; 38119 element.end = end; 38120 element.rawAttrsMap = element.attrsList.reduce(function (cumulated, attr) { 38121 cumulated[attr.name] = attr; 38122 return cumulated 38123 }, {}); 38124 } 38125 attrs.forEach(function (attr) { 38126 if (invalidAttributeRE.test(attr.name)) { 38127 warn$2( 38128 "Invalid dynamic argument expression: attribute names cannot contain " + 38129 "spaces, quotes, <, >, / or =.", 38130 { 38131 start: attr.start + attr.name.indexOf("["), 38132 end: attr.start + attr.name.length 38133 } 38134 ); 38135 } 38136 }); 38137 } 38138 38139 if (isForbiddenTag(element) && !isServerRendering()) { 38140 element.forbidden = true; 38141 true && warn$2( 38142 'Templates should only be responsible for mapping the state to the ' + 38143 'UI. Avoid placing tags with side-effects in your templates, such as ' + 38144 "<" + tag + ">" + ', as they will not be parsed.', 38145 { start: element.start } 38146 ); 38147 } 38148 38149 // apply pre-transforms 38150 for (var i = 0; i < preTransforms.length; i++) { 38151 element = preTransforms[i](element, options) || element; 38152 } 38153 38154 if (!inVPre) { 38155 processPre(element); 38156 if (element.pre) { 38157 inVPre = true; 38158 } 38159 } 38160 if (platformIsPreTag(element.tag)) { 38161 inPre = true; 38162 } 38163 if (inVPre) { 38164 processRawAttrs(element); 38165 } else if (!element.processed) { 38166 // structural directives 38167 processFor(element); 38168 processIf(element); 38169 processOnce(element); 38170 } 38171 38172 if (!root) { 38173 root = element; 38174 if (true) { 38175 checkRootConstraints(root); 38176 } 38177 } 38178 38179 if (!unary) { 38180 currentParent = element; 38181 stack.push(element); 38182 } else { 38183 closeElement(element); 38184 } 38185 }, 38186 38187 end: function end (tag, start, end$1) { 38188 var element = stack[stack.length - 1]; 38189 // pop stack 38190 stack.length -= 1; 38191 currentParent = stack[stack.length - 1]; 38192 if ( true && options.outputSourceRange) { 38193 element.end = end$1; 38194 } 38195 closeElement(element); 38196 }, 38197 38198 chars: function chars (text, start, end) { 38199 if (!currentParent) { 38200 if (true) { 38201 if (text === template) { 38202 warnOnce( 38203 'Component template requires a root element, rather than just text.', 38204 { start: start } 38205 ); 38206 } else if ((text = text.trim())) { 38207 warnOnce( 38208 ("text \"" + text + "\" outside root element will be ignored."), 38209 { start: start } 38210 ); 38211 } 38212 } 38213 return 38214 } 38215 // IE textarea placeholder bug 38216 /* istanbul ignore if */ 38217 if (isIE && 38218 currentParent.tag === 'textarea' && 38219 currentParent.attrsMap.placeholder === text 38220 ) { 38221 return 38222 } 38223 var children = currentParent.children; 38224 if (inPre || text.trim()) { 38225 text = isTextTag(currentParent) ? text : decodeHTMLCached(text); 38226 } else if (!children.length) { 38227 // remove the whitespace-only node right after an opening tag 38228 text = ''; 38229 } else if (whitespaceOption) { 38230 if (whitespaceOption === 'condense') { 38231 // in condense mode, remove the whitespace node if it contains 38232 // line break, otherwise condense to a single space 38233 text = lineBreakRE.test(text) ? '' : ' '; 38234 } else { 38235 text = ' '; 38236 } 38237 } else { 38238 text = preserveWhitespace ? ' ' : ''; 38239 } 38240 if (text) { 38241 if (!inPre && whitespaceOption === 'condense') { 38242 // condense consecutive whitespaces into single space 38243 text = text.replace(whitespaceRE$1, ' '); 38244 } 38245 var res; 38246 var child; 38247 if (!inVPre && text !== ' ' && (res = parseText(text, delimiters))) { 38248 child = { 38249 type: 2, 38250 expression: res.expression, 38251 tokens: res.tokens, 38252 text: text 38253 }; 38254 } else if (text !== ' ' || !children.length || children[children.length - 1].text !== ' ') { 38255 child = { 38256 type: 3, 38257 text: text 38258 }; 38259 } 38260 if (child) { 38261 if ( true && options.outputSourceRange) { 38262 child.start = start; 38263 child.end = end; 38264 } 38265 children.push(child); 38266 } 38267 } 38268 }, 38269 comment: function comment (text, start, end) { 38270 // adding anything as a sibling to the root node is forbidden 38271 // comments should still be allowed, but ignored 38272 if (currentParent) { 38273 var child = { 38274 type: 3, 38275 text: text, 38276 isComment: true 38277 }; 38278 if ( true && options.outputSourceRange) { 38279 child.start = start; 38280 child.end = end; 38281 } 38282 currentParent.children.push(child); 38283 } 38284 } 38285 }); 38286 return root 38287} 38288 38289function processPre (el) { 38290 if (getAndRemoveAttr(el, 'v-pre') != null) { 38291 el.pre = true; 38292 } 38293} 38294 38295function processRawAttrs (el) { 38296 var list = el.attrsList; 38297 var len = list.length; 38298 if (len) { 38299 var attrs = el.attrs = new Array(len); 38300 for (var i = 0; i < len; i++) { 38301 attrs[i] = { 38302 name: list[i].name, 38303 value: JSON.stringify(list[i].value) 38304 }; 38305 if (list[i].start != null) { 38306 attrs[i].start = list[i].start; 38307 attrs[i].end = list[i].end; 38308 } 38309 } 38310 } else if (!el.pre) { 38311 // non root node in pre blocks with no attributes 38312 el.plain = true; 38313 } 38314} 38315 38316function processElement ( 38317 element, 38318 options 38319) { 38320 processKey(element); 38321 38322 // determine whether this is a plain element after 38323 // removing structural attributes 38324 element.plain = ( 38325 !element.key && 38326 !element.scopedSlots && 38327 !element.attrsList.length 38328 ); 38329 38330 processRef(element); 38331 processSlotContent(element); 38332 processSlotOutlet(element); 38333 processComponent(element); 38334 for (var i = 0; i < transforms.length; i++) { 38335 element = transforms[i](element, options) || element; 38336 } 38337 processAttrs(element); 38338 return element 38339} 38340 38341function processKey (el) { 38342 var exp = getBindingAttr(el, 'key'); 38343 if (exp) { 38344 if (true) { 38345 if (el.tag === 'template') { 38346 warn$2( 38347 "<template> cannot be keyed. Place the key on real elements instead.", 38348 getRawBindingAttr(el, 'key') 38349 ); 38350 } 38351 if (el.for) { 38352 var iterator = el.iterator2 || el.iterator1; 38353 var parent = el.parent; 38354 if (iterator && iterator === exp && parent && parent.tag === 'transition-group') { 38355 warn$2( 38356 "Do not use v-for index as key on <transition-group> children, " + 38357 "this is the same as not using keys.", 38358 getRawBindingAttr(el, 'key'), 38359 true /* tip */ 38360 ); 38361 } 38362 } 38363 } 38364 el.key = exp; 38365 } 38366} 38367 38368function processRef (el) { 38369 var ref = getBindingAttr(el, 'ref'); 38370 if (ref) { 38371 el.ref = ref; 38372 el.refInFor = checkInFor(el); 38373 } 38374} 38375 38376function processFor (el) { 38377 var exp; 38378 if ((exp = getAndRemoveAttr(el, 'v-for'))) { 38379 var res = parseFor(exp); 38380 if (res) { 38381 extend(el, res); 38382 } else if (true) { 38383 warn$2( 38384 ("Invalid v-for expression: " + exp), 38385 el.rawAttrsMap['v-for'] 38386 ); 38387 } 38388 } 38389} 38390 38391 38392 38393function parseFor (exp) { 38394 var inMatch = exp.match(forAliasRE); 38395 if (!inMatch) { return } 38396 var res = {}; 38397 res.for = inMatch[2].trim(); 38398 var alias = inMatch[1].trim().replace(stripParensRE, ''); 38399 var iteratorMatch = alias.match(forIteratorRE); 38400 if (iteratorMatch) { 38401 res.alias = alias.replace(forIteratorRE, '').trim(); 38402 res.iterator1 = iteratorMatch[1].trim(); 38403 if (iteratorMatch[2]) { 38404 res.iterator2 = iteratorMatch[2].trim(); 38405 } 38406 } else { 38407 res.alias = alias; 38408 } 38409 return res 38410} 38411 38412function processIf (el) { 38413 var exp = getAndRemoveAttr(el, 'v-if'); 38414 if (exp) { 38415 el.if = exp; 38416 addIfCondition(el, { 38417 exp: exp, 38418 block: el 38419 }); 38420 } else { 38421 if (getAndRemoveAttr(el, 'v-else') != null) { 38422 el.else = true; 38423 } 38424 var elseif = getAndRemoveAttr(el, 'v-else-if'); 38425 if (elseif) { 38426 el.elseif = elseif; 38427 } 38428 } 38429} 38430 38431function processIfConditions (el, parent) { 38432 var prev = findPrevElement(parent.children); 38433 if (prev && prev.if) { 38434 addIfCondition(prev, { 38435 exp: el.elseif, 38436 block: el 38437 }); 38438 } else if (true) { 38439 warn$2( 38440 "v-" + (el.elseif ? ('else-if="' + el.elseif + '"') : 'else') + " " + 38441 "used on element <" + (el.tag) + "> without corresponding v-if.", 38442 el.rawAttrsMap[el.elseif ? 'v-else-if' : 'v-else'] 38443 ); 38444 } 38445} 38446 38447function findPrevElement (children) { 38448 var i = children.length; 38449 while (i--) { 38450 if (children[i].type === 1) { 38451 return children[i] 38452 } else { 38453 if ( true && children[i].text !== ' ') { 38454 warn$2( 38455 "text \"" + (children[i].text.trim()) + "\" between v-if and v-else(-if) " + 38456 "will be ignored.", 38457 children[i] 38458 ); 38459 } 38460 children.pop(); 38461 } 38462 } 38463} 38464 38465function addIfCondition (el, condition) { 38466 if (!el.ifConditions) { 38467 el.ifConditions = []; 38468 } 38469 el.ifConditions.push(condition); 38470} 38471 38472function processOnce (el) { 38473 var once$$1 = getAndRemoveAttr(el, 'v-once'); 38474 if (once$$1 != null) { 38475 el.once = true; 38476 } 38477} 38478 38479// handle content being passed to a component as slot, 38480// e.g. <template slot="xxx">, <div slot-scope="xxx"> 38481function processSlotContent (el) { 38482 var slotScope; 38483 if (el.tag === 'template') { 38484 slotScope = getAndRemoveAttr(el, 'scope'); 38485 /* istanbul ignore if */ 38486 if ( true && slotScope) { 38487 warn$2( 38488 "the \"scope\" attribute for scoped slots have been deprecated and " + 38489 "replaced by \"slot-scope\" since 2.5. The new \"slot-scope\" attribute " + 38490 "can also be used on plain elements in addition to <template> to " + 38491 "denote scoped slots.", 38492 el.rawAttrsMap['scope'], 38493 true 38494 ); 38495 } 38496 el.slotScope = slotScope || getAndRemoveAttr(el, 'slot-scope'); 38497 } else if ((slotScope = getAndRemoveAttr(el, 'slot-scope'))) { 38498 /* istanbul ignore if */ 38499 if ( true && el.attrsMap['v-for']) { 38500 warn$2( 38501 "Ambiguous combined usage of slot-scope and v-for on <" + (el.tag) + "> " + 38502 "(v-for takes higher priority). Use a wrapper <template> for the " + 38503 "scoped slot to make it clearer.", 38504 el.rawAttrsMap['slot-scope'], 38505 true 38506 ); 38507 } 38508 el.slotScope = slotScope; 38509 } 38510 38511 // slot="xxx" 38512 var slotTarget = getBindingAttr(el, 'slot'); 38513 if (slotTarget) { 38514 el.slotTarget = slotTarget === '""' ? '"default"' : slotTarget; 38515 el.slotTargetDynamic = !!(el.attrsMap[':slot'] || el.attrsMap['v-bind:slot']); 38516 // preserve slot as an attribute for native shadow DOM compat 38517 // only for non-scoped slots. 38518 if (el.tag !== 'template' && !el.slotScope) { 38519 addAttr(el, 'slot', slotTarget, getRawBindingAttr(el, 'slot')); 38520 } 38521 } 38522 38523 // 2.6 v-slot syntax 38524 { 38525 if (el.tag === 'template') { 38526 // v-slot on <template> 38527 var slotBinding = getAndRemoveAttrByRegex(el, slotRE); 38528 if (slotBinding) { 38529 if (true) { 38530 if (el.slotTarget || el.slotScope) { 38531 warn$2( 38532 "Unexpected mixed usage of different slot syntaxes.", 38533 el 38534 ); 38535 } 38536 if (el.parent && !maybeComponent(el.parent)) { 38537 warn$2( 38538 "<template v-slot> can only appear at the root level inside " + 38539 "the receiving component", 38540 el 38541 ); 38542 } 38543 } 38544 var ref = getSlotName(slotBinding); 38545 var name = ref.name; 38546 var dynamic = ref.dynamic; 38547 el.slotTarget = name; 38548 el.slotTargetDynamic = dynamic; 38549 el.slotScope = slotBinding.value || emptySlotScopeToken; // force it into a scoped slot for perf 38550 } 38551 } else { 38552 // v-slot on component, denotes default slot 38553 var slotBinding$1 = getAndRemoveAttrByRegex(el, slotRE); 38554 if (slotBinding$1) { 38555 if (true) { 38556 if (!maybeComponent(el)) { 38557 warn$2( 38558 "v-slot can only be used on components or <template>.", 38559 slotBinding$1 38560 ); 38561 } 38562 if (el.slotScope || el.slotTarget) { 38563 warn$2( 38564 "Unexpected mixed usage of different slot syntaxes.", 38565 el 38566 ); 38567 } 38568 if (el.scopedSlots) { 38569 warn$2( 38570 "To avoid scope ambiguity, the default slot should also use " + 38571 "<template> syntax when there are other named slots.", 38572 slotBinding$1 38573 ); 38574 } 38575 } 38576 // add the component's children to its default slot 38577 var slots = el.scopedSlots || (el.scopedSlots = {}); 38578 var ref$1 = getSlotName(slotBinding$1); 38579 var name$1 = ref$1.name; 38580 var dynamic$1 = ref$1.dynamic; 38581 var slotContainer = slots[name$1] = createASTElement('template', [], el); 38582 slotContainer.slotTarget = name$1; 38583 slotContainer.slotTargetDynamic = dynamic$1; 38584 slotContainer.children = el.children.filter(function (c) { 38585 if (!c.slotScope) { 38586 c.parent = slotContainer; 38587 return true 38588 } 38589 }); 38590 slotContainer.slotScope = slotBinding$1.value || emptySlotScopeToken; 38591 // remove children as they are returned from scopedSlots now 38592 el.children = []; 38593 // mark el non-plain so data gets generated 38594 el.plain = false; 38595 } 38596 } 38597 } 38598} 38599 38600function getSlotName (binding) { 38601 var name = binding.name.replace(slotRE, ''); 38602 if (!name) { 38603 if (binding.name[0] !== '#') { 38604 name = 'default'; 38605 } else if (true) { 38606 warn$2( 38607 "v-slot shorthand syntax requires a slot name.", 38608 binding 38609 ); 38610 } 38611 } 38612 return dynamicArgRE.test(name) 38613 // dynamic [name] 38614 ? { name: name.slice(1, -1), dynamic: true } 38615 // static name 38616 : { name: ("\"" + name + "\""), dynamic: false } 38617} 38618 38619// handle <slot/> outlets 38620function processSlotOutlet (el) { 38621 if (el.tag === 'slot') { 38622 el.slotName = getBindingAttr(el, 'name'); 38623 if ( true && el.key) { 38624 warn$2( 38625 "`key` does not work on <slot> because slots are abstract outlets " + 38626 "and can possibly expand into multiple elements. " + 38627 "Use the key on a wrapping element instead.", 38628 getRawBindingAttr(el, 'key') 38629 ); 38630 } 38631 } 38632} 38633 38634function processComponent (el) { 38635 var binding; 38636 if ((binding = getBindingAttr(el, 'is'))) { 38637 el.component = binding; 38638 } 38639 if (getAndRemoveAttr(el, 'inline-template') != null) { 38640 el.inlineTemplate = true; 38641 } 38642} 38643 38644function processAttrs (el) { 38645 var list = el.attrsList; 38646 var i, l, name, rawName, value, modifiers, syncGen, isDynamic; 38647 for (i = 0, l = list.length; i < l; i++) { 38648 name = rawName = list[i].name; 38649 value = list[i].value; 38650 if (dirRE.test(name)) { 38651 // mark element as dynamic 38652 el.hasBindings = true; 38653 // modifiers 38654 modifiers = parseModifiers(name.replace(dirRE, '')); 38655 // support .foo shorthand syntax for the .prop modifier 38656 if (modifiers) { 38657 name = name.replace(modifierRE, ''); 38658 } 38659 if (bindRE.test(name)) { // v-bind 38660 name = name.replace(bindRE, ''); 38661 value = parseFilters(value); 38662 isDynamic = dynamicArgRE.test(name); 38663 if (isDynamic) { 38664 name = name.slice(1, -1); 38665 } 38666 if ( 38667 true && 38668 value.trim().length === 0 38669 ) { 38670 warn$2( 38671 ("The value for a v-bind expression cannot be empty. Found in \"v-bind:" + name + "\"") 38672 ); 38673 } 38674 if (modifiers) { 38675 if (modifiers.prop && !isDynamic) { 38676 name = camelize(name); 38677 if (name === 'innerHtml') { name = 'innerHTML'; } 38678 } 38679 if (modifiers.camel && !isDynamic) { 38680 name = camelize(name); 38681 } 38682 if (modifiers.sync) { 38683 syncGen = genAssignmentCode(value, "$event"); 38684 if (!isDynamic) { 38685 addHandler( 38686 el, 38687 ("update:" + (camelize(name))), 38688 syncGen, 38689 null, 38690 false, 38691 warn$2, 38692 list[i] 38693 ); 38694 if (hyphenate(name) !== camelize(name)) { 38695 addHandler( 38696 el, 38697 ("update:" + (hyphenate(name))), 38698 syncGen, 38699 null, 38700 false, 38701 warn$2, 38702 list[i] 38703 ); 38704 } 38705 } else { 38706 // handler w/ dynamic event name 38707 addHandler( 38708 el, 38709 ("\"update:\"+(" + name + ")"), 38710 syncGen, 38711 null, 38712 false, 38713 warn$2, 38714 list[i], 38715 true // dynamic 38716 ); 38717 } 38718 } 38719 } 38720 if ((modifiers && modifiers.prop) || ( 38721 !el.component && platformMustUseProp(el.tag, el.attrsMap.type, name) 38722 )) { 38723 addProp(el, name, value, list[i], isDynamic); 38724 } else { 38725 addAttr(el, name, value, list[i], isDynamic); 38726 } 38727 } else if (onRE.test(name)) { // v-on 38728 name = name.replace(onRE, ''); 38729 isDynamic = dynamicArgRE.test(name); 38730 if (isDynamic) { 38731 name = name.slice(1, -1); 38732 } 38733 addHandler(el, name, value, modifiers, false, warn$2, list[i], isDynamic); 38734 } else { // normal directives 38735 name = name.replace(dirRE, ''); 38736 // parse arg 38737 var argMatch = name.match(argRE); 38738 var arg = argMatch && argMatch[1]; 38739 isDynamic = false; 38740 if (arg) { 38741 name = name.slice(0, -(arg.length + 1)); 38742 if (dynamicArgRE.test(arg)) { 38743 arg = arg.slice(1, -1); 38744 isDynamic = true; 38745 } 38746 } 38747 addDirective(el, name, rawName, value, arg, isDynamic, modifiers, list[i]); 38748 if ( true && name === 'model') { 38749 checkForAliasModel(el, value); 38750 } 38751 } 38752 } else { 38753 // literal attribute 38754 if (true) { 38755 var res = parseText(value, delimiters); 38756 if (res) { 38757 warn$2( 38758 name + "=\"" + value + "\": " + 38759 'Interpolation inside attributes has been removed. ' + 38760 'Use v-bind or the colon shorthand instead. For example, ' + 38761 'instead of <div id="{{ val }}">, use <div :id="val">.', 38762 list[i] 38763 ); 38764 } 38765 } 38766 addAttr(el, name, JSON.stringify(value), list[i]); 38767 // #6887 firefox doesn't update muted state if set via attribute 38768 // even immediately after element creation 38769 if (!el.component && 38770 name === 'muted' && 38771 platformMustUseProp(el.tag, el.attrsMap.type, name)) { 38772 addProp(el, name, 'true', list[i]); 38773 } 38774 } 38775 } 38776} 38777 38778function checkInFor (el) { 38779 var parent = el; 38780 while (parent) { 38781 if (parent.for !== undefined) { 38782 return true 38783 } 38784 parent = parent.parent; 38785 } 38786 return false 38787} 38788 38789function parseModifiers (name) { 38790 var match = name.match(modifierRE); 38791 if (match) { 38792 var ret = {}; 38793 match.forEach(function (m) { ret[m.slice(1)] = true; }); 38794 return ret 38795 } 38796} 38797 38798function makeAttrsMap (attrs) { 38799 var map = {}; 38800 for (var i = 0, l = attrs.length; i < l; i++) { 38801 if ( 38802 true && 38803 map[attrs[i].name] && !isIE && !isEdge 38804 ) { 38805 warn$2('duplicate attribute: ' + attrs[i].name, attrs[i]); 38806 } 38807 map[attrs[i].name] = attrs[i].value; 38808 } 38809 return map 38810} 38811 38812// for script (e.g. type="x/template") or style, do not decode content 38813function isTextTag (el) { 38814 return el.tag === 'script' || el.tag === 'style' 38815} 38816 38817function isForbiddenTag (el) { 38818 return ( 38819 el.tag === 'style' || 38820 (el.tag === 'script' && ( 38821 !el.attrsMap.type || 38822 el.attrsMap.type === 'text/javascript' 38823 )) 38824 ) 38825} 38826 38827var ieNSBug = /^xmlns:NS\d+/; 38828var ieNSPrefix = /^NS\d+:/; 38829 38830/* istanbul ignore next */ 38831function guardIESVGBug (attrs) { 38832 var res = []; 38833 for (var i = 0; i < attrs.length; i++) { 38834 var attr = attrs[i]; 38835 if (!ieNSBug.test(attr.name)) { 38836 attr.name = attr.name.replace(ieNSPrefix, ''); 38837 res.push(attr); 38838 } 38839 } 38840 return res 38841} 38842 38843function checkForAliasModel (el, value) { 38844 var _el = el; 38845 while (_el) { 38846 if (_el.for && _el.alias === value) { 38847 warn$2( 38848 "<" + (el.tag) + " v-model=\"" + value + "\">: " + 38849 "You are binding v-model directly to a v-for iteration alias. " + 38850 "This will not be able to modify the v-for source array because " + 38851 "writing to the alias is like modifying a function local variable. " + 38852 "Consider using an array of objects and use v-model on an object property instead.", 38853 el.rawAttrsMap['v-model'] 38854 ); 38855 } 38856 _el = _el.parent; 38857 } 38858} 38859 38860/* */ 38861 38862function preTransformNode (el, options) { 38863 if (el.tag === 'input') { 38864 var map = el.attrsMap; 38865 if (!map['v-model']) { 38866 return 38867 } 38868 38869 var typeBinding; 38870 if (map[':type'] || map['v-bind:type']) { 38871 typeBinding = getBindingAttr(el, 'type'); 38872 } 38873 if (!map.type && !typeBinding && map['v-bind']) { 38874 typeBinding = "(" + (map['v-bind']) + ").type"; 38875 } 38876 38877 if (typeBinding) { 38878 var ifCondition = getAndRemoveAttr(el, 'v-if', true); 38879 var ifConditionExtra = ifCondition ? ("&&(" + ifCondition + ")") : ""; 38880 var hasElse = getAndRemoveAttr(el, 'v-else', true) != null; 38881 var elseIfCondition = getAndRemoveAttr(el, 'v-else-if', true); 38882 // 1. checkbox 38883 var branch0 = cloneASTElement(el); 38884 // process for on the main node 38885 processFor(branch0); 38886 addRawAttr(branch0, 'type', 'checkbox'); 38887 processElement(branch0, options); 38888 branch0.processed = true; // prevent it from double-processed 38889 branch0.if = "(" + typeBinding + ")==='checkbox'" + ifConditionExtra; 38890 addIfCondition(branch0, { 38891 exp: branch0.if, 38892 block: branch0 38893 }); 38894 // 2. add radio else-if condition 38895 var branch1 = cloneASTElement(el); 38896 getAndRemoveAttr(branch1, 'v-for', true); 38897 addRawAttr(branch1, 'type', 'radio'); 38898 processElement(branch1, options); 38899 addIfCondition(branch0, { 38900 exp: "(" + typeBinding + ")==='radio'" + ifConditionExtra, 38901 block: branch1 38902 }); 38903 // 3. other 38904 var branch2 = cloneASTElement(el); 38905 getAndRemoveAttr(branch2, 'v-for', true); 38906 addRawAttr(branch2, ':type', typeBinding); 38907 processElement(branch2, options); 38908 addIfCondition(branch0, { 38909 exp: ifCondition, 38910 block: branch2 38911 }); 38912 38913 if (hasElse) { 38914 branch0.else = true; 38915 } else if (elseIfCondition) { 38916 branch0.elseif = elseIfCondition; 38917 } 38918 38919 return branch0 38920 } 38921 } 38922} 38923 38924function cloneASTElement (el) { 38925 return createASTElement(el.tag, el.attrsList.slice(), el.parent) 38926} 38927 38928var model$1 = { 38929 preTransformNode: preTransformNode 38930}; 38931 38932var modules$1 = [ 38933 klass$1, 38934 style$1, 38935 model$1 38936]; 38937 38938/* */ 38939 38940function text (el, dir) { 38941 if (dir.value) { 38942 addProp(el, 'textContent', ("_s(" + (dir.value) + ")"), dir); 38943 } 38944} 38945 38946/* */ 38947 38948function html (el, dir) { 38949 if (dir.value) { 38950 addProp(el, 'innerHTML', ("_s(" + (dir.value) + ")"), dir); 38951 } 38952} 38953 38954var directives$1 = { 38955 model: model, 38956 text: text, 38957 html: html 38958}; 38959 38960/* */ 38961 38962var baseOptions = { 38963 expectHTML: true, 38964 modules: modules$1, 38965 directives: directives$1, 38966 isPreTag: isPreTag, 38967 isUnaryTag: isUnaryTag, 38968 mustUseProp: mustUseProp, 38969 canBeLeftOpenTag: canBeLeftOpenTag, 38970 isReservedTag: isReservedTag, 38971 getTagNamespace: getTagNamespace, 38972 staticKeys: genStaticKeys(modules$1) 38973}; 38974 38975/* */ 38976 38977var isStaticKey; 38978var isPlatformReservedTag; 38979 38980var genStaticKeysCached = cached(genStaticKeys$1); 38981 38982/** 38983 * Goal of the optimizer: walk the generated template AST tree 38984 * and detect sub-trees that are purely static, i.e. parts of 38985 * the DOM that never needs to change. 38986 * 38987 * Once we detect these sub-trees, we can: 38988 * 38989 * 1. Hoist them into constants, so that we no longer need to 38990 * create fresh nodes for them on each re-render; 38991 * 2. Completely skip them in the patching process. 38992 */ 38993function optimize (root, options) { 38994 if (!root) { return } 38995 isStaticKey = genStaticKeysCached(options.staticKeys || ''); 38996 isPlatformReservedTag = options.isReservedTag || no; 38997 // first pass: mark all non-static nodes. 38998 markStatic$1(root); 38999 // second pass: mark static roots. 39000 markStaticRoots(root, false); 39001} 39002 39003function genStaticKeys$1 (keys) { 39004 return makeMap( 39005 'type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap' + 39006 (keys ? ',' + keys : '') 39007 ) 39008} 39009 39010function markStatic$1 (node) { 39011 node.static = isStatic(node); 39012 if (node.type === 1) { 39013 // do not make component slot content static. this avoids 39014 // 1. components not able to mutate slot nodes 39015 // 2. static slot content fails for hot-reloading 39016 if ( 39017 !isPlatformReservedTag(node.tag) && 39018 node.tag !== 'slot' && 39019 node.attrsMap['inline-template'] == null 39020 ) { 39021 return 39022 } 39023 for (var i = 0, l = node.children.length; i < l; i++) { 39024 var child = node.children[i]; 39025 markStatic$1(child); 39026 if (!child.static) { 39027 node.static = false; 39028 } 39029 } 39030 if (node.ifConditions) { 39031 for (var i$1 = 1, l$1 = node.ifConditions.length; i$1 < l$1; i$1++) { 39032 var block = node.ifConditions[i$1].block; 39033 markStatic$1(block); 39034 if (!block.static) { 39035 node.static = false; 39036 } 39037 } 39038 } 39039 } 39040} 39041 39042function markStaticRoots (node, isInFor) { 39043 if (node.type === 1) { 39044 if (node.static || node.once) { 39045 node.staticInFor = isInFor; 39046 } 39047 // For a node to qualify as a static root, it should have children that 39048 // are not just static text. Otherwise the cost of hoisting out will 39049 // outweigh the benefits and it's better off to just always render it fresh. 39050 if (node.static && node.children.length && !( 39051 node.children.length === 1 && 39052 node.children[0].type === 3 39053 )) { 39054 node.staticRoot = true; 39055 return 39056 } else { 39057 node.staticRoot = false; 39058 } 39059 if (node.children) { 39060 for (var i = 0, l = node.children.length; i < l; i++) { 39061 markStaticRoots(node.children[i], isInFor || !!node.for); 39062 } 39063 } 39064 if (node.ifConditions) { 39065 for (var i$1 = 1, l$1 = node.ifConditions.length; i$1 < l$1; i$1++) { 39066 markStaticRoots(node.ifConditions[i$1].block, isInFor); 39067 } 39068 } 39069 } 39070} 39071 39072function isStatic (node) { 39073 if (node.type === 2) { // expression 39074 return false 39075 } 39076 if (node.type === 3) { // text 39077 return true 39078 } 39079 return !!(node.pre || ( 39080 !node.hasBindings && // no dynamic bindings 39081 !node.if && !node.for && // not v-if or v-for or v-else 39082 !isBuiltInTag(node.tag) && // not a built-in 39083 isPlatformReservedTag(node.tag) && // not a component 39084 !isDirectChildOfTemplateFor(node) && 39085 Object.keys(node).every(isStaticKey) 39086 )) 39087} 39088 39089function isDirectChildOfTemplateFor (node) { 39090 while (node.parent) { 39091 node = node.parent; 39092 if (node.tag !== 'template') { 39093 return false 39094 } 39095 if (node.for) { 39096 return true 39097 } 39098 } 39099 return false 39100} 39101 39102/* */ 39103 39104var fnExpRE = /^([\w$_]+|\([^)]*?\))\s*=>|^function(?:\s+[\w$]+)?\s*\(/; 39105var fnInvokeRE = /\([^)]*?\);*$/; 39106var simplePathRE = /^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/; 39107 39108// KeyboardEvent.keyCode aliases 39109var keyCodes = { 39110 esc: 27, 39111 tab: 9, 39112 enter: 13, 39113 space: 32, 39114 up: 38, 39115 left: 37, 39116 right: 39, 39117 down: 40, 39118 'delete': [8, 46] 39119}; 39120 39121// KeyboardEvent.key aliases 39122var keyNames = { 39123 // #7880: IE11 and Edge use `Esc` for Escape key name. 39124 esc: ['Esc', 'Escape'], 39125 tab: 'Tab', 39126 enter: 'Enter', 39127 // #9112: IE11 uses `Spacebar` for Space key name. 39128 space: [' ', 'Spacebar'], 39129 // #7806: IE11 uses key names without `Arrow` prefix for arrow keys. 39130 up: ['Up', 'ArrowUp'], 39131 left: ['Left', 'ArrowLeft'], 39132 right: ['Right', 'ArrowRight'], 39133 down: ['Down', 'ArrowDown'], 39134 // #9112: IE11 uses `Del` for Delete key name. 39135 'delete': ['Backspace', 'Delete', 'Del'] 39136}; 39137 39138// #4868: modifiers that prevent the execution of the listener 39139// need to explicitly return null so that we can determine whether to remove 39140// the listener for .once 39141var genGuard = function (condition) { return ("if(" + condition + ")return null;"); }; 39142 39143var modifierCode = { 39144 stop: '$event.stopPropagation();', 39145 prevent: '$event.preventDefault();', 39146 self: genGuard("$event.target !== $event.currentTarget"), 39147 ctrl: genGuard("!$event.ctrlKey"), 39148 shift: genGuard("!$event.shiftKey"), 39149 alt: genGuard("!$event.altKey"), 39150 meta: genGuard("!$event.metaKey"), 39151 left: genGuard("'button' in $event && $event.button !== 0"), 39152 middle: genGuard("'button' in $event && $event.button !== 1"), 39153 right: genGuard("'button' in $event && $event.button !== 2") 39154}; 39155 39156function genHandlers ( 39157 events, 39158 isNative 39159) { 39160 var prefix = isNative ? 'nativeOn:' : 'on:'; 39161 var staticHandlers = ""; 39162 var dynamicHandlers = ""; 39163 for (var name in events) { 39164 var handlerCode = genHandler(events[name]); 39165 if (events[name] && events[name].dynamic) { 39166 dynamicHandlers += name + "," + handlerCode + ","; 39167 } else { 39168 staticHandlers += "\"" + name + "\":" + handlerCode + ","; 39169 } 39170 } 39171 staticHandlers = "{" + (staticHandlers.slice(0, -1)) + "}"; 39172 if (dynamicHandlers) { 39173 return prefix + "_d(" + staticHandlers + ",[" + (dynamicHandlers.slice(0, -1)) + "])" 39174 } else { 39175 return prefix + staticHandlers 39176 } 39177} 39178 39179function genHandler (handler) { 39180 if (!handler) { 39181 return 'function(){}' 39182 } 39183 39184 if (Array.isArray(handler)) { 39185 return ("[" + (handler.map(function (handler) { return genHandler(handler); }).join(',')) + "]") 39186 } 39187 39188 var isMethodPath = simplePathRE.test(handler.value); 39189 var isFunctionExpression = fnExpRE.test(handler.value); 39190 var isFunctionInvocation = simplePathRE.test(handler.value.replace(fnInvokeRE, '')); 39191 39192 if (!handler.modifiers) { 39193 if (isMethodPath || isFunctionExpression) { 39194 return handler.value 39195 } 39196 return ("function($event){" + (isFunctionInvocation ? ("return " + (handler.value)) : handler.value) + "}") // inline statement 39197 } else { 39198 var code = ''; 39199 var genModifierCode = ''; 39200 var keys = []; 39201 for (var key in handler.modifiers) { 39202 if (modifierCode[key]) { 39203 genModifierCode += modifierCode[key]; 39204 // left/right 39205 if (keyCodes[key]) { 39206 keys.push(key); 39207 } 39208 } else if (key === 'exact') { 39209 var modifiers = (handler.modifiers); 39210 genModifierCode += genGuard( 39211 ['ctrl', 'shift', 'alt', 'meta'] 39212 .filter(function (keyModifier) { return !modifiers[keyModifier]; }) 39213 .map(function (keyModifier) { return ("$event." + keyModifier + "Key"); }) 39214 .join('||') 39215 ); 39216 } else { 39217 keys.push(key); 39218 } 39219 } 39220 if (keys.length) { 39221 code += genKeyFilter(keys); 39222 } 39223 // Make sure modifiers like prevent and stop get executed after key filtering 39224 if (genModifierCode) { 39225 code += genModifierCode; 39226 } 39227 var handlerCode = isMethodPath 39228 ? ("return " + (handler.value) + ".apply(null, arguments)") 39229 : isFunctionExpression 39230 ? ("return (" + (handler.value) + ").apply(null, arguments)") 39231 : isFunctionInvocation 39232 ? ("return " + (handler.value)) 39233 : handler.value; 39234 return ("function($event){" + code + handlerCode + "}") 39235 } 39236} 39237 39238function genKeyFilter (keys) { 39239 return ( 39240 // make sure the key filters only apply to KeyboardEvents 39241 // #9441: can't use 'keyCode' in $event because Chrome autofill fires fake 39242 // key events that do not have keyCode property... 39243 "if(!$event.type.indexOf('key')&&" + 39244 (keys.map(genFilterCode).join('&&')) + ")return null;" 39245 ) 39246} 39247 39248function genFilterCode (key) { 39249 var keyVal = parseInt(key, 10); 39250 if (keyVal) { 39251 return ("$event.keyCode!==" + keyVal) 39252 } 39253 var keyCode = keyCodes[key]; 39254 var keyName = keyNames[key]; 39255 return ( 39256 "_k($event.keyCode," + 39257 (JSON.stringify(key)) + "," + 39258 (JSON.stringify(keyCode)) + "," + 39259 "$event.key," + 39260 "" + (JSON.stringify(keyName)) + 39261 ")" 39262 ) 39263} 39264 39265/* */ 39266 39267function on (el, dir) { 39268 if ( true && dir.modifiers) { 39269 warn("v-on without argument does not support modifiers."); 39270 } 39271 el.wrapListeners = function (code) { return ("_g(" + code + "," + (dir.value) + ")"); }; 39272} 39273 39274/* */ 39275 39276function bind$1 (el, dir) { 39277 el.wrapData = function (code) { 39278 return ("_b(" + code + ",'" + (el.tag) + "'," + (dir.value) + "," + (dir.modifiers && dir.modifiers.prop ? 'true' : 'false') + (dir.modifiers && dir.modifiers.sync ? ',true' : '') + ")") 39279 }; 39280} 39281 39282/* */ 39283 39284var baseDirectives = { 39285 on: on, 39286 bind: bind$1, 39287 cloak: noop 39288}; 39289 39290/* */ 39291 39292 39293 39294 39295 39296var CodegenState = function CodegenState (options) { 39297 this.options = options; 39298 this.warn = options.warn || baseWarn; 39299 this.transforms = pluckModuleFunction(options.modules, 'transformCode'); 39300 this.dataGenFns = pluckModuleFunction(options.modules, 'genData'); 39301 this.directives = extend(extend({}, baseDirectives), options.directives); 39302 var isReservedTag = options.isReservedTag || no; 39303 this.maybeComponent = function (el) { return !!el.component || !isReservedTag(el.tag); }; 39304 this.onceId = 0; 39305 this.staticRenderFns = []; 39306 this.pre = false; 39307}; 39308 39309 39310 39311function generate ( 39312 ast, 39313 options 39314) { 39315 var state = new CodegenState(options); 39316 // fix #11483, Root level <script> tags should not be rendered. 39317 var code = ast ? (ast.tag === 'script' ? 'null' : genElement(ast, state)) : '_c("div")'; 39318 return { 39319 render: ("with(this){return " + code + "}"), 39320 staticRenderFns: state.staticRenderFns 39321 } 39322} 39323 39324function genElement (el, state) { 39325 if (el.parent) { 39326 el.pre = el.pre || el.parent.pre; 39327 } 39328 39329 if (el.staticRoot && !el.staticProcessed) { 39330 return genStatic(el, state) 39331 } else if (el.once && !el.onceProcessed) { 39332 return genOnce(el, state) 39333 } else if (el.for && !el.forProcessed) { 39334 return genFor(el, state) 39335 } else if (el.if && !el.ifProcessed) { 39336 return genIf(el, state) 39337 } else if (el.tag === 'template' && !el.slotTarget && !state.pre) { 39338 return genChildren(el, state) || 'void 0' 39339 } else if (el.tag === 'slot') { 39340 return genSlot(el, state) 39341 } else { 39342 // component or element 39343 var code; 39344 if (el.component) { 39345 code = genComponent(el.component, el, state); 39346 } else { 39347 var data; 39348 if (!el.plain || (el.pre && state.maybeComponent(el))) { 39349 data = genData$2(el, state); 39350 } 39351 39352 var children = el.inlineTemplate ? null : genChildren(el, state, true); 39353 code = "_c('" + (el.tag) + "'" + (data ? ("," + data) : '') + (children ? ("," + children) : '') + ")"; 39354 } 39355 // module transforms 39356 for (var i = 0; i < state.transforms.length; i++) { 39357 code = state.transforms[i](el, code); 39358 } 39359 return code 39360 } 39361} 39362 39363// hoist static sub-trees out 39364function genStatic (el, state) { 39365 el.staticProcessed = true; 39366 // Some elements (templates) need to behave differently inside of a v-pre 39367 // node. All pre nodes are static roots, so we can use this as a location to 39368 // wrap a state change and reset it upon exiting the pre node. 39369 var originalPreState = state.pre; 39370 if (el.pre) { 39371 state.pre = el.pre; 39372 } 39373 state.staticRenderFns.push(("with(this){return " + (genElement(el, state)) + "}")); 39374 state.pre = originalPreState; 39375 return ("_m(" + (state.staticRenderFns.length - 1) + (el.staticInFor ? ',true' : '') + ")") 39376} 39377 39378// v-once 39379function genOnce (el, state) { 39380 el.onceProcessed = true; 39381 if (el.if && !el.ifProcessed) { 39382 return genIf(el, state) 39383 } else if (el.staticInFor) { 39384 var key = ''; 39385 var parent = el.parent; 39386 while (parent) { 39387 if (parent.for) { 39388 key = parent.key; 39389 break 39390 } 39391 parent = parent.parent; 39392 } 39393 if (!key) { 39394 true && state.warn( 39395 "v-once can only be used inside v-for that is keyed. ", 39396 el.rawAttrsMap['v-once'] 39397 ); 39398 return genElement(el, state) 39399 } 39400 return ("_o(" + (genElement(el, state)) + "," + (state.onceId++) + "," + key + ")") 39401 } else { 39402 return genStatic(el, state) 39403 } 39404} 39405 39406function genIf ( 39407 el, 39408 state, 39409 altGen, 39410 altEmpty 39411) { 39412 el.ifProcessed = true; // avoid recursion 39413 return genIfConditions(el.ifConditions.slice(), state, altGen, altEmpty) 39414} 39415 39416function genIfConditions ( 39417 conditions, 39418 state, 39419 altGen, 39420 altEmpty 39421) { 39422 if (!conditions.length) { 39423 return altEmpty || '_e()' 39424 } 39425 39426 var condition = conditions.shift(); 39427 if (condition.exp) { 39428 return ("(" + (condition.exp) + ")?" + (genTernaryExp(condition.block)) + ":" + (genIfConditions(conditions, state, altGen, altEmpty))) 39429 } else { 39430 return ("" + (genTernaryExp(condition.block))) 39431 } 39432 39433 // v-if with v-once should generate code like (a)?_m(0):_m(1) 39434 function genTernaryExp (el) { 39435 return altGen 39436 ? altGen(el, state) 39437 : el.once 39438 ? genOnce(el, state) 39439 : genElement(el, state) 39440 } 39441} 39442 39443function genFor ( 39444 el, 39445 state, 39446 altGen, 39447 altHelper 39448) { 39449 var exp = el.for; 39450 var alias = el.alias; 39451 var iterator1 = el.iterator1 ? ("," + (el.iterator1)) : ''; 39452 var iterator2 = el.iterator2 ? ("," + (el.iterator2)) : ''; 39453 39454 if ( true && 39455 state.maybeComponent(el) && 39456 el.tag !== 'slot' && 39457 el.tag !== 'template' && 39458 !el.key 39459 ) { 39460 state.warn( 39461 "<" + (el.tag) + " v-for=\"" + alias + " in " + exp + "\">: component lists rendered with " + 39462 "v-for should have explicit keys. " + 39463 "See https://vuejs.org/guide/list.html#key for more info.", 39464 el.rawAttrsMap['v-for'], 39465 true /* tip */ 39466 ); 39467 } 39468 39469 el.forProcessed = true; // avoid recursion 39470 return (altHelper || '_l') + "((" + exp + ")," + 39471 "function(" + alias + iterator1 + iterator2 + "){" + 39472 "return " + ((altGen || genElement)(el, state)) + 39473 '})' 39474} 39475 39476function genData$2 (el, state) { 39477 var data = '{'; 39478 39479 // directives first. 39480 // directives may mutate the el's other properties before they are generated. 39481 var dirs = genDirectives(el, state); 39482 if (dirs) { data += dirs + ','; } 39483 39484 // key 39485 if (el.key) { 39486 data += "key:" + (el.key) + ","; 39487 } 39488 // ref 39489 if (el.ref) { 39490 data += "ref:" + (el.ref) + ","; 39491 } 39492 if (el.refInFor) { 39493 data += "refInFor:true,"; 39494 } 39495 // pre 39496 if (el.pre) { 39497 data += "pre:true,"; 39498 } 39499 // record original tag name for components using "is" attribute 39500 if (el.component) { 39501 data += "tag:\"" + (el.tag) + "\","; 39502 } 39503 // module data generation functions 39504 for (var i = 0; i < state.dataGenFns.length; i++) { 39505 data += state.dataGenFns[i](el); 39506 } 39507 // attributes 39508 if (el.attrs) { 39509 data += "attrs:" + (genProps(el.attrs)) + ","; 39510 } 39511 // DOM props 39512 if (el.props) { 39513 data += "domProps:" + (genProps(el.props)) + ","; 39514 } 39515 // event handlers 39516 if (el.events) { 39517 data += (genHandlers(el.events, false)) + ","; 39518 } 39519 if (el.nativeEvents) { 39520 data += (genHandlers(el.nativeEvents, true)) + ","; 39521 } 39522 // slot target 39523 // only for non-scoped slots 39524 if (el.slotTarget && !el.slotScope) { 39525 data += "slot:" + (el.slotTarget) + ","; 39526 } 39527 // scoped slots 39528 if (el.scopedSlots) { 39529 data += (genScopedSlots(el, el.scopedSlots, state)) + ","; 39530 } 39531 // component v-model 39532 if (el.model) { 39533 data += "model:{value:" + (el.model.value) + ",callback:" + (el.model.callback) + ",expression:" + (el.model.expression) + "},"; 39534 } 39535 // inline-template 39536 if (el.inlineTemplate) { 39537 var inlineTemplate = genInlineTemplate(el, state); 39538 if (inlineTemplate) { 39539 data += inlineTemplate + ","; 39540 } 39541 } 39542 data = data.replace(/,$/, '') + '}'; 39543 // v-bind dynamic argument wrap 39544 // v-bind with dynamic arguments must be applied using the same v-bind object 39545 // merge helper so that class/style/mustUseProp attrs are handled correctly. 39546 if (el.dynamicAttrs) { 39547 data = "_b(" + data + ",\"" + (el.tag) + "\"," + (genProps(el.dynamicAttrs)) + ")"; 39548 } 39549 // v-bind data wrap 39550 if (el.wrapData) { 39551 data = el.wrapData(data); 39552 } 39553 // v-on data wrap 39554 if (el.wrapListeners) { 39555 data = el.wrapListeners(data); 39556 } 39557 return data 39558} 39559 39560function genDirectives (el, state) { 39561 var dirs = el.directives; 39562 if (!dirs) { return } 39563 var res = 'directives:['; 39564 var hasRuntime = false; 39565 var i, l, dir, needRuntime; 39566 for (i = 0, l = dirs.length; i < l; i++) { 39567 dir = dirs[i]; 39568 needRuntime = true; 39569 var gen = state.directives[dir.name]; 39570 if (gen) { 39571 // compile-time directive that manipulates AST. 39572 // returns true if it also needs a runtime counterpart. 39573 needRuntime = !!gen(el, dir, state.warn); 39574 } 39575 if (needRuntime) { 39576 hasRuntime = true; 39577 res += "{name:\"" + (dir.name) + "\",rawName:\"" + (dir.rawName) + "\"" + (dir.value ? (",value:(" + (dir.value) + "),expression:" + (JSON.stringify(dir.value))) : '') + (dir.arg ? (",arg:" + (dir.isDynamicArg ? dir.arg : ("\"" + (dir.arg) + "\""))) : '') + (dir.modifiers ? (",modifiers:" + (JSON.stringify(dir.modifiers))) : '') + "},"; 39578 } 39579 } 39580 if (hasRuntime) { 39581 return res.slice(0, -1) + ']' 39582 } 39583} 39584 39585function genInlineTemplate (el, state) { 39586 var ast = el.children[0]; 39587 if ( true && ( 39588 el.children.length !== 1 || ast.type !== 1 39589 )) { 39590 state.warn( 39591 'Inline-template components must have exactly one child element.', 39592 { start: el.start } 39593 ); 39594 } 39595 if (ast && ast.type === 1) { 39596 var inlineRenderFns = generate(ast, state.options); 39597 return ("inlineTemplate:{render:function(){" + (inlineRenderFns.render) + "},staticRenderFns:[" + (inlineRenderFns.staticRenderFns.map(function (code) { return ("function(){" + code + "}"); }).join(',')) + "]}") 39598 } 39599} 39600 39601function genScopedSlots ( 39602 el, 39603 slots, 39604 state 39605) { 39606 // by default scoped slots are considered "stable", this allows child 39607 // components with only scoped slots to skip forced updates from parent. 39608 // but in some cases we have to bail-out of this optimization 39609 // for example if the slot contains dynamic names, has v-if or v-for on them... 39610 var needsForceUpdate = el.for || Object.keys(slots).some(function (key) { 39611 var slot = slots[key]; 39612 return ( 39613 slot.slotTargetDynamic || 39614 slot.if || 39615 slot.for || 39616 containsSlotChild(slot) // is passing down slot from parent which may be dynamic 39617 ) 39618 }); 39619 39620 // #9534: if a component with scoped slots is inside a conditional branch, 39621 // it's possible for the same component to be reused but with different 39622 // compiled slot content. To avoid that, we generate a unique key based on 39623 // the generated code of all the slot contents. 39624 var needsKey = !!el.if; 39625 39626 // OR when it is inside another scoped slot or v-for (the reactivity may be 39627 // disconnected due to the intermediate scope variable) 39628 // #9438, #9506 39629 // TODO: this can be further optimized by properly analyzing in-scope bindings 39630 // and skip force updating ones that do not actually use scope variables. 39631 if (!needsForceUpdate) { 39632 var parent = el.parent; 39633 while (parent) { 39634 if ( 39635 (parent.slotScope && parent.slotScope !== emptySlotScopeToken) || 39636 parent.for 39637 ) { 39638 needsForceUpdate = true; 39639 break 39640 } 39641 if (parent.if) { 39642 needsKey = true; 39643 } 39644 parent = parent.parent; 39645 } 39646 } 39647 39648 var generatedSlots = Object.keys(slots) 39649 .map(function (key) { return genScopedSlot(slots[key], state); }) 39650 .join(','); 39651 39652 return ("scopedSlots:_u([" + generatedSlots + "]" + (needsForceUpdate ? ",null,true" : "") + (!needsForceUpdate && needsKey ? (",null,false," + (hash(generatedSlots))) : "") + ")") 39653} 39654 39655function hash(str) { 39656 var hash = 5381; 39657 var i = str.length; 39658 while(i) { 39659 hash = (hash * 33) ^ str.charCodeAt(--i); 39660 } 39661 return hash >>> 0 39662} 39663 39664function containsSlotChild (el) { 39665 if (el.type === 1) { 39666 if (el.tag === 'slot') { 39667 return true 39668 } 39669 return el.children.some(containsSlotChild) 39670 } 39671 return false 39672} 39673 39674function genScopedSlot ( 39675 el, 39676 state 39677) { 39678 var isLegacySyntax = el.attrsMap['slot-scope']; 39679 if (el.if && !el.ifProcessed && !isLegacySyntax) { 39680 return genIf(el, state, genScopedSlot, "null") 39681 } 39682 if (el.for && !el.forProcessed) { 39683 return genFor(el, state, genScopedSlot) 39684 } 39685 var slotScope = el.slotScope === emptySlotScopeToken 39686 ? "" 39687 : String(el.slotScope); 39688 var fn = "function(" + slotScope + "){" + 39689 "return " + (el.tag === 'template' 39690 ? el.if && isLegacySyntax 39691 ? ("(" + (el.if) + ")?" + (genChildren(el, state) || 'undefined') + ":undefined") 39692 : genChildren(el, state) || 'undefined' 39693 : genElement(el, state)) + "}"; 39694 // reverse proxy v-slot without scope on this.$slots 39695 var reverseProxy = slotScope ? "" : ",proxy:true"; 39696 return ("{key:" + (el.slotTarget || "\"default\"") + ",fn:" + fn + reverseProxy + "}") 39697} 39698 39699function genChildren ( 39700 el, 39701 state, 39702 checkSkip, 39703 altGenElement, 39704 altGenNode 39705) { 39706 var children = el.children; 39707 if (children.length) { 39708 var el$1 = children[0]; 39709 // optimize single v-for 39710 if (children.length === 1 && 39711 el$1.for && 39712 el$1.tag !== 'template' && 39713 el$1.tag !== 'slot' 39714 ) { 39715 var normalizationType = checkSkip 39716 ? state.maybeComponent(el$1) ? ",1" : ",0" 39717 : ""; 39718 return ("" + ((altGenElement || genElement)(el$1, state)) + normalizationType) 39719 } 39720 var normalizationType$1 = checkSkip 39721 ? getNormalizationType(children, state.maybeComponent) 39722 : 0; 39723 var gen = altGenNode || genNode; 39724 return ("[" + (children.map(function (c) { return gen(c, state); }).join(',')) + "]" + (normalizationType$1 ? ("," + normalizationType$1) : '')) 39725 } 39726} 39727 39728// determine the normalization needed for the children array. 39729// 0: no normalization needed 39730// 1: simple normalization needed (possible 1-level deep nested array) 39731// 2: full normalization needed 39732function getNormalizationType ( 39733 children, 39734 maybeComponent 39735) { 39736 var res = 0; 39737 for (var i = 0; i < children.length; i++) { 39738 var el = children[i]; 39739 if (el.type !== 1) { 39740 continue 39741 } 39742 if (needsNormalization(el) || 39743 (el.ifConditions && el.ifConditions.some(function (c) { return needsNormalization(c.block); }))) { 39744 res = 2; 39745 break 39746 } 39747 if (maybeComponent(el) || 39748 (el.ifConditions && el.ifConditions.some(function (c) { return maybeComponent(c.block); }))) { 39749 res = 1; 39750 } 39751 } 39752 return res 39753} 39754 39755function needsNormalization (el) { 39756 return el.for !== undefined || el.tag === 'template' || el.tag === 'slot' 39757} 39758 39759function genNode (node, state) { 39760 if (node.type === 1) { 39761 return genElement(node, state) 39762 } else if (node.type === 3 && node.isComment) { 39763 return genComment(node) 39764 } else { 39765 return genText(node) 39766 } 39767} 39768 39769function genText (text) { 39770 return ("_v(" + (text.type === 2 39771 ? text.expression // no need for () because already wrapped in _s() 39772 : transformSpecialNewlines(JSON.stringify(text.text))) + ")") 39773} 39774 39775function genComment (comment) { 39776 return ("_e(" + (JSON.stringify(comment.text)) + ")") 39777} 39778 39779function genSlot (el, state) { 39780 var slotName = el.slotName || '"default"'; 39781 var children = genChildren(el, state); 39782 var res = "_t(" + slotName + (children ? (",function(){return " + children + "}") : ''); 39783 var attrs = el.attrs || el.dynamicAttrs 39784 ? genProps((el.attrs || []).concat(el.dynamicAttrs || []).map(function (attr) { return ({ 39785 // slot props are camelized 39786 name: camelize(attr.name), 39787 value: attr.value, 39788 dynamic: attr.dynamic 39789 }); })) 39790 : null; 39791 var bind$$1 = el.attrsMap['v-bind']; 39792 if ((attrs || bind$$1) && !children) { 39793 res += ",null"; 39794 } 39795 if (attrs) { 39796 res += "," + attrs; 39797 } 39798 if (bind$$1) { 39799 res += (attrs ? '' : ',null') + "," + bind$$1; 39800 } 39801 return res + ')' 39802} 39803 39804// componentName is el.component, take it as argument to shun flow's pessimistic refinement 39805function genComponent ( 39806 componentName, 39807 el, 39808 state 39809) { 39810 var children = el.inlineTemplate ? null : genChildren(el, state, true); 39811 return ("_c(" + componentName + "," + (genData$2(el, state)) + (children ? ("," + children) : '') + ")") 39812} 39813 39814function genProps (props) { 39815 var staticProps = ""; 39816 var dynamicProps = ""; 39817 for (var i = 0; i < props.length; i++) { 39818 var prop = props[i]; 39819 var value = transformSpecialNewlines(prop.value); 39820 if (prop.dynamic) { 39821 dynamicProps += (prop.name) + "," + value + ","; 39822 } else { 39823 staticProps += "\"" + (prop.name) + "\":" + value + ","; 39824 } 39825 } 39826 staticProps = "{" + (staticProps.slice(0, -1)) + "}"; 39827 if (dynamicProps) { 39828 return ("_d(" + staticProps + ",[" + (dynamicProps.slice(0, -1)) + "])") 39829 } else { 39830 return staticProps 39831 } 39832} 39833 39834// #3895, #4268 39835function transformSpecialNewlines (text) { 39836 return text 39837 .replace(/\u2028/g, '\\u2028') 39838 .replace(/\u2029/g, '\\u2029') 39839} 39840 39841/* */ 39842 39843 39844 39845// these keywords should not appear inside expressions, but operators like 39846// typeof, instanceof and in are allowed 39847var prohibitedKeywordRE = new RegExp('\\b' + ( 39848 'do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' + 39849 'super,throw,while,yield,delete,export,import,return,switch,default,' + 39850 'extends,finally,continue,debugger,function,arguments' 39851).split(',').join('\\b|\\b') + '\\b'); 39852 39853// these unary operators should not be used as property/method names 39854var unaryOperatorsRE = new RegExp('\\b' + ( 39855 'delete,typeof,void' 39856).split(',').join('\\s*\\([^\\)]*\\)|\\b') + '\\s*\\([^\\)]*\\)'); 39857 39858// strip strings in expressions 39859var stripStringRE = /'(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*"|`(?:[^`\\]|\\.)*\$\{|\}(?:[^`\\]|\\.)*`|`(?:[^`\\]|\\.)*`/g; 39860 39861// detect problematic expressions in a template 39862function detectErrors (ast, warn) { 39863 if (ast) { 39864 checkNode(ast, warn); 39865 } 39866} 39867 39868function checkNode (node, warn) { 39869 if (node.type === 1) { 39870 for (var name in node.attrsMap) { 39871 if (dirRE.test(name)) { 39872 var value = node.attrsMap[name]; 39873 if (value) { 39874 var range = node.rawAttrsMap[name]; 39875 if (name === 'v-for') { 39876 checkFor(node, ("v-for=\"" + value + "\""), warn, range); 39877 } else if (name === 'v-slot' || name[0] === '#') { 39878 checkFunctionParameterExpression(value, (name + "=\"" + value + "\""), warn, range); 39879 } else if (onRE.test(name)) { 39880 checkEvent(value, (name + "=\"" + value + "\""), warn, range); 39881 } else { 39882 checkExpression(value, (name + "=\"" + value + "\""), warn, range); 39883 } 39884 } 39885 } 39886 } 39887 if (node.children) { 39888 for (var i = 0; i < node.children.length; i++) { 39889 checkNode(node.children[i], warn); 39890 } 39891 } 39892 } else if (node.type === 2) { 39893 checkExpression(node.expression, node.text, warn, node); 39894 } 39895} 39896 39897function checkEvent (exp, text, warn, range) { 39898 var stripped = exp.replace(stripStringRE, ''); 39899 var keywordMatch = stripped.match(unaryOperatorsRE); 39900 if (keywordMatch && stripped.charAt(keywordMatch.index - 1) !== '$') { 39901 warn( 39902 "avoid using JavaScript unary operator as property name: " + 39903 "\"" + (keywordMatch[0]) + "\" in expression " + (text.trim()), 39904 range 39905 ); 39906 } 39907 checkExpression(exp, text, warn, range); 39908} 39909 39910function checkFor (node, text, warn, range) { 39911 checkExpression(node.for || '', text, warn, range); 39912 checkIdentifier(node.alias, 'v-for alias', text, warn, range); 39913 checkIdentifier(node.iterator1, 'v-for iterator', text, warn, range); 39914 checkIdentifier(node.iterator2, 'v-for iterator', text, warn, range); 39915} 39916 39917function checkIdentifier ( 39918 ident, 39919 type, 39920 text, 39921 warn, 39922 range 39923) { 39924 if (typeof ident === 'string') { 39925 try { 39926 new Function(("var " + ident + "=_")); 39927 } catch (e) { 39928 warn(("invalid " + type + " \"" + ident + "\" in expression: " + (text.trim())), range); 39929 } 39930 } 39931} 39932 39933function checkExpression (exp, text, warn, range) { 39934 try { 39935 new Function(("return " + exp)); 39936 } catch (e) { 39937 var keywordMatch = exp.replace(stripStringRE, '').match(prohibitedKeywordRE); 39938 if (keywordMatch) { 39939 warn( 39940 "avoid using JavaScript keyword as property name: " + 39941 "\"" + (keywordMatch[0]) + "\"\n Raw expression: " + (text.trim()), 39942 range 39943 ); 39944 } else { 39945 warn( 39946 "invalid expression: " + (e.message) + " in\n\n" + 39947 " " + exp + "\n\n" + 39948 " Raw expression: " + (text.trim()) + "\n", 39949 range 39950 ); 39951 } 39952 } 39953} 39954 39955function checkFunctionParameterExpression (exp, text, warn, range) { 39956 try { 39957 new Function(exp, ''); 39958 } catch (e) { 39959 warn( 39960 "invalid function parameter expression: " + (e.message) + " in\n\n" + 39961 " " + exp + "\n\n" + 39962 " Raw expression: " + (text.trim()) + "\n", 39963 range 39964 ); 39965 } 39966} 39967 39968/* */ 39969 39970var range = 2; 39971 39972function generateCodeFrame ( 39973 source, 39974 start, 39975 end 39976) { 39977 if ( start === void 0 ) start = 0; 39978 if ( end === void 0 ) end = source.length; 39979 39980 var lines = source.split(/\r?\n/); 39981 var count = 0; 39982 var res = []; 39983 for (var i = 0; i < lines.length; i++) { 39984 count += lines[i].length + 1; 39985 if (count >= start) { 39986 for (var j = i - range; j <= i + range || end > count; j++) { 39987 if (j < 0 || j >= lines.length) { continue } 39988 res.push(("" + (j + 1) + (repeat$1(" ", 3 - String(j + 1).length)) + "| " + (lines[j]))); 39989 var lineLength = lines[j].length; 39990 if (j === i) { 39991 // push underline 39992 var pad = start - (count - lineLength) + 1; 39993 var length = end > count ? lineLength - pad : end - start; 39994 res.push(" | " + repeat$1(" ", pad) + repeat$1("^", length)); 39995 } else if (j > i) { 39996 if (end > count) { 39997 var length$1 = Math.min(end - count, lineLength); 39998 res.push(" | " + repeat$1("^", length$1)); 39999 } 40000 count += lineLength + 1; 40001 } 40002 } 40003 break 40004 } 40005 } 40006 return res.join('\n') 40007} 40008 40009function repeat$1 (str, n) { 40010 var result = ''; 40011 if (n > 0) { 40012 while (true) { // eslint-disable-line 40013 if (n & 1) { result += str; } 40014 n >>>= 1; 40015 if (n <= 0) { break } 40016 str += str; 40017 } 40018 } 40019 return result 40020} 40021 40022/* */ 40023 40024 40025 40026function createFunction (code, errors) { 40027 try { 40028 return new Function(code) 40029 } catch (err) { 40030 errors.push({ err: err, code: code }); 40031 return noop 40032 } 40033} 40034 40035function createCompileToFunctionFn (compile) { 40036 var cache = Object.create(null); 40037 40038 return function compileToFunctions ( 40039 template, 40040 options, 40041 vm 40042 ) { 40043 options = extend({}, options); 40044 var warn$$1 = options.warn || warn; 40045 delete options.warn; 40046 40047 /* istanbul ignore if */ 40048 if (true) { 40049 // detect possible CSP restriction 40050 try { 40051 new Function('return 1'); 40052 } catch (e) { 40053 if (e.toString().match(/unsafe-eval|CSP/)) { 40054 warn$$1( 40055 'It seems you are using the standalone build of Vue.js in an ' + 40056 'environment with Content Security Policy that prohibits unsafe-eval. ' + 40057 'The template compiler cannot work in this environment. Consider ' + 40058 'relaxing the policy to allow unsafe-eval or pre-compiling your ' + 40059 'templates into render functions.' 40060 ); 40061 } 40062 } 40063 } 40064 40065 // check cache 40066 var key = options.delimiters 40067 ? String(options.delimiters) + template 40068 : template; 40069 if (cache[key]) { 40070 return cache[key] 40071 } 40072 40073 // compile 40074 var compiled = compile(template, options); 40075 40076 // check compilation errors/tips 40077 if (true) { 40078 if (compiled.errors && compiled.errors.length) { 40079 if (options.outputSourceRange) { 40080 compiled.errors.forEach(function (e) { 40081 warn$$1( 40082 "Error compiling template:\n\n" + (e.msg) + "\n\n" + 40083 generateCodeFrame(template, e.start, e.end), 40084 vm 40085 ); 40086 }); 40087 } else { 40088 warn$$1( 40089 "Error compiling template:\n\n" + template + "\n\n" + 40090 compiled.errors.map(function (e) { return ("- " + e); }).join('\n') + '\n', 40091 vm 40092 ); 40093 } 40094 } 40095 if (compiled.tips && compiled.tips.length) { 40096 if (options.outputSourceRange) { 40097 compiled.tips.forEach(function (e) { return tip(e.msg, vm); }); 40098 } else { 40099 compiled.tips.forEach(function (msg) { return tip(msg, vm); }); 40100 } 40101 } 40102 } 40103 40104 // turn code into functions 40105 var res = {}; 40106 var fnGenErrors = []; 40107 res.render = createFunction(compiled.render, fnGenErrors); 40108 res.staticRenderFns = compiled.staticRenderFns.map(function (code) { 40109 return createFunction(code, fnGenErrors) 40110 }); 40111 40112 // check function generation errors. 40113 // this should only happen if there is a bug in the compiler itself. 40114 // mostly for codegen development use 40115 /* istanbul ignore if */ 40116 if (true) { 40117 if ((!compiled.errors || !compiled.errors.length) && fnGenErrors.length) { 40118 warn$$1( 40119 "Failed to generate render function:\n\n" + 40120 fnGenErrors.map(function (ref) { 40121 var err = ref.err; 40122 var code = ref.code; 40123 40124 return ((err.toString()) + " in\n\n" + code + "\n"); 40125 }).join('\n'), 40126 vm 40127 ); 40128 } 40129 } 40130 40131 return (cache[key] = res) 40132 } 40133} 40134 40135/* */ 40136 40137function createCompilerCreator (baseCompile) { 40138 return function createCompiler (baseOptions) { 40139 function compile ( 40140 template, 40141 options 40142 ) { 40143 var finalOptions = Object.create(baseOptions); 40144 var errors = []; 40145 var tips = []; 40146 40147 var warn = function (msg, range, tip) { 40148 (tip ? tips : errors).push(msg); 40149 }; 40150 40151 if (options) { 40152 if ( true && options.outputSourceRange) { 40153 // $flow-disable-line 40154 var leadingSpaceLength = template.match(/^\s*/)[0].length; 40155 40156 warn = function (msg, range, tip) { 40157 var data = { msg: msg }; 40158 if (range) { 40159 if (range.start != null) { 40160 data.start = range.start + leadingSpaceLength; 40161 } 40162 if (range.end != null) { 40163 data.end = range.end + leadingSpaceLength; 40164 } 40165 } 40166 (tip ? tips : errors).push(data); 40167 }; 40168 } 40169 // merge custom modules 40170 if (options.modules) { 40171 finalOptions.modules = 40172 (baseOptions.modules || []).concat(options.modules); 40173 } 40174 // merge custom directives 40175 if (options.directives) { 40176 finalOptions.directives = extend( 40177 Object.create(baseOptions.directives || null), 40178 options.directives 40179 ); 40180 } 40181 // copy other options 40182 for (var key in options) { 40183 if (key !== 'modules' && key !== 'directives') { 40184 finalOptions[key] = options[key]; 40185 } 40186 } 40187 } 40188 40189 finalOptions.warn = warn; 40190 40191 var compiled = baseCompile(template.trim(), finalOptions); 40192 if (true) { 40193 detectErrors(compiled.ast, warn); 40194 } 40195 compiled.errors = errors; 40196 compiled.tips = tips; 40197 return compiled 40198 } 40199 40200 return { 40201 compile: compile, 40202 compileToFunctions: createCompileToFunctionFn(compile) 40203 } 40204 } 40205} 40206 40207/* */ 40208 40209// `createCompilerCreator` allows creating compilers that use alternative 40210// parser/optimizer/codegen, e.g the SSR optimizing compiler. 40211// Here we just export a default compiler using the default parts. 40212var createCompiler = createCompilerCreator(function baseCompile ( 40213 template, 40214 options 40215) { 40216 var ast = parse(template.trim(), options); 40217 if (options.optimize !== false) { 40218 optimize(ast, options); 40219 } 40220 var code = generate(ast, options); 40221 return { 40222 ast: ast, 40223 render: code.render, 40224 staticRenderFns: code.staticRenderFns 40225 } 40226}); 40227 40228/* */ 40229 40230var ref$1 = createCompiler(baseOptions); 40231var compile = ref$1.compile; 40232var compileToFunctions = ref$1.compileToFunctions; 40233 40234/* */ 40235 40236// check whether current browser encodes a char inside attribute values 40237var div; 40238function getShouldDecode (href) { 40239 div = div || document.createElement('div'); 40240 div.innerHTML = href ? "<a href=\"\n\"/>" : "<div a=\"\n\"/>"; 40241 return div.innerHTML.indexOf(' ') > 0 40242} 40243 40244// #3663: IE encodes newlines inside attribute values while other browsers don't 40245var shouldDecodeNewlines = inBrowser ? getShouldDecode(false) : false; 40246// #6828: chrome encodes content in a[href] 40247var shouldDecodeNewlinesForHref = inBrowser ? getShouldDecode(true) : false; 40248 40249/* */ 40250 40251var idToTemplate = cached(function (id) { 40252 var el = query(id); 40253 return el && el.innerHTML 40254}); 40255 40256var mount = Vue.prototype.$mount; 40257Vue.prototype.$mount = function ( 40258 el, 40259 hydrating 40260) { 40261 el = el && query(el); 40262 40263 /* istanbul ignore if */ 40264 if (el === document.body || el === document.documentElement) { 40265 true && warn( 40266 "Do not mount Vue to <html> or <body> - mount to normal elements instead." 40267 ); 40268 return this 40269 } 40270 40271 var options = this.$options; 40272 // resolve template/el and convert to render function 40273 if (!options.render) { 40274 var template = options.template; 40275 if (template) { 40276 if (typeof template === 'string') { 40277 if (template.charAt(0) === '#') { 40278 template = idToTemplate(template); 40279 /* istanbul ignore if */ 40280 if ( true && !template) { 40281 warn( 40282 ("Template element not found or is empty: " + (options.template)), 40283 this 40284 ); 40285 } 40286 } 40287 } else if (template.nodeType) { 40288 template = template.innerHTML; 40289 } else { 40290 if (true) { 40291 warn('invalid template option:' + template, this); 40292 } 40293 return this 40294 } 40295 } else if (el) { 40296 template = getOuterHTML(el); 40297 } 40298 if (template) { 40299 /* istanbul ignore if */ 40300 if ( true && config.performance && mark) { 40301 mark('compile'); 40302 } 40303 40304 var ref = compileToFunctions(template, { 40305 outputSourceRange: "development" !== 'production', 40306 shouldDecodeNewlines: shouldDecodeNewlines, 40307 shouldDecodeNewlinesForHref: shouldDecodeNewlinesForHref, 40308 delimiters: options.delimiters, 40309 comments: options.comments 40310 }, this); 40311 var render = ref.render; 40312 var staticRenderFns = ref.staticRenderFns; 40313 options.render = render; 40314 options.staticRenderFns = staticRenderFns; 40315 40316 /* istanbul ignore if */ 40317 if ( true && config.performance && mark) { 40318 mark('compile end'); 40319 measure(("vue " + (this._name) + " compile"), 'compile', 'compile end'); 40320 } 40321 } 40322 } 40323 return mount.call(this, el, hydrating) 40324}; 40325 40326/** 40327 * Get outerHTML of elements, taking care 40328 * of SVG elements in IE as well. 40329 */ 40330function getOuterHTML (el) { 40331 if (el.outerHTML) { 40332 return el.outerHTML 40333 } else { 40334 var container = document.createElement('div'); 40335 container.appendChild(el.cloneNode(true)); 40336 return container.innerHTML 40337 } 40338} 40339 40340Vue.compile = compileToFunctions; 40341 40342/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Vue); 40343 40344 40345/***/ })
vendor: 7,229 bytes, lines 40345-40526
40345 40346 40347/******/ }); 40348/************************************************************************/ 40349/******/ // The module cache 40350/******/ var __webpack_module_cache__ = {}; 40351/******/ 40352/******/ // The require function 40353/******/ function __webpack_require__(moduleId) { 40354/******/ // Check if module is in cache 40355/******/ var cachedModule = __webpack_module_cache__[moduleId]; 40356/******/ if (cachedModule !== undefined) { 40357/******/ return cachedModule.exports; 40358/******/ } 40359/******/ // Create a new module (and put it into the cache) 40360/******/ var module = __webpack_module_cache__[moduleId] = { 40361/******/ id: moduleId, 40362/******/ loaded: false, 40363/******/ exports: {} 40364/******/ }; 40365/******/ 40366/******/ // Execute the module function 40367/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); 40368/******/ 40369/******/ // Flag the module as loaded 40370/******/ module.loaded = true; 40371/******/ 40372/******/ // Return the exports of the module 40373/******/ return module.exports; 40374/******/ } 40375/******/ 40376/******/ // expose the modules object (__webpack_modules__) 40377/******/ __webpack_require__.m = __webpack_modules__; 40378/******/ 40379/************************************************************************/ 40380/******/ /* webpack/runtime/chunk loaded */ 40381/******/ (() => { 40382/******/ var deferred = []; 40383/******/ __webpack_require__.O = (result, chunkIds, fn, priority) => { 40384/******/ if(chunkIds) { 40385/******/ priority = priority || 0; 40386/******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1]; 40387/******/ deferred[i] = [chunkIds, fn, priority]; 40388/******/ return; 40389/******/ } 40390/******/ var notFulfilled = Infinity; 40391/******/ for (var i = 0; i < deferred.length; i++) { 40392/******/ var [chunkIds, fn, priority] = deferred[i]; 40393/******/ var fulfilled = true; 40394/******/ for (var j = 0; j < chunkIds.length; j++) { 40395/******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) { 40396/******/ chunkIds.splice(j--, 1); 40397/******/ } else { 40398/******/ fulfilled = false; 40399/******/ if(priority < notFulfilled) notFulfilled = priority; 40400/******/ } 40401/******/ } 40402/******/ if(fulfilled) { 40403/******/ deferred.splice(i--, 1) 40404/******/ var r = fn(); 40405/******/ if (r !== undefined) result = r; 40406/******/ } 40407/******/ } 40408/******/ return result; 40409/******/ }; 40410/******/ })(); 40411/******/ 40412/******/ /* webpack/runtime/define property getters */ 40413/******/ (() => { 40414/******/ // define getter functions for harmony exports 40415/******/ __webpack_require__.d = (exports, definition) => { 40416/******/ for(var key in definition) { 40417/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { 40418/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); 40419/******/ } 40420/******/ } 40421/******/ }; 40422/******/ })(); 40423/******/ 40424/******/ /* webpack/runtime/global */ 40425/******/ (() => { 40426/******/ __webpack_require__.g = (function() { 40427/******/ if (typeof globalThis === 'object') return globalThis; 40428/******/ try { 40429/******/ return this || new Function('return this')(); 40430/******/ } catch (e) { 40431/******/ if (typeof window === 'object') return window; 40432/******/ } 40433/******/ })(); 40434/******/ })(); 40435/******/ 40436/******/ /* webpack/runtime/hasOwnProperty shorthand */ 40437/******/ (() => { 40438/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) 40439/******/ })(); 40440/******/ 40441/******/ /* webpack/runtime/make namespace object */ 40442/******/ (() => { 40443/******/ // define __esModule on exports 40444/******/ __webpack_require__.r = (exports) => { 40445/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { 40446/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); 40447/******/ } 40448/******/ Object.defineProperty(exports, '__esModule', { value: true }); 40449/******/ }; 40450/******/ })(); 40451/******/ 40452/******/ /* webpack/runtime/node module decorator */ 40453/******/ (() => { 40454/******/ __webpack_require__.nmd = (module) => { 40455/******/ module.paths = []; 40456/******/ if (!module.children) module.children = []; 40457/******/ return module; 40458/******/ }; 40459/******/ })(); 40460/******/ 40461/******/ /* webpack/runtime/jsonp chunk loading */ 40462/******/ (() => { 40463/******/ // no baseURI 40464/******/ 40465/******/ // object to store loaded and loading chunks 40466/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched 40467/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded 40468/******/ var installedChunks = { 40469/******/ "/js/app": 0, 40470/******/ "css/app": 0 40471/******/ }; 40472/******/ 40473/******/ // no chunk on demand loading 40474/******/ 40475/******/ // no prefetching 40476/******/ 40477/******/ // no preloaded 40478/******/ 40479/******/ // no HMR 40480/******/ 40481/******/ // no HMR manifest 40482/******/ 40483/******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0); 40484/******/ 40485/******/ // install a JSONP callback for chunk loading 40486/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { 40487/******/ var [chunkIds, moreModules, runtime] = data; 40488/******/ // add "moreModules" to the modules object, 40489/******/ // then flag all "chunkIds" as loaded and fire callback 40490/******/ var moduleId, chunkId, i = 0; 40491/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { 40492/******/ for(moduleId in moreModules) { 40493/******/ if(__webpack_require__.o(moreModules, moduleId)) { 40494/******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; 40495/******/ } 40496/******/ } 40497/******/ if(runtime) var result = runtime(__webpack_require__); 40498/******/ } 40499/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); 40500/******/ for(;i < chunkIds.length; i++) { 40501/******/ chunkId = chunkIds[i]; 40502/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { 40503/******/ installedChunks[chunkId][0](); 40504/******/ } 40505/******/ installedChunks[chunkId] = 0; 40506/******/ } 40507/******/ return __webpack_require__.O(result); 40508/******/ } 40509/******/ 40510/******/ var chunkLoadingGlobal = self["webpackChunk"] = self["webpackChunk"] || []; 40511/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); 40512/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); 40513/******/ })(); 40514/******/ 40515/************************************************************************/ 40516/******/ 40517/******/ // startup 40518/******/ // Load entry module and return exports 40519/******/ // This entry module depends on other loaded chunks and execution need to be delayed 40520/******/ __webpack_require__.O(undefined, ["css/app"], () => (__webpack_require__("./resources/js/app.js"))) 40521/******/ __webpack_require__.O(undefined, ["css/app"], () => (__webpack_require__("./resources/sass/app.scss"))) 40522/******/ var __webpack_exports__ = __webpack_require__.O(undefined, ["css/app"], () => (__webpack_require__("./resources/css/app.css"))) 40523/******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__); 40524/******/ 40525/******/ })() 40526;
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.