diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..6d5fe47 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,24 @@ + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/add.py b/add.py new file mode 100644 index 0000000..72a34cc --- /dev/null +++ b/add.py @@ -0,0 +1,21 @@ +import json +import time + +import httpx + + + + + + + + + + + + + + + + + diff --git a/html/fi.html b/html/fi.html new file mode 100644 index 0000000..bc965d0 --- /dev/null +++ b/html/fi.html @@ -0,0 +1,10 @@ + + + + + Title + + + + + \ No newline at end of file diff --git a/html/fi.vue b/html/fi.vue new file mode 100644 index 0000000..2a15618 --- /dev/null +++ b/html/fi.vue @@ -0,0 +1,119 @@ + + + + + Title + + + + + + +
+ +
代理 +
+
数据库 + + 验证 +无验证
+ +
cookie +
+ +
线程设置 +
+ + + + + + + + 提交数据 + + + + + + + + + + + +
+ + + + + + + \ No newline at end of file diff --git a/js_css/axios.js b/js_css/axios.js new file mode 100644 index 0000000..7c0b76b --- /dev/null +++ b/js_css/axios.js @@ -0,0 +1,2595 @@ +/* axios v0.27.2 | (c) 2022 by Matt Zabriskie */ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else if(typeof exports === 'object') + exports["axios"] = factory(); + else + root["axios"] = factory(); +})(this, function() { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = "./index.js"); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ "./index.js": +/*!******************!*\ + !*** ./index.js ***! + \******************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(/*! ./lib/axios */ "./lib/axios.js"); + +/***/ }), + +/***/ "./lib/adapters/xhr.js": +/*!*****************************!*\ + !*** ./lib/adapters/xhr.js ***! + \*****************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var utils = __webpack_require__(/*! ./../utils */ "./lib/utils.js"); +var settle = __webpack_require__(/*! ./../core/settle */ "./lib/core/settle.js"); +var cookies = __webpack_require__(/*! ./../helpers/cookies */ "./lib/helpers/cookies.js"); +var buildURL = __webpack_require__(/*! ./../helpers/buildURL */ "./lib/helpers/buildURL.js"); +var buildFullPath = __webpack_require__(/*! ../core/buildFullPath */ "./lib/core/buildFullPath.js"); +var parseHeaders = __webpack_require__(/*! ./../helpers/parseHeaders */ "./lib/helpers/parseHeaders.js"); +var isURLSameOrigin = __webpack_require__(/*! ./../helpers/isURLSameOrigin */ "./lib/helpers/isURLSameOrigin.js"); +var transitionalDefaults = __webpack_require__(/*! ../defaults/transitional */ "./lib/defaults/transitional.js"); +var AxiosError = __webpack_require__(/*! ../core/AxiosError */ "./lib/core/AxiosError.js"); +var CanceledError = __webpack_require__(/*! ../cancel/CanceledError */ "./lib/cancel/CanceledError.js"); +var parseProtocol = __webpack_require__(/*! ../helpers/parseProtocol */ "./lib/helpers/parseProtocol.js"); + +module.exports = function xhrAdapter(config) { + return new Promise(function dispatchXhrRequest(resolve, reject) { + var requestData = config.data; + var requestHeaders = config.headers; + var responseType = config.responseType; + var onCanceled; + function done() { + if (config.cancelToken) { + config.cancelToken.unsubscribe(onCanceled); + } + + if (config.signal) { + config.signal.removeEventListener('abort', onCanceled); + } + } + + if (utils.isFormData(requestData) && utils.isStandardBrowserEnv()) { + delete requestHeaders['Content-Type']; // Let the browser set it + } + + var request = new XMLHttpRequest(); + + // HTTP basic authentication + if (config.auth) { + var username = config.auth.username || ''; + var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : ''; + requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password); + } + + var fullPath = buildFullPath(config.baseURL, config.url); + + request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true); + + // Set the request timeout in MS + request.timeout = config.timeout; + + function onloadend() { + if (!request) { + return; + } + // Prepare the response + var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null; + var responseData = !responseType || responseType === 'text' || responseType === 'json' ? + request.responseText : request.response; + var response = { + data: responseData, + status: request.status, + statusText: request.statusText, + headers: responseHeaders, + config: config, + request: request + }; + + settle(function _resolve(value) { + resolve(value); + done(); + }, function _reject(err) { + reject(err); + done(); + }, response); + + // Clean up request + request = null; + } + + if ('onloadend' in request) { + // Use onloadend if available + request.onloadend = onloadend; + } else { + // Listen for ready state to emulate onloadend + request.onreadystatechange = function handleLoad() { + if (!request || request.readyState !== 4) { + return; + } + + // The request errored out and we didn't get a response, this will be + // handled by onerror instead + // With one exception: request that using file: protocol, most browsers + // will return status as 0 even though it's a successful request + if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) { + return; + } + // readystate handler is calling before onerror or ontimeout handlers, + // so we should call onloadend on the next 'tick' + setTimeout(onloadend); + }; + } + + // Handle browser request cancellation (as opposed to a manual cancellation) + request.onabort = function handleAbort() { + if (!request) { + return; + } + + reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request)); + + // Clean up request + request = null; + }; + + // Handle low level network errors + request.onerror = function handleError() { + // Real errors are hidden from us by the browser + // onerror should only fire if it's a network error + reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request, request)); + + // Clean up request + request = null; + }; + + // Handle timeout + request.ontimeout = function handleTimeout() { + var timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded'; + var transitional = config.transitional || transitionalDefaults; + if (config.timeoutErrorMessage) { + timeoutErrorMessage = config.timeoutErrorMessage; + } + reject(new AxiosError( + timeoutErrorMessage, + transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED, + config, + request)); + + // Clean up request + request = null; + }; + + // Add xsrf header + // This is only done if running in a standard browser environment. + // Specifically not if we're in a web worker, or react-native. + if (utils.isStandardBrowserEnv()) { + // Add xsrf header + var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ? + cookies.read(config.xsrfCookieName) : + undefined; + + if (xsrfValue) { + requestHeaders[config.xsrfHeaderName] = xsrfValue; + } + } + + // Add headers to the request + if ('setRequestHeader' in request) { + utils.forEach(requestHeaders, function setRequestHeader(val, key) { + if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') { + // Remove Content-Type if data is undefined + delete requestHeaders[key]; + } else { + // Otherwise add header to the request + request.setRequestHeader(key, val); + } + }); + } + + // Add withCredentials to request if needed + if (!utils.isUndefined(config.withCredentials)) { + request.withCredentials = !!config.withCredentials; + } + + // Add responseType to request if needed + if (responseType && responseType !== 'json') { + request.responseType = config.responseType; + } + + // Handle progress if needed + if (typeof config.onDownloadProgress === 'function') { + request.addEventListener('progress', config.onDownloadProgress); + } + + // Not all browsers support upload events + if (typeof config.onUploadProgress === 'function' && request.upload) { + request.upload.addEventListener('progress', config.onUploadProgress); + } + + if (config.cancelToken || config.signal) { + // Handle cancellation + // eslint-disable-next-line func-names + onCanceled = function(cancel) { + if (!request) { + return; + } + reject(!cancel || (cancel && cancel.type) ? new CanceledError() : cancel); + request.abort(); + request = null; + }; + + config.cancelToken && config.cancelToken.subscribe(onCanceled); + if (config.signal) { + config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled); + } + } + + if (!requestData) { + requestData = null; + } + + var protocol = parseProtocol(fullPath); + + if (protocol && [ 'http', 'https', 'file' ].indexOf(protocol) === -1) { + reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config)); + return; + } + + + // Send the request + request.send(requestData); + }); +}; + + +/***/ }), + +/***/ "./lib/axios.js": +/*!**********************!*\ + !*** ./lib/axios.js ***! + \**********************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var utils = __webpack_require__(/*! ./utils */ "./lib/utils.js"); +var bind = __webpack_require__(/*! ./helpers/bind */ "./lib/helpers/bind.js"); +var Axios = __webpack_require__(/*! ./core/Axios */ "./lib/core/Axios.js"); +var mergeConfig = __webpack_require__(/*! ./core/mergeConfig */ "./lib/core/mergeConfig.js"); +var defaults = __webpack_require__(/*! ./defaults */ "./lib/defaults/index.js"); + +/** + * Create an instance of Axios + * + * @param {Object} defaultConfig The default config for the instance + * @return {Axios} A new instance of Axios + */ +function createInstance(defaultConfig) { + var context = new Axios(defaultConfig); + var instance = bind(Axios.prototype.request, context); + + // Copy axios.prototype to instance + utils.extend(instance, Axios.prototype, context); + + // Copy context to instance + utils.extend(instance, context); + + // Factory for creating new instances + instance.create = function create(instanceConfig) { + return createInstance(mergeConfig(defaultConfig, instanceConfig)); + }; + + return instance; +} + +// Create the default instance to be exported +var axios = createInstance(defaults); + +// Expose Axios class to allow class inheritance +axios.Axios = Axios; + +// Expose Cancel & CancelToken +axios.CanceledError = __webpack_require__(/*! ./cancel/CanceledError */ "./lib/cancel/CanceledError.js"); +axios.CancelToken = __webpack_require__(/*! ./cancel/CancelToken */ "./lib/cancel/CancelToken.js"); +axios.isCancel = __webpack_require__(/*! ./cancel/isCancel */ "./lib/cancel/isCancel.js"); +axios.VERSION = __webpack_require__(/*! ./env/data */ "./lib/env/data.js").version; +axios.toFormData = __webpack_require__(/*! ./helpers/toFormData */ "./lib/helpers/toFormData.js"); + +// Expose AxiosError class +axios.AxiosError = __webpack_require__(/*! ../lib/core/AxiosError */ "./lib/core/AxiosError.js"); + +// alias for CanceledError for backward compatibility +axios.Cancel = axios.CanceledError; + +// Expose all/spread +axios.all = function all(promises) { + return Promise.all(promises); +}; +axios.spread = __webpack_require__(/*! ./helpers/spread */ "./lib/helpers/spread.js"); + +// Expose isAxiosError +axios.isAxiosError = __webpack_require__(/*! ./helpers/isAxiosError */ "./lib/helpers/isAxiosError.js"); + +module.exports = axios; + +// Allow use of default import syntax in TypeScript +module.exports.default = axios; + + +/***/ }), + +/***/ "./lib/cancel/CancelToken.js": +/*!***********************************!*\ + !*** ./lib/cancel/CancelToken.js ***! + \***********************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var CanceledError = __webpack_require__(/*! ./CanceledError */ "./lib/cancel/CanceledError.js"); + +/** + * A `CancelToken` is an object that can be used to request cancellation of an operation. + * + * @class + * @param {Function} executor The executor function. + */ +function CancelToken(executor) { + if (typeof executor !== 'function') { + throw new TypeError('executor must be a function.'); + } + + var resolvePromise; + + this.promise = new Promise(function promiseExecutor(resolve) { + resolvePromise = resolve; + }); + + var token = this; + + // eslint-disable-next-line func-names + this.promise.then(function(cancel) { + if (!token._listeners) return; + + var i; + var l = token._listeners.length; + + for (i = 0; i < l; i++) { + token._listeners[i](cancel); + } + token._listeners = null; + }); + + // eslint-disable-next-line func-names + this.promise.then = function(onfulfilled) { + var _resolve; + // eslint-disable-next-line func-names + var promise = new Promise(function(resolve) { + token.subscribe(resolve); + _resolve = resolve; + }).then(onfulfilled); + + promise.cancel = function reject() { + token.unsubscribe(_resolve); + }; + + return promise; + }; + + executor(function cancel(message) { + if (token.reason) { + // Cancellation has already been requested + return; + } + + token.reason = new CanceledError(message); + resolvePromise(token.reason); + }); +} + +/** + * Throws a `CanceledError` if cancellation has been requested. + */ +CancelToken.prototype.throwIfRequested = function throwIfRequested() { + if (this.reason) { + throw this.reason; + } +}; + +/** + * Subscribe to the cancel signal + */ + +CancelToken.prototype.subscribe = function subscribe(listener) { + if (this.reason) { + listener(this.reason); + return; + } + + if (this._listeners) { + this._listeners.push(listener); + } else { + this._listeners = [listener]; + } +}; + +/** + * Unsubscribe from the cancel signal + */ + +CancelToken.prototype.unsubscribe = function unsubscribe(listener) { + if (!this._listeners) { + return; + } + var index = this._listeners.indexOf(listener); + if (index !== -1) { + this._listeners.splice(index, 1); + } +}; + +/** + * Returns an object that contains a new `CancelToken` and a function that, when called, + * cancels the `CancelToken`. + */ +CancelToken.source = function source() { + var cancel; + var token = new CancelToken(function executor(c) { + cancel = c; + }); + return { + token: token, + cancel: cancel + }; +}; + +module.exports = CancelToken; + + +/***/ }), + +/***/ "./lib/cancel/CanceledError.js": +/*!*************************************!*\ + !*** ./lib/cancel/CanceledError.js ***! + \*************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var AxiosError = __webpack_require__(/*! ../core/AxiosError */ "./lib/core/AxiosError.js"); +var utils = __webpack_require__(/*! ../utils */ "./lib/utils.js"); + +/** + * A `CanceledError` is an object that is thrown when an operation is canceled. + * + * @class + * @param {string=} message The message. + */ +function CanceledError(message) { + // eslint-disable-next-line no-eq-null,eqeqeq + AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED); + this.name = 'CanceledError'; +} + +utils.inherits(CanceledError, AxiosError, { + __CANCEL__: true +}); + +module.exports = CanceledError; + + +/***/ }), + +/***/ "./lib/cancel/isCancel.js": +/*!********************************!*\ + !*** ./lib/cancel/isCancel.js ***! + \********************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = function isCancel(value) { + return !!(value && value.__CANCEL__); +}; + + +/***/ }), + +/***/ "./lib/core/Axios.js": +/*!***************************!*\ + !*** ./lib/core/Axios.js ***! + \***************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var utils = __webpack_require__(/*! ./../utils */ "./lib/utils.js"); +var buildURL = __webpack_require__(/*! ../helpers/buildURL */ "./lib/helpers/buildURL.js"); +var InterceptorManager = __webpack_require__(/*! ./InterceptorManager */ "./lib/core/InterceptorManager.js"); +var dispatchRequest = __webpack_require__(/*! ./dispatchRequest */ "./lib/core/dispatchRequest.js"); +var mergeConfig = __webpack_require__(/*! ./mergeConfig */ "./lib/core/mergeConfig.js"); +var buildFullPath = __webpack_require__(/*! ./buildFullPath */ "./lib/core/buildFullPath.js"); +var validator = __webpack_require__(/*! ../helpers/validator */ "./lib/helpers/validator.js"); + +var validators = validator.validators; +/** + * Create a new instance of Axios + * + * @param {Object} instanceConfig The default config for the instance + */ +function Axios(instanceConfig) { + this.defaults = instanceConfig; + this.interceptors = { + request: new InterceptorManager(), + response: new InterceptorManager() + }; +} + +/** + * Dispatch a request + * + * @param {Object} config The config specific for this request (merged with this.defaults) + */ +Axios.prototype.request = function request(configOrUrl, config) { + /*eslint no-param-reassign:0*/ + // Allow for axios('example/url'[, config]) a la fetch API + if (typeof configOrUrl === 'string') { + config = config || {}; + config.url = configOrUrl; + } else { + config = configOrUrl || {}; + } + + config = mergeConfig(this.defaults, config); + + // Set config.method + if (config.method) { + config.method = config.method.toLowerCase(); + } else if (this.defaults.method) { + config.method = this.defaults.method.toLowerCase(); + } else { + config.method = 'get'; + } + + var transitional = config.transitional; + + if (transitional !== undefined) { + validator.assertOptions(transitional, { + silentJSONParsing: validators.transitional(validators.boolean), + forcedJSONParsing: validators.transitional(validators.boolean), + clarifyTimeoutError: validators.transitional(validators.boolean) + }, false); + } + + // filter out skipped interceptors + var requestInterceptorChain = []; + var synchronousRequestInterceptors = true; + this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) { + if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) { + return; + } + + synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous; + + requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected); + }); + + var responseInterceptorChain = []; + this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) { + responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected); + }); + + var promise; + + if (!synchronousRequestInterceptors) { + var chain = [dispatchRequest, undefined]; + + Array.prototype.unshift.apply(chain, requestInterceptorChain); + chain = chain.concat(responseInterceptorChain); + + promise = Promise.resolve(config); + while (chain.length) { + promise = promise.then(chain.shift(), chain.shift()); + } + + return promise; + } + + + var newConfig = config; + while (requestInterceptorChain.length) { + var onFulfilled = requestInterceptorChain.shift(); + var onRejected = requestInterceptorChain.shift(); + try { + newConfig = onFulfilled(newConfig); + } catch (error) { + onRejected(error); + break; + } + } + + try { + promise = dispatchRequest(newConfig); + } catch (error) { + return Promise.reject(error); + } + + while (responseInterceptorChain.length) { + promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift()); + } + + return promise; +}; + +Axios.prototype.getUri = function getUri(config) { + config = mergeConfig(this.defaults, config); + var fullPath = buildFullPath(config.baseURL, config.url); + return buildURL(fullPath, config.params, config.paramsSerializer); +}; + +// Provide aliases for supported request methods +utils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) { + /*eslint func-names:0*/ + Axios.prototype[method] = function(url, config) { + return this.request(mergeConfig(config || {}, { + method: method, + url: url, + data: (config || {}).data + })); + }; +}); + +utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { + /*eslint func-names:0*/ + + function generateHTTPMethod(isForm) { + return function httpMethod(url, data, config) { + return this.request(mergeConfig(config || {}, { + method: method, + headers: isForm ? { + 'Content-Type': 'multipart/form-data' + } : {}, + url: url, + data: data + })); + }; + } + + Axios.prototype[method] = generateHTTPMethod(); + + Axios.prototype[method + 'Form'] = generateHTTPMethod(true); +}); + +module.exports = Axios; + + +/***/ }), + +/***/ "./lib/core/AxiosError.js": +/*!********************************!*\ + !*** ./lib/core/AxiosError.js ***! + \********************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var utils = __webpack_require__(/*! ../utils */ "./lib/utils.js"); + +/** + * Create an Error with the specified message, config, error code, request and response. + * + * @param {string} message The error message. + * @param {string} [code] The error code (for example, 'ECONNABORTED'). + * @param {Object} [config] The config. + * @param {Object} [request] The request. + * @param {Object} [response] The response. + * @returns {Error} The created error. + */ +function AxiosError(message, code, config, request, response) { + Error.call(this); + this.message = message; + this.name = 'AxiosError'; + code && (this.code = code); + config && (this.config = config); + request && (this.request = request); + response && (this.response = response); +} + +utils.inherits(AxiosError, Error, { + toJSON: function toJSON() { + return { + // Standard + message: this.message, + name: this.name, + // Microsoft + description: this.description, + number: this.number, + // Mozilla + fileName: this.fileName, + lineNumber: this.lineNumber, + columnNumber: this.columnNumber, + stack: this.stack, + // Axios + config: this.config, + code: this.code, + status: this.response && this.response.status ? this.response.status : null + }; + } +}); + +var prototype = AxiosError.prototype; +var descriptors = {}; + +[ + 'ERR_BAD_OPTION_VALUE', + 'ERR_BAD_OPTION', + 'ECONNABORTED', + 'ETIMEDOUT', + 'ERR_NETWORK', + 'ERR_FR_TOO_MANY_REDIRECTS', + 'ERR_DEPRECATED', + 'ERR_BAD_RESPONSE', + 'ERR_BAD_REQUEST', + 'ERR_CANCELED' +// eslint-disable-next-line func-names +].forEach(function(code) { + descriptors[code] = {value: code}; +}); + +Object.defineProperties(AxiosError, descriptors); +Object.defineProperty(prototype, 'isAxiosError', {value: true}); + +// eslint-disable-next-line func-names +AxiosError.from = function(error, code, config, request, response, customProps) { + var axiosError = Object.create(prototype); + + utils.toFlatObject(error, axiosError, function filter(obj) { + return obj !== Error.prototype; + }); + + AxiosError.call(axiosError, error.message, code, config, request, response); + + axiosError.name = error.name; + + customProps && Object.assign(axiosError, customProps); + + return axiosError; +}; + +module.exports = AxiosError; + + +/***/ }), + +/***/ "./lib/core/InterceptorManager.js": +/*!****************************************!*\ + !*** ./lib/core/InterceptorManager.js ***! + \****************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var utils = __webpack_require__(/*! ./../utils */ "./lib/utils.js"); + +function InterceptorManager() { + this.handlers = []; +} + +/** + * Add a new interceptor to the stack + * + * @param {Function} fulfilled The function to handle `then` for a `Promise` + * @param {Function} rejected The function to handle `reject` for a `Promise` + * + * @return {Number} An ID used to remove interceptor later + */ +InterceptorManager.prototype.use = function use(fulfilled, rejected, options) { + this.handlers.push({ + fulfilled: fulfilled, + rejected: rejected, + synchronous: options ? options.synchronous : false, + runWhen: options ? options.runWhen : null + }); + return this.handlers.length - 1; +}; + +/** + * Remove an interceptor from the stack + * + * @param {Number} id The ID that was returned by `use` + */ +InterceptorManager.prototype.eject = function eject(id) { + if (this.handlers[id]) { + this.handlers[id] = null; + } +}; + +/** + * Iterate over all the registered interceptors + * + * This method is particularly useful for skipping over any + * interceptors that may have become `null` calling `eject`. + * + * @param {Function} fn The function to call for each interceptor + */ +InterceptorManager.prototype.forEach = function forEach(fn) { + utils.forEach(this.handlers, function forEachHandler(h) { + if (h !== null) { + fn(h); + } + }); +}; + +module.exports = InterceptorManager; + + +/***/ }), + +/***/ "./lib/core/buildFullPath.js": +/*!***********************************!*\ + !*** ./lib/core/buildFullPath.js ***! + \***********************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var isAbsoluteURL = __webpack_require__(/*! ../helpers/isAbsoluteURL */ "./lib/helpers/isAbsoluteURL.js"); +var combineURLs = __webpack_require__(/*! ../helpers/combineURLs */ "./lib/helpers/combineURLs.js"); + +/** + * Creates a new URL by combining the baseURL with the requestedURL, + * only when the requestedURL is not already an absolute URL. + * If the requestURL is absolute, this function returns the requestedURL untouched. + * + * @param {string} baseURL The base URL + * @param {string} requestedURL Absolute or relative URL to combine + * @returns {string} The combined full path + */ +module.exports = function buildFullPath(baseURL, requestedURL) { + if (baseURL && !isAbsoluteURL(requestedURL)) { + return combineURLs(baseURL, requestedURL); + } + return requestedURL; +}; + + +/***/ }), + +/***/ "./lib/core/dispatchRequest.js": +/*!*************************************!*\ + !*** ./lib/core/dispatchRequest.js ***! + \*************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var utils = __webpack_require__(/*! ./../utils */ "./lib/utils.js"); +var transformData = __webpack_require__(/*! ./transformData */ "./lib/core/transformData.js"); +var isCancel = __webpack_require__(/*! ../cancel/isCancel */ "./lib/cancel/isCancel.js"); +var defaults = __webpack_require__(/*! ../defaults */ "./lib/defaults/index.js"); +var CanceledError = __webpack_require__(/*! ../cancel/CanceledError */ "./lib/cancel/CanceledError.js"); + +/** + * Throws a `CanceledError` if cancellation has been requested. + */ +function throwIfCancellationRequested(config) { + if (config.cancelToken) { + config.cancelToken.throwIfRequested(); + } + + if (config.signal && config.signal.aborted) { + throw new CanceledError(); + } +} + +/** + * Dispatch a request to the server using the configured adapter. + * + * @param {object} config The config that is to be used for the request + * @returns {Promise} The Promise to be fulfilled + */ +module.exports = function dispatchRequest(config) { + throwIfCancellationRequested(config); + + // Ensure headers exist + config.headers = config.headers || {}; + + // Transform request data + config.data = transformData.call( + config, + config.data, + config.headers, + config.transformRequest + ); + + // Flatten headers + config.headers = utils.merge( + config.headers.common || {}, + config.headers[config.method] || {}, + config.headers + ); + + utils.forEach( + ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], + function cleanHeaderConfig(method) { + delete config.headers[method]; + } + ); + + var adapter = config.adapter || defaults.adapter; + + return adapter(config).then(function onAdapterResolution(response) { + throwIfCancellationRequested(config); + + // Transform response data + response.data = transformData.call( + config, + response.data, + response.headers, + config.transformResponse + ); + + return response; + }, function onAdapterRejection(reason) { + if (!isCancel(reason)) { + throwIfCancellationRequested(config); + + // Transform response data + if (reason && reason.response) { + reason.response.data = transformData.call( + config, + reason.response.data, + reason.response.headers, + config.transformResponse + ); + } + } + + return Promise.reject(reason); + }); +}; + + +/***/ }), + +/***/ "./lib/core/mergeConfig.js": +/*!*********************************!*\ + !*** ./lib/core/mergeConfig.js ***! + \*********************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var utils = __webpack_require__(/*! ../utils */ "./lib/utils.js"); + +/** + * Config-specific merge-function which creates a new config-object + * by merging two configuration objects together. + * + * @param {Object} config1 + * @param {Object} config2 + * @returns {Object} New object resulting from merging config2 to config1 + */ +module.exports = function mergeConfig(config1, config2) { + // eslint-disable-next-line no-param-reassign + config2 = config2 || {}; + var config = {}; + + function getMergedValue(target, source) { + if (utils.isPlainObject(target) && utils.isPlainObject(source)) { + return utils.merge(target, source); + } else if (utils.isPlainObject(source)) { + return utils.merge({}, source); + } else if (utils.isArray(source)) { + return source.slice(); + } + return source; + } + + // eslint-disable-next-line consistent-return + function mergeDeepProperties(prop) { + if (!utils.isUndefined(config2[prop])) { + return getMergedValue(config1[prop], config2[prop]); + } else if (!utils.isUndefined(config1[prop])) { + return getMergedValue(undefined, config1[prop]); + } + } + + // eslint-disable-next-line consistent-return + function valueFromConfig2(prop) { + if (!utils.isUndefined(config2[prop])) { + return getMergedValue(undefined, config2[prop]); + } + } + + // eslint-disable-next-line consistent-return + function defaultToConfig2(prop) { + if (!utils.isUndefined(config2[prop])) { + return getMergedValue(undefined, config2[prop]); + } else if (!utils.isUndefined(config1[prop])) { + return getMergedValue(undefined, config1[prop]); + } + } + + // eslint-disable-next-line consistent-return + function mergeDirectKeys(prop) { + if (prop in config2) { + return getMergedValue(config1[prop], config2[prop]); + } else if (prop in config1) { + return getMergedValue(undefined, config1[prop]); + } + } + + var mergeMap = { + 'url': valueFromConfig2, + 'method': valueFromConfig2, + 'data': valueFromConfig2, + 'baseURL': defaultToConfig2, + 'transformRequest': defaultToConfig2, + 'transformResponse': defaultToConfig2, + 'paramsSerializer': defaultToConfig2, + 'timeout': defaultToConfig2, + 'timeoutMessage': defaultToConfig2, + 'withCredentials': defaultToConfig2, + 'adapter': defaultToConfig2, + 'responseType': defaultToConfig2, + 'xsrfCookieName': defaultToConfig2, + 'xsrfHeaderName': defaultToConfig2, + 'onUploadProgress': defaultToConfig2, + 'onDownloadProgress': defaultToConfig2, + 'decompress': defaultToConfig2, + 'maxContentLength': defaultToConfig2, + 'maxBodyLength': defaultToConfig2, + 'beforeRedirect': defaultToConfig2, + 'transport': defaultToConfig2, + 'httpAgent': defaultToConfig2, + 'httpsAgent': defaultToConfig2, + 'cancelToken': defaultToConfig2, + 'socketPath': defaultToConfig2, + 'responseEncoding': defaultToConfig2, + 'validateStatus': mergeDirectKeys + }; + + utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) { + var merge = mergeMap[prop] || mergeDeepProperties; + var configValue = merge(prop); + (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue); + }); + + return config; +}; + + +/***/ }), + +/***/ "./lib/core/settle.js": +/*!****************************!*\ + !*** ./lib/core/settle.js ***! + \****************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var AxiosError = __webpack_require__(/*! ./AxiosError */ "./lib/core/AxiosError.js"); + +/** + * Resolve or reject a Promise based on response status. + * + * @param {Function} resolve A function that resolves the promise. + * @param {Function} reject A function that rejects the promise. + * @param {object} response The response. + */ +module.exports = function settle(resolve, reject, response) { + var validateStatus = response.config.validateStatus; + if (!response.status || !validateStatus || validateStatus(response.status)) { + resolve(response); + } else { + reject(new AxiosError( + 'Request failed with status code ' + response.status, + [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4], + response.config, + response.request, + response + )); + } +}; + + +/***/ }), + +/***/ "./lib/core/transformData.js": +/*!***********************************!*\ + !*** ./lib/core/transformData.js ***! + \***********************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var utils = __webpack_require__(/*! ./../utils */ "./lib/utils.js"); +var defaults = __webpack_require__(/*! ../defaults */ "./lib/defaults/index.js"); + +/** + * Transform the data for a request or a response + * + * @param {Object|String} data The data to be transformed + * @param {Array} headers The headers for the request or response + * @param {Array|Function} fns A single function or Array of functions + * @returns {*} The resulting transformed data + */ +module.exports = function transformData(data, headers, fns) { + var context = this || defaults; + /*eslint no-param-reassign:0*/ + utils.forEach(fns, function transform(fn) { + data = fn.call(context, data, headers); + }); + + return data; +}; + + +/***/ }), + +/***/ "./lib/defaults/index.js": +/*!*******************************!*\ + !*** ./lib/defaults/index.js ***! + \*******************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var utils = __webpack_require__(/*! ../utils */ "./lib/utils.js"); +var normalizeHeaderName = __webpack_require__(/*! ../helpers/normalizeHeaderName */ "./lib/helpers/normalizeHeaderName.js"); +var AxiosError = __webpack_require__(/*! ../core/AxiosError */ "./lib/core/AxiosError.js"); +var transitionalDefaults = __webpack_require__(/*! ./transitional */ "./lib/defaults/transitional.js"); +var toFormData = __webpack_require__(/*! ../helpers/toFormData */ "./lib/helpers/toFormData.js"); + +var DEFAULT_CONTENT_TYPE = { + 'Content-Type': 'application/x-www-form-urlencoded' +}; + +function setContentTypeIfUnset(headers, value) { + if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) { + headers['Content-Type'] = value; + } +} + +function getDefaultAdapter() { + var adapter; + if (typeof XMLHttpRequest !== 'undefined') { + // For browsers use XHR adapter + adapter = __webpack_require__(/*! ../adapters/xhr */ "./lib/adapters/xhr.js"); + } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') { + // For node use HTTP adapter + adapter = __webpack_require__(/*! ../adapters/http */ "./lib/adapters/xhr.js"); + } + return adapter; +} + +function stringifySafely(rawValue, parser, encoder) { + if (utils.isString(rawValue)) { + try { + (parser || JSON.parse)(rawValue); + return utils.trim(rawValue); + } catch (e) { + if (e.name !== 'SyntaxError') { + throw e; + } + } + } + + return (encoder || JSON.stringify)(rawValue); +} + +var defaults = { + + transitional: transitionalDefaults, + + adapter: getDefaultAdapter(), + + transformRequest: [function transformRequest(data, headers) { + normalizeHeaderName(headers, 'Accept'); + normalizeHeaderName(headers, 'Content-Type'); + + if (utils.isFormData(data) || + utils.isArrayBuffer(data) || + utils.isBuffer(data) || + utils.isStream(data) || + utils.isFile(data) || + utils.isBlob(data) + ) { + return data; + } + if (utils.isArrayBufferView(data)) { + return data.buffer; + } + if (utils.isURLSearchParams(data)) { + setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8'); + return data.toString(); + } + + var isObjectPayload = utils.isObject(data); + var contentType = headers && headers['Content-Type']; + + var isFileList; + + if ((isFileList = utils.isFileList(data)) || (isObjectPayload && contentType === 'multipart/form-data')) { + var _FormData = this.env && this.env.FormData; + return toFormData(isFileList ? {'files[]': data} : data, _FormData && new _FormData()); + } else if (isObjectPayload || contentType === 'application/json') { + setContentTypeIfUnset(headers, 'application/json'); + return stringifySafely(data); + } + + return data; + }], + + transformResponse: [function transformResponse(data) { + var transitional = this.transitional || defaults.transitional; + var silentJSONParsing = transitional && transitional.silentJSONParsing; + var forcedJSONParsing = transitional && transitional.forcedJSONParsing; + var strictJSONParsing = !silentJSONParsing && this.responseType === 'json'; + + if (strictJSONParsing || (forcedJSONParsing && utils.isString(data) && data.length)) { + try { + return JSON.parse(data); + } catch (e) { + if (strictJSONParsing) { + if (e.name === 'SyntaxError') { + throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response); + } + throw e; + } + } + } + + return data; + }], + + /** + * A timeout in milliseconds to abort a request. If set to 0 (default) a + * timeout is not created. + */ + timeout: 0, + + xsrfCookieName: 'XSRF-TOKEN', + xsrfHeaderName: 'X-XSRF-TOKEN', + + maxContentLength: -1, + maxBodyLength: -1, + + env: { + FormData: __webpack_require__(/*! ./env/FormData */ "./lib/helpers/null.js") + }, + + validateStatus: function validateStatus(status) { + return status >= 200 && status < 300; + }, + + headers: { + common: { + 'Accept': 'application/json, text/plain, */*' + } + } +}; + +utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) { + defaults.headers[method] = {}; +}); + +utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { + defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE); +}); + +module.exports = defaults; + + +/***/ }), + +/***/ "./lib/defaults/transitional.js": +/*!**************************************!*\ + !*** ./lib/defaults/transitional.js ***! + \**************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = { + silentJSONParsing: true, + forcedJSONParsing: true, + clarifyTimeoutError: false +}; + + +/***/ }), + +/***/ "./lib/env/data.js": +/*!*************************!*\ + !*** ./lib/env/data.js ***! + \*************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = { + "version": "0.27.2" +}; + +/***/ }), + +/***/ "./lib/helpers/bind.js": +/*!*****************************!*\ + !*** ./lib/helpers/bind.js ***! + \*****************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = function bind(fn, thisArg) { + return function wrap() { + var args = new Array(arguments.length); + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i]; + } + return fn.apply(thisArg, args); + }; +}; + + +/***/ }), + +/***/ "./lib/helpers/buildURL.js": +/*!*********************************!*\ + !*** ./lib/helpers/buildURL.js ***! + \*********************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var utils = __webpack_require__(/*! ./../utils */ "./lib/utils.js"); + +function encode(val) { + return encodeURIComponent(val). + replace(/%3A/gi, ':'). + replace(/%24/g, '$'). + replace(/%2C/gi, ','). + replace(/%20/g, '+'). + replace(/%5B/gi, '['). + replace(/%5D/gi, ']'); +} + +/** + * Build a URL by appending params to the end + * + * @param {string} url The base of the url (e.g., http://www.google.com) + * @param {object} [params] The params to be appended + * @returns {string} The formatted url + */ +module.exports = function buildURL(url, params, paramsSerializer) { + /*eslint no-param-reassign:0*/ + if (!params) { + return url; + } + + var serializedParams; + if (paramsSerializer) { + serializedParams = paramsSerializer(params); + } else if (utils.isURLSearchParams(params)) { + serializedParams = params.toString(); + } else { + var parts = []; + + utils.forEach(params, function serialize(val, key) { + if (val === null || typeof val === 'undefined') { + return; + } + + if (utils.isArray(val)) { + key = key + '[]'; + } else { + val = [val]; + } + + utils.forEach(val, function parseValue(v) { + if (utils.isDate(v)) { + v = v.toISOString(); + } else if (utils.isObject(v)) { + v = JSON.stringify(v); + } + parts.push(encode(key) + '=' + encode(v)); + }); + }); + + serializedParams = parts.join('&'); + } + + if (serializedParams) { + var hashmarkIndex = url.indexOf('#'); + if (hashmarkIndex !== -1) { + url = url.slice(0, hashmarkIndex); + } + + url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams; + } + + return url; +}; + + +/***/ }), + +/***/ "./lib/helpers/combineURLs.js": +/*!************************************!*\ + !*** ./lib/helpers/combineURLs.js ***! + \************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +/** + * Creates a new URL by combining the specified URLs + * + * @param {string} baseURL The base URL + * @param {string} relativeURL The relative URL + * @returns {string} The combined URL + */ +module.exports = function combineURLs(baseURL, relativeURL) { + return relativeURL + ? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '') + : baseURL; +}; + + +/***/ }), + +/***/ "./lib/helpers/cookies.js": +/*!********************************!*\ + !*** ./lib/helpers/cookies.js ***! + \********************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var utils = __webpack_require__(/*! ./../utils */ "./lib/utils.js"); + +module.exports = ( + utils.isStandardBrowserEnv() ? + + // Standard browser envs support document.cookie + (function standardBrowserEnv() { + return { + write: function write(name, value, expires, path, domain, secure) { + var cookie = []; + cookie.push(name + '=' + encodeURIComponent(value)); + + if (utils.isNumber(expires)) { + cookie.push('expires=' + new Date(expires).toGMTString()); + } + + if (utils.isString(path)) { + cookie.push('path=' + path); + } + + if (utils.isString(domain)) { + cookie.push('domain=' + domain); + } + + if (secure === true) { + cookie.push('secure'); + } + + document.cookie = cookie.join('; '); + }, + + read: function read(name) { + var match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)')); + return (match ? decodeURIComponent(match[3]) : null); + }, + + remove: function remove(name) { + this.write(name, '', Date.now() - 86400000); + } + }; + })() : + + // Non standard browser env (web workers, react-native) lack needed support. + (function nonStandardBrowserEnv() { + return { + write: function write() {}, + read: function read() { return null; }, + remove: function remove() {} + }; + })() +); + + +/***/ }), + +/***/ "./lib/helpers/isAbsoluteURL.js": +/*!**************************************!*\ + !*** ./lib/helpers/isAbsoluteURL.js ***! + \**************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +/** + * Determines whether the specified URL is absolute + * + * @param {string} url The URL to test + * @returns {boolean} True if the specified URL is absolute, otherwise false + */ +module.exports = function isAbsoluteURL(url) { + // A URL is considered absolute if it begins with "://" or "//" (protocol-relative URL). + // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed + // by any combination of letters, digits, plus, period, or hyphen. + return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url); +}; + + +/***/ }), + +/***/ "./lib/helpers/isAxiosError.js": +/*!*************************************!*\ + !*** ./lib/helpers/isAxiosError.js ***! + \*************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var utils = __webpack_require__(/*! ./../utils */ "./lib/utils.js"); + +/** + * Determines whether the payload is an error thrown by Axios + * + * @param {*} payload The value to test + * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false + */ +module.exports = function isAxiosError(payload) { + return utils.isObject(payload) && (payload.isAxiosError === true); +}; + + +/***/ }), + +/***/ "./lib/helpers/isURLSameOrigin.js": +/*!****************************************!*\ + !*** ./lib/helpers/isURLSameOrigin.js ***! + \****************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var utils = __webpack_require__(/*! ./../utils */ "./lib/utils.js"); + +module.exports = ( + utils.isStandardBrowserEnv() ? + + // Standard browser envs have full support of the APIs needed to test + // whether the request URL is of the same origin as current location. + (function standardBrowserEnv() { + var msie = /(msie|trident)/i.test(navigator.userAgent); + var urlParsingNode = document.createElement('a'); + var originURL; + + /** + * Parse a URL to discover it's components + * + * @param {String} url The URL to be parsed + * @returns {Object} + */ + function resolveURL(url) { + var href = url; + + if (msie) { + // IE needs attribute set twice to normalize properties + urlParsingNode.setAttribute('href', href); + href = urlParsingNode.href; + } + + urlParsingNode.setAttribute('href', href); + + // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils + return { + href: urlParsingNode.href, + protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '', + host: urlParsingNode.host, + search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '', + hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '', + hostname: urlParsingNode.hostname, + port: urlParsingNode.port, + pathname: (urlParsingNode.pathname.charAt(0) === '/') ? + urlParsingNode.pathname : + '/' + urlParsingNode.pathname + }; + } + + originURL = resolveURL(window.location.href); + + /** + * Determine if a URL shares the same origin as the current location + * + * @param {String} requestURL The URL to test + * @returns {boolean} True if URL shares the same origin, otherwise false + */ + return function isURLSameOrigin(requestURL) { + var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL; + return (parsed.protocol === originURL.protocol && + parsed.host === originURL.host); + }; + })() : + + // Non standard browser envs (web workers, react-native) lack needed support. + (function nonStandardBrowserEnv() { + return function isURLSameOrigin() { + return true; + }; + })() +); + + +/***/ }), + +/***/ "./lib/helpers/normalizeHeaderName.js": +/*!********************************************!*\ + !*** ./lib/helpers/normalizeHeaderName.js ***! + \********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var utils = __webpack_require__(/*! ../utils */ "./lib/utils.js"); + +module.exports = function normalizeHeaderName(headers, normalizedName) { + utils.forEach(headers, function processHeader(value, name) { + if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) { + headers[normalizedName] = value; + delete headers[name]; + } + }); +}; + + +/***/ }), + +/***/ "./lib/helpers/null.js": +/*!*****************************!*\ + !*** ./lib/helpers/null.js ***! + \*****************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +// eslint-disable-next-line strict +module.exports = null; + + +/***/ }), + +/***/ "./lib/helpers/parseHeaders.js": +/*!*************************************!*\ + !*** ./lib/helpers/parseHeaders.js ***! + \*************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var utils = __webpack_require__(/*! ./../utils */ "./lib/utils.js"); + +// Headers whose duplicates are ignored by node +// c.f. https://nodejs.org/api/http.html#http_message_headers +var ignoreDuplicateOf = [ + 'age', 'authorization', 'content-length', 'content-type', 'etag', + 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', + 'last-modified', 'location', 'max-forwards', 'proxy-authorization', + 'referer', 'retry-after', 'user-agent' +]; + +/** + * Parse headers into an object + * + * ``` + * Date: Wed, 27 Aug 2014 08:58:49 GMT + * Content-Type: application/json + * Connection: keep-alive + * Transfer-Encoding: chunked + * ``` + * + * @param {String} headers Headers needing to be parsed + * @returns {Object} Headers parsed into an object + */ +module.exports = function parseHeaders(headers) { + var parsed = {}; + var key; + var val; + var i; + + if (!headers) { return parsed; } + + utils.forEach(headers.split('\n'), function parser(line) { + i = line.indexOf(':'); + key = utils.trim(line.substr(0, i)).toLowerCase(); + val = utils.trim(line.substr(i + 1)); + + if (key) { + if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) { + return; + } + if (key === 'set-cookie') { + parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]); + } else { + parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val; + } + } + }); + + return parsed; +}; + + +/***/ }), + +/***/ "./lib/helpers/parseProtocol.js": +/*!**************************************!*\ + !*** ./lib/helpers/parseProtocol.js ***! + \**************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = function parseProtocol(url) { + var match = /^([-+\w]{1,25})(:?\/\/|:)/.exec(url); + return match && match[1] || ''; +}; + + +/***/ }), + +/***/ "./lib/helpers/spread.js": +/*!*******************************!*\ + !*** ./lib/helpers/spread.js ***! + \*******************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +/** + * Syntactic sugar for invoking a function and expanding an array for arguments. + * + * Common use case would be to use `Function.prototype.apply`. + * + * ```js + * function f(x, y, z) {} + * var args = [1, 2, 3]; + * f.apply(null, args); + * ``` + * + * With `spread` this example can be re-written. + * + * ```js + * spread(function(x, y, z) {})([1, 2, 3]); + * ``` + * + * @param {Function} callback + * @returns {Function} + */ +module.exports = function spread(callback) { + return function wrap(arr) { + return callback.apply(null, arr); + }; +}; + + +/***/ }), + +/***/ "./lib/helpers/toFormData.js": +/*!***********************************!*\ + !*** ./lib/helpers/toFormData.js ***! + \***********************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var utils = __webpack_require__(/*! ../utils */ "./lib/utils.js"); + +/** + * Convert a data object to FormData + * @param {Object} obj + * @param {?Object} [formData] + * @returns {Object} + **/ + +function toFormData(obj, formData) { + // eslint-disable-next-line no-param-reassign + formData = formData || new FormData(); + + var stack = []; + + function convertValue(value) { + if (value === null) return ''; + + if (utils.isDate(value)) { + return value.toISOString(); + } + + if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) { + return typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value); + } + + return value; + } + + function build(data, parentKey) { + if (utils.isPlainObject(data) || utils.isArray(data)) { + if (stack.indexOf(data) !== -1) { + throw Error('Circular reference detected in ' + parentKey); + } + + stack.push(data); + + utils.forEach(data, function each(value, key) { + if (utils.isUndefined(value)) return; + var fullKey = parentKey ? parentKey + '.' + key : key; + var arr; + + if (value && !parentKey && typeof value === 'object') { + if (utils.endsWith(key, '{}')) { + // eslint-disable-next-line no-param-reassign + value = JSON.stringify(value); + } else if (utils.endsWith(key, '[]') && (arr = utils.toArray(value))) { + // eslint-disable-next-line func-names + arr.forEach(function(el) { + !utils.isUndefined(el) && formData.append(fullKey, convertValue(el)); + }); + return; + } + } + + build(value, fullKey); + }); + + stack.pop(); + } else { + formData.append(parentKey, convertValue(data)); + } + } + + build(obj); + + return formData; +} + +module.exports = toFormData; + + +/***/ }), + +/***/ "./lib/helpers/validator.js": +/*!**********************************!*\ + !*** ./lib/helpers/validator.js ***! + \**********************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var VERSION = __webpack_require__(/*! ../env/data */ "./lib/env/data.js").version; +var AxiosError = __webpack_require__(/*! ../core/AxiosError */ "./lib/core/AxiosError.js"); + +var validators = {}; + +// eslint-disable-next-line func-names +['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) { + validators[type] = function validator(thing) { + return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type; + }; +}); + +var deprecatedWarnings = {}; + +/** + * Transitional option validator + * @param {function|boolean?} validator - set to false if the transitional option has been removed + * @param {string?} version - deprecated version / removed since version + * @param {string?} message - some message with additional info + * @returns {function} + */ +validators.transitional = function transitional(validator, version, message) { + function formatMessage(opt, desc) { + return '[Axios v' + VERSION + '] Transitional option \'' + opt + '\'' + desc + (message ? '. ' + message : ''); + } + + // eslint-disable-next-line func-names + return function(value, opt, opts) { + if (validator === false) { + throw new AxiosError( + formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')), + AxiosError.ERR_DEPRECATED + ); + } + + if (version && !deprecatedWarnings[opt]) { + deprecatedWarnings[opt] = true; + // eslint-disable-next-line no-console + console.warn( + formatMessage( + opt, + ' has been deprecated since v' + version + ' and will be removed in the near future' + ) + ); + } + + return validator ? validator(value, opt, opts) : true; + }; +}; + +/** + * Assert object's properties type + * @param {object} options + * @param {object} schema + * @param {boolean?} allowUnknown + */ + +function assertOptions(options, schema, allowUnknown) { + if (typeof options !== 'object') { + throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE); + } + var keys = Object.keys(options); + var i = keys.length; + while (i-- > 0) { + var opt = keys[i]; + var validator = schema[opt]; + if (validator) { + var value = options[opt]; + var result = value === undefined || validator(value, opt, options); + if (result !== true) { + throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE); + } + continue; + } + if (allowUnknown !== true) { + throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION); + } + } +} + +module.exports = { + assertOptions: assertOptions, + validators: validators +}; + + +/***/ }), + +/***/ "./lib/utils.js": +/*!**********************!*\ + !*** ./lib/utils.js ***! + \**********************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var bind = __webpack_require__(/*! ./helpers/bind */ "./lib/helpers/bind.js"); + +// utils is a library of generic helper functions non-specific to axios + +var toString = Object.prototype.toString; + +// eslint-disable-next-line func-names +var kindOf = (function(cache) { + // eslint-disable-next-line func-names + return function(thing) { + var str = toString.call(thing); + return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase()); + }; +})(Object.create(null)); + +function kindOfTest(type) { + type = type.toLowerCase(); + return function isKindOf(thing) { + return kindOf(thing) === type; + }; +} + +/** + * Determine if a value is an Array + * + * @param {Object} val The value to test + * @returns {boolean} True if value is an Array, otherwise false + */ +function isArray(val) { + return Array.isArray(val); +} + +/** + * Determine if a value is undefined + * + * @param {Object} val The value to test + * @returns {boolean} True if the value is undefined, otherwise false + */ +function isUndefined(val) { + return typeof val === 'undefined'; +} + +/** + * Determine if a value is a Buffer + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a Buffer, otherwise false + */ +function isBuffer(val) { + return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor) + && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val); +} + +/** + * Determine if a value is an ArrayBuffer + * + * @function + * @param {Object} val The value to test + * @returns {boolean} True if value is an ArrayBuffer, otherwise false + */ +var isArrayBuffer = kindOfTest('ArrayBuffer'); + + +/** + * Determine if a value is a view on an ArrayBuffer + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false + */ +function isArrayBufferView(val) { + var result; + if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) { + result = ArrayBuffer.isView(val); + } else { + result = (val) && (val.buffer) && (isArrayBuffer(val.buffer)); + } + return result; +} + +/** + * Determine if a value is a String + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a String, otherwise false + */ +function isString(val) { + return typeof val === 'string'; +} + +/** + * Determine if a value is a Number + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a Number, otherwise false + */ +function isNumber(val) { + return typeof val === 'number'; +} + +/** + * Determine if a value is an Object + * + * @param {Object} val The value to test + * @returns {boolean} True if value is an Object, otherwise false + */ +function isObject(val) { + return val !== null && typeof val === 'object'; +} + +/** + * Determine if a value is a plain Object + * + * @param {Object} val The value to test + * @return {boolean} True if value is a plain Object, otherwise false + */ +function isPlainObject(val) { + if (kindOf(val) !== 'object') { + return false; + } + + var prototype = Object.getPrototypeOf(val); + return prototype === null || prototype === Object.prototype; +} + +/** + * Determine if a value is a Date + * + * @function + * @param {Object} val The value to test + * @returns {boolean} True if value is a Date, otherwise false + */ +var isDate = kindOfTest('Date'); + +/** + * Determine if a value is a File + * + * @function + * @param {Object} val The value to test + * @returns {boolean} True if value is a File, otherwise false + */ +var isFile = kindOfTest('File'); + +/** + * Determine if a value is a Blob + * + * @function + * @param {Object} val The value to test + * @returns {boolean} True if value is a Blob, otherwise false + */ +var isBlob = kindOfTest('Blob'); + +/** + * Determine if a value is a FileList + * + * @function + * @param {Object} val The value to test + * @returns {boolean} True if value is a File, otherwise false + */ +var isFileList = kindOfTest('FileList'); + +/** + * Determine if a value is a Function + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a Function, otherwise false + */ +function isFunction(val) { + return toString.call(val) === '[object Function]'; +} + +/** + * Determine if a value is a Stream + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a Stream, otherwise false + */ +function isStream(val) { + return isObject(val) && isFunction(val.pipe); +} + +/** + * Determine if a value is a FormData + * + * @param {Object} thing The value to test + * @returns {boolean} True if value is an FormData, otherwise false + */ +function isFormData(thing) { + var pattern = '[object FormData]'; + return thing && ( + (typeof FormData === 'function' && thing instanceof FormData) || + toString.call(thing) === pattern || + (isFunction(thing.toString) && thing.toString() === pattern) + ); +} + +/** + * Determine if a value is a URLSearchParams object + * @function + * @param {Object} val The value to test + * @returns {boolean} True if value is a URLSearchParams object, otherwise false + */ +var isURLSearchParams = kindOfTest('URLSearchParams'); + +/** + * Trim excess whitespace off the beginning and end of a string + * + * @param {String} str The String to trim + * @returns {String} The String freed of excess whitespace + */ +function trim(str) { + return str.trim ? str.trim() : str.replace(/^\s+|\s+$/g, ''); +} + +/** + * Determine if we're running in a standard browser environment + * + * This allows axios to run in a web worker, and react-native. + * Both environments support XMLHttpRequest, but not fully standard globals. + * + * web workers: + * typeof window -> undefined + * typeof document -> undefined + * + * react-native: + * navigator.product -> 'ReactNative' + * nativescript + * navigator.product -> 'NativeScript' or 'NS' + */ +function isStandardBrowserEnv() { + if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' || + navigator.product === 'NativeScript' || + navigator.product === 'NS')) { + return false; + } + return ( + typeof window !== 'undefined' && + typeof document !== 'undefined' + ); +} + +/** + * Iterate over an Array or an Object invoking a function for each item. + * + * If `obj` is an Array callback will be called passing + * the value, index, and complete array for each item. + * + * If 'obj' is an Object callback will be called passing + * the value, key, and complete object for each property. + * + * @param {Object|Array} obj The object to iterate + * @param {Function} fn The callback to invoke for each item + */ +function forEach(obj, fn) { + // Don't bother if no value provided + if (obj === null || typeof obj === 'undefined') { + return; + } + + // Force an array if not already something iterable + if (typeof obj !== 'object') { + /*eslint no-param-reassign:0*/ + obj = [obj]; + } + + if (isArray(obj)) { + // Iterate over array values + for (var i = 0, l = obj.length; i < l; i++) { + fn.call(null, obj[i], i, obj); + } + } else { + // Iterate over object keys + for (var key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) { + fn.call(null, obj[key], key, obj); + } + } + } +} + +/** + * Accepts varargs expecting each argument to be an object, then + * immutably merges the properties of each object and returns result. + * + * When multiple objects contain the same key the later object in + * the arguments list will take precedence. + * + * Example: + * + * ```js + * var result = merge({foo: 123}, {foo: 456}); + * console.log(result.foo); // outputs 456 + * ``` + * + * @param {Object} obj1 Object to merge + * @returns {Object} Result of all merge properties + */ +function merge(/* obj1, obj2, obj3, ... */) { + var result = {}; + function assignValue(val, key) { + if (isPlainObject(result[key]) && isPlainObject(val)) { + result[key] = merge(result[key], val); + } else if (isPlainObject(val)) { + result[key] = merge({}, val); + } else if (isArray(val)) { + result[key] = val.slice(); + } else { + result[key] = val; + } + } + + for (var i = 0, l = arguments.length; i < l; i++) { + forEach(arguments[i], assignValue); + } + return result; +} + +/** + * Extends object a by mutably adding to it the properties of object b. + * + * @param {Object} a The object to be extended + * @param {Object} b The object to copy properties from + * @param {Object} thisArg The object to bind function to + * @return {Object} The resulting value of object a + */ +function extend(a, b, thisArg) { + forEach(b, function assignValue(val, key) { + if (thisArg && typeof val === 'function') { + a[key] = bind(val, thisArg); + } else { + a[key] = val; + } + }); + return a; +} + +/** + * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM) + * + * @param {string} content with BOM + * @return {string} content value without BOM + */ +function stripBOM(content) { + if (content.charCodeAt(0) === 0xFEFF) { + content = content.slice(1); + } + return content; +} + +/** + * Inherit the prototype methods from one constructor into another + * @param {function} constructor + * @param {function} superConstructor + * @param {object} [props] + * @param {object} [descriptors] + */ + +function inherits(constructor, superConstructor, props, descriptors) { + constructor.prototype = Object.create(superConstructor.prototype, descriptors); + constructor.prototype.constructor = constructor; + props && Object.assign(constructor.prototype, props); +} + +/** + * Resolve object with deep prototype chain to a flat object + * @param {Object} sourceObj source object + * @param {Object} [destObj] + * @param {Function} [filter] + * @returns {Object} + */ + +function toFlatObject(sourceObj, destObj, filter) { + var props; + var i; + var prop; + var merged = {}; + + destObj = destObj || {}; + + do { + props = Object.getOwnPropertyNames(sourceObj); + i = props.length; + while (i-- > 0) { + prop = props[i]; + if (!merged[prop]) { + destObj[prop] = sourceObj[prop]; + merged[prop] = true; + } + } + sourceObj = Object.getPrototypeOf(sourceObj); + } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype); + + return destObj; +} + +/* + * determines whether a string ends with the characters of a specified string + * @param {String} str + * @param {String} searchString + * @param {Number} [position= 0] + * @returns {boolean} + */ +function endsWith(str, searchString, position) { + str = String(str); + if (position === undefined || position > str.length) { + position = str.length; + } + position -= searchString.length; + var lastIndex = str.indexOf(searchString, position); + return lastIndex !== -1 && lastIndex === position; +} + + +/** + * Returns new array from array like object + * @param {*} [thing] + * @returns {Array} + */ +function toArray(thing) { + if (!thing) return null; + var i = thing.length; + if (isUndefined(i)) return null; + var arr = new Array(i); + while (i-- > 0) { + arr[i] = thing[i]; + } + return arr; +} + +// eslint-disable-next-line func-names +var isTypedArray = (function(TypedArray) { + // eslint-disable-next-line func-names + return function(thing) { + return TypedArray && thing instanceof TypedArray; + }; +})(typeof Uint8Array !== 'undefined' && Object.getPrototypeOf(Uint8Array)); + +module.exports = { + isArray: isArray, + isArrayBuffer: isArrayBuffer, + isBuffer: isBuffer, + isFormData: isFormData, + isArrayBufferView: isArrayBufferView, + isString: isString, + isNumber: isNumber, + isObject: isObject, + isPlainObject: isPlainObject, + isUndefined: isUndefined, + isDate: isDate, + isFile: isFile, + isBlob: isBlob, + isFunction: isFunction, + isStream: isStream, + isURLSearchParams: isURLSearchParams, + isStandardBrowserEnv: isStandardBrowserEnv, + forEach: forEach, + merge: merge, + extend: extend, + trim: trim, + stripBOM: stripBOM, + inherits: inherits, + toFlatObject: toFlatObject, + kindOf: kindOf, + kindOfTest: kindOfTest, + endsWith: endsWith, + toArray: toArray, + isTypedArray: isTypedArray, + isFileList: isFileList +}; + + +/***/ }) + +/******/ }); +}); +//# sourceMappingURL=axios.map \ No newline at end of file diff --git a/js_css/axios.map b/js_css/axios.map new file mode 100644 index 0000000..5c24df5 --- /dev/null +++ b/js_css/axios.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack://axios/webpack/universalModuleDefinition","webpack://axios/webpack/bootstrap","webpack://axios/./index.js","webpack://axios/./lib/adapters/xhr.js","webpack://axios/./lib/axios.js","webpack://axios/./lib/cancel/CancelToken.js","webpack://axios/./lib/cancel/CanceledError.js","webpack://axios/./lib/cancel/isCancel.js","webpack://axios/./lib/core/Axios.js","webpack://axios/./lib/core/AxiosError.js","webpack://axios/./lib/core/InterceptorManager.js","webpack://axios/./lib/core/buildFullPath.js","webpack://axios/./lib/core/dispatchRequest.js","webpack://axios/./lib/core/mergeConfig.js","webpack://axios/./lib/core/settle.js","webpack://axios/./lib/core/transformData.js","webpack://axios/./lib/defaults/index.js","webpack://axios/./lib/defaults/transitional.js","webpack://axios/./lib/env/data.js","webpack://axios/./lib/helpers/bind.js","webpack://axios/./lib/helpers/buildURL.js","webpack://axios/./lib/helpers/combineURLs.js","webpack://axios/./lib/helpers/cookies.js","webpack://axios/./lib/helpers/isAbsoluteURL.js","webpack://axios/./lib/helpers/isAxiosError.js","webpack://axios/./lib/helpers/isURLSameOrigin.js","webpack://axios/./lib/helpers/normalizeHeaderName.js","webpack://axios/./lib/helpers/null.js","webpack://axios/./lib/helpers/parseHeaders.js","webpack://axios/./lib/helpers/parseProtocol.js","webpack://axios/./lib/helpers/spread.js","webpack://axios/./lib/helpers/toFormData.js","webpack://axios/./lib/helpers/validator.js","webpack://axios/./lib/utils.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;QCVA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;;QAGA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;;QAGA;QACA;;;;;;;;;;;;AClFA,iBAAiB,mBAAO,CAAC,mCAAa,E;;;;;;;;;;;;ACAzB;;AAEb,YAAY,mBAAO,CAAC,kCAAY;AAChC,aAAa,mBAAO,CAAC,8CAAkB;AACvC,cAAc,mBAAO,CAAC,sDAAsB;AAC5C,eAAe,mBAAO,CAAC,wDAAuB;AAC9C,oBAAoB,mBAAO,CAAC,0DAAuB;AACnD,mBAAmB,mBAAO,CAAC,gEAA2B;AACtD,sBAAsB,mBAAO,CAAC,sEAA8B;AAC5D,2BAA2B,mBAAO,CAAC,gEAA0B;AAC7D,iBAAiB,mBAAO,CAAC,oDAAoB;AAC7C,oBAAoB,mBAAO,CAAC,8DAAyB;AACrD,oBAAoB,mBAAO,CAAC,gEAA0B;;AAEtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,4CAA4C;AAC5C;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;;AAEP;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA,GAAG;AACH;;;;;;;;;;;;;AC7Na;;AAEb,YAAY,mBAAO,CAAC,+BAAS;AAC7B,WAAW,mBAAO,CAAC,6CAAgB;AACnC,YAAY,mBAAO,CAAC,yCAAc;AAClC,kBAAkB,mBAAO,CAAC,qDAAoB;AAC9C,eAAe,mBAAO,CAAC,2CAAY;;AAEnC;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY,MAAM;AAClB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,sBAAsB,mBAAO,CAAC,6DAAwB;AACtD,oBAAoB,mBAAO,CAAC,yDAAsB;AAClD,iBAAiB,mBAAO,CAAC,mDAAmB;AAC5C,gBAAgB,mBAAO,CAAC,qCAAY;AACpC,mBAAmB,mBAAO,CAAC,yDAAsB;;AAEjD;AACA,mBAAmB,mBAAO,CAAC,wDAAwB;;AAEnD;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,mBAAO,CAAC,iDAAkB;;AAEzC;AACA,qBAAqB,mBAAO,CAAC,6DAAwB;;AAErD;;AAEA;AACA;;;;;;;;;;;;;AC/Da;;AAEb,oBAAoB,mBAAO,CAAC,sDAAiB;;AAE7C;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,GAAG;;AAEH;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,eAAe,OAAO;AACtB;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;;ACtHa;;AAEb,iBAAiB,mBAAO,CAAC,oDAAoB;AAC7C,YAAY,mBAAO,CAAC,gCAAU;;AAE9B;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;;;;;;;;;;;;;ACrBa;;AAEb;AACA;AACA;;;;;;;;;;;;;ACJa;;AAEb,YAAY,mBAAO,CAAC,kCAAY;AAChC,eAAe,mBAAO,CAAC,sDAAqB;AAC5C,yBAAyB,mBAAO,CAAC,8DAAsB;AACvD,sBAAsB,mBAAO,CAAC,wDAAmB;AACjD,kBAAkB,mBAAO,CAAC,gDAAe;AACzC,oBAAoB,mBAAO,CAAC,oDAAiB;AAC7C,gBAAgB,mBAAO,CAAC,wDAAsB;;AAE9C;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA,yBAAyB;AACzB,KAAK;AACL;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA,SAAS,KAAK;AACd;AACA;AACA,OAAO;AACP;AACA;;AAEA;;AAEA;AACA,CAAC;;AAED;;;;;;;;;;;;;AC/Ja;;AAEb,YAAY,mBAAO,CAAC,gCAAU;;AAE9B;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB,CAAC;;AAED;AACA,kDAAkD,YAAY;;AAE9D;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;;;;;;;;;;;;ACrFa;;AAEb,YAAY,mBAAO,CAAC,kCAAY;;AAEhC;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;;;;;;;;;;;;;ACrDa;;AAEb,oBAAoB,mBAAO,CAAC,gEAA0B;AACtD,kBAAkB,mBAAO,CAAC,4DAAwB;;AAElD;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACnBa;;AAEb,YAAY,mBAAO,CAAC,kCAAY;AAChC,oBAAoB,mBAAO,CAAC,oDAAiB;AAC7C,eAAe,mBAAO,CAAC,oDAAoB;AAC3C,eAAe,mBAAO,CAAC,4CAAa;AACpC,oBAAoB,mBAAO,CAAC,8DAAyB;;AAErD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,+BAA+B;AAC/B,uCAAuC;AACvC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;;;;;;;;;;;;;ACtFa;;AAEb,YAAY,mBAAO,CAAC,gCAAU;;AAE9B;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL,2BAA2B;AAC3B,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;;;;;;;;;;;;ACnGa;;AAEb,iBAAiB,mBAAO,CAAC,8CAAc;;AAEvC;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACxBa;;AAEb,YAAY,mBAAO,CAAC,kCAAY;AAChC,eAAe,mBAAO,CAAC,4CAAa;;AAEpC;AACA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,MAAM;AACjB,WAAW,eAAe;AAC1B,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;;;;;;;;;;;;ACrBa;;AAEb,YAAY,mBAAO,CAAC,gCAAU;AAC9B,0BAA0B,mBAAO,CAAC,4EAAgC;AAClE,iBAAiB,mBAAO,CAAC,oDAAoB;AAC7C,2BAA2B,mBAAO,CAAC,sDAAgB;AACnD,iBAAiB,mBAAO,CAAC,0DAAuB;;AAEhD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,mBAAO,CAAC,8CAAiB;AACvC,GAAG;AACH;AACA,cAAc,mBAAO,CAAC,+CAAkB;AACxC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE;AACxE;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,sCAAsC,gBAAgB;AACtD,KAAK;AACL;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,cAAc,mBAAO,CAAC,6CAAgB;AACtC,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;;;;;;;;;;;;;ACjJa;;AAEb;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACNA;AACA;AACA,E;;;;;;;;;;;;ACFa;;AAEb;AACA;AACA;AACA,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACVa;;AAEb,YAAY,mBAAO,CAAC,kCAAY;;AAEhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;;;;;;ACrEa;;AAEb;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACba;;AAEb,YAAY,mBAAO,CAAC,kCAAY;;AAEhC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,0CAA0C;AAC1C,SAAS;;AAET;AACA,4DAA4D,wBAAwB;AACpF;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,kCAAkC;AAClC,+BAA+B,aAAa,EAAE;AAC9C;AACA;AACA,KAAK;AACL;;;;;;;;;;;;;ACpDa;;AAEb;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACba;;AAEb,YAAY,mBAAO,CAAC,kCAAY;;AAEhC;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;;;;;;;;;;;;ACZa;;AAEb,YAAY,mBAAO,CAAC,kCAAY;;AAEhC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,OAAO;AACrB,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,cAAc,OAAO;AACrB,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;;;;;;;;;;;;ACnEa;;AAEb,YAAY,mBAAO,CAAC,gCAAU;;AAE9B;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;;;;;;;;;;;ACXA;AACA;;;;;;;;;;;;;ACDa;;AAEb,YAAY,mBAAO,CAAC,kCAAY;;AAEhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,eAAe;;AAEhC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,GAAG;;AAEH;AACA;;;;;;;;;;;;;ACpDa;;AAEb;AACA,wBAAwB,KAAK;AAC7B;AACA;;;;;;;;;;;;;ACLa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA,WAAW,SAAS;AACpB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC1Ba;;AAEb,YAAY,mBAAO,CAAC,gCAAU;;AAE9B;AACA;AACA,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,aAAa;AACb;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,qCAAqC;AACrC;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;;AAEA;AACA,OAAO;;AAEP;AACA,KAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;;;;;;;;;;;;ACvEa;;AAEb,cAAc,mBAAO,CAAC,sCAAa;AACnC,iBAAiB,mBAAO,CAAC,oDAAoB;;AAE7C;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;AACA,WAAW,kBAAkB;AAC7B,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa;AACb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;ACrFa;;AAEb,WAAW,mBAAO,CAAC,6CAAgB;;AAEnC;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;;;AAGA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mCAAmC,OAAO;AAC1C;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,SAAS,GAAG,SAAS;AAC5C,2BAA2B;AAC3B;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,4BAA4B;AAC5B,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;;AAEA,uCAAuC,OAAO;AAC9C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,aAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA,WAAW,EAAE;AACb,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"axios.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"axios\"] = factory();\n\telse\n\t\troot[\"axios\"] = factory();\n})(this, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./index.js\");\n","module.exports = require('./lib/axios');","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar cookies = require('./../helpers/cookies');\nvar buildURL = require('./../helpers/buildURL');\nvar buildFullPath = require('../core/buildFullPath');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar transitionalDefaults = require('../defaults/transitional');\nvar AxiosError = require('../core/AxiosError');\nvar CanceledError = require('../cancel/CanceledError');\nvar parseProtocol = require('../helpers/parseProtocol');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n var responseType = config.responseType;\n var onCanceled;\n function done() {\n if (config.cancelToken) {\n config.cancelToken.unsubscribe(onCanceled);\n }\n\n if (config.signal) {\n config.signal.removeEventListener('abort', onCanceled);\n }\n }\n\n if (utils.isFormData(requestData) && utils.isStandardBrowserEnv()) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n var fullPath = buildFullPath(config.baseURL, config.url);\n\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n var timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\n var transitional = config.transitional || transitionalDefaults;\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = config.responseType;\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken || config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = function(cancel) {\n if (!request) {\n return;\n }\n reject(!cancel || (cancel && cancel.type) ? new CanceledError() : cancel);\n request.abort();\n request = null;\n };\n\n config.cancelToken && config.cancelToken.subscribe(onCanceled);\n if (config.signal) {\n config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n if (!requestData) {\n requestData = null;\n }\n\n var protocol = parseProtocol(fullPath);\n\n if (protocol && [ 'http', 'https', 'file' ].indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData);\n });\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar mergeConfig = require('./core/mergeConfig');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context);\n\n // Copy context to instance\n utils.extend(instance, context);\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = require('./cancel/CanceledError');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\naxios.VERSION = require('./env/data').version;\naxios.toFormData = require('./helpers/toFormData');\n\n// Expose AxiosError class\naxios.AxiosError = require('../lib/core/AxiosError');\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Expose isAxiosError\naxios.isAxiosError = require('./helpers/isAxiosError');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n","'use strict';\n\nvar CanceledError = require('./CanceledError');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n var token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(function(cancel) {\n if (!token._listeners) return;\n\n var i;\n var l = token._listeners.length;\n\n for (i = 0; i < l; i++) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = function(onfulfilled) {\n var _resolve;\n // eslint-disable-next-line func-names\n var promise = new Promise(function(resolve) {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message);\n resolvePromise(token.reason);\n });\n}\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n\n/**\n * Subscribe to the cancel signal\n */\n\nCancelToken.prototype.subscribe = function subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n};\n\n/**\n * Unsubscribe from the cancel signal\n */\n\nCancelToken.prototype.unsubscribe = function unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n var index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;\n","'use strict';\n\nvar AxiosError = require('../core/AxiosError');\nvar utils = require('../utils');\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction CanceledError(message) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nmodule.exports = CanceledError;\n","'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('../helpers/buildURL');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar mergeConfig = require('./mergeConfig');\nvar buildFullPath = require('./buildFullPath');\nvar validator = require('../helpers/validator');\n\nvar validators = validator.validators;\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n // Set config.method\n if (config.method) {\n config.method = config.method.toLowerCase();\n } else if (this.defaults.method) {\n config.method = this.defaults.method.toLowerCase();\n } else {\n config.method = 'get';\n }\n\n var transitional = config.transitional;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n // filter out skipped interceptors\n var requestInterceptorChain = [];\n var synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n var responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n var promise;\n\n if (!synchronousRequestInterceptors) {\n var chain = [dispatchRequest, undefined];\n\n Array.prototype.unshift.apply(chain, requestInterceptorChain);\n chain = chain.concat(responseInterceptorChain);\n\n promise = Promise.resolve(config);\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n }\n\n\n var newConfig = config;\n while (requestInterceptorChain.length) {\n var onFulfilled = requestInterceptorChain.shift();\n var onRejected = requestInterceptorChain.shift();\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected(error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest(newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n while (responseInterceptorChain.length) {\n promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift());\n }\n\n return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n config = mergeConfig(this.defaults, config);\n var fullPath = buildFullPath(config.baseURL, config.url);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url: url,\n data: data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nmodule.exports = Axios;\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n response && (this.response = response);\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: this.config,\n code: this.code,\n status: this.response && this.response.status ? this.response.status : null\n };\n }\n});\n\nvar prototype = AxiosError.prototype;\nvar descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED'\n// eslint-disable-next-line func-names\n].forEach(function(code) {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = function(error, code, config, request, response, customProps) {\n var axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n });\n\n AxiosError.call(axiosError, error.message, code, config, request, response);\n\n axiosError.name = error.name;\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nmodule.exports = AxiosError;\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n","'use strict';\n\nvar isAbsoluteURL = require('../helpers/isAbsoluteURL');\nvar combineURLs = require('../helpers/combineURLs');\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n * @returns {string} The combined full path\n */\nmodule.exports = function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\nvar CanceledError = require('../cancel/CanceledError');\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError();\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n // Ensure headers exist\n config.headers = config.headers || {};\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n var adapter = config.adapter || defaults.adapter;\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n response.data,\n response.headers,\n config.transformResponse\n );\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n reason.response.data,\n reason.response.headers,\n config.transformResponse\n );\n }\n }\n\n return Promise.reject(reason);\n });\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n var config = {};\n\n function getMergedValue(target, source) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge(target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(config1[prop], config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(undefined, config2[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(undefined, config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(prop) {\n if (prop in config2) {\n return getMergedValue(config1[prop], config2[prop]);\n } else if (prop in config1) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n var mergeMap = {\n 'url': valueFromConfig2,\n 'method': valueFromConfig2,\n 'data': valueFromConfig2,\n 'baseURL': defaultToConfig2,\n 'transformRequest': defaultToConfig2,\n 'transformResponse': defaultToConfig2,\n 'paramsSerializer': defaultToConfig2,\n 'timeout': defaultToConfig2,\n 'timeoutMessage': defaultToConfig2,\n 'withCredentials': defaultToConfig2,\n 'adapter': defaultToConfig2,\n 'responseType': defaultToConfig2,\n 'xsrfCookieName': defaultToConfig2,\n 'xsrfHeaderName': defaultToConfig2,\n 'onUploadProgress': defaultToConfig2,\n 'onDownloadProgress': defaultToConfig2,\n 'decompress': defaultToConfig2,\n 'maxContentLength': defaultToConfig2,\n 'maxBodyLength': defaultToConfig2,\n 'beforeRedirect': defaultToConfig2,\n 'transport': defaultToConfig2,\n 'httpAgent': defaultToConfig2,\n 'httpsAgent': defaultToConfig2,\n 'cancelToken': defaultToConfig2,\n 'socketPath': defaultToConfig2,\n 'responseEncoding': defaultToConfig2,\n 'validateStatus': mergeDirectKeys\n };\n\n utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) {\n var merge = mergeMap[prop] || mergeDeepProperties;\n var configValue = merge(prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n};\n","'use strict';\n\nvar AxiosError = require('./AxiosError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar defaults = require('../defaults');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n var context = this || defaults;\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn.call(context, data, headers);\n });\n\n return data;\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar normalizeHeaderName = require('../helpers/normalizeHeaderName');\nvar AxiosError = require('../core/AxiosError');\nvar transitionalDefaults = require('./transitional');\nvar toFormData = require('../helpers/toFormData');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('../adapters/xhr');\n } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n // For node use HTTP adapter\n adapter = require('../adapters/http');\n }\n return adapter;\n}\n\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nvar defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Accept');\n normalizeHeaderName(headers, 'Content-Type');\n\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n\n var isObjectPayload = utils.isObject(data);\n var contentType = headers && headers['Content-Type'];\n\n var isFileList;\n\n if ((isFileList = utils.isFileList(data)) || (isObjectPayload && contentType === 'multipart/form-data')) {\n var _FormData = this.env && this.env.FormData;\n return toFormData(isFileList ? {'files[]': data} : data, _FormData && new _FormData());\n } else if (isObjectPayload || contentType === 'application/json') {\n setContentTypeIfUnset(headers, 'application/json');\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n var transitional = this.transitional || defaults.transitional;\n var silentJSONParsing = transitional && transitional.silentJSONParsing;\n var forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n var strictJSONParsing = !silentJSONParsing && this.responseType === 'json';\n\n if (strictJSONParsing || (forcedJSONParsing && utils.isString(data) && data.length)) {\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: require('./env/FormData')\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n","'use strict';\n\nmodule.exports = {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","module.exports = {\n \"version\": \"0.27.2\"\n};","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n var hashmarkIndex = url.indexOf('#');\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nmodule.exports = function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};\n","// eslint-disable-next-line strict\nmodule.exports = null;\n","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nmodule.exports = function parseProtocol(url) {\n var match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n};\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Convert a data object to FormData\n * @param {Object} obj\n * @param {?Object} [formData]\n * @returns {Object}\n **/\n\nfunction toFormData(obj, formData) {\n // eslint-disable-next-line no-param-reassign\n formData = formData || new FormData();\n\n var stack = [];\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n function build(data, parentKey) {\n if (utils.isPlainObject(data) || utils.isArray(data)) {\n if (stack.indexOf(data) !== -1) {\n throw Error('Circular reference detected in ' + parentKey);\n }\n\n stack.push(data);\n\n utils.forEach(data, function each(value, key) {\n if (utils.isUndefined(value)) return;\n var fullKey = parentKey ? parentKey + '.' + key : key;\n var arr;\n\n if (value && !parentKey && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (utils.endsWith(key, '[]') && (arr = utils.toArray(value))) {\n // eslint-disable-next-line func-names\n arr.forEach(function(el) {\n !utils.isUndefined(el) && formData.append(fullKey, convertValue(el));\n });\n return;\n }\n }\n\n build(value, fullKey);\n });\n\n stack.pop();\n } else {\n formData.append(parentKey, convertValue(data));\n }\n }\n\n build(obj);\n\n return formData;\n}\n\nmodule.exports = toFormData;\n","'use strict';\n\nvar VERSION = require('../env/data').version;\nvar AxiosError = require('../core/AxiosError');\n\nvar validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nvar deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return function(value, opt, opts) {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\n/**\n * Assert object's properties type\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n var keys = Object.keys(options);\n var i = keys.length;\n while (i-- > 0) {\n var opt = keys[i];\n var validator = schema[opt];\n if (validator) {\n var value = options[opt];\n var result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nmodule.exports = {\n assertOptions: assertOptions,\n validators: validators\n};\n","'use strict';\n\nvar bind = require('./helpers/bind');\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n// eslint-disable-next-line func-names\nvar kindOf = (function(cache) {\n // eslint-disable-next-line func-names\n return function(thing) {\n var str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n };\n})(Object.create(null));\n\nfunction kindOfTest(type) {\n type = type.toLowerCase();\n return function isKindOf(thing) {\n return kindOf(thing) === type;\n };\n}\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return Array.isArray(val);\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nvar isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {Object} val The value to test\n * @return {boolean} True if value is a plain Object, otherwise false\n */\nfunction isPlainObject(val) {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n var prototype = Object.getPrototypeOf(val);\n return prototype === null || prototype === Object.prototype;\n}\n\n/**\n * Determine if a value is a Date\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nvar isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nvar isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nvar isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nvar isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} thing The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(thing) {\n var pattern = '[object FormData]';\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) ||\n toString.call(thing) === pattern ||\n (isFunction(thing.toString) && thing.toString() === pattern)\n );\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nvar isURLSearchParams = kindOfTest('URLSearchParams');\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n navigator.product === 'NativeScript' ||\n navigator.product === 'NS')) {\n return false;\n }\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (isPlainObject(result[key]) && isPlainObject(val)) {\n result[key] = merge(result[key], val);\n } else if (isPlainObject(val)) {\n result[key] = merge({}, val);\n } else if (isArray(val)) {\n result[key] = val.slice();\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n * @return {string} content value without BOM\n */\nfunction stripBOM(content) {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n */\n\nfunction inherits(constructor, superConstructor, props, descriptors) {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function} [filter]\n * @returns {Object}\n */\n\nfunction toFlatObject(sourceObj, destObj, filter) {\n var props;\n var i;\n var prop;\n var merged = {};\n\n destObj = destObj || {};\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if (!merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = Object.getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/*\n * determines whether a string ends with the characters of a specified string\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n * @returns {boolean}\n */\nfunction endsWith(str, searchString, position) {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n var lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object\n * @param {*} [thing]\n * @returns {Array}\n */\nfunction toArray(thing) {\n if (!thing) return null;\n var i = thing.length;\n if (isUndefined(i)) return null;\n var arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n// eslint-disable-next-line func-names\nvar isTypedArray = (function(TypedArray) {\n // eslint-disable-next-line func-names\n return function(thing) {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && Object.getPrototypeOf(Uint8Array));\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isPlainObject: isPlainObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n extend: extend,\n trim: trim,\n stripBOM: stripBOM,\n inherits: inherits,\n toFlatObject: toFlatObject,\n kindOf: kindOf,\n kindOfTest: kindOfTest,\n endsWith: endsWith,\n toArray: toArray,\n isTypedArray: isTypedArray,\n isFileList: isFileList\n};\n"],"sourceRoot":""} \ No newline at end of file diff --git a/js_css/boxicons.css b/js_css/boxicons.css new file mode 100644 index 0000000..c4fe27a --- /dev/null +++ b/js_css/boxicons.css @@ -0,0 +1,5425 @@ +@font-face +{ + font-family: 'boxicons'; + font-weight: normal; + font-style: normal; + + src: url('/js_css/fount/boxicons.ttf'); + src: url('/js_css/fount/boxicons.eot') format('embedded-opentype'), + url('/js_css/fount/boxicons.woff2') format('woff2'), + url('/js_css/fount/boxicons.woff') format('woff'), + url('/js_css/fount/boxicons.ttf') format('truetype'), + url('/js_css/fount/boxicons.svg?#boxicons') format('svg'); +} +.bx +{ + font-family: 'boxicons' !important; + font-weight: normal; + font-style: normal; + font-variant: normal; + line-height: 1; + text-rendering: auto; + display: inline-block; + + text-transform: none; + + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.bx-ul +{ + margin-left: 2em; + padding-left: 0; + + list-style: none; +} +.bx-ul > li +{ + position: relative; +} +.bx-ul .bx +{ + font-size: inherit; + line-height: inherit; + + position: absolute; + left: -2em; + + width: 2em; + + text-align: center; +} +@-webkit-keyframes spin +{ + 0% + { + -webkit-transform: rotate(0); + transform: rotate(0); + } + 100% + { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@keyframes spin +{ + 0% + { + -webkit-transform: rotate(0); + transform: rotate(0); + } + 100% + { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@-webkit-keyframes burst +{ + 0% + { + -webkit-transform: scale(1); + transform: scale(1); + + opacity: 1; + } + 90% + { + -webkit-transform: scale(1.5); + transform: scale(1.5); + + opacity: 0; + } +} +@keyframes burst +{ + 0% + { + -webkit-transform: scale(1); + transform: scale(1); + + opacity: 1; + } + 90% + { + -webkit-transform: scale(1.5); + transform: scale(1.5); + + opacity: 0; + } +} +@-webkit-keyframes flashing +{ + 0% + { + opacity: 1; + } + 45% + { + opacity: 0; + } + 90% + { + opacity: 1; + } +} +@keyframes flashing +{ + 0% + { + opacity: 1; + } + 45% + { + opacity: 0; + } + 90% + { + opacity: 1; + } +} +@-webkit-keyframes fade-left +{ + 0% + { + -webkit-transform: translateX(0); + transform: translateX(0); + + opacity: 1; + } + 75% + { + -webkit-transform: translateX(-20px); + transform: translateX(-20px); + + opacity: 0; + } +} +@keyframes fade-left +{ + 0% + { + -webkit-transform: translateX(0); + transform: translateX(0); + + opacity: 1; + } + 75% + { + -webkit-transform: translateX(-20px); + transform: translateX(-20px); + + opacity: 0; + } +} +@-webkit-keyframes fade-right +{ + 0% + { + -webkit-transform: translateX(0); + transform: translateX(0); + + opacity: 1; + } + 75% + { + -webkit-transform: translateX(20px); + transform: translateX(20px); + + opacity: 0; + } +} +@keyframes fade-right +{ + 0% + { + -webkit-transform: translateX(0); + transform: translateX(0); + + opacity: 1; + } + 75% + { + -webkit-transform: translateX(20px); + transform: translateX(20px); + + opacity: 0; + } +} +@-webkit-keyframes fade-up +{ + 0% + { + -webkit-transform: translateY(0); + transform: translateY(0); + + opacity: 1; + } + 75% + { + -webkit-transform: translateY(-20px); + transform: translateY(-20px); + + opacity: 0; + } +} +@keyframes fade-up +{ + 0% + { + -webkit-transform: translateY(0); + transform: translateY(0); + + opacity: 1; + } + 75% + { + -webkit-transform: translateY(-20px); + transform: translateY(-20px); + + opacity: 0; + } +} +@-webkit-keyframes fade-down +{ + 0% + { + -webkit-transform: translateY(0); + transform: translateY(0); + + opacity: 1; + } + 75% + { + -webkit-transform: translateY(20px); + transform: translateY(20px); + + opacity: 0; + } +} +@keyframes fade-down +{ + 0% + { + -webkit-transform: translateY(0); + transform: translateY(0); + + opacity: 1; + } + 75% + { + -webkit-transform: translateY(20px); + transform: translateY(20px); + + opacity: 0; + } +} +@-webkit-keyframes tada +{ + from + { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 10%, + 20% + { + -webkit-transform: scale3d(.95, .95, .95) rotate3d(0, 0, 1, -10deg); + transform: scale3d(.95, .95, .95) rotate3d(0, 0, 1, -10deg); + } + + 30%, + 50%, + 70%, + 90% + { + -webkit-transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, 10deg); + transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, 10deg); + } + + 40%, + 60%, + 80% + { + -webkit-transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, -10deg); + transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, -10deg); + } + + to + { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +@keyframes tada +{ + from + { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 10%, + 20% + { + -webkit-transform: scale3d(.95, .95, .95) rotate3d(0, 0, 1, -10deg); + transform: scale3d(.95, .95, .95) rotate3d(0, 0, 1, -10deg); + } + + 30%, + 50%, + 70%, + 90% + { + -webkit-transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, 10deg); + transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, 10deg); + } + + 40%, + 60%, + 80% + { + -webkit-transform: rotate3d(0, 0, 1, -10deg); + transform: rotate3d(0, 0, 1, -10deg); + } + + to + { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} +.bx-spin +{ + -webkit-animation: spin 2s linear infinite; + animation: spin 2s linear infinite; +} +.bx-spin-hover:hover +{ + -webkit-animation: spin 2s linear infinite; + animation: spin 2s linear infinite; +} + +.bx-tada +{ + -webkit-animation: tada 1.5s ease infinite; + animation: tada 1.5s ease infinite; +} +.bx-tada-hover:hover +{ + -webkit-animation: tada 1.5s ease infinite; + animation: tada 1.5s ease infinite; +} + +.bx-flashing +{ + -webkit-animation: flashing 1.5s infinite linear; + animation: flashing 1.5s infinite linear; +} +.bx-flashing-hover:hover +{ + -webkit-animation: flashing 1.5s infinite linear; + animation: flashing 1.5s infinite linear; +} + +.bx-burst +{ + -webkit-animation: burst 1.5s infinite linear; + animation: burst 1.5s infinite linear; +} +.bx-burst-hover:hover +{ + -webkit-animation: burst 1.5s infinite linear; + animation: burst 1.5s infinite linear; +} +.bx-fade-up +{ + -webkit-animation: fade-up 1.5s infinite linear; + animation: fade-up 1.5s infinite linear; +} +.bx-fade-up-hover:hover +{ + -webkit-animation: fade-up 1.5s infinite linear; + animation: fade-up 1.5s infinite linear; +} +.bx-fade-down +{ + -webkit-animation: fade-down 1.5s infinite linear; + animation: fade-down 1.5s infinite linear; +} +.bx-fade-down-hover:hover +{ + -webkit-animation: fade-down 1.5s infinite linear; + animation: fade-down 1.5s infinite linear; +} +.bx-fade-left +{ + -webkit-animation: fade-left 1.5s infinite linear; + animation: fade-left 1.5s infinite linear; +} +.bx-fade-left-hover:hover +{ + -webkit-animation: fade-left 1.5s infinite linear; + animation: fade-left 1.5s infinite linear; +} +.bx-fade-right +{ + -webkit-animation: fade-right 1.5s infinite linear; + animation: fade-right 1.5s infinite linear; +} +.bx-fade-right-hover:hover +{ + -webkit-animation: fade-right 1.5s infinite linear; + animation: fade-right 1.5s infinite linear; +} +.bx-xs +{ + font-size: 1rem!important; +} +.bx-sm +{ + font-size: 1.55rem!important; +} +.bx-md +{ + font-size: 2.25rem!important; +} +.bx-lg +{ + font-size: 3.0rem!important; +} +.bx-fw +{ + font-size: 1.2857142857em; + line-height: .8em; + + width: 1.2857142857em; + height: .8em; + margin-top: -.2em!important; + + vertical-align: middle; +} +.bx-pull-left +{ + float: left; + + margin-right: .3em!important; +} +.bx-pull-right +{ + float: right; + + margin-left: .3em!important; +} +.bx-rotate-90 +{ + transform: rotate(90deg); + + -ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=1)'; +} +.bx-rotate-180 +{ + transform: rotate(180deg); + + -ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=2)'; +} +.bx-rotate-270 +{ + transform: rotate(270deg); + + -ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=3)'; +} +.bx-flip-horizontal +{ + transform: scaleX(-1); + + -ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)'; +} +.bx-flip-vertical +{ + transform: scaleY(-1); + + -ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)'; +} +.bx-border +{ + padding: .25em; + + border: .07em solid rgba(0,0,0,.1); + border-radius: .25em; +} +.bx-border-circle +{ + padding: .25em; + + border: .07em solid rgba(0,0,0,.1); + border-radius: 50%; +} + + .bxs-balloon:before { + content: "\eb60"; + } + .bxs-castle:before { + content: "\eb79"; + } + .bxs-coffee-bean:before { + content: "\eb92"; + } + .bxs-objects-horizontal-center:before { + content: "\ebab"; + } + .bxs-objects-horizontal-left:before { + content: "\ebc4"; + } + .bxs-objects-horizontal-right:before { + content: "\ebdd"; + } + .bxs-objects-vertical-bottom:before { + content: "\ebf6"; + } + .bxs-objects-vertical-center:before { + content: "\ef40"; + } + .bxs-objects-vertical-top:before { + content: "\ef41"; + } + .bxs-pear:before { + content: "\ef42"; + } + .bxs-shield-minus:before { + content: "\ef43"; + } + .bxs-shield-plus:before { + content: "\ef44"; + } + .bxs-shower:before { + content: "\ef45"; + } + .bxs-sushi:before { + content: "\ef46"; + } + .bxs-universal-access:before { + content: "\ef47"; + } + .bx-child:before { + content: "\ef48"; + } + .bx-horizontal-left:before { + content: "\ef49"; + } + .bx-horizontal-right:before { + content: "\ef4a"; + } + .bx-objects-horizontal-center:before { + content: "\ef4b"; + } + .bx-objects-horizontal-left:before { + content: "\ef4c"; + } + .bx-objects-horizontal-right:before { + content: "\ef4d"; + } + .bx-objects-vertical-bottom:before { + content: "\ef4e"; + } + .bx-objects-vertical-center:before { + content: "\ef4f"; + } + .bx-objects-vertical-top:before { + content: "\ef50"; + } + .bx-rfid:before { + content: "\ef51"; + } + .bx-shield-minus:before { + content: "\ef52"; + } + .bx-shield-plus:before { + content: "\ef53"; + } + .bx-shower:before { + content: "\ef54"; + } + .bx-sushi:before { + content: "\ef55"; + } + .bx-universal-access:before { + content: "\ef56"; + } + .bx-vertical-bottom:before { + content: "\ef57"; + } + .bx-vertical-top:before { + content: "\ef58"; + } + .bxl-graphql:before { + content: "\ef59"; + } + .bxl-typescript:before { + content: "\ef5a"; + } + .bxs-color:before { + content: "\ef39"; + } + .bx-reflect-horizontal:before { + content: "\ef3a"; + } + .bx-reflect-vertical:before { + content: "\ef3b"; + } + .bx-color:before { + content: "\ef3c"; + } + .bxl-mongodb:before { + content: "\ef3d"; + } + .bxl-postgresql:before { + content: "\ef3e"; + } + .bxl-deezer:before { + content: "\ef3f"; + } + .bxs-hard-hat:before { + content: "\ef2a"; + } + .bxs-home-alt-2:before { + content: "\ef2b"; + } + .bxs-cheese:before { + content: "\ef2c"; + } + .bx-home-alt-2:before { + content: "\ef2d"; + } + .bx-hard-hat:before { + content: "\ef2e"; + } + .bx-cheese:before { + content: "\ef2f"; + } + .bx-cart-add:before { + content: "\ef30"; + } + .bx-cart-download:before { + content: "\ef31"; + } + .bx-no-signal:before { + content: "\ef32"; + } + .bx-signal-1:before { + content: "\ef33"; + } + .bx-signal-2:before { + content: "\ef34"; + } + .bx-signal-3:before { + content: "\ef35"; + } + .bx-signal-4:before { + content: "\ef36"; + } + .bx-signal-5:before { + content: "\ef37"; + } + .bxl-xing:before { + content: "\ef38"; + } + .bxl-meta:before { + content: "\ef27"; + } + .bx-lemon:before { + content: "\ef28"; + } + .bxs-lemon:before { + content: "\ef29"; + } + .bx-cricket-ball:before { + content: "\ef0c"; + } + .bx-baguette:before { + content: "\ef0d"; + } + .bx-bowl-hot:before { + content: "\ef0e"; + } + .bx-bowl-rice:before { + content: "\ef0f"; + } + .bx-cable-car:before { + content: "\ef10"; + } + .bx-candles:before { + content: "\ef11"; + } + .bx-circle-half:before { + content: "\ef12"; + } + .bx-circle-quarter:before { + content: "\ef13"; + } + .bx-circle-three-quarter:before { + content: "\ef14"; + } + .bx-cross:before { + content: "\ef15"; + } + .bx-fork:before { + content: "\ef16"; + } + .bx-knife:before { + content: "\ef17"; + } + .bx-money-withdraw:before { + content: "\ef18"; + } + .bx-popsicle:before { + content: "\ef19"; + } + .bx-scatter-chart:before { + content: "\ef1a"; + } + .bxs-baguette:before { + content: "\ef1b"; + } + .bxs-bowl-hot:before { + content: "\ef1c"; + } + .bxs-bowl-rice:before { + content: "\ef1d"; + } + .bxs-cable-car:before { + content: "\ef1e"; + } + .bxs-circle-half:before { + content: "\ef1f"; + } + .bxs-circle-quarter:before { + content: "\ef20"; + } + .bxs-circle-three-quarter:before { + content: "\ef21"; + } + .bxs-cricket-ball:before { + content: "\ef22"; + } + .bxs-invader:before { + content: "\ef23"; + } + .bx-male-female:before { + content: "\ef24"; + } + .bxs-popsicle:before { + content: "\ef25"; + } + .bxs-tree-alt:before { + content: "\ef26"; + } + .bxl-venmo:before { + content: "\e900"; + } + .bxl-upwork:before { + content: "\e901"; + } + .bxl-netlify:before { + content: "\e902"; + } + .bxl-java:before { + content: "\e903"; + } + .bxl-heroku:before { + content: "\e904"; + } + .bxl-go-lang:before { + content: "\e905"; + } + .bxl-gmail:before { + content: "\e906"; + } + .bxl-flask:before { + content: "\e907"; + } + .bxl-99designs:before { + content: "\e908"; + } + .bxl-500px:before { + content: "\e909"; + } + .bxl-adobe:before { + content: "\e90a"; + } + .bxl-airbnb:before { + content: "\e90b"; + } + .bxl-algolia:before { + content: "\e90c"; + } + .bxl-amazon:before { + content: "\e90d"; + } + .bxl-android:before { + content: "\e90e"; + } + .bxl-angular:before { + content: "\e90f"; + } + .bxl-apple:before { + content: "\e910"; + } + .bxl-audible:before { + content: "\e911"; + } + .bxl-aws:before { + content: "\e912"; + } + .bxl-baidu:before { + content: "\e913"; + } + .bxl-behance:before { + content: "\e914"; + } + .bxl-bing:before { + content: "\e915"; + } + .bxl-bitcoin:before { + content: "\e916"; + } + .bxl-blender:before { + content: "\e917"; + } + .bxl-blogger:before { + content: "\e918"; + } + .bxl-bootstrap:before { + content: "\e919"; + } + .bxl-chrome:before { + content: "\e91a"; + } + .bxl-codepen:before { + content: "\e91b"; + } + .bxl-c-plus-plus:before { + content: "\e91c"; + } + .bxl-creative-commons:before { + content: "\e91d"; + } + .bxl-css3:before { + content: "\e91e"; + } + .bxl-dailymotion:before { + content: "\e91f"; + } + .bxl-deviantart:before { + content: "\e920"; + } + .bxl-dev-to:before { + content: "\e921"; + } + .bxl-digg:before { + content: "\e922"; + } + .bxl-digitalocean:before { + content: "\e923"; + } + .bxl-discord:before { + content: "\e924"; + } + .bxl-discord-alt:before { + content: "\e925"; + } + .bxl-discourse:before { + content: "\e926"; + } + .bxl-django:before { + content: "\e927"; + } + .bxl-docker:before { + content: "\e928"; + } + .bxl-dribbble:before { + content: "\e929"; + } + .bxl-dropbox:before { + content: "\e92a"; + } + .bxl-drupal:before { + content: "\e92b"; + } + .bxl-ebay:before { + content: "\e92c"; + } + .bxl-edge:before { + content: "\e92d"; + } + .bxl-etsy:before { + content: "\e92e"; + } + .bxl-facebook:before { + content: "\e92f"; + } + .bxl-facebook-circle:before { + content: "\e930"; + } + .bxl-facebook-square:before { + content: "\e931"; + } + .bxl-figma:before { + content: "\e932"; + } + .bxl-firebase:before { + content: "\e933"; + } + .bxl-firefox:before { + content: "\e934"; + } + .bxl-flickr:before { + content: "\e935"; + } + .bxl-flickr-square:before { + content: "\e936"; + } + .bxl-flutter:before { + content: "\e937"; + } + .bxl-foursquare:before { + content: "\e938"; + } + .bxl-git:before { + content: "\e939"; + } + .bxl-github:before { + content: "\e93a"; + } + .bxl-gitlab:before { + content: "\e93b"; + } + .bxl-google:before { + content: "\e93c"; + } + .bxl-google-cloud:before { + content: "\e93d"; + } + .bxl-google-plus:before { + content: "\e93e"; + } + .bxl-google-plus-circle:before { + content: "\e93f"; + } + .bxl-html5:before { + content: "\e940"; + } + .bxl-imdb:before { + content: "\e941"; + } + .bxl-instagram:before { + content: "\e942"; + } + .bxl-instagram-alt:before { + content: "\e943"; + } + .bxl-internet-explorer:before { + content: "\e944"; + } + .bxl-invision:before { + content: "\e945"; + } + .bxl-javascript:before { + content: "\e946"; + } + .bxl-joomla:before { + content: "\e947"; + } + .bxl-jquery:before { + content: "\e948"; + } + .bxl-jsfiddle:before { + content: "\e949"; + } + .bxl-kickstarter:before { + content: "\e94a"; + } + .bxl-kubernetes:before { + content: "\e94b"; + } + .bxl-less:before { + content: "\e94c"; + } + .bxl-linkedin:before { + content: "\e94d"; + } + .bxl-linkedin-square:before { + content: "\e94e"; + } + .bxl-magento:before { + content: "\e94f"; + } + .bxl-mailchimp:before { + content: "\e950"; + } + .bxl-markdown:before { + content: "\e951"; + } + .bxl-mastercard:before { + content: "\e952"; + } + .bxl-mastodon:before { + content: "\e953"; + } + .bxl-medium:before { + content: "\e954"; + } + .bxl-medium-old:before { + content: "\e955"; + } + .bxl-medium-square:before { + content: "\e956"; + } + .bxl-messenger:before { + content: "\e957"; + } + .bxl-microsoft:before { + content: "\e958"; + } + .bxl-microsoft-teams:before { + content: "\e959"; + } + .bxl-nodejs:before { + content: "\e95a"; + } + .bxl-ok-ru:before { + content: "\e95b"; + } + .bxl-opera:before { + content: "\e95c"; + } + .bxl-patreon:before { + content: "\e95d"; + } + .bxl-paypal:before { + content: "\e95e"; + } + .bxl-periscope:before { + content: "\e95f"; + } + .bxl-php:before { + content: "\e960"; + } + .bxl-pinterest:before { + content: "\e961"; + } + .bxl-pinterest-alt:before { + content: "\e962"; + } + .bxl-play-store:before { + content: "\e963"; + } + .bxl-pocket:before { + content: "\e964"; + } + .bxl-product-hunt:before { + content: "\e965"; + } + .bxl-python:before { + content: "\e966"; + } + .bxl-quora:before { + content: "\e967"; + } + .bxl-react:before { + content: "\e968"; + } + .bxl-redbubble:before { + content: "\e969"; + } + .bxl-reddit:before { + content: "\e96a"; + } + .bxl-redux:before { + content: "\e96b"; + } + .bxl-sass:before { + content: "\e96c"; + } + .bxl-shopify:before { + content: "\e96d"; + } + .bxl-sketch:before { + content: "\e96e"; + } + .bxl-skype:before { + content: "\e96f"; + } + .bxl-slack:before { + content: "\e970"; + } + .bxl-slack-old:before { + content: "\e971"; + } + .bxl-snapchat:before { + content: "\e972"; + } + .bxl-soundcloud:before { + content: "\e973"; + } + .bxl-spotify:before { + content: "\e974"; + } + .bxl-spring-boot:before { + content: "\e975"; + } + .bxl-squarespace:before { + content: "\e976"; + } + .bxl-stack-overflow:before { + content: "\e977"; + } + .bxl-steam:before { + content: "\e978"; + } + .bxl-stripe:before { + content: "\e979"; + } + .bxl-tailwind-css:before { + content: "\e97a"; + } + .bxl-telegram:before { + content: "\e97b"; + } + .bxl-tiktok:before { + content: "\e97c"; + } + .bxl-trello:before { + content: "\e97d"; + } + .bxl-trip-advisor:before { + content: "\e97e"; + } + .bxl-tumblr:before { + content: "\e97f"; + } + .bxl-tux:before { + content: "\e980"; + } + .bxl-twitch:before { + content: "\e981"; + } + .bxl-twitter:before { + content: "\e982"; + } + .bxl-unity:before { + content: "\e983"; + } + .bxl-unsplash:before { + content: "\e984"; + } + .bxl-vimeo:before { + content: "\e985"; + } + .bxl-visa:before { + content: "\e986"; + } + .bxl-visual-studio:before { + content: "\e987"; + } + .bxl-vk:before { + content: "\e988"; + } + .bxl-vuejs:before { + content: "\e989"; + } + .bxl-whatsapp:before { + content: "\e98a"; + } + .bxl-whatsapp-square:before { + content: "\e98b"; + } + .bxl-wikipedia:before { + content: "\e98c"; + } + .bxl-windows:before { + content: "\e98d"; + } + .bxl-wix:before { + content: "\e98e"; + } + .bxl-wordpress:before { + content: "\e98f"; + } + .bxl-yahoo:before { + content: "\e990"; + } + .bxl-yelp:before { + content: "\e991"; + } + .bxl-youtube:before { + content: "\e992"; + } + .bxl-zoom:before { + content: "\e993"; + } + .bx-collapse-alt:before { + content: "\e994"; + } + .bx-collapse-horizontal:before { + content: "\e995"; + } + .bx-collapse-vertical:before { + content: "\e996"; + } + .bx-expand-horizontal:before { + content: "\e997"; + } + .bx-expand-vertical:before { + content: "\e998"; + } + .bx-injection:before { + content: "\e999"; + } + .bx-leaf:before { + content: "\e99a"; + } + .bx-math:before { + content: "\e99b"; + } + .bx-party:before { + content: "\e99c"; + } + .bx-abacus:before { + content: "\e99d"; + } + .bx-accessibility:before { + content: "\e99e"; + } + .bx-add-to-queue:before { + content: "\e99f"; + } + .bx-adjust:before { + content: "\e9a0"; + } + .bx-alarm:before { + content: "\e9a1"; + } + .bx-alarm-add:before { + content: "\e9a2"; + } + .bx-alarm-exclamation:before { + content: "\e9a3"; + } + .bx-alarm-off:before { + content: "\e9a4"; + } + .bx-alarm-snooze:before { + content: "\e9a5"; + } + .bx-album:before { + content: "\e9a6"; + } + .bx-align-justify:before { + content: "\e9a7"; + } + .bx-align-left:before { + content: "\e9a8"; + } + .bx-align-middle:before { + content: "\e9a9"; + } + .bx-align-right:before { + content: "\e9aa"; + } + .bx-analyse:before { + content: "\e9ab"; + } + .bx-anchor:before { + content: "\e9ac"; + } + .bx-angry:before { + content: "\e9ad"; + } + .bx-aperture:before { + content: "\e9ae"; + } + .bx-arch:before { + content: "\e9af"; + } + .bx-archive:before { + content: "\e9b0"; + } + .bx-archive-in:before { + content: "\e9b1"; + } + .bx-archive-out:before { + content: "\e9b2"; + } + .bx-area:before { + content: "\e9b3"; + } + .bx-arrow-back:before { + content: "\e9b4"; + } + .bx-arrow-from-bottom:before { + content: "\e9b5"; + } + .bx-arrow-from-left:before { + content: "\e9b6"; + } + .bx-arrow-from-right:before { + content: "\e9b7"; + } + .bx-arrow-from-top:before { + content: "\e9b8"; + } + .bx-arrow-to-bottom:before { + content: "\e9b9"; + } + .bx-arrow-to-left:before { + content: "\e9ba"; + } + .bx-arrow-to-right:before { + content: "\e9bb"; + } + .bx-arrow-to-top:before { + content: "\e9bc"; + } + .bx-at:before { + content: "\e9bd"; + } + .bx-atom:before { + content: "\e9be"; + } + .bx-award:before { + content: "\e9bf"; + } + .bx-badge:before { + content: "\e9c0"; + } + .bx-badge-check:before { + content: "\e9c1"; + } + .bx-ball:before { + content: "\e9c2"; + } + .bx-band-aid:before { + content: "\e9c3"; + } + .bx-bar-chart:before { + content: "\e9c4"; + } + .bx-bar-chart-alt:before { + content: "\e9c5"; + } + .bx-bar-chart-alt-2:before { + content: "\e9c6"; + } + .bx-bar-chart-square:before { + content: "\e9c7"; + } + .bx-barcode:before { + content: "\e9c8"; + } + .bx-barcode-reader:before { + content: "\e9c9"; + } + .bx-baseball:before { + content: "\e9ca"; + } + .bx-basket:before { + content: "\e9cb"; + } + .bx-basketball:before { + content: "\e9cc"; + } + .bx-bath:before { + content: "\e9cd"; + } + .bx-battery:before { + content: "\e9ce"; + } + .bx-bed:before { + content: "\e9cf"; + } + .bx-been-here:before { + content: "\e9d0"; + } + .bx-beer:before { + content: "\e9d1"; + } + .bx-bell:before { + content: "\e9d2"; + } + .bx-bell-minus:before { + content: "\e9d3"; + } + .bx-bell-off:before { + content: "\e9d4"; + } + .bx-bell-plus:before { + content: "\e9d5"; + } + .bx-bible:before { + content: "\e9d6"; + } + .bx-bitcoin:before { + content: "\e9d7"; + } + .bx-blanket:before { + content: "\e9d8"; + } + .bx-block:before { + content: "\e9d9"; + } + .bx-bluetooth:before { + content: "\e9da"; + } + .bx-body:before { + content: "\e9db"; + } + .bx-bold:before { + content: "\e9dc"; + } + .bx-bolt-circle:before { + content: "\e9dd"; + } + .bx-bomb:before { + content: "\e9de"; + } + .bx-bone:before { + content: "\e9df"; + } + .bx-bong:before { + content: "\e9e0"; + } + .bx-book:before { + content: "\e9e1"; + } + .bx-book-add:before { + content: "\e9e2"; + } + .bx-book-alt:before { + content: "\e9e3"; + } + .bx-book-bookmark:before { + content: "\e9e4"; + } + .bx-book-content:before { + content: "\e9e5"; + } + .bx-book-heart:before { + content: "\e9e6"; + } + .bx-bookmark:before { + content: "\e9e7"; + } + .bx-bookmark-alt:before { + content: "\e9e8"; + } + .bx-bookmark-alt-minus:before { + content: "\e9e9"; + } + .bx-bookmark-alt-plus:before { + content: "\e9ea"; + } + .bx-bookmark-heart:before { + content: "\e9eb"; + } + .bx-bookmark-minus:before { + content: "\e9ec"; + } + .bx-bookmark-plus:before { + content: "\e9ed"; + } + .bx-bookmarks:before { + content: "\e9ee"; + } + .bx-book-open:before { + content: "\e9ef"; + } + .bx-book-reader:before { + content: "\e9f0"; + } + .bx-border-all:before { + content: "\e9f1"; + } + .bx-border-bottom:before { + content: "\e9f2"; + } + .bx-border-inner:before { + content: "\e9f3"; + } + .bx-border-left:before { + content: "\e9f4"; + } + .bx-border-none:before { + content: "\e9f5"; + } + .bx-border-outer:before { + content: "\e9f6"; + } + .bx-border-radius:before { + content: "\e9f7"; + } + .bx-border-right:before { + content: "\e9f8"; + } + .bx-border-top:before { + content: "\e9f9"; + } + .bx-bot:before { + content: "\e9fa"; + } + .bx-bowling-ball:before { + content: "\e9fb"; + } + .bx-box:before { + content: "\e9fc"; + } + .bx-bracket:before { + content: "\e9fd"; + } + .bx-braille:before { + content: "\e9fe"; + } + .bx-brain:before { + content: "\e9ff"; + } + .bx-briefcase:before { + content: "\ea00"; + } + .bx-briefcase-alt:before { + content: "\ea01"; + } + .bx-briefcase-alt-2:before { + content: "\ea02"; + } + .bx-brightness:before { + content: "\ea03"; + } + .bx-brightness-half:before { + content: "\ea04"; + } + .bx-broadcast:before { + content: "\ea05"; + } + .bx-brush:before { + content: "\ea06"; + } + .bx-brush-alt:before { + content: "\ea07"; + } + .bx-bug:before { + content: "\ea08"; + } + .bx-bug-alt:before { + content: "\ea09"; + } + .bx-building:before { + content: "\ea0a"; + } + .bx-building-house:before { + content: "\ea0b"; + } + .bx-buildings:before { + content: "\ea0c"; + } + .bx-bulb:before { + content: "\ea0d"; + } + .bx-bullseye:before { + content: "\ea0e"; + } + .bx-buoy:before { + content: "\ea0f"; + } + .bx-bus:before { + content: "\ea10"; + } + .bx-bus-school:before { + content: "\ea11"; + } + .bx-cabinet:before { + content: "\ea12"; + } + .bx-cake:before { + content: "\ea13"; + } + .bx-calculator:before { + content: "\ea14"; + } + .bx-calendar:before { + content: "\ea15"; + } + .bx-calendar-alt:before { + content: "\ea16"; + } + .bx-calendar-check:before { + content: "\ea17"; + } + .bx-calendar-edit:before { + content: "\ea18"; + } + .bx-calendar-event:before { + content: "\ea19"; + } + .bx-calendar-exclamation:before { + content: "\ea1a"; + } + .bx-calendar-heart:before { + content: "\ea1b"; + } + .bx-calendar-minus:before { + content: "\ea1c"; + } + .bx-calendar-plus:before { + content: "\ea1d"; + } + .bx-calendar-star:before { + content: "\ea1e"; + } + .bx-calendar-week:before { + content: "\ea1f"; + } + .bx-calendar-x:before { + content: "\ea20"; + } + .bx-camera:before { + content: "\ea21"; + } + .bx-camera-home:before { + content: "\ea22"; + } + .bx-camera-movie:before { + content: "\ea23"; + } + .bx-camera-off:before { + content: "\ea24"; + } + .bx-capsule:before { + content: "\ea25"; + } + .bx-captions:before { + content: "\ea26"; + } + .bx-car:before { + content: "\ea27"; + } + .bx-card:before { + content: "\ea28"; + } + .bx-caret-down:before { + content: "\ea29"; + } + .bx-caret-down-circle:before { + content: "\ea2a"; + } + .bx-caret-down-square:before { + content: "\ea2b"; + } + .bx-caret-left:before { + content: "\ea2c"; + } + .bx-caret-left-circle:before { + content: "\ea2d"; + } + .bx-caret-left-square:before { + content: "\ea2e"; + } + .bx-caret-right:before { + content: "\ea2f"; + } + .bx-caret-right-circle:before { + content: "\ea30"; + } + .bx-caret-right-square:before { + content: "\ea31"; + } + .bx-caret-up:before { + content: "\ea32"; + } + .bx-caret-up-circle:before { + content: "\ea33"; + } + .bx-caret-up-square:before { + content: "\ea34"; + } + .bx-carousel:before { + content: "\ea35"; + } + .bx-cart:before { + content: "\ea36"; + } + .bx-cart-alt:before { + content: "\ea37"; + } + .bx-cast:before { + content: "\ea38"; + } + .bx-category:before { + content: "\ea39"; + } + .bx-category-alt:before { + content: "\ea3a"; + } + .bx-cctv:before { + content: "\ea3b"; + } + .bx-certification:before { + content: "\ea3c"; + } + .bx-chair:before { + content: "\ea3d"; + } + .bx-chalkboard:before { + content: "\ea3e"; + } + .bx-chart:before { + content: "\ea3f"; + } + .bx-chat:before { + content: "\ea40"; + } + .bx-check:before { + content: "\ea41"; + } + .bx-checkbox:before { + content: "\ea42"; + } + .bx-checkbox-checked:before { + content: "\ea43"; + } + .bx-checkbox-minus:before { + content: "\ea44"; + } + .bx-checkbox-square:before { + content: "\ea45"; + } + .bx-check-circle:before { + content: "\ea46"; + } + .bx-check-double:before { + content: "\ea47"; + } + .bx-check-shield:before { + content: "\ea48"; + } + .bx-check-square:before { + content: "\ea49"; + } + .bx-chevron-down:before { + content: "\ea4a"; + } + .bx-chevron-down-circle:before { + content: "\ea4b"; + } + .bx-chevron-down-square:before { + content: "\ea4c"; + } + .bx-chevron-left:before { + content: "\ea4d"; + } + .bx-chevron-left-circle:before { + content: "\ea4e"; + } + .bx-chevron-left-square:before { + content: "\ea4f"; + } + .bx-chevron-right:before { + content: "\ea50"; + } + .bx-chevron-right-circle:before { + content: "\ea51"; + } + .bx-chevron-right-square:before { + content: "\ea52"; + } + .bx-chevrons-down:before { + content: "\ea53"; + } + .bx-chevrons-left:before { + content: "\ea54"; + } + .bx-chevrons-right:before { + content: "\ea55"; + } + .bx-chevrons-up:before { + content: "\ea56"; + } + .bx-chevron-up:before { + content: "\ea57"; + } + .bx-chevron-up-circle:before { + content: "\ea58"; + } + .bx-chevron-up-square:before { + content: "\ea59"; + } + .bx-chip:before { + content: "\ea5a"; + } + .bx-church:before { + content: "\ea5b"; + } + .bx-circle:before { + content: "\ea5c"; + } + .bx-clinic:before { + content: "\ea5d"; + } + .bx-clipboard:before { + content: "\ea5e"; + } + .bx-closet:before { + content: "\ea5f"; + } + .bx-cloud:before { + content: "\ea60"; + } + .bx-cloud-download:before { + content: "\ea61"; + } + .bx-cloud-drizzle:before { + content: "\ea62"; + } + .bx-cloud-lightning:before { + content: "\ea63"; + } + .bx-cloud-light-rain:before { + content: "\ea64"; + } + .bx-cloud-rain:before { + content: "\ea65"; + } + .bx-cloud-snow:before { + content: "\ea66"; + } + .bx-cloud-upload:before { + content: "\ea67"; + } + .bx-code:before { + content: "\ea68"; + } + .bx-code-alt:before { + content: "\ea69"; + } + .bx-code-block:before { + content: "\ea6a"; + } + .bx-code-curly:before { + content: "\ea6b"; + } + .bx-coffee:before { + content: "\ea6c"; + } + .bx-coffee-togo:before { + content: "\ea6d"; + } + .bx-cog:before { + content: "\ea6e"; + } + .bx-coin:before { + content: "\ea6f"; + } + .bx-coin-stack:before { + content: "\ea70"; + } + .bx-collapse:before { + content: "\ea71"; + } + .bx-collection:before { + content: "\ea72"; + } + .bx-color-fill:before { + content: "\ea73"; + } + .bx-columns:before { + content: "\ea74"; + } + .bx-command:before { + content: "\ea75"; + } + .bx-comment:before { + content: "\ea76"; + } + .bx-comment-add:before { + content: "\ea77"; + } + .bx-comment-check:before { + content: "\ea78"; + } + .bx-comment-detail:before { + content: "\ea79"; + } + .bx-comment-dots:before { + content: "\ea7a"; + } + .bx-comment-edit:before { + content: "\ea7b"; + } + .bx-comment-error:before { + content: "\ea7c"; + } + .bx-comment-minus:before { + content: "\ea7d"; + } + .bx-comment-x:before { + content: "\ea7e"; + } + .bx-compass:before { + content: "\ea7f"; + } + .bx-confused:before { + content: "\ea80"; + } + .bx-conversation:before { + content: "\ea81"; + } + .bx-cookie:before { + content: "\ea82"; + } + .bx-cool:before { + content: "\ea83"; + } + .bx-copy:before { + content: "\ea84"; + } + .bx-copy-alt:before { + content: "\ea85"; + } + .bx-copyright:before { + content: "\ea86"; + } + .bx-credit-card:before { + content: "\ea87"; + } + .bx-credit-card-alt:before { + content: "\ea88"; + } + .bx-credit-card-front:before { + content: "\ea89"; + } + .bx-crop:before { + content: "\ea8a"; + } + .bx-crosshair:before { + content: "\ea8b"; + } + .bx-crown:before { + content: "\ea8c"; + } + .bx-cube:before { + content: "\ea8d"; + } + .bx-cube-alt:before { + content: "\ea8e"; + } + .bx-cuboid:before { + content: "\ea8f"; + } + .bx-current-location:before { + content: "\ea90"; + } + .bx-customize:before { + content: "\ea91"; + } + .bx-cut:before { + content: "\ea92"; + } + .bx-cycling:before { + content: "\ea93"; + } + .bx-cylinder:before { + content: "\ea94"; + } + .bx-data:before { + content: "\ea95"; + } + .bx-desktop:before { + content: "\ea96"; + } + .bx-detail:before { + content: "\ea97"; + } + .bx-devices:before { + content: "\ea98"; + } + .bx-dialpad:before { + content: "\ea99"; + } + .bx-dialpad-alt:before { + content: "\ea9a"; + } + .bx-diamond:before { + content: "\ea9b"; + } + .bx-dice-1:before { + content: "\ea9c"; + } + .bx-dice-2:before { + content: "\ea9d"; + } + .bx-dice-3:before { + content: "\ea9e"; + } + .bx-dice-4:before { + content: "\ea9f"; + } + .bx-dice-5:before { + content: "\eaa0"; + } + .bx-dice-6:before { + content: "\eaa1"; + } + .bx-directions:before { + content: "\eaa2"; + } + .bx-disc:before { + content: "\eaa3"; + } + .bx-dish:before { + content: "\eaa4"; + } + .bx-dislike:before { + content: "\eaa5"; + } + .bx-dizzy:before { + content: "\eaa6"; + } + .bx-dna:before { + content: "\eaa7"; + } + .bx-dock-bottom:before { + content: "\eaa8"; + } + .bx-dock-left:before { + content: "\eaa9"; + } + .bx-dock-right:before { + content: "\eaaa"; + } + .bx-dock-top:before { + content: "\eaab"; + } + .bx-dollar:before { + content: "\eaac"; + } + .bx-dollar-circle:before { + content: "\eaad"; + } + .bx-donate-blood:before { + content: "\eaae"; + } + .bx-donate-heart:before { + content: "\eaaf"; + } + .bx-door-open:before { + content: "\eab0"; + } + .bx-dots-horizontal:before { + content: "\eab1"; + } + .bx-dots-horizontal-rounded:before { + content: "\eab2"; + } + .bx-dots-vertical:before { + content: "\eab3"; + } + .bx-dots-vertical-rounded:before { + content: "\eab4"; + } + .bx-doughnut-chart:before { + content: "\eab5"; + } + .bx-down-arrow:before { + content: "\eab6"; + } + .bx-down-arrow-alt:before { + content: "\eab7"; + } + .bx-down-arrow-circle:before { + content: "\eab8"; + } + .bx-download:before { + content: "\eab9"; + } + .bx-downvote:before { + content: "\eaba"; + } + .bx-drink:before { + content: "\eabb"; + } + .bx-droplet:before { + content: "\eabc"; + } + .bx-dumbbell:before { + content: "\eabd"; + } + .bx-duplicate:before { + content: "\eabe"; + } + .bx-edit:before { + content: "\eabf"; + } + .bx-edit-alt:before { + content: "\eac0"; + } + .bx-envelope:before { + content: "\eac1"; + } + .bx-envelope-open:before { + content: "\eac2"; + } + .bx-equalizer:before { + content: "\eac3"; + } + .bx-eraser:before { + content: "\eac4"; + } + .bx-error:before { + content: "\eac5"; + } + .bx-error-alt:before { + content: "\eac6"; + } + .bx-error-circle:before { + content: "\eac7"; + } + .bx-euro:before { + content: "\eac8"; + } + .bx-exclude:before { + content: "\eac9"; + } + .bx-exit:before { + content: "\eaca"; + } + .bx-exit-fullscreen:before { + content: "\eacb"; + } + .bx-expand:before { + content: "\eacc"; + } + .bx-expand-alt:before { + content: "\eacd"; + } + .bx-export:before { + content: "\eace"; + } + .bx-extension:before { + content: "\eacf"; + } + .bx-face:before { + content: "\ead0"; + } + .bx-fast-forward:before { + content: "\ead1"; + } + .bx-fast-forward-circle:before { + content: "\ead2"; + } + .bx-female:before { + content: "\ead3"; + } + .bx-female-sign:before { + content: "\ead4"; + } + .bx-file:before { + content: "\ead5"; + } + .bx-file-blank:before { + content: "\ead6"; + } + .bx-file-find:before { + content: "\ead7"; + } + .bx-film:before { + content: "\ead8"; + } + .bx-filter:before { + content: "\ead9"; + } + .bx-filter-alt:before { + content: "\eada"; + } + .bx-fingerprint:before { + content: "\eadb"; + } + .bx-first-aid:before { + content: "\eadc"; + } + .bx-first-page:before { + content: "\eadd"; + } + .bx-flag:before { + content: "\eade"; + } + .bx-folder:before { + content: "\eadf"; + } + .bx-folder-minus:before { + content: "\eae0"; + } + .bx-folder-open:before { + content: "\eae1"; + } + .bx-folder-plus:before { + content: "\eae2"; + } + .bx-font:before { + content: "\eae3"; + } + .bx-font-color:before { + content: "\eae4"; + } + .bx-font-family:before { + content: "\eae5"; + } + .bx-font-size:before { + content: "\eae6"; + } + .bx-food-menu:before { + content: "\eae7"; + } + .bx-food-tag:before { + content: "\eae8"; + } + .bx-football:before { + content: "\eae9"; + } + .bx-fridge:before { + content: "\eaea"; + } + .bx-fullscreen:before { + content: "\eaeb"; + } + .bx-game:before { + content: "\eaec"; + } + .bx-gas-pump:before { + content: "\eaed"; + } + .bx-ghost:before { + content: "\eaee"; + } + .bx-gift:before { + content: "\eaef"; + } + .bx-git-branch:before { + content: "\eaf0"; + } + .bx-git-commit:before { + content: "\eaf1"; + } + .bx-git-compare:before { + content: "\eaf2"; + } + .bx-git-merge:before { + content: "\eaf3"; + } + .bx-git-pull-request:before { + content: "\eaf4"; + } + .bx-git-repo-forked:before { + content: "\eaf5"; + } + .bx-glasses:before { + content: "\eaf6"; + } + .bx-glasses-alt:before { + content: "\eaf7"; + } + .bx-globe:before { + content: "\eaf8"; + } + .bx-globe-alt:before { + content: "\eaf9"; + } + .bx-grid:before { + content: "\eafa"; + } + .bx-grid-alt:before { + content: "\eafb"; + } + .bx-grid-horizontal:before { + content: "\eafc"; + } + .bx-grid-small:before { + content: "\eafd"; + } + .bx-grid-vertical:before { + content: "\eafe"; + } + .bx-group:before { + content: "\eaff"; + } + .bx-handicap:before { + content: "\eb00"; + } + .bx-happy:before { + content: "\eb01"; + } + .bx-happy-alt:before { + content: "\eb02"; + } + .bx-happy-beaming:before { + content: "\eb03"; + } + .bx-happy-heart-eyes:before { + content: "\eb04"; + } + .bx-hash:before { + content: "\eb05"; + } + .bx-hdd:before { + content: "\eb06"; + } + .bx-heading:before { + content: "\eb07"; + } + .bx-headphone:before { + content: "\eb08"; + } + .bx-health:before { + content: "\eb09"; + } + .bx-heart:before { + content: "\eb0a"; + } + .bx-heart-circle:before { + content: "\eb0b"; + } + .bx-heart-square:before { + content: "\eb0c"; + } + .bx-help-circle:before { + content: "\eb0d"; + } + .bx-hide:before { + content: "\eb0e"; + } + .bx-highlight:before { + content: "\eb0f"; + } + .bx-history:before { + content: "\eb10"; + } + .bx-hive:before { + content: "\eb11"; + } + .bx-home:before { + content: "\eb12"; + } + .bx-home-alt:before { + content: "\eb13"; + } + .bx-home-circle:before { + content: "\eb14"; + } + .bx-home-heart:before { + content: "\eb15"; + } + .bx-home-smile:before { + content: "\eb16"; + } + .bx-horizontal-center:before { + content: "\eb17"; + } + .bx-hotel:before { + content: "\eb18"; + } + .bx-hourglass:before { + content: "\eb19"; + } + .bx-id-card:before { + content: "\eb1a"; + } + .bx-image:before { + content: "\eb1b"; + } + .bx-image-add:before { + content: "\eb1c"; + } + .bx-image-alt:before { + content: "\eb1d"; + } + .bx-images:before { + content: "\eb1e"; + } + .bx-import:before { + content: "\eb1f"; + } + .bx-infinite:before { + content: "\eb20"; + } + .bx-info-circle:before { + content: "\eb21"; + } + .bx-info-square:before { + content: "\eb22"; + } + .bx-intersect:before { + content: "\eb23"; + } + .bx-italic:before { + content: "\eb24"; + } + .bx-joystick:before { + content: "\eb25"; + } + .bx-joystick-alt:before { + content: "\eb26"; + } + .bx-joystick-button:before { + content: "\eb27"; + } + .bx-key:before { + content: "\eb28"; + } + .bx-label:before { + content: "\eb29"; + } + .bx-landscape:before { + content: "\eb2a"; + } + .bx-laptop:before { + content: "\eb2b"; + } + .bx-last-page:before { + content: "\eb2c"; + } + .bx-laugh:before { + content: "\eb2d"; + } + .bx-layer:before { + content: "\eb2e"; + } + .bx-layer-minus:before { + content: "\eb2f"; + } + .bx-layer-plus:before { + content: "\eb30"; + } + .bx-layout:before { + content: "\eb31"; + } + .bx-left-arrow:before { + content: "\eb32"; + } + .bx-left-arrow-alt:before { + content: "\eb33"; + } + .bx-left-arrow-circle:before { + content: "\eb34"; + } + .bx-left-down-arrow-circle:before { + content: "\eb35"; + } + .bx-left-indent:before { + content: "\eb36"; + } + .bx-left-top-arrow-circle:before { + content: "\eb37"; + } + .bx-library:before { + content: "\eb38"; + } + .bx-like:before { + content: "\eb39"; + } + .bx-line-chart:before { + content: "\eb3a"; + } + .bx-line-chart-down:before { + content: "\eb3b"; + } + .bx-link:before { + content: "\eb3c"; + } + .bx-link-alt:before { + content: "\eb3d"; + } + .bx-link-external:before { + content: "\eb3e"; + } + .bx-lira:before { + content: "\eb3f"; + } + .bx-list-check:before { + content: "\eb40"; + } + .bx-list-minus:before { + content: "\eb41"; + } + .bx-list-ol:before { + content: "\eb42"; + } + .bx-list-plus:before { + content: "\eb43"; + } + .bx-list-ul:before { + content: "\eb44"; + } + .bx-loader:before { + content: "\eb45"; + } + .bx-loader-alt:before { + content: "\eb46"; + } + .bx-loader-circle:before { + content: "\eb47"; + } + .bx-location-plus:before { + content: "\eb48"; + } + .bx-lock:before { + content: "\eb49"; + } + .bx-lock-alt:before { + content: "\eb4a"; + } + .bx-lock-open:before { + content: "\eb4b"; + } + .bx-lock-open-alt:before { + content: "\eb4c"; + } + .bx-log-in:before { + content: "\eb4d"; + } + .bx-log-in-circle:before { + content: "\eb4e"; + } + .bx-log-out:before { + content: "\eb4f"; + } + .bx-log-out-circle:before { + content: "\eb50"; + } + .bx-low-vision:before { + content: "\eb51"; + } + .bx-magnet:before { + content: "\eb52"; + } + .bx-mail-send:before { + content: "\eb53"; + } + .bx-male:before { + content: "\eb54"; + } + .bx-male-sign:before { + content: "\eb55"; + } + .bx-map:before { + content: "\eb56"; + } + .bx-map-alt:before { + content: "\eb57"; + } + .bx-map-pin:before { + content: "\eb58"; + } + .bx-mask:before { + content: "\eb59"; + } + .bx-medal:before { + content: "\eb5a"; + } + .bx-meh:before { + content: "\eb5b"; + } + .bx-meh-alt:before { + content: "\eb5c"; + } + .bx-meh-blank:before { + content: "\eb5d"; + } + .bx-memory-card:before { + content: "\eb5e"; + } + .bx-menu:before { + content: "\eb5f"; + } + .bx-menu-alt-left:before { + content: "\ef5b"; + } + .bx-menu-alt-right:before { + content: "\eb61"; + } + .bx-merge:before { + content: "\eb62"; + } + .bx-message:before { + content: "\eb63"; + } + .bx-message-add:before { + content: "\eb64"; + } + .bx-message-alt:before { + content: "\eb65"; + } + .bx-message-alt-add:before { + content: "\eb66"; + } + .bx-message-alt-check:before { + content: "\eb67"; + } + .bx-message-alt-detail:before { + content: "\eb68"; + } + .bx-message-alt-dots:before { + content: "\eb69"; + } + .bx-message-alt-edit:before { + content: "\eb6a"; + } + .bx-message-alt-error:before { + content: "\eb6b"; + } + .bx-message-alt-minus:before { + content: "\eb6c"; + } + .bx-message-alt-x:before { + content: "\eb6d"; + } + .bx-message-check:before { + content: "\eb6e"; + } + .bx-message-detail:before { + content: "\eb6f"; + } + .bx-message-dots:before { + content: "\eb70"; + } + .bx-message-edit:before { + content: "\eb71"; + } + .bx-message-error:before { + content: "\eb72"; + } + .bx-message-minus:before { + content: "\eb73"; + } + .bx-message-rounded:before { + content: "\eb74"; + } + .bx-message-rounded-add:before { + content: "\eb75"; + } + .bx-message-rounded-check:before { + content: "\eb76"; + } + .bx-message-rounded-detail:before { + content: "\eb77"; + } + .bx-message-rounded-dots:before { + content: "\eb78"; + } + .bx-message-rounded-edit:before { + content: "\ef5c"; + } + .bx-message-rounded-error:before { + content: "\eb7a"; + } + .bx-message-rounded-minus:before { + content: "\eb7b"; + } + .bx-message-rounded-x:before { + content: "\eb7c"; + } + .bx-message-square:before { + content: "\eb7d"; + } + .bx-message-square-add:before { + content: "\eb7e"; + } + .bx-message-square-check:before { + content: "\eb7f"; + } + .bx-message-square-detail:before { + content: "\eb80"; + } + .bx-message-square-dots:before { + content: "\eb81"; + } + .bx-message-square-edit:before { + content: "\eb82"; + } + .bx-message-square-error:before { + content: "\eb83"; + } + .bx-message-square-minus:before { + content: "\eb84"; + } + .bx-message-square-x:before { + content: "\eb85"; + } + .bx-message-x:before { + content: "\eb86"; + } + .bx-meteor:before { + content: "\eb87"; + } + .bx-microchip:before { + content: "\eb88"; + } + .bx-microphone:before { + content: "\eb89"; + } + .bx-microphone-off:before { + content: "\eb8a"; + } + .bx-minus:before { + content: "\eb8b"; + } + .bx-minus-back:before { + content: "\eb8c"; + } + .bx-minus-circle:before { + content: "\eb8d"; + } + .bx-minus-front:before { + content: "\eb8e"; + } + .bx-mobile:before { + content: "\eb8f"; + } + .bx-mobile-alt:before { + content: "\eb90"; + } + .bx-mobile-landscape:before { + content: "\eb91"; + } + .bx-mobile-vibration:before { + content: "\ef5d"; + } + .bx-money:before { + content: "\eb93"; + } + .bx-moon:before { + content: "\eb94"; + } + .bx-mouse:before { + content: "\eb95"; + } + .bx-mouse-alt:before { + content: "\eb96"; + } + .bx-move:before { + content: "\eb97"; + } + .bx-move-horizontal:before { + content: "\eb98"; + } + .bx-move-vertical:before { + content: "\eb99"; + } + .bx-movie:before { + content: "\eb9a"; + } + .bx-movie-play:before { + content: "\eb9b"; + } + .bx-music:before { + content: "\eb9c"; + } + .bx-navigation:before { + content: "\eb9d"; + } + .bx-network-chart:before { + content: "\eb9e"; + } + .bx-news:before { + content: "\eb9f"; + } + .bx-no-entry:before { + content: "\eba0"; + } + .bx-note:before { + content: "\eba1"; + } + .bx-notepad:before { + content: "\eba2"; + } + .bx-notification:before { + content: "\eba3"; + } + .bx-notification-off:before { + content: "\eba4"; + } + .bx-outline:before { + content: "\eba5"; + } + .bx-package:before { + content: "\eba6"; + } + .bx-paint:before { + content: "\eba7"; + } + .bx-paint-roll:before { + content: "\eba8"; + } + .bx-palette:before { + content: "\eba9"; + } + .bx-paperclip:before { + content: "\ebaa"; + } + .bx-paper-plane:before { + content: "\ef61"; + } + .bx-paragraph:before { + content: "\ebac"; + } + .bx-paste:before { + content: "\ebad"; + } + .bx-pause:before { + content: "\ebae"; + } + .bx-pause-circle:before { + content: "\ebaf"; + } + .bx-pen:before { + content: "\ebb0"; + } + .bx-pencil:before { + content: "\ebb1"; + } + .bx-phone:before { + content: "\ebb2"; + } + .bx-phone-call:before { + content: "\ebb3"; + } + .bx-phone-incoming:before { + content: "\ebb4"; + } + .bx-phone-off:before { + content: "\ebb5"; + } + .bx-phone-outgoing:before { + content: "\ebb6"; + } + .bx-photo-album:before { + content: "\ebb7"; + } + .bx-pie-chart:before { + content: "\ebb8"; + } + .bx-pie-chart-alt:before { + content: "\ebb9"; + } + .bx-pie-chart-alt-2:before { + content: "\ebba"; + } + .bx-pin:before { + content: "\ebbb"; + } + .bx-planet:before { + content: "\ebbc"; + } + .bx-play:before { + content: "\ebbd"; + } + .bx-play-circle:before { + content: "\ebbe"; + } + .bx-plug:before { + content: "\ebbf"; + } + .bx-plus:before { + content: "\ebc0"; + } + .bx-plus-circle:before { + content: "\ebc1"; + } + .bx-plus-medical:before { + content: "\ebc2"; + } + .bx-podcast:before { + content: "\ebc3"; + } + .bx-pointer:before { + content: "\ef5e"; + } + .bx-poll:before { + content: "\ebc5"; + } + .bx-polygon:before { + content: "\ebc6"; + } + .bx-pound:before { + content: "\ebc7"; + } + .bx-power-off:before { + content: "\ebc8"; + } + .bx-printer:before { + content: "\ebc9"; + } + .bx-pulse:before { + content: "\ebca"; + } + .bx-purchase-tag:before { + content: "\ebcb"; + } + .bx-purchase-tag-alt:before { + content: "\ebcc"; + } + .bx-pyramid:before { + content: "\ebcd"; + } + .bx-qr:before { + content: "\ebce"; + } + .bx-qr-scan:before { + content: "\ebcf"; + } + .bx-question-mark:before { + content: "\ebd0"; + } + .bx-radar:before { + content: "\ebd1"; + } + .bx-radio:before { + content: "\ebd2"; + } + .bx-radio-circle:before { + content: "\ebd3"; + } + .bx-radio-circle-marked:before { + content: "\ebd4"; + } + .bx-receipt:before { + content: "\ebd5"; + } + .bx-rectangle:before { + content: "\ebd6"; + } + .bx-recycle:before { + content: "\ebd7"; + } + .bx-redo:before { + content: "\ebd8"; + } + .bx-refresh:before { + content: "\ebd9"; + } + .bx-registered:before { + content: "\ebda"; + } + .bx-rename:before { + content: "\ebdb"; + } + .bx-repeat:before { + content: "\ebdc"; + } + .bx-reply:before { + content: "\ef5f"; + } + .bx-reply-all:before { + content: "\ebde"; + } + .bx-repost:before { + content: "\ebdf"; + } + .bx-reset:before { + content: "\ebe0"; + } + .bx-restaurant:before { + content: "\ebe1"; + } + .bx-revision:before { + content: "\ebe2"; + } + .bx-rewind:before { + content: "\ebe3"; + } + .bx-rewind-circle:before { + content: "\ebe4"; + } + .bx-right-arrow:before { + content: "\ebe5"; + } + .bx-right-arrow-alt:before { + content: "\ebe6"; + } + .bx-right-arrow-circle:before { + content: "\ebe7"; + } + .bx-right-down-arrow-circle:before { + content: "\ebe8"; + } + .bx-right-indent:before { + content: "\ebe9"; + } + .bx-right-top-arrow-circle:before { + content: "\ebea"; + } + .bx-rocket:before { + content: "\ebeb"; + } + .bx-rotate-left:before { + content: "\ebec"; + } + .bx-rotate-right:before { + content: "\ebed"; + } + .bx-rss:before { + content: "\ebee"; + } + .bx-ruble:before { + content: "\ebef"; + } + .bx-ruler:before { + content: "\ebf0"; + } + .bx-run:before { + content: "\ebf1"; + } + .bx-rupee:before { + content: "\ebf2"; + } + .bx-sad:before { + content: "\ebf3"; + } + .bx-save:before { + content: "\ebf4"; + } + .bx-scan:before { + content: "\ebf5"; + } + .bx-screenshot:before { + content: "\ef60"; + } + .bx-search:before { + content: "\ebf7"; + } + .bx-search-alt:before { + content: "\ebf8"; + } + .bx-search-alt-2:before { + content: "\ebf9"; + } + .bx-selection:before { + content: "\ebfa"; + } + .bx-select-multiple:before { + content: "\ebfb"; + } + .bx-send:before { + content: "\ebfc"; + } + .bx-server:before { + content: "\ebfd"; + } + .bx-shape-circle:before { + content: "\ebfe"; + } + .bx-shape-polygon:before { + content: "\ebff"; + } + .bx-shape-square:before { + content: "\ec00"; + } + .bx-shape-triangle:before { + content: "\ec01"; + } + .bx-share:before { + content: "\ec02"; + } + .bx-share-alt:before { + content: "\ec03"; + } + .bx-shekel:before { + content: "\ec04"; + } + .bx-shield:before { + content: "\ec05"; + } + .bx-shield-alt:before { + content: "\ec06"; + } + .bx-shield-alt-2:before { + content: "\ec07"; + } + .bx-shield-quarter:before { + content: "\ec08"; + } + .bx-shield-x:before { + content: "\ec09"; + } + .bx-shocked:before { + content: "\ec0a"; + } + .bx-shopping-bag:before { + content: "\ec0b"; + } + .bx-show:before { + content: "\ec0c"; + } + .bx-show-alt:before { + content: "\ec0d"; + } + .bx-shuffle:before { + content: "\ec0e"; + } + .bx-sidebar:before { + content: "\ec0f"; + } + .bx-sitemap:before { + content: "\ec10"; + } + .bx-skip-next:before { + content: "\ec11"; + } + .bx-skip-next-circle:before { + content: "\ec12"; + } + .bx-skip-previous:before { + content: "\ec13"; + } + .bx-skip-previous-circle:before { + content: "\ec14"; + } + .bx-sleepy:before { + content: "\ec15"; + } + .bx-slider:before { + content: "\ec16"; + } + .bx-slider-alt:before { + content: "\ec17"; + } + .bx-slideshow:before { + content: "\ec18"; + } + .bx-smile:before { + content: "\ec19"; + } + .bx-sort:before { + content: "\ec1a"; + } + .bx-sort-alt-2:before { + content: "\ec1b"; + } + .bx-sort-a-z:before { + content: "\ec1c"; + } + .bx-sort-down:before { + content: "\ec1d"; + } + .bx-sort-up:before { + content: "\ec1e"; + } + .bx-sort-z-a:before { + content: "\ec1f"; + } + .bx-spa:before { + content: "\ec20"; + } + .bx-space-bar:before { + content: "\ec21"; + } + .bx-speaker:before { + content: "\ec22"; + } + .bx-spray-can:before { + content: "\ec23"; + } + .bx-spreadsheet:before { + content: "\ec24"; + } + .bx-square:before { + content: "\ec25"; + } + .bx-square-rounded:before { + content: "\ec26"; + } + .bx-star:before { + content: "\ec27"; + } + .bx-station:before { + content: "\ec28"; + } + .bx-stats:before { + content: "\ec29"; + } + .bx-sticker:before { + content: "\ec2a"; + } + .bx-stop:before { + content: "\ec2b"; + } + .bx-stop-circle:before { + content: "\ec2c"; + } + .bx-stopwatch:before { + content: "\ec2d"; + } + .bx-store:before { + content: "\ec2e"; + } + .bx-store-alt:before { + content: "\ec2f"; + } + .bx-street-view:before { + content: "\ec30"; + } + .bx-strikethrough:before { + content: "\ec31"; + } + .bx-subdirectory-left:before { + content: "\ec32"; + } + .bx-subdirectory-right:before { + content: "\ec33"; + } + .bx-sun:before { + content: "\ec34"; + } + .bx-support:before { + content: "\ec35"; + } + .bx-swim:before { + content: "\ec36"; + } + .bx-sync:before { + content: "\ec37"; + } + .bx-tab:before { + content: "\ec38"; + } + .bx-table:before { + content: "\ec39"; + } + .bx-tachometer:before { + content: "\ec3a"; + } + .bx-tag:before { + content: "\ec3b"; + } + .bx-tag-alt:before { + content: "\ec3c"; + } + .bx-target-lock:before { + content: "\ec3d"; + } + .bx-task:before { + content: "\ec3e"; + } + .bx-task-x:before { + content: "\ec3f"; + } + .bx-taxi:before { + content: "\ec40"; + } + .bx-tennis-ball:before { + content: "\ec41"; + } + .bx-terminal:before { + content: "\ec42"; + } + .bx-test-tube:before { + content: "\ec43"; + } + .bx-text:before { + content: "\ec44"; + } + .bx-time:before { + content: "\ec45"; + } + .bx-time-five:before { + content: "\ec46"; + } + .bx-timer:before { + content: "\ec47"; + } + .bx-tired:before { + content: "\ec48"; + } + .bx-toggle-left:before { + content: "\ec49"; + } + .bx-toggle-right:before { + content: "\ec4a"; + } + .bx-tone:before { + content: "\ec4b"; + } + .bx-traffic-cone:before { + content: "\ec4c"; + } + .bx-train:before { + content: "\ec4d"; + } + .bx-transfer:before { + content: "\ec4e"; + } + .bx-transfer-alt:before { + content: "\ec4f"; + } + .bx-trash:before { + content: "\ec50"; + } + .bx-trash-alt:before { + content: "\ec51"; + } + .bx-trending-down:before { + content: "\ec52"; + } + .bx-trending-up:before { + content: "\ec53"; + } + .bx-trim:before { + content: "\ec54"; + } + .bx-trip:before { + content: "\ec55"; + } + .bx-trophy:before { + content: "\ec56"; + } + .bx-tv:before { + content: "\ec57"; + } + .bx-underline:before { + content: "\ec58"; + } + .bx-undo:before { + content: "\ec59"; + } + .bx-unite:before { + content: "\ec5a"; + } + .bx-unlink:before { + content: "\ec5b"; + } + .bx-up-arrow:before { + content: "\ec5c"; + } + .bx-up-arrow-alt:before { + content: "\ec5d"; + } + .bx-up-arrow-circle:before { + content: "\ec5e"; + } + .bx-upload:before { + content: "\ec5f"; + } + .bx-upside-down:before { + content: "\ec60"; + } + .bx-upvote:before { + content: "\ec61"; + } + .bx-usb:before { + content: "\ec62"; + } + .bx-user:before { + content: "\ec63"; + } + .bx-user-check:before { + content: "\ec64"; + } + .bx-user-circle:before { + content: "\ec65"; + } + .bx-user-minus:before { + content: "\ec66"; + } + .bx-user-pin:before { + content: "\ec67"; + } + .bx-user-plus:before { + content: "\ec68"; + } + .bx-user-voice:before { + content: "\ec69"; + } + .bx-user-x:before { + content: "\ec6a"; + } + .bx-vector:before { + content: "\ec6b"; + } + .bx-vertical-center:before { + content: "\ec6c"; + } + .bx-vial:before { + content: "\ec6d"; + } + .bx-video:before { + content: "\ec6e"; + } + .bx-video-off:before { + content: "\ec6f"; + } + .bx-video-plus:before { + content: "\ec70"; + } + .bx-video-recording:before { + content: "\ec71"; + } + .bx-voicemail:before { + content: "\ec72"; + } + .bx-volume:before { + content: "\ec73"; + } + .bx-volume-full:before { + content: "\ec74"; + } + .bx-volume-low:before { + content: "\ec75"; + } + .bx-volume-mute:before { + content: "\ec76"; + } + .bx-walk:before { + content: "\ec77"; + } + .bx-wallet:before { + content: "\ec78"; + } + .bx-wallet-alt:before { + content: "\ec79"; + } + .bx-water:before { + content: "\ec7a"; + } + .bx-webcam:before { + content: "\ec7b"; + } + .bx-wifi:before { + content: "\ec7c"; + } + .bx-wifi-0:before { + content: "\ec7d"; + } + .bx-wifi-1:before { + content: "\ec7e"; + } + .bx-wifi-2:before { + content: "\ec7f"; + } + .bx-wifi-off:before { + content: "\ec80"; + } + .bx-wind:before { + content: "\ec81"; + } + .bx-window:before { + content: "\ec82"; + } + .bx-window-alt:before { + content: "\ec83"; + } + .bx-window-close:before { + content: "\ec84"; + } + .bx-window-open:before { + content: "\ec85"; + } + .bx-windows:before { + content: "\ec86"; + } + .bx-wine:before { + content: "\ec87"; + } + .bx-wink-smile:before { + content: "\ec88"; + } + .bx-wink-tongue:before { + content: "\ec89"; + } + .bx-won:before { + content: "\ec8a"; + } + .bx-world:before { + content: "\ec8b"; + } + .bx-wrench:before { + content: "\ec8c"; + } + .bx-x:before { + content: "\ec8d"; + } + .bx-x-circle:before { + content: "\ec8e"; + } + .bx-yen:before { + content: "\ec8f"; + } + .bx-zoom-in:before { + content: "\ec90"; + } + .bx-zoom-out:before { + content: "\ec91"; + } + .bxs-party:before { + content: "\ec92"; + } + .bxs-hot:before { + content: "\ec93"; + } + .bxs-droplet:before { + content: "\ec94"; + } + .bxs-cat:before { + content: "\ec95"; + } + .bxs-dog:before { + content: "\ec96"; + } + .bxs-injection:before { + content: "\ec97"; + } + .bxs-leaf:before { + content: "\ec98"; + } + .bxs-add-to-queue:before { + content: "\ec99"; + } + .bxs-adjust:before { + content: "\ec9a"; + } + .bxs-adjust-alt:before { + content: "\ec9b"; + } + .bxs-alarm:before { + content: "\ec9c"; + } + .bxs-alarm-add:before { + content: "\ec9d"; + } + .bxs-alarm-exclamation:before { + content: "\ec9e"; + } + .bxs-alarm-off:before { + content: "\ec9f"; + } + .bxs-alarm-snooze:before { + content: "\eca0"; + } + .bxs-album:before { + content: "\eca1"; + } + .bxs-ambulance:before { + content: "\eca2"; + } + .bxs-analyse:before { + content: "\eca3"; + } + .bxs-angry:before { + content: "\eca4"; + } + .bxs-arch:before { + content: "\eca5"; + } + .bxs-archive:before { + content: "\eca6"; + } + .bxs-archive-in:before { + content: "\eca7"; + } + .bxs-archive-out:before { + content: "\eca8"; + } + .bxs-area:before { + content: "\eca9"; + } + .bxs-arrow-from-bottom:before { + content: "\ecaa"; + } + .bxs-arrow-from-left:before { + content: "\ecab"; + } + .bxs-arrow-from-right:before { + content: "\ecac"; + } + .bxs-arrow-from-top:before { + content: "\ecad"; + } + .bxs-arrow-to-bottom:before { + content: "\ecae"; + } + .bxs-arrow-to-left:before { + content: "\ecaf"; + } + .bxs-arrow-to-right:before { + content: "\ecb0"; + } + .bxs-arrow-to-top:before { + content: "\ecb1"; + } + .bxs-award:before { + content: "\ecb2"; + } + .bxs-baby-carriage:before { + content: "\ecb3"; + } + .bxs-backpack:before { + content: "\ecb4"; + } + .bxs-badge:before { + content: "\ecb5"; + } + .bxs-badge-check:before { + content: "\ecb6"; + } + .bxs-badge-dollar:before { + content: "\ecb7"; + } + .bxs-ball:before { + content: "\ecb8"; + } + .bxs-band-aid:before { + content: "\ecb9"; + } + .bxs-bank:before { + content: "\ecba"; + } + .bxs-bar-chart-alt-2:before { + content: "\ecbb"; + } + .bxs-bar-chart-square:before { + content: "\ecbc"; + } + .bxs-barcode:before { + content: "\ecbd"; + } + .bxs-baseball:before { + content: "\ecbe"; + } + .bxs-basket:before { + content: "\ecbf"; + } + .bxs-basketball:before { + content: "\ecc0"; + } + .bxs-bath:before { + content: "\ecc1"; + } + .bxs-battery:before { + content: "\ecc2"; + } + .bxs-battery-charging:before { + content: "\ecc3"; + } + .bxs-battery-full:before { + content: "\ecc4"; + } + .bxs-battery-low:before { + content: "\ecc5"; + } + .bxs-bed:before { + content: "\ecc6"; + } + .bxs-been-here:before { + content: "\ecc7"; + } + .bxs-beer:before { + content: "\ecc8"; + } + .bxs-bell:before { + content: "\ecc9"; + } + .bxs-bell-minus:before { + content: "\ecca"; + } + .bxs-bell-off:before { + content: "\eccb"; + } + .bxs-bell-plus:before { + content: "\eccc"; + } + .bxs-bell-ring:before { + content: "\eccd"; + } + .bxs-bible:before { + content: "\ecce"; + } + .bxs-binoculars:before { + content: "\eccf"; + } + .bxs-blanket:before { + content: "\ecd0"; + } + .bxs-bolt:before { + content: "\ecd1"; + } + .bxs-bolt-circle:before { + content: "\ecd2"; + } + .bxs-bomb:before { + content: "\ecd3"; + } + .bxs-bone:before { + content: "\ecd4"; + } + .bxs-bong:before { + content: "\ecd5"; + } + .bxs-book:before { + content: "\ecd6"; + } + .bxs-book-add:before { + content: "\ecd7"; + } + .bxs-book-alt:before { + content: "\ecd8"; + } + .bxs-book-bookmark:before { + content: "\ecd9"; + } + .bxs-book-content:before { + content: "\ecda"; + } + .bxs-book-heart:before { + content: "\ecdb"; + } + .bxs-bookmark:before { + content: "\ecdc"; + } + .bxs-bookmark-alt:before { + content: "\ecdd"; + } + .bxs-bookmark-alt-minus:before { + content: "\ecde"; + } + .bxs-bookmark-alt-plus:before { + content: "\ecdf"; + } + .bxs-bookmark-heart:before { + content: "\ece0"; + } + .bxs-bookmark-minus:before { + content: "\ece1"; + } + .bxs-bookmark-plus:before { + content: "\ece2"; + } + .bxs-bookmarks:before { + content: "\ece3"; + } + .bxs-bookmark-star:before { + content: "\ece4"; + } + .bxs-book-open:before { + content: "\ece5"; + } + .bxs-book-reader:before { + content: "\ece6"; + } + .bxs-bot:before { + content: "\ece7"; + } + .bxs-bowling-ball:before { + content: "\ece8"; + } + .bxs-box:before { + content: "\ece9"; + } + .bxs-brain:before { + content: "\ecea"; + } + .bxs-briefcase:before { + content: "\eceb"; + } + .bxs-briefcase-alt:before { + content: "\ecec"; + } + .bxs-briefcase-alt-2:before { + content: "\eced"; + } + .bxs-brightness:before { + content: "\ecee"; + } + .bxs-brightness-half:before { + content: "\ecef"; + } + .bxs-brush:before { + content: "\ecf0"; + } + .bxs-brush-alt:before { + content: "\ecf1"; + } + .bxs-bug:before { + content: "\ecf2"; + } + .bxs-bug-alt:before { + content: "\ecf3"; + } + .bxs-building:before { + content: "\ecf4"; + } + .bxs-building-house:before { + content: "\ecf5"; + } + .bxs-buildings:before { + content: "\ecf6"; + } + .bxs-bulb:before { + content: "\ecf7"; + } + .bxs-bullseye:before { + content: "\ecf8"; + } + .bxs-buoy:before { + content: "\ecf9"; + } + .bxs-bus:before { + content: "\ecfa"; + } + .bxs-business:before { + content: "\ecfb"; + } + .bxs-bus-school:before { + content: "\ecfc"; + } + .bxs-cabinet:before { + content: "\ecfd"; + } + .bxs-cake:before { + content: "\ecfe"; + } + .bxs-calculator:before { + content: "\ecff"; + } + .bxs-calendar:before { + content: "\ed00"; + } + .bxs-calendar-alt:before { + content: "\ed01"; + } + .bxs-calendar-check:before { + content: "\ed02"; + } + .bxs-calendar-edit:before { + content: "\ed03"; + } + .bxs-calendar-event:before { + content: "\ed04"; + } + .bxs-calendar-exclamation:before { + content: "\ed05"; + } + .bxs-calendar-heart:before { + content: "\ed06"; + } + .bxs-calendar-minus:before { + content: "\ed07"; + } + .bxs-calendar-plus:before { + content: "\ed08"; + } + .bxs-calendar-star:before { + content: "\ed09"; + } + .bxs-calendar-week:before { + content: "\ed0a"; + } + .bxs-calendar-x:before { + content: "\ed0b"; + } + .bxs-camera:before { + content: "\ed0c"; + } + .bxs-camera-home:before { + content: "\ed0d"; + } + .bxs-camera-movie:before { + content: "\ed0e"; + } + .bxs-camera-off:before { + content: "\ed0f"; + } + .bxs-camera-plus:before { + content: "\ed10"; + } + .bxs-capsule:before { + content: "\ed11"; + } + .bxs-captions:before { + content: "\ed12"; + } + .bxs-car:before { + content: "\ed13"; + } + .bxs-car-battery:before { + content: "\ed14"; + } + .bxs-car-crash:before { + content: "\ed15"; + } + .bxs-card:before { + content: "\ed16"; + } + .bxs-caret-down-circle:before { + content: "\ed17"; + } + .bxs-caret-down-square:before { + content: "\ed18"; + } + .bxs-caret-left-circle:before { + content: "\ed19"; + } + .bxs-caret-left-square:before { + content: "\ed1a"; + } + .bxs-caret-right-circle:before { + content: "\ed1b"; + } + .bxs-caret-right-square:before { + content: "\ed1c"; + } + .bxs-caret-up-circle:before { + content: "\ed1d"; + } + .bxs-caret-up-square:before { + content: "\ed1e"; + } + .bxs-car-garage:before { + content: "\ed1f"; + } + .bxs-car-mechanic:before { + content: "\ed20"; + } + .bxs-carousel:before { + content: "\ed21"; + } + .bxs-cart:before { + content: "\ed22"; + } + .bxs-cart-add:before { + content: "\ed23"; + } + .bxs-cart-alt:before { + content: "\ed24"; + } + .bxs-cart-download:before { + content: "\ed25"; + } + .bxs-car-wash:before { + content: "\ed26"; + } + .bxs-category:before { + content: "\ed27"; + } + .bxs-category-alt:before { + content: "\ed28"; + } + .bxs-cctv:before { + content: "\ed29"; + } + .bxs-certification:before { + content: "\ed2a"; + } + .bxs-chalkboard:before { + content: "\ed2b"; + } + .bxs-chart:before { + content: "\ed2c"; + } + .bxs-chat:before { + content: "\ed2d"; + } + .bxs-checkbox:before { + content: "\ed2e"; + } + .bxs-checkbox-checked:before { + content: "\ed2f"; + } + .bxs-checkbox-minus:before { + content: "\ed30"; + } + .bxs-check-circle:before { + content: "\ed31"; + } + .bxs-check-shield:before { + content: "\ed32"; + } + .bxs-check-square:before { + content: "\ed33"; + } + .bxs-chess:before { + content: "\ed34"; + } + .bxs-chevron-down:before { + content: "\ed35"; + } + .bxs-chevron-down-circle:before { + content: "\ed36"; + } + .bxs-chevron-down-square:before { + content: "\ed37"; + } + .bxs-chevron-left:before { + content: "\ed38"; + } + .bxs-chevron-left-circle:before { + content: "\ed39"; + } + .bxs-chevron-left-square:before { + content: "\ed3a"; + } + .bxs-chevron-right:before { + content: "\ed3b"; + } + .bxs-chevron-right-circle:before { + content: "\ed3c"; + } + .bxs-chevron-right-square:before { + content: "\ed3d"; + } + .bxs-chevrons-down:before { + content: "\ed3e"; + } + .bxs-chevrons-left:before { + content: "\ed3f"; + } + .bxs-chevrons-right:before { + content: "\ed40"; + } + .bxs-chevrons-up:before { + content: "\ed41"; + } + .bxs-chevron-up:before { + content: "\ed42"; + } + .bxs-chevron-up-circle:before { + content: "\ed43"; + } + .bxs-chevron-up-square:before { + content: "\ed44"; + } + .bxs-chip:before { + content: "\ed45"; + } + .bxs-church:before { + content: "\ed46"; + } + .bxs-circle:before { + content: "\ed47"; + } + .bxs-city:before { + content: "\ed48"; + } + .bxs-clinic:before { + content: "\ed49"; + } + .bxs-cloud:before { + content: "\ed4a"; + } + .bxs-cloud-download:before { + content: "\ed4b"; + } + .bxs-cloud-lightning:before { + content: "\ed4c"; + } + .bxs-cloud-rain:before { + content: "\ed4d"; + } + .bxs-cloud-upload:before { + content: "\ed4e"; + } + .bxs-coffee:before { + content: "\ed4f"; + } + .bxs-coffee-alt:before { + content: "\ed50"; + } + .bxs-coffee-togo:before { + content: "\ed51"; + } + .bxs-cog:before { + content: "\ed52"; + } + .bxs-coin:before { + content: "\ed53"; + } + .bxs-coin-stack:before { + content: "\ed54"; + } + .bxs-collection:before { + content: "\ed55"; + } + .bxs-color-fill:before { + content: "\ed56"; + } + .bxs-comment:before { + content: "\ed57"; + } + .bxs-comment-add:before { + content: "\ed58"; + } + .bxs-comment-check:before { + content: "\ed59"; + } + .bxs-comment-detail:before { + content: "\ed5a"; + } + .bxs-comment-dots:before { + content: "\ed5b"; + } + .bxs-comment-edit:before { + content: "\ed5c"; + } + .bxs-comment-error:before { + content: "\ed5d"; + } + .bxs-comment-minus:before { + content: "\ed5e"; + } + .bxs-comment-x:before { + content: "\ed5f"; + } + .bxs-compass:before { + content: "\ed60"; + } + .bxs-component:before { + content: "\ed61"; + } + .bxs-confused:before { + content: "\ed62"; + } + .bxs-contact:before { + content: "\ed63"; + } + .bxs-conversation:before { + content: "\ed64"; + } + .bxs-cookie:before { + content: "\ed65"; + } + .bxs-cool:before { + content: "\ed66"; + } + .bxs-copy:before { + content: "\ed67"; + } + .bxs-copy-alt:before { + content: "\ed68"; + } + .bxs-copyright:before { + content: "\ed69"; + } + .bxs-coupon:before { + content: "\ed6a"; + } + .bxs-credit-card:before { + content: "\ed6b"; + } + .bxs-credit-card-alt:before { + content: "\ed6c"; + } + .bxs-credit-card-front:before { + content: "\ed6d"; + } + .bxs-crop:before { + content: "\ed6e"; + } + .bxs-crown:before { + content: "\ed6f"; + } + .bxs-cube:before { + content: "\ed70"; + } + .bxs-cube-alt:before { + content: "\ed71"; + } + .bxs-cuboid:before { + content: "\ed72"; + } + .bxs-customize:before { + content: "\ed73"; + } + .bxs-cylinder:before { + content: "\ed74"; + } + .bxs-dashboard:before { + content: "\ed75"; + } + .bxs-data:before { + content: "\ed76"; + } + .bxs-detail:before { + content: "\ed77"; + } + .bxs-devices:before { + content: "\ed78"; + } + .bxs-diamond:before { + content: "\ed79"; + } + .bxs-dice-1:before { + content: "\ed7a"; + } + .bxs-dice-2:before { + content: "\ed7b"; + } + .bxs-dice-3:before { + content: "\ed7c"; + } + .bxs-dice-4:before { + content: "\ed7d"; + } + .bxs-dice-5:before { + content: "\ed7e"; + } + .bxs-dice-6:before { + content: "\ed7f"; + } + .bxs-direction-left:before { + content: "\ed80"; + } + .bxs-direction-right:before { + content: "\ed81"; + } + .bxs-directions:before { + content: "\ed82"; + } + .bxs-disc:before { + content: "\ed83"; + } + .bxs-discount:before { + content: "\ed84"; + } + .bxs-dish:before { + content: "\ed85"; + } + .bxs-dislike:before { + content: "\ed86"; + } + .bxs-dizzy:before { + content: "\ed87"; + } + .bxs-dock-bottom:before { + content: "\ed88"; + } + .bxs-dock-left:before { + content: "\ed89"; + } + .bxs-dock-right:before { + content: "\ed8a"; + } + .bxs-dock-top:before { + content: "\ed8b"; + } + .bxs-dollar-circle:before { + content: "\ed8c"; + } + .bxs-donate-blood:before { + content: "\ed8d"; + } + .bxs-donate-heart:before { + content: "\ed8e"; + } + .bxs-door-open:before { + content: "\ed8f"; + } + .bxs-doughnut-chart:before { + content: "\ed90"; + } + .bxs-down-arrow:before { + content: "\ed91"; + } + .bxs-down-arrow-alt:before { + content: "\ed92"; + } + .bxs-down-arrow-circle:before { + content: "\ed93"; + } + .bxs-down-arrow-square:before { + content: "\ed94"; + } + .bxs-download:before { + content: "\ed95"; + } + .bxs-downvote:before { + content: "\ed96"; + } + .bxs-drink:before { + content: "\ed97"; + } + .bxs-droplet-half:before { + content: "\ed98"; + } + .bxs-dryer:before { + content: "\ed99"; + } + .bxs-duplicate:before { + content: "\ed9a"; + } + .bxs-edit:before { + content: "\ed9b"; + } + .bxs-edit-alt:before { + content: "\ed9c"; + } + .bxs-edit-location:before { + content: "\ed9d"; + } + .bxs-eject:before { + content: "\ed9e"; + } + .bxs-envelope:before { + content: "\ed9f"; + } + .bxs-envelope-open:before { + content: "\eda0"; + } + .bxs-eraser:before { + content: "\eda1"; + } + .bxs-error:before { + content: "\eda2"; + } + .bxs-error-alt:before { + content: "\eda3"; + } + .bxs-error-circle:before { + content: "\eda4"; + } + .bxs-ev-station:before { + content: "\eda5"; + } + .bxs-exit:before { + content: "\eda6"; + } + .bxs-extension:before { + content: "\eda7"; + } + .bxs-eyedropper:before { + content: "\eda8"; + } + .bxs-face:before { + content: "\eda9"; + } + .bxs-face-mask:before { + content: "\edaa"; + } + .bxs-factory:before { + content: "\edab"; + } + .bxs-fast-forward-circle:before { + content: "\edac"; + } + .bxs-file:before { + content: "\edad"; + } + .bxs-file-archive:before { + content: "\edae"; + } + .bxs-file-blank:before { + content: "\edaf"; + } + .bxs-file-css:before { + content: "\edb0"; + } + .bxs-file-doc:before { + content: "\edb1"; + } + .bxs-file-export:before { + content: "\edb2"; + } + .bxs-file-find:before { + content: "\edb3"; + } + .bxs-file-gif:before { + content: "\edb4"; + } + .bxs-file-html:before { + content: "\edb5"; + } + .bxs-file-image:before { + content: "\edb6"; + } + .bxs-file-import:before { + content: "\edb7"; + } + .bxs-file-jpg:before { + content: "\edb8"; + } + .bxs-file-js:before { + content: "\edb9"; + } + .bxs-file-json:before { + content: "\edba"; + } + .bxs-file-md:before { + content: "\edbb"; + } + .bxs-file-pdf:before { + content: "\edbc"; + } + .bxs-file-plus:before { + content: "\edbd"; + } + .bxs-file-png:before { + content: "\edbe"; + } + .bxs-file-txt:before { + content: "\edbf"; + } + .bxs-film:before { + content: "\edc0"; + } + .bxs-filter-alt:before { + content: "\edc1"; + } + .bxs-first-aid:before { + content: "\edc2"; + } + .bxs-flag:before { + content: "\edc3"; + } + .bxs-flag-alt:before { + content: "\edc4"; + } + .bxs-flag-checkered:before { + content: "\edc5"; + } + .bxs-flame:before { + content: "\edc6"; + } + .bxs-flask:before { + content: "\edc7"; + } + .bxs-florist:before { + content: "\edc8"; + } + .bxs-folder:before { + content: "\edc9"; + } + .bxs-folder-minus:before { + content: "\edca"; + } + .bxs-folder-open:before { + content: "\edcb"; + } + .bxs-folder-plus:before { + content: "\edcc"; + } + .bxs-food-menu:before { + content: "\edcd"; + } + .bxs-fridge:before { + content: "\edce"; + } + .bxs-game:before { + content: "\edcf"; + } + .bxs-gas-pump:before { + content: "\edd0"; + } + .bxs-ghost:before { + content: "\edd1"; + } + .bxs-gift:before { + content: "\edd2"; + } + .bxs-graduation:before { + content: "\edd3"; + } + .bxs-grid:before { + content: "\edd4"; + } + .bxs-grid-alt:before { + content: "\edd5"; + } + .bxs-group:before { + content: "\edd6"; + } + .bxs-guitar-amp:before { + content: "\edd7"; + } + .bxs-hand:before { + content: "\edd8"; + } + .bxs-hand-down:before { + content: "\edd9"; + } + .bxs-hand-left:before { + content: "\edda"; + } + .bxs-hand-right:before { + content: "\eddb"; + } + .bxs-hand-up:before { + content: "\eddc"; + } + .bxs-happy:before { + content: "\eddd"; + } + .bxs-happy-alt:before { + content: "\edde"; + } + .bxs-happy-beaming:before { + content: "\eddf"; + } + .bxs-happy-heart-eyes:before { + content: "\ede0"; + } + .bxs-hdd:before { + content: "\ede1"; + } + .bxs-heart:before { + content: "\ede2"; + } + .bxs-heart-circle:before { + content: "\ede3"; + } + .bxs-heart-square:before { + content: "\ede4"; + } + .bxs-help-circle:before { + content: "\ede5"; + } + .bxs-hide:before { + content: "\ede6"; + } + .bxs-home:before { + content: "\ede7"; + } + .bxs-home-circle:before { + content: "\ede8"; + } + .bxs-home-heart:before { + content: "\ede9"; + } + .bxs-home-smile:before { + content: "\edea"; + } + .bxs-hotel:before { + content: "\edeb"; + } + .bxs-hourglass:before { + content: "\edec"; + } + .bxs-hourglass-bottom:before { + content: "\eded"; + } + .bxs-hourglass-top:before { + content: "\edee"; + } + .bxs-id-card:before { + content: "\edef"; + } + .bxs-image:before { + content: "\edf0"; + } + .bxs-image-add:before { + content: "\edf1"; + } + .bxs-image-alt:before { + content: "\edf2"; + } + .bxs-inbox:before { + content: "\edf3"; + } + .bxs-info-circle:before { + content: "\edf4"; + } + .bxs-info-square:before { + content: "\edf5"; + } + .bxs-institution:before { + content: "\edf6"; + } + .bxs-joystick:before { + content: "\edf7"; + } + .bxs-joystick-alt:before { + content: "\edf8"; + } + .bxs-joystick-button:before { + content: "\edf9"; + } + .bxs-key:before { + content: "\edfa"; + } + .bxs-keyboard:before { + content: "\edfb"; + } + .bxs-label:before { + content: "\edfc"; + } + .bxs-landmark:before { + content: "\edfd"; + } + .bxs-landscape:before { + content: "\edfe"; + } + .bxs-laugh:before { + content: "\edff"; + } + .bxs-layer:before { + content: "\ee00"; + } + .bxs-layer-minus:before { + content: "\ee01"; + } + .bxs-layer-plus:before { + content: "\ee02"; + } + .bxs-layout:before { + content: "\ee03"; + } + .bxs-left-arrow:before { + content: "\ee04"; + } + .bxs-left-arrow-alt:before { + content: "\ee05"; + } + .bxs-left-arrow-circle:before { + content: "\ee06"; + } + .bxs-left-arrow-square:before { + content: "\ee07"; + } + .bxs-left-down-arrow-circle:before { + content: "\ee08"; + } + .bxs-left-top-arrow-circle:before { + content: "\ee09"; + } + .bxs-like:before { + content: "\ee0a"; + } + .bxs-location-plus:before { + content: "\ee0b"; + } + .bxs-lock:before { + content: "\ee0c"; + } + .bxs-lock-alt:before { + content: "\ee0d"; + } + .bxs-lock-open:before { + content: "\ee0e"; + } + .bxs-lock-open-alt:before { + content: "\ee0f"; + } + .bxs-log-in:before { + content: "\ee10"; + } + .bxs-log-in-circle:before { + content: "\ee11"; + } + .bxs-log-out:before { + content: "\ee12"; + } + .bxs-log-out-circle:before { + content: "\ee13"; + } + .bxs-low-vision:before { + content: "\ee14"; + } + .bxs-magic-wand:before { + content: "\ee15"; + } + .bxs-magnet:before { + content: "\ee16"; + } + .bxs-map:before { + content: "\ee17"; + } + .bxs-map-alt:before { + content: "\ee18"; + } + .bxs-map-pin:before { + content: "\ee19"; + } + .bxs-mask:before { + content: "\ee1a"; + } + .bxs-medal:before { + content: "\ee1b"; + } + .bxs-megaphone:before { + content: "\ee1c"; + } + .bxs-meh:before { + content: "\ee1d"; + } + .bxs-meh-alt:before { + content: "\ee1e"; + } + .bxs-meh-blank:before { + content: "\ee1f"; + } + .bxs-memory-card:before { + content: "\ee20"; + } + .bxs-message:before { + content: "\ee21"; + } + .bxs-message-add:before { + content: "\ee22"; + } + .bxs-message-alt:before { + content: "\ee23"; + } + .bxs-message-alt-add:before { + content: "\ee24"; + } + .bxs-message-alt-check:before { + content: "\ee25"; + } + .bxs-message-alt-detail:before { + content: "\ee26"; + } + .bxs-message-alt-dots:before { + content: "\ee27"; + } + .bxs-message-alt-edit:before { + content: "\ee28"; + } + .bxs-message-alt-error:before { + content: "\ee29"; + } + .bxs-message-alt-minus:before { + content: "\ee2a"; + } + .bxs-message-alt-x:before { + content: "\ee2b"; + } + .bxs-message-check:before { + content: "\ee2c"; + } + .bxs-message-detail:before { + content: "\ee2d"; + } + .bxs-message-dots:before { + content: "\ee2e"; + } + .bxs-message-edit:before { + content: "\ee2f"; + } + .bxs-message-error:before { + content: "\ee30"; + } + .bxs-message-minus:before { + content: "\ee31"; + } + .bxs-message-rounded:before { + content: "\ee32"; + } + .bxs-message-rounded-add:before { + content: "\ee33"; + } + .bxs-message-rounded-check:before { + content: "\ee34"; + } + .bxs-message-rounded-detail:before { + content: "\ee35"; + } + .bxs-message-rounded-dots:before { + content: "\ee36"; + } + .bxs-message-rounded-edit:before { + content: "\ee37"; + } + .bxs-message-rounded-error:before { + content: "\ee38"; + } + .bxs-message-rounded-minus:before { + content: "\ee39"; + } + .bxs-message-rounded-x:before { + content: "\ee3a"; + } + .bxs-message-square:before { + content: "\ee3b"; + } + .bxs-message-square-add:before { + content: "\ee3c"; + } + .bxs-message-square-check:before { + content: "\ee3d"; + } + .bxs-message-square-detail:before { + content: "\ee3e"; + } + .bxs-message-square-dots:before { + content: "\ee3f"; + } + .bxs-message-square-edit:before { + content: "\ee40"; + } + .bxs-message-square-error:before { + content: "\ee41"; + } + .bxs-message-square-minus:before { + content: "\ee42"; + } + .bxs-message-square-x:before { + content: "\ee43"; + } + .bxs-message-x:before { + content: "\ee44"; + } + .bxs-meteor:before { + content: "\ee45"; + } + .bxs-microchip:before { + content: "\ee46"; + } + .bxs-microphone:before { + content: "\ee47"; + } + .bxs-microphone-alt:before { + content: "\ee48"; + } + .bxs-microphone-off:before { + content: "\ee49"; + } + .bxs-minus-circle:before { + content: "\ee4a"; + } + .bxs-minus-square:before { + content: "\ee4b"; + } + .bxs-mobile:before { + content: "\ee4c"; + } + .bxs-mobile-vibration:before { + content: "\ee4d"; + } + .bxs-moon:before { + content: "\ee4e"; + } + .bxs-mouse:before { + content: "\ee4f"; + } + .bxs-mouse-alt:before { + content: "\ee50"; + } + .bxs-movie:before { + content: "\ee51"; + } + .bxs-movie-play:before { + content: "\ee52"; + } + .bxs-music:before { + content: "\ee53"; + } + .bxs-navigation:before { + content: "\ee54"; + } + .bxs-network-chart:before { + content: "\ee55"; + } + .bxs-news:before { + content: "\ee56"; + } + .bxs-no-entry:before { + content: "\ee57"; + } + .bxs-note:before { + content: "\ee58"; + } + .bxs-notepad:before { + content: "\ee59"; + } + .bxs-notification:before { + content: "\ee5a"; + } + .bxs-notification-off:before { + content: "\ee5b"; + } + .bxs-offer:before { + content: "\ee5c"; + } + .bxs-package:before { + content: "\ee5d"; + } + .bxs-paint:before { + content: "\ee5e"; + } + .bxs-paint-roll:before { + content: "\ee5f"; + } + .bxs-palette:before { + content: "\ee60"; + } + .bxs-paper-plane:before { + content: "\ee61"; + } + .bxs-parking:before { + content: "\ee62"; + } + .bxs-paste:before { + content: "\ee63"; + } + .bxs-pen:before { + content: "\ee64"; + } + .bxs-pencil:before { + content: "\ee65"; + } + .bxs-phone:before { + content: "\ee66"; + } + .bxs-phone-call:before { + content: "\ee67"; + } + .bxs-phone-incoming:before { + content: "\ee68"; + } + .bxs-phone-off:before { + content: "\ee69"; + } + .bxs-phone-outgoing:before { + content: "\ee6a"; + } + .bxs-photo-album:before { + content: "\ee6b"; + } + .bxs-piano:before { + content: "\ee6c"; + } + .bxs-pie-chart:before { + content: "\ee6d"; + } + .bxs-pie-chart-alt:before { + content: "\ee6e"; + } + .bxs-pie-chart-alt-2:before { + content: "\ee6f"; + } + .bxs-pin:before { + content: "\ee70"; + } + .bxs-pizza:before { + content: "\ee71"; + } + .bxs-plane:before { + content: "\ee72"; + } + .bxs-plane-alt:before { + content: "\ee73"; + } + .bxs-plane-land:before { + content: "\ee74"; + } + .bxs-planet:before { + content: "\ee75"; + } + .bxs-plane-take-off:before { + content: "\ee76"; + } + .bxs-playlist:before { + content: "\ee77"; + } + .bxs-plug:before { + content: "\ee78"; + } + .bxs-plus-circle:before { + content: "\ee79"; + } + .bxs-plus-square:before { + content: "\ee7a"; + } + .bxs-pointer:before { + content: "\ee7b"; + } + .bxs-polygon:before { + content: "\ee7c"; + } + .bxs-printer:before { + content: "\ee7d"; + } + .bxs-purchase-tag:before { + content: "\ee7e"; + } + .bxs-purchase-tag-alt:before { + content: "\ee7f"; + } + .bxs-pyramid:before { + content: "\ee80"; + } + .bxs-quote-alt-left:before { + content: "\ee81"; + } + .bxs-quote-alt-right:before { + content: "\ee82"; + } + .bxs-quote-left:before { + content: "\ee83"; + } + .bxs-quote-right:before { + content: "\ee84"; + } + .bxs-quote-single-left:before { + content: "\ee85"; + } + .bxs-quote-single-right:before { + content: "\ee86"; + } + .bxs-radiation:before { + content: "\ee87"; + } + .bxs-radio:before { + content: "\ee88"; + } + .bxs-receipt:before { + content: "\ee89"; + } + .bxs-rectangle:before { + content: "\ee8a"; + } + .bxs-registered:before { + content: "\ee8b"; + } + .bxs-rename:before { + content: "\ee8c"; + } + .bxs-report:before { + content: "\ee8d"; + } + .bxs-rewind-circle:before { + content: "\ee8e"; + } + .bxs-right-arrow:before { + content: "\ee8f"; + } + .bxs-right-arrow-alt:before { + content: "\ee90"; + } + .bxs-right-arrow-circle:before { + content: "\ee91"; + } + .bxs-right-arrow-square:before { + content: "\ee92"; + } + .bxs-right-down-arrow-circle:before { + content: "\ee93"; + } + .bxs-right-top-arrow-circle:before { + content: "\ee94"; + } + .bxs-rocket:before { + content: "\ee95"; + } + .bxs-ruler:before { + content: "\ee96"; + } + .bxs-sad:before { + content: "\ee97"; + } + .bxs-save:before { + content: "\ee98"; + } + .bxs-school:before { + content: "\ee99"; + } + .bxs-search:before { + content: "\ee9a"; + } + .bxs-search-alt-2:before { + content: "\ee9b"; + } + .bxs-select-multiple:before { + content: "\ee9c"; + } + .bxs-send:before { + content: "\ee9d"; + } + .bxs-server:before { + content: "\ee9e"; + } + .bxs-shapes:before { + content: "\ee9f"; + } + .bxs-share:before { + content: "\eea0"; + } + .bxs-share-alt:before { + content: "\eea1"; + } + .bxs-shield:before { + content: "\eea2"; + } + .bxs-shield-alt-2:before { + content: "\eea3"; + } + .bxs-shield-x:before { + content: "\eea4"; + } + .bxs-ship:before { + content: "\eea5"; + } + .bxs-shocked:before { + content: "\eea6"; + } + .bxs-shopping-bag:before { + content: "\eea7"; + } + .bxs-shopping-bag-alt:before { + content: "\eea8"; + } + .bxs-shopping-bags:before { + content: "\eea9"; + } + .bxs-show:before { + content: "\eeaa"; + } + .bxs-skip-next-circle:before { + content: "\eeab"; + } + .bxs-skip-previous-circle:before { + content: "\eeac"; + } + .bxs-skull:before { + content: "\eead"; + } + .bxs-sleepy:before { + content: "\eeae"; + } + .bxs-slideshow:before { + content: "\eeaf"; + } + .bxs-smile:before { + content: "\eeb0"; + } + .bxs-sort-alt:before { + content: "\eeb1"; + } + .bxs-spa:before { + content: "\eeb2"; + } + .bxs-speaker:before { + content: "\eeb3"; + } + .bxs-spray-can:before { + content: "\eeb4"; + } + .bxs-spreadsheet:before { + content: "\eeb5"; + } + .bxs-square:before { + content: "\eeb6"; + } + .bxs-square-rounded:before { + content: "\eeb7"; + } + .bxs-star:before { + content: "\eeb8"; + } + .bxs-star-half:before { + content: "\eeb9"; + } + .bxs-sticker:before { + content: "\eeba"; + } + .bxs-stopwatch:before { + content: "\eebb"; + } + .bxs-store:before { + content: "\eebc"; + } + .bxs-store-alt:before { + content: "\eebd"; + } + .bxs-sun:before { + content: "\eebe"; + } + .bxs-tachometer:before { + content: "\eebf"; + } + .bxs-tag:before { + content: "\eec0"; + } + .bxs-tag-alt:before { + content: "\eec1"; + } + .bxs-tag-x:before { + content: "\eec2"; + } + .bxs-taxi:before { + content: "\eec3"; + } + .bxs-tennis-ball:before { + content: "\eec4"; + } + .bxs-terminal:before { + content: "\eec5"; + } + .bxs-thermometer:before { + content: "\eec6"; + } + .bxs-time:before { + content: "\eec7"; + } + .bxs-time-five:before { + content: "\eec8"; + } + .bxs-timer:before { + content: "\eec9"; + } + .bxs-tired:before { + content: "\eeca"; + } + .bxs-toggle-left:before { + content: "\eecb"; + } + .bxs-toggle-right:before { + content: "\eecc"; + } + .bxs-tone:before { + content: "\eecd"; + } + .bxs-torch:before { + content: "\eece"; + } + .bxs-to-top:before { + content: "\eecf"; + } + .bxs-traffic:before { + content: "\eed0"; + } + .bxs-traffic-barrier:before { + content: "\eed1"; + } + .bxs-traffic-cone:before { + content: "\eed2"; + } + .bxs-train:before { + content: "\eed3"; + } + .bxs-trash:before { + content: "\eed4"; + } + .bxs-trash-alt:before { + content: "\eed5"; + } + .bxs-tree:before { + content: "\eed6"; + } + .bxs-trophy:before { + content: "\eed7"; + } + .bxs-truck:before { + content: "\eed8"; + } + .bxs-t-shirt:before { + content: "\eed9"; + } + .bxs-tv:before { + content: "\eeda"; + } + .bxs-up-arrow:before { + content: "\eedb"; + } + .bxs-up-arrow-alt:before { + content: "\eedc"; + } + .bxs-up-arrow-circle:before { + content: "\eedd"; + } + .bxs-up-arrow-square:before { + content: "\eede"; + } + .bxs-upside-down:before { + content: "\eedf"; + } + .bxs-upvote:before { + content: "\eee0"; + } + .bxs-user:before { + content: "\eee1"; + } + .bxs-user-account:before { + content: "\eee2"; + } + .bxs-user-badge:before { + content: "\eee3"; + } + .bxs-user-check:before { + content: "\eee4"; + } + .bxs-user-circle:before { + content: "\eee5"; + } + .bxs-user-detail:before { + content: "\eee6"; + } + .bxs-user-minus:before { + content: "\eee7"; + } + .bxs-user-pin:before { + content: "\eee8"; + } + .bxs-user-plus:before { + content: "\eee9"; + } + .bxs-user-rectangle:before { + content: "\eeea"; + } + .bxs-user-voice:before { + content: "\eeeb"; + } + .bxs-user-x:before { + content: "\eeec"; + } + .bxs-vector:before { + content: "\eeed"; + } + .bxs-vial:before { + content: "\eeee"; + } + .bxs-video:before { + content: "\eeef"; + } + .bxs-video-off:before { + content: "\eef0"; + } + .bxs-video-plus:before { + content: "\eef1"; + } + .bxs-video-recording:before { + content: "\eef2"; + } + .bxs-videos:before { + content: "\eef3"; + } + .bxs-virus:before { + content: "\eef4"; + } + .bxs-virus-block:before { + content: "\eef5"; + } + .bxs-volume:before { + content: "\eef6"; + } + .bxs-volume-full:before { + content: "\eef7"; + } + .bxs-volume-low:before { + content: "\eef8"; + } + .bxs-volume-mute:before { + content: "\eef9"; + } + .bxs-wallet:before { + content: "\eefa"; + } + .bxs-wallet-alt:before { + content: "\eefb"; + } + .bxs-washer:before { + content: "\eefc"; + } + .bxs-watch:before { + content: "\eefd"; + } + .bxs-watch-alt:before { + content: "\eefe"; + } + .bxs-webcam:before { + content: "\eeff"; + } + .bxs-widget:before { + content: "\ef00"; + } + .bxs-window-alt:before { + content: "\ef01"; + } + .bxs-wine:before { + content: "\ef02"; + } + .bxs-wink-smile:before { + content: "\ef03"; + } + .bxs-wink-tongue:before { + content: "\ef04"; + } + .bxs-wrench:before { + content: "\ef05"; + } + .bxs-x-circle:before { + content: "\ef06"; + } + .bxs-x-square:before { + content: "\ef07"; + } + .bxs-yin-yang:before { + content: "\ef08"; + } + .bxs-zap:before { + content: "\ef09"; + } + .bxs-zoom-in:before { + content: "\ef0a"; + } + .bxs-zoom-out:before { + content: "\ef0b"; + } + \ No newline at end of file diff --git a/js_css/boxicons.js b/js_css/boxicons.js new file mode 100644 index 0000000..1fb49ba --- /dev/null +++ b/js_css/boxicons.js @@ -0,0 +1,2 @@ +!function(t,e,n,r,o){if("customElements"in n)o();else{if(n.AWAITING_WEB_COMPONENTS_POLYFILL)return void n.AWAITING_WEB_COMPONENTS_POLYFILL.then(o);var a=n.AWAITING_WEB_COMPONENTS_POLYFILL=f();a.then(o);var i=n.WEB_COMPONENTS_POLYFILL||"//cdnjs.cloudflare.com/ajax/libs/webcomponentsjs/2.0.2/webcomponents-bundle.js",s=n.ES6_CORE_POLYFILL||"//cdnjs.cloudflare.com/ajax/libs/core-js/2.5.3/core.min.js";"Promise"in n?c(i).then((function(){a.isDone=!0,a.exec()})):c(s).then((function(){c(i).then((function(){a.isDone=!0,a.exec()}))}))}function f(){var t=[];return t.isDone=!1,t.exec=function(){t.splice(0).forEach((function(t){t()}))},t.then=function(e){return t.isDone?e():t.push(e),t},t}function c(t){var e=f(),n=r.createElement("script");return n.type="text/javascript",n.readyState?n.onreadystatechange=function(){"loaded"!=n.readyState&&"complete"!=n.readyState||(n.onreadystatechange=null,e.isDone=!0,e.exec())}:n.onload=function(){e.isDone=!0,e.exec()},n.src=t,r.getElementsByTagName("head")[0].appendChild(n),n.then=e.then,n}}(0,0,window,document,(function(){var t,e;t=window,e=function(){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var o=e[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)n.d(r,o,function(e){return t[e]}.bind(null,o));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=5)}([function(t,e){t.exports=function(t){var e=[];return e.toString=function(){return this.map((function(e){var n=function(t,e){var n,r=t[1]||"",o=t[3];if(!o)return r;if(e&&"function"==typeof btoa){var a=(n=o,"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(n))))+" */"),i=o.sources.map((function(t){return"/*# sourceURL="+o.sourceRoot+t+" */"}));return[r].concat(i).concat([a]).join("\n")}return[r].join("\n")}(e,t);return e[2]?"@media "+e[2]+"{"+n+"}":n})).join("")},e.i=function(t,n){"string"==typeof t&&(t=[[null,t,""]]);for(var r={},o=0;o\n:host {\n display: inline-block;\n font-size: initial;\n box-sizing: border-box;\n width: 24px;\n height: 24px;\n}\n:host([size=xs]) {\n width: 0.8rem;\n height: 0.8rem;\n}\n:host([size=sm]) {\n width: 1.55rem;\n height: 1.55rem;\n}\n:host([size=md]) {\n width: 2.25rem;\n height: 2.25rem;\n}\n:host([size=lg]) {\n width: 3.0rem;\n height: 3.0rem;\n}\n\n:host([size]:not([size=""]):not([size=xs]):not([size=sm]):not([size=md]):not([size=lg])) {\n width: auto;\n height: auto;\n}\n:host([pull=left]) #icon {\n float: left;\n margin-right: .3em!important;\n}\n:host([pull=right]) #icon {\n float: right;\n margin-left: .3em!important;\n}\n:host([border=square]) #icon {\n padding: .25em;\n border: .07em solid rgba(0,0,0,.1);\n border-radius: .25em;\n}\n:host([border=circle]) #icon {\n padding: .25em;\n border: .07em solid rgba(0,0,0,.1);\n border-radius: 50%;\n}\n#icon,\nsvg {\n width: 100%;\n height: 100%;\n}\n#icon {\n box-sizing: border-box;\n} \n'+f.a+"\n"+l.a+'\n\n
';var g=d(function(t){function e(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e);var t=function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}(this,(e.__proto__||Object.getPrototypeOf(e)).call(this));return t.$ui=t.attachShadow({mode:"open"}),t.$ui.appendChild(t.ownerDocument.importNode(y.content,!0)),h()&&p.ShadyCSS.styleElement(t),t._state={$iconHolder:t.$ui.getElementById("icon"),type:t.getAttribute("type")},t}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,HTMLElement),u(e,null,[{key:"getIconSvg",value:function(t,e){var n=this.cdnUrl+"/regular/bx-"+t+".svg";return"solid"===e?n=this.cdnUrl+"/solid/bxs-"+t+".svg":"logo"===e&&(n=this.cdnUrl+"/logos/bxl-"+t+".svg"),n&&b[n]||(b[n]=new Promise((function(t,e){var r=new XMLHttpRequest;r.addEventListener("load",(function(){this.status<200||this.status>=300?e(new Error(this.status+" "+this.responseText)):t(this.responseText)})),r.onerror=e,r.onabort=e,r.open("GET",n),r.send()}))),b[n]}},{key:"define",value:function(t){t=t||this.tagName,h()&&p.ShadyCSS.prepareTemplate(y,t),customElements.define(t,this)}},{key:"cdnUrl",get:function(){return"//unpkg.com/boxicons@2.1.4/svg"}},{key:"tagName",get:function(){return"box-icon"}},{key:"observedAttributes",get:function(){return["type","name","color","size","rotate","flip","animation","border","pull"]}}]),u(e,[{key:"attributeChangedCallback",value:function(t,e,n){var r=this._state.$iconHolder;switch(t){case"type":!function(t,e,n){var r=t._state;r.$iconHolder.textContent="",r.type&&(r.type=null),r.type=!n||"solid"!==n&&"logo"!==n?"regular":n,void 0!==r.currentName&&t.constructor.getIconSvg(r.currentName,r.type).then((function(t){r.type===n&&(r.$iconHolder.innerHTML=t)})).catch((function(t){console.error("Failed to load icon: "+r.currentName+"\n"+t)}))}(this,0,n);break;case"name":!function(t,e,n){var r=t._state;r.currentName=n,r.$iconHolder.textContent="",n&&void 0!==r.type&&t.constructor.getIconSvg(n,r.type).then((function(t){r.currentName===n&&(r.$iconHolder.innerHTML=t)})).catch((function(t){console.error("Failed to load icon: "+n+"\n"+t)}))}(this,0,n);break;case"color":r.style.fill=n||"";break;case"size":!function(t,e,n){var r=t._state;r.size&&(r.$iconHolder.style.width=r.$iconHolder.style.height="",r.size=r.sizeType=null),n&&!/^(xs|sm|md|lg)$/.test(r.size)&&(r.size=n.trim(),r.$iconHolder.style.width=r.$iconHolder.style.height=r.size)}(this,0,n);break;case"rotate":e&&r.classList.remove("bx-rotate-"+e),n&&r.classList.add("bx-rotate-"+n);break;case"flip":e&&r.classList.remove("bx-flip-"+e),n&&r.classList.add("bx-flip-"+n);break;case"animation":e&&r.classList.remove("bx-"+e),n&&r.classList.add("bx-"+n)}}},{key:"connectedCallback",value:function(){h()&&p.ShadyCSS.styleElement(this)}}]),e}());e.default=g,g.define()}])},"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.BoxIconElement=e():t.BoxIconElement=e()})); +//# sourceMappingURL=boxicons.js.map \ No newline at end of file diff --git a/js_css/fount/boxicons.eot b/js_css/fount/boxicons.eot new file mode 100644 index 0000000..6e58e99 Binary files /dev/null and b/js_css/fount/boxicons.eot differ diff --git a/js_css/fount/boxicons.svg b/js_css/fount/boxicons.svg new file mode 100644 index 0000000..1ecfe44 --- /dev/null +++ b/js_css/fount/boxicons.svg @@ -0,0 +1,1660 @@ + + + + + + +{ + "fontFamily": "boxicons", + "majorVersion": 2, + "minorVersion": 0.7, + "version": "Version 2.0", + "fontId": "boxicons", + "psName": "boxicons", + "subFamily": "Regular", + "fullName": "boxicons", + "description": "Font generated by IcoMoon." +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/js_css/fount/boxicons.ttf b/js_css/fount/boxicons.ttf new file mode 100644 index 0000000..89a5096 Binary files /dev/null and b/js_css/fount/boxicons.ttf differ diff --git a/js_css/fount/boxicons.woff b/js_css/fount/boxicons.woff new file mode 100644 index 0000000..841e1d4 Binary files /dev/null and b/js_css/fount/boxicons.woff differ diff --git a/js_css/fount/boxicons.woff2 b/js_css/fount/boxicons.woff2 new file mode 100644 index 0000000..79c35e4 Binary files /dev/null and b/js_css/fount/boxicons.woff2 differ diff --git a/js_css/fount/remixicon.ttf b/js_css/fount/remixicon.ttf new file mode 100644 index 0000000..c461f40 Binary files /dev/null and b/js_css/fount/remixicon.ttf differ diff --git a/js_css/naive.js b/js_css/naive.js new file mode 100644 index 0000000..2b11eef --- /dev/null +++ b/js_css/naive.js @@ -0,0 +1,104126 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('vue')) : + typeof define === 'function' && define.amd ? define(['exports', 'vue'], factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.naive = {}, global.Vue)); +})(this, (function (exports, vue) { 'use strict'; + + let onceCbs = []; + const paramsMap = new WeakMap(); + + function flushOnceCallbacks() { + onceCbs.forEach(cb => cb(...paramsMap.get(cb))); + onceCbs = []; + } + + function beforeNextFrameOnce(cb) { + for (var _len = arguments.length, params = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + params[_key - 1] = arguments[_key]; + } + + paramsMap.set(cb, params); + if (onceCbs.includes(cb)) return; + onceCbs.push(cb) === 1 && requestAnimationFrame(flushOnceCallbacks); + } + + function getParentNode$1(node) { + // document type + if (node.nodeType === 9) { + return null; + } + + return node.parentNode; + } + + function getScrollParent$1(node) { + if (node === null) return null; + const parentNode = getParentNode$1(node); + + if (parentNode === null) { + return null; + } // Document + + + if (parentNode.nodeType === 9) { + return document.documentElement; + } // Element + + + if (parentNode.nodeType === 1) { + // Firefox want us to check `-x` and `-y` variations as well + const { + overflow, + overflowX, + overflowY + } = getComputedStyle(parentNode); + + if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) { + return parentNode; + } + } + + return getScrollParent$1(parentNode); + } + + function unwrapElement(target) { + if (typeof target === 'string') return document.querySelector(target); + if (typeof target === 'function') return target(); + return target; + } + + function happensIn(e, dataSetPropName) { + let { + target + } = e; + + while (target) { + if (target.dataset) { + if (target.dataset[dataSetPropName] !== undefined) return true; + } + + target = target.parentElement; + } + + return false; + } + + function getPreciseEventTarget(event) { + return event.composedPath()[0] || null; + } + + function parseResponsiveProp(reponsiveProp) { + if (typeof reponsiveProp === "number") { + return { + '': reponsiveProp.toString() + }; + } + + const params = {}; + reponsiveProp.split(/ +/).forEach(pairLiteral => { + if (pairLiteral === '') return; + const [prefix, value] = pairLiteral.split(':'); + + if (value === undefined) { + params[''] = prefix; + } else { + params[prefix] = value; + } + }); + return params; + } + + function parseResponsivePropValue(reponsiveProp, activeKeyOrSize) { + var _a; + + if (reponsiveProp === undefined || reponsiveProp === null) return undefined; + const classObj = parseResponsiveProp(reponsiveProp); + if (activeKeyOrSize === undefined) return classObj['']; + + if (typeof activeKeyOrSize === 'string') { + return (_a = classObj[activeKeyOrSize]) !== null && _a !== void 0 ? _a : classObj['']; + } else if (Array.isArray(activeKeyOrSize)) { + for (let i = activeKeyOrSize.length - 1; i >= 0; --i) { + const key = activeKeyOrSize[i]; + if (key in classObj) return classObj[key]; + } + + return classObj['']; + } else { + // Here we suppose all the keys are number formatted + let activeValue = undefined; + let activeKey = -1; + Object.keys(classObj).forEach(key => { + const keyAsNum = Number(key); + + if (!Number.isNaN(keyAsNum) && activeKeyOrSize >= keyAsNum && keyAsNum >= activeKey) { + activeKey = keyAsNum; + activeValue = classObj[key]; + } + }); + return activeValue; + } + } + + function depx(value) { + if (typeof value === 'string') { + if (value.endsWith('px')) { + return Number(value.slice(0, value.length - 2)); + } + + return Number(value); + } + + return value; + } + + function pxfy(value) { + if (value === undefined || value === null) return undefined; + if (typeof value === 'number') return `${value}px`; + if (value.endsWith('px')) return value; + return `${value}px`; + } + + function getMargin(value, position) { + const parts = value.trim().split(/\s+/g); + const margin = { + top: parts[0] + }; + + switch (parts.length) { + case 1: + margin.right = parts[0]; + margin.bottom = parts[0]; + margin.left = parts[0]; + break; + + case 2: + margin.right = parts[1]; + margin.left = parts[1]; + margin.bottom = parts[0]; + break; + + case 3: + margin.right = parts[1]; + margin.bottom = parts[2]; + margin.left = parts[1]; + break; + + case 4: + margin.right = parts[1]; + margin.bottom = parts[2]; + margin.left = parts[3]; + break; + + default: + throw new Error('[seemly/getMargin]:' + value + ' is not a valid value.'); + } + + if (position === undefined) return margin; + return margin[position]; + } + + function getGap(value, orient) { + const [rowGap, colGap] = value.split(' '); + if (!orient) return { + row: rowGap, + col: colGap || rowGap + }; + return orient === 'row' ? rowGap : colGap; + } + + var colors = { + black: '#000', + silver: '#C0C0C0', + gray: '#808080', + white: '#FFF', + maroon: '#800000', + red: '#F00', + purple: '#800080', + fuchsia: '#F0F', + green: '#008000', + lime: '#0F0', + olive: '#808000', + yellow: '#FF0', + navy: '#000080', + blue: '#00F', + teal: '#008080', + aqua: '#0FF', + transparent: '#0000' + }; + + // All the algorithms credit to https://stackoverflow.com/questions/36721830/convert-hsl-to-rgb-and-hex/54014428#54014428 + // original author: Kamil Kiełczewski + + /** + * @param h 360 + * @param s 100 + * @param l 100 + * @returns [h, s, v] 360, 100, 100 + */ + function hsl2hsv(h, s, l) { + s /= 100; + l /= 100; + const v = s * Math.min(l, 1 - l) + l; + return [h, v ? (2 - 2 * l / v) * 100 : 0, v * 100]; + } + /** + * @param h 360 + * @param s 100 + * @param v 100 + * @returns [h, s, l] 360, 100, 100 + */ + + function hsv2hsl(h, s, v) { + s /= 100; + v /= 100; + const l = v - v * s / 2; + const m = Math.min(l, 1 - l); + return [h, m ? (v - l) / m * 100 : 0, l * 100]; + } + /** + * @param h 360 + * @param s 100 + * @param v 100 + * @returns [r, g, b] 255, 255, 255 + */ + + function hsv2rgb(h, s, v) { + s /= 100; + v /= 100; + + let f = function (n) { + let k = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : (n + h / 60) % 6; + return v - v * s * Math.max(Math.min(k, 4 - k, 1), 0); + }; + + return [f(5) * 255, f(3) * 255, f(1) * 255]; + } + /** + * @param r 255 + * @param g 255 + * @param b 255 + * @returns [360, 100, 100] + */ + + function rgb2hsv(r, g, b) { + r /= 255; + g /= 255; + b /= 255; + let v = Math.max(r, g, b), + c = v - Math.min(r, g, b); + let h = c && (v == r ? (g - b) / c : v == g ? 2 + (b - r) / c : 4 + (r - g) / c); + return [60 * (h < 0 ? h + 6 : h), v && c / v * 100, v * 100]; + } + /** + * @param r 255 + * @param g 255 + * @param b 255 + * @returns [360, 100, 100] + */ + + function rgb2hsl(r, g, b) { + r /= 255; + g /= 255; + b /= 255; + let v = Math.max(r, g, b), + c = v - Math.min(r, g, b), + f = 1 - Math.abs(v + v - c - 1); + let h = c && (v == r ? (g - b) / c : v == g ? 2 + (b - r) / c : 4 + (r - g) / c); + return [60 * (h < 0 ? h + 6 : h), f ? c / f * 100 : 0, (v + v - c) * 50]; + } + /** + * @param h 360 + * @param s 100 + * @param l 100 + * @returns [255, 255, 255] + */ + + function hsl2rgb(h, s, l) { + s /= 100; + l /= 100; + let a = s * Math.min(l, 1 - l); + + let f = function (n) { + let k = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : (n + h / 30) % 12; + return l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1); + }; + + return [f(0) * 255, f(8) * 255, f(4) * 255]; + } + + const prefix$1 = '^\\s*'; + const suffix = '\\s*$'; + const percent = '\\s*((\\.\\d+)|(\\d+(\\.\\d*)?))%\\s*'; // 4 offset + + const float = '\\s*((\\.\\d+)|(\\d+(\\.\\d*)?))\\s*'; // 4 offset + + const hex = '([0-9A-Fa-f])'; + const dhex = '([0-9A-Fa-f]{2})'; + const hslRegex = new RegExp(`${prefix$1}hsl\\s*\\(${float},${percent},${percent}\\)${suffix}`); + const hsvRegex = new RegExp(`${prefix$1}hsv\\s*\\(${float},${percent},${percent}\\)${suffix}`); + const hslaRegex = new RegExp(`${prefix$1}hsla\\s*\\(${float},${percent},${percent},${float}\\)${suffix}`); + const hsvaRegex = new RegExp(`${prefix$1}hsva\\s*\\(${float},${percent},${percent},${float}\\)${suffix}`); + const rgbRegex = new RegExp(`${prefix$1}rgb\\s*\\(${float},${float},${float}\\)${suffix}`); + const rgbaRegex = new RegExp(`${prefix$1}rgba\\s*\\(${float},${float},${float},${float}\\)${suffix}`); + const sHexRegex = new RegExp(`${prefix$1}#${hex}${hex}${hex}${suffix}`); + const hexRegex = new RegExp(`${prefix$1}#${dhex}${dhex}${dhex}${suffix}`); + const sHexaRegex = new RegExp(`${prefix$1}#${hex}${hex}${hex}${hex}${suffix}`); + const hexaRegex = new RegExp(`${prefix$1}#${dhex}${dhex}${dhex}${dhex}${suffix}`); + + function parseHex(value) { + return parseInt(value, 16); + } + /** + * Convert color string to hsla array + * @param color format like hsl(180, 100%, 100%), hsla(180, 100%, 100%, 1) + * @returns + */ + + + function hsla(color) { + try { + let i; + + if (i = hslaRegex.exec(color)) { + return [roundDeg(i[1]), roundPercent(i[5]), roundPercent(i[9]), roundAlpha(i[13])]; + } else if (i = hslRegex.exec(color)) { + return [roundDeg(i[1]), roundPercent(i[5]), roundPercent(i[9]), 1]; + } + + throw new Error(`[seemly/hsla]: Invalid color value ${color}.`); + } catch (e) { + throw e; + } + } + /** + * Convert color string to hsva array + * @param color format like hsv(180, 100%, 100%), hsva(180, 100%, 100%, 1) + * @returns + */ + + function hsva(color) { + try { + let i; + + if (i = hsvaRegex.exec(color)) { + return [roundDeg(i[1]), roundPercent(i[5]), roundPercent(i[9]), roundAlpha(i[13])]; + } else if (i = hsvRegex.exec(color)) { + return [roundDeg(i[1]), roundPercent(i[5]), roundPercent(i[9]), 1]; + } + + throw new Error(`[seemly/hsva]: Invalid color value ${color}.`); + } catch (e) { + throw e; + } + } + /** + * Convert color string to rgba array. + * @param color format like #000[0], #000000[00], rgb(0, 0, 0), rgba(0, 0, 0, 0) and basic color keywords https://www.w3.org/TR/css-color-3/#html4 and transparent + * @returns + */ + + function rgba(color) { + try { + let i; + + if (i = hexRegex.exec(color)) { + return [parseHex(i[1]), parseHex(i[2]), parseHex(i[3]), 1]; + } else if (i = rgbRegex.exec(color)) { + return [roundChannel(i[1]), roundChannel(i[5]), roundChannel(i[9]), 1]; + } else if (i = rgbaRegex.exec(color)) { + return [roundChannel(i[1]), roundChannel(i[5]), roundChannel(i[9]), roundAlpha(i[13])]; + } else if (i = sHexRegex.exec(color)) { + return [parseHex(i[1] + i[1]), parseHex(i[2] + i[2]), parseHex(i[3] + i[3]), 1]; + } else if (i = hexaRegex.exec(color)) { + return [parseHex(i[1]), parseHex(i[2]), parseHex(i[3]), roundAlpha(parseHex(i[4]) / 255)]; + } else if (i = sHexaRegex.exec(color)) { + return [parseHex(i[1] + i[1]), parseHex(i[2] + i[2]), parseHex(i[3] + i[3]), roundAlpha(parseHex(i[4] + i[4]) / 255)]; + } else if (color in colors) { + return rgba(colors[color]); + } + + throw new Error(`[seemly/rgba]: Invalid color value ${color}.`); + } catch (e) { + throw e; + } + } + + function normalizeAlpha$1(alphaValue) { + return alphaValue > 1 ? 1 : alphaValue < 0 ? 0 : alphaValue; + } + + function stringifyRgb(r, g, b) { + return `rgb(${roundChannel(r)}, ${roundChannel(g)}, ${roundChannel(b)})`; + } + + function stringifyRgba(r, g, b, a) { + return `rgba(${roundChannel(r)}, ${roundChannel(g)}, ${roundChannel(b)}, ${normalizeAlpha$1(a)})`; + } + + function compositeChannel(v1, a1, v2, a2, a) { + return roundChannel((v1 * a1 * (1 - a2) + v2 * a2) / a); + } + + function composite(background, overlay) { + if (!Array.isArray(background)) background = rgba(background); + if (!Array.isArray(overlay)) overlay = rgba(overlay); + const a1 = background[3]; + const a2 = overlay[3]; + const alpha = roundAlpha(a1 + a2 - a1 * a2); + return stringifyRgba(compositeChannel(background[0], a1, overlay[0], a2, alpha), compositeChannel(background[1], a1, overlay[1], a2, alpha), compositeChannel(background[2], a1, overlay[2], a2, alpha), alpha); + } + function changeColor(base, options) { + const [r, g, b, a = 1] = Array.isArray(base) ? base : rgba(base); + + if (options.alpha) { + return stringifyRgba(r, g, b, options.alpha); + } + + return stringifyRgba(r, g, b, a); + } + function scaleColor(base, options) { + const [r, g, b, a = 1] = Array.isArray(base) ? base : rgba(base); + const { + lightness = 1, + alpha = 1 + } = options; + return toRgbaString([r * lightness, g * lightness, b * lightness, a * alpha]); + } + function roundAlpha(value) { + const v = Math.round(Number(value) * 100) / 100; + if (v > 1) return 1; + if (v < 0) return 0; + return v; + } + function roundDeg(value) { + const v = Math.round(Number(value)); + if (v >= 360) return 0; + if (v < 0) return 0; + return v; + } + function roundChannel(value) { + const v = Math.round(Number(value)); + if (v > 255) return 255; + if (v < 0) return 0; + return v; + } + function roundPercent(value) { + const v = Math.round(Number(value)); + if (v > 100) return 100; + if (v < 0) return 0; + return v; + } + function toRgbString(base) { + const [r, g, b] = Array.isArray(base) ? base : rgba(base); + return stringifyRgb(r, g, b); + } + function toRgbaString(base) { + const [r, g, b] = base; + + if (3 in base) { + return `rgba(${roundChannel(r)}, ${roundChannel(g)}, ${roundChannel(b)}, ${roundAlpha(base[3])})`; + } + + return `rgba(${roundChannel(r)}, ${roundChannel(g)}, ${roundChannel(b)}, 1)`; + } + function toHsvString(base) { + return `hsv(${roundDeg(base[0])}, ${roundPercent(base[1])}%, ${roundPercent(base[2])}%)`; + } + function toHsvaString(base) { + const [h, s, v] = base; + + if (3 in base) { + return `hsva(${roundDeg(h)}, ${roundPercent(s)}%, ${roundPercent(v)}%, ${roundAlpha(base[3])})`; + } + + return `hsva(${roundDeg(h)}, ${roundPercent(s)}%, ${roundPercent(v)}%, 1)`; + } + function toHslString(base) { + return `hsl(${roundDeg(base[0])}, ${roundPercent(base[1])}%, ${roundPercent(base[2])}%)`; + } + function toHslaString(base) { + const [h, s, l] = base; + + if (3 in base) { + return `hsla(${roundDeg(h)}, ${roundPercent(s)}%, ${roundPercent(l)}%, ${roundAlpha(base[3])})`; + } + + return `hsla(${roundDeg(h)}, ${roundPercent(s)}%, ${roundPercent(l)}%, 1)`; + } + /** + * + * @param base [255, 255, 255, 255], [255, 255, 255], any hex string + * @returns + */ + + function toHexaString(base) { + if (typeof base === 'string') { + let i; + + if (i = hexRegex.exec(base)) { + return `${i[0]}FF`; + } else if (i = hexaRegex.exec(base)) { + return i[0]; + } else if (i = sHexRegex.exec(base)) { + return `#${i[1]}${i[1]}${i[2]}${i[2]}${i[3]}${i[3]}FF`; + } else if (i = sHexaRegex.exec(base)) { + return `#${i[1]}${i[1]}${i[2]}${i[2]}${i[3]}${i[3]}${i[4]}${i[4]}`; + } + + throw new Error(`[seemly/toHexString]: Invalid hex value ${base}.`); + } + + const hex = `#${base.slice(0, 3).map(unit => roundChannel(unit).toString(16).toUpperCase().padStart(2, '0')).join('')}`; + const a = base.length === 3 ? 'FF' : roundChannel(base[3] * 255).toString(16).padStart(2, '0').toUpperCase(); + return hex + a; + } + /** + * + * @param base [255, 255, 255, 255], [255, 255, 255], any hex string + * @returns + */ + + function toHexString(base) { + if (typeof base === 'string') { + let i; + + if (i = hexRegex.exec(base)) { + return i[0]; + } else if (i = hexaRegex.exec(base)) { + return i[0].slice(0, 7); + } else if (i = sHexRegex.exec(base) || sHexaRegex.exec(base)) { + return `#${i[1]}${i[1]}${i[2]}${i[2]}${i[3]}${i[3]}`; + } + + throw new Error(`[seemly/toHexString]: Invalid hex value ${base}.`); + } + + return `#${base.slice(0, 3).map(unit => roundChannel(unit).toString(16).toUpperCase().padStart(2, '0')).join('')}`; + } + + function createId() { + let length = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 8; + return Math.random().toString(16).slice(2, 2 + length); + } + function repeat(count, v) { + const ret = []; + + for (let i = 0; i < count; ++i) { + ret.push(v); + } + + return ret; + } + + function indexMap(count, createValue) { + const ret = []; + + if (!createValue) { + for (let i = 0; i < count; ++i) { + ret.push(i); + } + + return ret; + } + + for (let i = 0; i < count; ++i) { + ret.push(createValue(i)); + } + + return ret; + } + + function getSlot$1(instance) { + let slotName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "default"; + let fallback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : []; + const slots = instance.$slots; + const slot = slots[slotName]; + if (slot === void 0) return fallback; + return slot(); + } + + function getVNodeChildren(vNode) { + let slotName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "default"; + let fallback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : []; + const { + children + } = vNode; + + if (children !== null && typeof children === "object" && !Array.isArray(children)) { + const slot = children[slotName]; + + if (typeof slot === "function") { + return slot(); + } + } + + return fallback; + } + + function keep(object) { + let keys = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; + let rest = arguments.length > 2 ? arguments[2] : undefined; + const keepedObject = {}; + keys.forEach(key => { + keepedObject[key] = object[key]; + }); + return Object.assign(keepedObject, rest); + } + + function omit(object) { + let keys = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; + let rest = arguments.length > 2 ? arguments[2] : undefined; + const omitedObject = {}; + const originalKeys = Object.getOwnPropertyNames(object); + originalKeys.forEach(originalKey => { + if (!keys.includes(originalKey)) { + omitedObject[originalKey] = object[originalKey]; + } + }); + return Object.assign(omitedObject, rest); + } + + function flatten$3(vNodes) { + let filterCommentNode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + let result = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : []; + vNodes.forEach(vNode => { + if (vNode === null) return; + + if (typeof vNode !== "object") { + if (typeof vNode === "string" || typeof vNode === "number") { + result.push(vue.createTextVNode(String(vNode))); + } + + return; + } + + if (Array.isArray(vNode)) { + flatten$3(vNode, filterCommentNode, result); + return; + } + + if (vNode.type === vue.Fragment) { + if (vNode.children === null) return; + + if (Array.isArray(vNode.children)) { + flatten$3(vNode.children, filterCommentNode, result); + } + } else if (vNode.type !== vue.Comment) { + result.push(vNode); + } + }); + return result; + } + + function call(funcs) { + for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + if (Array.isArray(funcs)) { + funcs.forEach(func => call(func, ...args)); + } else return funcs(...args); + } + + function keysOf(obj) { + return Object.keys(obj); + } + + const render$1 = function (r) { + if (typeof r === "function") { + for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + return r(...args); + } else if (typeof r === "string") { + return vue.createTextVNode(r); + } else if (typeof r === "number") { + return vue.createTextVNode(String(r)); + } else { + return null; + } + }; + + const warnedMessages = /* @__PURE__ */new Set(); + function warnOnce(location, message) { + const mergedMessage = `[naive/${location}]: ${message}`; + if (warnedMessages.has(mergedMessage)) return; + warnedMessages.add(mergedMessage); + console.error(mergedMessage); + } + function warn$2(location, message) { + console.error(`[naive/${location}]: ${message}`); + } + function throwError(location, message) { + throw new Error(`[naive/${location}]: ${message}`); + } + + function smallerSize(size) { + switch (size) { + case "tiny": + return "mini"; + + case "small": + return "tiny"; + + case "medium": + return "small"; + + case "large": + return "medium"; + + case "huge": + return "large"; + } + + throw Error(`${size} has no smaller size.`); + } + + function getTitleAttribute(value) { + switch (typeof value) { + case "string": + return value || void 0; + + case "number": + return String(value); + + default: + return void 0; + } + } + + function getFirstSlotVNode(slots) { + let slotName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "default"; + let props = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : void 0; + const slot = slots[slotName]; + + if (!slot) { + warn$2("getFirstSlotVNode", `slot[${slotName}] is empty`); + return null; + } + + const slotContent = flatten$3(slot(props)); + + if (slotContent.length === 1) { + return slotContent[0]; + } else { + warn$2("getFirstSlotVNode", `slot[${slotName}] should have exactly one child`); + return null; + } + } + + function createDataKey(key) { + return typeof key === "string" ? `s-${key}` : `n-${key}`; + } + + function createRefSetter(ref) { + return inst => { + if (inst) { + ref.value = inst.$el; + } else { + ref.value = null; + } + }; + } + + function createInjectionKey(key) { + return key; + } + + function ensureValidVNode(vnodes) { + return vnodes.some(child => { + if (!vue.isVNode(child)) { + return true; + } + + if (child.type === vue.Comment) { + return false; + } + + if (child.type === vue.Fragment && !ensureValidVNode(child.children)) { + return false; + } + + return true; + }) ? vnodes : null; + } + + function resolveSlot(slot, fallback) { + return slot && ensureValidVNode(slot()) || fallback(); + } + function resolveSlotWithProps(slot, props, fallback) { + return slot && ensureValidVNode(slot(props)) || fallback(props); + } + function resolveWrappedSlot(slot, wrapper) { + const children = slot && ensureValidVNode(slot()); + return wrapper(children || null); + } + function isSlotEmpty(slot) { + return !(slot && ensureValidVNode(slot())); + } + + function mergeEventHandlers(handlers) { + const filteredHandlers = handlers.filter(handler => handler !== void 0); + if (filteredHandlers.length === 0) return void 0; + if (filteredHandlers.length === 1) return filteredHandlers[0]; + return e => { + handlers.forEach(handler => { + if (handler) { + handler(e); + } + }); + }; + } + + function isNodeVShowFalse(vNode) { + const showDir = vNode.dirs?.find(_ref => { + let { + dir + } = _ref; + return dir === vue.vShow; + }); + return !!(showDir && showDir.value === false); + } + + const Wrapper = vue.defineComponent({ + render() { + return this.$slots.default?.(); + } + }); + + const pureNumberRegex = /^(\d|\.)+$/; + const numberRegex = /(\d|\.)+/; + function formatLength(length) { + let { + c = 1, + offset = 0, + attachPx = true + } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + if (typeof length === "number") { + const result = (length + offset) * c; + if (result === 0) return "0"; + return `${result}px`; + } else if (typeof length === "string") { + if (pureNumberRegex.test(length)) { + const result = (Number(length) + offset) * c; + + if (attachPx) { + if (result === 0) return "0"; + return `${result}px`; + } else { + return `${result}`; + } + } else { + const result = numberRegex.exec(length); + if (!result) return length; + return length.replace(numberRegex, String((Number(result[0]) + offset) * c)); + } + } + + return length; + } + + function color2Class(color) { + return color.replace(/#|\(|\)|,|\s/g, "_"); + } + + function ampCount(selector) { + let cnt = 0; + + for (let i = 0; i < selector.length; ++i) { + if (selector[i] === '&') ++cnt; + } + + return cnt; + } + /** + * Don't just use ',' to separate css selector. For example: + * x:(a, b) {} will be split into 'x:(a' and 'b)', which is not expected. + * Make sure comma doesn't exist inside parentheses. + */ + + + const separatorRegex = /\s*,(?![^(]*\))\s*/g; + const extraSpaceRegex = /\s+/g; + /** + * selector must includes '&' + * selector is trimmed + * every part of amp is trimmed + */ + + function resolveSelectorWithAmp(amp, selector) { + const nextAmp = []; + selector.split(separatorRegex).forEach(partialSelector => { + let round = ampCount(partialSelector); // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions + + if (!round) { + amp.forEach(partialAmp => { + nextAmp.push( // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions + (partialAmp && partialAmp + ' ') + partialSelector); + }); + return; + } else if (round === 1) { + amp.forEach(partialAmp => { + nextAmp.push(partialSelector.replace('&', partialAmp)); + }); + return; + } + + let partialNextAmp = [partialSelector]; // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions + + while (round--) { + const nextPartialNextAmp = []; + partialNextAmp.forEach(selectorItr => { + amp.forEach(partialAmp => { + nextPartialNextAmp.push(selectorItr.replace('&', partialAmp)); + }); + }); + partialNextAmp = nextPartialNextAmp; + } + + partialNextAmp.forEach(part => nextAmp.push(part)); + }); + return nextAmp; + } + /** + * selector mustn't includes '&' + * selector is trimmed + */ + + + function resolveSelector(amp, selector) { + const nextAmp = []; + selector.split(separatorRegex).forEach(partialSelector => { + amp.forEach(partialAmp => { + // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions + nextAmp.push((partialAmp && partialAmp + ' ') + partialSelector); + }); + }); + return nextAmp; + } + + function parseSelectorPath(selectorPaths) { + let amp = ['']; + selectorPaths.forEach(selector => { + // eslint-disable-next-line + selector = selector && selector.trim(); + + if ( // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions + !selector) { + /** + * if it's a empty selector, do nothing + */ + return; + } // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions + + + if (selector.includes('&')) { + amp = resolveSelectorWithAmp(amp, selector); + } else { + amp = resolveSelector(amp, selector); + } + }); + return amp.join(', ').replace(extraSpaceRegex, ' '); + } + + function removeElement(el) { + /* istanbul ignore if */ + // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions + if (!el) return; + const parentElement = el.parentElement; + /* istanbul ignore else */ + // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions + + if (parentElement) parentElement.removeChild(el); + } + function queryElement(id) { + return document.head.querySelector(`style[cssr-id="${id}"]`); + } + function createElement(id) { + const el = document.createElement('style'); + el.setAttribute('cssr-id', id); + return el; + } + function isMediaOrSupports(selector) { + // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions + if (!selector) return false; + return /^\s*@(s|m)/.test(selector); + } + + const kebabRegex = /[A-Z]/g; + + function kebabCase(pattern) { + return pattern.replace(kebabRegex, match => '-' + match.toLowerCase()); + } + /** TODO: refine it to solve nested object */ + + + function unwrapProperty(prop) { + let indent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ' '; + + if (typeof prop === 'object' && prop !== null) { + return ' {\n' + Object.entries(prop).map(v => { + return indent + ` ${kebabCase(v[0])}: ${v[1]};`; + }).join('\n') + '\n' + indent + '}'; + } + + return `: ${prop};`; + } + /** unwrap properties */ + + + function unwrapProperties(props, instance, params) { + if (typeof props === 'function') { + return props({ + context: instance.context, + props: params + }); + } + + return props; + } + + function createStyle(selector, props, instance, params) { + if (!props) return ''; // eslint-disable-next-line + + const unwrappedProps = unwrapProperties(props, instance, params); + if (!unwrappedProps) return ''; + + if (typeof unwrappedProps === 'string') { + return `${selector} {\n${unwrappedProps}\n}`; + } + + const propertyNames = Object.keys(unwrappedProps); + + if (propertyNames.length === 0) { + if (instance.config.keepEmptyBlock) return selector + ' {\n}'; + return ''; + } + + const statements = selector ? [selector + ' {'] : []; + propertyNames.forEach(propertyName => { + const property = unwrappedProps[propertyName]; + + if (propertyName === 'raw') { + statements.push('\n' + property + '\n'); + return; + } + + propertyName = kebabCase(propertyName); + + if (property !== null && property !== undefined) { + statements.push(` ${propertyName}${unwrapProperty(property)}`); + } + }); + + if (selector) { + statements.push('}'); + } + + return statements.join('\n'); + } + + function loopCNodeListWithCallback(children, options, callback) { + /* istanbul ignore if */ + if (!children) return; + children.forEach(child => { + if (Array.isArray(child)) { + loopCNodeListWithCallback(child, options, callback); + } else if (typeof child === 'function') { + const grandChildren = child(options); + + if (Array.isArray(grandChildren)) { + loopCNodeListWithCallback(grandChildren, options, callback); + } else if (grandChildren) { + callback(grandChildren); + } + } else if (child) { + callback(child); + } + }); + } + + function traverseCNode(node, selectorPaths, styles, instance, params, styleSheet) { + const $ = node.$; + let blockSelector = ''; + + if (!$ || typeof $ === 'string') { + if (isMediaOrSupports($)) { + blockSelector = $; + } else { + // as a string selector + selectorPaths.push($); + } + } else if (typeof $ === 'function') { + const selector = $({ + context: instance.context, + props: params + }); + + if (isMediaOrSupports(selector)) { + blockSelector = selector; + } else { + // as a lazy selector + selectorPaths.push(selector); + } + } else { + // as a option selector + if ($.before) $.before(instance.context); + + if (!$.$ || typeof $.$ === 'string') { + if (isMediaOrSupports($.$)) { + blockSelector = $.$; + } else { + // as a string selector + selectorPaths.push($.$); + } + } else + /* istanbul ignore else */ + if ($.$) { + const selector = $.$({ + context: instance.context, + props: params + }); + + if (isMediaOrSupports(selector)) { + blockSelector = selector; + } else { + // as a lazy selector + selectorPaths.push(selector); + } + } + } + + const selector = parseSelectorPath(selectorPaths); + const style = createStyle(selector, node.props, instance, params); + + if (blockSelector) { + styles.push(`${blockSelector} {`); + + if (styleSheet && style) { + styleSheet.insertRule(`${blockSelector} {\n${style}\n}\n`); + } + } else { + if (styleSheet && style) { + styleSheet.insertRule(style); + } + + if (!styleSheet && style.length) styles.push(style); + } + + if (node.children) { + loopCNodeListWithCallback(node.children, { + context: instance.context, + props: params + }, childNode => { + if (typeof childNode === 'string') { + const style = createStyle(selector, { + raw: childNode + }, instance, params); + + if (styleSheet) { + styleSheet.insertRule(style); + } else { + styles.push(style); + } + } else { + traverseCNode(childNode, selectorPaths, styles, instance, params, styleSheet); + } + }); + } + + selectorPaths.pop(); + + if (blockSelector) { + styles.push('}'); + } + + if ($ && $.after) $.after(instance.context); + } + + function render(node, instance, props) { + let insertRule = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; + const styles = []; + traverseCNode(node, [], styles, instance, props, insertRule ? node.instance.__styleSheet : undefined); + if (insertRule) return ''; + return styles.join('\n\n'); + } + + /* eslint-disable */ + // Inspired by https://github.com/garycourt/murmurhash-js + // Ported from https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash2.cpp#L37-L86 + function murmur2(str) { + // 'm' and 'r' are mixing constants generated offline. + // They're not really 'magic', they just happen to work well. + // const m = 0x5bd1e995; + // const r = 24; + // Initialize the hash + var h = 0; // Mix 4 bytes at a time into the hash + + var k, + i = 0, + len = str.length; + + for (; len >= 4; ++i, len -= 4) { + k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24; + k = + /* Math.imul(k, m): */ + (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16); + k ^= + /* k >>> r: */ + k >>> 24; + h = + /* Math.imul(k, m): */ + (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16) ^ + /* Math.imul(h, m): */ + (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16); + } // Handle the last few bytes of the input array + + + switch (len) { + case 3: + h ^= (str.charCodeAt(i + 2) & 0xff) << 16; + + case 2: + h ^= (str.charCodeAt(i + 1) & 0xff) << 8; + + case 1: + h ^= str.charCodeAt(i) & 0xff; + h = + /* Math.imul(h, m): */ + (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16); + } // Do a few final mixes of the hash to ensure the last few + // bytes are well-incorporated. + + + h ^= h >>> 13; + h = + /* Math.imul(h, m): */ + (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16); + return ((h ^ h >>> 15) >>> 0).toString(36); + } + + /* eslint-disable @typescript-eslint/prefer-ts-expect-error */ + + if (typeof window !== 'undefined') { + window.__cssrContext = {}; + } + + function unmount(intance, node, id) { + const { + els + } = node; // If id is undefined, unmount all styles + + if (id === undefined) { + els.forEach(removeElement); + node.els = []; + } else { + const target = queryElement(id); // eslint-disable-next-line + + if (target && els.includes(target)) { + removeElement(target); + node.els = els.filter(el => el !== target); + } + } + } + + function addElementToList(els, target) { + els.push(target); + } + + function mount(instance, node, id, props, head, silent, force, anchorMetaName, ssrAdapter // eslint-disable-next-line @typescript-eslint/no-invalid-void-type + ) { + if (silent && !ssrAdapter) { + if (id === undefined) { + // it is possible to use hash to get rid of the requirements of id + // if you are interested in it, please create a pr + // i have no time to impl it + console.error('[css-render/mount]: `id` is required in `silent` mode.'); + return; + } + + const cssrContext = window.__cssrContext; + + if (!cssrContext[id]) { + cssrContext[id] = true; + render(node, instance, props, silent); + } + + return; + } + + let style; + + if (id === undefined) { + style = node.render(props); + id = murmur2(style); + } + + if (ssrAdapter) { + ssrAdapter.adapter(id, style !== null && style !== void 0 ? style : node.render(props)); + return; + } + + const queriedTarget = queryElement(id); + + if (queriedTarget !== null && !force) { + return queriedTarget; + } + + const target = queriedTarget !== null && queriedTarget !== void 0 ? queriedTarget : createElement(id); + if (style === undefined) style = node.render(props); + target.textContent = style; + if (queriedTarget !== null) return queriedTarget; + + if (anchorMetaName) { + const anchorMetaEl = document.head.querySelector(`meta[name="${anchorMetaName}"]`); + + if (anchorMetaEl) { + document.head.insertBefore(target, anchorMetaEl); + addElementToList(node.els, target); + return target; + } + } + + if (head) { + document.head.insertBefore(target, document.head.querySelector('style, link')); + } else { + document.head.appendChild(target); + } + + addElementToList(node.els, target); + return target; + } + + function wrappedRender(props) { + return render(this, this.instance, props); + } // do not guard node calling, it should throw an error. + + + function wrappedMount() { + let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + const { + id, + ssr, + props, + head = false, + silent = false, + force = false, + anchorMetaName + } = options; + const targetElement = mount(this.instance, this, id, props, head, silent, force, anchorMetaName, ssr); + return targetElement; + } + + function wrappedUnmount() { + let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + /* istanbul ignore next */ + // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions + const { + id + } = options; + unmount(this.instance, this, id); + } + + const createCNode = function (instance, $, props, children) { + return { + instance, + $, + props, + children, + els: [], + render: wrappedRender, + mount: wrappedMount, + unmount: wrappedUnmount + }; + }; + + const c$2 = function (instance, $, props, children) { + if (Array.isArray($)) { + return createCNode(instance, { + $: null + }, null, $); + } else if (Array.isArray(props)) { + return createCNode(instance, $, null, props); + } else if (Array.isArray(children)) { + return createCNode(instance, $, props, children); + } else { + return createCNode(instance, $, props, null); + } + }; + + function CssRender() { + let config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + let styleSheet = null; + const cssr = { + c: function () { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + return c$2(cssr, ...args); + }, + use: function (plugin) { + for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { + args[_key2 - 1] = arguments[_key2]; + } + + return plugin.install(cssr, ...args); + }, + find: queryElement, + context: {}, + config, + + get __styleSheet() { + // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions + if (!styleSheet) { + const style = document.createElement('style'); + document.head.appendChild(style); + styleSheet = document.styleSheets[document.styleSheets.length - 1]; + return styleSheet; + } + + return styleSheet; + } + + }; + return cssr; + } + + function exists(id, ssr) { + if (id === undefined) return false; + + if (ssr) { + const { + context: { + ids + } + } = ssr; + return ids.has(id); + } + + return queryElement(id) !== null; + } + + /* eslint-disable @typescript-eslint/restrict-template-expressions */ + + /* eslint-disable @typescript-eslint/strict-boolean-expressions */ + function plugin$1(options) { + let _bPrefix = '.'; + let _ePrefix = '__'; + let _mPrefix = '--'; + let c; + + if (options) { + let t = options.blockPrefix; + + if (t) { + _bPrefix = t; + } + + t = options.elementPrefix; + + if (t) { + _ePrefix = t; + } + + t = options.modifierPrefix; + + if (t) { + _mPrefix = t; + } + } + + const _plugin = { + install(instance) { + c = instance.c; + const ctx = instance.context; + ctx.bem = {}; + ctx.bem.b = null; + ctx.bem.els = null; + } + + }; + + function b(arg) { + let memorizedB; + let memorizedE; + return { + before(ctx) { + memorizedB = ctx.bem.b; + memorizedE = ctx.bem.els; + ctx.bem.els = null; + }, + + after(ctx) { + ctx.bem.b = memorizedB; + ctx.bem.els = memorizedE; + }, + + $(_ref) { + let { + context, + props + } = _ref; + arg = typeof arg === 'string' ? arg : arg({ + context, + props + }); + context.bem.b = arg; + return `${(props === null || props === void 0 ? void 0 : props.bPrefix) || _bPrefix}${context.bem.b}`; + } + + }; + } + + function e(arg) { + let memorizedE; + return { + before(ctx) { + memorizedE = ctx.bem.els; + }, + + after(ctx) { + ctx.bem.els = memorizedE; + }, + + $(_ref2) { + let { + context, + props + } = _ref2; + arg = typeof arg === 'string' ? arg : arg({ + context, + props + }); + context.bem.els = arg.split(',').map(v => v.trim()); + return context.bem.els.map(el => `${(props === null || props === void 0 ? void 0 : props.bPrefix) || _bPrefix}${context.bem.b}${_ePrefix}${el}`).join(', '); + } + + }; + } + + function m(arg) { + return { + $(_ref3) { + let { + context, + props + } = _ref3; + arg = typeof arg === 'string' ? arg : arg({ + context, + props + }); + const modifiers = arg.split(',').map(v => v.trim()); + + function elementToSelector(el) { + return modifiers.map(modifier => `&${(props === null || props === void 0 ? void 0 : props.bPrefix) || _bPrefix}${context.bem.b}${el !== undefined ? `${_ePrefix}${el}` : ''}${_mPrefix}${modifier}`).join(', '); + } + + const els = context.bem.els; + + if (els !== null) { + if (els.length >= 2) { + throw Error(`[css-render/plugin-bem]: m(${arg}) is invalid, using modifier inside multiple elements is not allowed`); + } + + return elementToSelector(els[0]); + } else { + return elementToSelector(); + } + } + + }; + } + + function notM(arg) { + return { + $(_ref4) { + let { + context, + props + } = _ref4; + arg = typeof arg === 'string' ? arg : arg({ + context, + props + }); + const els = context.bem.els; + + if (els !== null && els.length >= 2) { + throw Error(`[css-render/plugin-bem]: notM(${arg}) is invalid, using modifier inside multiple elements is not allowed`); + } + + return `&:not(${(props === null || props === void 0 ? void 0 : props.bPrefix) || _bPrefix}${context.bem.b}${els !== null && els.length > 0 ? `${_ePrefix}${els[0]}` : ''}${_mPrefix}${arg})`; + } + + }; + } + + const cB = function () { + return c(b(arguments.length <= 0 ? undefined : arguments[0]), arguments.length <= 1 ? undefined : arguments[1], arguments.length <= 2 ? undefined : arguments[2]); + }; + + const cE = function () { + return c(e(arguments.length <= 0 ? undefined : arguments[0]), arguments.length <= 1 ? undefined : arguments[1], arguments.length <= 2 ? undefined : arguments[2]); + }; + + const cM = function () { + return c(m(arguments.length <= 0 ? undefined : arguments[0]), arguments.length <= 1 ? undefined : arguments[1], arguments.length <= 2 ? undefined : arguments[2]); + }; + + const cNotM = function () { + return c(notM(arguments.length <= 0 ? undefined : arguments[0]), arguments.length <= 1 ? undefined : arguments[1], arguments.length <= 2 ? undefined : arguments[2]); + }; + + Object.assign(_plugin, { + cB, + cE, + cM, + cNotM + }); + return _plugin; + } + + function createKey(prefix, suffix) { + return prefix + (suffix === "default" ? "" : suffix.replace(/^[a-z]/, startChar => startChar.toUpperCase())); + } + createKey("abc", "def"); + + const namespace = "n"; + const prefix = `.${namespace}-`; + const elementPrefix = "__"; + const modifierPrefix = "--"; + const cssr = CssRender(); + const plugin = plugin$1({ + blockPrefix: prefix, + elementPrefix, + modifierPrefix + }); + cssr.use(plugin); + const { + c: c$1, + find + } = cssr; + const { + cB, + cE, + cM, + cNotM + } = plugin; + + function insideModal(style) { + return c$1(_ref => { + let { + props: { + bPrefix + } + } = _ref; + return `${bPrefix || prefix}modal, ${bPrefix || prefix}drawer`; + }, [style]); + } + + function insidePopover(style) { + return c$1(_ref2 => { + let { + props: { + bPrefix + } + } = _ref2; + return `${bPrefix || prefix}popover`; + }, [style]); + } + + function asModal(style) { + return c$1(_ref3 => { + let { + props: { + bPrefix + } + } = _ref3; + return `&${bPrefix || prefix}modal`; + }, style); + } + + const cCB = function () { + return c$1(">", [cB(...arguments)]); + }; + + let _isJsdom; + + function isJsdom() { + if (_isJsdom === void 0) { + _isJsdom = navigator.userAgent.includes("Node.js") || navigator.userAgent.includes("jsdom"); + } + + return _isJsdom; + } + + const isBrowser$2 = typeof document !== "undefined" && typeof window !== "undefined"; + + const eventSet = /* @__PURE__ */new WeakSet(); + function markEventEffectPerformed(event) { + eventSet.add(event); + } + function eventEffectNotPerformed(event) { + return !eventSet.has(event); + } + + function useInjectionInstanceCollection(injectionName, collectionKey, registerKeyRef) { + const injection = vue.inject(injectionName, null); + if (injection === null) return; + const vm = vue.getCurrentInstance()?.proxy; + vue.watch(registerKeyRef, registerInstance); + registerInstance(registerKeyRef.value); + vue.onBeforeUnmount(() => { + registerInstance(void 0, registerKeyRef.value); + }); + + function registerInstance(key, oldKey) { + const collection = injection[collectionKey]; + if (oldKey !== void 0) removeInstance(collection, oldKey); + if (key !== void 0) addInstance(collection, key); + } + + function removeInstance(collection, key) { + if (!collection[key]) collection[key] = []; + collection[key].splice(collection[key].findIndex(instance => instance === vm), 1); + } + + function addInstance(collection, key) { + if (!collection[key]) collection[key] = []; + + if (!~collection[key].findIndex(instance => instance === vm)) { + collection[key].push(vm); + } + } + } + function useInjectionCollection(injectionName, collectionKey, valueRef) { + const injection = vue.inject(injectionName, null); + if (injection === null) return; + + if (!(collectionKey in injection)) { + injection[collectionKey] = []; + } + + injection[collectionKey].push(valueRef.value); + vue.watch(valueRef, (value, prevValue) => { + const collectionArray = injection[collectionKey]; + const index = collectionArray.findIndex(collectionValue => collectionValue === prevValue); + if (~index) collectionArray.splice(index, 1); + collectionArray.push(value); + }); + vue.onBeforeUnmount(() => { + const collectionArray = injection[collectionKey]; + const index = collectionArray.findIndex(collectionValue => collectionValue === valueRef.value); + if (~index) collectionArray.splice(index, 1); + }); + } + function useInjectionElementCollection(injectionName, collectionKey, getElement) { + const injection = vue.inject(injectionName, null); + if (injection === null) return; + + if (!(collectionKey in injection)) { + injection[collectionKey] = []; + } + + vue.onMounted(() => { + const el = getElement(); + if (!el) return; + injection[collectionKey].push(el); + }); + vue.onBeforeUnmount(() => { + const collectionArray = injection[collectionKey]; + const element = getElement(); + const index = collectionArray.findIndex(collectionElement => collectionElement === element); + if (~index) collectionArray.splice(index, 1); + }); + } + + function useDeferredTrue(valueRef, delay, shouldDelayRef) { + if (!delay) return valueRef; + const delayedRef = vue.ref(valueRef.value); + let timerId = null; + vue.watch(valueRef, value => { + if (timerId !== null) window.clearTimeout(timerId); + + if (value === true) { + if (shouldDelayRef && !shouldDelayRef.value) { + delayedRef.value = true; + } else { + timerId = window.setTimeout(() => { + delayedRef.value = true; + }, delay); + } + } else { + delayedRef.value = false; + } + }); + return delayedRef; + } + + function useFalseUntilTruthy(originalRef) { + const currentRef = vue.ref(!!originalRef.value); + if (currentRef.value) return vue.readonly(currentRef); + const stop = vue.watch(originalRef, value => { + if (value) { + currentRef.value = true; + stop(); + } + }); + return vue.readonly(currentRef); + } + + function useMemo(getterOrOptions) { + const computedValueRef = vue.computed(getterOrOptions); // Maybe it's not possible to lazy evaluate the value, since we can't make + // render phase capture the deps behind useMemo + + const valueRef = vue.ref(computedValueRef.value); + vue.watch(computedValueRef, value => { + valueRef.value = value; + }); + + if (typeof getterOrOptions === 'function') { + return valueRef; + } else { + return { + __v_isRef: true, + + get value() { + return valueRef.value; + }, + + set value(v) { + getterOrOptions.set(v); + } + + }; + } + } + + function hasInstance() { + return vue.getCurrentInstance() !== null; + } + const isBrowser$1 = typeof window !== 'undefined'; + + let fontsReady; + let isFontReady; + + const init$1 = () => { + var _a, _b; + + fontsReady = isBrowser$1 ? (_b = (_a = document) === null || _a === void 0 ? void 0 : _a.fonts) === null || _b === void 0 ? void 0 : _b.ready : undefined; + isFontReady = false; + /* istanbul ignore if */ + + if (fontsReady !== undefined) { + void fontsReady.then(() => { + isFontReady = true; + }); + } else { + isFontReady = true; + } + }; + + init$1(); // For testing + /** + * Call callback on fontsReady is resolved. If fontsReady is already resolved, + * callback won't be called. + */ + + function onFontsReady(cb) { + /* istanbul ignore next */ + if (isFontReady) return; + let deactivated = false; + vue.onMounted(() => { + /* istanbul ignore next */ + if (!isFontReady) { + fontsReady === null || fontsReady === void 0 ? void 0 : fontsReady.then(() => { + if (deactivated) return; + cb(); + }); + } + }); + vue.onBeforeUnmount(() => { + deactivated = true; + }); + } + + function getEventTarget(e) { + const path = e.composedPath(); + return path[0]; + } + + const traps = { + mousemoveoutside: new WeakMap(), + clickoutside: new WeakMap() + }; + + function createTrapHandler(name, el, originalHandler) { + if (name === 'mousemoveoutside') { + const moveHandler = e => { + if (el.contains(getEventTarget(e))) return; + originalHandler(e); + }; + + return { + mousemove: moveHandler, + touchstart: moveHandler + }; + } else if (name === 'clickoutside') { + let mouseDownOutside = false; + + const downHandler = e => { + mouseDownOutside = !el.contains(getEventTarget(e)); + }; + + const upHanlder = e => { + if (!mouseDownOutside) return; + if (el.contains(getEventTarget(e))) return; + originalHandler(e); + }; + + return { + mousedown: downHandler, + mouseup: upHanlder, + touchstart: downHandler, + touchend: upHanlder + }; + } + + console.error( // eslint-disable-next-line @typescript-eslint/restrict-template-expressions + `[evtd/create-trap-handler]: name \`${name}\` is invalid. This could be a bug of evtd.`); + return {}; + } + + function ensureTrapHandlers(name, el, handler) { + const handlers = traps[name]; + let elHandlers = handlers.get(el); + + if (elHandlers === undefined) { + handlers.set(el, elHandlers = new WeakMap()); + } + + let trapHandler = elHandlers.get(handler); + + if (trapHandler === undefined) { + elHandlers.set(handler, trapHandler = createTrapHandler(name, el, handler)); + } + + return trapHandler; + } + + function trapOn(name, el, handler, options) { + if (name === 'mousemoveoutside' || name === 'clickoutside') { + const trapHandlers = ensureTrapHandlers(name, el, handler); + Object.keys(trapHandlers).forEach(key => { + on(key, document, trapHandlers[key], options); + }); + return true; + } + + return false; + } + + function trapOff(name, el, handler, options) { + if (name === 'mousemoveoutside' || name === 'clickoutside') { + const trapHandlers = ensureTrapHandlers(name, el, handler); + Object.keys(trapHandlers).forEach(key => { + off(key, document, trapHandlers[key], options); + }); + return true; + } + + return false; + } + + function createDelegate() { + if (typeof window === 'undefined') { + return { + on: () => {}, + off: () => {} + }; + } + + const propagationStopped = new WeakMap(); + const immediatePropagationStopped = new WeakMap(); + + function trackPropagation() { + propagationStopped.set(this, true); + } + + function trackImmediate() { + propagationStopped.set(this, true); + immediatePropagationStopped.set(this, true); + } + + function spy(event, propName, fn) { + const source = event[propName]; + + event[propName] = function () { + fn.apply(event, arguments); + return source.apply(event, arguments); + }; + + return event; + } + + function unspy(event, propName) { + event[propName] = Event.prototype[propName]; + } + + const currentTargets = new WeakMap(); + const currentTargetDescriptor = Object.getOwnPropertyDescriptor(Event.prototype, 'currentTarget'); + + function getCurrentTarget() { + var _a; + + return (_a = currentTargets.get(this)) !== null && _a !== void 0 ? _a : null; + } + + function defineCurrentTarget(event, getter) { + if (currentTargetDescriptor === undefined) return; + Object.defineProperty(event, 'currentTarget', { + configurable: true, + enumerable: true, + get: getter !== null && getter !== void 0 ? getter : currentTargetDescriptor.get + }); + } + + const phaseToTypeToElToHandlers = { + bubble: {}, + capture: {} + }; + const typeToWindowEventHandlers = {}; + + function createUnifiedHandler() { + const delegeteHandler = function (e) { + const { + type, + eventPhase, + bubbles + } = e; + const target = getEventTarget(e); + if (eventPhase === 2) return; + const phase = eventPhase === 1 ? 'capture' : 'bubble'; + let cursor = target; + const path = []; // collecting bubble path + + while (true) { + if (cursor === null) cursor = window; + path.push(cursor); + + if (cursor === window) { + break; + } // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions + + + cursor = cursor.parentNode || null; + } + + const captureElToHandlers = phaseToTypeToElToHandlers.capture[type]; + const bubbleElToHandlers = phaseToTypeToElToHandlers.bubble[type]; + spy(e, 'stopPropagation', trackPropagation); + spy(e, 'stopImmediatePropagation', trackImmediate); + defineCurrentTarget(e, getCurrentTarget); + + if (phase === 'capture') { + if (captureElToHandlers === undefined) return; // capture + + for (let i = path.length - 1; i >= 0; --i) { + if (propagationStopped.has(e)) break; + const target = path[i]; + const handlers = captureElToHandlers.get(target); + + if (handlers !== undefined) { + currentTargets.set(e, target); + + for (const handler of handlers) { + if (immediatePropagationStopped.has(e)) break; + handler(e); + } + } + + if (i === 0 && !bubbles && bubbleElToHandlers !== undefined) { + const bubbleHandlers = bubbleElToHandlers.get(target); + + if (bubbleHandlers !== undefined) { + for (const handler of bubbleHandlers) { + if (immediatePropagationStopped.has(e)) break; + handler(e); + } + } + } + } + } else if (phase === 'bubble') { + if (bubbleElToHandlers === undefined) return; // bubble + + for (let i = 0; i < path.length; ++i) { + if (propagationStopped.has(e)) break; + const target = path[i]; + const handlers = bubbleElToHandlers.get(target); + + if (handlers !== undefined) { + currentTargets.set(e, target); + + for (const handler of handlers) { + if (immediatePropagationStopped.has(e)) break; + handler(e); + } + } + } + } + + unspy(e, 'stopPropagation'); + unspy(e, 'stopImmediatePropagation'); + defineCurrentTarget(e); + }; + + delegeteHandler.displayName = 'evtdUnifiedHandler'; + return delegeteHandler; + } + + function createUnifiedWindowEventHandler() { + const delegateHandler = function (e) { + const { + type, + eventPhase + } = e; + if (eventPhase !== 2) return; + const handlers = typeToWindowEventHandlers[type]; + if (handlers === undefined) return; + handlers.forEach(handler => handler(e)); + }; + + delegateHandler.displayName = 'evtdUnifiedWindowEventHandler'; + return delegateHandler; + } + + const unifiedHandler = createUnifiedHandler(); + const unfiendWindowEventHandler = createUnifiedWindowEventHandler(); + + function ensureElToHandlers(phase, type) { + const phaseHandlers = phaseToTypeToElToHandlers[phase]; + + if (phaseHandlers[type] === undefined) { + phaseHandlers[type] = new Map(); + window.addEventListener(type, unifiedHandler, phase === 'capture'); + } + + return phaseHandlers[type]; + } + + function ensureWindowEventHandlers(type) { + const windowEventHandlers = typeToWindowEventHandlers[type]; + + if (windowEventHandlers === undefined) { + typeToWindowEventHandlers[type] = new Set(); + window.addEventListener(type, unfiendWindowEventHandler); + } + + return typeToWindowEventHandlers[type]; + } + + function ensureHandlers(elToHandlers, el) { + let elHandlers = elToHandlers.get(el); + + if (elHandlers === undefined) { + elToHandlers.set(el, elHandlers = new Set()); + } + + return elHandlers; + } + + function handlerExist(el, phase, type, handler) { + const elToHandlers = phaseToTypeToElToHandlers[phase][type]; // phase ${type} event has handlers + + if (elToHandlers !== undefined) { + const handlers = elToHandlers.get(el); // phase using el with ${type} event has handlers + + if (handlers !== undefined) { + if (handlers.has(handler)) return true; + } + } + + return false; + } + + function windowEventHandlerExist(type, handler) { + const handlers = typeToWindowEventHandlers[type]; + + if (handlers !== undefined) { + if (handlers.has(handler)) { + return true; + } + } + + return false; + } + + function on(type, el, handler, options) { + let mergedHandler; + + if (typeof options === 'object' && options.once === true) { + mergedHandler = e => { + off(type, el, mergedHandler, options); + handler(e); + }; + } else { + mergedHandler = handler; + } + + const trapped = trapOn(type, el, mergedHandler, options); + if (trapped) return; + const phase = options === true || typeof options === 'object' && options.capture === true ? 'capture' : 'bubble'; + const elToHandlers = ensureElToHandlers(phase, type); + const handlers = ensureHandlers(elToHandlers, el); + if (!handlers.has(mergedHandler)) handlers.add(mergedHandler); + + if (el === window) { + const windowEventHandlers = ensureWindowEventHandlers(type); + + if (!windowEventHandlers.has(mergedHandler)) { + windowEventHandlers.add(mergedHandler); + } + } + } + + function off(type, el, handler, options) { + const trapped = trapOff(type, el, handler, options); + if (trapped) return; + const capture = options === true || typeof options === 'object' && options.capture === true; + const phase = capture ? 'capture' : 'bubble'; + const elToHandlers = ensureElToHandlers(phase, type); + const handlers = ensureHandlers(elToHandlers, el); + + if (el === window) { + const mirrorPhase = capture ? 'bubble' : 'capture'; + + if (!handlerExist(el, mirrorPhase, type, handler) && windowEventHandlerExist(type, handler)) { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + const windowEventHandlers = typeToWindowEventHandlers[type]; + windowEventHandlers.delete(handler); + + if (windowEventHandlers.size === 0) { + window.removeEventListener(type, unfiendWindowEventHandler); + typeToWindowEventHandlers[type] = undefined; + } + } + } + + if (handlers.has(handler)) handlers.delete(handler); + + if (handlers.size === 0) { + elToHandlers.delete(el); + } + + if (elToHandlers.size === 0) { + window.removeEventListener(type, unifiedHandler, phase === 'capture'); + phaseToTypeToElToHandlers[phase][type] = undefined; + } + } + + return { + on: on, + off: off + }; + } + + const { + on, + off + } = createDelegate(); + + const mousePositionRef = vue.ref(null); + + function clickHandler(e) { + if (e.clientX > 0 || e.clientY > 0) { + mousePositionRef.value = { + x: e.clientX, + y: e.clientY + }; + } else { + // x = 0 & y = 0 + const { + target + } = e; + + if (target instanceof Element) { + const { + left, + top, + width, + height + } = target.getBoundingClientRect(); + + if (left > 0 || top > 0) { + // impossible to be triggered by real click + mousePositionRef.value = { + x: left + width / 2, + y: top + height / 2 + }; + } else { + mousePositionRef.value = { + x: 0, + y: 0 + }; + } + } else { + mousePositionRef.value = null; + } + } + } + + let usedCount$2 = 0; + let managable$2 = true; + function useClickPosition() { + if (!isBrowser$1) return vue.readonly(vue.ref(null)); + if (usedCount$2 === 0) on('click', document, clickHandler, true); + + const setup = () => { + usedCount$2 += 1; + }; + + if (managable$2 && (managable$2 = hasInstance())) { + vue.onBeforeMount(setup); + vue.onBeforeUnmount(() => { + usedCount$2 -= 1; + if (usedCount$2 === 0) off('click', document, clickHandler, true); + }); + } else { + setup(); + } + + return vue.readonly(mousePositionRef); + } + + const clickedTimeRef = vue.ref(undefined); + let usedCount$1 = 0; + + function handleClick() { + clickedTimeRef.value = Date.now(); + } + + let managable$1 = true; + function useClicked(timeout) { + if (!isBrowser$1) return vue.readonly(vue.ref(false)); + const clickedRef = vue.ref(false); + let timerId = null; + + function clearTimer() { + if (timerId !== null) window.clearTimeout(timerId); + } + + function clickedHandler() { + clearTimer(); + clickedRef.value = true; + timerId = window.setTimeout(() => { + clickedRef.value = false; + }, timeout); + } + + if (usedCount$1 === 0) { + on('click', window, handleClick, true); + } + + const setup = () => { + usedCount$1 += 1; + on('click', window, clickedHandler, true); + }; + + if (managable$1 && (managable$1 = hasInstance())) { + vue.onBeforeMount(setup); + vue.onBeforeUnmount(() => { + usedCount$1 -= 1; + + if (usedCount$1 === 0) { + off('click', window, handleClick, true); + } + + off('click', window, clickedHandler, true); + clearTimer(); + }); + } else { + setup(); + } + + return vue.readonly(clickedRef); + } + + /* eslint-disable @typescript-eslint/strict-boolean-expressions */ + let usedCount = 0; // Mql means media query list + + const supportMatchMedia = typeof window !== 'undefined' && window.matchMedia !== undefined; + const osTheme = vue.ref(null); + let darkMql; + let lightMql; + + function handleDarkMqlChange(e) { + if (e.matches) { + osTheme.value = 'dark'; + } + } + + function handleLightMqlChange(e) { + if (e.matches) { + osTheme.value = 'light'; + } + } + + function init() { + darkMql = window.matchMedia('(prefers-color-scheme: dark)'); + lightMql = window.matchMedia('(prefers-color-scheme: light)'); + + if (darkMql.matches) { + osTheme.value = 'dark'; + } else if (lightMql.matches) { + osTheme.value = 'light'; + } else { + osTheme.value = null; + } + + if (darkMql.addEventListener) { + darkMql.addEventListener('change', handleDarkMqlChange); + lightMql.addEventListener('change', handleLightMqlChange); + } else if (darkMql.addListener) { + darkMql.addListener(handleDarkMqlChange); + lightMql.addListener(handleLightMqlChange); + } + } + + function clean() { + if ('removeEventListener' in darkMql) { + darkMql.removeEventListener('change', handleDarkMqlChange); + lightMql.removeEventListener('change', handleLightMqlChange); + } else if ('removeListener' in darkMql) { + darkMql.removeListener(handleDarkMqlChange); + lightMql.removeListener(handleLightMqlChange); + } + + darkMql = undefined; + lightMql = undefined; + } + + let managable = true; + function useOsTheme() { + /* istanbul ignore next */ + if (!supportMatchMedia) { + return vue.readonly(osTheme); + } + + if (usedCount === 0) init(); + + if (managable && (managable = hasInstance())) { + vue.onBeforeMount(() => { + usedCount += 1; + }); + vue.onBeforeUnmount(() => { + usedCount -= 1; + if (usedCount === 0) clean(); + }); + } + + return vue.readonly(osTheme); + } + + function useMergedState(controlledStateRef, uncontrolledStateRef) { + vue.watch(controlledStateRef, value => { + if (value !== undefined) { + uncontrolledStateRef.value = value; + } + }); + return vue.computed(() => { + if (controlledStateRef.value === undefined) { + return uncontrolledStateRef.value; + } + + return controlledStateRef.value; + }); + } + + function isMounted() { + const isMounted = vue.ref(false); + vue.onMounted(() => { + isMounted.value = true; + }); + return vue.readonly(isMounted); + } + + function useCompitable(reactive, keys) { + // @ts-expect-error + return vue.computed(() => { + for (const key of keys) { + if (reactive[key] !== undefined) return reactive[key]; + } + + return reactive[keys[keys.length - 1]]; + }); + } + + const isIos = (typeof window === 'undefined' ? false : /iPad|iPhone|iPod/.test(navigator.platform) || navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1) && // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions + !window.MSStream; + function useIsIos() { + return isIos; + } + + /* eslint-disable @typescript-eslint/consistent-type-assertions */ + const defaultBreakpointOptions = { + // mobile + // 0 ~ 640 doesn't mean it should display well in all the range, + // but means you should treat it like a mobile phone.) + xs: 0, + s: 640, + m: 1024, + l: 1280, + xl: 1536, + '2xl': 1920 // normal desktop display + + }; + + function createMediaQuery(screenWidth) { + return `(min-width: ${screenWidth}px)`; + } + + const mqlMap = {}; + + function useBreakpoints() { + let screens = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultBreakpointOptions; + if (!isBrowser$1) return vue.computed(() => []); // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions + + if (typeof window.matchMedia !== 'function') return vue.computed(() => []); + const breakpointStatusRef = vue.ref({}); + const breakpoints = Object.keys(screens); + + const updateBreakpoints = (e, breakpointName) => { + if (e.matches) breakpointStatusRef.value[breakpointName] = true;else breakpointStatusRef.value[breakpointName] = false; + }; + + breakpoints.forEach(key => { + const breakpointValue = screens[key]; + let mql; + let cbs; + + if (mqlMap[breakpointValue] === undefined) { + mql = window.matchMedia(createMediaQuery(breakpointValue)); // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions + + if (mql.addEventListener) { + mql.addEventListener('change', e => { + cbs.forEach(cb => { + cb(e, key); + }); + }); // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions + } else if (mql.addListener) { + mql.addListener(e => { + cbs.forEach(cb => { + cb(e, key); + }); + }); + } + + cbs = new Set(); + mqlMap[breakpointValue] = { + mql, + cbs + }; + } else { + mql = mqlMap[breakpointValue].mql; + cbs = mqlMap[breakpointValue].cbs; + } + + cbs.add(updateBreakpoints); + + if (mql.matches) { + cbs.forEach(cb => { + cb(mql, key); + }); + } + }); + vue.onBeforeUnmount(() => { + breakpoints.forEach(breakpoint => { + const { + cbs + } = mqlMap[screens[breakpoint]]; + + if (cbs.has(updateBreakpoints)) { + cbs.delete(updateBreakpoints); + } + }); + }); + return vue.computed(() => { + const { + value + } = breakpointStatusRef; + return breakpoints.filter(key => value[key]); + }); + } + + function useKeyboard$1() { + let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + let enabledRef = arguments.length > 1 ? arguments[1] : undefined; + const state = vue.reactive({ + ctrl: false, + command: false, + win: false, + shift: false, + tab: false + }); + const { + keydown, + keyup + } = options; + + const keydownHandler = e => { + switch (e.key) { + case 'Control': + state.ctrl = true; + break; + + case 'Meta': + state.command = true; + state.win = true; + break; + + case 'Shift': + state.shift = true; + break; + + case 'Tab': + state.tab = true; + break; + } + + if (keydown !== undefined) { + Object.keys(keydown).forEach(key => { + if (key !== e.key) return; + const handler = keydown[key]; + + if (typeof handler === 'function') { + handler(e); + } else { + const { + stop = false, + prevent = false + } = handler; + if (stop) e.stopPropagation(); + if (prevent) e.preventDefault(); + handler.handler(e); + } + }); + } + }; + + const keyupHandler = e => { + switch (e.key) { + case 'Control': + state.ctrl = false; + break; + + case 'Meta': + state.command = false; + state.win = false; + break; + + case 'Shift': + state.shift = false; + break; + + case 'Tab': + state.tab = false; + break; + } + + if (keyup !== undefined) { + Object.keys(keyup).forEach(key => { + if (key !== e.key) return; + const handler = keyup[key]; + + if (typeof handler === 'function') { + handler(e); + } else { + const { + stop = false, + prevent = false + } = handler; + if (stop) e.stopPropagation(); + if (prevent) e.preventDefault(); + handler.handler(e); + } + }); + } + }; + + const setup = () => { + if (enabledRef === undefined || enabledRef.value) { + on('keydown', document, keydownHandler); + on('keyup', document, keyupHandler); + } + + if (enabledRef !== undefined) { + vue.watch(enabledRef, value => { + if (value) { + on('keydown', document, keydownHandler); + on('keyup', document, keyupHandler); + } else { + off('keydown', document, keydownHandler); + off('keyup', document, keyupHandler); + } + }); + } + }; + + if (hasInstance()) { + vue.onBeforeMount(setup); + vue.onBeforeUnmount(() => { + if (enabledRef === undefined || enabledRef.value) { + off('keydown', document, keydownHandler); + off('keyup', document, keyupHandler); + } + }); + } else { + setup(); + } + + return vue.readonly(state); + } + + const internalSelectionMenuInjectionKey = createInjectionKey("n-internal-select-menu"); + const internalSelectionMenuBodyInjectionKey = createInjectionKey("n-internal-select-menu-body"); + + const modalBodyInjectionKey = createInjectionKey("n-modal-body"); + const modalInjectionKey = createInjectionKey("n-modal"); + + const drawerBodyInjectionKey = createInjectionKey("n-drawer-body"); + const drawerInjectionKey = createInjectionKey("n-drawer"); + + const popoverBodyInjectionKey = createInjectionKey("n-popover-body"); + + const teleportDisabled = "__disabled__"; + + function useAdjustedTo(props) { + const modal = vue.inject(modalBodyInjectionKey, null); + const drawer = vue.inject(drawerBodyInjectionKey, null); + const popover = vue.inject(popoverBodyInjectionKey, null); + const selectMenu = vue.inject(internalSelectionMenuBodyInjectionKey, null); + const fullscreenElementRef = vue.ref(); + + if (typeof document !== "undefined") { + fullscreenElementRef.value = document.fullscreenElement; + + const handleFullscreenChange = () => { + fullscreenElementRef.value = document.fullscreenElement; + }; + + vue.onMounted(() => { + on("fullscreenchange", document, handleFullscreenChange); + }); + vue.onBeforeUnmount(() => { + off("fullscreenchange", document, handleFullscreenChange); + }); + } + + return useMemo(() => { + const { + to + } = props; + + if (to !== void 0) { + if (to === false) return teleportDisabled; + if (to === true) return fullscreenElementRef.value || "body"; + return to; + } + + if (modal?.value) { + return modal.value.$el ?? modal.value; + } + + if (drawer?.value) return drawer.value; + if (popover?.value) return popover.value; + if (selectMenu?.value) return selectMenu.value; + return to ?? (fullscreenElementRef.value || "body"); + }); + } + + useAdjustedTo.tdkey = teleportDisabled; + useAdjustedTo.propTo = { + type: [String, Object, Boolean], + default: void 0 + }; + + let houdiniRegistered = false; + function useHoudini() { + if (!isBrowser$2) return; + if (!window.CSS) return; + + if (!houdiniRegistered) { + houdiniRegistered = true; + + if ("registerProperty" in window?.CSS) { + try { + ; + CSS.registerProperty({ + name: "--n-color-start", + syntax: "", + inherits: false, + initialValue: "#0000" + }); + CSS.registerProperty({ + name: "--n-color-end", + syntax: "", + inherits: false, + initialValue: "#0000" + }); + } catch (e) {} + } + } + } + + function getSlot(scope, slots) { + let slotName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'default'; + const slot = slots[slotName]; + + if (slot === undefined) { + throw new Error(`[vueuc/${scope}]: slot[${slotName}] is empty.`); + } + + return slot(); + } // o(n) flatten + + function flatten$2(vNodes) { + let filterCommentNode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + let result = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : []; + vNodes.forEach(vNode => { + if (vNode === null) return; + + if (typeof vNode !== 'object') { + if (typeof vNode === 'string' || typeof vNode === 'number') { + result.push(vue.createTextVNode(String(vNode))); + } + + return; + } + + if (Array.isArray(vNode)) { + flatten$2(vNode, filterCommentNode, result); + return; + } + + if (vNode.type === vue.Fragment) { + if (vNode.children === null) return; + + if (Array.isArray(vNode.children)) { + flatten$2(vNode.children, filterCommentNode, result); + } // rawSlot + + } else if (vNode.type !== vue.Comment) { + result.push(vNode); + } + }); + return result; + } + function getFirstVNode(scope, slots) { + let slotName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'default'; + const slot = slots[slotName]; + + if (slot === undefined) { + throw new Error(`[vueuc/${scope}]: slot[${slotName}] is empty.`); + } + + const content = flatten$2(slot()); // vue will normalize the slot, so slot must be an array + + if (content.length === 1) { + return content[0]; + } else { + throw new Error(`[vueuc/${scope}]: slot[${slotName}] should have exactly one child.`); + } + } + + let viewMeasurer = null; + function ensureViewBoundingRect() { + if (viewMeasurer === null) { + viewMeasurer = document.getElementById('v-binder-view-measurer'); + + if (viewMeasurer === null) { + viewMeasurer = document.createElement('div'); + viewMeasurer.id = 'v-binder-view-measurer'; + const { + style + } = viewMeasurer; + style.position = 'fixed'; + style.left = '0'; + style.right = '0'; + style.top = '0'; + style.bottom = '0'; + style.pointerEvents = 'none'; + style.visibility = 'hidden'; + document.body.appendChild(viewMeasurer); + } + } + + return viewMeasurer.getBoundingClientRect(); + } + function getPointRect(x, y) { + const viewRect = ensureViewBoundingRect(); + return { + top: y, + left: x, + height: 0, + width: 0, + right: viewRect.width - x, + bottom: viewRect.height - y + }; + } + function getRect$1(el) { + const elRect = el.getBoundingClientRect(); + const viewRect = ensureViewBoundingRect(); + return { + left: elRect.left - viewRect.left, + top: elRect.top - viewRect.top, + bottom: viewRect.height + viewRect.top - elRect.bottom, + right: viewRect.width + viewRect.left - elRect.right, + width: elRect.width, + height: elRect.height + }; + } + function getParentNode(node) { + // document type + if (node.nodeType === 9) { + return null; + } + + return node.parentNode; + } + function getScrollParent(node) { + if (node === null) return null; + const parentNode = getParentNode(node); + + if (parentNode === null) { + return null; + } // Document + + + if (parentNode.nodeType === 9) { + return document; + } // Element + + + if (parentNode.nodeType === 1) { + // Firefox want us to check `-x` and `-y` variations as well + const { + overflow, + overflowX, + overflowY + } = getComputedStyle(parentNode); + + if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) { + return parentNode; + } + } + + return getScrollParent(parentNode); + } + + /* eslint-disable @typescript-eslint/no-non-null-assertion */ + const Binder = vue.defineComponent({ + name: 'Binder', + props: { + syncTargetWithParent: Boolean, + syncTarget: { + type: Boolean, + default: true + } + }, + + setup(props) { + var _a; + + vue.provide('VBinder', (_a = vue.getCurrentInstance()) === null || _a === void 0 ? void 0 : _a.proxy); + const VBinder = vue.inject('VBinder', null); + const targetRef = vue.ref(null); + /** + * If there's no nested vbinder, we can simply set the target ref. + * + * However, when it comes to: + * <- syncTarget = false + * + * Should hold target DOM ref, but can't get it directly from + * its VTarget. So if there are nested VBinder, we should: + * 1. Stop setting target DOM from level-1 VTarget + * 2. Set target DOM from level-2 VTarget + * For (1), we need `syncTarget` to `false` + * For (2), we need to set `syncTargetWithParent` to `true` on + * level-2 VBinder + * + * <- syncTargetWithParent = true + * target + * + * + * content1 + * + * + * + * content2 + * + * + */ + + const setTargetRef = el => { + targetRef.value = el; // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions + + if (VBinder && props.syncTargetWithParent) { + VBinder.setTargetRef(el); + } + }; // scroll related + + + let scrollableNodes = []; + + const ensureScrollListener = () => { + let cursor = targetRef.value; + + while (true) { + cursor = getScrollParent(cursor); + if (cursor === null) break; + scrollableNodes.push(cursor); + } + + for (const el of scrollableNodes) { + on('scroll', el, onScroll, true); + } + }; + + const removeScrollListeners = () => { + for (const el of scrollableNodes) { + off('scroll', el, onScroll, true); + } + + scrollableNodes = []; + }; + + const followerScrollListeners = new Set(); + + const addScrollListener = listener => { + if (followerScrollListeners.size === 0) { + ensureScrollListener(); + } + + if (!followerScrollListeners.has(listener)) { + followerScrollListeners.add(listener); + } + }; + + const removeScrollListener = listener => { + if (followerScrollListeners.has(listener)) { + followerScrollListeners.delete(listener); + } + + if (followerScrollListeners.size === 0) { + removeScrollListeners(); + } + }; + + const onScroll = () => { + beforeNextFrameOnce(onScrollRaf); + }; + + const onScrollRaf = () => { + followerScrollListeners.forEach(listener => listener()); + }; // resize related + + + const followerResizeListeners = new Set(); + + const addResizeListener = listener => { + if (followerResizeListeners.size === 0) { + on('resize', window, onResize); + } + + if (!followerResizeListeners.has(listener)) { + followerResizeListeners.add(listener); + } + }; + + const removeResizeListener = listener => { + if (followerResizeListeners.has(listener)) { + followerResizeListeners.delete(listener); + } + + if (followerResizeListeners.size === 0) { + off('resize', window, onResize); + } + }; + + const onResize = () => { + followerResizeListeners.forEach(listener => listener()); + }; + + vue.onBeforeUnmount(() => { + off('resize', window, onResize); + removeScrollListeners(); + }); + return { + targetRef, + setTargetRef, + addScrollListener, + removeScrollListener, + addResizeListener, + removeResizeListener + }; + }, + + render() { + return getSlot('binder', this.$slots); + } + + }); + var VBinder = Binder; + + /* eslint-disable @typescript-eslint/no-non-null-assertion */ + var VTarget = vue.defineComponent({ + name: 'Target', + + setup() { + const { + setTargetRef, + syncTarget + } = vue.inject('VBinder'); + const setTargetDirective = { + mounted: setTargetRef, + updated: setTargetRef + }; + return { + syncTarget, + setTargetDirective + }; + }, + + render() { + const { + syncTarget, + setTargetDirective + } = this; + /** + * If you are using VBinder as a child of VBinder, the children wouldn't be + * a valid DOM or component that can be attached to by directive. + * So we won't sync target on those kind of situation and control the + * target sync logic manually. + */ + + if (syncTarget) { + return vue.withDirectives(getFirstVNode('follower', this.$slots), [[setTargetDirective]]); + } + + return getFirstVNode('follower', this.$slots); + } + + }); + + const ctxKey$1 = '@@mmoContext'; + const mousemoveoutside = { + mounted(el, _ref) { + let { + value + } = _ref; + el[ctxKey$1] = { + handler: undefined + }; + + if (typeof value === 'function') { + el[ctxKey$1].handler = value; + on('mousemoveoutside', el, value); + } + }, + + updated(el, _ref2) { + let { + value + } = _ref2; + const ctx = el[ctxKey$1]; + + if (typeof value === 'function') { + if (ctx.handler) { + if (ctx.handler !== value) { + off('mousemoveoutside', el, ctx.handler); + ctx.handler = value; + on('mousemoveoutside', el, value); + } + } else { + el[ctxKey$1].handler = value; + on('mousemoveoutside', el, value); + } + } else { + if (ctx.handler) { + off('mousemoveoutside', el, ctx.handler); + ctx.handler = undefined; + } + } + }, + + unmounted(el) { + const { + handler + } = el[ctxKey$1]; + + if (handler) { + off('mousemoveoutside', el, handler); + } + + el[ctxKey$1].handler = undefined; + } + + }; + var mousemoveoutside$1 = mousemoveoutside; + + const ctxKey = '@@coContext'; + const clickoutside = { + mounted(el, _ref) { + let { + value, + modifiers + } = _ref; + el[ctxKey] = { + handler: undefined + }; + + if (typeof value === 'function') { + el[ctxKey].handler = value; + on('clickoutside', el, value, { + capture: modifiers.capture + }); + } + }, + + updated(el, _ref2) { + let { + value, + modifiers + } = _ref2; + const ctx = el[ctxKey]; + + if (typeof value === 'function') { + if (ctx.handler) { + if (ctx.handler !== value) { + off('clickoutside', el, ctx.handler, { + capture: modifiers.capture + }); + ctx.handler = value; + on('clickoutside', el, value, { + capture: modifiers.capture + }); + } + } else { + el[ctxKey].handler = value; + on('clickoutside', el, value, { + capture: modifiers.capture + }); + } + } else { + if (ctx.handler) { + off('clickoutside', el, ctx.handler, { + capture: modifiers.capture + }); + ctx.handler = undefined; + } + } + }, + + unmounted(el, _ref3) { + let { + modifiers + } = _ref3; + const { + handler + } = el[ctxKey]; + + if (handler) { + off('clickoutside', el, handler, { + capture: modifiers.capture + }); + } + + el[ctxKey].handler = undefined; + } + + }; + var clickoutside$1 = clickoutside; + + function warn$1(location, message) { + console.error(`[vdirs/${location}]: ${message}`); + } + + class ZIndexManager { + constructor() { + this.elementZIndex = new Map(); + this.nextZIndex = 2000; + } + + get elementCount() { + return this.elementZIndex.size; + } + + ensureZIndex(el, zIndex) { + const { + elementZIndex + } = this; + + if (zIndex !== undefined) { + el.style.zIndex = `${zIndex}`; + elementZIndex.delete(el); + return; + } + + const { + nextZIndex + } = this; + + if (elementZIndex.has(el)) { + const currentZIndex = elementZIndex.get(el); + if (currentZIndex + 1 === this.nextZIndex) return; + } + + el.style.zIndex = `${nextZIndex}`; + elementZIndex.set(el, nextZIndex); + this.nextZIndex = nextZIndex + 1; + this.squashState(); + } + + unregister(el, zIndex) { + const { + elementZIndex + } = this; + + if (elementZIndex.has(el)) { + elementZIndex.delete(el); + } else if (zIndex === undefined) { + warn$1('z-index-manager/unregister-element', 'Element not found when unregistering.'); + } + + this.squashState(); + } + + squashState() { + const { + elementCount + } = this; + + if (!elementCount) { + this.nextZIndex = 2000; + } + + if (this.nextZIndex - elementCount > 2500) this.rearrange(); + } + + rearrange() { + const elementZIndexPair = Array.from(this.elementZIndex.entries()); + elementZIndexPair.sort((pair1, pair2) => { + return pair1[1] - pair2[1]; + }); + this.nextZIndex = 2000; + elementZIndexPair.forEach(pair => { + const el = pair[0]; + const zIndex = this.nextZIndex++; + if (`${zIndex}` !== el.style.zIndex) el.style.zIndex = `${zIndex}`; + }); + } + + } + + var zIndexManager = new ZIndexManager(); + + const ctx = '@@ziContext'; // We don't expect manually bound zindex should be changed + + const zindexable = { + mounted(el, bindings) { + const { + value = {} + } = bindings; + const { + zIndex, + enabled + } = value; + el[ctx] = { + enabled: !!enabled, + initialized: false + }; + + if (enabled) { + zIndexManager.ensureZIndex(el, zIndex); + el[ctx].initialized = true; + } + }, + + updated(el, bindings) { + const { + value = {} + } = bindings; + const { + zIndex, + enabled + } = value; + const cachedEnabled = el[ctx].enabled; + + if (enabled && !cachedEnabled) { + zIndexManager.ensureZIndex(el, zIndex); + el[ctx].initialized = true; + } + + el[ctx].enabled = !!enabled; + }, + + unmounted(el, bindings) { + if (!el[ctx].initialized) return; + const { + value = {} + } = bindings; + const { + zIndex + } = value; + zIndexManager.unregister(el, zIndex); + } + + }; + var zindexable$1 = zindexable; + + const ssrContextKey = Symbol('@css-render/vue3-ssr'); + + function createStyleString(id, style) { + return ``; + } + + function ssrAdapter(id, style) { + const ssrContext = vue.inject(ssrContextKey, null); + + if (ssrContext === null) { + console.error('[css-render/vue3-ssr]: no ssr context found.'); + return; + } + + const { + styles, + ids + } = ssrContext; // we need to impl other options to make it behaves the same as the client side + + if (ids.has(id)) return; + + if (styles !== null) { + ids.add(id); + styles.push(createStyleString(id, style)); + } + } + + const isBrowser = typeof document !== 'undefined'; + function useSsrAdapter() { + if (isBrowser) return undefined; + const context = vue.inject(ssrContextKey, null); + if (context === null) return undefined; + return { + adapter: ssrAdapter, + context + }; + } + + function warn(location, message) { + console.error(`[vueuc/${location}]: ${message}`); + } + + const { + c + } = CssRender(); + const cssrAnchorMetaName$1 = 'vueuc-style'; + + function lowBit(n) { + return n & -n; + } + + class FinweckTree { + /** + * @param l length of the array + * @param min min value of the array + */ + constructor(l, min) { + this.l = l; + this.min = min; + const ft = new Array(l + 1); + + for (let i = 0; i < l + 1; ++i) { + ft[i] = 0; + } + + this.ft = ft; + } + /** + * Add arr[i] by n, start from 0 + * @param i the index of the element to be added + * @param n the value to be added + */ + + + add(i, n) { + if (n === 0) return; + const { + l, + ft + } = this; + i += 1; + + while (i <= l) { + ft[i] += n; + i += lowBit(i); + } + } + /** + * Get the value of index i + * @param i index + * @returns value of the index + */ + + + get(i) { + return this.sum(i + 1) - this.sum(i); + } + /** + * Get the sum of first i elements + * @param i count of head elements to be added + * @returns the sum of first i elements + */ + + + sum(i) { + if (i === undefined) i = this.l; + if (i <= 0) return 0; + const { + ft, + min, + l + } = this; + if (i > l) throw new Error('[FinweckTree.sum]: `i` is larger than length.'); + let ret = i * min; + + while (i > 0) { + ret += ft[i]; + i -= lowBit(i); + } + + return ret; + } + /** + * Get the largest count of head elements whose sum are <= threshold + * @param threshold + * @returns the largest count of head elements whose sum are <= threshold + */ + + + getBound(threshold) { + let l = 0; + let r = this.l; + + while (r > l) { + const m = Math.floor((l + r) / 2); + const sumM = this.sum(m); + + if (sumM > threshold) { + r = m; + continue; + } else if (sumM < threshold) { + if (l === m) { + if (this.sum(l + 1) <= threshold) return l + 1; + return m; + } + + l = m; + } else { + return m; + } + } + + return l; + } + + } + + function resolveTo(selector) { + if (typeof selector === 'string') { + return document.querySelector(selector); + } + + return selector(); + } + + var LazyTeleport = vue.defineComponent({ + name: 'LazyTeleport', + props: { + to: { + type: [String, Object], + default: undefined + }, + disabled: Boolean, + show: { + type: Boolean, + required: true + } + }, + + setup(props) { + return { + showTeleport: useFalseUntilTruthy(vue.toRef(props, 'show')), + mergedTo: vue.computed(() => { + const { + to + } = props; + return to !== null && to !== void 0 ? to : 'body'; + }) + }; + }, + + render() { + return this.showTeleport ? this.disabled ? getSlot('lazy-teleport', this.$slots) : vue.h(vue.Teleport, { + disabled: this.disabled, + to: this.mergedTo + }, getSlot('lazy-teleport', this.$slots)) : null; + } + + }); + + const oppositionPositions = { + top: 'bottom', + bottom: 'top', + left: 'right', + right: 'left' + }; + const oppositeAligns = { + start: 'end', + center: 'center', + end: 'start' + }; + const propToCompare = { + top: 'height', + bottom: 'height', + left: 'width', + right: 'width' + }; + const transformOrigins = { + 'bottom-start': 'top left', + bottom: 'top center', + 'bottom-end': 'top right', + 'top-start': 'bottom left', + top: 'bottom center', + 'top-end': 'bottom right', + 'right-start': 'top left', + right: 'center left', + 'right-end': 'bottom left', + 'left-start': 'top right', + left: 'center right', + 'left-end': 'bottom right' + }; + const overlapTransformOrigin = { + 'bottom-start': 'bottom left', + bottom: 'bottom center', + 'bottom-end': 'bottom right', + 'top-start': 'top left', + top: 'top center', + 'top-end': 'top right', + 'right-start': 'top right', + right: 'center right', + 'right-end': 'bottom right', + 'left-start': 'top left', + left: 'center left', + 'left-end': 'bottom left' + }; + const oppositeAlignCssPositionProps = { + 'bottom-start': 'right', + 'bottom-end': 'left', + 'top-start': 'right', + 'top-end': 'left', + 'right-start': 'bottom', + 'right-end': 'top', + 'left-start': 'bottom', + 'left-end': 'top' + }; + const keepOffsetDirection = { + top: true, + bottom: false, + left: true, + right: false // left-- + + }; + const cssPositionToOppositeAlign = { + top: 'end', + bottom: 'start', + left: 'end', + right: 'start' + }; + function getPlacementAndOffsetOfFollower(placement, targetRect, followerRect, shift, flip, overlap) { + if (!flip || overlap) { + return { + placement: placement, + top: 0, + left: 0 + }; + } + + const [position, align] = placement.split('-'); + let properAlign = align !== null && align !== void 0 ? align : 'center'; + let properOffset = { + top: 0, + left: 0 + }; + + const deriveOffset = (oppositeAlignCssSizeProp, alignCssPositionProp, offsetVertically) => { + let left = 0; + let top = 0; + const diff = followerRect[oppositeAlignCssSizeProp] - targetRect[alignCssPositionProp] - targetRect[oppositeAlignCssSizeProp]; + + if (diff > 0 && shift) { + if (offsetVertically) { + // screen border + // |-----------------------------------------| + // | | f | | + // | | o | | + // | | l | | + // | | l |---- | + // | | o |tar | | + // | | w |get | | + // | | e | | | + // | | r |---- | + // | ---- | + // |-----------------------------------------| + top = keepOffsetDirection[alignCssPositionProp] ? diff : -diff; + } else { + // screen border + // |----------------------------------------| + // | | + // | ---------- | + // | | target | | + // | ---------------------------------- + // | | follower | + // | ---------------------------------- + // | | + // |----------------------------------------| + left = keepOffsetDirection[alignCssPositionProp] ? diff : -diff; + } + } + + return { + left, + top + }; + }; + + const offsetVertically = position === 'left' || position === 'right'; // choose proper placement for non-center align + + if (properAlign !== 'center') { + const oppositeAlignCssPositionProp = oppositeAlignCssPositionProps[placement]; + const currentAlignCssPositionProp = oppositionPositions[oppositeAlignCssPositionProp]; + const oppositeAlignCssSizeProp = propToCompare[oppositeAlignCssPositionProp]; // if follower rect is larger than target rect in align direction + // ----------[ target ]---------| + // ----------[ follower ] + + if (followerRect[oppositeAlignCssSizeProp] > targetRect[oppositeAlignCssSizeProp]) { + if ( // current space is not enough + // ----------[ target ]---------| + // -------[ follower ] + targetRect[oppositeAlignCssPositionProp] + targetRect[oppositeAlignCssSizeProp] < followerRect[oppositeAlignCssSizeProp]) { + const followerOverTargetSize = (followerRect[oppositeAlignCssSizeProp] - targetRect[oppositeAlignCssSizeProp]) / 2; + + if (targetRect[oppositeAlignCssPositionProp] < followerOverTargetSize || targetRect[currentAlignCssPositionProp] < followerOverTargetSize) { + // opposite align has larger space + // -------[ target ]-----------| + // -------[ follower ]-| + if (targetRect[oppositeAlignCssPositionProp] < targetRect[currentAlignCssPositionProp]) { + properAlign = oppositeAligns[align]; + properOffset = deriveOffset(oppositeAlignCssSizeProp, currentAlignCssPositionProp, offsetVertically); + } else { + // ----------------[ target ]----| + // --------[ follower ]----| + properOffset = deriveOffset(oppositeAlignCssSizeProp, oppositeAlignCssPositionProp, offsetVertically); + } + } else { + // 'center' align is better + // ------------[ target ]--------| + // -------[ follower ]--| + properAlign = 'center'; + } + } + } else if (followerRect[oppositeAlignCssSizeProp] < targetRect[oppositeAlignCssSizeProp]) { + // TODO: maybe center is better + if (targetRect[currentAlignCssPositionProp] < 0 && // opposite align has larger space + // ------------[ target ] + // ----------------[follower] + targetRect[oppositeAlignCssPositionProp] > targetRect[currentAlignCssPositionProp]) { + properAlign = oppositeAligns[align]; + } + } + } else { + const possibleAlternativeAlignCssPositionProp1 = position === 'bottom' || position === 'top' ? 'left' : 'top'; + const possibleAlternativeAlignCssPositionProp2 = oppositionPositions[possibleAlternativeAlignCssPositionProp1]; + const alternativeAlignCssSizeProp = propToCompare[possibleAlternativeAlignCssPositionProp1]; + const followerOverTargetSize = (followerRect[alternativeAlignCssSizeProp] - targetRect[alternativeAlignCssSizeProp]) / 2; + + if ( // center is not enough + // ----------- [ target ]--| + // -------[ follower ] + targetRect[possibleAlternativeAlignCssPositionProp1] < followerOverTargetSize || targetRect[possibleAlternativeAlignCssPositionProp2] < followerOverTargetSize) { + // alternative 2 position's space is larger + if (targetRect[possibleAlternativeAlignCssPositionProp1] > targetRect[possibleAlternativeAlignCssPositionProp2]) { + properAlign = cssPositionToOppositeAlign[possibleAlternativeAlignCssPositionProp1]; + properOffset = deriveOffset(alternativeAlignCssSizeProp, possibleAlternativeAlignCssPositionProp1, offsetVertically); + } else { + // alternative 1 position's space is larger + properAlign = cssPositionToOppositeAlign[possibleAlternativeAlignCssPositionProp2]; + properOffset = deriveOffset(alternativeAlignCssSizeProp, possibleAlternativeAlignCssPositionProp2, offsetVertically); + } + } + } + + let properPosition = position; + + if ( // space is not enough + targetRect[position] < followerRect[propToCompare[position]] && // opposite position's space is larger + targetRect[position] < targetRect[oppositionPositions[position]]) { + properPosition = oppositionPositions[position]; + } + + return { + placement: properAlign !== 'center' ? `${properPosition}-${properAlign}` : properPosition, + left: properOffset.left, + top: properOffset.top + }; + } + function getProperTransformOrigin(placement, overlap) { + if (overlap) return overlapTransformOrigin[placement]; + return transformOrigins[placement]; + } // ------------ + // | offset | + // | | + // | [target] | + // | | + // ------------ + // TODO: refactor it to remove dup logic + + function getOffset$1(placement, offsetRect, targetRect, offsetTopToStandardPlacement, offsetLeftToStandardPlacement, overlap) { + if (overlap) { + switch (placement) { + case 'bottom-start': + return { + top: `${Math.round(targetRect.top - offsetRect.top + targetRect.height)}px`, + left: `${Math.round(targetRect.left - offsetRect.left)}px`, + transform: 'translateY(-100%)' + }; + + case 'bottom-end': + return { + top: `${Math.round(targetRect.top - offsetRect.top + targetRect.height)}px`, + left: `${Math.round(targetRect.left - offsetRect.left + targetRect.width)}px`, + transform: 'translateX(-100%) translateY(-100%)' + }; + + case 'top-start': + return { + top: `${Math.round(targetRect.top - offsetRect.top)}px`, + left: `${Math.round(targetRect.left - offsetRect.left)}px`, + transform: '' + }; + + case 'top-end': + return { + top: `${Math.round(targetRect.top - offsetRect.top)}px`, + left: `${Math.round(targetRect.left - offsetRect.left + targetRect.width)}px`, + transform: 'translateX(-100%)' + }; + + case 'right-start': + return { + top: `${Math.round(targetRect.top - offsetRect.top)}px`, + left: `${Math.round(targetRect.left - offsetRect.left + targetRect.width)}px`, + transform: 'translateX(-100%)' + }; + + case 'right-end': + return { + top: `${Math.round(targetRect.top - offsetRect.top + targetRect.height)}px`, + left: `${Math.round(targetRect.left - offsetRect.left + targetRect.width)}px`, + transform: 'translateX(-100%) translateY(-100%)' + }; + + case 'left-start': + return { + top: `${Math.round(targetRect.top - offsetRect.top)}px`, + left: `${Math.round(targetRect.left - offsetRect.left)}px`, + transform: '' + }; + + case 'left-end': + return { + top: `${Math.round(targetRect.top - offsetRect.top + targetRect.height)}px`, + left: `${Math.round(targetRect.left - offsetRect.left)}px`, + transform: 'translateY(-100%)' + }; + + case 'top': + return { + top: `${Math.round(targetRect.top - offsetRect.top)}px`, + left: `${Math.round(targetRect.left - offsetRect.left + targetRect.width / 2)}px`, + transform: 'translateX(-50%)' + }; + + case 'right': + return { + top: `${Math.round(targetRect.top - offsetRect.top + targetRect.height / 2)}px`, + left: `${Math.round(targetRect.left - offsetRect.left + targetRect.width)}px`, + transform: 'translateX(-100%) translateY(-50%)' + }; + + case 'left': + return { + top: `${Math.round(targetRect.top - offsetRect.top + targetRect.height / 2)}px`, + left: `${Math.round(targetRect.left - offsetRect.left)}px`, + transform: 'translateY(-50%)' + }; + + case 'bottom': + default: + return { + top: `${Math.round(targetRect.top - offsetRect.top + targetRect.height)}px`, + left: `${Math.round(targetRect.left - offsetRect.left + targetRect.width / 2)}px`, + transform: 'translateX(-50%) translateY(-100%)' + }; + } + } + + switch (placement) { + case 'bottom-start': + return { + top: `${Math.round(targetRect.top - offsetRect.top + targetRect.height + offsetTopToStandardPlacement)}px`, + left: `${Math.round(targetRect.left - offsetRect.left + offsetLeftToStandardPlacement)}px`, + transform: '' + }; + + case 'bottom-end': + return { + top: `${Math.round(targetRect.top - offsetRect.top + targetRect.height + offsetTopToStandardPlacement)}px`, + left: `${Math.round(targetRect.left - offsetRect.left + targetRect.width + offsetLeftToStandardPlacement)}px`, + transform: 'translateX(-100%)' + }; + + case 'top-start': + return { + top: `${Math.round(targetRect.top - offsetRect.top + offsetTopToStandardPlacement)}px`, + left: `${Math.round(targetRect.left - offsetRect.left + offsetLeftToStandardPlacement)}px`, + transform: 'translateY(-100%)' + }; + + case 'top-end': + return { + top: `${Math.round(targetRect.top - offsetRect.top + offsetTopToStandardPlacement)}px`, + left: `${Math.round(targetRect.left - offsetRect.left + targetRect.width + offsetLeftToStandardPlacement)}px`, + transform: 'translateX(-100%) translateY(-100%)' + }; + + case 'right-start': + return { + top: `${Math.round(targetRect.top - offsetRect.top + offsetTopToStandardPlacement)}px`, + left: `${Math.round(targetRect.left - offsetRect.left + targetRect.width + offsetLeftToStandardPlacement)}px`, + transform: '' + }; + + case 'right-end': + return { + top: `${Math.round(targetRect.top - offsetRect.top + targetRect.height + offsetTopToStandardPlacement)}px`, + left: `${Math.round(targetRect.left - offsetRect.left + targetRect.width + offsetLeftToStandardPlacement)}px`, + transform: 'translateY(-100%)' + }; + + case 'left-start': + return { + top: `${Math.round(targetRect.top - offsetRect.top + offsetTopToStandardPlacement)}px`, + left: `${Math.round(targetRect.left - offsetRect.left + offsetLeftToStandardPlacement)}px`, + transform: 'translateX(-100%)' + }; + + case 'left-end': + return { + top: `${Math.round(targetRect.top - offsetRect.top + targetRect.height + offsetTopToStandardPlacement)}px`, + left: `${Math.round(targetRect.left - offsetRect.left + offsetLeftToStandardPlacement)}px`, + transform: 'translateX(-100%) translateY(-100%)' + }; + + case 'top': + return { + top: `${Math.round(targetRect.top - offsetRect.top + offsetTopToStandardPlacement)}px`, + left: `${Math.round(targetRect.left - offsetRect.left + targetRect.width / 2 + offsetLeftToStandardPlacement)}px`, + transform: 'translateY(-100%) translateX(-50%)' + }; + + case 'right': + return { + top: `${Math.round(targetRect.top - offsetRect.top + targetRect.height / 2 + offsetTopToStandardPlacement)}px`, + left: `${Math.round(targetRect.left - offsetRect.left + targetRect.width + offsetLeftToStandardPlacement)}px`, + transform: 'translateY(-50%)' + }; + + case 'left': + return { + top: `${Math.round(targetRect.top - offsetRect.top + targetRect.height / 2 + offsetTopToStandardPlacement)}px`, + left: `${Math.round(targetRect.left - offsetRect.left + offsetLeftToStandardPlacement)}px`, + transform: 'translateY(-50%) translateX(-100%)' + }; + + case 'bottom': + default: + return { + top: `${Math.round(targetRect.top - offsetRect.top + targetRect.height + offsetTopToStandardPlacement)}px`, + left: `${Math.round(targetRect.left - offsetRect.left + targetRect.width / 2 + offsetLeftToStandardPlacement)}px`, + transform: 'translateX(-50%)' + }; + } + } + + /* eslint-disable @typescript-eslint/no-non-null-assertion */ + const style$1B = c([c('.v-binder-follower-container', { + position: 'absolute', + left: '0', + right: '0', + top: '0', + height: '0', + pointerEvents: 'none', + zIndex: 'auto' + }), c('.v-binder-follower-content', { + position: 'absolute', + zIndex: 'auto' + }, [c('> *', { + pointerEvents: 'all' + })])]); + var VFollower = vue.defineComponent({ + name: 'Follower', + inheritAttrs: false, + props: { + show: Boolean, + enabled: { + type: Boolean, + default: undefined + }, + placement: { + type: String, + default: 'bottom' + }, + syncTrigger: { + type: Array, + default: ['resize', 'scroll'] + }, + to: [String, Object], + flip: { + type: Boolean, + default: true + }, + internalShift: Boolean, + x: Number, + y: Number, + width: String, + minWidth: String, + containerClass: String, + teleportDisabled: Boolean, + zindexable: { + type: Boolean, + default: true + }, + zIndex: Number, + overlap: Boolean + }, + + setup(props) { + const VBinder = vue.inject('VBinder'); + const mergedEnabledRef = useMemo(() => { + return props.enabled !== undefined ? props.enabled : props.show; + }); + const followerRef = vue.ref(null); + const offsetContainerRef = vue.ref(null); + + const ensureListeners = () => { + const { + syncTrigger + } = props; + + if (syncTrigger.includes('scroll')) { + VBinder.addScrollListener(syncPosition); + } + + if (syncTrigger.includes('resize')) { + VBinder.addResizeListener(syncPosition); + } + }; + + const removeListeners = () => { + VBinder.removeScrollListener(syncPosition); + VBinder.removeResizeListener(syncPosition); + }; + + vue.onMounted(() => { + if (mergedEnabledRef.value) { + syncPosition(); + ensureListeners(); + } + }); + const ssrAdapter = useSsrAdapter(); + style$1B.mount({ + id: 'vueuc/binder', + head: true, + anchorMetaName: cssrAnchorMetaName$1, + ssr: ssrAdapter + }); + vue.onBeforeUnmount(() => { + removeListeners(); + }); + onFontsReady(() => { + if (mergedEnabledRef.value) { + syncPosition(); + } + }); + + const syncPosition = () => { + if (!mergedEnabledRef.value) { + return; + } + + const follower = followerRef.value; // sometimes watched props change before its dom is ready + // for example: show=false, x=undefined, y=undefined + // show=true, x=0, y=0 + // will cause error + // I may optimize the watch start point later + + if (follower === null) return; + const target = VBinder.targetRef; + const { + x, + y, + overlap + } = props; + const targetRect = x !== undefined && y !== undefined ? getPointRect(x, y) : getRect$1(target); + follower.style.setProperty('--v-target-width', `${Math.round(targetRect.width)}px`); + follower.style.setProperty('--v-target-height', `${Math.round(targetRect.height)}px`); + const { + width, + minWidth, + placement, + internalShift, + flip + } = props; + follower.setAttribute('v-placement', placement); + + if (overlap) { + follower.setAttribute('v-overlap', ''); + } else { + follower.removeAttribute('v-overlap'); + } + + const { + style + } = follower; + + if (width === 'target') { + style.width = `${targetRect.width}px`; + } else if (width !== undefined) { + style.width = width; + } else { + style.width = ''; + } + + if (minWidth === 'target') { + style.minWidth = `${targetRect.width}px`; + } else if (minWidth !== undefined) { + style.minWidth = minWidth; + } else { + style.minWidth = ''; + } + + const followerRect = getRect$1(follower); + const offsetContainerRect = getRect$1(offsetContainerRef.value); + const { + left: offsetLeftToStandardPlacement, + top: offsetTopToStandardPlacement, + placement: properPlacement + } = getPlacementAndOffsetOfFollower(placement, targetRect, followerRect, internalShift, flip, overlap); + const properTransformOrigin = getProperTransformOrigin(properPlacement, overlap); + const { + left, + top, + transform + } = getOffset$1(properPlacement, offsetContainerRect, targetRect, offsetTopToStandardPlacement, offsetLeftToStandardPlacement, overlap); // we assume that the content size doesn't change after flip, + // nor we need to make sync logic more complex + + follower.setAttribute('v-placement', properPlacement); + follower.style.setProperty('--v-offset-left', `${Math.round(offsetLeftToStandardPlacement)}px`); + follower.style.setProperty('--v-offset-top', `${Math.round(offsetTopToStandardPlacement)}px`); + follower.style.transform = `translateX(${left}) translateY(${top}) ${transform}`; + follower.style.setProperty('--v-transform-origin', properTransformOrigin); + follower.style.transformOrigin = properTransformOrigin; + }; + + vue.watch(mergedEnabledRef, value => { + if (value) { + ensureListeners(); + syncOnNextTick(); + } else { + removeListeners(); + } + }); + + const syncOnNextTick = () => { + vue.nextTick().then(syncPosition).catch(e => console.error(e)); + }; + + ['placement', 'x', 'y', 'internalShift', 'flip', 'width', 'overlap', 'minWidth'].forEach(prop => { + vue.watch(vue.toRef(props, prop), syncPosition); + }); + ['teleportDisabled'].forEach(prop => { + vue.watch(vue.toRef(props, prop), syncOnNextTick); + }); + vue.watch(vue.toRef(props, 'syncTrigger'), value => { + if (!value.includes('resize')) { + VBinder.removeResizeListener(syncPosition); + } else { + VBinder.addResizeListener(syncPosition); + } + + if (!value.includes('scroll')) { + VBinder.removeScrollListener(syncPosition); + } else { + VBinder.addScrollListener(syncPosition); + } + }); + const isMountedRef = isMounted(); + const mergedToRef = useMemo(() => { + const { + to + } = props; + if (to !== undefined) return to; + + if (isMountedRef.value) { + // TODO: find proper container + return undefined; + } + + return undefined; + }); + return { + VBinder, + mergedEnabled: mergedEnabledRef, + offsetContainerRef, + followerRef, + mergedTo: mergedToRef, + syncPosition + }; + }, + + render() { + return vue.h(LazyTeleport, { + show: this.show, + to: this.mergedTo, + disabled: this.teleportDisabled + }, { + default: () => { + var _a, _b; + + const vNode = vue.h('div', { + class: ['v-binder-follower-container', this.containerClass], + ref: 'offsetContainerRef' + }, [vue.h('div', { + class: 'v-binder-follower-content', + ref: 'followerRef' + }, (_b = (_a = this.$slots).default) === null || _b === void 0 ? void 0 : _b.call(_a))]); + + if (this.zindexable) { + return vue.withDirectives(vNode, [[zindexable$1, { + enabled: this.mergedEnabled, + zIndex: this.zIndex + }]]); + } + + return vNode; + } + }); + } + + }); + + var resizeObservers = []; + + var hasActiveObservations = function () { + return resizeObservers.some(function (ro) { + return ro.activeTargets.length > 0; + }); + }; + + var hasSkippedObservations = function () { + return resizeObservers.some(function (ro) { + return ro.skippedTargets.length > 0; + }); + }; + + var msg = 'ResizeObserver loop completed with undelivered notifications.'; + + var deliverResizeLoopError = function () { + var event; + + if (typeof ErrorEvent === 'function') { + event = new ErrorEvent('error', { + message: msg + }); + } else { + event = document.createEvent('Event'); + event.initEvent('error', false, false); + event.message = msg; + } + + window.dispatchEvent(event); + }; + + var ResizeObserverBoxOptions; + + (function (ResizeObserverBoxOptions) { + ResizeObserverBoxOptions["BORDER_BOX"] = "border-box"; + ResizeObserverBoxOptions["CONTENT_BOX"] = "content-box"; + ResizeObserverBoxOptions["DEVICE_PIXEL_CONTENT_BOX"] = "device-pixel-content-box"; + })(ResizeObserverBoxOptions || (ResizeObserverBoxOptions = {})); + + var freeze = function (obj) { + return Object.freeze(obj); + }; + + var ResizeObserverSize = function () { + function ResizeObserverSize(inlineSize, blockSize) { + this.inlineSize = inlineSize; + this.blockSize = blockSize; + freeze(this); + } + + return ResizeObserverSize; + }(); + + var DOMRectReadOnly = function () { + function DOMRectReadOnly(x, y, width, height) { + this.x = x; + this.y = y; + this.width = width; + this.height = height; + this.top = this.y; + this.left = this.x; + this.bottom = this.top + this.height; + this.right = this.left + this.width; + return freeze(this); + } + + DOMRectReadOnly.prototype.toJSON = function () { + var _a = this, + x = _a.x, + y = _a.y, + top = _a.top, + right = _a.right, + bottom = _a.bottom, + left = _a.left, + width = _a.width, + height = _a.height; + + return { + x: x, + y: y, + top: top, + right: right, + bottom: bottom, + left: left, + width: width, + height: height + }; + }; + + DOMRectReadOnly.fromRect = function (rectangle) { + return new DOMRectReadOnly(rectangle.x, rectangle.y, rectangle.width, rectangle.height); + }; + + return DOMRectReadOnly; + }(); + + var isSVG = function (target) { + return target instanceof SVGElement && 'getBBox' in target; + }; + + var isHidden = function (target) { + if (isSVG(target)) { + var _a = target.getBBox(), + width = _a.width, + height = _a.height; + + return !width && !height; + } + + var _b = target, + offsetWidth = _b.offsetWidth, + offsetHeight = _b.offsetHeight; + return !(offsetWidth || offsetHeight || target.getClientRects().length); + }; + + var isElement = function (obj) { + var _a; + + if (obj instanceof Element) { + return true; + } + + var scope = (_a = obj === null || obj === void 0 ? void 0 : obj.ownerDocument) === null || _a === void 0 ? void 0 : _a.defaultView; + return !!(scope && obj instanceof scope.Element); + }; + + var isReplacedElement = function (target) { + switch (target.tagName) { + case 'INPUT': + if (target.type !== 'image') { + break; + } + + case 'VIDEO': + case 'AUDIO': + case 'EMBED': + case 'OBJECT': + case 'CANVAS': + case 'IFRAME': + case 'IMG': + return true; + } + + return false; + }; + + var global$1 = typeof window !== 'undefined' ? window : {}; + + var cache = new WeakMap(); + var scrollRegexp = /auto|scroll/; + var verticalRegexp = /^tb|vertical/; + var IE = /msie|trident/i.test(global$1.navigator && global$1.navigator.userAgent); + + var parseDimension = function (pixel) { + return parseFloat(pixel || '0'); + }; + + var size = function (inlineSize, blockSize, switchSizes) { + if (inlineSize === void 0) { + inlineSize = 0; + } + + if (blockSize === void 0) { + blockSize = 0; + } + + if (switchSizes === void 0) { + switchSizes = false; + } + + return new ResizeObserverSize((switchSizes ? blockSize : inlineSize) || 0, (switchSizes ? inlineSize : blockSize) || 0); + }; + + var zeroBoxes = freeze({ + devicePixelContentBoxSize: size(), + borderBoxSize: size(), + contentBoxSize: size(), + contentRect: new DOMRectReadOnly(0, 0, 0, 0) + }); + + var calculateBoxSizes = function (target, forceRecalculation) { + if (forceRecalculation === void 0) { + forceRecalculation = false; + } + + if (cache.has(target) && !forceRecalculation) { + return cache.get(target); + } + + if (isHidden(target)) { + cache.set(target, zeroBoxes); + return zeroBoxes; + } + + var cs = getComputedStyle(target); + var svg = isSVG(target) && target.ownerSVGElement && target.getBBox(); + var removePadding = !IE && cs.boxSizing === 'border-box'; + var switchSizes = verticalRegexp.test(cs.writingMode || ''); + var canScrollVertically = !svg && scrollRegexp.test(cs.overflowY || ''); + var canScrollHorizontally = !svg && scrollRegexp.test(cs.overflowX || ''); + var paddingTop = svg ? 0 : parseDimension(cs.paddingTop); + var paddingRight = svg ? 0 : parseDimension(cs.paddingRight); + var paddingBottom = svg ? 0 : parseDimension(cs.paddingBottom); + var paddingLeft = svg ? 0 : parseDimension(cs.paddingLeft); + var borderTop = svg ? 0 : parseDimension(cs.borderTopWidth); + var borderRight = svg ? 0 : parseDimension(cs.borderRightWidth); + var borderBottom = svg ? 0 : parseDimension(cs.borderBottomWidth); + var borderLeft = svg ? 0 : parseDimension(cs.borderLeftWidth); + var horizontalPadding = paddingLeft + paddingRight; + var verticalPadding = paddingTop + paddingBottom; + var horizontalBorderArea = borderLeft + borderRight; + var verticalBorderArea = borderTop + borderBottom; + var horizontalScrollbarThickness = !canScrollHorizontally ? 0 : target.offsetHeight - verticalBorderArea - target.clientHeight; + var verticalScrollbarThickness = !canScrollVertically ? 0 : target.offsetWidth - horizontalBorderArea - target.clientWidth; + var widthReduction = removePadding ? horizontalPadding + horizontalBorderArea : 0; + var heightReduction = removePadding ? verticalPadding + verticalBorderArea : 0; + var contentWidth = svg ? svg.width : parseDimension(cs.width) - widthReduction - verticalScrollbarThickness; + var contentHeight = svg ? svg.height : parseDimension(cs.height) - heightReduction - horizontalScrollbarThickness; + var borderBoxWidth = contentWidth + horizontalPadding + verticalScrollbarThickness + horizontalBorderArea; + var borderBoxHeight = contentHeight + verticalPadding + horizontalScrollbarThickness + verticalBorderArea; + var boxes = freeze({ + devicePixelContentBoxSize: size(Math.round(contentWidth * devicePixelRatio), Math.round(contentHeight * devicePixelRatio), switchSizes), + borderBoxSize: size(borderBoxWidth, borderBoxHeight, switchSizes), + contentBoxSize: size(contentWidth, contentHeight, switchSizes), + contentRect: new DOMRectReadOnly(paddingLeft, paddingTop, contentWidth, contentHeight) + }); + cache.set(target, boxes); + return boxes; + }; + + var calculateBoxSize = function (target, observedBox, forceRecalculation) { + var _a = calculateBoxSizes(target, forceRecalculation), + borderBoxSize = _a.borderBoxSize, + contentBoxSize = _a.contentBoxSize, + devicePixelContentBoxSize = _a.devicePixelContentBoxSize; + + switch (observedBox) { + case ResizeObserverBoxOptions.DEVICE_PIXEL_CONTENT_BOX: + return devicePixelContentBoxSize; + + case ResizeObserverBoxOptions.BORDER_BOX: + return borderBoxSize; + + default: + return contentBoxSize; + } + }; + + var ResizeObserverEntry = function () { + function ResizeObserverEntry(target) { + var boxes = calculateBoxSizes(target); + this.target = target; + this.contentRect = boxes.contentRect; + this.borderBoxSize = freeze([boxes.borderBoxSize]); + this.contentBoxSize = freeze([boxes.contentBoxSize]); + this.devicePixelContentBoxSize = freeze([boxes.devicePixelContentBoxSize]); + } + + return ResizeObserverEntry; + }(); + + var calculateDepthForNode = function (node) { + if (isHidden(node)) { + return Infinity; + } + + var depth = 0; + var parent = node.parentNode; + + while (parent) { + depth += 1; + parent = parent.parentNode; + } + + return depth; + }; + + var broadcastActiveObservations = function () { + var shallowestDepth = Infinity; + var callbacks = []; + resizeObservers.forEach(function processObserver(ro) { + if (ro.activeTargets.length === 0) { + return; + } + + var entries = []; + ro.activeTargets.forEach(function processTarget(ot) { + var entry = new ResizeObserverEntry(ot.target); + var targetDepth = calculateDepthForNode(ot.target); + entries.push(entry); + ot.lastReportedSize = calculateBoxSize(ot.target, ot.observedBox); + + if (targetDepth < shallowestDepth) { + shallowestDepth = targetDepth; + } + }); + callbacks.push(function resizeObserverCallback() { + ro.callback.call(ro.observer, entries, ro.observer); + }); + ro.activeTargets.splice(0, ro.activeTargets.length); + }); + + for (var _i = 0, callbacks_1 = callbacks; _i < callbacks_1.length; _i++) { + var callback = callbacks_1[_i]; + callback(); + } + + return shallowestDepth; + }; + + var gatherActiveObservationsAtDepth = function (depth) { + resizeObservers.forEach(function processObserver(ro) { + ro.activeTargets.splice(0, ro.activeTargets.length); + ro.skippedTargets.splice(0, ro.skippedTargets.length); + ro.observationTargets.forEach(function processTarget(ot) { + if (ot.isActive()) { + if (calculateDepthForNode(ot.target) > depth) { + ro.activeTargets.push(ot); + } else { + ro.skippedTargets.push(ot); + } + } + }); + }); + }; + + var process$1 = function () { + var depth = 0; + gatherActiveObservationsAtDepth(depth); + + while (hasActiveObservations()) { + depth = broadcastActiveObservations(); + gatherActiveObservationsAtDepth(depth); + } + + if (hasSkippedObservations()) { + deliverResizeLoopError(); + } + + return depth > 0; + }; + + var trigger; + var callbacks = []; + + var notify = function () { + return callbacks.splice(0).forEach(function (cb) { + return cb(); + }); + }; + + var queueMicroTask = function (callback) { + if (!trigger) { + var toggle_1 = 0; + var el_1 = document.createTextNode(''); + var config = { + characterData: true + }; + new MutationObserver(function () { + return notify(); + }).observe(el_1, config); + + trigger = function () { + el_1.textContent = "".concat(toggle_1 ? toggle_1-- : toggle_1++); + }; + } + + callbacks.push(callback); + trigger(); + }; + + var queueResizeObserver = function (cb) { + queueMicroTask(function ResizeObserver() { + requestAnimationFrame(cb); + }); + }; + + var watching = 0; + + var isWatching = function () { + return !!watching; + }; + + var CATCH_PERIOD = 250; + var observerConfig = { + attributes: true, + characterData: true, + childList: true, + subtree: true + }; + var events = ['resize', 'load', 'transitionend', 'animationend', 'animationstart', 'animationiteration', 'keyup', 'keydown', 'mouseup', 'mousedown', 'mouseover', 'mouseout', 'blur', 'focus']; + + var time$1 = function (timeout) { + if (timeout === void 0) { + timeout = 0; + } + + return Date.now() + timeout; + }; + + var scheduled = false; + + var Scheduler = function () { + function Scheduler() { + var _this = this; + + this.stopped = true; + + this.listener = function () { + return _this.schedule(); + }; + } + + Scheduler.prototype.run = function (timeout) { + var _this = this; + + if (timeout === void 0) { + timeout = CATCH_PERIOD; + } + + if (scheduled) { + return; + } + + scheduled = true; + var until = time$1(timeout); + queueResizeObserver(function () { + var elementsHaveResized = false; + + try { + elementsHaveResized = process$1(); + } finally { + scheduled = false; + timeout = until - time$1(); + + if (!isWatching()) { + return; + } + + if (elementsHaveResized) { + _this.run(1000); + } else if (timeout > 0) { + _this.run(timeout); + } else { + _this.start(); + } + } + }); + }; + + Scheduler.prototype.schedule = function () { + this.stop(); + this.run(); + }; + + Scheduler.prototype.observe = function () { + var _this = this; + + var cb = function () { + return _this.observer && _this.observer.observe(document.body, observerConfig); + }; + + document.body ? cb() : global$1.addEventListener('DOMContentLoaded', cb); + }; + + Scheduler.prototype.start = function () { + var _this = this; + + if (this.stopped) { + this.stopped = false; + this.observer = new MutationObserver(this.listener); + this.observe(); + events.forEach(function (name) { + return global$1.addEventListener(name, _this.listener, true); + }); + } + }; + + Scheduler.prototype.stop = function () { + var _this = this; + + if (!this.stopped) { + this.observer && this.observer.disconnect(); + events.forEach(function (name) { + return global$1.removeEventListener(name, _this.listener, true); + }); + this.stopped = true; + } + }; + + return Scheduler; + }(); + + var scheduler = new Scheduler(); + + var updateCount = function (n) { + !watching && n > 0 && scheduler.start(); + watching += n; + !watching && scheduler.stop(); + }; + + var skipNotifyOnElement = function (target) { + return !isSVG(target) && !isReplacedElement(target) && getComputedStyle(target).display === 'inline'; + }; + + var ResizeObservation = function () { + function ResizeObservation(target, observedBox) { + this.target = target; + this.observedBox = observedBox || ResizeObserverBoxOptions.CONTENT_BOX; + this.lastReportedSize = { + inlineSize: 0, + blockSize: 0 + }; + } + + ResizeObservation.prototype.isActive = function () { + var size = calculateBoxSize(this.target, this.observedBox, true); + + if (skipNotifyOnElement(this.target)) { + this.lastReportedSize = size; + } + + if (this.lastReportedSize.inlineSize !== size.inlineSize || this.lastReportedSize.blockSize !== size.blockSize) { + return true; + } + + return false; + }; + + return ResizeObservation; + }(); + + var ResizeObserverDetail = function () { + function ResizeObserverDetail(resizeObserver, callback) { + this.activeTargets = []; + this.skippedTargets = []; + this.observationTargets = []; + this.observer = resizeObserver; + this.callback = callback; + } + + return ResizeObserverDetail; + }(); + + var observerMap = new WeakMap(); + + var getObservationIndex = function (observationTargets, target) { + for (var i = 0; i < observationTargets.length; i += 1) { + if (observationTargets[i].target === target) { + return i; + } + } + + return -1; + }; + + var ResizeObserverController = function () { + function ResizeObserverController() {} + + ResizeObserverController.connect = function (resizeObserver, callback) { + var detail = new ResizeObserverDetail(resizeObserver, callback); + observerMap.set(resizeObserver, detail); + }; + + ResizeObserverController.observe = function (resizeObserver, target, options) { + var detail = observerMap.get(resizeObserver); + var firstObservation = detail.observationTargets.length === 0; + + if (getObservationIndex(detail.observationTargets, target) < 0) { + firstObservation && resizeObservers.push(detail); + detail.observationTargets.push(new ResizeObservation(target, options && options.box)); + updateCount(1); + scheduler.schedule(); + } + }; + + ResizeObserverController.unobserve = function (resizeObserver, target) { + var detail = observerMap.get(resizeObserver); + var index = getObservationIndex(detail.observationTargets, target); + var lastObservation = detail.observationTargets.length === 1; + + if (index >= 0) { + lastObservation && resizeObservers.splice(resizeObservers.indexOf(detail), 1); + detail.observationTargets.splice(index, 1); + updateCount(-1); + } + }; + + ResizeObserverController.disconnect = function (resizeObserver) { + var _this = this; + + var detail = observerMap.get(resizeObserver); + detail.observationTargets.slice().forEach(function (ot) { + return _this.unobserve(resizeObserver, ot.target); + }); + detail.activeTargets.splice(0, detail.activeTargets.length); + }; + + return ResizeObserverController; + }(); + + var ResizeObserver = function () { + function ResizeObserver(callback) { + if (arguments.length === 0) { + throw new TypeError("Failed to construct 'ResizeObserver': 1 argument required, but only 0 present."); + } + + if (typeof callback !== 'function') { + throw new TypeError("Failed to construct 'ResizeObserver': The callback provided as parameter 1 is not a function."); + } + + ResizeObserverController.connect(this, callback); + } + + ResizeObserver.prototype.observe = function (target, options) { + if (arguments.length === 0) { + throw new TypeError("Failed to execute 'observe' on 'ResizeObserver': 1 argument required, but only 0 present."); + } + + if (!isElement(target)) { + throw new TypeError("Failed to execute 'observe' on 'ResizeObserver': parameter 1 is not of type 'Element"); + } + + ResizeObserverController.observe(this, target, options); + }; + + ResizeObserver.prototype.unobserve = function (target) { + if (arguments.length === 0) { + throw new TypeError("Failed to execute 'unobserve' on 'ResizeObserver': 1 argument required, but only 0 present."); + } + + if (!isElement(target)) { + throw new TypeError("Failed to execute 'unobserve' on 'ResizeObserver': parameter 1 is not of type 'Element"); + } + + ResizeObserverController.unobserve(this, target); + }; + + ResizeObserver.prototype.disconnect = function () { + ResizeObserverController.disconnect(this); + }; + + ResizeObserver.toString = function () { + return 'function ResizeObserver () { [polyfill code] }'; + }; + + return ResizeObserver; + }(); + + class ResizeObserverDelegate { + constructor() { + this.handleResize = this.handleResize.bind(this); + this.observer = new ResizeObserver(this.handleResize); + this.elHandlersMap = new Map(); + } + + handleResize(entries) { + for (const entry of entries) { + const handler = this.elHandlersMap.get(entry.target); + + if (handler !== undefined) { + handler(entry); + } + } + } + + registerHandler(el, handler) { + this.elHandlersMap.set(el, handler); + this.observer.observe(el); + } + + unregisterHandler(el) { + if (!this.elHandlersMap.has(el)) { + return; + } + + this.elHandlersMap.delete(el); + this.observer.unobserve(el); + } + + } + + var resizeObserverManager = new ResizeObserverDelegate(); + + var VResizeObserver = vue.defineComponent({ + name: 'ResizeObserver', + props: { + onResize: Function + }, + + setup(props) { + let registered = false; // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + + const proxy = vue.getCurrentInstance().proxy; + + function handleResize(entry) { + const { + onResize + } = props; + if (onResize !== undefined) onResize(entry); + } + + vue.onMounted(() => { + const el = proxy.$el; + + if (el === undefined) { + warn('resize-observer', '$el does not exist.'); + return; + } + + if (el.nextElementSibling !== el.nextSibling) { + if (el.nodeType === 3 && el.nodeValue !== '') { + warn('resize-observer', '$el can not be observed (it may be a text node).'); + return; + } + } + + if (el.nextElementSibling !== null) { + resizeObserverManager.registerHandler(el.nextElementSibling, handleResize); + registered = true; + } + }); + vue.onBeforeUnmount(() => { + if (registered) { + resizeObserverManager.unregisterHandler(proxy.$el.nextElementSibling); + } + }); + }, + + render() { + return vue.renderSlot(this.$slots, 'default'); + } + + }); + + let maybeTouch; + function ensureMaybeTouch() { + if (maybeTouch === undefined) { + if ('matchMedia' in window) { + maybeTouch = window.matchMedia('(pointer:coarse)').matches; + } else { + maybeTouch = false; + } + } + + return maybeTouch; + } + let wheelScale; + function ensureWheelScale() { + if (wheelScale === undefined) { + wheelScale = 'chrome' in window ? window.devicePixelRatio : 1; + } + + return wheelScale; + } + + /* eslint-disable no-void */ + const styles$1 = c('.v-vl', { + maxHeight: 'inherit', + height: '100%', + overflow: 'auto', + minWidth: '1px' // a zero width container won't be scrollable + + }, [c('&:not(.v-vl--show-scrollbar)', { + scrollbarWidth: 'none' + }, [c('&::-webkit-scrollbar, &::-webkit-scrollbar-track-piece, &::-webkit-scrollbar-thumb', { + width: 0, + height: 0, + display: 'none' + })])]); + var VVirtualList = vue.defineComponent({ + name: 'VirtualList', + inheritAttrs: false, + props: { + showScrollbar: { + type: Boolean, + default: true + }, + items: { + type: Array, + default: () => [] + }, + // it is suppose to be the min height + itemSize: { + type: Number, + required: true + }, + itemResizable: Boolean, + itemsStyle: [String, Object], + visibleItemsTag: { + type: [String, Object], + default: 'div' + }, + visibleItemsProps: Object, + ignoreItemResize: Boolean, + onScroll: Function, + onWheel: Function, + onResize: Function, + defaultScrollKey: [Number, String], + defaultScrollIndex: Number, + keyField: { + type: String, + default: 'key' + }, + // Whether it is a good API? + // ResizeObserver + footer & header is not enough. + // Too complex for simple case + paddingTop: { + type: [Number, String], + default: 0 + }, + paddingBottom: { + type: [Number, String], + default: 0 + } + }, + + setup(props) { + const ssrAdapter = useSsrAdapter(); + styles$1.mount({ + id: 'vueuc/virtual-list', + head: true, + anchorMetaName: cssrAnchorMetaName$1, + ssr: ssrAdapter + }); + vue.onMounted(() => { + const { + defaultScrollIndex, + defaultScrollKey + } = props; + + if (defaultScrollIndex !== undefined && defaultScrollIndex !== null) { + scrollTo({ + index: defaultScrollIndex + }); + } else if (defaultScrollKey !== undefined && defaultScrollKey !== null) { + scrollTo({ + key: defaultScrollKey + }); + } + }); + let isDeactivated = false; + let activateStateInitialized = false; + vue.onActivated(() => { + isDeactivated = false; + + if (!activateStateInitialized) { + activateStateInitialized = true; + return; + } // remount + + + scrollTo({ + top: scrollTopRef.value, + left: scrollLeft + }); + }); + vue.onDeactivated(() => { + isDeactivated = true; + + if (!activateStateInitialized) { + activateStateInitialized = true; + } + }); + const keyIndexMapRef = vue.computed(() => { + const map = new Map(); + const { + keyField + } = props; + props.items.forEach((item, index) => { + map.set(item[keyField], index); + }); + return map; + }); + const listElRef = vue.ref(null); + const listHeightRef = vue.ref(undefined); + const keyToHeightOffset = new Map(); + const finweckTreeRef = vue.computed(() => { + const { + items, + itemSize, + keyField + } = props; + const ft = new FinweckTree(items.length, itemSize); + items.forEach((item, index) => { + const key = item[keyField]; + const heightOffset = keyToHeightOffset.get(key); + + if (heightOffset !== undefined) { + ft.add(index, heightOffset); + } + }); + return ft; + }); + const finweckTreeUpdateTrigger = vue.ref(0); + let scrollLeft = 0; + const scrollTopRef = vue.ref(0); + const startIndexRef = useMemo(() => { + return Math.max(finweckTreeRef.value.getBound(scrollTopRef.value - depx(props.paddingTop)) - 1, 0); + }); + const viewportItemsRef = vue.computed(() => { + const { + value: listHeight + } = listHeightRef; + if (listHeight === undefined) return []; + const { + items, + itemSize + } = props; + const startIndex = startIndexRef.value; + const endIndex = Math.min(startIndex + Math.ceil(listHeight / itemSize + 1), items.length - 1); + const viewportItems = []; + + for (let i = startIndex; i <= endIndex; ++i) { + viewportItems.push(items[i]); + } + + return viewportItems; + }); + + const scrollTo = (options, y) => { + if (typeof options === 'number') { + scrollToPosition(options, y, 'auto'); + return; + } + + const { + left, + top, + index, + key, + position, + behavior, + debounce = true + } = options; + + if (left !== undefined || top !== undefined) { + scrollToPosition(left, top, behavior); + } else if (index !== undefined) { + scrollToIndex(index, behavior, debounce); + } else if (key !== undefined) { + const toIndex = keyIndexMapRef.value.get(key); + if (toIndex !== undefined) scrollToIndex(toIndex, behavior, debounce); + } else if (position === 'bottom') { + scrollToPosition(0, Number.MAX_SAFE_INTEGER, behavior); + } else if (position === 'top') { + scrollToPosition(0, 0, behavior); + } + }; + + let anchorIndex; + let anchorTimerId = null; + + function scrollToIndex(index, behavior, debounce) { + const { + value: ft + } = finweckTreeRef; + const targetTop = ft.sum(index) + depx(props.paddingTop); + + if (!debounce) { + listElRef.value.scrollTo({ + left: 0, + top: targetTop, + behavior + }); + } else { + anchorIndex = index; + + if (anchorTimerId !== null) { + window.clearTimeout(anchorTimerId); + } + + anchorTimerId = window.setTimeout(() => { + anchorIndex = undefined; + anchorTimerId = null; + }, 16); // use 0 ms may be ealier than resize callback... + + const { + scrollTop, + offsetHeight + } = listElRef.value; + + if (targetTop > scrollTop) { + const itemSize = ft.get(index); + + if (targetTop + itemSize <= scrollTop + offsetHeight) ; else { + listElRef.value.scrollTo({ + left: 0, + top: targetTop + itemSize - offsetHeight, + behavior + }); + } + } else { + listElRef.value.scrollTo({ + left: 0, + top: targetTop, + behavior + }); + } + } + } + + function scrollToPosition(left, top, behavior) { + listElRef.value.scrollTo({ + left, + top, + behavior + }); + } + + function handleItemResize(key, entry) { + var _a, _b, _c; + + if (isDeactivated) return; + if (props.ignoreItemResize) return; + if (isHideByVShow(entry.target)) return; + const { + value: ft + } = finweckTreeRef; + const index = keyIndexMapRef.value.get(key); + const previousHeight = ft.get(index); + const height = (_c = (_b = (_a = entry.borderBoxSize) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.blockSize) !== null && _c !== void 0 ? _c : entry.contentRect.height; + if (height === previousHeight) return; // height offset based on itemSize + // used when rebuild the finweck tree + + const offset = height - props.itemSize; + + if (offset === 0) { + keyToHeightOffset.delete(key); + } else { + keyToHeightOffset.set(key, height - props.itemSize); + } // delta height based on finweck tree data + + + const delta = height - previousHeight; + if (delta === 0) return; + ft.add(index, delta); + const listEl = listElRef.value; + + if (listEl != null) { + if (anchorIndex === undefined) { + const previousHeightSum = ft.sum(index); + + if (listEl.scrollTop > previousHeightSum) { + listEl.scrollBy(0, delta); + } + } else { + if (index < anchorIndex) { + listEl.scrollBy(0, delta); + } else if (index === anchorIndex) { + const previousHeightSum = ft.sum(index); + + if (height + previousHeightSum > // Note, listEl shouldn't have border, nor offsetHeight won't be + // correct + listEl.scrollTop + listEl.offsetHeight) { + listEl.scrollBy(0, delta); + } + } + } + + syncViewport(); + } + + finweckTreeUpdateTrigger.value++; + } + + const mayUseWheel = !ensureMaybeTouch(); + let wheelCatched = false; + + function handleListScroll(e) { + var _a; + + (_a = props.onScroll) === null || _a === void 0 ? void 0 : _a.call(props, e); + + if (!mayUseWheel || !wheelCatched) { + syncViewport(); + } + } + + function handleListWheel(e) { + var _a; + + (_a = props.onWheel) === null || _a === void 0 ? void 0 : _a.call(props, e); + + if (mayUseWheel) { + const listEl = listElRef.value; + + if (listEl != null) { + if (e.deltaX === 0) { + if (listEl.scrollTop === 0 && e.deltaY <= 0) { + return; + } + + if (listEl.scrollTop + listEl.offsetHeight >= listEl.scrollHeight && e.deltaY >= 0) { + return; + } + } + + e.preventDefault(); + listEl.scrollTop += e.deltaY / ensureWheelScale(); + listEl.scrollLeft += e.deltaX / ensureWheelScale(); + syncViewport(); + wheelCatched = true; + beforeNextFrameOnce(() => { + wheelCatched = false; + }); + } + } + } + + function handleListResize(entry) { + if (isDeactivated) return; // List is HTMLElement + + if (isHideByVShow(entry.target)) return; // If height is same, return + + if (entry.contentRect.height === listHeightRef.value) return; + listHeightRef.value = entry.contentRect.height; + const { + onResize + } = props; + if (onResize !== undefined) onResize(entry); + } + + function syncViewport() { + const { + value: listEl + } = listElRef; // sometime ref el can be null + // https://github.com/TuSimple/naive-ui/issues/811 + + if (listEl == null) return; + scrollTopRef.value = listEl.scrollTop; + scrollLeft = listEl.scrollLeft; + } + + function isHideByVShow(el) { + let cursor = el; + + while (cursor !== null) { + if (cursor.style.display === 'none') return true; + cursor = cursor.parentElement; + } + + return false; + } + + return { + listHeight: listHeightRef, + listStyle: { + overflow: 'auto' + }, + keyToIndex: keyIndexMapRef, + itemsStyle: vue.computed(() => { + const { + itemResizable + } = props; + const height = pxfy(finweckTreeRef.value.sum()); // eslint-disable-next-line @typescript-eslint/no-unused-expressions + + finweckTreeUpdateTrigger.value; + return [props.itemsStyle, { + boxSizing: 'content-box', + height: itemResizable ? '' : height, + minHeight: itemResizable ? height : '', + paddingTop: pxfy(props.paddingTop), + paddingBottom: pxfy(props.paddingBottom) + }]; + }), + visibleItemsStyle: vue.computed(() => { + // eslint-disable-next-line @typescript-eslint/no-unused-expressions + finweckTreeUpdateTrigger.value; + return { + transform: `translateY(${pxfy(finweckTreeRef.value.sum(startIndexRef.value))})` + }; + }), + viewportItems: viewportItemsRef, + listElRef, + itemsElRef: vue.ref(null), + scrollTo, + handleListResize, + handleListScroll, + handleListWheel, + handleItemResize + }; + }, + + render() { + const { + itemResizable, + keyField, + keyToIndex, + visibleItemsTag + } = this; + return vue.h(VResizeObserver, { + onResize: this.handleListResize + }, { + default: () => { + var _a, _b; + + return vue.h('div', vue.mergeProps(this.$attrs, { + class: ['v-vl', this.showScrollbar && 'v-vl--show-scrollbar'], + onScroll: this.handleListScroll, + onWheel: this.handleListWheel, + ref: 'listElRef' + }), [this.items.length !== 0 ? vue.h('div', { + ref: 'itemsElRef', + class: 'v-vl-items', + style: this.itemsStyle + }, [vue.h(visibleItemsTag, Object.assign({ + class: 'v-vl-visible-items', + style: this.visibleItemsStyle + }, this.visibleItemsProps), { + default: () => this.viewportItems.map(item => { + const key = item[keyField]; + const index = keyToIndex.get(key); + const itemVNode = this.$slots.default({ + item, + index + })[0]; + + if (itemResizable) { + return vue.h(VResizeObserver, { + key, + onResize: entry => this.handleItemResize(key, entry) + }, { + default: () => itemVNode + }); + } + + itemVNode.key = key; + return itemVNode; + }) + })]) : (_b = (_a = this.$slots).empty) === null || _b === void 0 ? void 0 : _b.call(_a)]); + } + }); + } + + }); + + const styles = c('.v-x-scroll', { + overflow: 'auto', + scrollbarWidth: 'none' + }, [c('&::-webkit-scrollbar', { + width: 0, + height: 0 + })]); + var VXScroll = vue.defineComponent({ + name: 'XScroll', + props: { + disabled: Boolean, + onScroll: Function + }, + + setup() { + const selfRef = vue.ref(null); + + function handleWheel(e) { + const preventYWheel = e.currentTarget.offsetWidth < e.currentTarget.scrollWidth; + if (!preventYWheel || e.deltaY === 0) return; + e.currentTarget.scrollLeft += e.deltaY + e.deltaX; + e.preventDefault(); + } + + const ssrAdapter = useSsrAdapter(); + styles.mount({ + id: 'vueuc/x-scroll', + head: true, + anchorMetaName: cssrAnchorMetaName$1, + ssr: ssrAdapter + }); + const exposedMethods = { + scrollTo() { + var _a; + + (_a = selfRef.value) === null || _a === void 0 ? void 0 : _a.scrollTo(...arguments); + } + + }; + return Object.assign({ + selfRef, + handleWheel + }, exposedMethods); + }, + + render() { + return vue.h('div', { + ref: 'selfRef', + onScroll: this.onScroll, + onWheel: this.disabled ? undefined : this.handleWheel, + class: 'v-x-scroll' + }, this.$slots); + } + + }); + + /* eslint-disable @typescript-eslint/strict-boolean-expressions */ + const hiddenAttr = 'v-hidden'; + const style$1A = c('[v-hidden]', { + display: 'none!important' + }); + var VOverflow = vue.defineComponent({ + name: 'Overflow', + props: { + getCounter: Function, + getTail: Function, + updateCounter: Function, + onUpdateOverflow: Function + }, + + setup(props, _ref) { + let { + slots + } = _ref; + const selfRef = vue.ref(null); + const counterRef = vue.ref(null); + + function deriveCounter() { + const { + value: self + } = selfRef; + const { + getCounter, + getTail + } = props; + let counter; + if (getCounter !== undefined) counter = getCounter();else { + counter = counterRef.value; + } + if (!self || !counter) return; + + if (counter.hasAttribute(hiddenAttr)) { + counter.removeAttribute(hiddenAttr); + } + + const { + children + } = self; + const containerWidth = self.offsetWidth; + const childWidths = []; + const tail = slots.tail ? getTail === null || getTail === void 0 ? void 0 : getTail() : null; + let childWidthSum = tail ? tail.offsetWidth : 0; + let overflow = false; + const len = self.children.length - (slots.tail ? 1 : 0); + + for (let i = 0; i < len - 1; ++i) { + if (i < 0) continue; + const child = children[i]; + + if (overflow) { + if (!child.hasAttribute(hiddenAttr)) { + child.setAttribute(hiddenAttr, ''); + } + + continue; + } else if (child.hasAttribute(hiddenAttr)) { + child.removeAttribute(hiddenAttr); + } + + const childWidth = child.offsetWidth; + childWidthSum += childWidth; + childWidths[i] = childWidth; + + if (childWidthSum > containerWidth) { + const { + updateCounter + } = props; + + for (let j = i; j >= 0; --j) { + const restCount = len - 1 - j; + + if (updateCounter !== undefined) { + updateCounter(restCount); + } else { + counter.textContent = `${restCount}`; + } + + const counterWidth = counter.offsetWidth; + childWidthSum -= childWidths[j]; + + if (childWidthSum + counterWidth <= containerWidth || j === 0) { + overflow = true; + i = j - 1; + + if (tail) { + // tail too long or 1st element too long + // we only consider tail now + if (i === -1) { + tail.style.maxWidth = `${containerWidth - counterWidth}px`; + tail.style.boxSizing = 'border-box'; + } else { + tail.style.maxWidth = ''; + } + } + + break; + } + } + } + } + + const { + onUpdateOverflow + } = props; + + if (!overflow) { + if (onUpdateOverflow !== undefined) { + onUpdateOverflow(false); + } + + counter.setAttribute(hiddenAttr, ''); + } else { + if (onUpdateOverflow !== undefined) { + onUpdateOverflow(true); + } + } + } + + const ssrAdapter = useSsrAdapter(); + style$1A.mount({ + id: 'vueuc/overflow', + head: true, + anchorMetaName: cssrAnchorMetaName$1, + ssr: ssrAdapter + }); + vue.onMounted(deriveCounter); // besides onMounted, other case should be manually triggered, or we shoud watch items + + return { + selfRef, + counterRef, + sync: deriveCounter + }; + }, + + render() { + const { + $slots + } = this; // eslint-disable-next-line @typescript-eslint/no-floating-promises + + vue.nextTick(this.sync); // It shouldn't have border + + return vue.h('div', { + class: 'v-overflow', + ref: 'selfRef' + }, [vue.renderSlot($slots, 'default'), // $slots.counter should only has 1 element + $slots.counter ? $slots.counter() : vue.h('span', { + style: { + display: 'inline-block' + }, + ref: 'counterRef' + }), // $slots.tail should only has 1 element + $slots.tail ? $slots.tail() : null]); + } + + }); + + /* eslint-disable @typescript-eslint/strict-boolean-expressions */ + // ref https://www.w3.org/TR/wai-aria-practices-1.1/examples/dialog-modal/js/dialog.js + function isHTMLElement(node) { + return node instanceof HTMLElement; + } + + function focusFirstDescendant(node) { + for (let i = 0; i < node.childNodes.length; i++) { + const child = node.childNodes[i]; + + if (isHTMLElement(child)) { + if (attemptFocus(child) || focusFirstDescendant(child)) { + return true; + } + } + } + + return false; + } + function focusLastDescendant(element) { + for (let i = element.childNodes.length - 1; i >= 0; i--) { + const child = element.childNodes[i]; + + if (isHTMLElement(child)) { + if (attemptFocus(child) || focusLastDescendant(child)) { + return true; + } + } + } + + return false; + } + + function attemptFocus(element) { + if (!isFocusable(element)) { + return false; + } + + try { + element.focus({ + preventScroll: true + }); + } catch (e) {} + + return document.activeElement === element; + } + + function isFocusable(element) { + if (element.tabIndex > 0 || element.tabIndex === 0 && element.getAttribute('tabIndex') !== null) { + return true; + } + + if (element.getAttribute('disabled')) { + return false; + } + + switch (element.nodeName) { + case 'A': + return !!element.href && element.rel !== 'ignore'; + + case 'INPUT': + return element.type !== 'hidden' && element.type !== 'file'; + + case 'BUTTON': + case 'SELECT': + case 'TEXTAREA': + return true; + + default: + return false; + } + } + + let stack = []; + const FocusTrap = vue.defineComponent({ + name: 'FocusTrap', + props: { + disabled: Boolean, + active: Boolean, + autoFocus: { + type: Boolean, + default: true + }, + onEsc: Function, + initialFocusTo: String, + finalFocusTo: String, + returnFocusOnDeactivated: { + type: Boolean, + default: true + } + }, + + setup(props) { + const id = createId(); + const focusableStartRef = vue.ref(null); + const focusableEndRef = vue.ref(null); + let activated = false; + let ignoreInternalFocusChange = false; + const lastFocusedElement = document.activeElement; + + function isCurrentActive() { + const currentActiveId = stack[stack.length - 1]; + return currentActiveId === id; + } + + function handleDocumentKeydown(e) { + var _a; + + if (e.code === 'Escape') { + if (isCurrentActive()) { + (_a = props.onEsc) === null || _a === void 0 ? void 0 : _a.call(props, e); + } + } + } + + vue.onMounted(() => { + vue.watch(() => props.active, value => { + if (value) { + activate(); + on('keydown', document, handleDocumentKeydown); + } else { + off('keydown', document, handleDocumentKeydown); + + if (activated) { + deactivate(); + } + } + }, { + immediate: true + }); + }); + vue.onBeforeUnmount(() => { + off('keydown', document, handleDocumentKeydown); + if (activated) deactivate(); + }); + + function handleDocumentFocus(e) { + if (ignoreInternalFocusChange) return; + + if (isCurrentActive()) { + const mainEl = getMainEl(); + if (mainEl === null) return; + if (mainEl.contains(getPreciseEventTarget(e))) return; // I don't handle shift + tab status since it's too tricky to handle + // Not impossible but I need to sleep + + resetFocusTo('first'); + } + } + + function getMainEl() { + const focusableStartEl = focusableStartRef.value; + if (focusableStartEl === null) return null; + let mainEl = focusableStartEl; + + while (true) { + mainEl = mainEl.nextSibling; + if (mainEl === null) break; + + if (mainEl instanceof Element && mainEl.tagName === 'DIV') { + break; + } + } + + return mainEl; + } + + function activate() { + var _a; + + if (props.disabled) return; + stack.push(id); + + if (props.autoFocus) { + const { + initialFocusTo + } = props; + + if (initialFocusTo === undefined) { + resetFocusTo('first'); + } else { + (_a = resolveTo(initialFocusTo)) === null || _a === void 0 ? void 0 : _a.focus({ + preventScroll: true + }); + } + } + + activated = true; + document.addEventListener('focus', handleDocumentFocus, true); + } + + function deactivate() { + var _a; + + if (props.disabled) return; + document.removeEventListener('focus', handleDocumentFocus, true); + stack = stack.filter(idInStack => idInStack !== id); + if (isCurrentActive()) return; + const { + finalFocusTo + } = props; + + if (finalFocusTo !== undefined) { + (_a = resolveTo(finalFocusTo)) === null || _a === void 0 ? void 0 : _a.focus({ + preventScroll: true + }); + } else if (props.returnFocusOnDeactivated) { + if (lastFocusedElement instanceof HTMLElement) { + ignoreInternalFocusChange = true; + lastFocusedElement.focus({ + preventScroll: true + }); + ignoreInternalFocusChange = false; + } + } + } + + function resetFocusTo(target) { + if (!isCurrentActive()) return; + + if (props.active) { + const focusableStartEl = focusableStartRef.value; + const focusableEndEl = focusableEndRef.value; + + if (focusableStartEl !== null && focusableEndEl !== null) { + const mainEl = getMainEl(); + + if (mainEl == null || mainEl === focusableEndEl) { + ignoreInternalFocusChange = true; + focusableStartEl.focus({ + preventScroll: true + }); + ignoreInternalFocusChange = false; + return; + } + + ignoreInternalFocusChange = true; + const focused = target === 'first' ? focusFirstDescendant(mainEl) : focusLastDescendant(mainEl); + ignoreInternalFocusChange = false; + + if (!focused) { + ignoreInternalFocusChange = true; + focusableStartEl.focus({ + preventScroll: true + }); + ignoreInternalFocusChange = false; + } + } + } + } + + function handleStartFocus(e) { + if (ignoreInternalFocusChange) return; + const mainEl = getMainEl(); + if (mainEl === null) return; + + if (e.relatedTarget !== null && mainEl.contains(e.relatedTarget)) { + // if it comes from inner, focus last + resetFocusTo('last'); + } else { + // otherwise focus first + resetFocusTo('first'); + } + } + + function handleEndFocus(e) { + if (ignoreInternalFocusChange) return; + + if (e.relatedTarget !== null && e.relatedTarget === focusableStartRef.value) { + // if it comes from first, focus last + resetFocusTo('last'); + } else { + // otherwise focus first + resetFocusTo('first'); + } + } + + return { + focusableStartRef, + focusableEndRef, + focusableStyle: 'position: absolute; height: 0; width: 0;', + handleStartFocus, + handleEndFocus + }; + }, + + render() { + const { + default: defaultSlot + } = this.$slots; + if (defaultSlot === undefined) return null; + if (this.disabled) return defaultSlot(); + const { + active, + focusableStyle + } = this; + return vue.h(vue.Fragment, null, [vue.h('div', { + 'aria-hidden': 'true', + tabindex: active ? '0' : '-1', + ref: 'focusableStartRef', + style: focusableStyle, + onFocus: this.handleStartFocus + }), defaultSlot(), vue.h('div', { + 'aria-hidden': 'true', + style: focusableStyle, + ref: 'focusableEndRef', + tabindex: active ? '0' : '-1', + onFocus: this.handleEndFocus + })]); + } + + }); + + function useOnResize(elRef, onResize) { + if (onResize) { + vue.onMounted(() => { + const { + value: el + } = elRef; + + if (el) { + resizeObserverManager.registerHandler(el, onResize); + } + }); + vue.onBeforeUnmount(() => { + const { + value: el + } = elRef; + + if (el) { + resizeObserverManager.unregisterHandler(el); + } + }); + } + } + + let lockCount = 0; + let originalMarginRight = ""; + let originalOverflow = ""; + let originalOverflowX = ""; + let originalOverflowY = ""; + const lockHtmlScrollRightCompensationRef = vue.ref("0px"); + function useLockHtmlScroll(lockRef) { + if (typeof document === "undefined") return; + const el = document.documentElement; + let watchStopHandle; + let activated = false; + + const unlock = () => { + el.style.marginRight = originalMarginRight; + el.style.overflow = originalOverflow; + el.style.overflowX = originalOverflowX; + el.style.overflowY = originalOverflowY; + lockHtmlScrollRightCompensationRef.value = "0px"; + }; + + vue.onMounted(() => { + watchStopHandle = vue.watch(lockRef, value => { + if (value) { + if (!lockCount) { + const scrollbarWidth = window.innerWidth - el.offsetWidth; + + if (scrollbarWidth > 0) { + originalMarginRight = el.style.marginRight; + el.style.marginRight = `${scrollbarWidth}px`; + lockHtmlScrollRightCompensationRef.value = `${scrollbarWidth}px`; + } + + originalOverflow = el.style.overflow; + originalOverflowX = el.style.overflowX; + originalOverflowY = el.style.overflowY; + el.style.overflow = "hidden"; + el.style.overflowX = "hidden"; + el.style.overflowY = "hidden"; + } + + activated = true; + lockCount++; + } else { + lockCount--; + + if (!lockCount) { + unlock(); + } + + activated = false; + } + }, { + immediate: true + }); + }); + vue.onBeforeUnmount(() => { + watchStopHandle?.(); + + if (activated) { + lockCount--; + + if (!lockCount) { + unlock(); + } + + activated = false; + } + }); + } + + const isComposingRef = vue.ref(false); + + const compositionStartHandler = () => { + isComposingRef.value = true; + }; + + const compositionEndHandler = () => { + isComposingRef.value = false; + }; + + let mountedCount = 0; + const useIsComposing = () => { + if (isBrowser$2) { + vue.onBeforeMount(() => { + if (!mountedCount) { + window.addEventListener("compositionstart", compositionStartHandler); + window.addEventListener("compositionend", compositionEndHandler); + } + + mountedCount++; + }); + vue.onBeforeUnmount(() => { + if (mountedCount <= 1) { + window.removeEventListener("compositionstart", compositionStartHandler); + window.removeEventListener("compositionend", compositionEndHandler); + mountedCount = 0; + } else { + mountedCount--; + } + }); + } + + return isComposingRef; + }; + + function useReactivated(callback) { + const isDeactivatedRef = { + isDeactivated: false + }; + let activateStateInitialized = false; + vue.onActivated(() => { + isDeactivatedRef.isDeactivated = false; + + if (!activateStateInitialized) { + activateStateInitialized = true; + return; + } + + callback(); + }); + vue.onDeactivated(() => { + isDeactivatedRef.isDeactivated = true; + + if (!activateStateInitialized) { + activateStateInitialized = true; + } + }); + return isDeactivatedRef; + } + + function isDocument(node) { + return node.nodeName === "#document"; + } + + const formItemInjectionKey = createInjectionKey("n-form-item"); + function useFormItem(props) { + let { + defaultSize = "medium", + mergedSize, + mergedDisabled + } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + const NFormItem = vue.inject(formItemInjectionKey, null); + vue.provide(formItemInjectionKey, null); + const mergedSizeRef = vue.computed(mergedSize ? () => mergedSize(NFormItem) : () => { + const { + size + } = props; + if (size) return size; + + if (NFormItem) { + const { + mergedSize: mergedSize2 + } = NFormItem; + + if (mergedSize2.value !== void 0) { + return mergedSize2.value; + } + } + + return defaultSize; + }); + const mergedDisabledRef = vue.computed(mergedDisabled ? () => mergedDisabled(NFormItem) : () => { + const { + disabled + } = props; + + if (disabled !== void 0) { + return disabled; + } + + if (NFormItem) { + return NFormItem.disabled.value; + } + + return false; + }); + const mergedStatusRef = vue.computed(() => { + const { + status + } = props; + if (status) return status; + return NFormItem?.mergedValidationStatus.value; + }); + vue.onBeforeUnmount(() => { + if (NFormItem) { + NFormItem.restoreValidation(); + } + }); + return { + mergedSizeRef, + mergedDisabledRef, + mergedStatusRef, + + nTriggerFormBlur() { + if (NFormItem) { + NFormItem.handleContentBlur(); + } + }, + + nTriggerFormChange() { + if (NFormItem) { + NFormItem.handleContentChange(); + } + }, + + nTriggerFormFocus() { + if (NFormItem) { + NFormItem.handleContentFocus(); + } + }, + + nTriggerFormInput() { + if (NFormItem) { + NFormItem.handleContentInput(); + } + } + + }; + } + + var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + + function getDefaultExportFromCjs (x) { + return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x; + } + + var lodash = {exports: {}}; + + /** + * @license + * Lodash + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ + + (function (module, exports) { + (function(){/** Used as a safe reference for `undefined` in pre-ES5 environments. */var undefined$1;/** Used as the semantic version number. */var VERSION='4.17.21';/** Used as the size to enable large array optimizations. */var LARGE_ARRAY_SIZE=200;/** Error message constants. */var CORE_ERROR_TEXT='Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',FUNC_ERROR_TEXT='Expected a function',INVALID_TEMPL_VAR_ERROR_TEXT='Invalid `variable` option passed into `_.template`';/** Used to stand-in for `undefined` hash values. */var HASH_UNDEFINED='__lodash_hash_undefined__';/** Used as the maximum memoize cache size. */var MAX_MEMOIZE_SIZE=500;/** Used as the internal argument placeholder. */var PLACEHOLDER='__lodash_placeholder__';/** Used to compose bitmasks for cloning. */var CLONE_DEEP_FLAG=1,CLONE_FLAT_FLAG=2,CLONE_SYMBOLS_FLAG=4;/** Used to compose bitmasks for value comparisons. */var COMPARE_PARTIAL_FLAG=1,COMPARE_UNORDERED_FLAG=2;/** Used to compose bitmasks for function metadata. */var WRAP_BIND_FLAG=1,WRAP_BIND_KEY_FLAG=2,WRAP_CURRY_BOUND_FLAG=4,WRAP_CURRY_FLAG=8,WRAP_CURRY_RIGHT_FLAG=16,WRAP_PARTIAL_FLAG=32,WRAP_PARTIAL_RIGHT_FLAG=64,WRAP_ARY_FLAG=128,WRAP_REARG_FLAG=256,WRAP_FLIP_FLAG=512;/** Used as default options for `_.truncate`. */var DEFAULT_TRUNC_LENGTH=30,DEFAULT_TRUNC_OMISSION='...';/** Used to detect hot functions by number of calls within a span of milliseconds. */var HOT_COUNT=800,HOT_SPAN=16;/** Used to indicate the type of lazy iteratees. */var LAZY_FILTER_FLAG=1,LAZY_MAP_FLAG=2,LAZY_WHILE_FLAG=3;/** Used as references for various `Number` constants. */var INFINITY=1/0,MAX_SAFE_INTEGER=9007199254740991,MAX_INTEGER=1.7976931348623157e+308,NAN=0/0;/** Used as references for the maximum length and index of an array. */var MAX_ARRAY_LENGTH=4294967295,MAX_ARRAY_INDEX=MAX_ARRAY_LENGTH-1,HALF_MAX_ARRAY_LENGTH=MAX_ARRAY_LENGTH>>>1;/** Used to associate wrap methods with their bit flags. */var wrapFlags=[['ary',WRAP_ARY_FLAG],['bind',WRAP_BIND_FLAG],['bindKey',WRAP_BIND_KEY_FLAG],['curry',WRAP_CURRY_FLAG],['curryRight',WRAP_CURRY_RIGHT_FLAG],['flip',WRAP_FLIP_FLAG],['partial',WRAP_PARTIAL_FLAG],['partialRight',WRAP_PARTIAL_RIGHT_FLAG],['rearg',WRAP_REARG_FLAG]];/** `Object#toString` result references. */var argsTag='[object Arguments]',arrayTag='[object Array]',asyncTag='[object AsyncFunction]',boolTag='[object Boolean]',dateTag='[object Date]',domExcTag='[object DOMException]',errorTag='[object Error]',funcTag='[object Function]',genTag='[object GeneratorFunction]',mapTag='[object Map]',numberTag='[object Number]',nullTag='[object Null]',objectTag='[object Object]',promiseTag='[object Promise]',proxyTag='[object Proxy]',regexpTag='[object RegExp]',setTag='[object Set]',stringTag='[object String]',symbolTag='[object Symbol]',undefinedTag='[object Undefined]',weakMapTag='[object WeakMap]',weakSetTag='[object WeakSet]';var arrayBufferTag='[object ArrayBuffer]',dataViewTag='[object DataView]',float32Tag='[object Float32Array]',float64Tag='[object Float64Array]',int8Tag='[object Int8Array]',int16Tag='[object Int16Array]',int32Tag='[object Int32Array]',uint8Tag='[object Uint8Array]',uint8ClampedTag='[object Uint8ClampedArray]',uint16Tag='[object Uint16Array]',uint32Tag='[object Uint32Array]';/** Used to match empty string literals in compiled template source. */var reEmptyStringLeading=/\b__p \+= '';/g,reEmptyStringMiddle=/\b(__p \+=) '' \+/g,reEmptyStringTrailing=/(__e\(.*?\)|\b__t\)) \+\n'';/g;/** Used to match HTML entities and HTML characters. */var reEscapedHtml=/&(?:amp|lt|gt|quot|#39);/g,reUnescapedHtml=/[&<>"']/g,reHasEscapedHtml=RegExp(reEscapedHtml.source),reHasUnescapedHtml=RegExp(reUnescapedHtml.source);/** Used to match template delimiters. */var reEscape=/<%-([\s\S]+?)%>/g,reEvaluate=/<%([\s\S]+?)%>/g,reInterpolate=/<%=([\s\S]+?)%>/g;/** Used to match property names within property paths. */var reIsDeepProp=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,reIsPlainProp=/^\w*$/,rePropName=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;/** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */var reRegExpChar=/[\\^$.*+?()[\]{}|]/g,reHasRegExpChar=RegExp(reRegExpChar.source);/** Used to match leading whitespace. */var reTrimStart=/^\s+/;/** Used to match a single whitespace character. */var reWhitespace=/\s/;/** Used to match wrap detail comments. */var reWrapComment=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,reWrapDetails=/\{\n\/\* \[wrapped with (.+)\] \*/,reSplitDetails=/,? & /;/** Used to match words composed of alphanumeric characters. */var reAsciiWord=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;/** + * Used to validate the `validate` option in `_.template` variable. + * + * Forbids characters which could potentially change the meaning of the function argument definition: + * - "()," (modification of function parameters) + * - "=" (default value) + * - "[]{}" (destructuring of function parameters) + * - "/" (beginning of a comment) + * - whitespace + */var reForbiddenIdentifierChars=/[()=,{}\[\]\/\s]/;/** Used to match backslashes in property paths. */var reEscapeChar=/\\(\\)?/g;/** + * Used to match + * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components). + */var reEsTemplate=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g;/** Used to match `RegExp` flags from their coerced string values. */var reFlags=/\w*$/;/** Used to detect bad signed hexadecimal string values. */var reIsBadHex=/^[-+]0x[0-9a-f]+$/i;/** Used to detect binary string values. */var reIsBinary=/^0b[01]+$/i;/** Used to detect host constructors (Safari). */var reIsHostCtor=/^\[object .+?Constructor\]$/;/** Used to detect octal string values. */var reIsOctal=/^0o[0-7]+$/i;/** Used to detect unsigned integer values. */var reIsUint=/^(?:0|[1-9]\d*)$/;/** Used to match Latin Unicode letters (excluding mathematical operators). */var reLatin=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g;/** Used to ensure capturing order of template delimiters. */var reNoMatch=/($^)/;/** Used to match unescaped characters in compiled string literals. */var reUnescapedString=/['\n\r\u2028\u2029\\]/g;/** Used to compose unicode character classes. */var rsAstralRange='\\ud800-\\udfff',rsComboMarksRange='\\u0300-\\u036f',reComboHalfMarksRange='\\ufe20-\\ufe2f',rsComboSymbolsRange='\\u20d0-\\u20ff',rsComboRange=rsComboMarksRange+reComboHalfMarksRange+rsComboSymbolsRange,rsDingbatRange='\\u2700-\\u27bf',rsLowerRange='a-z\\xdf-\\xf6\\xf8-\\xff',rsMathOpRange='\\xac\\xb1\\xd7\\xf7',rsNonCharRange='\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf',rsPunctuationRange='\\u2000-\\u206f',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',rsUpperRange='A-Z\\xc0-\\xd6\\xd8-\\xde',rsVarRange='\\ufe0e\\ufe0f',rsBreakRange=rsMathOpRange+rsNonCharRange+rsPunctuationRange+rsSpaceRange;/** Used to compose unicode capture groups. */var rsApos="['\u2019]",rsAstral='['+rsAstralRange+']',rsBreak='['+rsBreakRange+']',rsCombo='['+rsComboRange+']',rsDigits='\\d+',rsDingbat='['+rsDingbatRange+']',rsLower='['+rsLowerRange+']',rsMisc='[^'+rsAstralRange+rsBreakRange+rsDigits+rsDingbatRange+rsLowerRange+rsUpperRange+']',rsFitz='\\ud83c[\\udffb-\\udfff]',rsModifier='(?:'+rsCombo+'|'+rsFitz+')',rsNonAstral='[^'+rsAstralRange+']',rsRegional='(?:\\ud83c[\\udde6-\\uddff]){2}',rsSurrPair='[\\ud800-\\udbff][\\udc00-\\udfff]',rsUpper='['+rsUpperRange+']',rsZWJ='\\u200d';/** Used to compose unicode regexes. */var rsMiscLower='(?:'+rsLower+'|'+rsMisc+')',rsMiscUpper='(?:'+rsUpper+'|'+rsMisc+')',rsOptContrLower='(?:'+rsApos+'(?:d|ll|m|re|s|t|ve))?',rsOptContrUpper='(?:'+rsApos+'(?:D|LL|M|RE|S|T|VE))?',reOptMod=rsModifier+'?',rsOptVar='['+rsVarRange+']?',rsOptJoin='(?:'+rsZWJ+'(?:'+[rsNonAstral,rsRegional,rsSurrPair].join('|')+')'+rsOptVar+reOptMod+')*',rsOrdLower='\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])',rsOrdUpper='\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])',rsSeq=rsOptVar+reOptMod+rsOptJoin,rsEmoji='(?:'+[rsDingbat,rsRegional,rsSurrPair].join('|')+')'+rsSeq,rsSymbol='(?:'+[rsNonAstral+rsCombo+'?',rsCombo,rsRegional,rsSurrPair,rsAstral].join('|')+')';/** Used to match apostrophes. */var reApos=RegExp(rsApos,'g');/** + * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and + * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). + */var reComboMark=RegExp(rsCombo,'g');/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */var reUnicode=RegExp(rsFitz+'(?='+rsFitz+')|'+rsSymbol+rsSeq,'g');/** Used to match complex or compound words. */var reUnicodeWord=RegExp([rsUpper+'?'+rsLower+'+'+rsOptContrLower+'(?='+[rsBreak,rsUpper,'$'].join('|')+')',rsMiscUpper+'+'+rsOptContrUpper+'(?='+[rsBreak,rsUpper+rsMiscLower,'$'].join('|')+')',rsUpper+'?'+rsMiscLower+'+'+rsOptContrLower,rsUpper+'+'+rsOptContrUpper,rsOrdUpper,rsOrdLower,rsDigits,rsEmoji].join('|'),'g');/** 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/). */var reHasUnicode=RegExp('['+rsZWJ+rsAstralRange+rsComboRange+rsVarRange+']');/** Used to detect strings that need a more robust regexp to match words. */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 ]/;/** Used to assign default `context` object properties. */var contextProps=['Array','Buffer','DataView','Date','Error','Float32Array','Float64Array','Function','Int8Array','Int16Array','Int32Array','Map','Math','Object','Promise','RegExp','Set','String','Symbol','TypeError','Uint8Array','Uint8ClampedArray','Uint16Array','Uint32Array','WeakMap','_','clearTimeout','isFinite','parseInt','setTimeout'];/** Used to make template sourceURLs easier to identify. */var templateCounter=-1;/** Used to identify `toStringTag` values of typed arrays. */var typedArrayTags={};typedArrayTags[float32Tag]=typedArrayTags[float64Tag]=typedArrayTags[int8Tag]=typedArrayTags[int16Tag]=typedArrayTags[int32Tag]=typedArrayTags[uint8Tag]=typedArrayTags[uint8ClampedTag]=typedArrayTags[uint16Tag]=typedArrayTags[uint32Tag]=true;typedArrayTags[argsTag]=typedArrayTags[arrayTag]=typedArrayTags[arrayBufferTag]=typedArrayTags[boolTag]=typedArrayTags[dataViewTag]=typedArrayTags[dateTag]=typedArrayTags[errorTag]=typedArrayTags[funcTag]=typedArrayTags[mapTag]=typedArrayTags[numberTag]=typedArrayTags[objectTag]=typedArrayTags[regexpTag]=typedArrayTags[setTag]=typedArrayTags[stringTag]=typedArrayTags[weakMapTag]=false;/** Used to identify `toStringTag` values supported by `_.clone`. */var cloneableTags={};cloneableTags[argsTag]=cloneableTags[arrayTag]=cloneableTags[arrayBufferTag]=cloneableTags[dataViewTag]=cloneableTags[boolTag]=cloneableTags[dateTag]=cloneableTags[float32Tag]=cloneableTags[float64Tag]=cloneableTags[int8Tag]=cloneableTags[int16Tag]=cloneableTags[int32Tag]=cloneableTags[mapTag]=cloneableTags[numberTag]=cloneableTags[objectTag]=cloneableTags[regexpTag]=cloneableTags[setTag]=cloneableTags[stringTag]=cloneableTags[symbolTag]=cloneableTags[uint8Tag]=cloneableTags[uint8ClampedTag]=cloneableTags[uint16Tag]=cloneableTags[uint32Tag]=true;cloneableTags[errorTag]=cloneableTags[funcTag]=cloneableTags[weakMapTag]=false;/** Used to map Latin Unicode letters to basic Latin letters. */var deburredLetters={// Latin-1 Supplement block. + '\xc0':'A','\xc1':'A','\xc2':'A','\xc3':'A','\xc4':'A','\xc5':'A','\xe0':'a','\xe1':'a','\xe2':'a','\xe3':'a','\xe4':'a','\xe5':'a','\xc7':'C','\xe7':'c','\xd0':'D','\xf0':'d','\xc8':'E','\xc9':'E','\xca':'E','\xcb':'E','\xe8':'e','\xe9':'e','\xea':'e','\xeb':'e','\xcc':'I','\xcd':'I','\xce':'I','\xcf':'I','\xec':'i','\xed':'i','\xee':'i','\xef':'i','\xd1':'N','\xf1':'n','\xd2':'O','\xd3':'O','\xd4':'O','\xd5':'O','\xd6':'O','\xd8':'O','\xf2':'o','\xf3':'o','\xf4':'o','\xf5':'o','\xf6':'o','\xf8':'o','\xd9':'U','\xda':'U','\xdb':'U','\xdc':'U','\xf9':'u','\xfa':'u','\xfb':'u','\xfc':'u','\xdd':'Y','\xfd':'y','\xff':'y','\xc6':'Ae','\xe6':'ae','\xde':'Th','\xfe':'th','\xdf':'ss',// Latin Extended-A block. + '\u0100':'A','\u0102':'A','\u0104':'A','\u0101':'a','\u0103':'a','\u0105':'a','\u0106':'C','\u0108':'C','\u010a':'C','\u010c':'C','\u0107':'c','\u0109':'c','\u010b':'c','\u010d':'c','\u010e':'D','\u0110':'D','\u010f':'d','\u0111':'d','\u0112':'E','\u0114':'E','\u0116':'E','\u0118':'E','\u011a':'E','\u0113':'e','\u0115':'e','\u0117':'e','\u0119':'e','\u011b':'e','\u011c':'G','\u011e':'G','\u0120':'G','\u0122':'G','\u011d':'g','\u011f':'g','\u0121':'g','\u0123':'g','\u0124':'H','\u0126':'H','\u0125':'h','\u0127':'h','\u0128':'I','\u012a':'I','\u012c':'I','\u012e':'I','\u0130':'I','\u0129':'i','\u012b':'i','\u012d':'i','\u012f':'i','\u0131':'i','\u0134':'J','\u0135':'j','\u0136':'K','\u0137':'k','\u0138':'k','\u0139':'L','\u013b':'L','\u013d':'L','\u013f':'L','\u0141':'L','\u013a':'l','\u013c':'l','\u013e':'l','\u0140':'l','\u0142':'l','\u0143':'N','\u0145':'N','\u0147':'N','\u014a':'N','\u0144':'n','\u0146':'n','\u0148':'n','\u014b':'n','\u014c':'O','\u014e':'O','\u0150':'O','\u014d':'o','\u014f':'o','\u0151':'o','\u0154':'R','\u0156':'R','\u0158':'R','\u0155':'r','\u0157':'r','\u0159':'r','\u015a':'S','\u015c':'S','\u015e':'S','\u0160':'S','\u015b':'s','\u015d':'s','\u015f':'s','\u0161':'s','\u0162':'T','\u0164':'T','\u0166':'T','\u0163':'t','\u0165':'t','\u0167':'t','\u0168':'U','\u016a':'U','\u016c':'U','\u016e':'U','\u0170':'U','\u0172':'U','\u0169':'u','\u016b':'u','\u016d':'u','\u016f':'u','\u0171':'u','\u0173':'u','\u0174':'W','\u0175':'w','\u0176':'Y','\u0177':'y','\u0178':'Y','\u0179':'Z','\u017b':'Z','\u017d':'Z','\u017a':'z','\u017c':'z','\u017e':'z','\u0132':'IJ','\u0133':'ij','\u0152':'Oe','\u0153':'oe','\u0149':"'n",'\u017f':'s'};/** Used to map characters to HTML entities. */var htmlEscapes={'&':'&','<':'<','>':'>','"':'"',"'":'''};/** Used to map HTML entities to characters. */var htmlUnescapes={'&':'&','<':'<','>':'>','"':'"',''':"'"};/** Used to escape characters for inclusion in compiled string literals. */var stringEscapes={'\\':'\\',"'":"'",'\n':'n','\r':'r','\u2028':'u2028','\u2029':'u2029'};/** Built-in method references without a dependency on `root`. */var freeParseFloat=parseFloat,freeParseInt=parseInt;/** Detect free variable `global` from Node.js. */var freeGlobal=typeof commonjsGlobal=='object'&&commonjsGlobal&&commonjsGlobal.Object===Object&&commonjsGlobal;/** Detect free variable `self`. */var freeSelf=typeof self=='object'&&self&&self.Object===Object&&self;/** Used as a reference to the global object. */var root=freeGlobal||freeSelf||Function('return this')();/** Detect free variable `exports`. */var freeExports=exports&&!exports.nodeType&&exports;/** Detect free variable `module`. */var freeModule=freeExports&&'object'=='object'&&module&&!module.nodeType&&module;/** Detect the popular CommonJS extension `module.exports`. */var moduleExports=freeModule&&freeModule.exports===freeExports;/** Detect free variable `process` from Node.js. */var freeProcess=moduleExports&&freeGlobal.process;/** Used to access faster Node.js helpers. */var nodeUtil=function(){try{// Use `util.types` for Node.js 10+. + var types=freeModule&&freeModule.require&&freeModule.require('util').types;if(types){return types;}// Legacy `process.binding('util')` for Node.js < 10. + return freeProcess&&freeProcess.binding&&freeProcess.binding('util');}catch(e){}}();/* Node.js helper references. */var nodeIsArrayBuffer=nodeUtil&&nodeUtil.isArrayBuffer,nodeIsDate=nodeUtil&&nodeUtil.isDate,nodeIsMap=nodeUtil&&nodeUtil.isMap,nodeIsRegExp=nodeUtil&&nodeUtil.isRegExp,nodeIsSet=nodeUtil&&nodeUtil.isSet,nodeIsTypedArray=nodeUtil&&nodeUtil.isTypedArray;/*--------------------------------------------------------------------------*/ /** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */function apply(func,thisArg,args){switch(args.length){case 0:return func.call(thisArg);case 1:return func.call(thisArg,args[0]);case 2:return func.call(thisArg,args[0],args[1]);case 3:return func.call(thisArg,args[0],args[1],args[2]);}return func.apply(thisArg,args);}/** + * A specialized version of `baseAggregator` for arrays. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */function arrayAggregator(array,setter,iteratee,accumulator){var index=-1,length=array==null?0:array.length;while(++index-1;}/** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */function arrayIncludesWith(array,value,comparator){var index=-1,length=array==null?0:array.length;while(++index-1){}return index;}/** + * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol + * that is not found in the character symbols. + * + * @private + * @param {Array} strSymbols The string symbols to inspect. + * @param {Array} chrSymbols The character symbols to find. + * @returns {number} Returns the index of the last unmatched string symbol. + */function charsEndIndex(strSymbols,chrSymbols){var index=strSymbols.length;while(index--&&baseIndexOf(chrSymbols,strSymbols[index],0)>-1){}return index;}/** + * Gets the number of `placeholder` occurrences in `array`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} placeholder The placeholder to search for. + * @returns {number} Returns the placeholder count. + */function countHolders(array,placeholder){var length=array.length,result=0;while(length--){if(array[length]===placeholder){++result;}}return result;}/** + * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A + * letters to basic Latin letters. + * + * @private + * @param {string} letter The matched letter to deburr. + * @returns {string} Returns the deburred letter. + */var deburrLetter=basePropertyOf(deburredLetters);/** + * Used by `_.escape` to convert characters to HTML entities. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */var escapeHtmlChar=basePropertyOf(htmlEscapes);/** + * Used by `_.template` to escape characters for inclusion in compiled string literals. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */function escapeStringChar(chr){return '\\'+stringEscapes[chr];}/** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */function getValue(object,key){return object==null?undefined$1:object[key];}/** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */function hasUnicode(string){return reHasUnicode.test(string);}/** + * Checks if `string` contains a word composed of Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a word is found, else `false`. + */function hasUnicodeWord(string){return reHasUnicodeWord.test(string);}/** + * Converts `iterator` to an array. + * + * @private + * @param {Object} iterator The iterator to convert. + * @returns {Array} Returns the converted array. + */function iteratorToArray(iterator){var data,result=[];while(!(data=iterator.next()).done){result.push(data.value);}return result;}/** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */function mapToArray(map){var index=-1,result=Array(map.size);map.forEach(function(value,key){result[++index]=[key,value];});return result;}/** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */function overArg(func,transform){return function(arg){return func(transform(arg));};}/** + * Replaces all `placeholder` elements in `array` with an internal placeholder + * and returns an array of their indexes. + * + * @private + * @param {Array} array The array to modify. + * @param {*} placeholder The placeholder to replace. + * @returns {Array} Returns the new array of placeholder indexes. + */function replaceHolders(array,placeholder){var index=-1,length=array.length,resIndex=0,result=[];while(++index true + * _.isFunction(_.bar); + * // => false + * + * lodash.isFunction(lodash.foo); + * // => false + * lodash.isFunction(lodash.bar); + * // => true + * + * // Create a suped-up `defer` in Node.js. + * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer; + */var runInContext=function runInContext(context){context=context==null?root:_.defaults(root.Object(),context,_.pick(root,contextProps));/** Built-in constructor references. */var Array=context.Array,Date=context.Date,Error=context.Error,Function=context.Function,Math=context.Math,Object=context.Object,RegExp=context.RegExp,String=context.String,TypeError=context.TypeError;/** Used for built-in method references. */var arrayProto=Array.prototype,funcProto=Function.prototype,objectProto=Object.prototype;/** Used to detect overreaching core-js shims. */var coreJsData=context['__core-js_shared__'];/** Used to resolve the decompiled source of functions. */var funcToString=funcProto.toString;/** Used to check objects for own properties. */var hasOwnProperty=objectProto.hasOwnProperty;/** Used to generate unique IDs. */var idCounter=0;/** Used to detect methods masquerading as native. */var maskSrcKey=function(){var uid=/[^.]+$/.exec(coreJsData&&coreJsData.keys&&coreJsData.keys.IE_PROTO||'');return uid?'Symbol(src)_1.'+uid:'';}();/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */var nativeObjectToString=objectProto.toString;/** Used to infer the `Object` constructor. */var objectCtorString=funcToString.call(Object);/** Used to restore the original `_` reference in `_.noConflict`. */var oldDash=root._;/** Used to detect if a method is native. */var reIsNative=RegExp('^'+funcToString.call(hasOwnProperty).replace(reRegExpChar,'\\$&').replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,'$1.*?')+'$');/** Built-in value references. */var Buffer=moduleExports?context.Buffer:undefined$1,Symbol=context.Symbol,Uint8Array=context.Uint8Array,allocUnsafe=Buffer?Buffer.allocUnsafe:undefined$1,getPrototype=overArg(Object.getPrototypeOf,Object),objectCreate=Object.create,propertyIsEnumerable=objectProto.propertyIsEnumerable,splice=arrayProto.splice,spreadableSymbol=Symbol?Symbol.isConcatSpreadable:undefined$1,symIterator=Symbol?Symbol.iterator:undefined$1,symToStringTag=Symbol?Symbol.toStringTag:undefined$1;var defineProperty=function(){try{var func=getNative(Object,'defineProperty');func({},'',{});return func;}catch(e){}}();/** Mocked built-ins. */var ctxClearTimeout=context.clearTimeout!==root.clearTimeout&&context.clearTimeout,ctxNow=Date&&Date.now!==root.Date.now&&Date.now,ctxSetTimeout=context.setTimeout!==root.setTimeout&&context.setTimeout;/* Built-in method references for those with the same name as other `lodash` methods. */var nativeCeil=Math.ceil,nativeFloor=Math.floor,nativeGetSymbols=Object.getOwnPropertySymbols,nativeIsBuffer=Buffer?Buffer.isBuffer:undefined$1,nativeIsFinite=context.isFinite,nativeJoin=arrayProto.join,nativeKeys=overArg(Object.keys,Object),nativeMax=Math.max,nativeMin=Math.min,nativeNow=Date.now,nativeParseInt=context.parseInt,nativeRandom=Math.random,nativeReverse=arrayProto.reverse;/* Built-in method references that are verified to be native. */var DataView=getNative(context,'DataView'),Map=getNative(context,'Map'),Promise=getNative(context,'Promise'),Set=getNative(context,'Set'),WeakMap=getNative(context,'WeakMap'),nativeCreate=getNative(Object,'create');/** Used to store function metadata. */var metaMap=WeakMap&&new WeakMap();/** Used to lookup unminified function names. */var realNames={};/** Used to detect maps, sets, and weakmaps. */var dataViewCtorString=toSource(DataView),mapCtorString=toSource(Map),promiseCtorString=toSource(Promise),setCtorString=toSource(Set),weakMapCtorString=toSource(WeakMap);/** Used to convert symbols to primitives and strings. */var symbolProto=Symbol?Symbol.prototype:undefined$1,symbolValueOf=symbolProto?symbolProto.valueOf:undefined$1,symbolToString=symbolProto?symbolProto.toString:undefined$1;/*------------------------------------------------------------------------*/ /** + * Creates a `lodash` object which wraps `value` to enable implicit method + * chain sequences. Methods that operate on and return arrays, collections, + * and functions can be chained together. Methods that retrieve a single value + * or may return a primitive value will automatically end the chain sequence + * and return the unwrapped value. Otherwise, the value must be unwrapped + * with `_#value`. + * + * Explicit chain sequences, which must be unwrapped with `_#value`, may be + * enabled using `_.chain`. + * + * The execution of chained methods is lazy, that is, it's deferred until + * `_#value` is implicitly or explicitly called. + * + * Lazy evaluation allows several methods to support shortcut fusion. + * Shortcut fusion is an optimization to merge iteratee calls; this avoids + * the creation of intermediate arrays and can greatly reduce the number of + * iteratee executions. Sections of a chain sequence qualify for shortcut + * fusion if the section is applied to an array and iteratees accept only + * one argument. The heuristic for whether a section qualifies for shortcut + * fusion is subject to change. + * + * Chaining is supported in custom builds as long as the `_#value` method is + * directly or indirectly included in the build. + * + * In addition to lodash methods, wrappers have `Array` and `String` methods. + * + * The wrapper `Array` methods are: + * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` + * + * The wrapper `String` methods are: + * `replace` and `split` + * + * The wrapper methods that support shortcut fusion are: + * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, + * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, + * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` + * + * The chainable wrapper methods are: + * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, + * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, + * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, + * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, + * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, + * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, + * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, + * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, + * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, + * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, + * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, + * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, + * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, + * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, + * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, + * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, + * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, + * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, + * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, + * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, + * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, + * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, + * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, + * `zipObject`, `zipObjectDeep`, and `zipWith` + * + * The wrapper methods that are **not** chainable by default are: + * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, + * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, + * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, + * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, + * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, + * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, + * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, + * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, + * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, + * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, + * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, + * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, + * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, + * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, + * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, + * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, + * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, + * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, + * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, + * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, + * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, + * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, + * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, + * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, + * `upperFirst`, `value`, and `words` + * + * @name _ + * @constructor + * @category Seq + * @param {*} value The value to wrap in a `lodash` instance. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var wrapped = _([1, 2, 3]); + * + * // Returns an unwrapped value. + * wrapped.reduce(_.add); + * // => 6 + * + * // Returns a wrapped value. + * var squares = wrapped.map(square); + * + * _.isArray(squares); + * // => false + * + * _.isArray(squares.value()); + * // => true + */function lodash(value){if(isObjectLike(value)&&!isArray(value)&&!(value instanceof LazyWrapper)){if(value instanceof LodashWrapper){return value;}if(hasOwnProperty.call(value,'__wrapped__')){return wrapperClone(value);}}return new LodashWrapper(value);}/** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} proto The object to inherit from. + * @returns {Object} Returns the new object. + */var baseCreate=function(){function object(){}return function(proto){if(!isObject(proto)){return {};}if(objectCreate){return objectCreate(proto);}object.prototype=proto;var result=new object();object.prototype=undefined$1;return result;};}();/** + * The function whose prototype chain sequence wrappers inherit from. + * + * @private + */function baseLodash(){// No operation performed. + }/** + * The base constructor for creating `lodash` wrapper objects. + * + * @private + * @param {*} value The value to wrap. + * @param {boolean} [chainAll] Enable explicit method chain sequences. + */function LodashWrapper(value,chainAll){this.__wrapped__=value;this.__actions__=[];this.__chain__=!!chainAll;this.__index__=0;this.__values__=undefined$1;}/** + * By default, the template delimiters used by lodash are like those in + * embedded Ruby (ERB) as well as ES2015 template strings. Change the + * following template settings to use alternative delimiters. + * + * @static + * @memberOf _ + * @type {Object} + */lodash.templateSettings={/** + * Used to detect `data` property values to be HTML-escaped. + * + * @memberOf _.templateSettings + * @type {RegExp} + */'escape':reEscape,/** + * Used to detect code to be evaluated. + * + * @memberOf _.templateSettings + * @type {RegExp} + */'evaluate':reEvaluate,/** + * Used to detect `data` property values to inject. + * + * @memberOf _.templateSettings + * @type {RegExp} + */'interpolate':reInterpolate,/** + * Used to reference the data object in the template text. + * + * @memberOf _.templateSettings + * @type {string} + */'variable':'',/** + * Used to import variables into the compiled template. + * + * @memberOf _.templateSettings + * @type {Object} + */'imports':{/** + * A reference to the `lodash` function. + * + * @memberOf _.templateSettings.imports + * @type {Function} + */'_':lodash}};// Ensure wrappers are instances of `baseLodash`. + lodash.prototype=baseLodash.prototype;lodash.prototype.constructor=lodash;LodashWrapper.prototype=baseCreate(baseLodash.prototype);LodashWrapper.prototype.constructor=LodashWrapper;/*------------------------------------------------------------------------*/ /** + * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. + * + * @private + * @constructor + * @param {*} value The value to wrap. + */function LazyWrapper(value){this.__wrapped__=value;this.__actions__=[];this.__dir__=1;this.__filtered__=false;this.__iteratees__=[];this.__takeCount__=MAX_ARRAY_LENGTH;this.__views__=[];}/** + * Creates a clone of the lazy wrapper object. + * + * @private + * @name clone + * @memberOf LazyWrapper + * @returns {Object} Returns the cloned `LazyWrapper` object. + */function lazyClone(){var result=new LazyWrapper(this.__wrapped__);result.__actions__=copyArray(this.__actions__);result.__dir__=this.__dir__;result.__filtered__=this.__filtered__;result.__iteratees__=copyArray(this.__iteratees__);result.__takeCount__=this.__takeCount__;result.__views__=copyArray(this.__views__);return result;}/** + * Reverses the direction of lazy iteration. + * + * @private + * @name reverse + * @memberOf LazyWrapper + * @returns {Object} Returns the new reversed `LazyWrapper` object. + */function lazyReverse(){if(this.__filtered__){var result=new LazyWrapper(this);result.__dir__=-1;result.__filtered__=true;}else {result=this.clone();result.__dir__*=-1;}return result;}/** + * Extracts the unwrapped value from its lazy wrapper. + * + * @private + * @name value + * @memberOf LazyWrapper + * @returns {*} Returns the unwrapped value. + */function lazyValue(){var array=this.__wrapped__.value(),dir=this.__dir__,isArr=isArray(array),isRight=dir<0,arrLength=isArr?array.length:0,view=getView(0,arrLength,this.__views__),start=view.start,end=view.end,length=end-start,index=isRight?end:start-1,iteratees=this.__iteratees__,iterLength=iteratees.length,resIndex=0,takeCount=nativeMin(length,this.__takeCount__);if(!isArr||!isRight&&arrLength==length&&takeCount==length){return baseWrapperValue(array,this.__actions__);}var result=[];outer:while(length--&&resIndex-1;}/** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */function listCacheSet(key,value){var data=this.__data__,index=assocIndexOf(data,key);if(index<0){++this.size;data.push([key,value]);}else {data[index][1]=value;}return this;}// Add methods to `ListCache`. + ListCache.prototype.clear=listCacheClear;ListCache.prototype['delete']=listCacheDelete;ListCache.prototype.get=listCacheGet;ListCache.prototype.has=listCacheHas;ListCache.prototype.set=listCacheSet;/*------------------------------------------------------------------------*/ /** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */function MapCache(entries){var index=-1,length=entries==null?0:entries.length;this.clear();while(++index=lower?number:lower;}}return number;}/** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} bitmask The bitmask flags. + * 1 - Deep clone + * 2 - Flatten inherited properties + * 4 - Clone symbols + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */function baseClone(value,bitmask,customizer,key,object,stack){var result,isDeep=bitmask&CLONE_DEEP_FLAG,isFlat=bitmask&CLONE_FLAT_FLAG,isFull=bitmask&CLONE_SYMBOLS_FLAG;if(customizer){result=object?customizer(value,key,object,stack):customizer(value);}if(result!==undefined$1){return result;}if(!isObject(value)){return value;}var isArr=isArray(value);if(isArr){result=initCloneArray(value);if(!isDeep){return copyArray(value,result);}}else {var tag=getTag(value),isFunc=tag==funcTag||tag==genTag;if(isBuffer(value)){return cloneBuffer(value,isDeep);}if(tag==objectTag||tag==argsTag||isFunc&&!object){result=isFlat||isFunc?{}:initCloneObject(value);if(!isDeep){return isFlat?copySymbolsIn(value,baseAssignIn(result,value)):copySymbols(value,baseAssign(result,value));}}else {if(!cloneableTags[tag]){return object?value:{};}result=initCloneByTag(value,tag,isDeep);}}// Check for circular references and return its corresponding clone. + stack||(stack=new Stack());var stacked=stack.get(value);if(stacked){return stacked;}stack.set(value,result);if(isSet(value)){value.forEach(function(subValue){result.add(baseClone(subValue,bitmask,customizer,subValue,value,stack));});}else if(isMap(value)){value.forEach(function(subValue,key){result.set(key,baseClone(subValue,bitmask,customizer,key,value,stack));});}var keysFunc=isFull?isFlat?getAllKeysIn:getAllKeys:isFlat?keysIn:keys;var props=isArr?undefined$1:keysFunc(value);arrayEach(props||value,function(subValue,key){if(props){key=subValue;subValue=value[key];}// Recursively populate clone (susceptible to call stack limits). + assignValue(result,key,baseClone(subValue,bitmask,customizer,key,value,stack));});return result;}/** + * The base implementation of `_.conforms` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property predicates to conform to. + * @returns {Function} Returns the new spec function. + */function baseConforms(source){var props=keys(source);return function(object){return baseConformsTo(object,source,props);};}/** + * The base implementation of `_.conformsTo` which accepts `props` to check. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property predicates to conform to. + * @returns {boolean} Returns `true` if `object` conforms, else `false`. + */function baseConformsTo(object,source,props){var length=props.length;if(object==null){return !length;}object=Object(object);while(length--){var key=props[length],predicate=source[key],value=object[key];if(value===undefined$1&&!(key in object)||!predicate(value)){return false;}}return true;}/** + * The base implementation of `_.delay` and `_.defer` which accepts `args` + * to provide to `func`. + * + * @private + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {Array} args The arguments to provide to `func`. + * @returns {number|Object} Returns the timer id or timeout object. + */function baseDelay(func,wait,args){if(typeof func!='function'){throw new TypeError(FUNC_ERROR_TEXT);}return setTimeout(function(){func.apply(undefined$1,args);},wait);}/** + * The base implementation of methods like `_.difference` without support + * for excluding multiple arrays or iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Array} values The values to exclude. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + */function baseDifference(array,values,iteratee,comparator){var index=-1,includes=arrayIncludes,isCommon=true,length=array.length,result=[],valuesLength=values.length;if(!length){return result;}if(iteratee){values=arrayMap(values,baseUnary(iteratee));}if(comparator){includes=arrayIncludesWith;isCommon=false;}else if(values.length>=LARGE_ARRAY_SIZE){includes=cacheHas;isCommon=false;values=new SetCache(values);}outer:while(++indexlength?0:length+start;}end=end===undefined$1||end>length?length:toInteger(end);if(end<0){end+=length;}end=start>end?0:toLength(end);while(start0&&predicate(value)){if(depth>1){// Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value,depth-1,predicate,isStrict,result);}else {arrayPush(result,value);}}else if(!isStrict){result[result.length]=value;}}return result;}/** + * The base implementation of `baseForOwn` which iterates over `object` + * properties returned by `keysFunc` and invokes `iteratee` for each property. + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */var baseFor=createBaseFor();/** + * This function is like `baseFor` except that it iterates over properties + * in the opposite order. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */var baseForRight=createBaseFor(true);/** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */function baseForOwn(object,iteratee){return object&&baseFor(object,iteratee,keys);}/** + * The base implementation of `_.forOwnRight` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */function baseForOwnRight(object,iteratee){return object&&baseForRight(object,iteratee,keys);}/** + * The base implementation of `_.functions` which creates an array of + * `object` function property names filtered from `props`. + * + * @private + * @param {Object} object The object to inspect. + * @param {Array} props The property names to filter. + * @returns {Array} Returns the function names. + */function baseFunctions(object,props){return arrayFilter(props,function(key){return isFunction(object[key]);});}/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */function baseGet(object,path){path=castPath(path,object);var index=0,length=path.length;while(object!=null&&indexother;}/** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */function baseHas(object,key){return object!=null&&hasOwnProperty.call(object,key);}/** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */function baseHasIn(object,key){return object!=null&&key in Object(object);}/** + * The base implementation of `_.inRange` which doesn't coerce arguments. + * + * @private + * @param {number} number The number to check. + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @returns {boolean} Returns `true` if `number` is in the range, else `false`. + */function baseInRange(number,start,end){return number>=nativeMin(start,end)&&number=120&&array.length>=120)?new SetCache(othIndex&&array):undefined$1;}array=arrays[0];var index=-1,seen=caches[0];outer:while(++index-1){if(seen!==array){splice.call(seen,fromIndex,1);}splice.call(array,fromIndex,1);}}return array;}/** + * The base implementation of `_.pullAt` without support for individual + * indexes or capturing the removed elements. + * + * @private + * @param {Array} array The array to modify. + * @param {number[]} indexes The indexes of elements to remove. + * @returns {Array} Returns `array`. + */function basePullAt(array,indexes){var length=array?indexes.length:0,lastIndex=length-1;while(length--){var index=indexes[length];if(length==lastIndex||index!==previous){var previous=index;if(isIndex(index)){splice.call(array,index,1);}else {baseUnset(array,index);}}}return array;}/** + * The base implementation of `_.random` without support for returning + * floating-point numbers. + * + * @private + * @param {number} lower The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the random number. + */function baseRandom(lower,upper){return lower+nativeFloor(nativeRandom()*(upper-lower+1));}/** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */function baseRange(start,end,step,fromRight){var index=-1,length=nativeMax(nativeCeil((end-start)/(step||1)),0),result=Array(length);while(length--){result[fromRight?length:++index]=start;start+=step;}return result;}/** + * The base implementation of `_.repeat` which doesn't coerce arguments. + * + * @private + * @param {string} string The string to repeat. + * @param {number} n The number of times to repeat the string. + * @returns {string} Returns the repeated string. + */function baseRepeat(string,n){var result='';if(!string||n<1||n>MAX_SAFE_INTEGER){return result;}// Leverage the exponentiation by squaring algorithm for a faster repeat. + // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. + do{if(n%2){result+=string;}n=nativeFloor(n/2);if(n){string+=string;}}while(n);return result;}/** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */function baseRest(func,start){return setToString(overRest(func,start,identity),func+'');}/** + * The base implementation of `_.sample`. + * + * @private + * @param {Array|Object} collection The collection to sample. + * @returns {*} Returns the random element. + */function baseSample(collection){return arraySample(values(collection));}/** + * The base implementation of `_.sampleSize` without param guards. + * + * @private + * @param {Array|Object} collection The collection to sample. + * @param {number} n The number of elements to sample. + * @returns {Array} Returns the random elements. + */function baseSampleSize(collection,n){var array=values(collection);return shuffleSelf(array,baseClamp(n,0,array.length));}/** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */function baseSet(object,path,value,customizer){if(!isObject(object)){return object;}path=castPath(path,object);var index=-1,length=path.length,lastIndex=length-1,nested=object;while(nested!=null&&++indexlength?0:length+start;}end=end>length?length:end;if(end<0){end+=length;}length=start>end?0:end-start>>>0;start>>>=0;var result=Array(length);while(++index>>1,computed=array[mid];if(computed!==null&&!isSymbol(computed)&&(retHighest?computed<=value:computed=LARGE_ARRAY_SIZE){var set=iteratee?null:createSet(array);if(set){return setToArray(set);}isCommon=false;includes=cacheHas;seen=new SetCache();}else {seen=iteratee?[]:result;}outer:while(++index=length?array:baseSlice(array,start,end);}/** + * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout). + * + * @private + * @param {number|Object} id The timer id or timeout object of the timer to clear. + */var clearTimeout=ctxClearTimeout||function(id){return root.clearTimeout(id);};/** + * Creates a clone of `buffer`. + * + * @private + * @param {Buffer} buffer The buffer to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Buffer} Returns the cloned buffer. + */function cloneBuffer(buffer,isDeep){if(isDeep){return buffer.slice();}var length=buffer.length,result=allocUnsafe?allocUnsafe(length):new buffer.constructor(length);buffer.copy(result);return result;}/** + * Creates a clone of `arrayBuffer`. + * + * @private + * @param {ArrayBuffer} arrayBuffer The array buffer to clone. + * @returns {ArrayBuffer} Returns the cloned array buffer. + */function cloneArrayBuffer(arrayBuffer){var result=new arrayBuffer.constructor(arrayBuffer.byteLength);new Uint8Array(result).set(new Uint8Array(arrayBuffer));return result;}/** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */function cloneDataView(dataView,isDeep){var buffer=isDeep?cloneArrayBuffer(dataView.buffer):dataView.buffer;return new dataView.constructor(buffer,dataView.byteOffset,dataView.byteLength);}/** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */function cloneRegExp(regexp){var result=new regexp.constructor(regexp.source,reFlags.exec(regexp));result.lastIndex=regexp.lastIndex;return result;}/** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */function cloneSymbol(symbol){return symbolValueOf?Object(symbolValueOf.call(symbol)):{};}/** + * Creates a clone of `typedArray`. + * + * @private + * @param {Object} typedArray The typed array to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned typed array. + */function cloneTypedArray(typedArray,isDeep){var buffer=isDeep?cloneArrayBuffer(typedArray.buffer):typedArray.buffer;return new typedArray.constructor(buffer,typedArray.byteOffset,typedArray.length);}/** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */function compareAscending(value,other){if(value!==other){var valIsDefined=value!==undefined$1,valIsNull=value===null,valIsReflexive=value===value,valIsSymbol=isSymbol(value);var othIsDefined=other!==undefined$1,othIsNull=other===null,othIsReflexive=other===other,othIsSymbol=isSymbol(other);if(!othIsNull&&!othIsSymbol&&!valIsSymbol&&value>other||valIsSymbol&&othIsDefined&&othIsReflexive&&!othIsNull&&!othIsSymbol||valIsNull&&othIsDefined&&othIsReflexive||!valIsDefined&&othIsReflexive||!valIsReflexive){return 1;}if(!valIsNull&&!valIsSymbol&&!othIsSymbol&&value=ordersLength){return result;}var order=orders[index];return result*(order=='desc'?-1:1);}}// Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. + return object.index-other.index;}/** + * Creates an array that is the composition of partially applied arguments, + * placeholders, and provided arguments into a single array of arguments. + * + * @private + * @param {Array} args The provided arguments. + * @param {Array} partials The arguments to prepend to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @params {boolean} [isCurried] Specify composing for a curried function. + * @returns {Array} Returns the new array of composed arguments. + */function composeArgs(args,partials,holders,isCurried){var argsIndex=-1,argsLength=args.length,holdersLength=holders.length,leftIndex=-1,leftLength=partials.length,rangeLength=nativeMax(argsLength-holdersLength,0),result=Array(leftLength+rangeLength),isUncurried=!isCurried;while(++leftIndex1?sources[length-1]:undefined$1,guard=length>2?sources[2]:undefined$1;customizer=assigner.length>3&&typeof customizer=='function'?(length--,customizer):undefined$1;if(guard&&isIterateeCall(sources[0],sources[1],guard)){customizer=length<3?undefined$1:customizer;length=1;}object=Object(object);while(++index-1?iterable[iteratee?collection[index]:index]:undefined$1;};}/** + * Creates a `_.flow` or `_.flowRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new flow function. + */function createFlow(fromRight){return flatRest(function(funcs){var length=funcs.length,index=length,prereq=LodashWrapper.prototype.thru;if(fromRight){funcs.reverse();}while(index--){var func=funcs[index];if(typeof func!='function'){throw new TypeError(FUNC_ERROR_TEXT);}if(prereq&&!wrapper&&getFuncName(func)=='wrapper'){var wrapper=new LodashWrapper([],true);}}index=wrapper?index:length;while(++index1){args.reverse();}if(isAry&&aryarrLength)){return false;}// Check that cyclic values are equal. + var arrStacked=stack.get(array);var othStacked=stack.get(other);if(arrStacked&&othStacked){return arrStacked==other&&othStacked==array;}var index=-1,result=true,seen=bitmask&COMPARE_UNORDERED_FLAG?new SetCache():undefined$1;stack.set(array,other);stack.set(other,array);// Ignore non-index properties. + while(++index1?'& ':'')+details[lastIndex];details=details.join(length>2?', ':' ');return source.replace(reWrapComment,'{\n/* [wrapped with '+details+'] */\n');}/** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */function isFlattenable(value){return isArray(value)||isArguments(value)||!!(spreadableSymbol&&value&&value[spreadableSymbol]);}/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */function isIndex(value,length){var type=typeof value;length=length==null?MAX_SAFE_INTEGER:length;return !!length&&(type=='number'||type!='symbol'&&reIsUint.test(value))&&value>-1&&value%1==0&&value0){if(++count>=HOT_COUNT){return arguments[0];}}else {count=0;}return func.apply(undefined$1,arguments);};}/** + * A specialized version of `_.shuffle` which mutates and sets the size of `array`. + * + * @private + * @param {Array} array The array to shuffle. + * @param {number} [size=array.length] The size of `array`. + * @returns {Array} Returns `array`. + */function shuffleSelf(array,size){var index=-1,length=array.length,lastIndex=length-1;size=size===undefined$1?length:size;while(++index [['a', 'b'], ['c', 'd']] + * + * _.chunk(['a', 'b', 'c', 'd'], 3); + * // => [['a', 'b', 'c'], ['d']] + */function chunk(array,size,guard){if(guard?isIterateeCall(array,size,guard):size===undefined$1){size=1;}else {size=nativeMax(toInteger(size),0);}var length=array==null?0:array.length;if(!length||size<1){return [];}var index=0,resIndex=0,result=Array(nativeCeil(length/size));while(index [1, 2, 3] + */function compact(array){var index=-1,length=array==null?0:array.length,resIndex=0,result=[];while(++index [1, 2, 3, [4]] + * + * console.log(array); + * // => [1] + */function concat(){var length=arguments.length;if(!length){return [];}var args=Array(length-1),array=arguments[0],index=length;while(index--){args[index-1]=arguments[index];}return arrayPush(isArray(array)?copyArray(array):[array],baseFlatten(args,1));}/** + * Creates an array of `array` values not included in the other given arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. The order and references of result values are + * determined by the first array. + * + * **Note:** Unlike `_.pullAll`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @see _.without, _.xor + * @example + * + * _.difference([2, 1], [2, 3]); + * // => [1] + */var difference=baseRest(function(array,values){return isArrayLikeObject(array)?baseDifference(array,baseFlatten(values,1,isArrayLikeObject,true)):[];});/** + * This method is like `_.difference` except that it accepts `iteratee` which + * is invoked for each element of `array` and `values` to generate the criterion + * by which they're compared. The order and references of result values are + * determined by the first array. The iteratee is invoked with one argument: + * (value). + * + * **Note:** Unlike `_.pullAllBy`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [1.2] + * + * // The `_.property` iteratee shorthand. + * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'); + * // => [{ 'x': 2 }] + */var differenceBy=baseRest(function(array,values){var iteratee=last(values);if(isArrayLikeObject(iteratee)){iteratee=undefined$1;}return isArrayLikeObject(array)?baseDifference(array,baseFlatten(values,1,isArrayLikeObject,true),getIteratee(iteratee,2)):[];});/** + * This method is like `_.difference` except that it accepts `comparator` + * which is invoked to compare elements of `array` to `values`. The order and + * references of result values are determined by the first array. The comparator + * is invoked with two arguments: (arrVal, othVal). + * + * **Note:** Unlike `_.pullAllWith`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * + * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual); + * // => [{ 'x': 2, 'y': 1 }] + */var differenceWith=baseRest(function(array,values){var comparator=last(values);if(isArrayLikeObject(comparator)){comparator=undefined$1;}return isArrayLikeObject(array)?baseDifference(array,baseFlatten(values,1,isArrayLikeObject,true),undefined$1,comparator):[];});/** + * Creates a slice of `array` with `n` elements dropped from the beginning. + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.drop([1, 2, 3]); + * // => [2, 3] + * + * _.drop([1, 2, 3], 2); + * // => [3] + * + * _.drop([1, 2, 3], 5); + * // => [] + * + * _.drop([1, 2, 3], 0); + * // => [1, 2, 3] + */function drop(array,n,guard){var length=array==null?0:array.length;if(!length){return [];}n=guard||n===undefined$1?1:toInteger(n);return baseSlice(array,n<0?0:n,length);}/** + * Creates a slice of `array` with `n` elements dropped from the end. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.dropRight([1, 2, 3]); + * // => [1, 2] + * + * _.dropRight([1, 2, 3], 2); + * // => [1] + * + * _.dropRight([1, 2, 3], 5); + * // => [] + * + * _.dropRight([1, 2, 3], 0); + * // => [1, 2, 3] + */function dropRight(array,n,guard){var length=array==null?0:array.length;if(!length){return [];}n=guard||n===undefined$1?1:toInteger(n);n=length-n;return baseSlice(array,0,n<0?0:n);}/** + * Creates a slice of `array` excluding elements dropped from the end. + * Elements are dropped until `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.dropRightWhile(users, function(o) { return !o.active; }); + * // => objects for ['barney'] + * + * // The `_.matches` iteratee shorthand. + * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false }); + * // => objects for ['barney', 'fred'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.dropRightWhile(users, ['active', false]); + * // => objects for ['barney'] + * + * // The `_.property` iteratee shorthand. + * _.dropRightWhile(users, 'active'); + * // => objects for ['barney', 'fred', 'pebbles'] + */function dropRightWhile(array,predicate){return array&&array.length?baseWhile(array,getIteratee(predicate,3),true,true):[];}/** + * Creates a slice of `array` excluding elements dropped from the beginning. + * Elements are dropped until `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.dropWhile(users, function(o) { return !o.active; }); + * // => objects for ['pebbles'] + * + * // The `_.matches` iteratee shorthand. + * _.dropWhile(users, { 'user': 'barney', 'active': false }); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.dropWhile(users, ['active', false]); + * // => objects for ['pebbles'] + * + * // The `_.property` iteratee shorthand. + * _.dropWhile(users, 'active'); + * // => objects for ['barney', 'fred', 'pebbles'] + */function dropWhile(array,predicate){return array&&array.length?baseWhile(array,getIteratee(predicate,3),true):[];}/** + * Fills elements of `array` with `value` from `start` up to, but not + * including, `end`. + * + * **Note:** This method mutates `array`. + * + * @static + * @memberOf _ + * @since 3.2.0 + * @category Array + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3]; + * + * _.fill(array, 'a'); + * console.log(array); + * // => ['a', 'a', 'a'] + * + * _.fill(Array(3), 2); + * // => [2, 2, 2] + * + * _.fill([4, 6, 8, 10], '*', 1, 3); + * // => [4, '*', '*', 10] + */function fill(array,value,start,end){var length=array==null?0:array.length;if(!length){return [];}if(start&&typeof start!='number'&&isIterateeCall(array,value,start)){start=0;end=length;}return baseFill(array,value,start,end);}/** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */function findIndex(array,predicate,fromIndex){var length=array==null?0:array.length;if(!length){return -1;}var index=fromIndex==null?0:toInteger(fromIndex);if(index<0){index=nativeMax(length+index,0);}return baseFindIndex(array,getIteratee(predicate,3),index);}/** + * This method is like `_.findIndex` except that it iterates over elements + * of `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=array.length-1] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); + * // => 2 + * + * // The `_.matches` iteratee shorthand. + * _.findLastIndex(users, { 'user': 'barney', 'active': true }); + * // => 0 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findLastIndex(users, ['active', false]); + * // => 2 + * + * // The `_.property` iteratee shorthand. + * _.findLastIndex(users, 'active'); + * // => 0 + */function findLastIndex(array,predicate,fromIndex){var length=array==null?0:array.length;if(!length){return -1;}var index=length-1;if(fromIndex!==undefined$1){index=toInteger(fromIndex);index=fromIndex<0?nativeMax(length+index,0):nativeMin(index,length-1);}return baseFindIndex(array,getIteratee(predicate,3),index,true);}/** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */function flatten(array){var length=array==null?0:array.length;return length?baseFlatten(array,1):[];}/** + * Recursively flattens `array`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flattenDeep([1, [2, [3, [4]], 5]]); + * // => [1, 2, 3, 4, 5] + */function flattenDeep(array){var length=array==null?0:array.length;return length?baseFlatten(array,INFINITY):[];}/** + * Recursively flatten `array` up to `depth` times. + * + * @static + * @memberOf _ + * @since 4.4.0 + * @category Array + * @param {Array} array The array to flatten. + * @param {number} [depth=1] The maximum recursion depth. + * @returns {Array} Returns the new flattened array. + * @example + * + * var array = [1, [2, [3, [4]], 5]]; + * + * _.flattenDepth(array, 1); + * // => [1, 2, [3, [4]], 5] + * + * _.flattenDepth(array, 2); + * // => [1, 2, 3, [4], 5] + */function flattenDepth(array,depth){var length=array==null?0:array.length;if(!length){return [];}depth=depth===undefined$1?1:toInteger(depth);return baseFlatten(array,depth);}/** + * The inverse of `_.toPairs`; this method returns an object composed + * from key-value `pairs`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} pairs The key-value pairs. + * @returns {Object} Returns the new object. + * @example + * + * _.fromPairs([['a', 1], ['b', 2]]); + * // => { 'a': 1, 'b': 2 } + */function fromPairs(pairs){var index=-1,length=pairs==null?0:pairs.length,result={};while(++index 1 + * + * _.head([]); + * // => undefined + */function head(array){return array&&array.length?array[0]:undefined$1;}/** + * Gets the index at which the first occurrence of `value` is found in `array` + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. If `fromIndex` is negative, it's used as the + * offset from the end of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.indexOf([1, 2, 1, 2], 2); + * // => 1 + * + * // Search from the `fromIndex`. + * _.indexOf([1, 2, 1, 2], 2, 2); + * // => 3 + */function indexOf(array,value,fromIndex){var length=array==null?0:array.length;if(!length){return -1;}var index=fromIndex==null?0:toInteger(fromIndex);if(index<0){index=nativeMax(length+index,0);}return baseIndexOf(array,value,index);}/** + * Gets all but the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.initial([1, 2, 3]); + * // => [1, 2] + */function initial(array){var length=array==null?0:array.length;return length?baseSlice(array,0,-1):[];}/** + * Creates an array of unique values that are included in all given arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. The order and references of result values are + * determined by the first array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersection([2, 1], [2, 3]); + * // => [2] + */var intersection=baseRest(function(arrays){var mapped=arrayMap(arrays,castArrayLikeObject);return mapped.length&&mapped[0]===arrays[0]?baseIntersection(mapped):[];});/** + * This method is like `_.intersection` except that it accepts `iteratee` + * which is invoked for each element of each `arrays` to generate the criterion + * by which they're compared. The order and references of result values are + * determined by the first array. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [2.1] + * + * // The `_.property` iteratee shorthand. + * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }] + */var intersectionBy=baseRest(function(arrays){var iteratee=last(arrays),mapped=arrayMap(arrays,castArrayLikeObject);if(iteratee===last(mapped)){iteratee=undefined$1;}else {mapped.pop();}return mapped.length&&mapped[0]===arrays[0]?baseIntersection(mapped,getIteratee(iteratee,2)):[];});/** + * This method is like `_.intersection` except that it accepts `comparator` + * which is invoked to compare elements of `arrays`. The order and references + * of result values are determined by the first array. The comparator is + * invoked with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.intersectionWith(objects, others, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }] + */var intersectionWith=baseRest(function(arrays){var comparator=last(arrays),mapped=arrayMap(arrays,castArrayLikeObject);comparator=typeof comparator=='function'?comparator:undefined$1;if(comparator){mapped.pop();}return mapped.length&&mapped[0]===arrays[0]?baseIntersection(mapped,undefined$1,comparator):[];});/** + * Converts all elements in `array` into a string separated by `separator`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to convert. + * @param {string} [separator=','] The element separator. + * @returns {string} Returns the joined string. + * @example + * + * _.join(['a', 'b', 'c'], '~'); + * // => 'a~b~c' + */function join(array,separator){return array==null?'':nativeJoin.call(array,separator);}/** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */function last(array){var length=array==null?0:array.length;return length?array[length-1]:undefined$1;}/** + * This method is like `_.indexOf` except that it iterates over elements of + * `array` from right to left. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=array.length-1] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.lastIndexOf([1, 2, 1, 2], 2); + * // => 3 + * + * // Search from the `fromIndex`. + * _.lastIndexOf([1, 2, 1, 2], 2, 2); + * // => 1 + */function lastIndexOf(array,value,fromIndex){var length=array==null?0:array.length;if(!length){return -1;}var index=length;if(fromIndex!==undefined$1){index=toInteger(fromIndex);index=index<0?nativeMax(length+index,0):nativeMin(index,length-1);}return value===value?strictLastIndexOf(array,value,index):baseFindIndex(array,baseIsNaN,index,true);}/** + * Gets the element at index `n` of `array`. If `n` is negative, the nth + * element from the end is returned. + * + * @static + * @memberOf _ + * @since 4.11.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=0] The index of the element to return. + * @returns {*} Returns the nth element of `array`. + * @example + * + * var array = ['a', 'b', 'c', 'd']; + * + * _.nth(array, 1); + * // => 'b' + * + * _.nth(array, -2); + * // => 'c'; + */function nth(array,n){return array&&array.length?baseNth(array,toInteger(n)):undefined$1;}/** + * Removes all given values from `array` using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove` + * to remove elements from an array by predicate. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {...*} [values] The values to remove. + * @returns {Array} Returns `array`. + * @example + * + * var array = ['a', 'b', 'c', 'a', 'b', 'c']; + * + * _.pull(array, 'a', 'c'); + * console.log(array); + * // => ['b', 'b'] + */var pull=baseRest(pullAll);/** + * This method is like `_.pull` except that it accepts an array of values to remove. + * + * **Note:** Unlike `_.difference`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @returns {Array} Returns `array`. + * @example + * + * var array = ['a', 'b', 'c', 'a', 'b', 'c']; + * + * _.pullAll(array, ['a', 'c']); + * console.log(array); + * // => ['b', 'b'] + */function pullAll(array,values){return array&&array.length&&values&&values.length?basePullAll(array,values):array;}/** + * This method is like `_.pullAll` except that it accepts `iteratee` which is + * invoked for each element of `array` and `values` to generate the criterion + * by which they're compared. The iteratee is invoked with one argument: (value). + * + * **Note:** Unlike `_.differenceBy`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns `array`. + * @example + * + * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }]; + * + * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x'); + * console.log(array); + * // => [{ 'x': 2 }] + */function pullAllBy(array,values,iteratee){return array&&array.length&&values&&values.length?basePullAll(array,values,getIteratee(iteratee,2)):array;}/** + * This method is like `_.pullAll` except that it accepts `comparator` which + * is invoked to compare elements of `array` to `values`. The comparator is + * invoked with two arguments: (arrVal, othVal). + * + * **Note:** Unlike `_.differenceWith`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.6.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns `array`. + * @example + * + * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }]; + * + * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual); + * console.log(array); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }] + */function pullAllWith(array,values,comparator){return array&&array.length&&values&&values.length?basePullAll(array,values,undefined$1,comparator):array;}/** + * Removes elements from `array` corresponding to `indexes` and returns an + * array of removed elements. + * + * **Note:** Unlike `_.at`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {...(number|number[])} [indexes] The indexes of elements to remove. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = ['a', 'b', 'c', 'd']; + * var pulled = _.pullAt(array, [1, 3]); + * + * console.log(array); + * // => ['a', 'c'] + * + * console.log(pulled); + * // => ['b', 'd'] + */var pullAt=flatRest(function(array,indexes){var length=array==null?0:array.length,result=baseAt(array,indexes);basePullAt(array,arrayMap(indexes,function(index){return isIndex(index,length)?+index:index;}).sort(compareAscending));return result;});/** + * Removes all elements from `array` that `predicate` returns truthy for + * and returns an array of the removed elements. The predicate is invoked + * with three arguments: (value, index, array). + * + * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull` + * to pull elements from an array by value. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = [1, 2, 3, 4]; + * var evens = _.remove(array, function(n) { + * return n % 2 == 0; + * }); + * + * console.log(array); + * // => [1, 3] + * + * console.log(evens); + * // => [2, 4] + */function remove(array,predicate){var result=[];if(!(array&&array.length)){return result;}var index=-1,indexes=[],length=array.length;predicate=getIteratee(predicate,3);while(++index [3, 2, 1] + * + * console.log(array); + * // => [3, 2, 1] + */function reverse(array){return array==null?array:nativeReverse.call(array);}/** + * Creates a slice of `array` from `start` up to, but not including, `end`. + * + * **Note:** This method is used instead of + * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are + * returned. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */function slice(array,start,end){var length=array==null?0:array.length;if(!length){return [];}if(end&&typeof end!='number'&&isIterateeCall(array,start,end)){start=0;end=length;}else {start=start==null?0:toInteger(start);end=end===undefined$1?length:toInteger(end);}return baseSlice(array,start,end);}/** + * Uses a binary search to determine the lowest index at which `value` + * should be inserted into `array` in order to maintain its sort order. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * _.sortedIndex([30, 50], 40); + * // => 1 + */function sortedIndex(array,value){return baseSortedIndex(array,value);}/** + * This method is like `_.sortedIndex` except that it accepts `iteratee` + * which is invoked for `value` and each element of `array` to compute their + * sort ranking. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * var objects = [{ 'x': 4 }, { 'x': 5 }]; + * + * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.sortedIndexBy(objects, { 'x': 4 }, 'x'); + * // => 0 + */function sortedIndexBy(array,value,iteratee){return baseSortedIndexBy(array,value,getIteratee(iteratee,2));}/** + * This method is like `_.indexOf` except that it performs a binary + * search on a sorted `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.sortedIndexOf([4, 5, 5, 5, 6], 5); + * // => 1 + */function sortedIndexOf(array,value){var length=array==null?0:array.length;if(length){var index=baseSortedIndex(array,value);if(index 4 + */function sortedLastIndex(array,value){return baseSortedIndex(array,value,true);}/** + * This method is like `_.sortedLastIndex` except that it accepts `iteratee` + * which is invoked for `value` and each element of `array` to compute their + * sort ranking. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * var objects = [{ 'x': 4 }, { 'x': 5 }]; + * + * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); + * // => 1 + * + * // The `_.property` iteratee shorthand. + * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x'); + * // => 1 + */function sortedLastIndexBy(array,value,iteratee){return baseSortedIndexBy(array,value,getIteratee(iteratee,2),true);}/** + * This method is like `_.lastIndexOf` except that it performs a binary + * search on a sorted `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5); + * // => 3 + */function sortedLastIndexOf(array,value){var length=array==null?0:array.length;if(length){var index=baseSortedIndex(array,value,true)-1;if(eq(array[index],value)){return index;}}return -1;}/** + * This method is like `_.uniq` except that it's designed and optimized + * for sorted arrays. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.sortedUniq([1, 1, 2]); + * // => [1, 2] + */function sortedUniq(array){return array&&array.length?baseSortedUniq(array):[];}/** + * This method is like `_.uniqBy` except that it's designed and optimized + * for sorted arrays. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor); + * // => [1.1, 2.3] + */function sortedUniqBy(array,iteratee){return array&&array.length?baseSortedUniq(array,getIteratee(iteratee,2)):[];}/** + * Gets all but the first element of `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.tail([1, 2, 3]); + * // => [2, 3] + */function tail(array){var length=array==null?0:array.length;return length?baseSlice(array,1,length):[];}/** + * Creates a slice of `array` with `n` elements taken from the beginning. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.take([1, 2, 3]); + * // => [1] + * + * _.take([1, 2, 3], 2); + * // => [1, 2] + * + * _.take([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.take([1, 2, 3], 0); + * // => [] + */function take(array,n,guard){if(!(array&&array.length)){return [];}n=guard||n===undefined$1?1:toInteger(n);return baseSlice(array,0,n<0?0:n);}/** + * Creates a slice of `array` with `n` elements taken from the end. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.takeRight([1, 2, 3]); + * // => [3] + * + * _.takeRight([1, 2, 3], 2); + * // => [2, 3] + * + * _.takeRight([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.takeRight([1, 2, 3], 0); + * // => [] + */function takeRight(array,n,guard){var length=array==null?0:array.length;if(!length){return [];}n=guard||n===undefined$1?1:toInteger(n);n=length-n;return baseSlice(array,n<0?0:n,length);}/** + * Creates a slice of `array` with elements taken from the end. Elements are + * taken until `predicate` returns falsey. The predicate is invoked with + * three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.takeRightWhile(users, function(o) { return !o.active; }); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.matches` iteratee shorthand. + * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false }); + * // => objects for ['pebbles'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.takeRightWhile(users, ['active', false]); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.property` iteratee shorthand. + * _.takeRightWhile(users, 'active'); + * // => [] + */function takeRightWhile(array,predicate){return array&&array.length?baseWhile(array,getIteratee(predicate,3),false,true):[];}/** + * Creates a slice of `array` with elements taken from the beginning. Elements + * are taken until `predicate` returns falsey. The predicate is invoked with + * three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.takeWhile(users, function(o) { return !o.active; }); + * // => objects for ['barney', 'fred'] + * + * // The `_.matches` iteratee shorthand. + * _.takeWhile(users, { 'user': 'barney', 'active': false }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.takeWhile(users, ['active', false]); + * // => objects for ['barney', 'fred'] + * + * // The `_.property` iteratee shorthand. + * _.takeWhile(users, 'active'); + * // => [] + */function takeWhile(array,predicate){return array&&array.length?baseWhile(array,getIteratee(predicate,3)):[];}/** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2], [1, 2]); + * // => [2, 1] + */var union=baseRest(function(arrays){return baseUniq(baseFlatten(arrays,1,isArrayLikeObject,true));});/** + * This method is like `_.union` except that it accepts `iteratee` which is + * invoked for each element of each `arrays` to generate the criterion by + * which uniqueness is computed. Result values are chosen from the first + * array in which the value occurs. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.unionBy([2.1], [1.2, 2.3], Math.floor); + * // => [2.1, 1.2] + * + * // The `_.property` iteratee shorthand. + * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */var unionBy=baseRest(function(arrays){var iteratee=last(arrays);if(isArrayLikeObject(iteratee)){iteratee=undefined$1;}return baseUniq(baseFlatten(arrays,1,isArrayLikeObject,true),getIteratee(iteratee,2));});/** + * This method is like `_.union` except that it accepts `comparator` which + * is invoked to compare elements of `arrays`. Result values are chosen from + * the first array in which the value occurs. The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of combined values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.unionWith(objects, others, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] + */var unionWith=baseRest(function(arrays){var comparator=last(arrays);comparator=typeof comparator=='function'?comparator:undefined$1;return baseUniq(baseFlatten(arrays,1,isArrayLikeObject,true),undefined$1,comparator);});/** + * Creates a duplicate-free version of an array, using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons, in which only the first occurrence of each element + * is kept. The order of result values is determined by the order they occur + * in the array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.uniq([2, 1, 2]); + * // => [2, 1] + */function uniq(array){return array&&array.length?baseUniq(array):[];}/** + * This method is like `_.uniq` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * uniqueness is computed. The order of result values is determined by the + * order they occur in the array. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.uniqBy([2.1, 1.2, 2.3], Math.floor); + * // => [2.1, 1.2] + * + * // The `_.property` iteratee shorthand. + * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */function uniqBy(array,iteratee){return array&&array.length?baseUniq(array,getIteratee(iteratee,2)):[];}/** + * This method is like `_.uniq` except that it accepts `comparator` which + * is invoked to compare elements of `array`. The order of result values is + * determined by the order they occur in the array.The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.uniqWith(objects, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }] + */function uniqWith(array,comparator){comparator=typeof comparator=='function'?comparator:undefined$1;return array&&array.length?baseUniq(array,undefined$1,comparator):[];}/** + * This method is like `_.zip` except that it accepts an array of grouped + * elements and creates an array regrouping the elements to their pre-zip + * configuration. + * + * @static + * @memberOf _ + * @since 1.2.0 + * @category Array + * @param {Array} array The array of grouped elements to process. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]); + * // => [['a', 1, true], ['b', 2, false]] + * + * _.unzip(zipped); + * // => [['a', 'b'], [1, 2], [true, false]] + */function unzip(array){if(!(array&&array.length)){return [];}var length=0;array=arrayFilter(array,function(group){if(isArrayLikeObject(group)){length=nativeMax(group.length,length);return true;}});return baseTimes(length,function(index){return arrayMap(array,baseProperty(index));});}/** + * This method is like `_.unzip` except that it accepts `iteratee` to specify + * how regrouped values should be combined. The iteratee is invoked with the + * elements of each group: (...group). + * + * @static + * @memberOf _ + * @since 3.8.0 + * @category Array + * @param {Array} array The array of grouped elements to process. + * @param {Function} [iteratee=_.identity] The function to combine + * regrouped values. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip([1, 2], [10, 20], [100, 200]); + * // => [[1, 10, 100], [2, 20, 200]] + * + * _.unzipWith(zipped, _.add); + * // => [3, 30, 300] + */function unzipWith(array,iteratee){if(!(array&&array.length)){return [];}var result=unzip(array);if(iteratee==null){return result;}return arrayMap(result,function(group){return apply(iteratee,undefined$1,group);});}/** + * Creates an array excluding all given values using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * **Note:** Unlike `_.pull`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...*} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @see _.difference, _.xor + * @example + * + * _.without([2, 1, 2, 3], 1, 2); + * // => [3] + */var without=baseRest(function(array,values){return isArrayLikeObject(array)?baseDifference(array,values):[];});/** + * Creates an array of unique values that is the + * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference) + * of the given arrays. The order of result values is determined by the order + * they occur in the arrays. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of filtered values. + * @see _.difference, _.without + * @example + * + * _.xor([2, 1], [2, 3]); + * // => [1, 3] + */var xor=baseRest(function(arrays){return baseXor(arrayFilter(arrays,isArrayLikeObject));});/** + * This method is like `_.xor` except that it accepts `iteratee` which is + * invoked for each element of each `arrays` to generate the criterion by + * which by which they're compared. The order of result values is determined + * by the order they occur in the arrays. The iteratee is invoked with one + * argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [1.2, 3.4] + * + * // The `_.property` iteratee shorthand. + * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 2 }] + */var xorBy=baseRest(function(arrays){var iteratee=last(arrays);if(isArrayLikeObject(iteratee)){iteratee=undefined$1;}return baseXor(arrayFilter(arrays,isArrayLikeObject),getIteratee(iteratee,2));});/** + * This method is like `_.xor` except that it accepts `comparator` which is + * invoked to compare elements of `arrays`. The order of result values is + * determined by the order they occur in the arrays. The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.xorWith(objects, others, _.isEqual); + * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] + */var xorWith=baseRest(function(arrays){var comparator=last(arrays);comparator=typeof comparator=='function'?comparator:undefined$1;return baseXor(arrayFilter(arrays,isArrayLikeObject),undefined$1,comparator);});/** + * Creates an array of grouped elements, the first of which contains the + * first elements of the given arrays, the second of which contains the + * second elements of the given arrays, and so on. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zip(['a', 'b'], [1, 2], [true, false]); + * // => [['a', 1, true], ['b', 2, false]] + */var zip=baseRest(unzip);/** + * This method is like `_.fromPairs` except that it accepts two arrays, + * one of property identifiers and one of corresponding values. + * + * @static + * @memberOf _ + * @since 0.4.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject(['a', 'b'], [1, 2]); + * // => { 'a': 1, 'b': 2 } + */function zipObject(props,values){return baseZipObject(props||[],values||[],assignValue);}/** + * This method is like `_.zipObject` except that it supports property paths. + * + * @static + * @memberOf _ + * @since 4.1.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]); + * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } } + */function zipObjectDeep(props,values){return baseZipObject(props||[],values||[],baseSet);}/** + * This method is like `_.zip` except that it accepts `iteratee` to specify + * how grouped values should be combined. The iteratee is invoked with the + * elements of each group: (...group). + * + * @static + * @memberOf _ + * @since 3.8.0 + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @param {Function} [iteratee=_.identity] The function to combine + * grouped values. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) { + * return a + b + c; + * }); + * // => [111, 222] + */var zipWith=baseRest(function(arrays){var length=arrays.length,iteratee=length>1?arrays[length-1]:undefined$1;iteratee=typeof iteratee=='function'?(arrays.pop(),iteratee):undefined$1;return unzipWith(arrays,iteratee);});/*------------------------------------------------------------------------*/ /** + * Creates a `lodash` wrapper instance that wraps `value` with explicit method + * chain sequences enabled. The result of such sequences must be unwrapped + * with `_#value`. + * + * @static + * @memberOf _ + * @since 1.3.0 + * @category Seq + * @param {*} value The value to wrap. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'pebbles', 'age': 1 } + * ]; + * + * var youngest = _ + * .chain(users) + * .sortBy('age') + * .map(function(o) { + * return o.user + ' is ' + o.age; + * }) + * .head() + * .value(); + * // => 'pebbles is 1' + */function chain(value){var result=lodash(value);result.__chain__=true;return result;}/** + * This method invokes `interceptor` and returns `value`. The interceptor + * is invoked with one argument; (value). The purpose of this method is to + * "tap into" a method chain sequence in order to modify intermediate results. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns `value`. + * @example + * + * _([1, 2, 3]) + * .tap(function(array) { + * // Mutate input array. + * array.pop(); + * }) + * .reverse() + * .value(); + * // => [2, 1] + */function tap(value,interceptor){interceptor(value);return value;}/** + * This method is like `_.tap` except that it returns the result of `interceptor`. + * The purpose of this method is to "pass thru" values replacing intermediate + * results in a method chain sequence. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns the result of `interceptor`. + * @example + * + * _(' abc ') + * .chain() + * .trim() + * .thru(function(value) { + * return [value]; + * }) + * .value(); + * // => ['abc'] + */function thru(value,interceptor){return interceptor(value);}/** + * This method is the wrapper version of `_.at`. + * + * @name at + * @memberOf _ + * @since 1.0.0 + * @category Seq + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; + * + * _(object).at(['a[0].b.c', 'a[1]']).value(); + * // => [3, 4] + */var wrapperAt=flatRest(function(paths){var length=paths.length,start=length?paths[0]:0,value=this.__wrapped__,interceptor=function(object){return baseAt(object,paths);};if(length>1||this.__actions__.length||!(value instanceof LazyWrapper)||!isIndex(start)){return this.thru(interceptor);}value=value.slice(start,+start+(length?1:0));value.__actions__.push({'func':thru,'args':[interceptor],'thisArg':undefined$1});return new LodashWrapper(value,this.__chain__).thru(function(array){if(length&&!array.length){array.push(undefined$1);}return array;});});/** + * Creates a `lodash` wrapper instance with explicit method chain sequences enabled. + * + * @name chain + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * // A sequence without explicit chaining. + * _(users).head(); + * // => { 'user': 'barney', 'age': 36 } + * + * // A sequence with explicit chaining. + * _(users) + * .chain() + * .head() + * .pick('user') + * .value(); + * // => { 'user': 'barney' } + */function wrapperChain(){return chain(this);}/** + * Executes the chain sequence and returns the wrapped result. + * + * @name commit + * @memberOf _ + * @since 3.2.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2]; + * var wrapped = _(array).push(3); + * + * console.log(array); + * // => [1, 2] + * + * wrapped = wrapped.commit(); + * console.log(array); + * // => [1, 2, 3] + * + * wrapped.last(); + * // => 3 + * + * console.log(array); + * // => [1, 2, 3] + */function wrapperCommit(){return new LodashWrapper(this.value(),this.__chain__);}/** + * Gets the next value on a wrapped object following the + * [iterator protocol](https://mdn.io/iteration_protocols#iterator). + * + * @name next + * @memberOf _ + * @since 4.0.0 + * @category Seq + * @returns {Object} Returns the next iterator value. + * @example + * + * var wrapped = _([1, 2]); + * + * wrapped.next(); + * // => { 'done': false, 'value': 1 } + * + * wrapped.next(); + * // => { 'done': false, 'value': 2 } + * + * wrapped.next(); + * // => { 'done': true, 'value': undefined } + */function wrapperNext(){if(this.__values__===undefined$1){this.__values__=toArray(this.value());}var done=this.__index__>=this.__values__.length,value=done?undefined$1:this.__values__[this.__index__++];return {'done':done,'value':value};}/** + * Enables the wrapper to be iterable. + * + * @name Symbol.iterator + * @memberOf _ + * @since 4.0.0 + * @category Seq + * @returns {Object} Returns the wrapper object. + * @example + * + * var wrapped = _([1, 2]); + * + * wrapped[Symbol.iterator]() === wrapped; + * // => true + * + * Array.from(wrapped); + * // => [1, 2] + */function wrapperToIterator(){return this;}/** + * Creates a clone of the chain sequence planting `value` as the wrapped value. + * + * @name plant + * @memberOf _ + * @since 3.2.0 + * @category Seq + * @param {*} value The value to plant. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var wrapped = _([1, 2]).map(square); + * var other = wrapped.plant([3, 4]); + * + * other.value(); + * // => [9, 16] + * + * wrapped.value(); + * // => [1, 4] + */function wrapperPlant(value){var result,parent=this;while(parent instanceof baseLodash){var clone=wrapperClone(parent);clone.__index__=0;clone.__values__=undefined$1;if(result){previous.__wrapped__=clone;}else {result=clone;}var previous=clone;parent=parent.__wrapped__;}previous.__wrapped__=value;return result;}/** + * This method is the wrapper version of `_.reverse`. + * + * **Note:** This method mutates the wrapped array. + * + * @name reverse + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2, 3]; + * + * _(array).reverse().value() + * // => [3, 2, 1] + * + * console.log(array); + * // => [3, 2, 1] + */function wrapperReverse(){var value=this.__wrapped__;if(value instanceof LazyWrapper){var wrapped=value;if(this.__actions__.length){wrapped=new LazyWrapper(this);}wrapped=wrapped.reverse();wrapped.__actions__.push({'func':thru,'args':[reverse],'thisArg':undefined$1});return new LodashWrapper(wrapped,this.__chain__);}return this.thru(reverse);}/** + * Executes the chain sequence to resolve the unwrapped value. + * + * @name value + * @memberOf _ + * @since 0.1.0 + * @alias toJSON, valueOf + * @category Seq + * @returns {*} Returns the resolved unwrapped value. + * @example + * + * _([1, 2, 3]).value(); + * // => [1, 2, 3] + */function wrapperValue(){return baseWrapperValue(this.__wrapped__,this.__actions__);}/*------------------------------------------------------------------------*/ /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The corresponding value of + * each key is the number of times the key was returned by `iteratee`. The + * iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.countBy([6.1, 4.2, 6.3], Math.floor); + * // => { '4': 1, '6': 2 } + * + * // The `_.property` iteratee shorthand. + * _.countBy(['one', 'two', 'three'], 'length'); + * // => { '3': 2, '5': 1 } + */var countBy=createAggregator(function(result,value,key){if(hasOwnProperty.call(result,key)){++result[key];}else {baseAssignValue(result,key,1);}});/** + * Checks if `predicate` returns truthy for **all** elements of `collection`. + * Iteration is stopped once `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * **Note:** This method returns `true` for + * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because + * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of + * elements of empty collections. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + * @example + * + * _.every([true, 1, null, 'yes'], Boolean); + * // => false + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.every(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.every(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.every(users, 'active'); + * // => false + */function every(collection,predicate,guard){var func=isArray(collection)?arrayEvery:baseEvery;if(guard&&isIterateeCall(collection,predicate,guard)){predicate=undefined$1;}return func(collection,getIteratee(predicate,3));}/** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + * + * // Combining several predicates using `_.overEvery` or `_.overSome`. + * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); + * // => objects for ['fred', 'barney'] + */function filter(collection,predicate){var func=isArray(collection)?arrayFilter:baseFilter;return func(collection,getIteratee(predicate,3));}/** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */var find=createFind(findIndex);/** + * This method is like `_.find` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=collection.length-1] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * _.findLast([1, 2, 3, 4], function(n) { + * return n % 2 == 1; + * }); + * // => 3 + */var findLast=createFind(findLastIndex);/** + * Creates a flattened array of values by running each element in `collection` + * thru `iteratee` and flattening the mapped results. The iteratee is invoked + * with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + * return [n, n]; + * } + * + * _.flatMap([1, 2], duplicate); + * // => [1, 1, 2, 2] + */function flatMap(collection,iteratee){return baseFlatten(map(collection,iteratee),1);}/** + * This method is like `_.flatMap` except that it recursively flattens the + * mapped results. + * + * @static + * @memberOf _ + * @since 4.7.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + * return [[[n, n]]]; + * } + * + * _.flatMapDeep([1, 2], duplicate); + * // => [1, 1, 2, 2] + */function flatMapDeep(collection,iteratee){return baseFlatten(map(collection,iteratee),INFINITY);}/** + * This method is like `_.flatMap` except that it recursively flattens the + * mapped results up to `depth` times. + * + * @static + * @memberOf _ + * @since 4.7.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {number} [depth=1] The maximum recursion depth. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + * return [[[n, n]]]; + * } + * + * _.flatMapDepth([1, 2], duplicate, 2); + * // => [[1, 1], [2, 2]] + */function flatMapDepth(collection,iteratee,depth){depth=depth===undefined$1?1:toInteger(depth);return baseFlatten(map(collection,iteratee),depth);}/** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */function forEach(collection,iteratee){var func=isArray(collection)?arrayEach:baseEach;return func(collection,getIteratee(iteratee,3));}/** + * This method is like `_.forEach` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @alias eachRight + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEach + * @example + * + * _.forEachRight([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `2` then `1`. + */function forEachRight(collection,iteratee){var func=isArray(collection)?arrayEachRight:baseEachRight;return func(collection,getIteratee(iteratee,3));}/** + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The order of grouped values + * is determined by the order they occur in `collection`. The corresponding + * value of each key is an array of elements responsible for generating the + * key. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.groupBy([6.1, 4.2, 6.3], Math.floor); + * // => { '4': [4.2], '6': [6.1, 6.3] } + * + * // The `_.property` iteratee shorthand. + * _.groupBy(['one', 'two', 'three'], 'length'); + * // => { '3': ['one', 'two'], '5': ['three'] } + */var groupBy=createAggregator(function(result,value,key){if(hasOwnProperty.call(result,key)){result[key].push(value);}else {baseAssignValue(result,key,[value]);}});/** + * Checks if `value` is in `collection`. If `collection` is a string, it's + * checked for a substring of `value`, otherwise + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * is used for equality comparisons. If `fromIndex` is negative, it's used as + * the offset from the end of `collection`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. + * @returns {boolean} Returns `true` if `value` is found, else `false`. + * @example + * + * _.includes([1, 2, 3], 1); + * // => true + * + * _.includes([1, 2, 3], 1, 2); + * // => false + * + * _.includes({ 'a': 1, 'b': 2 }, 1); + * // => true + * + * _.includes('abcd', 'bc'); + * // => true + */function includes(collection,value,fromIndex,guard){collection=isArrayLike(collection)?collection:values(collection);fromIndex=fromIndex&&!guard?toInteger(fromIndex):0;var length=collection.length;if(fromIndex<0){fromIndex=nativeMax(length+fromIndex,0);}return isString(collection)?fromIndex<=length&&collection.indexOf(value,fromIndex)>-1:!!length&&baseIndexOf(collection,value,fromIndex)>-1;}/** + * Invokes the method at `path` of each element in `collection`, returning + * an array of the results of each invoked method. Any additional arguments + * are provided to each invoked method. If `path` is a function, it's invoked + * for, and `this` bound to, each element in `collection`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Array|Function|string} path The path of the method to invoke or + * the function invoked per iteration. + * @param {...*} [args] The arguments to invoke each method with. + * @returns {Array} Returns the array of results. + * @example + * + * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort'); + * // => [[1, 5, 7], [1, 2, 3]] + * + * _.invokeMap([123, 456], String.prototype.split, ''); + * // => [['1', '2', '3'], ['4', '5', '6']] + */var invokeMap=baseRest(function(collection,path,args){var index=-1,isFunc=typeof path=='function',result=isArrayLike(collection)?Array(collection.length):[];baseEach(collection,function(value){result[++index]=isFunc?apply(path,value,args):baseInvoke(value,path,args);});return result;});/** + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The corresponding value of + * each key is the last element responsible for generating the key. The + * iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * var array = [ + * { 'dir': 'left', 'code': 97 }, + * { 'dir': 'right', 'code': 100 } + * ]; + * + * _.keyBy(array, function(o) { + * return String.fromCharCode(o.code); + * }); + * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } + * + * _.keyBy(array, 'dir'); + * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } + */var keyBy=createAggregator(function(result,value,key){baseAssignValue(result,key,value);});/** + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */function map(collection,iteratee){var func=isArray(collection)?arrayMap:baseMap;return func(collection,getIteratee(iteratee,3));}/** + * This method is like `_.sortBy` except that it allows specifying the sort + * orders of the iteratees to sort by. If `orders` is unspecified, all values + * are sorted in ascending order. Otherwise, specify an order of "desc" for + * descending or "asc" for ascending sort order of corresponding values. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]] + * The iteratees to sort by. + * @param {string[]} [orders] The sort orders of `iteratees`. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 34 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'barney', 'age': 36 } + * ]; + * + * // Sort by `user` in ascending order and by `age` in descending order. + * _.orderBy(users, ['user', 'age'], ['asc', 'desc']); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] + */function orderBy(collection,iteratees,orders,guard){if(collection==null){return [];}if(!isArray(iteratees)){iteratees=iteratees==null?[]:[iteratees];}orders=guard?undefined$1:orders;if(!isArray(orders)){orders=orders==null?[]:[orders];}return baseOrderBy(collection,iteratees,orders);}/** + * Creates an array of elements split into two groups, the first of which + * contains elements `predicate` returns truthy for, the second of which + * contains elements `predicate` returns falsey for. The predicate is + * invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the array of grouped elements. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': true }, + * { 'user': 'pebbles', 'age': 1, 'active': false } + * ]; + * + * _.partition(users, function(o) { return o.active; }); + * // => objects for [['fred'], ['barney', 'pebbles']] + * + * // The `_.matches` iteratee shorthand. + * _.partition(users, { 'age': 1, 'active': false }); + * // => objects for [['pebbles'], ['barney', 'fred']] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.partition(users, ['active', false]); + * // => objects for [['barney', 'pebbles'], ['fred']] + * + * // The `_.property` iteratee shorthand. + * _.partition(users, 'active'); + * // => objects for [['fred'], ['barney', 'pebbles']] + */var partition=createAggregator(function(result,value,key){result[key?0:1].push(value);},function(){return [[],[]];});/** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */function reduce(collection,iteratee,accumulator){var func=isArray(collection)?arrayReduce:baseReduce,initAccum=arguments.length<3;return func(collection,getIteratee(iteratee,4),accumulator,initAccum,baseEach);}/** + * This method is like `_.reduce` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduce + * @example + * + * var array = [[0, 1], [2, 3], [4, 5]]; + * + * _.reduceRight(array, function(flattened, other) { + * return flattened.concat(other); + * }, []); + * // => [4, 5, 2, 3, 0, 1] + */function reduceRight(collection,iteratee,accumulator){var func=isArray(collection)?arrayReduceRight:baseReduce,initAccum=arguments.length<3;return func(collection,getIteratee(iteratee,4),accumulator,initAccum,baseEachRight);}/** + * The opposite of `_.filter`; this method returns the elements of `collection` + * that `predicate` does **not** return truthy for. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.filter + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': true } + * ]; + * + * _.reject(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.reject(users, { 'age': 40, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.reject(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.reject(users, 'active'); + * // => objects for ['barney'] + */function reject(collection,predicate){var func=isArray(collection)?arrayFilter:baseFilter;return func(collection,negate(getIteratee(predicate,3)));}/** + * Gets a random element from `collection`. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Collection + * @param {Array|Object} collection The collection to sample. + * @returns {*} Returns the random element. + * @example + * + * _.sample([1, 2, 3, 4]); + * // => 2 + */function sample(collection){var func=isArray(collection)?arraySample:baseSample;return func(collection);}/** + * Gets `n` random elements at unique keys from `collection` up to the + * size of `collection`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to sample. + * @param {number} [n=1] The number of elements to sample. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the random elements. + * @example + * + * _.sampleSize([1, 2, 3], 2); + * // => [3, 1] + * + * _.sampleSize([1, 2, 3], 4); + * // => [2, 3, 1] + */function sampleSize(collection,n,guard){if(guard?isIterateeCall(collection,n,guard):n===undefined$1){n=1;}else {n=toInteger(n);}var func=isArray(collection)?arraySampleSize:baseSampleSize;return func(collection,n);}/** + * Creates an array of shuffled values, using a version of the + * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + * @example + * + * _.shuffle([1, 2, 3, 4]); + * // => [4, 1, 3, 2] + */function shuffle(collection){var func=isArray(collection)?arrayShuffle:baseShuffle;return func(collection);}/** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable string keyed properties for objects. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */function size(collection){if(collection==null){return 0;}if(isArrayLike(collection)){return isString(collection)?stringSize(collection):collection.length;}var tag=getTag(collection);if(tag==mapTag||tag==setTag){return collection.size;}return baseKeys(collection).length;}/** + * Checks if `predicate` returns truthy for **any** element of `collection`. + * Iteration is stopped once `predicate` returns truthy. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + * @example + * + * _.some([null, 0, 'yes', false], Boolean); + * // => true + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.some(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.some(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.some(users, 'active'); + * // => true + */function some(collection,predicate,guard){var func=isArray(collection)?arraySome:baseSome;if(guard&&isIterateeCall(collection,predicate,guard)){predicate=undefined$1;}return func(collection,getIteratee(predicate,3));}/** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + * The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 30 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, [function(o) { return o.user; }]); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] + */var sortBy=baseRest(function(collection,iteratees){if(collection==null){return [];}var length=iteratees.length;if(length>1&&isIterateeCall(collection,iteratees[0],iteratees[1])){iteratees=[];}else if(length>2&&isIterateeCall(iteratees[0],iteratees[1],iteratees[2])){iteratees=[iteratees[0]];}return baseOrderBy(collection,baseFlatten(iteratees,1),[]);});/*------------------------------------------------------------------------*/ /** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */var now=ctxNow||function(){return root.Date.now();};/*------------------------------------------------------------------------*/ /** + * The opposite of `_.before`; this method creates a function that invokes + * `func` once it's called `n` or more times. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {number} n The number of calls before `func` is invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var saves = ['profile', 'settings']; + * + * var done = _.after(saves.length, function() { + * console.log('done saving!'); + * }); + * + * _.forEach(saves, function(type) { + * asyncSave({ 'type': type, 'complete': done }); + * }); + * // => Logs 'done saving!' after the two async saves have completed. + */function after(n,func){if(typeof func!='function'){throw new TypeError(FUNC_ERROR_TEXT);}n=toInteger(n);return function(){if(--n<1){return func.apply(this,arguments);}};}/** + * Creates a function that invokes `func`, with up to `n` arguments, + * ignoring any additional arguments. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} func The function to cap arguments for. + * @param {number} [n=func.length] The arity cap. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the new capped function. + * @example + * + * _.map(['6', '8', '10'], _.ary(parseInt, 1)); + * // => [6, 8, 10] + */function ary(func,n,guard){n=guard?undefined$1:n;n=func&&n==null?func.length:n;return createWrap(func,WRAP_ARY_FLAG,undefined$1,undefined$1,undefined$1,undefined$1,n);}/** + * Creates a function that invokes `func`, with the `this` binding and arguments + * of the created function, while it's called less than `n` times. Subsequent + * calls to the created function return the result of the last `func` invocation. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {number} n The number of calls at which `func` is no longer invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * jQuery(element).on('click', _.before(5, addContactToList)); + * // => Allows adding up to 4 contacts to the list. + */function before(n,func){var result;if(typeof func!='function'){throw new TypeError(FUNC_ERROR_TEXT);}n=toInteger(n);return function(){if(--n>0){result=func.apply(this,arguments);}if(n<=1){func=undefined$1;}return result;};}/** + * Creates a function that invokes `func` with the `this` binding of `thisArg` + * and `partials` prepended to the arguments it receives. + * + * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for partially applied arguments. + * + * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" + * property of bound functions. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to bind. + * @param {*} thisArg The `this` binding of `func`. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * function greet(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * } + * + * var object = { 'user': 'fred' }; + * + * var bound = _.bind(greet, object, 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * // Bound with placeholders. + * var bound = _.bind(greet, object, _, '!'); + * bound('hi'); + * // => 'hi fred!' + */var bind=baseRest(function(func,thisArg,partials){var bitmask=WRAP_BIND_FLAG;if(partials.length){var holders=replaceHolders(partials,getHolder(bind));bitmask|=WRAP_PARTIAL_FLAG;}return createWrap(func,bitmask,thisArg,partials,holders);});/** + * Creates a function that invokes the method at `object[key]` with `partials` + * prepended to the arguments it receives. + * + * This method differs from `_.bind` by allowing bound functions to reference + * methods that may be redefined or don't yet exist. See + * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern) + * for more details. + * + * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * @static + * @memberOf _ + * @since 0.10.0 + * @category Function + * @param {Object} object The object to invoke the method on. + * @param {string} key The key of the method. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * var object = { + * 'user': 'fred', + * 'greet': function(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * } + * }; + * + * var bound = _.bindKey(object, 'greet', 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * object.greet = function(greeting, punctuation) { + * return greeting + 'ya ' + this.user + punctuation; + * }; + * + * bound('!'); + * // => 'hiya fred!' + * + * // Bound with placeholders. + * var bound = _.bindKey(object, 'greet', _, '!'); + * bound('hi'); + * // => 'hiya fred!' + */var bindKey=baseRest(function(object,key,partials){var bitmask=WRAP_BIND_FLAG|WRAP_BIND_KEY_FLAG;if(partials.length){var holders=replaceHolders(partials,getHolder(bindKey));bitmask|=WRAP_PARTIAL_FLAG;}return createWrap(key,bitmask,object,partials,holders);});/** + * Creates a function that accepts arguments of `func` and either invokes + * `func` returning its result, if at least `arity` number of arguments have + * been provided, or returns a function that accepts the remaining `func` + * arguments, and so on. The arity of `func` may be specified if `func.length` + * is not sufficient. + * + * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for provided arguments. + * + * **Note:** This method doesn't set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + * return [a, b, c]; + * }; + * + * var curried = _.curry(abc); + * + * curried(1)(2)(3); + * // => [1, 2, 3] + * + * curried(1, 2)(3); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // Curried with placeholders. + * curried(1)(_, 3)(2); + * // => [1, 2, 3] + */function curry(func,arity,guard){arity=guard?undefined$1:arity;var result=createWrap(func,WRAP_CURRY_FLAG,undefined$1,undefined$1,undefined$1,undefined$1,undefined$1,arity);result.placeholder=curry.placeholder;return result;}/** + * This method is like `_.curry` except that arguments are applied to `func` + * in the manner of `_.partialRight` instead of `_.partial`. + * + * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for provided arguments. + * + * **Note:** This method doesn't set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + * return [a, b, c]; + * }; + * + * var curried = _.curryRight(abc); + * + * curried(3)(2)(1); + * // => [1, 2, 3] + * + * curried(2, 3)(1); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // Curried with placeholders. + * curried(3)(1, _)(2); + * // => [1, 2, 3] + */function curryRight(func,arity,guard){arity=guard?undefined$1:arity;var result=createWrap(func,WRAP_CURRY_RIGHT_FLAG,undefined$1,undefined$1,undefined$1,undefined$1,undefined$1,arity);result.placeholder=curryRight.placeholder;return result;}/** + * Creates a debounced function that delays invoking `func` until after `wait` + * milliseconds have elapsed since the last time the debounced function was + * invoked. The debounced function comes with a `cancel` method to cancel + * delayed `func` invocations and a `flush` method to immediately invoke them. + * Provide `options` to indicate whether `func` should be invoked on the + * leading and/or trailing edge of the `wait` timeout. The `func` is invoked + * with the last arguments provided to the debounced function. Subsequent + * calls to the debounced function return the result of the last `func` + * invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the debounced function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until to the next tick, similar to `setTimeout` with a timeout of `0`. + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `_.debounce` and `_.throttle`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to debounce. + * @param {number} [wait=0] The number of milliseconds to delay. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=false] + * Specify invoking on the leading edge of the timeout. + * @param {number} [options.maxWait] + * The maximum time `func` is allowed to be delayed before it's invoked. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new debounced function. + * @example + * + * // Avoid costly calculations while the window size is in flux. + * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); + * + * // Invoke `sendMail` when clicked, debouncing subsequent calls. + * jQuery(element).on('click', _.debounce(sendMail, 300, { + * 'leading': true, + * 'trailing': false + * })); + * + * // Ensure `batchLog` is invoked once after 1 second of debounced calls. + * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); + * var source = new EventSource('/stream'); + * jQuery(source).on('message', debounced); + * + * // Cancel the trailing debounced invocation. + * jQuery(window).on('popstate', debounced.cancel); + */function debounce(func,wait,options){var lastArgs,lastThis,maxWait,result,timerId,lastCallTime,lastInvokeTime=0,leading=false,maxing=false,trailing=true;if(typeof func!='function'){throw new TypeError(FUNC_ERROR_TEXT);}wait=toNumber(wait)||0;if(isObject(options)){leading=!!options.leading;maxing='maxWait'in options;maxWait=maxing?nativeMax(toNumber(options.maxWait)||0,wait):maxWait;trailing='trailing'in options?!!options.trailing:trailing;}function invokeFunc(time){var args=lastArgs,thisArg=lastThis;lastArgs=lastThis=undefined$1;lastInvokeTime=time;result=func.apply(thisArg,args);return result;}function leadingEdge(time){// Reset any `maxWait` timer. + lastInvokeTime=time;// Start the timer for the trailing edge. + timerId=setTimeout(timerExpired,wait);// Invoke the leading edge. + return leading?invokeFunc(time):result;}function remainingWait(time){var timeSinceLastCall=time-lastCallTime,timeSinceLastInvoke=time-lastInvokeTime,timeWaiting=wait-timeSinceLastCall;return maxing?nativeMin(timeWaiting,maxWait-timeSinceLastInvoke):timeWaiting;}function shouldInvoke(time){var timeSinceLastCall=time-lastCallTime,timeSinceLastInvoke=time-lastInvokeTime;// Either this is the first call, activity has stopped and we're at the + // trailing edge, the system time has gone backwards and we're treating + // it as the trailing edge, or we've hit the `maxWait` limit. + return lastCallTime===undefined$1||timeSinceLastCall>=wait||timeSinceLastCall<0||maxing&&timeSinceLastInvoke>=maxWait;}function timerExpired(){var time=now();if(shouldInvoke(time)){return trailingEdge(time);}// Restart the timer. + timerId=setTimeout(timerExpired,remainingWait(time));}function trailingEdge(time){timerId=undefined$1;// Only invoke if we have `lastArgs` which means `func` has been + // debounced at least once. + if(trailing&&lastArgs){return invokeFunc(time);}lastArgs=lastThis=undefined$1;return result;}function cancel(){if(timerId!==undefined$1){clearTimeout(timerId);}lastInvokeTime=0;lastArgs=lastCallTime=lastThis=timerId=undefined$1;}function flush(){return timerId===undefined$1?result:trailingEdge(now());}function debounced(){var time=now(),isInvoking=shouldInvoke(time);lastArgs=arguments;lastThis=this;lastCallTime=time;if(isInvoking){if(timerId===undefined$1){return leadingEdge(lastCallTime);}if(maxing){// Handle invocations in a tight loop. + clearTimeout(timerId);timerId=setTimeout(timerExpired,wait);return invokeFunc(lastCallTime);}}if(timerId===undefined$1){timerId=setTimeout(timerExpired,wait);}return result;}debounced.cancel=cancel;debounced.flush=flush;return debounced;}/** + * Defers invoking the `func` until the current call stack has cleared. Any + * additional arguments are provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to defer. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.defer(function(text) { + * console.log(text); + * }, 'deferred'); + * // => Logs 'deferred' after one millisecond. + */var defer=baseRest(function(func,args){return baseDelay(func,1,args);});/** + * Invokes `func` after `wait` milliseconds. Any additional arguments are + * provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.delay(function(text) { + * console.log(text); + * }, 1000, 'later'); + * // => Logs 'later' after one second. + */var delay=baseRest(function(func,wait,args){return baseDelay(func,toNumber(wait)||0,args);});/** + * Creates a function that invokes `func` with arguments reversed. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Function + * @param {Function} func The function to flip arguments for. + * @returns {Function} Returns the new flipped function. + * @example + * + * var flipped = _.flip(function() { + * return _.toArray(arguments); + * }); + * + * flipped('a', 'b', 'c', 'd'); + * // => ['d', 'c', 'b', 'a'] + */function flip(func){return createWrap(func,WRAP_FLIP_FLAG);}/** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided, it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is used as the map cache key. The `func` + * is invoked with the `this` binding of the memoized function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the + * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) + * method interface of `clear`, `delete`, `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoized function. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * var other = { 'c': 3, 'd': 4 }; + * + * var values = _.memoize(_.values); + * values(object); + * // => [1, 2] + * + * values(other); + * // => [3, 4] + * + * object.a = 2; + * values(object); + * // => [1, 2] + * + * // Modify the result cache. + * values.cache.set(object, ['a', 'b']); + * values(object); + * // => ['a', 'b'] + * + * // Replace `_.memoize.Cache`. + * _.memoize.Cache = WeakMap; + */function memoize(func,resolver){if(typeof func!='function'||resolver!=null&&typeof resolver!='function'){throw new TypeError(FUNC_ERROR_TEXT);}var memoized=function(){var args=arguments,key=resolver?resolver.apply(this,args):args[0],cache=memoized.cache;if(cache.has(key)){return cache.get(key);}var result=func.apply(this,args);memoized.cache=cache.set(key,result)||cache;return result;};memoized.cache=new(memoize.Cache||MapCache)();return memoized;}// Expose `MapCache`. + memoize.Cache=MapCache;/** + * Creates a function that negates the result of the predicate `func`. The + * `func` predicate is invoked with the `this` binding and arguments of the + * created function. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} predicate The predicate to negate. + * @returns {Function} Returns the new negated function. + * @example + * + * function isEven(n) { + * return n % 2 == 0; + * } + * + * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); + * // => [1, 3, 5] + */function negate(predicate){if(typeof predicate!='function'){throw new TypeError(FUNC_ERROR_TEXT);}return function(){var args=arguments;switch(args.length){case 0:return !predicate.call(this);case 1:return !predicate.call(this,args[0]);case 2:return !predicate.call(this,args[0],args[1]);case 3:return !predicate.call(this,args[0],args[1],args[2]);}return !predicate.apply(this,args);};}/** + * Creates a function that is restricted to invoking `func` once. Repeat calls + * to the function return the value of the first invocation. The `func` is + * invoked with the `this` binding and arguments of the created function. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var initialize = _.once(createApplication); + * initialize(); + * initialize(); + * // => `createApplication` is invoked once + */function once(func){return before(2,func);}/** + * Creates a function that invokes `func` with its arguments transformed. + * + * @static + * @since 4.0.0 + * @memberOf _ + * @category Function + * @param {Function} func The function to wrap. + * @param {...(Function|Function[])} [transforms=[_.identity]] + * The argument transforms. + * @returns {Function} Returns the new function. + * @example + * + * function doubled(n) { + * return n * 2; + * } + * + * function square(n) { + * return n * n; + * } + * + * var func = _.overArgs(function(x, y) { + * return [x, y]; + * }, [square, doubled]); + * + * func(9, 3); + * // => [81, 6] + * + * func(10, 5); + * // => [100, 10] + */var overArgs=castRest(function(func,transforms){transforms=transforms.length==1&&isArray(transforms[0])?arrayMap(transforms[0],baseUnary(getIteratee())):arrayMap(baseFlatten(transforms,1),baseUnary(getIteratee()));var funcsLength=transforms.length;return baseRest(function(args){var index=-1,length=nativeMin(args.length,funcsLength);while(++index 'hello fred' + * + * // Partially applied with placeholders. + * var greetFred = _.partial(greet, _, 'fred'); + * greetFred('hi'); + * // => 'hi fred' + */var partial=baseRest(function(func,partials){var holders=replaceHolders(partials,getHolder(partial));return createWrap(func,WRAP_PARTIAL_FLAG,undefined$1,partials,holders);});/** + * This method is like `_.partial` except that partially applied arguments + * are appended to the arguments it receives. + * + * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * **Note:** This method doesn't set the "length" property of partially + * applied functions. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Function + * @param {Function} func The function to partially apply arguments to. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new partially applied function. + * @example + * + * function greet(greeting, name) { + * return greeting + ' ' + name; + * } + * + * var greetFred = _.partialRight(greet, 'fred'); + * greetFred('hi'); + * // => 'hi fred' + * + * // Partially applied with placeholders. + * var sayHelloTo = _.partialRight(greet, 'hello', _); + * sayHelloTo('fred'); + * // => 'hello fred' + */var partialRight=baseRest(function(func,partials){var holders=replaceHolders(partials,getHolder(partialRight));return createWrap(func,WRAP_PARTIAL_RIGHT_FLAG,undefined$1,partials,holders);});/** + * Creates a function that invokes `func` with arguments arranged according + * to the specified `indexes` where the argument value at the first index is + * provided as the first argument, the argument value at the second index is + * provided as the second argument, and so on. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} func The function to rearrange arguments for. + * @param {...(number|number[])} indexes The arranged argument indexes. + * @returns {Function} Returns the new function. + * @example + * + * var rearged = _.rearg(function(a, b, c) { + * return [a, b, c]; + * }, [2, 0, 1]); + * + * rearged('b', 'c', 'a') + * // => ['a', 'b', 'c'] + */var rearg=flatRest(function(func,indexes){return createWrap(func,WRAP_REARG_FLAG,undefined$1,undefined$1,undefined$1,indexes);});/** + * Creates a function that invokes `func` with the `this` binding of the + * created function and arguments from `start` and beyond provided as + * an array. + * + * **Note:** This method is based on the + * [rest parameter](https://mdn.io/rest_parameters). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Function + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.rest(function(what, names) { + * return what + ' ' + _.initial(names).join(', ') + + * (_.size(names) > 1 ? ', & ' : '') + _.last(names); + * }); + * + * say('hello', 'fred', 'barney', 'pebbles'); + * // => 'hello fred, barney, & pebbles' + */function rest(func,start){if(typeof func!='function'){throw new TypeError(FUNC_ERROR_TEXT);}start=start===undefined$1?start:toInteger(start);return baseRest(func,start);}/** + * Creates a function that invokes `func` with the `this` binding of the + * create function and an array of arguments much like + * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply). + * + * **Note:** This method is based on the + * [spread operator](https://mdn.io/spread_operator). + * + * @static + * @memberOf _ + * @since 3.2.0 + * @category Function + * @param {Function} func The function to spread arguments over. + * @param {number} [start=0] The start position of the spread. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.spread(function(who, what) { + * return who + ' says ' + what; + * }); + * + * say(['fred', 'hello']); + * // => 'fred says hello' + * + * var numbers = Promise.all([ + * Promise.resolve(40), + * Promise.resolve(36) + * ]); + * + * numbers.then(_.spread(function(x, y) { + * return x + y; + * })); + * // => a Promise of 76 + */function spread(func,start){if(typeof func!='function'){throw new TypeError(FUNC_ERROR_TEXT);}start=start==null?0:nativeMax(toInteger(start),0);return baseRest(function(args){var array=args[start],otherArgs=castSlice(args,0,start);if(array){arrayPush(otherArgs,array);}return apply(func,this,otherArgs);});}/** + * Creates a throttled function that only invokes `func` at most once per + * every `wait` milliseconds. The throttled function comes with a `cancel` + * method to cancel delayed `func` invocations and a `flush` method to + * immediately invoke them. Provide `options` to indicate whether `func` + * should be invoked on the leading and/or trailing edge of the `wait` + * timeout. The `func` is invoked with the last arguments provided to the + * throttled function. Subsequent calls to the throttled function return the + * result of the last `func` invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the throttled function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until to the next tick, similar to `setTimeout` with a timeout of `0`. + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `_.throttle` and `_.debounce`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to throttle. + * @param {number} [wait=0] The number of milliseconds to throttle invocations to. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=true] + * Specify invoking on the leading edge of the timeout. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new throttled function. + * @example + * + * // Avoid excessively updating the position while scrolling. + * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); + * + * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes. + * var throttled = _.throttle(renewToken, 300000, { 'trailing': false }); + * jQuery(element).on('click', throttled); + * + * // Cancel the trailing throttled invocation. + * jQuery(window).on('popstate', throttled.cancel); + */function throttle(func,wait,options){var leading=true,trailing=true;if(typeof func!='function'){throw new TypeError(FUNC_ERROR_TEXT);}if(isObject(options)){leading='leading'in options?!!options.leading:leading;trailing='trailing'in options?!!options.trailing:trailing;}return debounce(func,wait,{'leading':leading,'maxWait':wait,'trailing':trailing});}/** + * Creates a function that accepts up to one argument, ignoring any + * additional arguments. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Function + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + * @example + * + * _.map(['6', '8', '10'], _.unary(parseInt)); + * // => [6, 8, 10] + */function unary(func){return ary(func,1);}/** + * Creates a function that provides `value` to `wrapper` as its first + * argument. Any additional arguments provided to the function are appended + * to those provided to the `wrapper`. The wrapper is invoked with the `this` + * binding of the created function. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {*} value The value to wrap. + * @param {Function} [wrapper=identity] The wrapper function. + * @returns {Function} Returns the new function. + * @example + * + * var p = _.wrap(_.escape, function(func, text) { + * return '

' + func(text) + '

'; + * }); + * + * p('fred, barney, & pebbles'); + * // => '

fred, barney, & pebbles

' + */function wrap(value,wrapper){return partial(castFunction(wrapper),value);}/*------------------------------------------------------------------------*/ /** + * Casts `value` as an array if it's not one. + * + * @static + * @memberOf _ + * @since 4.4.0 + * @category Lang + * @param {*} value The value to inspect. + * @returns {Array} Returns the cast array. + * @example + * + * _.castArray(1); + * // => [1] + * + * _.castArray({ 'a': 1 }); + * // => [{ 'a': 1 }] + * + * _.castArray('abc'); + * // => ['abc'] + * + * _.castArray(null); + * // => [null] + * + * _.castArray(undefined); + * // => [undefined] + * + * _.castArray(); + * // => [] + * + * var array = [1, 2, 3]; + * console.log(_.castArray(array) === array); + * // => true + */function castArray(){if(!arguments.length){return [];}var value=arguments[0];return isArray(value)?value:[value];}/** + * Creates a shallow clone of `value`. + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) + * and supports cloning arrays, array buffers, booleans, date objects, maps, + * numbers, `Object` objects, regexes, sets, strings, symbols, and typed + * arrays. The own enumerable properties of `arguments` objects are cloned + * as plain objects. An empty object is returned for uncloneable values such + * as error objects, functions, DOM nodes, and WeakMaps. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to clone. + * @returns {*} Returns the cloned value. + * @see _.cloneDeep + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var shallow = _.clone(objects); + * console.log(shallow[0] === objects[0]); + * // => true + */function clone(value){return baseClone(value,CLONE_SYMBOLS_FLAG);}/** + * This method is like `_.clone` except that it accepts `customizer` which + * is invoked to produce the cloned value. If `customizer` returns `undefined`, + * cloning is handled by the method instead. The `customizer` is invoked with + * up to four arguments; (value [, index|key, object, stack]). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to clone. + * @param {Function} [customizer] The function to customize cloning. + * @returns {*} Returns the cloned value. + * @see _.cloneDeepWith + * @example + * + * function customizer(value) { + * if (_.isElement(value)) { + * return value.cloneNode(false); + * } + * } + * + * var el = _.cloneWith(document.body, customizer); + * + * console.log(el === document.body); + * // => false + * console.log(el.nodeName); + * // => 'BODY' + * console.log(el.childNodes.length); + * // => 0 + */function cloneWith(value,customizer){customizer=typeof customizer=='function'?customizer:undefined$1;return baseClone(value,CLONE_SYMBOLS_FLAG,customizer);}/** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @see _.clone + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */function cloneDeep(value){return baseClone(value,CLONE_DEEP_FLAG|CLONE_SYMBOLS_FLAG);}/** + * This method is like `_.cloneWith` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @param {Function} [customizer] The function to customize cloning. + * @returns {*} Returns the deep cloned value. + * @see _.cloneWith + * @example + * + * function customizer(value) { + * if (_.isElement(value)) { + * return value.cloneNode(true); + * } + * } + * + * var el = _.cloneDeepWith(document.body, customizer); + * + * console.log(el === document.body); + * // => false + * console.log(el.nodeName); + * // => 'BODY' + * console.log(el.childNodes.length); + * // => 20 + */function cloneDeepWith(value,customizer){customizer=typeof customizer=='function'?customizer:undefined$1;return baseClone(value,CLONE_DEEP_FLAG|CLONE_SYMBOLS_FLAG,customizer);}/** + * Checks if `object` conforms to `source` by invoking the predicate + * properties of `source` with the corresponding property values of `object`. + * + * **Note:** This method is equivalent to `_.conforms` when `source` is + * partially applied. + * + * @static + * @memberOf _ + * @since 4.14.0 + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property predicates to conform to. + * @returns {boolean} Returns `true` if `object` conforms, else `false`. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * + * _.conformsTo(object, { 'b': function(n) { return n > 1; } }); + * // => true + * + * _.conformsTo(object, { 'b': function(n) { return n > 2; } }); + * // => false + */function conformsTo(object,source){return source==null||baseConformsTo(object,source,keys(source));}/** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */function eq(value,other){return value===other||value!==value&&other!==other;}/** + * Checks if `value` is greater than `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + * @see _.lt + * @example + * + * _.gt(3, 1); + * // => true + * + * _.gt(3, 3); + * // => false + * + * _.gt(1, 3); + * // => false + */var gt=createRelationalOperation(baseGt);/** + * Checks if `value` is greater than or equal to `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than or equal to + * `other`, else `false`. + * @see _.lte + * @example + * + * _.gte(3, 1); + * // => true + * + * _.gte(3, 3); + * // => true + * + * _.gte(1, 3); + * // => false + */var gte=createRelationalOperation(function(value,other){return value>=other;});/** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */var isArguments=baseIsArguments(function(){return arguments;}())?baseIsArguments:function(value){return isObjectLike(value)&&hasOwnProperty.call(value,'callee')&&!propertyIsEnumerable.call(value,'callee');};/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */var isArray=Array.isArray;/** + * Checks if `value` is classified as an `ArrayBuffer` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. + * @example + * + * _.isArrayBuffer(new ArrayBuffer(2)); + * // => true + * + * _.isArrayBuffer(new Array(2)); + * // => false + */var isArrayBuffer=nodeIsArrayBuffer?baseUnary(nodeIsArrayBuffer):baseIsArrayBuffer;/** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */function isArrayLike(value){return value!=null&&isLength(value.length)&&!isFunction(value);}/** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, + * else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */function isArrayLikeObject(value){return isObjectLike(value)&&isArrayLike(value);}/** + * Checks if `value` is classified as a boolean primitive or object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. + * @example + * + * _.isBoolean(false); + * // => true + * + * _.isBoolean(null); + * // => false + */function isBoolean(value){return value===true||value===false||isObjectLike(value)&&baseGetTag(value)==boolTag;}/** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */var isBuffer=nativeIsBuffer||stubFalse;/** + * Checks if `value` is classified as a `Date` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a date object, else `false`. + * @example + * + * _.isDate(new Date); + * // => true + * + * _.isDate('Mon April 23 2012'); + * // => false + */var isDate=nodeIsDate?baseUnary(nodeIsDate):baseIsDate;/** + * Checks if `value` is likely a DOM element. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`. + * @example + * + * _.isElement(document.body); + * // => true + * + * _.isElement(''); + * // => false + */function isElement(value){return isObjectLike(value)&&value.nodeType===1&&!isPlainObject(value);}/** + * Checks if `value` is an empty object, collection, map, or set. + * + * Objects are considered empty if they have no own enumerable string keyed + * properties. + * + * Array-like values such as `arguments` objects, arrays, buffers, strings, or + * jQuery-like collections are considered empty if they have a `length` of `0`. + * Similarly, maps and sets are considered empty if they have a `size` of `0`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is empty, else `false`. + * @example + * + * _.isEmpty(null); + * // => true + * + * _.isEmpty(true); + * // => true + * + * _.isEmpty(1); + * // => true + * + * _.isEmpty([1, 2, 3]); + * // => false + * + * _.isEmpty({ 'a': 1 }); + * // => false + */function isEmpty(value){if(value==null){return true;}if(isArrayLike(value)&&(isArray(value)||typeof value=='string'||typeof value.splice=='function'||isBuffer(value)||isTypedArray(value)||isArguments(value))){return !value.length;}var tag=getTag(value);if(tag==mapTag||tag==setTag){return !value.size;}if(isPrototype(value)){return !baseKeys(value).length;}for(var key in value){if(hasOwnProperty.call(value,key)){return false;}}return true;}/** + * Performs a deep comparison between two values to determine if they are + * equivalent. + * + * **Note:** This method supports comparing arrays, array buffers, booleans, + * date objects, error objects, maps, numbers, `Object` objects, regexes, + * sets, strings, symbols, and typed arrays. `Object` objects are compared + * by their own, not inherited, enumerable properties. Functions and DOM + * nodes are compared by strict equality, i.e. `===`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.isEqual(object, other); + * // => true + * + * object === other; + * // => false + */function isEqual(value,other){return baseIsEqual(value,other);}/** + * This method is like `_.isEqual` except that it accepts `customizer` which + * is invoked to compare values. If `customizer` returns `undefined`, comparisons + * are handled by the method instead. The `customizer` is invoked with up to + * six arguments: (objValue, othValue [, index|key, object, other, stack]). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * function isGreeting(value) { + * return /^h(?:i|ello)$/.test(value); + * } + * + * function customizer(objValue, othValue) { + * if (isGreeting(objValue) && isGreeting(othValue)) { + * return true; + * } + * } + * + * var array = ['hello', 'goodbye']; + * var other = ['hi', 'goodbye']; + * + * _.isEqualWith(array, other, customizer); + * // => true + */function isEqualWith(value,other,customizer){customizer=typeof customizer=='function'?customizer:undefined$1;var result=customizer?customizer(value,other):undefined$1;return result===undefined$1?baseIsEqual(value,other,undefined$1,customizer):!!result;}/** + * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, + * `SyntaxError`, `TypeError`, or `URIError` object. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an error object, else `false`. + * @example + * + * _.isError(new Error); + * // => true + * + * _.isError(Error); + * // => false + */function isError(value){if(!isObjectLike(value)){return false;}var tag=baseGetTag(value);return tag==errorTag||tag==domExcTag||typeof value.message=='string'&&typeof value.name=='string'&&!isPlainObject(value);}/** + * Checks if `value` is a finite primitive number. + * + * **Note:** This method is based on + * [`Number.isFinite`](https://mdn.io/Number/isFinite). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. + * @example + * + * _.isFinite(3); + * // => true + * + * _.isFinite(Number.MIN_VALUE); + * // => true + * + * _.isFinite(Infinity); + * // => false + * + * _.isFinite('3'); + * // => false + */function isFinite(value){return typeof value=='number'&&nativeIsFinite(value);}/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */function isFunction(value){if(!isObject(value)){return false;}// The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag=baseGetTag(value);return tag==funcTag||tag==genTag||tag==asyncTag||tag==proxyTag;}/** + * Checks if `value` is an integer. + * + * **Note:** This method is based on + * [`Number.isInteger`](https://mdn.io/Number/isInteger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an integer, else `false`. + * @example + * + * _.isInteger(3); + * // => true + * + * _.isInteger(Number.MIN_VALUE); + * // => false + * + * _.isInteger(Infinity); + * // => false + * + * _.isInteger('3'); + * // => false + */function isInteger(value){return typeof value=='number'&&value==toInteger(value);}/** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */function isLength(value){return typeof value=='number'&&value>-1&&value%1==0&&value<=MAX_SAFE_INTEGER;}/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */function isObject(value){var type=typeof value;return value!=null&&(type=='object'||type=='function');}/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */function isObjectLike(value){return value!=null&&typeof value=='object';}/** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */var isMap=nodeIsMap?baseUnary(nodeIsMap):baseIsMap;/** + * Performs a partial deep comparison between `object` and `source` to + * determine if `object` contains equivalent property values. + * + * **Note:** This method is equivalent to `_.matches` when `source` is + * partially applied. + * + * Partial comparisons will match empty array and empty object `source` + * values against any array or object value, respectively. See `_.isEqual` + * for a list of supported value comparisons. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * + * _.isMatch(object, { 'b': 2 }); + * // => true + * + * _.isMatch(object, { 'b': 1 }); + * // => false + */function isMatch(object,source){return object===source||baseIsMatch(object,source,getMatchData(source));}/** + * This method is like `_.isMatch` except that it accepts `customizer` which + * is invoked to compare values. If `customizer` returns `undefined`, comparisons + * are handled by the method instead. The `customizer` is invoked with five + * arguments: (objValue, srcValue, index|key, object, source). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + * @example + * + * function isGreeting(value) { + * return /^h(?:i|ello)$/.test(value); + * } + * + * function customizer(objValue, srcValue) { + * if (isGreeting(objValue) && isGreeting(srcValue)) { + * return true; + * } + * } + * + * var object = { 'greeting': 'hello' }; + * var source = { 'greeting': 'hi' }; + * + * _.isMatchWith(object, source, customizer); + * // => true + */function isMatchWith(object,source,customizer){customizer=typeof customizer=='function'?customizer:undefined$1;return baseIsMatch(object,source,getMatchData(source),customizer);}/** + * Checks if `value` is `NaN`. + * + * **Note:** This method is based on + * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as + * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for + * `undefined` and other non-number values. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + * @example + * + * _.isNaN(NaN); + * // => true + * + * _.isNaN(new Number(NaN)); + * // => true + * + * isNaN(undefined); + * // => true + * + * _.isNaN(undefined); + * // => false + */function isNaN(value){// An `NaN` primitive is the only value that is not equal to itself. + // Perform the `toStringTag` check first to avoid errors with some + // ActiveX objects in IE. + return isNumber(value)&&value!=+value;}/** + * Checks if `value` is a pristine native function. + * + * **Note:** This method can't reliably detect native functions in the presence + * of the core-js package because core-js circumvents this kind of detection. + * Despite multiple requests, the core-js maintainer has made it clear: any + * attempt to fix the detection will be obstructed. As a result, we're left + * with little choice but to throw an error. Unfortunately, this also affects + * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill), + * which rely on core-js. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + * @example + * + * _.isNative(Array.prototype.push); + * // => true + * + * _.isNative(_); + * // => false + */function isNative(value){if(isMaskable(value)){throw new Error(CORE_ERROR_TEXT);}return baseIsNative(value);}/** + * Checks if `value` is `null`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `null`, else `false`. + * @example + * + * _.isNull(null); + * // => true + * + * _.isNull(void 0); + * // => false + */function isNull(value){return value===null;}/** + * Checks if `value` is `null` or `undefined`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is nullish, else `false`. + * @example + * + * _.isNil(null); + * // => true + * + * _.isNil(void 0); + * // => true + * + * _.isNil(NaN); + * // => false + */function isNil(value){return value==null;}/** + * Checks if `value` is classified as a `Number` primitive or object. + * + * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are + * classified as numbers, use the `_.isFinite` method. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a number, else `false`. + * @example + * + * _.isNumber(3); + * // => true + * + * _.isNumber(Number.MIN_VALUE); + * // => true + * + * _.isNumber(Infinity); + * // => true + * + * _.isNumber('3'); + * // => false + */function isNumber(value){return typeof value=='number'||isObjectLike(value)&&baseGetTag(value)==numberTag;}/** + * Checks if `value` is a plain object, that is, an object created by the + * `Object` constructor or one with a `[[Prototype]]` of `null`. + * + * @static + * @memberOf _ + * @since 0.8.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * _.isPlainObject(new Foo); + * // => false + * + * _.isPlainObject([1, 2, 3]); + * // => false + * + * _.isPlainObject({ 'x': 0, 'y': 0 }); + * // => true + * + * _.isPlainObject(Object.create(null)); + * // => true + */function isPlainObject(value){if(!isObjectLike(value)||baseGetTag(value)!=objectTag){return false;}var proto=getPrototype(value);if(proto===null){return true;}var Ctor=hasOwnProperty.call(proto,'constructor')&&proto.constructor;return typeof Ctor=='function'&&Ctor instanceof Ctor&&funcToString.call(Ctor)==objectCtorString;}/** + * Checks if `value` is classified as a `RegExp` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + * @example + * + * _.isRegExp(/abc/); + * // => true + * + * _.isRegExp('/abc/'); + * // => false + */var isRegExp=nodeIsRegExp?baseUnary(nodeIsRegExp):baseIsRegExp;/** + * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754 + * double precision number which isn't the result of a rounded unsafe integer. + * + * **Note:** This method is based on + * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`. + * @example + * + * _.isSafeInteger(3); + * // => true + * + * _.isSafeInteger(Number.MIN_VALUE); + * // => false + * + * _.isSafeInteger(Infinity); + * // => false + * + * _.isSafeInteger('3'); + * // => false + */function isSafeInteger(value){return isInteger(value)&&value>=-MAX_SAFE_INTEGER&&value<=MAX_SAFE_INTEGER;}/** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */var isSet=nodeIsSet?baseUnary(nodeIsSet):baseIsSet;/** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */function isString(value){return typeof value=='string'||!isArray(value)&&isObjectLike(value)&&baseGetTag(value)==stringTag;}/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */function isSymbol(value){return typeof value=='symbol'||isObjectLike(value)&&baseGetTag(value)==symbolTag;}/** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */var isTypedArray=nodeIsTypedArray?baseUnary(nodeIsTypedArray):baseIsTypedArray;/** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */function isUndefined(value){return value===undefined$1;}/** + * Checks if `value` is classified as a `WeakMap` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a weak map, else `false`. + * @example + * + * _.isWeakMap(new WeakMap); + * // => true + * + * _.isWeakMap(new Map); + * // => false + */function isWeakMap(value){return isObjectLike(value)&&getTag(value)==weakMapTag;}/** + * Checks if `value` is classified as a `WeakSet` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a weak set, else `false`. + * @example + * + * _.isWeakSet(new WeakSet); + * // => true + * + * _.isWeakSet(new Set); + * // => false + */function isWeakSet(value){return isObjectLike(value)&&baseGetTag(value)==weakSetTag;}/** + * Checks if `value` is less than `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + * @see _.gt + * @example + * + * _.lt(1, 3); + * // => true + * + * _.lt(3, 3); + * // => false + * + * _.lt(3, 1); + * // => false + */var lt=createRelationalOperation(baseLt);/** + * Checks if `value` is less than or equal to `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than or equal to + * `other`, else `false`. + * @see _.gte + * @example + * + * _.lte(1, 3); + * // => true + * + * _.lte(3, 3); + * // => true + * + * _.lte(3, 1); + * // => false + */var lte=createRelationalOperation(function(value,other){return value<=other;});/** + * Converts `value` to an array. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to convert. + * @returns {Array} Returns the converted array. + * @example + * + * _.toArray({ 'a': 1, 'b': 2 }); + * // => [1, 2] + * + * _.toArray('abc'); + * // => ['a', 'b', 'c'] + * + * _.toArray(1); + * // => [] + * + * _.toArray(null); + * // => [] + */function toArray(value){if(!value){return [];}if(isArrayLike(value)){return isString(value)?stringToArray(value):copyArray(value);}if(symIterator&&value[symIterator]){return iteratorToArray(value[symIterator]());}var tag=getTag(value),func=tag==mapTag?mapToArray:tag==setTag?setToArray:values;return func(value);}/** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */function toFinite(value){if(!value){return value===0?value:0;}value=toNumber(value);if(value===INFINITY||value===-INFINITY){var sign=value<0?-1:1;return sign*MAX_INTEGER;}return value===value?value:0;}/** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */function toInteger(value){var result=toFinite(value),remainder=result%1;return result===result?remainder?result-remainder:result:0;}/** + * Converts `value` to an integer suitable for use as the length of an + * array-like object. + * + * **Note:** This method is based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toLength(3.2); + * // => 3 + * + * _.toLength(Number.MIN_VALUE); + * // => 0 + * + * _.toLength(Infinity); + * // => 4294967295 + * + * _.toLength('3.2'); + * // => 3 + */function toLength(value){return value?baseClamp(toInteger(value),0,MAX_ARRAY_LENGTH):0;}/** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */function toNumber(value){if(typeof value=='number'){return value;}if(isSymbol(value)){return NAN;}if(isObject(value)){var other=typeof value.valueOf=='function'?value.valueOf():value;value=isObject(other)?other+'':other;}if(typeof value!='string'){return value===0?value:+value;}value=baseTrim(value);var isBinary=reIsBinary.test(value);return isBinary||reIsOctal.test(value)?freeParseInt(value.slice(2),isBinary?2:8):reIsBadHex.test(value)?NAN:+value;}/** + * Converts `value` to a plain object flattening inherited enumerable string + * keyed properties of `value` to own properties of the plain object. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {Object} Returns the converted plain object. + * @example + * + * function Foo() { + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.assign({ 'a': 1 }, new Foo); + * // => { 'a': 1, 'b': 2 } + * + * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); + * // => { 'a': 1, 'b': 2, 'c': 3 } + */function toPlainObject(value){return copyObject(value,keysIn(value));}/** + * Converts `value` to a safe integer. A safe integer can be compared and + * represented correctly. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toSafeInteger(3.2); + * // => 3 + * + * _.toSafeInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toSafeInteger(Infinity); + * // => 9007199254740991 + * + * _.toSafeInteger('3.2'); + * // => 3 + */function toSafeInteger(value){return value?baseClamp(toInteger(value),-MAX_SAFE_INTEGER,MAX_SAFE_INTEGER):value===0?value:0;}/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */function toString(value){return value==null?'':baseToString(value);}/*------------------------------------------------------------------------*/ /** + * Assigns own enumerable string keyed properties of source objects to the + * destination object. Source objects are applied from left to right. + * Subsequent sources overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object` and is loosely based on + * [`Object.assign`](https://mdn.io/Object/assign). + * + * @static + * @memberOf _ + * @since 0.10.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assignIn + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assign({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'c': 3 } + */var assign=createAssigner(function(object,source){if(isPrototype(source)||isArrayLike(source)){copyObject(source,keys(source),object);return;}for(var key in source){if(hasOwnProperty.call(source,key)){assignValue(object,key,source[key]);}}});/** + * This method is like `_.assign` except that it iterates over own and + * inherited source properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias extend + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assign + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assignIn({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } + */var assignIn=createAssigner(function(object,source){copyObject(source,keysIn(source),object);});/** + * This method is like `_.assignIn` except that it accepts `customizer` + * which is invoked to produce the assigned values. If `customizer` returns + * `undefined`, assignment is handled by the method instead. The `customizer` + * is invoked with five arguments: (objValue, srcValue, key, object, source). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias extendWith + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @see _.assignWith + * @example + * + * function customizer(objValue, srcValue) { + * return _.isUndefined(objValue) ? srcValue : objValue; + * } + * + * var defaults = _.partialRight(_.assignInWith, customizer); + * + * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */var assignInWith=createAssigner(function(object,source,srcIndex,customizer){copyObject(source,keysIn(source),object,customizer);});/** + * This method is like `_.assign` except that it accepts `customizer` + * which is invoked to produce the assigned values. If `customizer` returns + * `undefined`, assignment is handled by the method instead. The `customizer` + * is invoked with five arguments: (objValue, srcValue, key, object, source). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @see _.assignInWith + * @example + * + * function customizer(objValue, srcValue) { + * return _.isUndefined(objValue) ? srcValue : objValue; + * } + * + * var defaults = _.partialRight(_.assignWith, customizer); + * + * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */var assignWith=createAssigner(function(object,source,srcIndex,customizer){copyObject(source,keys(source),object,customizer);});/** + * Creates an array of values corresponding to `paths` of `object`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Array} Returns the picked values. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; + * + * _.at(object, ['a[0].b.c', 'a[1]']); + * // => [3, 4] + */var at=flatRest(baseAt);/** + * Creates an object that inherits from the `prototype` object. If a + * `properties` object is given, its own enumerable string keyed properties + * are assigned to the created object. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Object + * @param {Object} prototype The object to inherit from. + * @param {Object} [properties] The properties to assign to the object. + * @returns {Object} Returns the new object. + * @example + * + * function Shape() { + * this.x = 0; + * this.y = 0; + * } + * + * function Circle() { + * Shape.call(this); + * } + * + * Circle.prototype = _.create(Shape.prototype, { + * 'constructor': Circle + * }); + * + * var circle = new Circle; + * circle instanceof Circle; + * // => true + * + * circle instanceof Shape; + * // => true + */function create(prototype,properties){var result=baseCreate(prototype);return properties==null?result:baseAssign(result,properties);}/** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */var defaults=baseRest(function(object,sources){object=Object(object);var index=-1;var length=sources.length;var guard=length>2?sources[2]:undefined$1;if(guard&&isIterateeCall(sources[0],sources[1],guard)){length=1;}while(++index { 'a': { 'b': 2, 'c': 3 } } + */var defaultsDeep=baseRest(function(args){args.push(undefined$1,customDefaultsMerge);return apply(mergeWith,undefined$1,args);});/** + * This method is like `_.find` except that it returns the key of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Object + * @param {Object} object The object to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {string|undefined} Returns the key of the matched element, + * else `undefined`. + * @example + * + * var users = { + * 'barney': { 'age': 36, 'active': true }, + * 'fred': { 'age': 40, 'active': false }, + * 'pebbles': { 'age': 1, 'active': true } + * }; + * + * _.findKey(users, function(o) { return o.age < 40; }); + * // => 'barney' (iteration order is not guaranteed) + * + * // The `_.matches` iteratee shorthand. + * _.findKey(users, { 'age': 1, 'active': true }); + * // => 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findKey(users, ['active', false]); + * // => 'fred' + * + * // The `_.property` iteratee shorthand. + * _.findKey(users, 'active'); + * // => 'barney' + */function findKey(object,predicate){return baseFindKey(object,getIteratee(predicate,3),baseForOwn);}/** + * This method is like `_.findKey` except that it iterates over elements of + * a collection in the opposite order. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Object + * @param {Object} object The object to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {string|undefined} Returns the key of the matched element, + * else `undefined`. + * @example + * + * var users = { + * 'barney': { 'age': 36, 'active': true }, + * 'fred': { 'age': 40, 'active': false }, + * 'pebbles': { 'age': 1, 'active': true } + * }; + * + * _.findLastKey(users, function(o) { return o.age < 40; }); + * // => returns 'pebbles' assuming `_.findKey` returns 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.findLastKey(users, { 'age': 36, 'active': true }); + * // => 'barney' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findLastKey(users, ['active', false]); + * // => 'fred' + * + * // The `_.property` iteratee shorthand. + * _.findLastKey(users, 'active'); + * // => 'pebbles' + */function findLastKey(object,predicate){return baseFindKey(object,getIteratee(predicate,3),baseForOwnRight);}/** + * Iterates over own and inherited enumerable string keyed properties of an + * object and invokes `iteratee` for each property. The iteratee is invoked + * with three arguments: (value, key, object). Iteratee functions may exit + * iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forInRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). + */function forIn(object,iteratee){return object==null?object:baseFor(object,getIteratee(iteratee,3),keysIn);}/** + * This method is like `_.forIn` except that it iterates over properties of + * `object` in the opposite order. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forIn + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forInRight(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'. + */function forInRight(object,iteratee){return object==null?object:baseForRight(object,getIteratee(iteratee,3),keysIn);}/** + * Iterates over own enumerable string keyed properties of an object and + * invokes `iteratee` for each property. The iteratee is invoked with three + * arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwnRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */function forOwn(object,iteratee){return object&&baseForOwn(object,getIteratee(iteratee,3));}/** + * This method is like `_.forOwn` except that it iterates over properties of + * `object` in the opposite order. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwn + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwnRight(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'. + */function forOwnRight(object,iteratee){return object&&baseForOwnRight(object,getIteratee(iteratee,3));}/** + * Creates an array of function property names from own enumerable properties + * of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to inspect. + * @returns {Array} Returns the function names. + * @see _.functionsIn + * @example + * + * function Foo() { + * this.a = _.constant('a'); + * this.b = _.constant('b'); + * } + * + * Foo.prototype.c = _.constant('c'); + * + * _.functions(new Foo); + * // => ['a', 'b'] + */function functions(object){return object==null?[]:baseFunctions(object,keys(object));}/** + * Creates an array of function property names from own and inherited + * enumerable properties of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to inspect. + * @returns {Array} Returns the function names. + * @see _.functions + * @example + * + * function Foo() { + * this.a = _.constant('a'); + * this.b = _.constant('b'); + * } + * + * Foo.prototype.c = _.constant('c'); + * + * _.functionsIn(new Foo); + * // => ['a', 'b', 'c'] + */function functionsIn(object){return object==null?[]:baseFunctions(object,keysIn(object));}/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */function get(object,path,defaultValue){var result=object==null?undefined$1:baseGet(object,path);return result===undefined$1?defaultValue:result;}/** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */function has(object,path){return object!=null&&hasPath(object,path,baseHas);}/** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */function hasIn(object,path){return object!=null&&hasPath(object,path,baseHasIn);}/** + * Creates an object composed of the inverted keys and values of `object`. + * If `object` contains duplicate values, subsequent values overwrite + * property assignments of previous values. + * + * @static + * @memberOf _ + * @since 0.7.0 + * @category Object + * @param {Object} object The object to invert. + * @returns {Object} Returns the new inverted object. + * @example + * + * var object = { 'a': 1, 'b': 2, 'c': 1 }; + * + * _.invert(object); + * // => { '1': 'c', '2': 'b' } + */var invert=createInverter(function(result,value,key){if(value!=null&&typeof value.toString!='function'){value=nativeObjectToString.call(value);}result[value]=key;},constant(identity));/** + * This method is like `_.invert` except that the inverted object is generated + * from the results of running each element of `object` thru `iteratee`. The + * corresponding inverted value of each inverted key is an array of keys + * responsible for generating the inverted value. The iteratee is invoked + * with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.1.0 + * @category Object + * @param {Object} object The object to invert. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Object} Returns the new inverted object. + * @example + * + * var object = { 'a': 1, 'b': 2, 'c': 1 }; + * + * _.invertBy(object); + * // => { '1': ['a', 'c'], '2': ['b'] } + * + * _.invertBy(object, function(value) { + * return 'group' + value; + * }); + * // => { 'group1': ['a', 'c'], 'group2': ['b'] } + */var invertBy=createInverter(function(result,value,key){if(value!=null&&typeof value.toString!='function'){value=nativeObjectToString.call(value);}if(hasOwnProperty.call(result,value)){result[value].push(key);}else {result[value]=[key];}},getIteratee);/** + * Invokes the method at `path` of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the method to invoke. + * @param {...*} [args] The arguments to invoke the method with. + * @returns {*} Returns the result of the invoked method. + * @example + * + * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] }; + * + * _.invoke(object, 'a[0].b.c.slice', 1, 3); + * // => [2, 3] + */var invoke=baseRest(baseInvoke);/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */function keys(object){return isArrayLike(object)?arrayLikeKeys(object):baseKeys(object);}/** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */function keysIn(object){return isArrayLike(object)?arrayLikeKeys(object,true):baseKeysIn(object);}/** + * The opposite of `_.mapValues`; this method creates an object with the + * same values as `object` and keys generated by running each own enumerable + * string keyed property of `object` thru `iteratee`. The iteratee is invoked + * with three arguments: (value, key, object). + * + * @static + * @memberOf _ + * @since 3.8.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapValues + * @example + * + * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) { + * return key + value; + * }); + * // => { 'a1': 1, 'b2': 2 } + */function mapKeys(object,iteratee){var result={};iteratee=getIteratee(iteratee,3);baseForOwn(object,function(value,key,object){baseAssignValue(result,iteratee(value,key,object),value);});return result;}/** + * Creates an object with the same keys as `object` and values generated + * by running each own enumerable string keyed property of `object` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, key, object). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapKeys + * @example + * + * var users = { + * 'fred': { 'user': 'fred', 'age': 40 }, + * 'pebbles': { 'user': 'pebbles', 'age': 1 } + * }; + * + * _.mapValues(users, function(o) { return o.age; }); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + * + * // The `_.property` iteratee shorthand. + * _.mapValues(users, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + */function mapValues(object,iteratee){var result={};iteratee=getIteratee(iteratee,3);baseForOwn(object,function(value,key,object){baseAssignValue(result,key,iteratee(value,key,object));});return result;}/** + * This method is like `_.assign` except that it recursively merges own and + * inherited enumerable string keyed properties of source objects into the + * destination object. Source properties that resolve to `undefined` are + * skipped if a destination value exists. Array and plain object properties + * are merged recursively. Other objects and value types are overridden by + * assignment. Source objects are applied from left to right. Subsequent + * sources overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * var object = { + * 'a': [{ 'b': 2 }, { 'd': 4 }] + * }; + * + * var other = { + * 'a': [{ 'c': 3 }, { 'e': 5 }] + * }; + * + * _.merge(object, other); + * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } + */var merge=createAssigner(function(object,source,srcIndex){baseMerge(object,source,srcIndex);});/** + * This method is like `_.merge` except that it accepts `customizer` which + * is invoked to produce the merged values of the destination and source + * properties. If `customizer` returns `undefined`, merging is handled by the + * method instead. The `customizer` is invoked with six arguments: + * (objValue, srcValue, key, object, source, stack). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} customizer The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * function customizer(objValue, srcValue) { + * if (_.isArray(objValue)) { + * return objValue.concat(srcValue); + * } + * } + * + * var object = { 'a': [1], 'b': [2] }; + * var other = { 'a': [3], 'b': [4] }; + * + * _.mergeWith(object, other, customizer); + * // => { 'a': [1, 3], 'b': [2, 4] } + */var mergeWith=createAssigner(function(object,source,srcIndex,customizer){baseMerge(object,source,srcIndex,customizer);});/** + * The opposite of `_.pick`; this method creates an object composed of the + * own and inherited enumerable property paths of `object` that are not omitted. + * + * **Note:** This method is considerably slower than `_.pick`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to omit. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.omit(object, ['a', 'c']); + * // => { 'b': '2' } + */var omit=flatRest(function(object,paths){var result={};if(object==null){return result;}var isDeep=false;paths=arrayMap(paths,function(path){path=castPath(path,object);isDeep||(isDeep=path.length>1);return path;});copyObject(object,getAllKeysIn(object),result);if(isDeep){result=baseClone(result,CLONE_DEEP_FLAG|CLONE_FLAT_FLAG|CLONE_SYMBOLS_FLAG,customOmitClone);}var length=paths.length;while(length--){baseUnset(result,paths[length]);}return result;});/** + * The opposite of `_.pickBy`; this method creates an object composed of + * the own and inherited enumerable string keyed properties of `object` that + * `predicate` doesn't return truthy for. The predicate is invoked with two + * arguments: (value, key). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The source object. + * @param {Function} [predicate=_.identity] The function invoked per property. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.omitBy(object, _.isNumber); + * // => { 'b': '2' } + */function omitBy(object,predicate){return pickBy(object,negate(getIteratee(predicate)));}/** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */var pick=flatRest(function(object,paths){return object==null?{}:basePick(object,paths);});/** + * Creates an object composed of the `object` properties `predicate` returns + * truthy for. The predicate is invoked with two arguments: (value, key). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The source object. + * @param {Function} [predicate=_.identity] The function invoked per property. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pickBy(object, _.isNumber); + * // => { 'a': 1, 'c': 3 } + */function pickBy(object,predicate){if(object==null){return {};}var props=arrayMap(getAllKeysIn(object),function(prop){return [prop];});predicate=getIteratee(predicate);return basePickBy(object,props,function(value,path){return predicate(value,path[0]);});}/** + * This method is like `_.get` except that if the resolved value is a + * function it's invoked with the `this` binding of its parent object and + * its result is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to resolve. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; + * + * _.result(object, 'a[0].b.c1'); + * // => 3 + * + * _.result(object, 'a[0].b.c2'); + * // => 4 + * + * _.result(object, 'a[0].b.c3', 'default'); + * // => 'default' + * + * _.result(object, 'a[0].b.c3', _.constant('default')); + * // => 'default' + */function result(object,path,defaultValue){path=castPath(path,object);var index=-1,length=path.length;// Ensure the loop is entered when path is empty. + if(!length){length=1;object=undefined$1;}while(++index 4 + * + * _.set(object, ['x', '0', 'y', 'z'], 5); + * console.log(object.x[0].y.z); + * // => 5 + */function set(object,path,value){return object==null?object:baseSet(object,path,value);}/** + * This method is like `_.set` except that it accepts `customizer` which is + * invoked to produce the objects of `path`. If `customizer` returns `undefined` + * path creation is handled by the method instead. The `customizer` is invoked + * with three arguments: (nsValue, key, nsObject). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * var object = {}; + * + * _.setWith(object, '[0][1]', 'a', Object); + * // => { '0': { '1': 'a' } } + */function setWith(object,path,value,customizer){customizer=typeof customizer=='function'?customizer:undefined$1;return object==null?object:baseSet(object,path,value,customizer);}/** + * Creates an array of own enumerable string keyed-value pairs for `object` + * which can be consumed by `_.fromPairs`. If `object` is a map or set, its + * entries are returned. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias entries + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the key-value pairs. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.toPairs(new Foo); + * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed) + */var toPairs=createToPairs(keys);/** + * Creates an array of own and inherited enumerable string keyed-value pairs + * for `object` which can be consumed by `_.fromPairs`. If `object` is a map + * or set, its entries are returned. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias entriesIn + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the key-value pairs. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.toPairsIn(new Foo); + * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed) + */var toPairsIn=createToPairs(keysIn);/** + * An alternative to `_.reduce`; this method transforms `object` to a new + * `accumulator` object which is the result of running each of its own + * enumerable string keyed properties thru `iteratee`, with each invocation + * potentially mutating the `accumulator` object. If `accumulator` is not + * provided, a new object with the same `[[Prototype]]` will be used. The + * iteratee is invoked with four arguments: (accumulator, value, key, object). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 1.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The custom accumulator value. + * @returns {*} Returns the accumulated value. + * @example + * + * _.transform([2, 3, 4], function(result, n) { + * result.push(n *= n); + * return n % 2 == 0; + * }, []); + * // => [4, 9] + * + * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } + */function transform(object,iteratee,accumulator){var isArr=isArray(object),isArrLike=isArr||isBuffer(object)||isTypedArray(object);iteratee=getIteratee(iteratee,4);if(accumulator==null){var Ctor=object&&object.constructor;if(isArrLike){accumulator=isArr?new Ctor():[];}else if(isObject(object)){accumulator=isFunction(Ctor)?baseCreate(getPrototype(object)):{};}else {accumulator={};}}(isArrLike?arrayEach:baseForOwn)(object,function(value,index,object){return iteratee(accumulator,value,index,object);});return accumulator;}/** + * Removes the property at `path` of `object`. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to unset. + * @returns {boolean} Returns `true` if the property is deleted, else `false`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 7 } }] }; + * _.unset(object, 'a[0].b.c'); + * // => true + * + * console.log(object); + * // => { 'a': [{ 'b': {} }] }; + * + * _.unset(object, ['a', '0', 'b', 'c']); + * // => true + * + * console.log(object); + * // => { 'a': [{ 'b': {} }] }; + */function unset(object,path){return object==null?true:baseUnset(object,path);}/** + * This method is like `_.set` except that accepts `updater` to produce the + * value to set. Use `_.updateWith` to customize `path` creation. The `updater` + * is invoked with one argument: (value). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.6.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {Function} updater The function to produce the updated value. + * @returns {Object} Returns `object`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.update(object, 'a[0].b.c', function(n) { return n * n; }); + * console.log(object.a[0].b.c); + * // => 9 + * + * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; }); + * console.log(object.x[0].y.z); + * // => 0 + */function update(object,path,updater){return object==null?object:baseUpdate(object,path,castFunction(updater));}/** + * This method is like `_.update` except that it accepts `customizer` which is + * invoked to produce the objects of `path`. If `customizer` returns `undefined` + * path creation is handled by the method instead. The `customizer` is invoked + * with three arguments: (nsValue, key, nsObject). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.6.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {Function} updater The function to produce the updated value. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * var object = {}; + * + * _.updateWith(object, '[0][1]', _.constant('a'), Object); + * // => { '0': { '1': 'a' } } + */function updateWith(object,path,updater,customizer){customizer=typeof customizer=='function'?customizer:undefined$1;return object==null?object:baseUpdate(object,path,castFunction(updater),customizer);}/** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */function values(object){return object==null?[]:baseValues(object,keys(object));}/** + * Creates an array of the own and inherited enumerable string keyed property + * values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.valuesIn(new Foo); + * // => [1, 2, 3] (iteration order is not guaranteed) + */function valuesIn(object){return object==null?[]:baseValues(object,keysIn(object));}/*------------------------------------------------------------------------*/ /** + * Clamps `number` within the inclusive `lower` and `upper` bounds. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Number + * @param {number} number The number to clamp. + * @param {number} [lower] The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the clamped number. + * @example + * + * _.clamp(-10, -5, 5); + * // => -5 + * + * _.clamp(10, -5, 5); + * // => 5 + */function clamp(number,lower,upper){if(upper===undefined$1){upper=lower;lower=undefined$1;}if(upper!==undefined$1){upper=toNumber(upper);upper=upper===upper?upper:0;}if(lower!==undefined$1){lower=toNumber(lower);lower=lower===lower?lower:0;}return baseClamp(toNumber(number),lower,upper);}/** + * Checks if `n` is between `start` and up to, but not including, `end`. If + * `end` is not specified, it's set to `start` with `start` then set to `0`. + * If `start` is greater than `end` the params are swapped to support + * negative ranges. + * + * @static + * @memberOf _ + * @since 3.3.0 + * @category Number + * @param {number} number The number to check. + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @returns {boolean} Returns `true` if `number` is in the range, else `false`. + * @see _.range, _.rangeRight + * @example + * + * _.inRange(3, 2, 4); + * // => true + * + * _.inRange(4, 8); + * // => true + * + * _.inRange(4, 2); + * // => false + * + * _.inRange(2, 2); + * // => false + * + * _.inRange(1.2, 2); + * // => true + * + * _.inRange(5.2, 4); + * // => false + * + * _.inRange(-3, -2, -6); + * // => true + */function inRange(number,start,end){start=toFinite(start);if(end===undefined$1){end=start;start=0;}else {end=toFinite(end);}number=toNumber(number);return baseInRange(number,start,end);}/** + * Produces a random number between the inclusive `lower` and `upper` bounds. + * If only one argument is provided a number between `0` and the given number + * is returned. If `floating` is `true`, or either `lower` or `upper` are + * floats, a floating-point number is returned instead of an integer. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @memberOf _ + * @since 0.7.0 + * @category Number + * @param {number} [lower=0] The lower bound. + * @param {number} [upper=1] The upper bound. + * @param {boolean} [floating] Specify returning a floating-point number. + * @returns {number} Returns the random number. + * @example + * + * _.random(0, 5); + * // => an integer between 0 and 5 + * + * _.random(5); + * // => also an integer between 0 and 5 + * + * _.random(5, true); + * // => a floating-point number between 0 and 5 + * + * _.random(1.2, 5.2); + * // => a floating-point number between 1.2 and 5.2 + */function random(lower,upper,floating){if(floating&&typeof floating!='boolean'&&isIterateeCall(lower,upper,floating)){upper=floating=undefined$1;}if(floating===undefined$1){if(typeof upper=='boolean'){floating=upper;upper=undefined$1;}else if(typeof lower=='boolean'){floating=lower;lower=undefined$1;}}if(lower===undefined$1&&upper===undefined$1){lower=0;upper=1;}else {lower=toFinite(lower);if(upper===undefined$1){upper=lower;lower=0;}else {upper=toFinite(upper);}}if(lower>upper){var temp=lower;lower=upper;upper=temp;}if(floating||lower%1||upper%1){var rand=nativeRandom();return nativeMin(lower+rand*(upper-lower+freeParseFloat('1e-'+((rand+'').length-1))),upper);}return baseRandom(lower,upper);}/*------------------------------------------------------------------------*/ /** + * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the camel cased string. + * @example + * + * _.camelCase('Foo Bar'); + * // => 'fooBar' + * + * _.camelCase('--foo-bar--'); + * // => 'fooBar' + * + * _.camelCase('__FOO_BAR__'); + * // => 'fooBar' + */var camelCase=createCompounder(function(result,word,index){word=word.toLowerCase();return result+(index?capitalize(word):word);});/** + * Converts the first character of `string` to upper case and the remaining + * to lower case. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to capitalize. + * @returns {string} Returns the capitalized string. + * @example + * + * _.capitalize('FRED'); + * // => 'Fred' + */function capitalize(string){return upperFirst(toString(string).toLowerCase());}/** + * Deburrs `string` by converting + * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) + * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A) + * letters to basic Latin letters and removing + * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to deburr. + * @returns {string} Returns the deburred string. + * @example + * + * _.deburr('déjà vu'); + * // => 'deja vu' + */function deburr(string){string=toString(string);return string&&string.replace(reLatin,deburrLetter).replace(reComboMark,'');}/** + * Checks if `string` ends with the given target string. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to inspect. + * @param {string} [target] The string to search for. + * @param {number} [position=string.length] The position to search up to. + * @returns {boolean} Returns `true` if `string` ends with `target`, + * else `false`. + * @example + * + * _.endsWith('abc', 'c'); + * // => true + * + * _.endsWith('abc', 'b'); + * // => false + * + * _.endsWith('abc', 'b', 2); + * // => true + */function endsWith(string,target,position){string=toString(string);target=baseToString(target);var length=string.length;position=position===undefined$1?length:baseClamp(toInteger(position),0,length);var end=position;position-=target.length;return position>=0&&string.slice(position,end)==target;}/** + * Converts the characters "&", "<", ">", '"', and "'" in `string` to their + * corresponding HTML entities. + * + * **Note:** No other characters are escaped. To escape additional + * characters use a third-party library like [_he_](https://mths.be/he). + * + * Though the ">" character is escaped for symmetry, characters like + * ">" and "/" don't need escaping in HTML and have no special meaning + * unless they're part of a tag or unquoted attribute value. See + * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) + * (under "semi-related fun fact") for more details. + * + * When working with HTML you should always + * [quote attribute values](http://wonko.com/post/html-escaping) to reduce + * XSS vectors. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escape('fred, barney, & pebbles'); + * // => 'fred, barney, & pebbles' + */function escape(string){string=toString(string);return string&&reHasUnescapedHtml.test(string)?string.replace(reUnescapedHtml,escapeHtmlChar):string;}/** + * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", + * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escapeRegExp('[lodash](https://lodash.com/)'); + * // => '\[lodash\]\(https://lodash\.com/\)' + */function escapeRegExp(string){string=toString(string);return string&&reHasRegExpChar.test(string)?string.replace(reRegExpChar,'\\$&'):string;}/** + * Converts `string` to + * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the kebab cased string. + * @example + * + * _.kebabCase('Foo Bar'); + * // => 'foo-bar' + * + * _.kebabCase('fooBar'); + * // => 'foo-bar' + * + * _.kebabCase('__FOO_BAR__'); + * // => 'foo-bar' + */var kebabCase=createCompounder(function(result,word,index){return result+(index?'-':'')+word.toLowerCase();});/** + * Converts `string`, as space separated words, to lower case. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the lower cased string. + * @example + * + * _.lowerCase('--Foo-Bar--'); + * // => 'foo bar' + * + * _.lowerCase('fooBar'); + * // => 'foo bar' + * + * _.lowerCase('__FOO_BAR__'); + * // => 'foo bar' + */var lowerCase=createCompounder(function(result,word,index){return result+(index?' ':'')+word.toLowerCase();});/** + * Converts the first character of `string` to lower case. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.lowerFirst('Fred'); + * // => 'fred' + * + * _.lowerFirst('FRED'); + * // => 'fRED' + */var lowerFirst=createCaseFirst('toLowerCase');/** + * Pads `string` on the left and right sides if it's shorter than `length`. + * Padding characters are truncated if they can't be evenly divided by `length`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.pad('abc', 8); + * // => ' abc ' + * + * _.pad('abc', 8, '_-'); + * // => '_-abc_-_' + * + * _.pad('abc', 3); + * // => 'abc' + */function pad(string,length,chars){string=toString(string);length=toInteger(length);var strLength=length?stringSize(string):0;if(!length||strLength>=length){return string;}var mid=(length-strLength)/2;return createPadding(nativeFloor(mid),chars)+string+createPadding(nativeCeil(mid),chars);}/** + * Pads `string` on the right side if it's shorter than `length`. Padding + * characters are truncated if they exceed `length`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.padEnd('abc', 6); + * // => 'abc ' + * + * _.padEnd('abc', 6, '_-'); + * // => 'abc_-_' + * + * _.padEnd('abc', 3); + * // => 'abc' + */function padEnd(string,length,chars){string=toString(string);length=toInteger(length);var strLength=length?stringSize(string):0;return length&&strLength ' abc' + * + * _.padStart('abc', 6, '_-'); + * // => '_-_abc' + * + * _.padStart('abc', 3); + * // => 'abc' + */function padStart(string,length,chars){string=toString(string);length=toInteger(length);var strLength=length?stringSize(string):0;return length&&strLength 8 + * + * _.map(['6', '08', '10'], _.parseInt); + * // => [6, 8, 10] + */function parseInt(string,radix,guard){if(guard||radix==null){radix=0;}else if(radix){radix=+radix;}return nativeParseInt(toString(string).replace(reTrimStart,''),radix||0);}/** + * Repeats the given string `n` times. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to repeat. + * @param {number} [n=1] The number of times to repeat the string. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {string} Returns the repeated string. + * @example + * + * _.repeat('*', 3); + * // => '***' + * + * _.repeat('abc', 2); + * // => 'abcabc' + * + * _.repeat('abc', 0); + * // => '' + */function repeat(string,n,guard){if(guard?isIterateeCall(string,n,guard):n===undefined$1){n=1;}else {n=toInteger(n);}return baseRepeat(toString(string),n);}/** + * Replaces matches for `pattern` in `string` with `replacement`. + * + * **Note:** This method is based on + * [`String#replace`](https://mdn.io/String/replace). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to modify. + * @param {RegExp|string} pattern The pattern to replace. + * @param {Function|string} replacement The match replacement. + * @returns {string} Returns the modified string. + * @example + * + * _.replace('Hi Fred', 'Fred', 'Barney'); + * // => 'Hi Barney' + */function replace(){var args=arguments,string=toString(args[0]);return args.length<3?string:string.replace(args[1],args[2]);}/** + * Converts `string` to + * [snake case](https://en.wikipedia.org/wiki/Snake_case). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the snake cased string. + * @example + * + * _.snakeCase('Foo Bar'); + * // => 'foo_bar' + * + * _.snakeCase('fooBar'); + * // => 'foo_bar' + * + * _.snakeCase('--FOO-BAR--'); + * // => 'foo_bar' + */var snakeCase=createCompounder(function(result,word,index){return result+(index?'_':'')+word.toLowerCase();});/** + * Splits `string` by `separator`. + * + * **Note:** This method is based on + * [`String#split`](https://mdn.io/String/split). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to split. + * @param {RegExp|string} separator The separator pattern to split by. + * @param {number} [limit] The length to truncate results to. + * @returns {Array} Returns the string segments. + * @example + * + * _.split('a-b-c', '-', 2); + * // => ['a', 'b'] + */function split(string,separator,limit){if(limit&&typeof limit!='number'&&isIterateeCall(string,separator,limit)){separator=limit=undefined$1;}limit=limit===undefined$1?MAX_ARRAY_LENGTH:limit>>>0;if(!limit){return [];}string=toString(string);if(string&&(typeof separator=='string'||separator!=null&&!isRegExp(separator))){separator=baseToString(separator);if(!separator&&hasUnicode(string)){return castSlice(stringToArray(string),0,limit);}}return string.split(separator,limit);}/** + * Converts `string` to + * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage). + * + * @static + * @memberOf _ + * @since 3.1.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the start cased string. + * @example + * + * _.startCase('--foo-bar--'); + * // => 'Foo Bar' + * + * _.startCase('fooBar'); + * // => 'Foo Bar' + * + * _.startCase('__FOO_BAR__'); + * // => 'FOO BAR' + */var startCase=createCompounder(function(result,word,index){return result+(index?' ':'')+upperFirst(word);});/** + * Checks if `string` starts with the given target string. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to inspect. + * @param {string} [target] The string to search for. + * @param {number} [position=0] The position to search from. + * @returns {boolean} Returns `true` if `string` starts with `target`, + * else `false`. + * @example + * + * _.startsWith('abc', 'a'); + * // => true + * + * _.startsWith('abc', 'b'); + * // => false + * + * _.startsWith('abc', 'b', 1); + * // => true + */function startsWith(string,target,position){string=toString(string);position=position==null?0:baseClamp(toInteger(position),0,string.length);target=baseToString(target);return string.slice(position,position+target.length)==target;}/** + * Creates a compiled template function that can interpolate data properties + * in "interpolate" delimiters, HTML-escape interpolated data properties in + * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data + * properties may be accessed as free variables in the template. If a setting + * object is given, it takes precedence over `_.templateSettings` values. + * + * **Note:** In the development build `_.template` utilizes + * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl) + * for easier debugging. + * + * For more information on precompiling templates see + * [lodash's custom builds documentation](https://lodash.com/custom-builds). + * + * For more information on Chrome extension sandboxes see + * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval). + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category String + * @param {string} [string=''] The template string. + * @param {Object} [options={}] The options object. + * @param {RegExp} [options.escape=_.templateSettings.escape] + * The HTML "escape" delimiter. + * @param {RegExp} [options.evaluate=_.templateSettings.evaluate] + * The "evaluate" delimiter. + * @param {Object} [options.imports=_.templateSettings.imports] + * An object to import into the template as free variables. + * @param {RegExp} [options.interpolate=_.templateSettings.interpolate] + * The "interpolate" delimiter. + * @param {string} [options.sourceURL='lodash.templateSources[n]'] + * The sourceURL of the compiled template. + * @param {string} [options.variable='obj'] + * The data object variable name. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the compiled template function. + * @example + * + * // Use the "interpolate" delimiter to create a compiled template. + * var compiled = _.template('hello <%= user %>!'); + * compiled({ 'user': 'fred' }); + * // => 'hello fred!' + * + * // Use the HTML "escape" delimiter to escape data property values. + * var compiled = _.template('<%- value %>'); + * compiled({ 'value': '