diff --git a/.discourse-compatibility b/.discourse-compatibility index 8616491..d4e8746 100644 --- a/.discourse-compatibility +++ b/.discourse-compatibility @@ -1,3 +1,4 @@ +< v3.2.0.beta4-dev: 10a3c21551ab5f8ffc094ba64a967ecbf5ed5eba < 3.2.0.beta2: f076c50946b5969175d45fdd2fb6194f43394e24 3.1.999: 04b36c68012fba9778e400e83b0b01d7947b2cdf 3.1.0.beta2: 850e31c83d310a1b52e6105fe201eb96f9e33deb diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index 328467a..0000000 --- a/.eslintrc +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "eslint-config-discourse", - "ignorePatterns": ["javascripts/vendor/*", "assets/vendor/*"], - "globals": { - "settings": "readonly", - "themePrefix": "readonly" - } -} diff --git a/.github/workflows/discourse-theme.yml b/.github/workflows/discourse-theme.yml deleted file mode 100644 index 8adaaec..0000000 --- a/.github/workflows/discourse-theme.yml +++ /dev/null @@ -1,11 +0,0 @@ -name: Discourse Theme - -on: - push: - branches: - - main - pull_request: - -jobs: - ci: - uses: discourse/.github/.github/workflows/discourse-theme.yml@v1 diff --git a/.gitignore b/.gitignore deleted file mode 100644 index b77e121..0000000 --- a/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -.discourse-site -node_modules -HELP diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index 9e26dfe..0000000 --- a/.prettierrc +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/.template-lintrc.js b/.template-lintrc.js deleted file mode 100644 index a558b8e..0000000 --- a/.template-lintrc.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - plugins: ["ember-template-lint-plugin-discourse"], - extends: "discourse:recommended", -}; diff --git a/README.md b/README.md index e035cdd..727f0c0 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,9 @@ # Discourse Table Builder + > ⚠️ **This theme component is deprecated and has now been bundled into core Discourse. Please remove it from your forum.** + +--- + ![cover](.github/images/banner.png) A theme component that allows for easiy building and editing of markdown tables in Discourse. diff --git a/about.json b/about.json index 116f7d6..c149819 100644 --- a/about.json +++ b/about.json @@ -7,16 +7,5 @@ "learn_more": "TODO", "theme_version": "0.0.1", "minimum_discourse_version": "2.9.0.beta9", - "maximum_discourse_version": null, - "assets": { - "jsuites": "assets/vendor/jsuites.js", - "jspreadsheet": "assets/vendor/jspreadsheet.js" - }, - "modifiers": { - "svg_icons": [ - "align-left", - "align-center", - "align-right" - ] - } + "maximum_discourse_version": "v3.2.0.beta4-dev" } \ No newline at end of file diff --git a/assets/vendor/jspreadsheet.js b/assets/vendor/jspreadsheet.js deleted file mode 100644 index 33ed309..0000000 --- a/assets/vendor/jspreadsheet.js +++ /dev/null @@ -1,16905 +0,0 @@ -/** - * Jspreadsheet v4.11.1 - * - * Website: https://bossanova.uk/jspreadsheet/ - * Description: Create amazing web based spreadsheets. - * - * This software is distribute under MIT License - */ - -var formula = (function () { - // Based on sutoiku work (https://github.com/sutoiku) - var error = (function () { - var exports = {}; - - exports.nil = new Error("#NULL!"); - exports.div0 = new Error("#DIV/0!"); - exports.value = new Error("#VALUE!"); - exports.ref = new Error("#REF!"); - exports.name = new Error("#NAME?"); - exports.num = new Error("#NUM!"); - exports.na = new Error("#N/A"); - exports.error = new Error("#ERROR!"); - exports.data = new Error("#GETTING_DATA"); - - return exports; - })(); - - var utils = (function () { - var exports = {}; - - exports.flattenShallow = function (array) { - if (!array || !array.reduce) { - return array; - } - - return array.reduce(function (a, b) { - var aIsArray = Array.isArray(a); - var bIsArray = Array.isArray(b); - - if (aIsArray && bIsArray) { - return a.concat(b); - } - if (aIsArray) { - a.push(b); - - return a; - } - if (bIsArray) { - return [a].concat(b); - } - - return [a, b]; - }); - }; - - exports.isFlat = function (array) { - if (!array) { - return false; - } - - for (var i = 0; i < array.length; ++i) { - if (Array.isArray(array[i])) { - return false; - } - } - - return true; - }; - - exports.flatten = function () { - var result = exports.argsToArray.apply(null, arguments); - - while (!exports.isFlat(result)) { - result = exports.flattenShallow(result); - } - - return result; - }; - - exports.argsToArray = function (args) { - var result = []; - - exports.arrayEach(args, function (value) { - result.push(value); - }); - - return result; - }; - - exports.numbers = function () { - var possibleNumbers = this.flatten.apply(null, arguments); - return possibleNumbers.filter(function (el) { - return typeof el === "number"; - }); - }; - - exports.cleanFloat = function (number) { - var power = 1e14; - return Math.round(number * power) / power; - }; - - exports.parseBool = function (bool) { - if (typeof bool === "boolean") { - return bool; - } - - if (bool instanceof Error) { - return bool; - } - - if (typeof bool === "number") { - return bool !== 0; - } - - if (typeof bool === "string") { - var up = bool.toUpperCase(); - if (up === "TRUE") { - return true; - } - - if (up === "FALSE") { - return false; - } - } - - if (bool instanceof Date && !isNaN(bool)) { - return true; - } - - return error.value; - }; - - exports.parseNumber = function (string) { - if (string === undefined || string === "") { - return error.value; - } - if (!isNaN(string)) { - return parseFloat(string); - } - - return error.value; - }; - - exports.parseNumberArray = function (arr) { - var len; - - if (!arr || (len = arr.length) === 0) { - return error.value; - } - - var parsed; - - while (len--) { - parsed = exports.parseNumber(arr[len]); - if (parsed === error.value) { - return parsed; - } - arr[len] = parsed; - } - - return arr; - }; - - exports.parseMatrix = function (matrix) { - var n; - - if (!matrix || (n = matrix.length) === 0) { - return error.value; - } - var pnarr; - - for (var i = 0; i < matrix.length; i++) { - pnarr = exports.parseNumberArray(matrix[i]); - matrix[i] = pnarr; - - if (pnarr instanceof Error) { - return pnarr; - } - } - - return matrix; - }; - - var d1900 = new Date(Date.UTC(1900, 0, 1)); - exports.parseDate = function (date) { - if (!isNaN(date)) { - if (date instanceof Date) { - return new Date(date); - } - var d = parseInt(date, 10); - if (d < 0) { - return error.num; - } - if (d <= 60) { - return new Date(d1900.getTime() + (d - 1) * 86400000); - } - return new Date(d1900.getTime() + (d - 2) * 86400000); - } - if (typeof date === "string") { - date = new Date(date); - if (!isNaN(date)) { - return date; - } - } - return error.value; - }; - - exports.parseDateArray = function (arr) { - var len = arr.length; - var parsed; - while (len--) { - parsed = this.parseDate(arr[len]); - if (parsed === error.value) { - return parsed; - } - arr[len] = parsed; - } - return arr; - }; - - exports.anyIsError = function () { - var n = arguments.length; - while (n--) { - if (arguments[n] instanceof Error) { - return true; - } - } - return false; - }; - - exports.arrayValuesToNumbers = function (arr) { - var n = arr.length; - var el; - while (n--) { - el = arr[n]; - if (typeof el === "number") { - continue; - } - if (el === true) { - arr[n] = 1; - continue; - } - if (el === false) { - arr[n] = 0; - continue; - } - if (typeof el === "string") { - var number = this.parseNumber(el); - if (number instanceof Error) { - arr[n] = 0; - } else { - arr[n] = number; - } - } - } - return arr; - }; - - exports.rest = function (array, idx) { - idx = idx || 1; - if (!array || typeof array.slice !== "function") { - return array; - } - return array.slice(idx); - }; - - exports.initial = function (array, idx) { - idx = idx || 1; - if (!array || typeof array.slice !== "function") { - return array; - } - return array.slice(0, array.length - idx); - }; - - exports.arrayEach = function (array, iteratee) { - var index = -1, - length = array.length; - - while (++index < length) { - if (iteratee(array[index], index, array) === false) { - break; - } - } - - return array; - }; - - exports.transpose = function (matrix) { - if (!matrix) { - return error.value; - } - - return matrix[0].map(function (col, i) { - return matrix.map(function (row) { - return row[i]; - }); - }); - }; - - return exports; - })(); - - var met = {}; - - met.datetime = (function () { - var exports = {}; - - var d1900 = new Date(1900, 0, 1); - var WEEK_STARTS = [ - undefined, - 0, - 1, - undefined, - undefined, - undefined, - undefined, - undefined, - undefined, - undefined, - undefined, - undefined, - 1, - 2, - 3, - 4, - 5, - 6, - 0, - ]; - var WEEK_TYPES = [ - [], - [1, 2, 3, 4, 5, 6, 7], - [7, 1, 2, 3, 4, 5, 6], - [6, 0, 1, 2, 3, 4, 5], - [], - [], - [], - [], - [], - [], - [], - [7, 1, 2, 3, 4, 5, 6], - [6, 7, 1, 2, 3, 4, 5], - [5, 6, 7, 1, 2, 3, 4], - [4, 5, 6, 7, 1, 2, 3], - [3, 4, 5, 6, 7, 1, 2], - [2, 3, 4, 5, 6, 7, 1], - [1, 2, 3, 4, 5, 6, 7], - ]; - var WEEKEND_TYPES = [ - [], - [6, 0], - [0, 1], - [1, 2], - [2, 3], - [3, 4], - [4, 5], - [5, 6], - undefined, - undefined, - undefined, - [0, 0], - [1, 1], - [2, 2], - [3, 3], - [4, 4], - [5, 5], - [6, 6], - ]; - - exports.DATE = function (year, month, day) { - year = utils.parseNumber(year); - month = utils.parseNumber(month); - day = utils.parseNumber(day); - if (utils.anyIsError(year, month, day)) { - return error.value; - } - if (year < 0 || month < 0 || day < 0) { - return error.num; - } - var date = new Date(year, month - 1, day); - return date; - }; - - exports.DATEVALUE = function (date_text) { - if (typeof date_text !== "string") { - return error.value; - } - var date = Date.parse(date_text); - if (isNaN(date)) { - return error.value; - } - if (date <= -2203891200000) { - return (date - d1900) / 86400000 + 1; - } - return (date - d1900) / 86400000 + 2; - }; - - exports.DAY = function (serial_number) { - var date = utils.parseDate(serial_number); - if (date instanceof Error) { - return date; - } - return date.getDate(); - }; - - exports.DAYS = function (end_date, start_date) { - end_date = utils.parseDate(end_date); - start_date = utils.parseDate(start_date); - if (end_date instanceof Error) { - return end_date; - } - if (start_date instanceof Error) { - return start_date; - } - return serial(end_date) - serial(start_date); - }; - - exports.DAYS360 = function (start_date, end_date, method) {}; - - exports.EDATE = function (start_date, months) { - start_date = utils.parseDate(start_date); - if (start_date instanceof Error) { - return start_date; - } - if (isNaN(months)) { - return error.value; - } - months = parseInt(months, 10); - start_date.setMonth(start_date.getMonth() + months); - return serial(start_date); - }; - - exports.EOMONTH = function (start_date, months) { - start_date = utils.parseDate(start_date); - if (start_date instanceof Error) { - return start_date; - } - if (isNaN(months)) { - return error.value; - } - months = parseInt(months, 10); - return serial( - new Date( - start_date.getFullYear(), - start_date.getMonth() + months + 1, - 0 - ) - ); - }; - - exports.HOUR = function (serial_number) { - serial_number = utils.parseDate(serial_number); - if (serial_number instanceof Error) { - return serial_number; - } - return serial_number.getHours(); - }; - - exports.INTERVAL = function (second) { - if (typeof second !== "number" && typeof second !== "string") { - return error.value; - } else { - second = parseInt(second, 10); - } - - var year = Math.floor(second / 946080000); - second = second % 946080000; - var month = Math.floor(second / 2592000); - second = second % 2592000; - var day = Math.floor(second / 86400); - second = second % 86400; - - var hour = Math.floor(second / 3600); - second = second % 3600; - var min = Math.floor(second / 60); - second = second % 60; - var sec = second; - - year = year > 0 ? year + "Y" : ""; - month = month > 0 ? month + "M" : ""; - day = day > 0 ? day + "D" : ""; - hour = hour > 0 ? hour + "H" : ""; - min = min > 0 ? min + "M" : ""; - sec = sec > 0 ? sec + "S" : ""; - - return "P" + year + month + day + "T" + hour + min + sec; - }; - - exports.ISOWEEKNUM = function (date) { - date = utils.parseDate(date); - if (date instanceof Error) { - return date; - } - - date.setHours(0, 0, 0); - date.setDate(date.getDate() + 4 - (date.getDay() || 7)); - var yearStart = new Date(date.getFullYear(), 0, 1); - return Math.ceil(((date - yearStart) / 86400000 + 1) / 7); - }; - - exports.MINUTE = function (serial_number) { - serial_number = utils.parseDate(serial_number); - if (serial_number instanceof Error) { - return serial_number; - } - return serial_number.getMinutes(); - }; - - exports.MONTH = function (serial_number) { - serial_number = utils.parseDate(serial_number); - if (serial_number instanceof Error) { - return serial_number; - } - return serial_number.getMonth() + 1; - }; - - exports.NETWORKDAYS = function (start_date, end_date, holidays) {}; - - exports.NETWORKDAYS.INTL = function ( - start_date, - end_date, - weekend, - holidays - ) {}; - - exports.NOW = function () { - return new Date(); - }; - - exports.SECOND = function (serial_number) { - serial_number = utils.parseDate(serial_number); - if (serial_number instanceof Error) { - return serial_number; - } - return serial_number.getSeconds(); - }; - - exports.TIME = function (hour, minute, second) { - hour = utils.parseNumber(hour); - minute = utils.parseNumber(minute); - second = utils.parseNumber(second); - if (utils.anyIsError(hour, minute, second)) { - return error.value; - } - if (hour < 0 || minute < 0 || second < 0) { - return error.num; - } - return (3600 * hour + 60 * minute + second) / 86400; - }; - - exports.TIMEVALUE = function (time_text) { - time_text = utils.parseDate(time_text); - if (time_text instanceof Error) { - return time_text; - } - return ( - (3600 * time_text.getHours() + - 60 * time_text.getMinutes() + - time_text.getSeconds()) / - 86400 - ); - }; - - exports.TODAY = function () { - return new Date(); - }; - - exports.WEEKDAY = function (serial_number, return_type) { - serial_number = utils.parseDate(serial_number); - if (serial_number instanceof Error) { - return serial_number; - } - if (return_type === undefined) { - return_type = 1; - } - var day = serial_number.getDay(); - return WEEK_TYPES[return_type][day]; - }; - - exports.WEEKNUM = function (serial_number, return_type) {}; - - exports.WORKDAY = function (start_date, days, holidays) {}; - - exports.WORKDAY.INTL = function (start_date, days, weekend, holidays) {}; - - exports.YEAR = function (serial_number) { - serial_number = utils.parseDate(serial_number); - if (serial_number instanceof Error) { - return serial_number; - } - return serial_number.getFullYear(); - }; - - function isLeapYear(year) { - return new Date(year, 1, 29).getMonth() === 1; - } - - exports.YEARFRAC = function (start_date, end_date, basis) {}; - - function serial(date) { - var addOn = date > -2203891200000 ? 2 : 1; - return (date - d1900) / 86400000 + addOn; - } - - return exports; - })(); - - met.database = (function () { - var exports = {}; - - function compact(array) { - if (!array) { - return array; - } - var result = []; - for (var i = 0; i < array.length; ++i) { - if (!array[i]) { - continue; - } - result.push(array[i]); - } - return result; - } - - exports.FINDFIELD = function (database, title) { - var index = null; - for (var i = 0; i < database.length; i++) { - if (database[i][0] === title) { - index = i; - break; - } - } - - // Return error if the input field title is incorrect - if (index == null) { - return error.value; - } - return index; - }; - - function findResultIndex(database, criterias) { - var matches = {}; - for (var i = 1; i < database[0].length; ++i) { - matches[i] = true; - } - var maxCriteriaLength = criterias[0].length; - for (i = 1; i < criterias.length; ++i) { - if (criterias[i].length > maxCriteriaLength) { - maxCriteriaLength = criterias[i].length; - } - } - - for (var k = 1; k < database.length; ++k) { - for (var l = 1; l < database[k].length; ++l) { - var currentCriteriaResult = false; - var hasMatchingCriteria = false; - for (var j = 0; j < criterias.length; ++j) { - var criteria = criterias[j]; - if (criteria.length < maxCriteriaLength) { - continue; - } - - var criteriaField = criteria[0]; - if (database[k][0] !== criteriaField) { - continue; - } - hasMatchingCriteria = true; - for (var p = 1; p < criteria.length; ++p) { - currentCriteriaResult = - currentCriteriaResult || eval(database[k][l] + criteria[p]); // jshint - // ignore:line - } - } - if (hasMatchingCriteria) { - matches[l] = matches[l] && currentCriteriaResult; - } - } - } - - var result = []; - for (var n = 0; n < database[0].length; ++n) { - if (matches[n]) { - result.push(n - 1); - } - } - return result; - } - - // Database functions - exports.DAVERAGE = function (database, field, criteria) { - // Return error if field is not a number and not a string - if (isNaN(field) && typeof field !== "string") { - return error.value; - } - var resultIndexes = findResultIndex(database, criteria); - var targetFields = []; - if (typeof field === "string") { - var index = exports.FINDFIELD(database, field); - targetFields = utils.rest(database[index]); - } else { - targetFields = utils.rest(database[field]); - } - var sum = 0; - for (var i = 0; i < resultIndexes.length; i++) { - sum += targetFields[resultIndexes[i]]; - } - return resultIndexes.length === 0 - ? error.div0 - : sum / resultIndexes.length; - }; - - exports.DCOUNT = function (database, field, criteria) {}; - - exports.DCOUNTA = function (database, field, criteria) {}; - - exports.DGET = function (database, field, criteria) { - // Return error if field is not a number and not a string - if (isNaN(field) && typeof field !== "string") { - return error.value; - } - var resultIndexes = findResultIndex(database, criteria); - var targetFields = []; - if (typeof field === "string") { - var index = exports.FINDFIELD(database, field); - targetFields = utils.rest(database[index]); - } else { - targetFields = utils.rest(database[field]); - } - // Return error if no record meets the criteria - if (resultIndexes.length === 0) { - return error.value; - } - // Returns the #NUM! error value because more than one record meets the - // criteria - if (resultIndexes.length > 1) { - return error.num; - } - - return targetFields[resultIndexes[0]]; - }; - - exports.DMAX = function (database, field, criteria) { - // Return error if field is not a number and not a string - if (isNaN(field) && typeof field !== "string") { - return error.value; - } - var resultIndexes = findResultIndex(database, criteria); - var targetFields = []; - if (typeof field === "string") { - var index = exports.FINDFIELD(database, field); - targetFields = utils.rest(database[index]); - } else { - targetFields = utils.rest(database[field]); - } - var maxValue = targetFields[resultIndexes[0]]; - for (var i = 1; i < resultIndexes.length; i++) { - if (maxValue < targetFields[resultIndexes[i]]) { - maxValue = targetFields[resultIndexes[i]]; - } - } - return maxValue; - }; - - exports.DMIN = function (database, field, criteria) { - // Return error if field is not a number and not a string - if (isNaN(field) && typeof field !== "string") { - return error.value; - } - var resultIndexes = findResultIndex(database, criteria); - var targetFields = []; - if (typeof field === "string") { - var index = exports.FINDFIELD(database, field); - targetFields = utils.rest(database[index]); - } else { - targetFields = utils.rest(database[field]); - } - var minValue = targetFields[resultIndexes[0]]; - for (var i = 1; i < resultIndexes.length; i++) { - if (minValue > targetFields[resultIndexes[i]]) { - minValue = targetFields[resultIndexes[i]]; - } - } - return minValue; - }; - - exports.DPRODUCT = function (database, field, criteria) { - // Return error if field is not a number and not a string - if (isNaN(field) && typeof field !== "string") { - return error.value; - } - var resultIndexes = findResultIndex(database, criteria); - var targetFields = []; - if (typeof field === "string") { - var index = exports.FINDFIELD(database, field); - targetFields = utils.rest(database[index]); - } else { - targetFields = utils.rest(database[field]); - } - var targetValues = []; - for (var i = 0; i < resultIndexes.length; i++) { - targetValues[i] = targetFields[resultIndexes[i]]; - } - targetValues = compact(targetValues); - var result = 1; - for (i = 0; i < targetValues.length; i++) { - result *= targetValues[i]; - } - return result; - }; - - exports.DSTDEV = function (database, field, criteria) {}; - - exports.DSTDEVP = function (database, field, criteria) {}; - - exports.DSUM = function (database, field, criteria) {}; - - exports.DVAR = function (database, field, criteria) {}; - - exports.DVARP = function (database, field, criteria) {}; - - exports.MATCH = function (lookupValue, lookupArray, matchType) { - if (!lookupValue && !lookupArray) { - return error.na; - } - if (arguments.length === 2) { - matchType = 1; - } - if (!(lookupArray instanceof Array)) { - return error.na; - } - if (matchType !== -1 && matchType !== 0 && matchType !== 1) { - return error.na; - } - - var index; - var indexValue; - - for (var idx = 0; idx < lookupArray.length; idx++) { - if (matchType === 1) { - if (lookupArray[idx] === lookupValue) { - return idx + 1; - } else if (lookupArray[idx] < lookupValue) { - if (!indexValue) { - index = idx + 1; - indexValue = lookupArray[idx]; - } else if (lookupArray[idx] > indexValue) { - index = idx + 1; - indexValue = lookupArray[idx]; - } - } - } else if (matchType === 0) { - if (typeof lookupValue === "string") { - lookupValue = lookupValue.replace(/\?/g, "."); - if ( - lookupArray[idx].toLowerCase().match(lookupValue.toLowerCase()) - ) { - return idx + 1; - } - } else { - if (lookupArray[idx] === lookupValue) { - return idx + 1; - } - } - } else if (matchType === -1) { - if (lookupArray[idx] === lookupValue) { - return idx + 1; - } else if (lookupArray[idx] > lookupValue) { - if (!indexValue) { - index = idx + 1; - indexValue = lookupArray[idx]; - } else if (lookupArray[idx] < indexValue) { - index = idx + 1; - indexValue = lookupArray[idx]; - } - } - } - } - - return index ? index : error.na; - }; - - return exports; - })(); - - met.engineering = (function () { - var exports = {}; - - function isValidBinaryNumber(number) { - return /^[01]{1,10}$/.test(number); - } - - exports.BESSELI = function (x, n) {}; - - exports.BESSELJ = function (x, n) {}; - - exports.BESSELK = function (x, n) {}; - - exports.BESSELY = function (x, n) {}; - - exports.BIN2DEC = function (number) { - // Return error if number is not binary or contains more than 10 - // characters (10 digits) - if (!isValidBinaryNumber(number)) { - return error.num; - } - - // Convert binary number to decimal - var result = parseInt(number, 2); - - // Handle negative numbers - var stringified = number.toString(); - if (stringified.length === 10 && stringified.substring(0, 1) === "1") { - return parseInt(stringified.substring(1), 2) - 512; - } else { - return result; - } - }; - - exports.BIN2HEX = function (number, places) { - // Return error if number is not binary or contains more than 10 - // characters (10 digits) - if (!isValidBinaryNumber(number)) { - return error.num; - } - - // Ignore places and return a 10-character hexadecimal number if number - // is negative - var stringified = number.toString(); - if (stringified.length === 10 && stringified.substring(0, 1) === "1") { - return (1099511627264 + parseInt(stringified.substring(1), 2)).toString( - 16 - ); - } - - // Convert binary number to hexadecimal - var result = parseInt(number, 2).toString(16); - - // Return hexadecimal number using the minimum number of characters - // necessary if places is undefined - if (places === undefined) { - return result; - } else { - // Return error if places is nonnumeric - if (isNaN(places)) { - return error.value; - } - - // Return error if places is negative - if (places < 0) { - return error.num; - } - - // Truncate places in case it is not an integer - places = Math.floor(places); - - // Pad return value with leading 0s (zeros) if necessary (using - // Underscore.string) - return places >= result.length - ? REPT("0", places - result.length) + result - : error.num; - } - }; - - exports.BIN2OCT = function (number, places) { - // Return error if number is not binary or contains more than 10 - // characters (10 digits) - if (!isValidBinaryNumber(number)) { - return error.num; - } - - // Ignore places and return a 10-character octal number if number is - // negative - var stringified = number.toString(); - if (stringified.length === 10 && stringified.substring(0, 1) === "1") { - return (1073741312 + parseInt(stringified.substring(1), 2)).toString(8); - } - - // Convert binary number to octal - var result = parseInt(number, 2).toString(8); - - // Return octal number using the minimum number of characters necessary - // if places is undefined - if (places === undefined) { - return result; - } else { - // Return error if places is nonnumeric - if (isNaN(places)) { - return error.value; - } - - // Return error if places is negative - if (places < 0) { - return error.num; - } - - // Truncate places in case it is not an integer - places = Math.floor(places); - - // Pad return value with leading 0s (zeros) if necessary (using - // Underscore.string) - return places >= result.length - ? REPT("0", places - result.length) + result - : error.num; - } - }; - - exports.BITAND = function (number1, number2) { - // Return error if either number is a non-numeric value - number1 = utils.parseNumber(number1); - number2 = utils.parseNumber(number2); - if (utils.anyIsError(number1, number2)) { - return error.value; - } - - // Return error if either number is less than 0 - if (number1 < 0 || number2 < 0) { - return error.num; - } - - // Return error if either number is a non-integer - if (Math.floor(number1) !== number1 || Math.floor(number2) !== number2) { - return error.num; - } - - // Return error if either number is greater than (2^48)-1 - if (number1 > 281474976710655 || number2 > 281474976710655) { - return error.num; - } - - // Return bitwise AND of two numbers - return number1 & number2; - }; - - exports.BITLSHIFT = function (number, shift) { - number = utils.parseNumber(number); - shift = utils.parseNumber(shift); - if (utils.anyIsError(number, shift)) { - return error.value; - } - - // Return error if number is less than 0 - if (number < 0) { - return error.num; - } - - // Return error if number is a non-integer - if (Math.floor(number) !== number) { - return error.num; - } - - // Return error if number is greater than (2^48)-1 - if (number > 281474976710655) { - return error.num; - } - - // Return error if the absolute value of shift is greater than 53 - if (Math.abs(shift) > 53) { - return error.num; - } - - // Return number shifted by shift bits to the left or to the right if - // shift is negative - return shift >= 0 ? number << shift : number >> -shift; - }; - - exports.BITOR = function (number1, number2) { - number1 = utils.parseNumber(number1); - number2 = utils.parseNumber(number2); - if (utils.anyIsError(number1, number2)) { - return error.value; - } - - // Return error if either number is less than 0 - if (number1 < 0 || number2 < 0) { - return error.num; - } - - // Return error if either number is a non-integer - if (Math.floor(number1) !== number1 || Math.floor(number2) !== number2) { - return error.num; - } - - // Return error if either number is greater than (2^48)-1 - if (number1 > 281474976710655 || number2 > 281474976710655) { - return error.num; - } - - // Return bitwise OR of two numbers - return number1 | number2; - }; - - exports.BITRSHIFT = function (number, shift) { - number = utils.parseNumber(number); - shift = utils.parseNumber(shift); - if (utils.anyIsError(number, shift)) { - return error.value; - } - - // Return error if number is less than 0 - if (number < 0) { - return error.num; - } - - // Return error if number is a non-integer - if (Math.floor(number) !== number) { - return error.num; - } - - // Return error if number is greater than (2^48)-1 - if (number > 281474976710655) { - return error.num; - } - - // Return error if the absolute value of shift is greater than 53 - if (Math.abs(shift) > 53) { - return error.num; - } - - // Return number shifted by shift bits to the right or to the left if - // shift is negative - return shift >= 0 ? number >> shift : number << -shift; - }; - - exports.BITXOR = function (number1, number2) { - number1 = utils.parseNumber(number1); - number2 = utils.parseNumber(number2); - if (utils.anyIsError(number1, number2)) { - return error.value; - } - - // Return error if either number is less than 0 - if (number1 < 0 || number2 < 0) { - return error.num; - } - - // Return error if either number is a non-integer - if (Math.floor(number1) !== number1 || Math.floor(number2) !== number2) { - return error.num; - } - - // Return error if either number is greater than (2^48)-1 - if (number1 > 281474976710655 || number2 > 281474976710655) { - return error.num; - } - - // Return bitwise XOR of two numbers - return number1 ^ number2; - }; - - exports.COMPLEX = function (real, imaginary, suffix) { - real = utils.parseNumber(real); - imaginary = utils.parseNumber(imaginary); - if (utils.anyIsError(real, imaginary)) { - return real; - } - - // Set suffix - suffix = suffix === undefined ? "i" : suffix; - - // Return error if suffix is neither "i" nor "j" - if (suffix !== "i" && suffix !== "j") { - return error.value; - } - - // Return complex number - if (real === 0 && imaginary === 0) { - return 0; - } else if (real === 0) { - return imaginary === 1 ? suffix : imaginary.toString() + suffix; - } else if (imaginary === 0) { - return real.toString(); - } else { - var sign = imaginary > 0 ? "+" : ""; - return ( - real.toString() + - sign + - (imaginary === 1 ? suffix : imaginary.toString() + suffix) - ); - } - }; - - exports.CONVERT = function (number, from_unit, to_unit) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - - // List of units supported by CONVERT and units defined by the - // International System of Units - // [Name, Symbol, Alternate symbols, Quantity, ISU, CONVERT, Conversion - // ratio] - var units = [ - [ - "a.u. of action", - "?", - null, - "action", - false, - false, - 1.05457168181818e-34, - ], - [ - "a.u. of charge", - "e", - null, - "electric_charge", - false, - false, - 1.60217653141414e-19, - ], - [ - "a.u. of energy", - "Eh", - null, - "energy", - false, - false, - 4.35974417757576e-18, - ], - [ - "a.u. of length", - "a?", - null, - "length", - false, - false, - 5.29177210818182e-11, - ], - [ - "a.u. of mass", - "m?", - null, - "mass", - false, - false, - 9.10938261616162e-31, - ], - [ - "a.u. of time", - "?/Eh", - null, - "time", - false, - false, - 2.41888432650516e-17, - ], - ["admiralty knot", "admkn", null, "speed", false, true, 0.514773333], - ["ampere", "A", null, "electric_current", true, false, 1], - [ - "ampere per meter", - "A/m", - null, - "magnetic_field_intensity", - true, - false, - 1, - ], - ["ångström", "Å", ["ang"], "length", false, true, 1e-10], - ["are", "ar", null, "area", false, true, 100], - [ - "astronomical unit", - "ua", - null, - "length", - false, - false, - 1.49597870691667e-11, - ], - ["bar", "bar", null, "pressure", false, false, 100000], - ["barn", "b", null, "area", false, false, 1e-28], - ["becquerel", "Bq", null, "radioactivity", true, false, 1], - ["bit", "bit", ["b"], "information", false, true, 1], - ["btu", "BTU", ["btu"], "energy", false, true, 1055.05585262], - ["byte", "byte", null, "information", false, true, 8], - ["candela", "cd", null, "luminous_intensity", true, false, 1], - [ - "candela per square metre", - "cd/m?", - null, - "luminance", - true, - false, - 1, - ], - ["coulomb", "C", null, "electric_charge", true, false, 1], - ["cubic ångström", "ang3", ["ang^3"], "volume", false, true, 1e-30], - ["cubic foot", "ft3", ["ft^3"], "volume", false, true, 0.028316846592], - ["cubic inch", "in3", ["in^3"], "volume", false, true, 0.000016387064], - [ - "cubic light-year", - "ly3", - ["ly^3"], - "volume", - false, - true, - 8.46786664623715e-47, - ], - ["cubic metre", "m?", null, "volume", true, true, 1], - [ - "cubic mile", - "mi3", - ["mi^3"], - "volume", - false, - true, - 4168181825.44058, - ], - [ - "cubic nautical mile", - "Nmi3", - ["Nmi^3"], - "volume", - false, - true, - 6352182208, - ], - [ - "cubic Pica", - "Pica3", - ["Picapt3", "Pica^3", "Picapt^3"], - "volume", - false, - true, - 7.58660370370369e-8, - ], - ["cubic yard", "yd3", ["yd^3"], "volume", false, true, 0.764554857984], - ["cup", "cup", null, "volume", false, true, 0.0002365882365], - ["dalton", "Da", ["u"], "mass", false, false, 1.66053886282828e-27], - ["day", "d", ["day"], "time", false, true, 86400], - ["degree", "°", null, "angle", false, false, 0.0174532925199433], - [ - "degrees Rankine", - "Rank", - null, - "temperature", - false, - true, - 0.555555555555556, - ], - ["dyne", "dyn", ["dy"], "force", false, true, 0.00001], - ["electronvolt", "eV", ["ev"], "energy", false, true, 1.60217656514141], - ["ell", "ell", null, "length", false, true, 1.143], - ["erg", "erg", ["e"], "energy", false, true, 1e-7], - ["farad", "F", null, "electric_capacitance", true, false, 1], - ["fluid ounce", "oz", null, "volume", false, true, 0.0000295735295625], - ["foot", "ft", null, "length", false, true, 0.3048], - ["foot-pound", "flb", null, "energy", false, true, 1.3558179483314], - ["gal", "Gal", null, "acceleration", false, false, 0.01], - ["gallon", "gal", null, "volume", false, true, 0.003785411784], - ["gauss", "G", ["ga"], "magnetic_flux_density", false, true, 1], - ["grain", "grain", null, "mass", false, true, 0.0000647989], - ["gram", "g", null, "mass", false, true, 0.001], - ["gray", "Gy", null, "absorbed_dose", true, false, 1], - [ - "gross registered ton", - "GRT", - ["regton"], - "volume", - false, - true, - 2.8316846592, - ], - ["hectare", "ha", null, "area", false, true, 10000], - ["henry", "H", null, "inductance", true, false, 1], - ["hertz", "Hz", null, "frequency", true, false, 1], - ["horsepower", "HP", ["h"], "power", false, true, 745.69987158227], - [ - "horsepower-hour", - "HPh", - ["hh", "hph"], - "energy", - false, - true, - 2684519.538, - ], - ["hour", "h", ["hr"], "time", false, true, 3600], - [ - "imperial gallon (U.K.)", - "uk_gal", - null, - "volume", - false, - true, - 0.00454609, - ], - [ - "imperial hundredweight", - "lcwt", - ["uk_cwt", "hweight"], - "mass", - false, - true, - 50.802345, - ], - [ - "imperial quart (U.K)", - "uk_qt", - null, - "volume", - false, - true, - 0.0011365225, - ], - [ - "imperial ton", - "brton", - ["uk_ton", "LTON"], - "mass", - false, - true, - 1016.046909, - ], - ["inch", "in", null, "length", false, true, 0.0254], - [ - "international acre", - "uk_acre", - null, - "area", - false, - true, - 4046.8564224, - ], - ["IT calorie", "cal", null, "energy", false, true, 4.1868], - ["joule", "J", null, "energy", true, true, 1], - ["katal", "kat", null, "catalytic_activity", true, false, 1], - ["kelvin", "K", ["kel"], "temperature", true, true, 1], - ["kilogram", "kg", null, "mass", true, true, 1], - ["knot", "kn", null, "speed", false, true, 0.514444444444444], - ["light-year", "ly", null, "length", false, true, 9460730472580800], - ["litre", "L", ["l", "lt"], "volume", false, true, 0.001], - ["lumen", "lm", null, "luminous_flux", true, false, 1], - ["lux", "lx", null, "illuminance", true, false, 1], - ["maxwell", "Mx", null, "magnetic_flux", false, false, 1e-18], - ["measurement ton", "MTON", null, "volume", false, true, 1.13267386368], - [ - "meter per hour", - "m/h", - ["m/hr"], - "speed", - false, - true, - 0.00027777777777778, - ], - ["meter per second", "m/s", ["m/sec"], "speed", true, true, 1], - [ - "meter per second squared", - "m?s??", - null, - "acceleration", - true, - false, - 1, - ], - ["parsec", "pc", ["parsec"], "length", false, true, 30856775814671900], - [ - "meter squared per second", - "m?/s", - null, - "kinematic_viscosity", - true, - false, - 1, - ], - ["metre", "m", null, "length", true, true, 1], - ["miles per hour", "mph", null, "speed", false, true, 0.44704], - [ - "millimetre of mercury", - "mmHg", - null, - "pressure", - false, - false, - 133.322, - ], - ["minute", "?", null, "angle", false, false, 0.000290888208665722], - ["minute", "min", ["mn"], "time", false, true, 60], - ["modern teaspoon", "tspm", null, "volume", false, true, 0.000005], - ["mole", "mol", null, "amount_of_substance", true, false, 1], - ["morgen", "Morgen", null, "area", false, true, 2500], - [ - "n.u. of action", - "?", - null, - "action", - false, - false, - 1.05457168181818e-34, - ], - [ - "n.u. of mass", - "m?", - null, - "mass", - false, - false, - 9.10938261616162e-31, - ], - ["n.u. of speed", "c?", null, "speed", false, false, 299792458], - [ - "n.u. of time", - "?/(me?c??)", - null, - "time", - false, - false, - 1.28808866778687e-21, - ], - ["nautical mile", "M", ["Nmi"], "length", false, true, 1852], - ["newton", "N", null, "force", true, true, 1], - [ - "œrsted", - "Oe ", - null, - "magnetic_field_intensity", - false, - false, - 79.5774715459477, - ], - ["ohm", "Ω", null, "electric_resistance", true, false, 1], - ["ounce mass", "ozm", null, "mass", false, true, 0.028349523125], - ["pascal", "Pa", null, "pressure", true, false, 1], - ["pascal second", "Pa?s", null, "dynamic_viscosity", true, false, 1], - ["pferdestärke", "PS", null, "power", false, true, 735.49875], - ["phot", "ph", null, "illuminance", false, false, 0.0001], - [ - "pica (1/6 inch)", - "pica", - null, - "length", - false, - true, - 0.00035277777777778, - ], - [ - "pica (1/72 inch)", - "Pica", - ["Picapt"], - "length", - false, - true, - 0.00423333333333333, - ], - ["poise", "P", null, "dynamic_viscosity", false, false, 0.1], - ["pond", "pond", null, "force", false, true, 0.00980665], - ["pound force", "lbf", null, "force", false, true, 4.4482216152605], - ["pound mass", "lbm", null, "mass", false, true, 0.45359237], - ["quart", "qt", null, "volume", false, true, 0.000946352946], - ["radian", "rad", null, "angle", true, false, 1], - ["second", "?", null, "angle", false, false, 0.00000484813681109536], - ["second", "s", ["sec"], "time", true, true, 1], - [ - "short hundredweight", - "cwt", - ["shweight"], - "mass", - false, - true, - 45.359237, - ], - ["siemens", "S", null, "electrical_conductance", true, false, 1], - ["sievert", "Sv", null, "equivalent_dose", true, false, 1], - ["slug", "sg", null, "mass", false, true, 14.59390294], - ["square ångström", "ang2", ["ang^2"], "area", false, true, 1e-20], - ["square foot", "ft2", ["ft^2"], "area", false, true, 0.09290304], - ["square inch", "in2", ["in^2"], "area", false, true, 0.00064516], - [ - "square light-year", - "ly2", - ["ly^2"], - "area", - false, - true, - 8.95054210748189e31, - ], - ["square meter", "m?", null, "area", true, true, 1], - ["square mile", "mi2", ["mi^2"], "area", false, true, 2589988.110336], - [ - "square nautical mile", - "Nmi2", - ["Nmi^2"], - "area", - false, - true, - 3429904, - ], - [ - "square Pica", - "Pica2", - ["Picapt2", "Pica^2", "Picapt^2"], - "area", - false, - true, - 0.00001792111111111, - ], - ["square yard", "yd2", ["yd^2"], "area", false, true, 0.83612736], - ["statute mile", "mi", null, "length", false, true, 1609.344], - ["steradian", "sr", null, "solid_angle", true, false, 1], - ["stilb", "sb", null, "luminance", false, false, 0.0001], - ["stokes", "St", null, "kinematic_viscosity", false, false, 0.0001], - ["stone", "stone", null, "mass", false, true, 6.35029318], - ["tablespoon", "tbs", null, "volume", false, true, 0.0000147868], - ["teaspoon", "tsp", null, "volume", false, true, 0.00000492892], - ["tesla", "T", null, "magnetic_flux_density", true, true, 1], - ["thermodynamic calorie", "c", null, "energy", false, true, 4.184], - ["ton", "ton", null, "mass", false, true, 907.18474], - ["tonne", "t", null, "mass", false, false, 1000], - ["U.K. pint", "uk_pt", null, "volume", false, true, 0.00056826125], - ["U.S. bushel", "bushel", null, "volume", false, true, 0.03523907], - ["U.S. oil barrel", "barrel", null, "volume", false, true, 0.158987295], - ["U.S. pint", "pt", ["us_pt"], "volume", false, true, 0.000473176473], - [ - "U.S. survey mile", - "survey_mi", - null, - "length", - false, - true, - 1609.347219, - ], - [ - "U.S. survey/statute acre", - "us_acre", - null, - "area", - false, - true, - 4046.87261, - ], - ["volt", "V", null, "voltage", true, false, 1], - ["watt", "W", null, "power", true, true, 1], - ["watt-hour", "Wh", ["wh"], "energy", false, true, 3600], - ["weber", "Wb", null, "magnetic_flux", true, false, 1], - ["yard", "yd", null, "length", false, true, 0.9144], - ["year", "yr", null, "time", false, true, 31557600], - ]; - - // Binary prefixes - // [Name, Prefix power of 2 value, Previx value, Abbreviation, Derived - // from] - var binary_prefixes = { - Yi: ["yobi", 80, 1208925819614629174706176, "Yi", "yotta"], - Zi: ["zebi", 70, 1180591620717411303424, "Zi", "zetta"], - Ei: ["exbi", 60, 1152921504606846976, "Ei", "exa"], - Pi: ["pebi", 50, 1125899906842624, "Pi", "peta"], - Ti: ["tebi", 40, 1099511627776, "Ti", "tera"], - Gi: ["gibi", 30, 1073741824, "Gi", "giga"], - Mi: ["mebi", 20, 1048576, "Mi", "mega"], - ki: ["kibi", 10, 1024, "ki", "kilo"], - }; - - // Unit prefixes - // [Name, Multiplier, Abbreviation] - var unit_prefixes = { - Y: ["yotta", 1e24, "Y"], - Z: ["zetta", 1e21, "Z"], - E: ["exa", 1e18, "E"], - P: ["peta", 1e15, "P"], - T: ["tera", 1e12, "T"], - G: ["giga", 1e9, "G"], - M: ["mega", 1e6, "M"], - k: ["kilo", 1e3, "k"], - h: ["hecto", 1e2, "h"], - e: ["dekao", 1e1, "e"], - d: ["deci", 1e-1, "d"], - c: ["centi", 1e-2, "c"], - m: ["milli", 1e-3, "m"], - u: ["micro", 1e-6, "u"], - n: ["nano", 1e-9, "n"], - p: ["pico", 1e-12, "p"], - f: ["femto", 1e-15, "f"], - a: ["atto", 1e-18, "a"], - z: ["zepto", 1e-21, "z"], - y: ["yocto", 1e-24, "y"], - }; - - // Initialize units and multipliers - var from = null; - var to = null; - var base_from_unit = from_unit; - var base_to_unit = to_unit; - var from_multiplier = 1; - var to_multiplier = 1; - var alt; - - // Lookup from and to units - for (var i = 0; i < units.length; i++) { - alt = units[i][2] === null ? [] : units[i][2]; - if ( - units[i][1] === base_from_unit || - alt.indexOf(base_from_unit) >= 0 - ) { - from = units[i]; - } - if (units[i][1] === base_to_unit || alt.indexOf(base_to_unit) >= 0) { - to = units[i]; - } - } - - // Lookup from prefix - if (from === null) { - var from_binary_prefix = binary_prefixes[from_unit.substring(0, 2)]; - var from_unit_prefix = unit_prefixes[from_unit.substring(0, 1)]; - - // Handle dekao unit prefix (only unit prefix with two characters) - if (from_unit.substring(0, 2) === "da") { - from_unit_prefix = ["dekao", 1e1, "da"]; - } - - // Handle binary prefixes first (so that 'Yi' is processed before - // 'Y') - if (from_binary_prefix) { - from_multiplier = from_binary_prefix[2]; - base_from_unit = from_unit.substring(2); - } else if (from_unit_prefix) { - from_multiplier = from_unit_prefix[1]; - base_from_unit = from_unit.substring(from_unit_prefix[2].length); - } - - // Lookup from unit - for (var j = 0; j < units.length; j++) { - alt = units[j][2] === null ? [] : units[j][2]; - if ( - units[j][1] === base_from_unit || - alt.indexOf(base_from_unit) >= 0 - ) { - from = units[j]; - } - } - } - - // Lookup to prefix - if (to === null) { - var to_binary_prefix = binary_prefixes[to_unit.substring(0, 2)]; - var to_unit_prefix = unit_prefixes[to_unit.substring(0, 1)]; - - // Handle dekao unit prefix (only unit prefix with two characters) - if (to_unit.substring(0, 2) === "da") { - to_unit_prefix = ["dekao", 1e1, "da"]; - } - - // Handle binary prefixes first (so that 'Yi' is processed before - // 'Y') - if (to_binary_prefix) { - to_multiplier = to_binary_prefix[2]; - base_to_unit = to_unit.substring(2); - } else if (to_unit_prefix) { - to_multiplier = to_unit_prefix[1]; - base_to_unit = to_unit.substring(to_unit_prefix[2].length); - } - - // Lookup to unit - for (var k = 0; k < units.length; k++) { - alt = units[k][2] === null ? [] : units[k][2]; - if (units[k][1] === base_to_unit || alt.indexOf(base_to_unit) >= 0) { - to = units[k]; - } - } - } - - // Return error if a unit does not exist - if (from === null || to === null) { - return error.na; - } - - // Return error if units represent different quantities - if (from[3] !== to[3]) { - return error.na; - } - - // Return converted number - return (number * from[6] * from_multiplier) / (to[6] * to_multiplier); - }; - - exports.DEC2BIN = function (number, places) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - - // Return error if number is not decimal, is lower than -512, or is - // greater than 511 - if (!/^-?[0-9]{1,3}$/.test(number) || number < -512 || number > 511) { - return error.num; - } - - // Ignore places and return a 10-character binary number if number is - // negative - if (number < 0) { - return ( - "1" + - REPT("0", 9 - (512 + number).toString(2).length) + - (512 + number).toString(2) - ); - } - - // Convert decimal number to binary - var result = parseInt(number, 10).toString(2); - - // Return binary number using the minimum number of characters necessary - // if places is undefined - if (typeof places === "undefined") { - return result; - } else { - // Return error if places is nonnumeric - if (isNaN(places)) { - return error.value; - } - - // Return error if places is negative - if (places < 0) { - return error.num; - } - - // Truncate places in case it is not an integer - places = Math.floor(places); - - // Pad return value with leading 0s (zeros) if necessary (using - // Underscore.string) - return places >= result.length - ? REPT("0", places - result.length) + result - : error.num; - } - }; - - exports.DEC2HEX = function (number, places) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - - // Return error if number is not decimal, is lower than -549755813888, - // or is greater than 549755813887 - if ( - !/^-?[0-9]{1,12}$/.test(number) || - number < -549755813888 || - number > 549755813887 - ) { - return error.num; - } - - // Ignore places and return a 10-character hexadecimal number if number - // is negative - if (number < 0) { - return (1099511627776 + number).toString(16); - } - - // Convert decimal number to hexadecimal - var result = parseInt(number, 10).toString(16); - - // Return hexadecimal number using the minimum number of characters - // necessary if places is undefined - if (typeof places === "undefined") { - return result; - } else { - // Return error if places is nonnumeric - if (isNaN(places)) { - return error.value; - } - - // Return error if places is negative - if (places < 0) { - return error.num; - } - - // Truncate places in case it is not an integer - places = Math.floor(places); - - // Pad return value with leading 0s (zeros) if necessary (using - // Underscore.string) - return places >= result.length - ? REPT("0", places - result.length) + result - : error.num; - } - }; - - exports.DEC2OCT = function (number, places) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - - // Return error if number is not decimal, is lower than -549755813888, - // or is greater than 549755813887 - if ( - !/^-?[0-9]{1,9}$/.test(number) || - number < -536870912 || - number > 536870911 - ) { - return error.num; - } - - // Ignore places and return a 10-character octal number if number is - // negative - if (number < 0) { - return (1073741824 + number).toString(8); - } - - // Convert decimal number to octal - var result = parseInt(number, 10).toString(8); - - // Return octal number using the minimum number of characters necessary - // if places is undefined - if (typeof places === "undefined") { - return result; - } else { - // Return error if places is nonnumeric - if (isNaN(places)) { - return error.value; - } - - // Return error if places is negative - if (places < 0) { - return error.num; - } - - // Truncate places in case it is not an integer - places = Math.floor(places); - - // Pad return value with leading 0s (zeros) if necessary (using - // Underscore.string) - return places >= result.length - ? REPT("0", places - result.length) + result - : error.num; - } - }; - - exports.DELTA = function (number1, number2) { - // Set number2 to zero if undefined - number2 = number2 === undefined ? 0 : number2; - number1 = utils.parseNumber(number1); - number2 = utils.parseNumber(number2); - if (utils.anyIsError(number1, number2)) { - return error.value; - } - - // Return delta - return number1 === number2 ? 1 : 0; - }; - - exports.ERF = function (lower_bound, upper_bound) {}; - - exports.ERF.PRECISE = function () {}; - - exports.ERFC = function (x) {}; - - exports.ERFC.PRECISE = function () {}; - - exports.GESTEP = function (number, step) { - step = step || 0; - number = utils.parseNumber(number); - if (utils.anyIsError(step, number)) { - return number; - } - - // Return delta - return number >= step ? 1 : 0; - }; - - exports.HEX2BIN = function (number, places) { - // Return error if number is not hexadecimal or contains more than ten - // characters (10 digits) - if (!/^[0-9A-Fa-f]{1,10}$/.test(number)) { - return error.num; - } - - // Check if number is negative - var negative = - number.length === 10 && number.substring(0, 1).toLowerCase() === "f" - ? true - : false; - - // Convert hexadecimal number to decimal - var decimal = negative - ? parseInt(number, 16) - 1099511627776 - : parseInt(number, 16); - - // Return error if number is lower than -512 or greater than 511 - if (decimal < -512 || decimal > 511) { - return error.num; - } - - // Ignore places and return a 10-character binary number if number is - // negative - if (negative) { - return ( - "1" + - REPT("0", 9 - (512 + decimal).toString(2).length) + - (512 + decimal).toString(2) - ); - } - - // Convert decimal number to binary - var result = decimal.toString(2); - - // Return binary number using the minimum number of characters necessary - // if places is undefined - if (places === undefined) { - return result; - } else { - // Return error if places is nonnumeric - if (isNaN(places)) { - return error.value; - } - - // Return error if places is negative - if (places < 0) { - return error.num; - } - - // Truncate places in case it is not an integer - places = Math.floor(places); - - // Pad return value with leading 0s (zeros) if necessary (using - // Underscore.string) - return places >= result.length - ? REPT("0", places - result.length) + result - : error.num; - } - }; - - exports.HEX2DEC = function (number) { - // Return error if number is not hexadecimal or contains more than ten - // characters (10 digits) - if (!/^[0-9A-Fa-f]{1,10}$/.test(number)) { - return error.num; - } - - // Convert hexadecimal number to decimal - var decimal = parseInt(number, 16); - - // Return decimal number - return decimal >= 549755813888 ? decimal - 1099511627776 : decimal; - }; - - exports.HEX2OCT = function (number, places) { - // Return error if number is not hexadecimal or contains more than ten - // characters (10 digits) - if (!/^[0-9A-Fa-f]{1,10}$/.test(number)) { - return error.num; - } - - // Convert hexadecimal number to decimal - var decimal = parseInt(number, 16); - - // Return error if number is positive and greater than 0x1fffffff - // (536870911) - if (decimal > 536870911 && decimal < 1098974756864) { - return error.num; - } - - // Ignore places and return a 10-character octal number if number is - // negative - if (decimal >= 1098974756864) { - return (decimal - 1098437885952).toString(8); - } - - // Convert decimal number to octal - var result = decimal.toString(8); - - // Return octal number using the minimum number of characters necessary - // if places is undefined - if (places === undefined) { - return result; - } else { - // Return error if places is nonnumeric - if (isNaN(places)) { - return error.value; - } - - // Return error if places is negative - if (places < 0) { - return error.num; - } - - // Truncate places in case it is not an integer - places = Math.floor(places); - - // Pad return value with leading 0s (zeros) if necessary (using - // Underscore.string) - return places >= result.length - ? REPT("0", places - result.length) + result - : error.num; - } - }; - - exports.IMABS = function (inumber) { - // Lookup real and imaginary coefficients using exports.js - // [http://formulajs.org] - var x = exports.IMREAL(inumber); - var y = exports.IMAGINARY(inumber); - - // Return error if either coefficient is not a number - if (utils.anyIsError(x, y)) { - return error.value; - } - - // Return absolute value of complex number - return Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)); - }; - - exports.IMAGINARY = function (inumber) { - if (inumber === undefined || inumber === true || inumber === false) { - return error.value; - } - - // Return 0 if inumber is equal to 0 - if (inumber === 0 || inumber === "0") { - return 0; - } - - // Handle special cases - if (["i", "j"].indexOf(inumber) >= 0) { - return 1; - } - - // Normalize imaginary coefficient - inumber = inumber - .replace("+i", "+1i") - .replace("-i", "-1i") - .replace("+j", "+1j") - .replace("-j", "-1j"); - - // Lookup sign - var plus = inumber.indexOf("+"); - var minus = inumber.indexOf("-"); - if (plus === 0) { - plus = inumber.indexOf("+", 1); - } - - if (minus === 0) { - minus = inumber.indexOf("-", 1); - } - - // Lookup imaginary unit - var last = inumber.substring(inumber.length - 1, inumber.length); - var unit = last === "i" || last === "j"; - - if (plus >= 0 || minus >= 0) { - // Return error if imaginary unit is neither i nor j - if (!unit) { - return error.num; - } - - // Return imaginary coefficient of complex number - if (plus >= 0) { - return isNaN(inumber.substring(0, plus)) || - isNaN(inumber.substring(plus + 1, inumber.length - 1)) - ? error.num - : Number(inumber.substring(plus + 1, inumber.length - 1)); - } else { - return isNaN(inumber.substring(0, minus)) || - isNaN(inumber.substring(minus + 1, inumber.length - 1)) - ? error.num - : -Number(inumber.substring(minus + 1, inumber.length - 1)); - } - } else { - if (unit) { - return isNaN(inumber.substring(0, inumber.length - 1)) - ? error.num - : inumber.substring(0, inumber.length - 1); - } else { - return isNaN(inumber) ? error.num : 0; - } - } - }; - - exports.IMARGUMENT = function (inumber) { - // Lookup real and imaginary coefficients using exports.js - // [http://formulajs.org] - var x = exports.IMREAL(inumber); - var y = exports.IMAGINARY(inumber); - - // Return error if either coefficient is not a number - if (utils.anyIsError(x, y)) { - return error.value; - } - - // Return error if inumber is equal to zero - if (x === 0 && y === 0) { - return error.div0; - } - - // Return PI/2 if x is equal to zero and y is positive - if (x === 0 && y > 0) { - return Math.PI / 2; - } - - // Return -PI/2 if x is equal to zero and y is negative - if (x === 0 && y < 0) { - return -Math.PI / 2; - } - - // Return zero if x is negative and y is equal to zero - if (y === 0 && x > 0) { - return 0; - } - - // Return zero if x is negative and y is equal to zero - if (y === 0 && x < 0) { - return -Math.PI; - } - - // Return argument of complex number - if (x > 0) { - return Math.atan(y / x); - } else if (x < 0 && y >= 0) { - return Math.atan(y / x) + Math.PI; - } else { - return Math.atan(y / x) - Math.PI; - } - }; - - exports.IMCONJUGATE = function (inumber) { - // Lookup real and imaginary coefficients using exports.js - // [http://formulajs.org] - var x = exports.IMREAL(inumber); - var y = exports.IMAGINARY(inumber); - - if (utils.anyIsError(x, y)) { - return error.value; - } - - // Lookup imaginary unit - var unit = inumber.substring(inumber.length - 1); - unit = unit === "i" || unit === "j" ? unit : "i"; - - // Return conjugate of complex number - return y !== 0 ? exports.COMPLEX(x, -y, unit) : inumber; - }; - - exports.IMCOS = function (inumber) { - // Lookup real and imaginary coefficients using exports.js - // [http://formulajs.org] - var x = exports.IMREAL(inumber); - var y = exports.IMAGINARY(inumber); - - if (utils.anyIsError(x, y)) { - return error.value; - } - - // Lookup imaginary unit - var unit = inumber.substring(inumber.length - 1); - unit = unit === "i" || unit === "j" ? unit : "i"; - - // Return cosine of complex number - return exports.COMPLEX( - (Math.cos(x) * (Math.exp(y) + Math.exp(-y))) / 2, - (-Math.sin(x) * (Math.exp(y) - Math.exp(-y))) / 2, - unit - ); - }; - - exports.IMCOSH = function (inumber) { - // Lookup real and imaginary coefficients using exports.js - // [http://formulajs.org] - var x = exports.IMREAL(inumber); - var y = exports.IMAGINARY(inumber); - - if (utils.anyIsError(x, y)) { - return error.value; - } - - // Lookup imaginary unit - var unit = inumber.substring(inumber.length - 1); - unit = unit === "i" || unit === "j" ? unit : "i"; - - // Return hyperbolic cosine of complex number - return exports.COMPLEX( - (Math.cos(y) * (Math.exp(x) + Math.exp(-x))) / 2, - (Math.sin(y) * (Math.exp(x) - Math.exp(-x))) / 2, - unit - ); - }; - - exports.IMCOT = function (inumber) { - // Lookup real and imaginary coefficients using Formula.js - // [http://formulajs.org] - var x = exports.IMREAL(inumber); - var y = exports.IMAGINARY(inumber); - - if (utils.anyIsError(x, y)) { - return error.value; - } - - // Return cotangent of complex number - return exports.IMDIV(exports.IMCOS(inumber), exports.IMSIN(inumber)); - }; - - exports.IMDIV = function (inumber1, inumber2) { - // Lookup real and imaginary coefficients using Formula.js - // [http://formulajs.org] - var a = exports.IMREAL(inumber1); - var b = exports.IMAGINARY(inumber1); - var c = exports.IMREAL(inumber2); - var d = exports.IMAGINARY(inumber2); - - if (utils.anyIsError(a, b, c, d)) { - return error.value; - } - - // Lookup imaginary unit - var unit1 = inumber1.substring(inumber1.length - 1); - var unit2 = inumber2.substring(inumber2.length - 1); - var unit = "i"; - if (unit1 === "j") { - unit = "j"; - } else if (unit2 === "j") { - unit = "j"; - } - - // Return error if inumber2 is null - if (c === 0 && d === 0) { - return error.num; - } - - // Return exponential of complex number - var den = c * c + d * d; - return exports.COMPLEX( - (a * c + b * d) / den, - (b * c - a * d) / den, - unit - ); - }; - - exports.IMEXP = function (inumber) { - // Lookup real and imaginary coefficients using Formula.js - // [http://formulajs.org] - var x = exports.IMREAL(inumber); - var y = exports.IMAGINARY(inumber); - - if (utils.anyIsError(x, y)) { - return error.value; - } - - // Lookup imaginary unit - var unit = inumber.substring(inumber.length - 1); - unit = unit === "i" || unit === "j" ? unit : "i"; - - // Return exponential of complex number - var e = Math.exp(x); - return exports.COMPLEX(e * Math.cos(y), e * Math.sin(y), unit); - }; - - exports.IMLN = function (inumber) { - // Lookup real and imaginary coefficients using Formula.js - // [http://formulajs.org] - var x = exports.IMREAL(inumber); - var y = exports.IMAGINARY(inumber); - - if (utils.anyIsError(x, y)) { - return error.value; - } - - // Lookup imaginary unit - var unit = inumber.substring(inumber.length - 1); - unit = unit === "i" || unit === "j" ? unit : "i"; - - // Return exponential of complex number - return exports.COMPLEX( - Math.log(Math.sqrt(x * x + y * y)), - Math.atan(y / x), - unit - ); - }; - - exports.IMLOG10 = function (inumber) { - // Lookup real and imaginary coefficients using Formula.js - // [http://formulajs.org] - var x = exports.IMREAL(inumber); - var y = exports.IMAGINARY(inumber); - - if (utils.anyIsError(x, y)) { - return error.value; - } - - // Lookup imaginary unit - var unit = inumber.substring(inumber.length - 1); - unit = unit === "i" || unit === "j" ? unit : "i"; - - // Return exponential of complex number - return exports.COMPLEX( - Math.log(Math.sqrt(x * x + y * y)) / Math.log(10), - Math.atan(y / x) / Math.log(10), - unit - ); - }; - - exports.IMLOG2 = function (inumber) { - // Lookup real and imaginary coefficients using Formula.js - // [http://formulajs.org] - var x = exports.IMREAL(inumber); - var y = exports.IMAGINARY(inumber); - - if (utils.anyIsError(x, y)) { - return error.value; - } - - // Lookup imaginary unit - var unit = inumber.substring(inumber.length - 1); - unit = unit === "i" || unit === "j" ? unit : "i"; - - // Return exponential of complex number - return exports.COMPLEX( - Math.log(Math.sqrt(x * x + y * y)) / Math.log(2), - Math.atan(y / x) / Math.log(2), - unit - ); - }; - - exports.IMPOWER = function (inumber, number) { - number = utils.parseNumber(number); - var x = exports.IMREAL(inumber); - var y = exports.IMAGINARY(inumber); - if (utils.anyIsError(number, x, y)) { - return error.value; - } - - // Lookup imaginary unit - var unit = inumber.substring(inumber.length - 1); - unit = unit === "i" || unit === "j" ? unit : "i"; - - // Calculate power of modulus - var p = Math.pow(exports.IMABS(inumber), number); - - // Calculate argument - var t = exports.IMARGUMENT(inumber); - - // Return exponential of complex number - return exports.COMPLEX( - p * Math.cos(number * t), - p * Math.sin(number * t), - unit - ); - }; - - exports.IMPRODUCT = function () { - // Initialize result - var result = arguments[0]; - - // Loop on all numbers - for (var i = 1; i < arguments.length; i++) { - // Lookup coefficients of two complex numbers - var a = exports.IMREAL(result); - var b = exports.IMAGINARY(result); - var c = exports.IMREAL(arguments[i]); - var d = exports.IMAGINARY(arguments[i]); - - if (utils.anyIsError(a, b, c, d)) { - return error.value; - } - - // Complute product of two complex numbers - result = exports.COMPLEX(a * c - b * d, a * d + b * c); - } - - // Return product of complex numbers - return result; - }; - - exports.IMREAL = function (inumber) { - if (inumber === undefined || inumber === true || inumber === false) { - return error.value; - } - - // Return 0 if inumber is equal to 0 - if (inumber === 0 || inumber === "0") { - return 0; - } - - // Handle special cases - if ( - [ - "i", - "+i", - "1i", - "+1i", - "-i", - "-1i", - "j", - "+j", - "1j", - "+1j", - "-j", - "-1j", - ].indexOf(inumber) >= 0 - ) { - return 0; - } - - // Lookup sign - var plus = inumber.indexOf("+"); - var minus = inumber.indexOf("-"); - if (plus === 0) { - plus = inumber.indexOf("+", 1); - } - if (minus === 0) { - minus = inumber.indexOf("-", 1); - } - - // Lookup imaginary unit - var last = inumber.substring(inumber.length - 1, inumber.length); - var unit = last === "i" || last === "j"; - - if (plus >= 0 || minus >= 0) { - // Return error if imaginary unit is neither i nor j - if (!unit) { - return error.num; - } - - // Return real coefficient of complex number - if (plus >= 0) { - return isNaN(inumber.substring(0, plus)) || - isNaN(inumber.substring(plus + 1, inumber.length - 1)) - ? error.num - : Number(inumber.substring(0, plus)); - } else { - return isNaN(inumber.substring(0, minus)) || - isNaN(inumber.substring(minus + 1, inumber.length - 1)) - ? error.num - : Number(inumber.substring(0, minus)); - } - } else { - if (unit) { - return isNaN(inumber.substring(0, inumber.length - 1)) - ? error.num - : 0; - } else { - return isNaN(inumber) ? error.num : inumber; - } - } - }; - - exports.IMSEC = function (inumber) { - // Return error if inumber is a logical value - if (inumber === true || inumber === false) { - return error.value; - } - - // Lookup real and imaginary coefficients using Formula.js - // [http://formulajs.org] - var x = exports.IMREAL(inumber); - var y = exports.IMAGINARY(inumber); - - if (utils.anyIsError(x, y)) { - return error.value; - } - - // Return secant of complex number - return exports.IMDIV("1", exports.IMCOS(inumber)); - }; - - exports.IMSECH = function (inumber) { - // Lookup real and imaginary coefficients using Formula.js - // [http://formulajs.org] - var x = exports.IMREAL(inumber); - var y = exports.IMAGINARY(inumber); - - if (utils.anyIsError(x, y)) { - return error.value; - } - - // Return hyperbolic secant of complex number - return exports.IMDIV("1", exports.IMCOSH(inumber)); - }; - - exports.IMSIN = function (inumber) { - // Lookup real and imaginary coefficients using Formula.js - // [http://formulajs.org] - var x = exports.IMREAL(inumber); - var y = exports.IMAGINARY(inumber); - - if (utils.anyIsError(x, y)) { - return error.value; - } - - // Lookup imaginary unit - var unit = inumber.substring(inumber.length - 1); - unit = unit === "i" || unit === "j" ? unit : "i"; - - // Return sine of complex number - return exports.COMPLEX( - (Math.sin(x) * (Math.exp(y) + Math.exp(-y))) / 2, - (Math.cos(x) * (Math.exp(y) - Math.exp(-y))) / 2, - unit - ); - }; - - exports.IMSINH = function (inumber) { - // Lookup real and imaginary coefficients using Formula.js - // [http://formulajs.org] - var x = exports.IMREAL(inumber); - var y = exports.IMAGINARY(inumber); - - if (utils.anyIsError(x, y)) { - return error.value; - } - - // Lookup imaginary unit - var unit = inumber.substring(inumber.length - 1); - unit = unit === "i" || unit === "j" ? unit : "i"; - - // Return hyperbolic sine of complex number - return exports.COMPLEX( - (Math.cos(y) * (Math.exp(x) - Math.exp(-x))) / 2, - (Math.sin(y) * (Math.exp(x) + Math.exp(-x))) / 2, - unit - ); - }; - - exports.IMSQRT = function (inumber) { - // Lookup real and imaginary coefficients using Formula.js - // [http://formulajs.org] - var x = exports.IMREAL(inumber); - var y = exports.IMAGINARY(inumber); - - if (utils.anyIsError(x, y)) { - return error.value; - } - - // Lookup imaginary unit - var unit = inumber.substring(inumber.length - 1); - unit = unit === "i" || unit === "j" ? unit : "i"; - - // Calculate power of modulus - var s = Math.sqrt(exports.IMABS(inumber)); - - // Calculate argument - var t = exports.IMARGUMENT(inumber); - - // Return exponential of complex number - return exports.COMPLEX(s * Math.cos(t / 2), s * Math.sin(t / 2), unit); - }; - - exports.IMCSC = function (inumber) { - // Return error if inumber is a logical value - if (inumber === true || inumber === false) { - return error.value; - } - - // Lookup real and imaginary coefficients using Formula.js - // [http://formulajs.org] - var x = exports.IMREAL(inumber); - var y = exports.IMAGINARY(inumber); - - // Return error if either coefficient is not a number - if (utils.anyIsError(x, y)) { - return error.num; - } - - // Return cosecant of complex number - return exports.IMDIV("1", exports.IMSIN(inumber)); - }; - - exports.IMCSCH = function (inumber) { - // Return error if inumber is a logical value - if (inumber === true || inumber === false) { - return error.value; - } - - // Lookup real and imaginary coefficients using Formula.js - // [http://formulajs.org] - var x = exports.IMREAL(inumber); - var y = exports.IMAGINARY(inumber); - - // Return error if either coefficient is not a number - if (utils.anyIsError(x, y)) { - return error.num; - } - - // Return hyperbolic cosecant of complex number - return exports.IMDIV("1", exports.IMSINH(inumber)); - }; - - exports.IMSUB = function (inumber1, inumber2) { - // Lookup real and imaginary coefficients using Formula.js - // [http://formulajs.org] - var a = this.IMREAL(inumber1); - var b = this.IMAGINARY(inumber1); - var c = this.IMREAL(inumber2); - var d = this.IMAGINARY(inumber2); - - if (utils.anyIsError(a, b, c, d)) { - return error.value; - } - - // Lookup imaginary unit - var unit1 = inumber1.substring(inumber1.length - 1); - var unit2 = inumber2.substring(inumber2.length - 1); - var unit = "i"; - if (unit1 === "j") { - unit = "j"; - } else if (unit2 === "j") { - unit = "j"; - } - - // Return _ of two complex numbers - return this.COMPLEX(a - c, b - d, unit); - }; - - exports.IMSUM = function () { - var args = utils.flatten(arguments); - - // Initialize result - var result = args[0]; - - // Loop on all numbers - for (var i = 1; i < args.length; i++) { - // Lookup coefficients of two complex numbers - var a = this.IMREAL(result); - var b = this.IMAGINARY(result); - var c = this.IMREAL(args[i]); - var d = this.IMAGINARY(args[i]); - - if (utils.anyIsError(a, b, c, d)) { - return error.value; - } - - // Complute product of two complex numbers - result = this.COMPLEX(a + c, b + d); - } - - // Return sum of complex numbers - return result; - }; - - exports.IMTAN = function (inumber) { - // Return error if inumber is a logical value - if (inumber === true || inumber === false) { - return error.value; - } - - // Lookup real and imaginary coefficients using Formula.js - // [http://formulajs.org] - var x = exports.IMREAL(inumber); - var y = exports.IMAGINARY(inumber); - - if (utils.anyIsError(x, y)) { - return error.value; - } - - // Return tangent of complex number - return this.IMDIV(this.IMSIN(inumber), this.IMCOS(inumber)); - }; - - exports.OCT2BIN = function (number, places) { - // Return error if number is not hexadecimal or contains more than ten - // characters (10 digits) - if (!/^[0-7]{1,10}$/.test(number)) { - return error.num; - } - - // Check if number is negative - var negative = - number.length === 10 && number.substring(0, 1) === "7" ? true : false; - - // Convert octal number to decimal - var decimal = negative - ? parseInt(number, 8) - 1073741824 - : parseInt(number, 8); - - // Return error if number is lower than -512 or greater than 511 - if (decimal < -512 || decimal > 511) { - return error.num; - } - - // Ignore places and return a 10-character binary number if number is - // negative - if (negative) { - return ( - "1" + - REPT("0", 9 - (512 + decimal).toString(2).length) + - (512 + decimal).toString(2) - ); - } - - // Convert decimal number to binary - var result = decimal.toString(2); - - // Return binary number using the minimum number of characters necessary - // if places is undefined - if (typeof places === "undefined") { - return result; - } else { - // Return error if places is nonnumeric - if (isNaN(places)) { - return error.value; - } - - // Return error if places is negative - if (places < 0) { - return error.num; - } - - // Truncate places in case it is not an integer - places = Math.floor(places); - - // Pad return value with leading 0s (zeros) if necessary (using - // Underscore.string) - return places >= result.length - ? REPT("0", places - result.length) + result - : error.num; - } - }; - - exports.OCT2DEC = function (number) { - // Return error if number is not octal or contains more than ten - // characters (10 digits) - if (!/^[0-7]{1,10}$/.test(number)) { - return error.num; - } - - // Convert octal number to decimal - var decimal = parseInt(number, 8); - - // Return decimal number - return decimal >= 536870912 ? decimal - 1073741824 : decimal; - }; - - exports.OCT2HEX = function (number, places) { - // Return error if number is not octal or contains more than ten - // characters (10 digits) - if (!/^[0-7]{1,10}$/.test(number)) { - return error.num; - } - - // Convert octal number to decimal - var decimal = parseInt(number, 8); - - // Ignore places and return a 10-character octal number if number is - // negative - if (decimal >= 536870912) { - return "ff" + (decimal + 3221225472).toString(16); - } - - // Convert decimal number to hexadecimal - var result = decimal.toString(16); - - // Return hexadecimal number using the minimum number of characters - // necessary if places is undefined - if (places === undefined) { - return result; - } else { - // Return error if places is nonnumeric - if (isNaN(places)) { - return error.value; - } - - // Return error if places is negative - if (places < 0) { - return error.num; - } - - // Truncate places in case it is not an integer - places = Math.floor(places); - - // Pad return value with leading 0s (zeros) if necessary (using - // Underscore.string) - return places >= result.length - ? REPT("0", places - result.length) + result - : error.num; - } - }; - - return exports; - })(); - - met.financial = (function () { - var exports = {}; - - function validDate(d) { - return d && d.getTime && !isNaN(d.getTime()); - } - - function ensureDate(d) { - return d instanceof Date ? d : new Date(d); - } - - exports.ACCRINT = function ( - issue, - first, - settlement, - rate, - par, - frequency, - basis - ) { - // Return error if either date is invalid - issue = ensureDate(issue); - first = ensureDate(first); - settlement = ensureDate(settlement); - if (!validDate(issue) || !validDate(first) || !validDate(settlement)) { - return "#VALUE!"; - } - - // Return error if either rate or par are lower than or equal to zero - if (rate <= 0 || par <= 0) { - return "#NUM!"; - } - - // Return error if frequency is neither 1, 2, or 4 - if ([1, 2, 4].indexOf(frequency) === -1) { - return "#NUM!"; - } - - // Return error if basis is neither 0, 1, 2, 3, or 4 - if ([0, 1, 2, 3, 4].indexOf(basis) === -1) { - return "#NUM!"; - } - - // Return error if settlement is before or equal to issue - if (settlement <= issue) { - return "#NUM!"; - } - - // Set default values - par = par || 0; - basis = basis || 0; - - // Compute accrued interest - return par * rate * YEARFRAC(issue, settlement, basis); - }; - - exports.ACCRINTM = null; - - exports.AMORDEGRC = null; - - exports.AMORLINC = null; - - exports.COUPDAYBS = null; - - exports.COUPDAYS = null; - - exports.COUPDAYSNC = null; - - exports.COUPNCD = null; - - exports.COUPNUM = null; - - exports.COUPPCD = null; - - exports.CUMIPMT = function (rate, periods, value, start, end, type) { - // Credits: algorithm inspired by Apache OpenOffice - // Credits: Hannes Stiebitzhofer for the translations of function and - // variable names - // Requires exports.FV() and exports.PMT() from exports.js - // [http://stoic.com/exports/] - - rate = utils.parseNumber(rate); - periods = utils.parseNumber(periods); - value = utils.parseNumber(value); - if (utils.anyIsError(rate, periods, value)) { - return error.value; - } - - // Return error if either rate, periods, or value are lower than or - // equal to zero - if (rate <= 0 || periods <= 0 || value <= 0) { - return error.num; - } - - // Return error if start < 1, end < 1, or start > end - if (start < 1 || end < 1 || start > end) { - return error.num; - } - - // Return error if type is neither 0 nor 1 - if (type !== 0 && type !== 1) { - return error.num; - } - - // Compute cumulative interest - var payment = exports.PMT(rate, periods, value, 0, type); - var interest = 0; - - if (start === 1) { - if (type === 0) { - interest = -value; - start++; - } - } - - for (var i = start; i <= end; i++) { - if (type === 1) { - interest += exports.FV(rate, i - 2, payment, value, 1) - payment; - } else { - interest += exports.FV(rate, i - 1, payment, value, 0); - } - } - interest *= rate; - - // Return cumulative interest - return interest; - }; - - exports.CUMPRINC = function (rate, periods, value, start, end, type) { - // Credits: algorithm inspired by Apache OpenOffice - // Credits: Hannes Stiebitzhofer for the translations of function and - // variable names - - rate = utils.parseNumber(rate); - periods = utils.parseNumber(periods); - value = utils.parseNumber(value); - if (utils.anyIsError(rate, periods, value)) { - return error.value; - } - - // Return error if either rate, periods, or value are lower than or - // equal to zero - if (rate <= 0 || periods <= 0 || value <= 0) { - return error.num; - } - - // Return error if start < 1, end < 1, or start > end - if (start < 1 || end < 1 || start > end) { - return error.num; - } - - // Return error if type is neither 0 nor 1 - if (type !== 0 && type !== 1) { - return error.num; - } - - // Compute cumulative principal - var payment = exports.PMT(rate, periods, value, 0, type); - var principal = 0; - if (start === 1) { - if (type === 0) { - principal = payment + value * rate; - } else { - principal = payment; - } - start++; - } - for (var i = start; i <= end; i++) { - if (type > 0) { - principal += - payment - - (exports.FV(rate, i - 2, payment, value, 1) - payment) * rate; - } else { - principal += - payment - exports.FV(rate, i - 1, payment, value, 0) * rate; - } - } - - // Return cumulative principal - return principal; - }; - - exports.DB = function (cost, salvage, life, period, month) { - // Initialize month - month = month === undefined ? 12 : month; - - cost = utils.parseNumber(cost); - salvage = utils.parseNumber(salvage); - life = utils.parseNumber(life); - period = utils.parseNumber(period); - month = utils.parseNumber(month); - if (utils.anyIsError(cost, salvage, life, period, month)) { - return error.value; - } - - // Return error if any of the parameters is negative - if (cost < 0 || salvage < 0 || life < 0 || period < 0) { - return error.num; - } - - // Return error if month is not an integer between 1 and 12 - if ([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12].indexOf(month) === -1) { - return error.num; - } - - // Return error if period is greater than life - if (period > life) { - return error.num; - } - - // Return 0 (zero) if salvage is greater than or equal to cost - if (salvage >= cost) { - return 0; - } - - // Rate is rounded to three decimals places - var rate = (1 - Math.pow(salvage / cost, 1 / life)).toFixed(3); - - // Compute initial depreciation - var initial = (cost * rate * month) / 12; - - // Compute total depreciation - var total = initial; - var current = 0; - var ceiling = period === life ? life - 1 : period; - for (var i = 2; i <= ceiling; i++) { - current = (cost - total) * rate; - total += current; - } - - // Depreciation for the first and last periods are special cases - if (period === 1) { - // First period - return initial; - } else if (period === life) { - // Last period - return (cost - total) * rate; - } else { - return current; - } - }; - - exports.DDB = function (cost, salvage, life, period, factor) { - // Initialize factor - factor = factor === undefined ? 2 : factor; - - cost = utils.parseNumber(cost); - salvage = utils.parseNumber(salvage); - life = utils.parseNumber(life); - period = utils.parseNumber(period); - factor = utils.parseNumber(factor); - if (utils.anyIsError(cost, salvage, life, period, factor)) { - return error.value; - } - - // Return error if any of the parameters is negative or if factor is - // null - if (cost < 0 || salvage < 0 || life < 0 || period < 0 || factor <= 0) { - return error.num; - } - - // Return error if period is greater than life - if (period > life) { - return error.num; - } - - // Return 0 (zero) if salvage is greater than or equal to cost - if (salvage >= cost) { - return 0; - } - - // Compute depreciation - var total = 0; - var current = 0; - for (var i = 1; i <= period; i++) { - current = Math.min( - (cost - total) * (factor / life), - cost - salvage - total - ); - total += current; - } - - // Return depreciation - return current; - }; - - exports.DISC = null; - - exports.DOLLARDE = function (dollar, fraction) { - // Credits: algorithm inspired by Apache OpenOffice - - dollar = utils.parseNumber(dollar); - fraction = utils.parseNumber(fraction); - if (utils.anyIsError(dollar, fraction)) { - return error.value; - } - - // Return error if fraction is negative - if (fraction < 0) { - return error.num; - } - - // Return error if fraction is greater than or equal to 0 and less than - // 1 - if (fraction >= 0 && fraction < 1) { - return error.div0; - } - - // Truncate fraction if it is not an integer - fraction = parseInt(fraction, 10); - - // Compute integer part - var result = parseInt(dollar, 10); - - // Add decimal part - result += - ((dollar % 1) * - Math.pow(10, Math.ceil(Math.log(fraction) / Math.LN10))) / - fraction; - - // Round result - var power = Math.pow(10, Math.ceil(Math.log(fraction) / Math.LN2) + 1); - result = Math.round(result * power) / power; - - // Return converted dollar price - return result; - }; - - exports.DOLLARFR = function (dollar, fraction) { - // Credits: algorithm inspired by Apache OpenOffice - - dollar = utils.parseNumber(dollar); - fraction = utils.parseNumber(fraction); - if (utils.anyIsError(dollar, fraction)) { - return error.value; - } - - // Return error if fraction is negative - if (fraction < 0) { - return error.num; - } - - // Return error if fraction is greater than or equal to 0 and less than - // 1 - if (fraction >= 0 && fraction < 1) { - return error.div0; - } - - // Truncate fraction if it is not an integer - fraction = parseInt(fraction, 10); - - // Compute integer part - var result = parseInt(dollar, 10); - - // Add decimal part - result += - (dollar % 1) * - Math.pow(10, -Math.ceil(Math.log(fraction) / Math.LN10)) * - fraction; - - // Return converted dollar price - return result; - }; - - exports.DURATION = null; - - exports.EFFECT = function (rate, periods) { - rate = utils.parseNumber(rate); - periods = utils.parseNumber(periods); - if (utils.anyIsError(rate, periods)) { - return error.value; - } - - // Return error if rate <=0 or periods < 1 - if (rate <= 0 || periods < 1) { - return error.num; - } - - // Truncate periods if it is not an integer - periods = parseInt(periods, 10); - - // Return effective annual interest rate - return Math.pow(1 + rate / periods, periods) - 1; - }; - - exports.FV = function (rate, periods, payment, value, type) { - // Credits: algorithm inspired by Apache OpenOffice - - value = value || 0; - type = type || 0; - - rate = utils.parseNumber(rate); - periods = utils.parseNumber(periods); - payment = utils.parseNumber(payment); - value = utils.parseNumber(value); - type = utils.parseNumber(type); - if (utils.anyIsError(rate, periods, payment, value, type)) { - return error.value; - } - - // Return future value - var result; - if (rate === 0) { - result = value + payment * periods; - } else { - var term = Math.pow(1 + rate, periods); - if (type === 1) { - result = value * term + (payment * (1 + rate) * (term - 1)) / rate; - } else { - result = value * term + (payment * (term - 1)) / rate; - } - } - return -result; - }; - - exports.FVSCHEDULE = function (principal, schedule) { - principal = utils.parseNumber(principal); - schedule = utils.parseNumberArray(utils.flatten(schedule)); - if (utils.anyIsError(principal, schedule)) { - return error.value; - } - - var n = schedule.length; - var future = principal; - - // Apply all interests in schedule - for (var i = 0; i < n; i++) { - // Apply scheduled interest - future *= 1 + schedule[i]; - } - - // Return future value - return future; - }; - - exports.INTRATE = null; - - exports.IPMT = function (rate, period, periods, present, future, type) { - // Credits: algorithm inspired by Apache OpenOffice - - future = future || 0; - type = type || 0; - - rate = utils.parseNumber(rate); - period = utils.parseNumber(period); - periods = utils.parseNumber(periods); - present = utils.parseNumber(present); - future = utils.parseNumber(future); - type = utils.parseNumber(type); - if (utils.anyIsError(rate, period, periods, present, future, type)) { - return error.value; - } - - // Compute payment - var payment = exports.PMT(rate, periods, present, future, type); - - // Compute interest - var interest; - if (period === 1) { - if (type === 1) { - interest = 0; - } else { - interest = -present; - } - } else { - if (type === 1) { - interest = - exports.FV(rate, period - 2, payment, present, 1) - payment; - } else { - interest = exports.FV(rate, period - 1, payment, present, 0); - } - } - - // Return interest - return interest * rate; - }; - - exports.IRR = function (values, guess) { - // Credits: algorithm inspired by Apache OpenOffice - - guess = guess || 0; - - values = utils.parseNumberArray(utils.flatten(values)); - guess = utils.parseNumber(guess); - if (utils.anyIsError(values, guess)) { - return error.value; - } - - // Calculates the resulting amount - var irrResult = function (values, dates, rate) { - var r = rate + 1; - var result = values[0]; - for (var i = 1; i < values.length; i++) { - result += values[i] / Math.pow(r, (dates[i] - dates[0]) / 365); - } - return result; - }; - - // Calculates the first derivation - var irrResultDeriv = function (values, dates, rate) { - var r = rate + 1; - var result = 0; - for (var i = 1; i < values.length; i++) { - var frac = (dates[i] - dates[0]) / 365; - result -= (frac * values[i]) / Math.pow(r, frac + 1); - } - return result; - }; - - // Initialize dates and check that values contains at least one positive - // value and one negative value - var dates = []; - var positive = false; - var negative = false; - for (var i = 0; i < values.length; i++) { - dates[i] = i === 0 ? 0 : dates[i - 1] + 365; - if (values[i] > 0) { - positive = true; - } - if (values[i] < 0) { - negative = true; - } - } - - // Return error if values does not contain at least one positive value - // and one negative value - if (!positive || !negative) { - return error.num; - } - - // Initialize guess and resultRate - guess = guess === undefined ? 0.1 : guess; - var resultRate = guess; - - // Set maximum epsilon for end of iteration - var epsMax = 1e-10; - - // Implement Newton's method - var newRate, epsRate, resultValue; - var contLoop = true; - do { - resultValue = irrResult(values, dates, resultRate); - newRate = - resultRate - resultValue / irrResultDeriv(values, dates, resultRate); - epsRate = Math.abs(newRate - resultRate); - resultRate = newRate; - contLoop = epsRate > epsMax && Math.abs(resultValue) > epsMax; - } while (contLoop); - - // Return internal rate of return - return resultRate; - }; - - exports.ISPMT = function (rate, period, periods, value) { - rate = utils.parseNumber(rate); - period = utils.parseNumber(period); - periods = utils.parseNumber(periods); - value = utils.parseNumber(value); - if (utils.anyIsError(rate, period, periods, value)) { - return error.value; - } - - // Return interest - return value * rate * (period / periods - 1); - }; - - exports.MDURATION = null; - - exports.MIRR = function (values, finance_rate, reinvest_rate) { - values = utils.parseNumberArray(utils.flatten(values)); - finance_rate = utils.parseNumber(finance_rate); - reinvest_rate = utils.parseNumber(reinvest_rate); - if (utils.anyIsError(values, finance_rate, reinvest_rate)) { - return error.value; - } - - // Initialize number of values - var n = values.length; - - // Lookup payments (negative values) and incomes (positive values) - var payments = []; - var incomes = []; - for (var i = 0; i < n; i++) { - if (values[i] < 0) { - payments.push(values[i]); - } else { - incomes.push(values[i]); - } - } - - // Return modified internal rate of return - var num = - -exports.NPV(reinvest_rate, incomes) * - Math.pow(1 + reinvest_rate, n - 1); - var den = exports.NPV(finance_rate, payments) * (1 + finance_rate); - return Math.pow(num / den, 1 / (n - 1)) - 1; - }; - - exports.NOMINAL = function (rate, periods) { - rate = utils.parseNumber(rate); - periods = utils.parseNumber(periods); - if (utils.anyIsError(rate, periods)) { - return error.value; - } - - // Return error if rate <=0 or periods < 1 - if (rate <= 0 || periods < 1) { - return error.num; - } - - // Truncate periods if it is not an integer - periods = parseInt(periods, 10); - - // Return nominal annual interest rate - return (Math.pow(rate + 1, 1 / periods) - 1) * periods; - }; - - exports.NPER = function (rate, payment, present, future, type) { - type = type === undefined ? 0 : type; - future = future === undefined ? 0 : future; - - rate = utils.parseNumber(rate); - payment = utils.parseNumber(payment); - present = utils.parseNumber(present); - future = utils.parseNumber(future); - type = utils.parseNumber(type); - if (utils.anyIsError(rate, payment, present, future, type)) { - return error.value; - } - - // Return number of periods - var num = payment * (1 + rate * type) - future * rate; - var den = present * rate + payment * (1 + rate * type); - return Math.log(num / den) / Math.log(1 + rate); - }; - - exports.NPV = function () { - var args = utils.parseNumberArray(utils.flatten(arguments)); - if (args instanceof Error) { - return args; - } - - // Lookup rate - var rate = args[0]; - - // Initialize net present value - var value = 0; - - // Loop on all values - for (var j = 1; j < args.length; j++) { - value += args[j] / Math.pow(1 + rate, j); - } - - // Return net present value - return value; - }; - - exports.ODDFPRICE = null; - - exports.ODDFYIELD = null; - - exports.ODDLPRICE = null; - - exports.ODDLYIELD = null; - - exports.PDURATION = function (rate, present, future) { - rate = utils.parseNumber(rate); - present = utils.parseNumber(present); - future = utils.parseNumber(future); - if (utils.anyIsError(rate, present, future)) { - return error.value; - } - - // Return error if rate <=0 - if (rate <= 0) { - return error.num; - } - - // Return number of periods - return (Math.log(future) - Math.log(present)) / Math.log(1 + rate); - }; - - exports.PMT = function (rate, periods, present, future, type) { - // Credits: algorithm inspired by Apache OpenOffice - - future = future || 0; - type = type || 0; - - rate = utils.parseNumber(rate); - periods = utils.parseNumber(periods); - present = utils.parseNumber(present); - future = utils.parseNumber(future); - type = utils.parseNumber(type); - if (utils.anyIsError(rate, periods, present, future, type)) { - return error.value; - } - - // Return payment - var result; - if (rate === 0) { - result = (present + future) / periods; - } else { - var term = Math.pow(1 + rate, periods); - if (type === 1) { - result = - ((future * rate) / (term - 1) + (present * rate) / (1 - 1 / term)) / - (1 + rate); - } else { - result = - (future * rate) / (term - 1) + (present * rate) / (1 - 1 / term); - } - } - return -result; - }; - - exports.PPMT = function (rate, period, periods, present, future, type) { - future = future || 0; - type = type || 0; - - rate = utils.parseNumber(rate); - periods = utils.parseNumber(periods); - present = utils.parseNumber(present); - future = utils.parseNumber(future); - type = utils.parseNumber(type); - if (utils.anyIsError(rate, periods, present, future, type)) { - return error.value; - } - - return ( - exports.PMT(rate, periods, present, future, type) - - exports.IPMT(rate, period, periods, present, future, type) - ); - }; - - exports.PRICE = null; - - exports.PRICEDISC = null; - - exports.PRICEMAT = null; - - exports.PV = function (rate, periods, payment, future, type) { - future = future || 0; - type = type || 0; - - rate = utils.parseNumber(rate); - periods = utils.parseNumber(periods); - payment = utils.parseNumber(payment); - future = utils.parseNumber(future); - type = utils.parseNumber(type); - if (utils.anyIsError(rate, periods, payment, future, type)) { - return error.value; - } - - // Return present value - if (rate === 0) { - return -payment * periods - future; - } else { - return ( - (((1 - Math.pow(1 + rate, periods)) / rate) * - payment * - (1 + rate * type) - - future) / - Math.pow(1 + rate, periods) - ); - } - }; - - exports.RATE = function (periods, payment, present, future, type, guess) { - // Credits: rabugento - - guess = guess === undefined ? 0.01 : guess; - future = future === undefined ? 0 : future; - type = type === undefined ? 0 : type; - - periods = utils.parseNumber(periods); - payment = utils.parseNumber(payment); - present = utils.parseNumber(present); - future = utils.parseNumber(future); - type = utils.parseNumber(type); - guess = utils.parseNumber(guess); - if (utils.anyIsError(periods, payment, present, future, type, guess)) { - return error.value; - } - - // Set maximum epsilon for end of iteration - var epsMax = 1e-6; - - // Set maximum number of iterations - var iterMax = 100; - var iter = 0; - var close = false; - var rate = guess; - - while (iter < iterMax && !close) { - var t1 = Math.pow(rate + 1, periods); - var t2 = Math.pow(rate + 1, periods - 1); - - var f1 = - future + - t1 * present + - (payment * (t1 - 1) * (rate * type + 1)) / rate; - var f2 = - periods * t2 * present - - (payment * (t1 - 1) * (rate * type + 1)) / Math.pow(rate, 2); - var f3 = - (periods * payment * t2 * (rate * type + 1)) / rate + - (payment * (t1 - 1) * type) / rate; - - var newRate = rate - f1 / (f2 + f3); - - if (Math.abs(newRate - rate) < epsMax) close = true; - iter++; - rate = newRate; - } - - if (!close) return Number.NaN + rate; - return rate; - }; - - // TODO - exports.RECEIVED = null; - - exports.RRI = function (periods, present, future) { - periods = utils.parseNumber(periods); - present = utils.parseNumber(present); - future = utils.parseNumber(future); - if (utils.anyIsError(periods, present, future)) { - return error.value; - } - - // Return error if periods or present is equal to 0 (zero) - if (periods === 0 || present === 0) { - return error.num; - } - - // Return equivalent interest rate - return Math.pow(future / present, 1 / periods) - 1; - }; - - exports.SLN = function (cost, salvage, life) { - cost = utils.parseNumber(cost); - salvage = utils.parseNumber(salvage); - life = utils.parseNumber(life); - if (utils.anyIsError(cost, salvage, life)) { - return error.value; - } - - // Return error if life equal to 0 (zero) - if (life === 0) { - return error.num; - } - - // Return straight-line depreciation - return (cost - salvage) / life; - }; - - exports.SYD = function (cost, salvage, life, period) { - // Return error if any of the parameters is not a number - cost = utils.parseNumber(cost); - salvage = utils.parseNumber(salvage); - life = utils.parseNumber(life); - period = utils.parseNumber(period); - if (utils.anyIsError(cost, salvage, life, period)) { - return error.value; - } - - // Return error if life equal to 0 (zero) - if (life === 0) { - return error.num; - } - - // Return error if period is lower than 1 or greater than life - if (period < 1 || period > life) { - return error.num; - } - - // Truncate period if it is not an integer - period = parseInt(period, 10); - - // Return straight-line depreciation - return ((cost - salvage) * (life - period + 1) * 2) / (life * (life + 1)); - }; - - exports.TBILLEQ = function (settlement, maturity, discount) { - settlement = utils.parseDate(settlement); - maturity = utils.parseDate(maturity); - discount = utils.parseNumber(discount); - if (utils.anyIsError(settlement, maturity, discount)) { - return error.value; - } - - // Return error if discount is lower than or equal to zero - if (discount <= 0) { - return error.num; - } - - // Return error if settlement is greater than maturity - if (settlement > maturity) { - return error.num; - } - - // Return error if maturity is more than one year after settlement - if (maturity - settlement > 365 * 24 * 60 * 60 * 1000) { - return error.num; - } - - // Return bond-equivalent yield - return ( - (365 * discount) / - (360 - discount * DAYS360(settlement, maturity, false)) - ); - }; - - exports.TBILLPRICE = function (settlement, maturity, discount) { - settlement = utils.parseDate(settlement); - maturity = utils.parseDate(maturity); - discount = utils.parseNumber(discount); - if (utils.anyIsError(settlement, maturity, discount)) { - return error.value; - } - - // Return error if discount is lower than or equal to zero - if (discount <= 0) { - return error.num; - } - - // Return error if settlement is greater than maturity - if (settlement > maturity) { - return error.num; - } - - // Return error if maturity is more than one year after settlement - if (maturity - settlement > 365 * 24 * 60 * 60 * 1000) { - return error.num; - } - - // Return bond-equivalent yield - return ( - 100 * (1 - (discount * DAYS360(settlement, maturity, false)) / 360) - ); - }; - - exports.TBILLYIELD = function (settlement, maturity, price) { - settlement = utils.parseDate(settlement); - maturity = utils.parseDate(maturity); - price = utils.parseNumber(price); - if (utils.anyIsError(settlement, maturity, price)) { - return error.value; - } - - // Return error if price is lower than or equal to zero - if (price <= 0) { - return error.num; - } - - // Return error if settlement is greater than maturity - if (settlement > maturity) { - return error.num; - } - - // Return error if maturity is more than one year after settlement - if (maturity - settlement > 365 * 24 * 60 * 60 * 1000) { - return error.num; - } - - // Return bond-equivalent yield - return ( - ((100 - price) * 360) / (price * DAYS360(settlement, maturity, false)) - ); - }; - - exports.VDB = null; - - exports.XIRR = function (values, dates, guess) { - // Credits: algorithm inspired by Apache OpenOffice - - values = utils.parseNumberArray(utils.flatten(values)); - dates = utils.parseDateArray(utils.flatten(dates)); - guess = utils.parseNumber(guess); - if (utils.anyIsError(values, dates, guess)) { - return error.value; - } - - // Calculates the resulting amount - var irrResult = function (values, dates, rate) { - var r = rate + 1; - var result = values[0]; - for (var i = 1; i < values.length; i++) { - result += values[i] / Math.pow(r, DAYS(dates[i], dates[0]) / 365); - } - return result; - }; - - // Calculates the first derivation - var irrResultDeriv = function (values, dates, rate) { - var r = rate + 1; - var result = 0; - for (var i = 1; i < values.length; i++) { - var frac = DAYS(dates[i], dates[0]) / 365; - result -= (frac * values[i]) / Math.pow(r, frac + 1); - } - return result; - }; - - // Check that values contains at least one positive value and one - // negative value - var positive = false; - var negative = false; - for (var i = 0; i < values.length; i++) { - if (values[i] > 0) { - positive = true; - } - if (values[i] < 0) { - negative = true; - } - } - - // Return error if values does not contain at least one positive value - // and one negative value - if (!positive || !negative) { - return error.num; - } - - // Initialize guess and resultRate - guess = guess || 0.1; - var resultRate = guess; - - // Set maximum epsilon for end of iteration - var epsMax = 1e-10; - - // Implement Newton's method - var newRate, epsRate, resultValue; - var contLoop = true; - do { - resultValue = irrResult(values, dates, resultRate); - newRate = - resultRate - resultValue / irrResultDeriv(values, dates, resultRate); - epsRate = Math.abs(newRate - resultRate); - resultRate = newRate; - contLoop = epsRate > epsMax && Math.abs(resultValue) > epsMax; - } while (contLoop); - - // Return internal rate of return - return resultRate; - }; - - exports.XNPV = function (rate, values, dates) { - rate = utils.parseNumber(rate); - values = utils.parseNumberArray(utils.flatten(values)); - dates = utils.parseDateArray(utils.flatten(dates)); - if (utils.anyIsError(rate, values, dates)) { - return error.value; - } - - var result = 0; - for (var i = 0; i < values.length; i++) { - result += - values[i] / Math.pow(1 + rate, DAYS(dates[i], dates[0]) / 365); - } - return result; - }; - - exports.YIELD = null; - - exports.YIELDDISC = null; - - exports.YIELDMAT = null; - - return exports; - })(); - - met.information = (function () { - var exports = {}; - exports.CELL = null; - - exports.ERROR = {}; - exports.ERROR.TYPE = function (error_val) { - switch (error_val) { - case error.nil: - return 1; - case error.div0: - return 2; - case error.value: - return 3; - case error.ref: - return 4; - case error.name: - return 5; - case error.num: - return 6; - case error.na: - return 7; - case error.data: - return 8; - } - return error.na; - }; - - exports.INFO = null; - - exports.ISBLANK = function (value) { - return value === null; - }; - - exports.ISBINARY = function (number) { - return /^[01]{1,10}$/.test(number); - }; - - exports.ISERR = function (value) { - return ( - [ - error.value, - error.ref, - error.div0, - error.num, - error.name, - error.nil, - ].indexOf(value) >= 0 || - (typeof value === "number" && (isNaN(value) || !isFinite(value))) - ); - }; - - exports.ISERROR = function (value) { - return exports.ISERR(value) || value === error.na; - }; - - exports.ISEVEN = function (number) { - return Math.floor(Math.abs(number)) & 1 ? false : true; - }; - - // TODO - exports.ISFORMULA = null; - - exports.ISLOGICAL = function (value) { - return value === true || value === false; - }; - - exports.ISNA = function (value) { - return value === error.na; - }; - - exports.ISNONTEXT = function (value) { - return typeof value !== "string"; - }; - - exports.ISNUMBER = function (value) { - return typeof value === "number" && !isNaN(value) && isFinite(value); - }; - - exports.ISODD = function (number) { - return Math.floor(Math.abs(number)) & 1 ? true : false; - }; - - exports.ISREF = null; - - exports.ISTEXT = function (value) { - return typeof value === "string"; - }; - - exports.N = function (value) { - if (this.ISNUMBER(value)) { - return value; - } - if (value instanceof Date) { - return value.getTime(); - } - if (value === true) { - return 1; - } - if (value === false) { - return 0; - } - if (this.ISERROR(value)) { - return value; - } - return 0; - }; - - exports.NA = function () { - return error.na; - }; - - exports.SHEET = null; - - exports.SHEETS = null; - - exports.TYPE = function (value) { - if (this.ISNUMBER(value)) { - return 1; - } - if (this.ISTEXT(value)) { - return 2; - } - if (this.ISLOGICAL(value)) { - return 4; - } - if (this.ISERROR(value)) { - return 16; - } - if (Array.isArray(value)) { - return 64; - } - }; - - return exports; - })(); - - met.logical = (function () { - var exports = {}; - - exports.AND = function () { - var args = utils.flatten(arguments); - var result = true; - for (var i = 0; i < args.length; i++) { - if (!args[i]) { - result = false; - } - } - return result; - }; - - exports.CHOOSE = function () { - if (arguments.length < 2) { - return error.na; - } - - var index = arguments[0]; - if (index < 1 || index > 254) { - return error.value; - } - - if (arguments.length < index + 1) { - return error.value; - } - - return arguments[index]; - }; - - exports.FALSE = function () { - return false; - }; - - exports.IF = function (test, then_value, otherwise_value) { - return test ? then_value : otherwise_value; - }; - - exports.IFERROR = function (value, valueIfError) { - if (ISERROR(value)) { - return valueIfError; - } - return value; - }; - - exports.IFNA = function (value, value_if_na) { - return value === error.na ? value_if_na : value; - }; - - exports.NOT = function (logical) { - return !logical; - }; - - exports.OR = function () { - var args = utils.flatten(arguments); - var result = false; - for (var i = 0; i < args.length; i++) { - if (args[i]) { - result = true; - } - } - return result; - }; - - exports.TRUE = function () { - return true; - }; - - exports.XOR = function () { - var args = utils.flatten(arguments); - var result = 0; - for (var i = 0; i < args.length; i++) { - if (args[i]) { - result++; - } - } - return Math.floor(Math.abs(result)) & 1 ? true : false; - }; - - exports.SWITCH = function () { - var result; - if (arguments.length > 0) { - var targetValue = arguments[0]; - var argc = arguments.length - 1; - var switchCount = Math.floor(argc / 2); - var switchSatisfied = false; - var defaultClause = - argc % 2 === 0 ? null : arguments[arguments.length - 1]; - - if (switchCount) { - for (var index = 0; index < switchCount; index++) { - if (targetValue === arguments[index * 2 + 1]) { - result = arguments[index * 2 + 2]; - switchSatisfied = true; - break; - } - } - } - - if (!switchSatisfied && defaultClause) { - result = defaultClause; - } - } - - return result; - }; - - return exports; - })(); - - met.math = (function () { - var exports = {}; - - exports.ABS = function (number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return Math.abs(utils.parseNumber(number)); - }; - - exports.ACOS = function (number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return Math.acos(number); - }; - - exports.ACOSH = function (number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return Math.log(number + Math.sqrt(number * number - 1)); - }; - - exports.ACOT = function (number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return Math.atan(1 / number); - }; - - exports.ACOTH = function (number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return 0.5 * Math.log((number + 1) / (number - 1)); - }; - - exports.AGGREGATE = null; - - exports.ARABIC = function (text) { - // Credits: Rafa? Kukawski - if ( - !/^M*(?:D?C{0,3}|C[MD])(?:L?X{0,3}|X[CL])(?:V?I{0,3}|I[XV])$/.test(text) - ) { - return error.value; - } - var r = 0; - text.replace(/[MDLV]|C[MD]?|X[CL]?|I[XV]?/g, function (i) { - r += { - M: 1000, - CM: 900, - D: 500, - CD: 400, - C: 100, - XC: 90, - L: 50, - XL: 40, - X: 10, - IX: 9, - V: 5, - IV: 4, - I: 1, - }[i]; - }); - return r; - }; - - exports.ASIN = function (number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return Math.asin(number); - }; - - exports.ASINH = function (number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return Math.log(number + Math.sqrt(number * number + 1)); - }; - - exports.ATAN = function (number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return Math.atan(number); - }; - - exports.ATAN2 = function (number_x, number_y) { - number_x = utils.parseNumber(number_x); - number_y = utils.parseNumber(number_y); - if (utils.anyIsError(number_x, number_y)) { - return error.value; - } - return Math.atan2(number_x, number_y); - }; - - exports.ATANH = function (number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return Math.log((1 + number) / (1 - number)) / 2; - }; - - exports.BASE = function (number, radix, min_length) { - min_length = min_length || 0; - - number = utils.parseNumber(number); - radix = utils.parseNumber(radix); - min_length = utils.parseNumber(min_length); - if (utils.anyIsError(number, radix, min_length)) { - return error.value; - } - min_length = min_length === undefined ? 0 : min_length; - var result = number.toString(radix); - return ( - new Array(Math.max(min_length + 1 - result.length, 0)).join("0") + - result - ); - }; - - exports.CEILING = function (number, significance, mode) { - significance = significance === undefined ? 1 : significance; - mode = mode === undefined ? 0 : mode; - - number = utils.parseNumber(number); - significance = utils.parseNumber(significance); - mode = utils.parseNumber(mode); - if (utils.anyIsError(number, significance, mode)) { - return error.value; - } - if (significance === 0) { - return 0; - } - - significance = Math.abs(significance); - if (number >= 0) { - return Math.ceil(number / significance) * significance; - } else { - if (mode === 0) { - return ( - -1 * Math.floor(Math.abs(number) / significance) * significance - ); - } else { - return -1 * Math.ceil(Math.abs(number) / significance) * significance; - } - } - }; - - exports.CEILING.MATH = exports.CEILING; - - exports.CEILING.PRECISE = exports.CEILING; - - exports.COMBIN = function (number, number_chosen) { - number = utils.parseNumber(number); - number_chosen = utils.parseNumber(number_chosen); - if (utils.anyIsError(number, number_chosen)) { - return error.value; - } - return ( - exports.FACT(number) / - (exports.FACT(number_chosen) * exports.FACT(number - number_chosen)) - ); - }; - - exports.COMBINA = function (number, number_chosen) { - number = utils.parseNumber(number); - number_chosen = utils.parseNumber(number_chosen); - if (utils.anyIsError(number, number_chosen)) { - return error.value; - } - return number === 0 && number_chosen === 0 - ? 1 - : exports.COMBIN(number + number_chosen - 1, number - 1); - }; - - exports.COS = function (number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return Math.cos(number); - }; - - exports.COSH = function (number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return (Math.exp(number) + Math.exp(-number)) / 2; - }; - - exports.COT = function (number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return 1 / Math.tan(number); - }; - - exports.COTH = function (number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - var e2 = Math.exp(2 * number); - return (e2 + 1) / (e2 - 1); - }; - - exports.CSC = function (number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return 1 / Math.sin(number); - }; - - exports.CSCH = function (number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return 2 / (Math.exp(number) - Math.exp(-number)); - }; - - exports.DECIMAL = function (number, radix) { - if (arguments.length < 1) { - return error.value; - } - - return parseInt(number, radix); - }; - - exports.DEGREES = function (number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return (number * 180) / Math.PI; - }; - - exports.EVEN = function (number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return exports.CEILING(number, -2, -1); - }; - - exports.EXP = Math.exp; - - var MEMOIZED_FACT = []; - exports.FACT = function (number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - var n = Math.floor(number); - if (n === 0 || n === 1) { - return 1; - } else if (MEMOIZED_FACT[n] > 0) { - return MEMOIZED_FACT[n]; - } else { - MEMOIZED_FACT[n] = exports.FACT(n - 1) * n; - return MEMOIZED_FACT[n]; - } - }; - - exports.FACTDOUBLE = function (number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - var n = Math.floor(number); - if (n <= 0) { - return 1; - } else { - return n * exports.FACTDOUBLE(n - 2); - } - }; - - exports.FLOOR = function (number, significance, mode) { - significance = significance === undefined ? 1 : significance; - mode = mode === undefined ? 0 : mode; - - number = utils.parseNumber(number); - significance = utils.parseNumber(significance); - mode = utils.parseNumber(mode); - if (utils.anyIsError(number, significance, mode)) { - return error.value; - } - if (significance === 0) { - return 0; - } - - significance = Math.abs(significance); - if (number >= 0) { - return Math.floor(number / significance) * significance; - } else { - if (mode === 0) { - return -1 * Math.ceil(Math.abs(number) / significance) * significance; - } else { - return ( - -1 * Math.floor(Math.abs(number) / significance) * significance - ); - } - } - }; - - exports.FLOOR.MATH = exports.FLOOR; - - exports.GCD = null; - - exports.INT = function (number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return Math.floor(number); - }; - - exports.LCM = function () { - // Credits: Jonas Raoni Soares Silva - var o = utils.parseNumberArray(utils.flatten(arguments)); - if (o instanceof Error) { - return o; - } - for (var i, j, n, d, r = 1; (n = o.pop()) !== undefined; ) { - while (n > 1) { - if (n % 2) { - for (i = 3, j = Math.floor(Math.sqrt(n)); i <= j && n % i; i += 2) { - // empty - } - d = i <= j ? i : n; - } else { - d = 2; - } - for ( - n /= d, r *= d, i = o.length; - i; - o[--i] % d === 0 && (o[i] /= d) === 1 && o.splice(i, 1) - ) { - // empty - } - } - } - return r; - }; - - exports.LN = function (number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return Math.log(number); - }; - - exports.LOG = function (number, base) { - number = utils.parseNumber(number); - base = base === undefined ? 10 : utils.parseNumber(base); - - if (utils.anyIsError(number, base)) { - return error.value; - } - - return Math.log(number) / Math.log(base); - }; - - exports.LOG10 = function (number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return Math.log(number) / Math.log(10); - }; - - exports.MDETERM = null; - - exports.MINVERSE = null; - - exports.MMULT = null; - - exports.MOD = function (dividend, divisor) { - dividend = utils.parseNumber(dividend); - divisor = utils.parseNumber(divisor); - if (utils.anyIsError(dividend, divisor)) { - return error.value; - } - if (divisor === 0) { - return error.div0; - } - var modulus = Math.abs(dividend % divisor); - return divisor > 0 ? modulus : -modulus; - }; - - exports.MROUND = function (number, multiple) { - number = utils.parseNumber(number); - multiple = utils.parseNumber(multiple); - if (utils.anyIsError(number, multiple)) { - return error.value; - } - if (number * multiple < 0) { - return error.num; - } - - return Math.round(number / multiple) * multiple; - }; - - exports.MULTINOMIAL = function () { - var args = utils.parseNumberArray(utils.flatten(arguments)); - if (args instanceof Error) { - return args; - } - var sum = 0; - var divisor = 1; - for (var i = 0; i < args.length; i++) { - sum += args[i]; - divisor *= exports.FACT(args[i]); - } - return exports.FACT(sum) / divisor; - }; - - exports.MUNIT = null; - - exports.ODD = function (number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - var temp = Math.ceil(Math.abs(number)); - temp = temp & 1 ? temp : temp + 1; - return number > 0 ? temp : -temp; - }; - - exports.PI = function () { - return Math.PI; - }; - - exports.POWER = function (number, power) { - number = utils.parseNumber(number); - power = utils.parseNumber(power); - if (utils.anyIsError(number, power)) { - return error.value; - } - var result = Math.pow(number, power); - if (isNaN(result)) { - return error.num; - } - - return result; - }; - - exports.PRODUCT = function () { - var args = utils.parseNumberArray(utils.flatten(arguments)); - if (args instanceof Error) { - return args; - } - var result = 1; - for (var i = 0; i < args.length; i++) { - result *= args[i]; - } - return result; - }; - - exports.QUOTIENT = function (numerator, denominator) { - numerator = utils.parseNumber(numerator); - denominator = utils.parseNumber(denominator); - if (utils.anyIsError(numerator, denominator)) { - return error.value; - } - return parseInt(numerator / denominator, 10); - }; - - exports.RADIANS = function (number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return (number * Math.PI) / 180; - }; - - exports.RAND = function () { - return Math.random(); - }; - - exports.RANDBETWEEN = function (bottom, top) { - bottom = utils.parseNumber(bottom); - top = utils.parseNumber(top); - if (utils.anyIsError(bottom, top)) { - return error.value; - } - // Creative Commons Attribution 3.0 License - // Copyright (c) 2012 eqcode - return bottom + Math.ceil((top - bottom + 1) * Math.random()) - 1; - }; - - exports.ROMAN = null; - - exports.ROUND = function (number, digits) { - number = utils.parseNumber(number); - digits = utils.parseNumber(digits); - if (utils.anyIsError(number, digits)) { - return error.value; - } - return Math.round(number * Math.pow(10, digits)) / Math.pow(10, digits); - }; - - exports.ROUNDDOWN = function (number, digits) { - number = utils.parseNumber(number); - digits = utils.parseNumber(digits); - if (utils.anyIsError(number, digits)) { - return error.value; - } - var sign = number > 0 ? 1 : -1; - return ( - (sign * Math.floor(Math.abs(number) * Math.pow(10, digits))) / - Math.pow(10, digits) - ); - }; - - exports.ROUNDUP = function (number, digits) { - number = utils.parseNumber(number); - digits = utils.parseNumber(digits); - if (utils.anyIsError(number, digits)) { - return error.value; - } - var sign = number > 0 ? 1 : -1; - return ( - (sign * Math.ceil(Math.abs(number) * Math.pow(10, digits))) / - Math.pow(10, digits) - ); - }; - - exports.SEC = function (number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return 1 / Math.cos(number); - }; - - exports.SECH = function (number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return 2 / (Math.exp(number) + Math.exp(-number)); - }; - - exports.SERIESSUM = function (x, n, m, coefficients) { - x = utils.parseNumber(x); - n = utils.parseNumber(n); - m = utils.parseNumber(m); - coefficients = utils.parseNumberArray(coefficients); - if (utils.anyIsError(x, n, m, coefficients)) { - return error.value; - } - var result = coefficients[0] * Math.pow(x, n); - for (var i = 1; i < coefficients.length; i++) { - result += coefficients[i] * Math.pow(x, n + i * m); - } - return result; - }; - - exports.SIGN = function (number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - if (number < 0) { - return -1; - } else if (number === 0) { - return 0; - } else { - return 1; - } - }; - - exports.SIN = function (number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return Math.sin(number); - }; - - exports.SINH = function (number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return (Math.exp(number) - Math.exp(-number)) / 2; - }; - - exports.SQRT = function (number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - if (number < 0) { - return error.num; - } - return Math.sqrt(number); - }; - - exports.SQRTPI = function (number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return Math.sqrt(number * Math.PI); - }; - - exports.SUBTOTAL = null; - - exports.ADD = function (num1, num2) { - if (arguments.length !== 2) { - return error.na; - } - - num1 = utils.parseNumber(num1); - num2 = utils.parseNumber(num2); - if (utils.anyIsError(num1, num2)) { - return error.value; - } - - return num1 + num2; - }; - - exports.MINUS = function (num1, num2) { - if (arguments.length !== 2) { - return error.na; - } - - num1 = utils.parseNumber(num1); - num2 = utils.parseNumber(num2); - if (utils.anyIsError(num1, num2)) { - return error.value; - } - - return num1 - num2; - }; - - exports.DIVIDE = function (dividend, divisor) { - if (arguments.length !== 2) { - return error.na; - } - - dividend = utils.parseNumber(dividend); - divisor = utils.parseNumber(divisor); - if (utils.anyIsError(dividend, divisor)) { - return error.value; - } - - if (divisor === 0) { - return error.div0; - } - - return dividend / divisor; - }; - - exports.MULTIPLY = function (factor1, factor2) { - if (arguments.length !== 2) { - return error.na; - } - - factor1 = utils.parseNumber(factor1); - factor2 = utils.parseNumber(factor2); - if (utils.anyIsError(factor1, factor2)) { - return error.value; - } - - return factor1 * factor2; - }; - - exports.GTE = function (num1, num2) { - if (arguments.length !== 2) { - return error.na; - } - - num1 = utils.parseNumber(num1); - num2 = utils.parseNumber(num2); - if (utils.anyIsError(num1, num2)) { - return error.error; - } - - return num1 >= num2; - }; - - exports.LT = function (num1, num2) { - if (arguments.length !== 2) { - return error.na; - } - - num1 = utils.parseNumber(num1); - num2 = utils.parseNumber(num2); - if (utils.anyIsError(num1, num2)) { - return error.error; - } - - return num1 < num2; - }; - - exports.LTE = function (num1, num2) { - if (arguments.length !== 2) { - return error.na; - } - - num1 = utils.parseNumber(num1); - num2 = utils.parseNumber(num2); - if (utils.anyIsError(num1, num2)) { - return error.error; - } - - return num1 <= num2; - }; - - exports.EQ = function (value1, value2) { - if (arguments.length !== 2) { - return error.na; - } - - return value1 === value2; - }; - - exports.NE = function (value1, value2) { - if (arguments.length !== 2) { - return error.na; - } - - return value1 !== value2; - }; - - exports.POW = function (base, exponent) { - if (arguments.length !== 2) { - return error.na; - } - - base = utils.parseNumber(base); - exponent = utils.parseNumber(exponent); - if (utils.anyIsError(base, exponent)) { - return error.error; - } - - return exports.POWER(base, exponent); - }; - - exports.SUM = function () { - var result = 0; - var argsKeys = Object.keys(arguments); - for (var i = 0; i < argsKeys.length; ++i) { - var elt = arguments[argsKeys[i]]; - if (typeof elt === "number") { - result += elt; - } else if (typeof elt === "string") { - var parsed = parseFloat(elt); - !isNaN(parsed) && (result += parsed); - } else if (Array.isArray(elt)) { - result += exports.SUM.apply(null, elt); - } - } - return result; - }; - - exports.SUMIF = function () { - var args = utils.argsToArray(arguments); - var criteria = args.pop(); - var range = utils.parseNumberArray(utils.flatten(args)); - if (range instanceof Error) { - return range; - } - var result = 0; - for (var i = 0; i < range.length; i++) { - result += eval(range[i] + criteria) ? range[i] : 0; // jshint ignore:line - } - return result; - }; - - exports.SUMIFS = function () { - var args = utils.argsToArray(arguments); - var range = utils.parseNumberArray(utils.flatten(args.shift())); - if (range instanceof Error) { - return range; - } - var criteria = args; - - var n_range_elements = range.length; - var n_criterias = criteria.length; - - var result = 0; - - for (var i = 0; i < n_range_elements; i++) { - var el = range[i]; - var condition = ""; - for (var c = 0; c < n_criterias; c += 2) { - if (isNaN(criteria[c][i])) { - condition += '"' + criteria[c][i] + '"' + criteria[c + 1]; - } else { - condition += criteria[c][i] + criteria[c + 1]; - } - if (c !== n_criterias - 1) { - condition += " && "; - } - } - condition = condition.slice(0, -4); - if (eval(condition)) { - // jshint ignore:line - result += el; - } - } - return result; - }; - - exports.SUMPRODUCT = null; - - exports.SUMSQ = function () { - var numbers = utils.parseNumberArray(utils.flatten(arguments)); - if (numbers instanceof Error) { - return numbers; - } - var result = 0; - var length = numbers.length; - for (var i = 0; i < length; i++) { - result += ISNUMBER(numbers[i]) ? numbers[i] * numbers[i] : 0; - } - return result; - }; - - exports.SUMX2MY2 = function (array_x, array_y) { - array_x = utils.parseNumberArray(utils.flatten(array_x)); - array_y = utils.parseNumberArray(utils.flatten(array_y)); - if (utils.anyIsError(array_x, array_y)) { - return error.value; - } - var result = 0; - for (var i = 0; i < array_x.length; i++) { - result += array_x[i] * array_x[i] - array_y[i] * array_y[i]; - } - return result; - }; - - exports.SUMX2PY2 = function (array_x, array_y) { - array_x = utils.parseNumberArray(utils.flatten(array_x)); - array_y = utils.parseNumberArray(utils.flatten(array_y)); - if (utils.anyIsError(array_x, array_y)) { - return error.value; - } - var result = 0; - array_x = utils.parseNumberArray(utils.flatten(array_x)); - array_y = utils.parseNumberArray(utils.flatten(array_y)); - for (var i = 0; i < array_x.length; i++) { - result += array_x[i] * array_x[i] + array_y[i] * array_y[i]; - } - return result; - }; - - exports.SUMXMY2 = function (array_x, array_y) { - array_x = utils.parseNumberArray(utils.flatten(array_x)); - array_y = utils.parseNumberArray(utils.flatten(array_y)); - if (utils.anyIsError(array_x, array_y)) { - return error.value; - } - var result = 0; - array_x = utils.flatten(array_x); - array_y = utils.flatten(array_y); - for (var i = 0; i < array_x.length; i++) { - result += Math.pow(array_x[i] - array_y[i], 2); - } - return result; - }; - - exports.TAN = function (number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return Math.tan(number); - }; - - exports.TANH = function (number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - var e2 = Math.exp(2 * number); - return (e2 - 1) / (e2 + 1); - }; - - exports.TRUNC = function (number, digits) { - digits = digits === undefined ? 0 : digits; - number = utils.parseNumber(number); - digits = utils.parseNumber(digits); - if (utils.anyIsError(number, digits)) { - return error.value; - } - var sign = number > 0 ? 1 : -1; - return ( - (sign * Math.floor(Math.abs(number) * Math.pow(10, digits))) / - Math.pow(10, digits) - ); - }; - - return exports; - })(); - - met.misc = (function () { - var exports = {}; - - exports.UNIQUE = function () { - var result = []; - for (var i = 0; i < arguments.length; ++i) { - var hasElement = false; - var element = arguments[i]; - - // Check if we've already seen this element. - for (var j = 0; j < result.length; ++j) { - hasElement = result[j] === element; - if (hasElement) { - break; - } - } - - // If we did not find it, add it to the result. - if (!hasElement) { - result.push(element); - } - } - return result; - }; - - exports.FLATTEN = utils.flatten; - - exports.ARGS2ARRAY = function () { - return Array.prototype.slice.call(arguments, 0); - }; - - exports.REFERENCE = function (context, reference) { - try { - var path = reference.split("."); - var result = context; - for (var i = 0; i < path.length; ++i) { - var step = path[i]; - if (step[step.length - 1] === "]") { - var opening = step.indexOf("["); - var index = step.substring(opening + 1, step.length - 1); - result = result[step.substring(0, opening)][index]; - } else { - result = result[step]; - } - } - return result; - } catch (error) {} - }; - - exports.JOIN = function (array, separator) { - return array.join(separator); - }; - - exports.NUMBERS = function () { - var possibleNumbers = utils.flatten(arguments); - return possibleNumbers.filter(function (el) { - return typeof el === "number"; - }); - }; - - exports.NUMERAL = null; - - return exports; - })(); - - met.text = (function () { - var exports = {}; - - exports.ASC = null; - - exports.BAHTTEXT = null; - - exports.CHAR = function (number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return String.fromCharCode(number); - }; - - exports.CLEAN = function (text) { - text = text || ""; - var re = /[\0-\x1F]/g; - return text.replace(re, ""); - }; - - exports.CODE = function (text) { - text = text || ""; - return text.charCodeAt(0); - }; - - exports.CONCATENATE = function () { - var args = utils.flatten(arguments); - - var trueFound = 0; - while ((trueFound = args.indexOf(true)) > -1) { - args[trueFound] = "TRUE"; - } - - var falseFound = 0; - while ((falseFound = args.indexOf(false)) > -1) { - args[falseFound] = "FALSE"; - } - - return args.join(""); - }; - - exports.DBCS = null; - - exports.DOLLAR = null; - - exports.EXACT = function (text1, text2) { - return text1 === text2; - }; - - exports.FIND = function (find_text, within_text, position) { - position = position === undefined ? 0 : position; - return within_text - ? within_text.indexOf(find_text, position - 1) + 1 - : null; - }; - - exports.FIXED = null; - - exports.HTML2TEXT = function (value) { - var result = ""; - - if (value) { - if (value instanceof Array) { - value.forEach(function (line) { - if (result !== "") { - result += "\n"; - } - result += line.replace(/<(?:.|\n)*?>/gm, ""); - }); - } else { - result = value.replace(/<(?:.|\n)*?>/gm, ""); - } - } - - return result; - }; - - exports.LEFT = function (text, number) { - number = number === undefined ? 1 : number; - number = utils.parseNumber(number); - if (number instanceof Error || typeof text !== "string") { - return error.value; - } - return text ? text.substring(0, number) : null; - }; - - exports.LEN = function (text) { - if (arguments.length === 0) { - return error.error; - } - - if (typeof text === "string") { - return text ? text.length : 0; - } - - if (text.length) { - return text.length; - } - - if (text == null) { - return 0; - } - - return error.value; - }; - - exports.LOWER = function (text) { - if (typeof text !== "string") { - return error.value; - } - return text ? text.toLowerCase() : text; - }; - - exports.MID = function (text, start, number) { - start = utils.parseNumber(start); - number = utils.parseNumber(number); - if (utils.anyIsError(start, number) || typeof text !== "string") { - return number; - } - - var begin = start - 1; - var end = begin + number; - - return text.substring(begin, end); - }; - - exports.NUMBERVALUE = null; - - exports.PRONETIC = null; - - exports.PROPER = function (text) { - if (text === undefined || text.length === 0) { - return error.value; - } - if (text === true) { - text = "TRUE"; - } - if (text === false) { - text = "FALSE"; - } - if (isNaN(text) && typeof text === "number") { - return error.value; - } - if (typeof text === "number") { - text = "" + text; - } - - return text.replace(/\w\S*/g, function (txt) { - return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase(); - }); - }; - - exports.REGEXEXTRACT = function (text, regular_expression) { - var match = text.match(new RegExp(regular_expression)); - return match ? match[match.length > 1 ? match.length - 1 : 0] : null; - }; - - exports.REGEXMATCH = function (text, regular_expression, full) { - var match = text.match(new RegExp(regular_expression)); - return full ? match : !!match; - }; - - exports.REGEXREPLACE = function (text, regular_expression, replacement) { - return text.replace(new RegExp(regular_expression), replacement); - }; - - exports.REPLACE = function (text, position, length, new_text) { - position = utils.parseNumber(position); - length = utils.parseNumber(length); - if ( - utils.anyIsError(position, length) || - typeof text !== "string" || - typeof new_text !== "string" - ) { - return error.value; - } - return ( - text.substr(0, position - 1) + - new_text + - text.substr(position - 1 + length) - ); - }; - - exports.REPT = function (text, number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return new Array(number + 1).join(text); - }; - - exports.RIGHT = function (text, number) { - number = number === undefined ? 1 : number; - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return text ? text.substring(text.length - number) : null; - }; - - exports.SEARCH = function (find_text, within_text, position) { - var foundAt; - if (typeof find_text !== "string" || typeof within_text !== "string") { - return error.value; - } - position = position === undefined ? 0 : position; - foundAt = - within_text - .toLowerCase() - .indexOf(find_text.toLowerCase(), position - 1) + 1; - return foundAt === 0 ? error.value : foundAt; - }; - - exports.SPLIT = function (text, separator) { - return text.split(separator); - }; - - exports.SUBSTITUTE = function (text, old_text, new_text, occurrence) { - if (!text || !old_text || !new_text) { - return text; - } else if (occurrence === undefined) { - return text.replace(new RegExp(old_text, "g"), new_text); - } else { - var index = 0; - var i = 0; - while (text.indexOf(old_text, index) > 0) { - index = text.indexOf(old_text, index + 1); - i++; - if (i === occurrence) { - return ( - text.substring(0, index) + - new_text + - text.substring(index + old_text.length) - ); - } - } - } - }; - - exports.T = function (value) { - return typeof value === "string" ? value : ""; - }; - - exports.TEXT = null; - - exports.TRIM = function (text) { - if (typeof text !== "string") { - return error.value; - } - return text.replace(/ +/g, " ").trim(); - }; - - exports.UNICHAR = exports.CHAR; - - exports.UNICODE = exports.CODE; - - exports.UPPER = function (text) { - if (typeof text !== "string") { - return error.value; - } - return text.toUpperCase(); - }; - - exports.VALUE = null; - - return exports; - })(); - - met.stats = (function () { - var exports = {}; - - var SQRT2PI = 2.5066282746310002; - - exports.AVEDEV = null; - - exports.AVERAGE = function () { - var range = utils.numbers(utils.flatten(arguments)); - var n = range.length; - var sum = 0; - var count = 0; - for (var i = 0; i < n; i++) { - sum += range[i]; - count += 1; - } - return sum / count; - }; - - exports.AVERAGEA = function () { - var range = utils.flatten(arguments); - var n = range.length; - var sum = 0; - var count = 0; - for (var i = 0; i < n; i++) { - var el = range[i]; - if (typeof el === "number") { - sum += el; - } - if (el === true) { - sum++; - } - if (el !== null) { - count++; - } - } - return sum / count; - }; - - exports.AVERAGEIF = function (range, criteria, average_range) { - average_range = average_range || range; - range = utils.flatten(range); - average_range = utils.parseNumberArray(utils.flatten(average_range)); - if (average_range instanceof Error) { - return average_range; - } - var average_count = 0; - var result = 0; - for (var i = 0; i < range.length; i++) { - if (eval(range[i] + criteria)) { - // jshint ignore:line - result += average_range[i]; - average_count++; - } - } - return result / average_count; - }; - - exports.AVERAGEIFS = null; - - exports.COUNT = function () { - return utils.numbers(utils.flatten(arguments)).length; - }; - - exports.COUNTA = function () { - var range = utils.flatten(arguments); - return range.length - exports.COUNTBLANK(range); - }; - - exports.COUNTIN = function (range, value) { - var result = 0; - for (var i = 0; i < range.length; i++) { - if (range[i] === value) { - result++; - } - } - return result; - }; - - exports.COUNTBLANK = function () { - var range = utils.flatten(arguments); - var blanks = 0; - var element; - for (var i = 0; i < range.length; i++) { - element = range[i]; - if (element === null || element === "") { - blanks++; - } - } - return blanks; - }; - - exports.COUNTIF = function () { - var args = utils.argsToArray(arguments); - var criteria = args.pop(); - var range = utils.flatten(args); - if (!/[<>=!]/.test(criteria)) { - criteria = '=="' + criteria + '"'; - } - var matches = 0; - for (var i = 0; i < range.length; i++) { - if (typeof range[i] !== "string") { - if (eval(range[i] + criteria)) { - // jshint ignore:line - matches++; - } - } else { - if (eval('"' + range[i] + '"' + criteria)) { - // jshint ignore:line - matches++; - } - } - } - return matches; - }; - - exports.COUNTIFS = function () { - var args = utils.argsToArray(arguments); - var results = new Array(utils.flatten(args[0]).length); - for (var i = 0; i < results.length; i++) { - results[i] = true; - } - for (i = 0; i < args.length; i += 2) { - var range = utils.flatten(args[i]); - var criteria = args[i + 1]; - if (!/[<>=!]/.test(criteria)) { - criteria = '=="' + criteria + '"'; - } - for (var j = 0; j < range.length; j++) { - if (typeof range[j] !== "string") { - results[j] = results[j] && eval(range[j] + criteria); // jshint ignore:line - } else { - results[j] = results[j] && eval('"' + range[j] + '"' + criteria); // jshint ignore:line - } - } - } - var result = 0; - for (i = 0; i < results.length; i++) { - if (results[i]) { - result++; - } - } - return result; - }; - - exports.COUNTUNIQUE = function () { - return UNIQUE.apply(null, utils.flatten(arguments)).length; - }; - - exports.FISHER = function (x) { - x = utils.parseNumber(x); - if (x instanceof Error) { - return x; - } - return Math.log((1 + x) / (1 - x)) / 2; - }; - - exports.FISHERINV = function (y) { - y = utils.parseNumber(y); - if (y instanceof Error) { - return y; - } - var e2y = Math.exp(2 * y); - return (e2y - 1) / (e2y + 1); - }; - - exports.FREQUENCY = function (data, bins) { - data = utils.parseNumberArray(utils.flatten(data)); - bins = utils.parseNumberArray(utils.flatten(bins)); - if (utils.anyIsError(data, bins)) { - return error.value; - } - var n = data.length; - var b = bins.length; - var r = []; - for (var i = 0; i <= b; i++) { - r[i] = 0; - for (var j = 0; j < n; j++) { - if (i === 0) { - if (data[j] <= bins[0]) { - r[0] += 1; - } - } else if (i < b) { - if (data[j] > bins[i - 1] && data[j] <= bins[i]) { - r[i] += 1; - } - } else if (i === b) { - if (data[j] > bins[b - 1]) { - r[b] += 1; - } - } - } - } - return r; - }; - - exports.LARGE = function (range, k) { - range = utils.parseNumberArray(utils.flatten(range)); - k = utils.parseNumber(k); - if (utils.anyIsError(range, k)) { - return range; - } - return range.sort(function (a, b) { - return b - a; - })[k - 1]; - }; - - exports.MAX = function () { - var range = utils.numbers(utils.flatten(arguments)); - return range.length === 0 ? 0 : Math.max.apply(Math, range); - }; - - exports.MAXA = function () { - var range = utils.arrayValuesToNumbers(utils.flatten(arguments)); - return range.length === 0 ? 0 : Math.max.apply(Math, range); - }; - - exports.MIN = function () { - var range = utils.numbers(utils.flatten(arguments)); - return range.length === 0 ? 0 : Math.min.apply(Math, range); - }; - - exports.MINA = function () { - var range = utils.arrayValuesToNumbers(utils.flatten(arguments)); - return range.length === 0 ? 0 : Math.min.apply(Math, range); - }; - - exports.MODE = {}; - - exports.MODE.MULT = function () { - // Credits: Roönaän - var range = utils.parseNumberArray(utils.flatten(arguments)); - if (range instanceof Error) { - return range; - } - var n = range.length; - var count = {}; - var maxItems = []; - var max = 0; - var currentItem; - - for (var i = 0; i < n; i++) { - currentItem = range[i]; - count[currentItem] = count[currentItem] ? count[currentItem] + 1 : 1; - if (count[currentItem] > max) { - max = count[currentItem]; - maxItems = []; - } - if (count[currentItem] === max) { - maxItems[maxItems.length] = currentItem; - } - } - return maxItems; - }; - - exports.MODE.SNGL = function () { - var range = utils.parseNumberArray(utils.flatten(arguments)); - if (range instanceof Error) { - return range; - } - return exports.MODE.MULT(range).sort(function (a, b) { - return a - b; - })[0]; - }; - - exports.PERCENTILE = {}; - - exports.PERCENTILE.EXC = function (array, k) { - array = utils.parseNumberArray(utils.flatten(array)); - k = utils.parseNumber(k); - if (utils.anyIsError(array, k)) { - return error.value; - } - array = array.sort(function (a, b) { - { - return a - b; - } - }); - var n = array.length; - if (k < 1 / (n + 1) || k > 1 - 1 / (n + 1)) { - return error.num; - } - var l = k * (n + 1) - 1; - var fl = Math.floor(l); - return utils.cleanFloat( - l === fl ? array[l] : array[fl] + (l - fl) * (array[fl + 1] - array[fl]) - ); - }; - - exports.PERCENTILE.INC = function (array, k) { - array = utils.parseNumberArray(utils.flatten(array)); - k = utils.parseNumber(k); - if (utils.anyIsError(array, k)) { - return error.value; - } - array = array.sort(function (a, b) { - return a - b; - }); - var n = array.length; - var l = k * (n - 1); - var fl = Math.floor(l); - return utils.cleanFloat( - l === fl ? array[l] : array[fl] + (l - fl) * (array[fl + 1] - array[fl]) - ); - }; - - exports.PERCENTRANK = {}; - - exports.PERCENTRANK.EXC = function (array, x, significance) { - significance = significance === undefined ? 3 : significance; - array = utils.parseNumberArray(utils.flatten(array)); - x = utils.parseNumber(x); - significance = utils.parseNumber(significance); - if (utils.anyIsError(array, x, significance)) { - return error.value; - } - array = array.sort(function (a, b) { - return a - b; - }); - var uniques = UNIQUE.apply(null, array); - var n = array.length; - var m = uniques.length; - var power = Math.pow(10, significance); - var result = 0; - var match = false; - var i = 0; - while (!match && i < m) { - if (x === uniques[i]) { - result = (array.indexOf(uniques[i]) + 1) / (n + 1); - match = true; - } else if (x >= uniques[i] && (x < uniques[i + 1] || i === m - 1)) { - result = - (array.indexOf(uniques[i]) + - 1 + - (x - uniques[i]) / (uniques[i + 1] - uniques[i])) / - (n + 1); - match = true; - } - i++; - } - return Math.floor(result * power) / power; - }; - - exports.PERCENTRANK.INC = function (array, x, significance) { - significance = significance === undefined ? 3 : significance; - array = utils.parseNumberArray(utils.flatten(array)); - x = utils.parseNumber(x); - significance = utils.parseNumber(significance); - if (utils.anyIsError(array, x, significance)) { - return error.value; - } - array = array.sort(function (a, b) { - return a - b; - }); - var uniques = UNIQUE.apply(null, array); - var n = array.length; - var m = uniques.length; - var power = Math.pow(10, significance); - var result = 0; - var match = false; - var i = 0; - while (!match && i < m) { - if (x === uniques[i]) { - result = array.indexOf(uniques[i]) / (n - 1); - match = true; - } else if (x >= uniques[i] && (x < uniques[i + 1] || i === m - 1)) { - result = - (array.indexOf(uniques[i]) + - (x - uniques[i]) / (uniques[i + 1] - uniques[i])) / - (n - 1); - match = true; - } - i++; - } - return Math.floor(result * power) / power; - }; - - exports.PERMUT = function (number, number_chosen) { - number = utils.parseNumber(number); - number_chosen = utils.parseNumber(number_chosen); - if (utils.anyIsError(number, number_chosen)) { - return error.value; - } - return FACT(number) / FACT(number - number_chosen); - }; - - exports.PERMUTATIONA = function (number, number_chosen) { - number = utils.parseNumber(number); - number_chosen = utils.parseNumber(number_chosen); - if (utils.anyIsError(number, number_chosen)) { - return error.value; - } - return Math.pow(number, number_chosen); - }; - - exports.PHI = function (x) { - x = utils.parseNumber(x); - if (x instanceof Error) { - return error.value; - } - return Math.exp(-0.5 * x * x) / SQRT2PI; - }; - - exports.PROB = function (range, probability, lower, upper) { - if (lower === undefined) { - return 0; - } - upper = upper === undefined ? lower : upper; - - range = utils.parseNumberArray(utils.flatten(range)); - probability = utils.parseNumberArray(utils.flatten(probability)); - lower = utils.parseNumber(lower); - upper = utils.parseNumber(upper); - if (utils.anyIsError(range, probability, lower, upper)) { - return error.value; - } - - if (lower === upper) { - return range.indexOf(lower) >= 0 - ? probability[range.indexOf(lower)] - : 0; - } - - var sorted = range.sort(function (a, b) { - return a - b; - }); - var n = sorted.length; - var result = 0; - for (var i = 0; i < n; i++) { - if (sorted[i] >= lower && sorted[i] <= upper) { - result += probability[range.indexOf(sorted[i])]; - } - } - return result; - }; - - exports.QUARTILE = {}; - - exports.QUARTILE.EXC = function (range, quart) { - range = utils.parseNumberArray(utils.flatten(range)); - quart = utils.parseNumber(quart); - if (utils.anyIsError(range, quart)) { - return error.value; - } - switch (quart) { - case 1: - return exports.PERCENTILE.EXC(range, 0.25); - case 2: - return exports.PERCENTILE.EXC(range, 0.5); - case 3: - return exports.PERCENTILE.EXC(range, 0.75); - default: - return error.num; - } - }; - - exports.QUARTILE.INC = function (range, quart) { - range = utils.parseNumberArray(utils.flatten(range)); - quart = utils.parseNumber(quart); - if (utils.anyIsError(range, quart)) { - return error.value; - } - switch (quart) { - case 1: - return exports.PERCENTILE.INC(range, 0.25); - case 2: - return exports.PERCENTILE.INC(range, 0.5); - case 3: - return exports.PERCENTILE.INC(range, 0.75); - default: - return error.num; - } - }; - - exports.RANK = {}; - - exports.RANK.AVG = function (number, range, order) { - number = utils.parseNumber(number); - range = utils.parseNumberArray(utils.flatten(range)); - if (utils.anyIsError(number, range)) { - return error.value; - } - range = utils.flatten(range); - order = order || false; - var sort = order - ? function (a, b) { - return a - b; - } - : function (a, b) { - return b - a; - }; - range = range.sort(sort); - - var length = range.length; - var count = 0; - for (var i = 0; i < length; i++) { - if (range[i] === number) { - count++; - } - } - - return count > 1 - ? (2 * range.indexOf(number) + count + 1) / 2 - : range.indexOf(number) + 1; - }; - - exports.RANK.EQ = function (number, range, order) { - number = utils.parseNumber(number); - range = utils.parseNumberArray(utils.flatten(range)); - if (utils.anyIsError(number, range)) { - return error.value; - } - order = order || false; - var sort = order - ? function (a, b) { - return a - b; - } - : function (a, b) { - return b - a; - }; - range = range.sort(sort); - return range.indexOf(number) + 1; - }; - - exports.RSQ = function (data_x, data_y) { - // no need to flatten here, PEARSON will take care of that - data_x = utils.parseNumberArray(utils.flatten(data_x)); - data_y = utils.parseNumberArray(utils.flatten(data_y)); - if (utils.anyIsError(data_x, data_y)) { - return error.value; - } - return Math.pow(exports.PEARSON(data_x, data_y), 2); - }; - - exports.SMALL = function (range, k) { - range = utils.parseNumberArray(utils.flatten(range)); - k = utils.parseNumber(k); - if (utils.anyIsError(range, k)) { - return range; - } - return range.sort(function (a, b) { - return a - b; - })[k - 1]; - }; - - exports.STANDARDIZE = function (x, mean, sd) { - x = utils.parseNumber(x); - mean = utils.parseNumber(mean); - sd = utils.parseNumber(sd); - if (utils.anyIsError(x, mean, sd)) { - return error.value; - } - return (x - mean) / sd; - }; - - exports.STDEV = {}; - - exports.STDEV.P = function () { - var v = exports.VAR.P.apply(this, arguments); - return Math.sqrt(v); - }; - - exports.STDEV.S = function () { - var v = exports.VAR.S.apply(this, arguments); - return Math.sqrt(v); - }; - - exports.STDEVA = function () { - var v = exports.VARA.apply(this, arguments); - return Math.sqrt(v); - }; - - exports.STDEVPA = function () { - var v = exports.VARPA.apply(this, arguments); - return Math.sqrt(v); - }; - - exports.VAR = {}; - - exports.VAR.P = function () { - var range = utils.numbers(utils.flatten(arguments)); - var n = range.length; - var sigma = 0; - var mean = exports.AVERAGE(range); - for (var i = 0; i < n; i++) { - sigma += Math.pow(range[i] - mean, 2); - } - return sigma / n; - }; - - exports.VAR.S = function () { - var range = utils.numbers(utils.flatten(arguments)); - var n = range.length; - var sigma = 0; - var mean = exports.AVERAGE(range); - for (var i = 0; i < n; i++) { - sigma += Math.pow(range[i] - mean, 2); - } - return sigma / (n - 1); - }; - - exports.VARA = function () { - var range = utils.flatten(arguments); - var n = range.length; - var sigma = 0; - var count = 0; - var mean = exports.AVERAGEA(range); - for (var i = 0; i < n; i++) { - var el = range[i]; - if (typeof el === "number") { - sigma += Math.pow(el - mean, 2); - } else if (el === true) { - sigma += Math.pow(1 - mean, 2); - } else { - sigma += Math.pow(0 - mean, 2); - } - - if (el !== null) { - count++; - } - } - return sigma / (count - 1); - }; - - exports.VARPA = function () { - var range = utils.flatten(arguments); - var n = range.length; - var sigma = 0; - var count = 0; - var mean = exports.AVERAGEA(range); - for (var i = 0; i < n; i++) { - var el = range[i]; - if (typeof el === "number") { - sigma += Math.pow(el - mean, 2); - } else if (el === true) { - sigma += Math.pow(1 - mean, 2); - } else { - sigma += Math.pow(0 - mean, 2); - } - - if (el !== null) { - count++; - } - } - return sigma / count; - }; - - exports.WEIBULL = {}; - - exports.WEIBULL.DIST = function (x, alpha, beta, cumulative) { - x = utils.parseNumber(x); - alpha = utils.parseNumber(alpha); - beta = utils.parseNumber(beta); - if (utils.anyIsError(x, alpha, beta)) { - return error.value; - } - return cumulative - ? 1 - Math.exp(-Math.pow(x / beta, alpha)) - : (Math.pow(x, alpha - 1) * - Math.exp(-Math.pow(x / beta, alpha)) * - alpha) / - Math.pow(beta, alpha); - }; - - exports.Z = {}; - - exports.Z.TEST = function (range, x, sd) { - range = utils.parseNumberArray(utils.flatten(range)); - x = utils.parseNumber(x); - if (utils.anyIsError(range, x)) { - return error.value; - } - - sd = sd || exports.STDEV.S(range); - var n = range.length; - return ( - 1 - - exports.NORM.S.DIST( - (exports.AVERAGE(range) - x) / (sd / Math.sqrt(n)), - true - ) - ); - }; - - return exports; - })(); - - met.utils = (function () { - var exports = {}; - - exports.PROGRESS = function (p, c) { - var color = c ? c : "red"; - var value = p ? p : "0"; - - return ( - '
' - ); - }; - - exports.RATING = function (v) { - var html = '
'; - for (var i = 0; i < 5; i++) { - if (i < v) { - html += '
'; - } else { - html += "
"; - } - } - html += "
"; - return html; - }; - - return exports; - })(); - - for (var i = 0; i < Object.keys(met).length; i++) { - var methods = met[Object.keys(met)[i]]; - var keys = Object.keys(methods); - for (var j = 0; j < keys.length; j++) { - if (!methods[keys[j]]) { - window[keys[j]] = function () { - return keys[j] + "Not implemented"; - }; - } else if ( - typeof methods[keys[j]] == "function" || - typeof methods[keys[j]] == "object" - ) { - window[keys[j]] = methods[keys[j]]; - window[keys[j]].toString = function () { - return "#ERROR"; - }; - - if (typeof methods[keys[j]] == "object") { - var tmp = Object.keys(methods[keys[j]]); - for (var z = 0; z < tmp.length; z++) { - window[keys[j]][tmp[z]].toString = function () { - return "#ERROR"; - }; - } - } - } else { - window[keys[j]] = function () { - return keys[j] + "Not implemented"; - }; - } - } - } - - /** - * Instance execution helpers - */ - var x = null; - var y = null; - var instance = null; - - window["TABLE"] = function () { - return instance; - }; - window["COLUMN"] = window["COL"] = function () { - return parseInt(x) + 1; - }; - window["ROW"] = function () { - return parseInt(y) + 1; - }; - window["CELL"] = function () { - return F.getColumnNameFromCoords(x, y); - }; - window["VALUE"] = function (col, row, processed) { - return instance.getValueFromCoords( - parseInt(col) - 1, - parseInt(row) - 1, - processed - ); - }; - window["THISROWCELL"] = function (col) { - return instance.getValueFromCoords(parseInt(col) - 1, parseInt(y)); - }; - - // Secure formula - var secureFormula = function (oldValue, runtime) { - var newValue = ""; - var inside = 0; - - var special = ["=", "!", ">", "<"]; - - for (var i = 0; i < oldValue.length; i++) { - if (oldValue[i] == '"') { - if (inside == 0) { - inside = 1; - } else { - inside = 0; - } - } - - if (inside == 1) { - newValue += oldValue[i]; - } else { - newValue += oldValue[i].toUpperCase(); - - if (runtime == true) { - if ( - i > 0 && - oldValue[i] == "=" && - special.indexOf(oldValue[i - 1]) == -1 && - special.indexOf(oldValue[i + 1]) == -1 - ) { - newValue += "="; - } - } - } - } - - // Adapt to JS - newValue = newValue.replace(/\^/g, "**"); - newValue = newValue.replace(/\<\>/g, "!="); - newValue = newValue.replace(/\&/g, "+"); - newValue = newValue.replace(/\$/g, ""); - - return newValue; - }; - - // Convert range tokens - var tokensUpdate = function (tokens, e) { - for (var index = 0; index < tokens.length; index++) { - var f = F.getTokensFromRange(tokens[index]); - e = e.replace(tokens[index], "[" + f.join(",") + "]"); - } - return e; - }; - - var F = function (expression, variables, i, j, obj) { - // Global helpers - instance = obj; - x = i; - y = j; - // String - var s = ""; - var keys = Object.keys(variables); - if (keys.length) { - for (var i = 0; i < keys.length; i++) { - if (keys[i].indexOf(".") == -1 && keys[i].indexOf("!") == -1) { - s += "var " + keys[i] + " = " + variables[keys[i]] + ";\n"; - } else { - s += keys[i] + " = " + variables[keys[i]] + ";\n"; - } - } - } - // Remove $ - expression = expression.replace(/\$/g, ""); - // Replace ! per dot - expression = expression.replace(/\!/g, "."); - // Adapt to JS - expression = secureFormula(expression, true); - // Update range - var tokens = expression.match( - /([A-Z]+[0-9]*\.)?(\$?[A-Z]+\$?[0-9]+):(\$?[A-Z]+\$?[0-9]+)?/g - ); - if (tokens && tokens.length) { - expression = tokensUpdate(tokens, expression); - } - - // Calculate - return new Function(s + "; return " + expression)(); - }; - - /** - * Get letter based on a number - * @param {number} i - * @return {string} - */ - var getColumnName = function (i) { - var letter = ""; - if (i > 701) { - letter += String.fromCharCode(64 + parseInt(i / 676)); - letter += String.fromCharCode(64 + parseInt((i % 676) / 26)); - } else if (i > 25) { - letter += String.fromCharCode(64 + parseInt(i / 26)); - } - letter += String.fromCharCode(65 + (i % 26)); - - return letter; - }; - - /** - * Get column name from coords - */ - F.getColumnNameFromCoords = function (x, y) { - return getColumnName(parseInt(x)) + (parseInt(y) + 1); - }; - - F.getCoordsFromColumnName = function (columnName) { - // Get the letters - var t = /^[a-zA-Z]+/.exec(columnName); - - if (t) { - // Base 26 calculation - var code = 0; - for (var i = 0; i < t[0].length; i++) { - code += - parseInt(t[0].charCodeAt(i) - 64) * Math.pow(26, t[0].length - 1 - i); - } - code--; - // Make sure jspreadsheet starts on zero - if (code < 0) { - code = 0; - } - - // Number - var number = parseInt(/[0-9]+$/.exec(columnName)) || null; - if (number > 0) { - number--; - } - - return [code, number]; - } - }; - - F.getRangeFromTokens = function (tokens) { - tokens = tokens.filter(function (v) { - return v != "#REF!"; - }); - - var d = ""; - var t = ""; - for (var i = 0; i < tokens.length; i++) { - if (tokens[i].indexOf(".") >= 0) { - d = "."; - } else if (tokens[i].indexOf("!") >= 0) { - d = "!"; - } - if (d) { - t = tokens[i].split(d); - tokens[i] = t[1]; - t = t[0] + d; - } - } - - tokens.sort(function (a, b) { - var t1 = Helpers.getCoordsFromColumnName(a); - var t2 = Helpers.getCoordsFromColumnName(b); - if (t1[1] > t2[1]) { - return 1; - } else if (t1[1] < t2[1]) { - return -1; - } else { - if (t1[0] > t2[0]) { - return 1; - } else if (t1[0] < t2[0]) { - return -1; - } else { - return 0; - } - } - }); - - if (!tokens.length) { - return "#REF!"; - } else { - return t + (tokens[0] + ":" + tokens[tokens.length - 1]); - } - }; - - F.getTokensFromRange = function (range) { - if (range.indexOf(".") > 0) { - var t = range.split("."); - range = t[1]; - t = t[0] + "."; - } else if (range.indexOf("!") > 0) { - var t = range.split("!"); - range = t[1]; - t = t[0] + "!"; - } else { - var t = ""; - } - - var range = range.split(":"); - var e1 = F.getCoordsFromColumnName(range[0]); - var e2 = F.getCoordsFromColumnName(range[1]); - - if (e1[0] <= e2[0]) { - var x1 = e1[0]; - var x2 = e2[0]; - } else { - var x1 = e2[0]; - var x2 = e1[0]; - } - - if (e1[1] === null && e2[1] == null) { - var y1 = null; - var y2 = null; - - var k = Object.keys(vars); - for (var i = 0; i < k.length; i++) { - var tmp = F.getCoordsFromColumnName(k[i]); - if (tmp[0] === e1[0]) { - if (y1 === null || tmp[1] < y1) { - y1 = tmp[1]; - } - } - if (tmp[0] === e2[0]) { - if (y2 === null || tmp[1] > y2) { - y2 = tmp[1]; - } - } - } - } else { - if (e1[1] <= e2[1]) { - var y1 = e1[1]; - var y2 = e2[1]; - } else { - var y1 = e2[1]; - var y2 = e1[1]; - } - } - - var f = []; - for (var j = y1; j <= y2; j++) { - var line = []; - for (var i = x1; i <= x2; i++) { - line.push(t + F.getColumnNameFromCoords(i, j)); - } - f.push(line); - } - - return f; - }; - - F.setFormula = function (o) { - var k = Object.keys(o); - for (var i = 0; i < k.length; i++) { - if (typeof o[k[i]] == "function") { - window[k[i]] = o[k[i]]; - } - } - }; - - return F; -})(); - -if (!jSuites && typeof require === "function") { - var jSuites = require("jsuites"); -} - -(function (global, factory) { - typeof exports === "object" && typeof module !== "undefined" - ? (module.exports = factory()) - : typeof define === "function" && define.amd - ? define(factory) - : (global.jspreadsheet = global.jexcel = factory()); -})(this, function () { - "use strict"; - - // Basic version information - var Version = (function () { - // Information - var info = { - title: "Jspreadsheet", - version: "4.11.1", - type: "CE", - host: "https://bossanova.uk/jspreadsheet", - license: "MIT", - print: function () { - return [ - this.title + " " + this.type + " " + this.version, - this.host, - this.license, - ].join("\r\n"); - }, - }; - - return function () { - return info; - }; - })(); - - /** - * The value is a formula - */ - var isFormula = function (value) { - var v = ("" + value)[0]; - return v == "=" || v == "#" ? true : false; - }; - - /** - * Get the mask in the jSuites.mask format - */ - var getMask = function (o) { - if (o.format || o.mask || o.locale) { - var opt = {}; - if (o.mask) { - opt.mask = o.mask; - } else if (o.format) { - opt.mask = o.format; - } else { - opt.locale = o.locale; - opt.options = o.options; - } - - if (o.decimal) { - if (!opt.options) { - opt.options = {}; - } - opt.options = { decimal: o.decimal }; - } - return opt; - } - - return null; - }; - - // Jspreadsheet core object - var jexcel = function (el, options) { - // Create jspreadsheet object - var obj = {}; - obj.options = {}; - - if (!(el instanceof Element || el instanceof HTMLDocument)) { - console.error("Jspreadsheet: el is not a valid DOM element"); - return false; - } else if (el.tagName == "TABLE") { - if ((options = jexcel.createFromTable(el, options))) { - var div = document.createElement("div"); - el.parentNode.insertBefore(div, el); - el.remove(); - el = div; - } else { - console.error("Jspreadsheet: el is not a valid DOM element"); - return false; - } - } - - // Loading default configuration - var defaults = { - // External data - url: null, - // Ajax options - method: "GET", - requestVariables: null, - // Data - data: null, - // Custom sorting handler - sorting: null, - // Copy behavior - copyCompatibility: false, - root: null, - // Rows and columns definitions - rows: [], - columns: [], - // Deprected legacy options - colHeaders: [], - colWidths: [], - colAlignments: [], - nestedHeaders: null, - // Column width that is used by default - defaultColWidth: 50, - defaultColAlign: "center", - // Rows height default - defaultRowHeight: null, - // Spare rows and columns - minSpareRows: 0, - minSpareCols: 0, - // Minimal table dimensions - minDimensions: [0, 0], - // Allow Export - allowExport: true, - // @type {boolean} - Include the header titles on download - includeHeadersOnDownload: false, - // @type {boolean} - Include the header titles on copy - includeHeadersOnCopy: false, - // Allow column sorting - columnSorting: true, - // Allow column dragging - columnDrag: false, - // Allow column resizing - columnResize: true, - // Allow row resizing - rowResize: false, - // Allow row dragging - rowDrag: true, - // Allow table edition - editable: true, - // Allow new rows - allowInsertRow: true, - // Allow new rows - allowManualInsertRow: true, - // Allow new columns - allowInsertColumn: true, - // Allow new rows - allowManualInsertColumn: true, - // Allow row delete - allowDeleteRow: true, - // Allow deleting of all rows - allowDeletingAllRows: false, - // Allow column delete - allowDeleteColumn: true, - // Allow rename column - allowRenameColumn: true, - // Allow comments - allowComments: false, - // Global wrap - wordWrap: false, - // Image options - imageOptions: null, - // CSV source - csv: null, - // Filename - csvFileName: "jspreadsheet", - // Consider first line as header - csvHeaders: true, - // Delimiters - csvDelimiter: ",", - // First row as header - parseTableFirstRowAsHeader: false, - parseTableAutoCellType: false, - // Disable corner selection - selectionCopy: true, - // Merged cells - mergeCells: {}, - // Create toolbar - toolbar: null, - // Allow search - search: false, - // Create pagination - pagination: false, - paginationOptions: null, - // Full screen - fullscreen: false, - // Lazy loading - lazyLoading: false, - loadingSpin: false, - // Table overflow - tableOverflow: false, - tableHeight: "300px", - tableWidth: null, - textOverflow: false, - // Meta - meta: null, - // Style - style: null, - classes: null, - // Execute formulas - parseFormulas: true, - autoIncrement: true, - autoCasting: true, - // Security - secureFormulas: true, - stripHTML: true, - stripHTMLOnCopy: false, - // Filters - filters: false, - footers: null, - // Event handles - onundo: null, - onredo: null, - onload: null, - onchange: null, - oncomments: null, - onbeforechange: null, - onafterchanges: null, - onbeforeinsertrow: null, - oninsertrow: null, - onbeforeinsertcolumn: null, - oninsertcolumn: null, - onbeforedeleterow: null, - ondeleterow: null, - onbeforedeletecolumn: null, - ondeletecolumn: null, - onmoverow: null, - onmovecolumn: null, - onresizerow: null, - onresizecolumn: null, - onsort: null, - onselection: null, - oncopy: null, - onpaste: null, - onbeforepaste: null, - onmerge: null, - onfocus: null, - onblur: null, - onchangeheader: null, - oncreateeditor: null, - oneditionstart: null, - oneditionend: null, - onchangestyle: null, - onchangemeta: null, - onchangepage: null, - onbeforesave: null, - onsave: null, - // Global event dispatcher - onevent: null, - // Persistance - persistance: false, - // Customize any cell behavior - updateTable: null, - // Detach the HTML table when calling updateTable - detachForUpdates: false, - freezeColumns: null, - // Texts - text: { - noRecordsFound: "No records found", - showingPage: "Showing page {0} of {1} entries", - show: "Show ", - search: "Search", - entries: " entries", - columnName: "Column name", - insertANewColumnBefore: "Insert a new column before", - insertANewColumnAfter: "Insert a new column after", - deleteSelectedColumns: "Delete selected columns", - renameThisColumn: "Rename this column", - orderAscending: "Order ascending", - orderDescending: "Order descending", - insertANewRowBefore: "Insert a new row before", - insertANewRowAfter: "Insert a new row after", - deleteSelectedRows: "Delete selected rows", - editComments: "Edit comments", - addComments: "Add comments", - comments: "Comments", - clearComments: "Clear comments", - copy: "Copy...", - paste: "Paste...", - saveAs: "Save as...", - about: "About", - areYouSureToDeleteTheSelectedRows: - "Are you sure to delete the selected rows?", - areYouSureToDeleteTheSelectedColumns: - "Are you sure to delete the selected columns?", - thisActionWillDestroyAnyExistingMergedCellsAreYouSure: - "This action will destroy any existing merged cells. Are you sure?", - thisActionWillClearYourSearchResultsAreYouSure: - "This action will clear your search results. Are you sure?", - thereIsAConflictWithAnotherMergedCell: - "There is a conflict with another merged cell", - invalidMergeProperties: "Invalid merged properties", - cellAlreadyMerged: "Cell already merged", - noCellsSelected: "No cells selected", - }, - // About message - about: true, - }; - - // Loading initial configuration from user - for (var property in defaults) { - if (options && options.hasOwnProperty(property)) { - if (property === "text") { - obj.options[property] = defaults[property]; - for (var textKey in options[property]) { - if (options[property].hasOwnProperty(textKey)) { - obj.options[property][textKey] = options[property][textKey]; - } - } - } else { - obj.options[property] = options[property]; - } - } else { - obj.options[property] = defaults[property]; - } - } - - // Global elements - obj.el = el; - obj.corner = null; - obj.contextMenu = null; - obj.textarea = null; - obj.ads = null; - obj.content = null; - obj.table = null; - obj.thead = null; - obj.tbody = null; - obj.rows = []; - obj.results = null; - obj.searchInput = null; - obj.toolbar = null; - obj.pagination = null; - obj.pageNumber = null; - obj.headerContainer = null; - obj.colgroupContainer = null; - - // Containers - obj.headers = []; - obj.records = []; - obj.history = []; - obj.formula = []; - obj.colgroup = []; - obj.selection = []; - obj.highlighted = []; - obj.selectedCell = null; - obj.selectedContainer = null; - obj.style = []; - obj.data = null; - obj.filter = null; - obj.filters = []; - - // Internal controllers - obj.cursor = null; - obj.historyIndex = -1; - obj.ignoreEvents = false; - obj.ignoreHistory = false; - obj.edition = null; - obj.hashString = null; - obj.resizing = null; - obj.dragging = null; - - // Lazy loading - if ( - obj.options.lazyLoading == true && - obj.options.tableOverflow == false && - obj.options.fullscreen == false - ) { - console.error( - "Jspreadsheet: The lazyloading only works when tableOverflow = yes or fullscreen = yes" - ); - obj.options.lazyLoading = false; - } - - /** - * Activate/Disable fullscreen - * use programmatically : table.fullscreen(); or table.fullscreen(true); or table.fullscreen(false); - * @Param {boolean} activate - */ - obj.fullscreen = function (activate) { - // If activate not defined, get reverse options.fullscreen - if (activate == null) { - activate = !obj.options.fullscreen; - } - - // If change - if (obj.options.fullscreen != activate) { - obj.options.fullscreen = activate; - - // Test LazyLoading conflict - if (activate == true) { - el.classList.add("fullscreen"); - } else { - el.classList.remove("fullscreen"); - } - } - }; - - /** - * Trigger events - */ - obj.dispatch = function (event) { - // Dispatch events - if (!obj.ignoreEvents) { - // Call global event - if (typeof obj.options.onevent == "function") { - var ret = obj.options.onevent.apply(this, arguments); - } - // Call specific events - if (typeof obj.options[event] == "function") { - var ret = obj.options[event].apply( - this, - Array.prototype.slice.call(arguments, 1) - ); - } - } - - // Persistance - if (event == "onafterchanges" && obj.options.persistance) { - var url = - obj.options.persistance == true - ? obj.options.url - : obj.options.persistance; - var data = obj.prepareJson(arguments[2]); - obj.save(url, data); - } - - return ret; - }; - - /** - * Prepare the jspreadsheet table - * - * @Param config - */ - obj.prepareTable = function () { - // Loading initial data from remote sources - var results = []; - - // Number of columns - var size = obj.options.columns.length; - - if (obj.options.data && typeof obj.options.data[0] !== "undefined") { - // Data keys - var keys = Object.keys(obj.options.data[0]); - - if (keys.length > size) { - size = keys.length; - } - } - - // Minimal dimensions - if (obj.options.minDimensions[0] > size) { - size = obj.options.minDimensions[0]; - } - - // Requests - var multiple = []; - - // Preparations - for (var i = 0; i < size; i++) { - // Deprected options. You should use only columns - if (!obj.options.colHeaders[i]) { - obj.options.colHeaders[i] = ""; - } - if (!obj.options.colWidths[i]) { - obj.options.colWidths[i] = obj.options.defaultColWidth; - } - if (!obj.options.colAlignments[i]) { - obj.options.colAlignments[i] = obj.options.defaultColAlign; - } - - // Default column description - if (!obj.options.columns[i]) { - obj.options.columns[i] = { type: "text" }; - } else if (!obj.options.columns[i].type) { - obj.options.columns[i].type = "text"; - } - if (!obj.options.columns[i].name) { - obj.options.columns[i].name = keys && keys[i] ? keys[i] : i; - } - if (!obj.options.columns[i].source) { - obj.options.columns[i].source = []; - } - if (!obj.options.columns[i].options) { - obj.options.columns[i].options = []; - } - if (!obj.options.columns[i].editor) { - obj.options.columns[i].editor = null; - } - if (!obj.options.columns[i].allowEmpty) { - obj.options.columns[i].allowEmpty = false; - } - if (!obj.options.columns[i].title) { - obj.options.columns[i].title = obj.options.colHeaders[i] - ? obj.options.colHeaders[i] - : ""; - } - if (!obj.options.columns[i].width) { - obj.options.columns[i].width = obj.options.colWidths[i] - ? obj.options.colWidths[i] - : obj.options.defaultColWidth; - } - if (!obj.options.columns[i].align) { - obj.options.columns[i].align = obj.options.colAlignments[i] - ? obj.options.colAlignments[i] - : "center"; - } - - // Pre-load initial source for json autocomplete - if ( - obj.options.columns[i].type == "autocomplete" || - obj.options.columns[i].type == "dropdown" - ) { - // if remote content - if (obj.options.columns[i].url) { - multiple.push({ - url: obj.options.columns[i].url, - index: i, - method: "GET", - dataType: "json", - success: function (data) { - var source = []; - for (var i = 0; i < data.length; i++) { - obj.options.columns[this.index].source.push(data[i]); - } - }, - }); - } - } else if (obj.options.columns[i].type == "calendar") { - // Default format for date columns - if (!obj.options.columns[i].options.format) { - obj.options.columns[i].options.format = "DD/MM/YYYY"; - } - } - } - // Create the table when is ready - if (!multiple.length) { - obj.createTable(); - } else { - jSuites.ajax(multiple, function () { - obj.createTable(); - }); - } - }; - - obj.createTable = function () { - // Elements - obj.table = document.createElement("table"); - obj.thead = document.createElement("thead"); - obj.tbody = document.createElement("tbody"); - - // Create headers controllers - obj.headers = []; - obj.colgroup = []; - - // Create table container - obj.content = document.createElement("div"); - obj.content.classList.add("jexcel_content"); - obj.content.onscroll = function (e) { - obj.scrollControls(e); - }; - obj.content.onwheel = function (e) { - obj.wheelControls(e); - }; - - // Create toolbar object - obj.toolbar = document.createElement("div"); - obj.toolbar.classList.add("jexcel_toolbar"); - - // Search - var searchContainer = document.createElement("div"); - var searchText = document.createTextNode(obj.options.text.search + ": "); - obj.searchInput = document.createElement("input"); - obj.searchInput.classList.add("jexcel_search"); - searchContainer.appendChild(searchText); - searchContainer.appendChild(obj.searchInput); - obj.searchInput.onfocus = function () { - obj.resetSelection(); - }; - - // Pagination select option - var paginationUpdateContainer = document.createElement("div"); - - if ( - obj.options.pagination > 0 && - obj.options.paginationOptions && - obj.options.paginationOptions.length > 0 - ) { - obj.paginationDropdown = document.createElement("select"); - obj.paginationDropdown.classList.add("jexcel_pagination_dropdown"); - obj.paginationDropdown.onchange = function () { - obj.options.pagination = parseInt(this.value); - obj.page(0); - }; - - for (var i = 0; i < obj.options.paginationOptions.length; i++) { - var temp = document.createElement("option"); - temp.value = obj.options.paginationOptions[i]; - temp.innerHTML = obj.options.paginationOptions[i]; - obj.paginationDropdown.appendChild(temp); - } - - // Set initial pagination value - obj.paginationDropdown.value = obj.options.pagination; - - paginationUpdateContainer.appendChild( - document.createTextNode(obj.options.text.show) - ); - paginationUpdateContainer.appendChild(obj.paginationDropdown); - paginationUpdateContainer.appendChild( - document.createTextNode(obj.options.text.entries) - ); - } - - // Filter and pagination container - var filter = document.createElement("div"); - filter.classList.add("jexcel_filter"); - filter.appendChild(paginationUpdateContainer); - filter.appendChild(searchContainer); - - // Colsgroup - obj.colgroupContainer = document.createElement("colgroup"); - var tempCol = document.createElement("col"); - tempCol.setAttribute("width", "50"); - obj.colgroupContainer.appendChild(tempCol); - - // Nested - if (obj.options.nestedHeaders && obj.options.nestedHeaders.length > 0) { - // Flexible way to handle nestedheaders - if (obj.options.nestedHeaders[0] && obj.options.nestedHeaders[0][0]) { - for (var j = 0; j < obj.options.nestedHeaders.length; j++) { - obj.thead.appendChild( - obj.createNestedHeader(obj.options.nestedHeaders[j]) - ); - } - } else { - obj.thead.appendChild( - obj.createNestedHeader(obj.options.nestedHeaders) - ); - } - } - - // Row - obj.headerContainer = document.createElement("tr"); - var tempCol = document.createElement("td"); - tempCol.classList.add("jexcel_selectall"); - obj.headerContainer.appendChild(tempCol); - - for (var i = 0; i < obj.options.columns.length; i++) { - // Create header - obj.createCellHeader(i); - // Append cell to the container - obj.headerContainer.appendChild(obj.headers[i]); - obj.colgroupContainer.appendChild(obj.colgroup[i]); - } - - obj.thead.appendChild(obj.headerContainer); - - // Filters - if (obj.options.filters == true) { - obj.filter = document.createElement("tr"); - var td = document.createElement("td"); - obj.filter.appendChild(td); - - for (var i = 0; i < obj.options.columns.length; i++) { - var td = document.createElement("td"); - td.innerHTML = " "; - td.setAttribute("data-x", i); - td.className = "jexcel_column_filter"; - if (obj.options.columns[i].type == "hidden") { - td.style.display = "none"; - } - obj.filter.appendChild(td); - } - - obj.thead.appendChild(obj.filter); - } - - // Content table - obj.table = document.createElement("table"); - obj.table.classList.add("jexcel"); - obj.table.setAttribute("cellpadding", "0"); - obj.table.setAttribute("cellspacing", "0"); - obj.table.setAttribute("unselectable", "yes"); - //obj.table.setAttribute('onselectstart', 'return false'); - obj.table.appendChild(obj.colgroupContainer); - obj.table.appendChild(obj.thead); - obj.table.appendChild(obj.tbody); - - if (!obj.options.textOverflow) { - obj.table.classList.add("jexcel_overflow"); - } - - // Spreadsheet corner - obj.corner = document.createElement("div"); - obj.corner.className = "jexcel_corner"; - obj.corner.setAttribute("unselectable", "on"); - obj.corner.setAttribute("onselectstart", "return false"); - - if (obj.options.selectionCopy == false) { - obj.corner.style.display = "none"; - } - - // Textarea helper - obj.textarea = document.createElement("textarea"); - obj.textarea.className = "jexcel_textarea"; - obj.textarea.id = "jexcel_textarea"; - obj.textarea.tabIndex = "-1"; - - // Contextmenu container - obj.contextMenu = document.createElement("div"); - obj.contextMenu.className = "jexcel_contextmenu"; - - // Create element - jSuites.contextmenu(obj.contextMenu, { - onclick: function () { - obj.contextMenu.contextmenu.close(false); - }, - }); - - // Powered by Jspreadsheet - var ads = document.createElement("a"); - ads.setAttribute("href", "https://bossanova.uk/jspreadsheet/"); - obj.ads = document.createElement("div"); - obj.ads.className = "jexcel_about"; - try { - if ( - typeof sessionStorage !== "undefined" && - !sessionStorage.getItem("jexcel") - ) { - sessionStorage.setItem("jexcel", true); - var img = document.createElement("img"); - img.src = "//bossanova.uk/jspreadsheet/logo.png"; - ads.appendChild(img); - } - } catch (exception) {} - var span = document.createElement("span"); - span.innerHTML = "Jspreadsheet CE"; - ads.appendChild(span); - obj.ads.appendChild(ads); - - // Create table container TODO: frozen columns - var container = document.createElement("div"); - container.classList.add("jexcel_table"); - - // Pagination - obj.pagination = document.createElement("div"); - obj.pagination.classList.add("jexcel_pagination"); - var paginationInfo = document.createElement("div"); - var paginationPages = document.createElement("div"); - obj.pagination.appendChild(paginationInfo); - obj.pagination.appendChild(paginationPages); - - // Hide pagination if not in use - if (!obj.options.pagination) { - obj.pagination.style.display = "none"; - } - - // Append containers to the table - if (obj.options.search == true) { - el.appendChild(filter); - } - - // Elements - obj.content.appendChild(obj.table); - obj.content.appendChild(obj.corner); - obj.content.appendChild(obj.textarea); - - el.appendChild(obj.toolbar); - el.appendChild(obj.content); - el.appendChild(obj.pagination); - el.appendChild(obj.contextMenu); - el.appendChild(obj.ads); - el.classList.add("jexcel_container"); - - // Create toolbar - if (obj.options.toolbar && obj.options.toolbar.length) { - obj.createToolbar(); - } - - // Fullscreen - if (obj.options.fullscreen == true) { - el.classList.add("fullscreen"); - } else { - // Overflow - if (obj.options.tableOverflow == true) { - if (obj.options.tableHeight) { - obj.content.style["overflow-y"] = "auto"; - obj.content.style["box-shadow"] = - "rgb(221 221 221) 2px 2px 5px 0.1px"; - obj.content.style.maxHeight = obj.options.tableHeight; - } - if (obj.options.tableWidth) { - obj.content.style["overflow-x"] = "auto"; - obj.content.style.width = obj.options.tableWidth; - } - } - } - - // With toolbars - if (obj.options.tableOverflow != true && obj.options.toolbar) { - el.classList.add("with-toolbar"); - } - - // Actions - if (obj.options.columnDrag == true) { - obj.thead.classList.add("draggable"); - } - if (obj.options.columnResize == true) { - obj.thead.classList.add("resizable"); - } - if (obj.options.rowDrag == true) { - obj.tbody.classList.add("draggable"); - } - if (obj.options.rowResize == true) { - obj.tbody.classList.add("resizable"); - } - - // Load data - obj.setData(); - - // Style - if (obj.options.style) { - obj.setStyle(obj.options.style, null, null, 1, 1); - } - - // Classes - if (obj.options.classes) { - var k = Object.keys(obj.options.classes); - for (var i = 0; i < k.length; i++) { - var cell = jexcel.getIdFromColumnName(k[i], true); - obj.records[cell[1]][cell[0]].classList.add( - obj.options.classes[k[i]] - ); - } - } - }; - - /** - * Refresh the data - * - * @return void - */ - obj.refresh = function () { - if (obj.options.url) { - // Loading - if (obj.options.loadingSpin == true) { - jSuites.loading.show(); - } - - jSuites.ajax({ - url: obj.options.url, - method: obj.options.method, - data: obj.options.requestVariables, - dataType: "json", - success: function (result) { - // Data - obj.options.data = result.data ? result.data : result; - // Prepare table - obj.setData(); - // Hide spin - if (obj.options.loadingSpin == true) { - jSuites.loading.hide(); - } - }, - }); - } else { - obj.setData(); - } - }; - - /** - * Set data - * - * @param array data In case no data is sent, default is reloaded - * @return void - */ - obj.setData = function (data) { - // Update data - if (data) { - if (typeof data == "string") { - data = JSON.parse(data); - } - - obj.options.data = data; - } - - // Data - if (!obj.options.data) { - obj.options.data = []; - } - - // Prepare data - if (obj.options.data && obj.options.data[0]) { - if (!Array.isArray(obj.options.data[0])) { - var data = []; - for (var j = 0; j < obj.options.data.length; j++) { - var row = []; - for (var i = 0; i < obj.options.columns.length; i++) { - row[i] = obj.options.data[j][obj.options.columns[i].name]; - } - data.push(row); - } - - obj.options.data = data; - } - } - - // Adjust minimal dimensions - var j = 0; - var i = 0; - var size_i = obj.options.columns.length; - var size_j = obj.options.data.length; - var min_i = obj.options.minDimensions[0]; - var min_j = obj.options.minDimensions[1]; - var max_i = min_i > size_i ? min_i : size_i; - var max_j = min_j > size_j ? min_j : size_j; - - for (j = 0; j < max_j; j++) { - for (i = 0; i < max_i; i++) { - if (obj.options.data[j] == undefined) { - obj.options.data[j] = []; - } - - if (obj.options.data[j][i] == undefined) { - obj.options.data[j][i] = ""; - } - } - } - - // Reset containers - obj.rows = []; - obj.results = null; - obj.records = []; - obj.history = []; - - // Reset internal controllers - obj.historyIndex = -1; - - // Reset data - obj.tbody.innerHTML = ""; - - // Lazy loading - if (obj.options.lazyLoading == true) { - // Load only 100 records - var startNumber = 0; - var finalNumber = - obj.options.data.length < 100 ? obj.options.data.length : 100; - - if (obj.options.pagination) { - obj.options.pagination = false; - console.error( - "Jspreadsheet: Pagination will be disable due the lazyLoading" - ); - } - } else if (obj.options.pagination) { - // Pagination - if (!obj.pageNumber) { - obj.pageNumber = 0; - } - var quantityPerPage = obj.options.pagination; - startNumber = obj.options.pagination * obj.pageNumber; - finalNumber = - obj.options.pagination * obj.pageNumber + obj.options.pagination; - - if (obj.options.data.length < finalNumber) { - finalNumber = obj.options.data.length; - } - } else { - var startNumber = 0; - var finalNumber = obj.options.data.length; - } - - // Append nodes to the HTML - for (j = 0; j < obj.options.data.length; j++) { - // Create row - var tr = obj.createRow(j, obj.options.data[j]); - // Append line to the table - if (j >= startNumber && j < finalNumber) { - obj.tbody.appendChild(tr); - } - } - - if (obj.options.lazyLoading == true) { - // Do not create pagination with lazyloading activated - } else if (obj.options.pagination) { - obj.updatePagination(); - } - - // Merge cells - if (obj.options.mergeCells) { - var keys = Object.keys(obj.options.mergeCells); - for (var i = 0; i < keys.length; i++) { - var num = obj.options.mergeCells[keys[i]]; - obj.setMerge(keys[i], num[0], num[1], 1); - } - } - - // Updata table with custom configurations if applicable - obj.updateTable(); - - // Onload - obj.dispatch("onload", el, obj); - }; - - /** - * Get the whole table data - * - * @param bool get highlighted cells only - * @return array data - */ - obj.getData = function (highlighted, dataOnly) { - // Control vars - var dataset = []; - var px = 0; - var py = 0; - - // Data type - var dataType = - dataOnly == true || obj.options.copyCompatibility == false - ? true - : false; - - // Column and row length - var x = obj.options.columns.length; - var y = obj.options.data.length; - - // Go through the columns to get the data - for (var j = 0; j < y; j++) { - px = 0; - for (var i = 0; i < x; i++) { - // Cell selected or fullset - if ( - !highlighted || - obj.records[j][i].classList.contains("highlight") - ) { - // Get value - if (!dataset[py]) { - dataset[py] = []; - } - if (!dataType) { - dataset[py][px] = obj.records[j][i].innerHTML; - } else { - dataset[py][px] = obj.options.data[j][i]; - } - px++; - } - } - if (px > 0) { - py++; - } - } - - return dataset; - }; - - /** - * Get json data by row number - * - * @param integer row number - * @return object - */ - obj.getJsonRow = function (rowNumber) { - var rowData = obj.options.data[rowNumber]; - var x = obj.options.columns.length; - - var row = {}; - for (var i = 0; i < x; i++) { - if (!obj.options.columns[i].name) { - obj.options.columns[i].name = i; - } - row[obj.options.columns[i].name] = rowData[i]; - } - - return row; - }; - - /** - * Get the whole table data - * - * @param bool highlighted cells only - * @return string value - */ - obj.getJson = function (highlighted) { - // Control vars - var data = []; - - // Column and row length - var x = obj.options.columns.length; - var y = obj.options.data.length; - - // Go through the columns to get the data - for (var j = 0; j < y; j++) { - var row = null; - for (var i = 0; i < x; i++) { - if ( - !highlighted || - obj.records[j][i].classList.contains("highlight") - ) { - if (row == null) { - row = {}; - } - if (!obj.options.columns[i].name) { - obj.options.columns[i].name = i; - } - row[obj.options.columns[i].name] = obj.options.data[j][i]; - } - } - - if (row != null) { - data.push(row); - } - } - - return data; - }; - - /** - * Prepare JSON in the correct format - */ - obj.prepareJson = function (data) { - var rows = []; - for (var i = 0; i < data.length; i++) { - var x = data[i].x; - var y = data[i].y; - var k = obj.options.columns[x].name ? obj.options.columns[x].name : x; - - // Create row - if (!rows[y]) { - rows[y] = { - row: y, - data: {}, - }; - } - rows[y].data[k] = data[i].newValue; - } - - // Filter rows - return rows.filter(function (el) { - return el != null; - }); - }; - - /** - * Post json to a remote server - */ - obj.save = function (url, data) { - // Parse anything in the data before sending to the server - var ret = obj.dispatch("onbeforesave", el, obj, data); - if (ret) { - var data = ret; - } else { - if (ret === false) { - return false; - } - } - - // Remove update - jSuites.ajax({ - url: url, - method: "POST", - dataType: "json", - data: { data: JSON.stringify(data) }, - success: function (result) { - // Event - obj.dispatch("onsave", el, obj, data); - }, - }); - }; - - /** - * Get a row data by rowNumber - */ - obj.getRowData = function (rowNumber) { - return obj.options.data[rowNumber]; - }; - - /** - * Set a row data by rowNumber - */ - obj.setRowData = function (rowNumber, data) { - for (var i = 0; i < obj.headers.length; i++) { - // Update cell - var columnName = jexcel.getColumnNameFromId([i, rowNumber]); - // Set value - if (data[i] != null) { - obj.setValue(columnName, data[i]); - } - } - }; - - /** - * Get a column data by columnNumber - */ - obj.getColumnData = function (columnNumber) { - var dataset = []; - // Go through the rows to get the data - for (var j = 0; j < obj.options.data.length; j++) { - dataset.push(obj.options.data[j][columnNumber]); - } - return dataset; - }; - - /** - * Set a column data by colNumber - */ - obj.setColumnData = function (colNumber, data) { - for (var j = 0; j < obj.rows.length; j++) { - // Update cell - var columnName = jexcel.getColumnNameFromId([colNumber, j]); - // Set value - if (data[j] != null) { - obj.setValue(columnName, data[j]); - } - } - }; - - /** - * Create row - */ - obj.createRow = function (j, data) { - // Create container - if (!obj.records[j]) { - obj.records[j] = []; - } - // Default data - if (!data) { - var data = obj.options.data[j]; - } - // New line of data to be append in the table - obj.rows[j] = document.createElement("tr"); - obj.rows[j].setAttribute("data-y", j); - // Index - var index = null; - - // Set default row height - if (obj.options.defaultRowHeight) { - obj.rows[j].style.height = obj.options.defaultRowHeight + "px"; - } - - // Definitions - if (obj.options.rows[j]) { - if (obj.options.rows[j].height) { - obj.rows[j].style.height = obj.options.rows[j].height; - } - if (obj.options.rows[j].title) { - index = obj.options.rows[j].title; - } - } - if (!index) { - index = parseInt(j + 1); - } - // Row number label - var td = document.createElement("td"); - td.innerHTML = index; - td.setAttribute("data-y", j); - td.className = "jexcel_row"; - obj.rows[j].appendChild(td); - - // Data columns - for (var i = 0; i < obj.options.columns.length; i++) { - // New column of data to be append in the line - obj.records[j][i] = obj.createCell(i, j, data[i]); - // Add column to the row - obj.rows[j].appendChild(obj.records[j][i]); - } - - // Add row to the table body - return obj.rows[j]; - }; - - obj.parseValue = function (i, j, value, cell) { - if ( - ("" + value).substr(0, 1) == "=" && - obj.options.parseFormulas == true - ) { - value = obj.executeFormula(value, i, j); - } - - // Column options - var options = obj.options.columns[i]; - if (options && !isFormula(value)) { - // Mask options - var opt = null; - if ((opt = getMask(options))) { - if (value && value == Number(value)) { - value = Number(value); - } - // Process the decimals to match the mask - var masked = jSuites.mask.render(value, opt, true); - // Negative indication - if (cell) { - if (opt.mask) { - var t = opt.mask.split(";"); - if (t[1]) { - var t1 = t[1].match(new RegExp("\\[Red\\]", "gi")); - if (t1) { - if (value < 0) { - cell.classList.add("red"); - } else { - cell.classList.remove("red"); - } - } - var t2 = t[1].match(new RegExp("\\(", "gi")); - if (t2) { - if (value < 0) { - masked = "(" + masked + ")"; - } - } - } - } - } - - if (masked) { - value = masked; - } - } - } - - return value; - }; - - var validDate = function (date) { - date = "" + date; - if (date.substr(4, 1) == "-" && date.substr(7, 1) == "-") { - return true; - } else { - date = date.split("-"); - if ( - date[0].length == 4 && - date[0] == Number(date[0]) && - date[1].length == 2 && - date[1] == Number(date[1]) - ) { - return true; - } - } - return false; - }; - - /** - * Create cell - */ - obj.createCell = function (i, j, value) { - // Create cell and properties - var td = document.createElement("td"); - td.setAttribute("data-x", i); - td.setAttribute("data-y", j); - - // Security - if ( - ("" + value).substr(0, 1) == "=" && - obj.options.secureFormulas == true - ) { - var val = secureFormula(value); - if (val != value) { - // Update the data container - value = val; - } - } - - // Custom column - if (obj.options.columns[i].editor) { - if ( - obj.options.stripHTML === false || - obj.options.columns[i].stripHTML === false - ) { - td.innerHTML = value; - } else { - td.textContent = value; - } - if (typeof obj.options.columns[i].editor.createCell == "function") { - td = obj.options.columns[i].editor.createCell(td); - } - } else { - // Hidden column - if (obj.options.columns[i].type == "hidden") { - td.style.display = "none"; - td.textContent = value; - } else if ( - obj.options.columns[i].type == "checkbox" || - obj.options.columns[i].type == "radio" - ) { - // Create input - var element = document.createElement("input"); - element.type = obj.options.columns[i].type; - element.name = "c" + i; - element.checked = - value == 1 || value == true || value == "true" ? true : false; - element.onclick = function () { - obj.setValue(td, this.checked); - }; - - if ( - obj.options.columns[i].readOnly == true || - obj.options.editable == false - ) { - element.setAttribute("disabled", "disabled"); - } - - // Append to the table - td.appendChild(element); - // Make sure the values are correct - obj.options.data[j][i] = element.checked; - } else if (obj.options.columns[i].type == "calendar") { - // Try formatted date - var formatted = null; - if (!validDate(value)) { - var tmp = jSuites.calendar.extractDateFromString( - value, - obj.options.columns[i].options.format - ); - if (tmp) { - formatted = tmp; - } - } - // Create calendar cell - td.textContent = jSuites.calendar.getDateString( - formatted ? formatted : value, - obj.options.columns[i].options.format - ); - } else if ( - obj.options.columns[i].type == "dropdown" || - obj.options.columns[i].type == "autocomplete" - ) { - // Create dropdown cell - td.classList.add("jexcel_dropdown"); - td.textContent = obj.getDropDownValue(i, value); - } else if (obj.options.columns[i].type == "color") { - if (obj.options.columns[i].render == "square") { - var color = document.createElement("div"); - color.className = "color"; - color.style.backgroundColor = value; - td.appendChild(color); - } else { - td.style.color = value; - td.textContent = value; - } - } else if (obj.options.columns[i].type == "image") { - if (value && value.substr(0, 10) == "data:image") { - var img = document.createElement("img"); - img.src = value; - td.appendChild(img); - } - } else { - if (obj.options.columns[i].type == "html") { - td.innerHTML = stripScript(obj.parseValue(i, j, value, td)); - } else { - if ( - obj.options.stripHTML === false || - obj.options.columns[i].stripHTML === false - ) { - td.innerHTML = stripScript(obj.parseValue(i, j, value, td)); - } else { - td.textContent = obj.parseValue(i, j, value, td); - } - } - } - } - - // Readonly - if (obj.options.columns[i].readOnly == true) { - td.className = "readonly"; - } - - // Text align - var colAlign = obj.options.columns[i].align - ? obj.options.columns[i].align - : "center"; - td.style.textAlign = colAlign; - - // Wrap option - if ( - obj.options.columns[i].wordWrap != false && - (obj.options.wordWrap == true || - obj.options.columns[i].wordWrap == true || - td.innerHTML.length > 200) - ) { - td.style.whiteSpace = "pre-wrap"; - } - - // Overflow - if (i > 0) { - if (this.options.textOverflow == true) { - if (value || td.innerHTML) { - obj.records[j][i - 1].style.overflow = "hidden"; - } else { - if (i == obj.options.columns.length - 1) { - td.style.overflow = "hidden"; - } - } - } - } - return td; - }; - - obj.createCellHeader = function (colNumber) { - // Create col global control - var colWidth = obj.options.columns[colNumber].width - ? obj.options.columns[colNumber].width - : obj.options.defaultColWidth; - var colAlign = obj.options.columns[colNumber].align - ? obj.options.columns[colNumber].align - : obj.options.defaultColAlign; - - // Create header cell - obj.headers[colNumber] = document.createElement("td"); - if (obj.options.stripHTML) { - obj.headers[colNumber].textContent = obj.options.columns[colNumber] - .title - ? obj.options.columns[colNumber].title - : jexcel.getColumnName(colNumber); - } else { - obj.headers[colNumber].innerHTML = obj.options.columns[colNumber].title - ? obj.options.columns[colNumber].title - : jexcel.getColumnName(colNumber); - } - obj.headers[colNumber].setAttribute("data-x", colNumber); - obj.headers[colNumber].style.textAlign = colAlign; - if (obj.options.columns[colNumber].title) { - obj.headers[colNumber].setAttribute( - "title", - obj.options.columns[colNumber].title - ); - } - if (obj.options.columns[colNumber].id) { - obj.headers[colNumber].setAttribute( - "id", - obj.options.columns[colNumber].id - ); - } - - // Width control - obj.colgroup[colNumber] = document.createElement("col"); - obj.colgroup[colNumber].setAttribute("width", colWidth); - - // Hidden column - if (obj.options.columns[colNumber].type == "hidden") { - obj.headers[colNumber].style.display = "none"; - obj.colgroup[colNumber].style.display = "none"; - } - }; - - /** - * Update a nested header title - */ - obj.updateNestedHeader = function (x, y, title) { - if (obj.options.nestedHeaders[y][x].title) { - obj.options.nestedHeaders[y][x].title = title; - obj.options.nestedHeaders[y].element.children[x + 1].textContent = - title; - } - }; - - /** - * Create a nested header object - */ - obj.createNestedHeader = function (nestedInformation) { - var tr = document.createElement("tr"); - tr.classList.add("jexcel_nested"); - var td = document.createElement("td"); - tr.appendChild(td); - // Element - nestedInformation.element = tr; - - var headerIndex = 0; - for (var i = 0; i < nestedInformation.length; i++) { - // Default values - if (!nestedInformation[i].colspan) { - nestedInformation[i].colspan = 1; - } - if (!nestedInformation[i].align) { - nestedInformation[i].align = "center"; - } - if (!nestedInformation[i].title) { - nestedInformation[i].title = ""; - } - - // Number of columns - var numberOfColumns = nestedInformation[i].colspan; - - // Classes container - var column = []; - // Header classes for this cell - for (var x = 0; x < numberOfColumns; x++) { - if ( - obj.options.columns[headerIndex] && - obj.options.columns[headerIndex].type == "hidden" - ) { - numberOfColumns++; - } - column.push(headerIndex); - headerIndex++; - } - - // Created the nested cell - var td = document.createElement("td"); - td.setAttribute("data-column", column.join(",")); - td.setAttribute("colspan", nestedInformation[i].colspan); - td.setAttribute("align", nestedInformation[i].align); - td.textContent = nestedInformation[i].title; - tr.appendChild(td); - } - - return tr; - }; - - /** - * Create toolbar - */ - obj.createToolbar = function (toolbar) { - if (toolbar) { - obj.options.toolbar = toolbar; - } else { - var toolbar = obj.options.toolbar; - } - for (var i = 0; i < toolbar.length; i++) { - if (toolbar[i].type == "i") { - var toolbarItem = document.createElement("i"); - toolbarItem.classList.add("jexcel_toolbar_item"); - toolbarItem.classList.add("material-icons"); - toolbarItem.setAttribute("data-k", toolbar[i].k); - toolbarItem.setAttribute("data-v", toolbar[i].v); - toolbarItem.setAttribute("id", toolbar[i].id); - - // Tooltip - if (toolbar[i].tooltip) { - toolbarItem.setAttribute("title", toolbar[i].tooltip); - } - // Handle click - if (toolbar[i].onclick && typeof toolbar[i].onclick) { - toolbarItem.onclick = (function (a) { - var b = a; - return function () { - toolbar[b].onclick(el, obj, this); - }; - })(i); - } else { - toolbarItem.onclick = function () { - var k = this.getAttribute("data-k"); - var v = this.getAttribute("data-v"); - obj.setStyle(obj.highlighted, k, v); - }; - } - // Append element - toolbarItem.textContent = toolbar[i].content; - obj.toolbar.appendChild(toolbarItem); - } else if (toolbar[i].type == "select") { - var toolbarItem = document.createElement("select"); - toolbarItem.classList.add("jexcel_toolbar_item"); - toolbarItem.setAttribute("data-k", toolbar[i].k); - // Tooltip - if (toolbar[i].tooltip) { - toolbarItem.setAttribute("title", toolbar[i].tooltip); - } - // Handle onchange - if (toolbar[i].onchange && typeof toolbar[i].onchange) { - toolbarItem.onchange = toolbar[i].onchange; - } else { - toolbarItem.onchange = function () { - var k = this.getAttribute("data-k"); - obj.setStyle(obj.highlighted, k, this.value); - }; - } - // Add options to the dropdown - for (var j = 0; j < toolbar[i].v.length; j++) { - var toolbarDropdownOption = document.createElement("option"); - toolbarDropdownOption.value = toolbar[i].v[j]; - toolbarDropdownOption.textContent = toolbar[i].v[j]; - toolbarItem.appendChild(toolbarDropdownOption); - } - obj.toolbar.appendChild(toolbarItem); - } else if (toolbar[i].type == "color") { - var toolbarItem = document.createElement("i"); - toolbarItem.classList.add("jexcel_toolbar_item"); - toolbarItem.classList.add("material-icons"); - toolbarItem.setAttribute("data-k", toolbar[i].k); - toolbarItem.setAttribute("data-v", ""); - // Tooltip - if (toolbar[i].tooltip) { - toolbarItem.setAttribute("title", toolbar[i].tooltip); - } - obj.toolbar.appendChild(toolbarItem); - toolbarItem.textContent = toolbar[i].content; - jSuites.color(toolbarItem, { - onchange: function (o, v) { - var k = o.getAttribute("data-k"); - obj.setStyle(obj.highlighted, k, v); - }, - }); - } - } - }; - - /** - * Merge cells - * @param cellName - * @param colspan - * @param rowspan - * @param ignoreHistoryAndEvents - */ - obj.setMerge = function ( - cellName, - colspan, - rowspan, - ignoreHistoryAndEvents - ) { - var test = false; - - if (!cellName) { - if (!obj.highlighted.length) { - alert(obj.options.text.noCellsSelected); - return null; - } else { - var x1 = parseInt(obj.highlighted[0].getAttribute("data-x")); - var y1 = parseInt(obj.highlighted[0].getAttribute("data-y")); - var x2 = parseInt( - obj.highlighted[obj.highlighted.length - 1].getAttribute("data-x") - ); - var y2 = parseInt( - obj.highlighted[obj.highlighted.length - 1].getAttribute("data-y") - ); - var cellName = jexcel.getColumnNameFromId([x1, y1]); - var colspan = x2 - x1 + 1; - var rowspan = y2 - y1 + 1; - } - } - - var cell = jexcel.getIdFromColumnName(cellName, true); - - if (obj.options.mergeCells[cellName]) { - if (obj.records[cell[1]][cell[0]].getAttribute("data-merged")) { - test = obj.options.text.cellAlreadyMerged; - } - } else if ((!colspan || colspan < 2) && (!rowspan || rowspan < 2)) { - test = obj.options.text.invalidMergeProperties; - } else { - var cells = []; - for (var j = cell[1]; j < cell[1] + rowspan; j++) { - for (var i = cell[0]; i < cell[0] + colspan; i++) { - var columnName = jexcel.getColumnNameFromId([i, j]); - if (obj.records[j][i].getAttribute("data-merged")) { - test = obj.options.text.thereIsAConflictWithAnotherMergedCell; - } - } - } - } - - if (test) { - alert(test); - } else { - // Add property - if (colspan > 1) { - obj.records[cell[1]][cell[0]].setAttribute("colspan", colspan); - } else { - colspan = 1; - } - if (rowspan > 1) { - obj.records[cell[1]][cell[0]].setAttribute("rowspan", rowspan); - } else { - rowspan = 1; - } - // Keep links to the existing nodes - obj.options.mergeCells[cellName] = [colspan, rowspan, []]; - // Mark cell as merged - obj.records[cell[1]][cell[0]].setAttribute("data-merged", "true"); - // Overflow - obj.records[cell[1]][cell[0]].style.overflow = "hidden"; - // History data - var data = []; - // Adjust the nodes - for (var y = cell[1]; y < cell[1] + rowspan; y++) { - for (var x = cell[0]; x < cell[0] + colspan; x++) { - if (!(cell[0] == x && cell[1] == y)) { - data.push(obj.options.data[y][x]); - obj.updateCell(x, y, "", true); - obj.options.mergeCells[cellName][2].push(obj.records[y][x]); - obj.records[y][x].style.display = "none"; - obj.records[y][x] = obj.records[cell[1]][cell[0]]; - } - } - } - // In the initialization is not necessary keep the history - obj.updateSelection(obj.records[cell[1]][cell[0]]); - - if (!ignoreHistoryAndEvents) { - obj.setHistory({ - action: "setMerge", - column: cellName, - colspan: colspan, - rowspan: rowspan, - data: data, - }); - - obj.dispatch("onmerge", el, cellName, colspan, rowspan); - } - } - }; - - /** - * Merge cells - * @param cellName - * @param colspan - * @param rowspan - * @param ignoreHistoryAndEvents - */ - obj.getMerge = function (cellName) { - var data = {}; - if (cellName) { - if (obj.options.mergeCells[cellName]) { - data = [ - obj.options.mergeCells[cellName][0], - obj.options.mergeCells[cellName][1], - ]; - } else { - data = null; - } - } else { - if (obj.options.mergeCells) { - var mergedCells = obj.options.mergeCells; - var keys = Object.keys(obj.options.mergeCells); - for (var i = 0; i < keys.length; i++) { - data[keys[i]] = [ - obj.options.mergeCells[keys[i]][0], - obj.options.mergeCells[keys[i]][1], - ]; - } - } - } - - return data; - }; - - /** - * Remove merge by cellname - * @param cellName - */ - obj.removeMerge = function (cellName, data, keepOptions) { - if (obj.options.mergeCells[cellName]) { - var cell = jexcel.getIdFromColumnName(cellName, true); - obj.records[cell[1]][cell[0]].removeAttribute("colspan"); - obj.records[cell[1]][cell[0]].removeAttribute("rowspan"); - obj.records[cell[1]][cell[0]].removeAttribute("data-merged"); - var info = obj.options.mergeCells[cellName]; - - var index = 0; - for (var j = 0; j < info[1]; j++) { - for (var i = 0; i < info[0]; i++) { - if (j > 0 || i > 0) { - obj.records[cell[1] + j][cell[0] + i] = info[2][index]; - obj.records[cell[1] + j][cell[0] + i].style.display = ""; - // Recover data - if (data && data[index]) { - obj.updateCell(cell[0] + i, cell[1] + j, data[index]); - } - index++; - } - } - } - - // Update selection - obj.updateSelection( - obj.records[cell[1]][cell[0]], - obj.records[cell[1] + j - 1][cell[0] + i - 1] - ); - - if (!keepOptions) { - delete obj.options.mergeCells[cellName]; - } - } - }; - - /** - * Remove all merged cells - */ - obj.destroyMerged = function (keepOptions) { - // Remove any merged cells - if (obj.options.mergeCells) { - var mergedCells = obj.options.mergeCells; - var keys = Object.keys(obj.options.mergeCells); - for (var i = 0; i < keys.length; i++) { - obj.removeMerge(keys[i], null, keepOptions); - } - } - }; - - /** - * Is column merged - */ - obj.isColMerged = function (x, insertBefore) { - var cols = []; - // Remove any merged cells - if (obj.options.mergeCells) { - var keys = Object.keys(obj.options.mergeCells); - for (var i = 0; i < keys.length; i++) { - var info = jexcel.getIdFromColumnName(keys[i], true); - var colspan = obj.options.mergeCells[keys[i]][0]; - var x1 = info[0]; - var x2 = info[0] + (colspan > 1 ? colspan - 1 : 0); - - if (insertBefore == null) { - if (x1 <= x && x2 >= x) { - cols.push(keys[i]); - } - } else { - if (insertBefore) { - if (x1 < x && x2 >= x) { - cols.push(keys[i]); - } - } else { - if (x1 <= x && x2 > x) { - cols.push(keys[i]); - } - } - } - } - } - - return cols; - }; - - /** - * Is rows merged - */ - obj.isRowMerged = function (y, insertBefore) { - var rows = []; - // Remove any merged cells - if (obj.options.mergeCells) { - var keys = Object.keys(obj.options.mergeCells); - for (var i = 0; i < keys.length; i++) { - var info = jexcel.getIdFromColumnName(keys[i], true); - var rowspan = obj.options.mergeCells[keys[i]][1]; - var y1 = info[1]; - var y2 = info[1] + (rowspan > 1 ? rowspan - 1 : 0); - - if (insertBefore == null) { - if (y1 <= y && y2 >= y) { - rows.push(keys[i]); - } - } else { - if (insertBefore) { - if (y1 < y && y2 >= y) { - rows.push(keys[i]); - } - } else { - if (y1 <= y && y2 > y) { - rows.push(keys[i]); - } - } - } - } - } - - return rows; - }; - - /** - * Open the column filter - */ - obj.openFilter = function (columnId) { - if (!obj.options.filters) { - console.log("Jspreadsheet: filters not enabled."); - } else { - // Make sure is integer - columnId = parseInt(columnId); - // Reset selection - obj.resetSelection(); - // Load options - var optionsFiltered = []; - if (obj.options.columns[columnId].type == "checkbox") { - optionsFiltered.push({ id: "true", name: "True" }); - optionsFiltered.push({ id: "false", name: "False" }); - } else { - var options = []; - var hasBlanks = false; - for (var j = 0; j < obj.options.data.length; j++) { - var k = obj.options.data[j][columnId]; - var v = obj.records[j][columnId].innerHTML; - if (k && v) { - options[k] = v; - } else { - var hasBlanks = true; - } - } - var keys = Object.keys(options); - var optionsFiltered = []; - for (var j = 0; j < keys.length; j++) { - optionsFiltered.push({ id: keys[j], name: options[keys[j]] }); - } - // Has blank options - if (hasBlanks) { - optionsFiltered.push({ value: "", id: "", name: "(Blanks)" }); - } - } - - // Create dropdown - var div = document.createElement("div"); - obj.filter.children[columnId + 1].innerHTML = ""; - obj.filter.children[columnId + 1].appendChild(div); - obj.filter.children[columnId + 1].style.paddingLeft = "0px"; - obj.filter.children[columnId + 1].style.paddingRight = "0px"; - obj.filter.children[columnId + 1].style.overflow = "initial"; - - var opt = { - data: optionsFiltered, - multiple: true, - autocomplete: true, - opened: true, - value: - obj.filters[columnId] !== undefined ? obj.filters[columnId] : null, - width: "100%", - position: - obj.options.tableOverflow == true || obj.options.fullscreen == true - ? true - : false, - onclose: function (o) { - obj.resetFilters(); - obj.filters[columnId] = o.dropdown.getValue(true); - obj.filter.children[columnId + 1].innerHTML = o.dropdown.getText(); - obj.filter.children[columnId + 1].style.paddingLeft = ""; - obj.filter.children[columnId + 1].style.paddingRight = ""; - obj.filter.children[columnId + 1].style.overflow = ""; - obj.closeFilter(columnId); - obj.refreshSelection(); - }, - }; - - // Dynamic dropdown - jSuites.dropdown(div, opt); - } - }; - - obj.resetFilters = function () { - if (obj.options.filters) { - for (var i = 0; i < obj.filter.children.length; i++) { - obj.filter.children[i].innerHTML = " "; - obj.filters[i] = null; - } - } - - obj.results = null; - obj.updateResult(); - }; - - obj.closeFilter = function (columnId) { - if (!columnId) { - for (var i = 0; i < obj.filter.children.length; i++) { - if (obj.filters[i]) { - columnId = i; - } - } - } - - // Search filter - var search = function (query, x, y) { - for (var i = 0; i < query.length; i++) { - var value = "" + obj.options.data[y][x]; - var label = "" + obj.records[y][x].innerHTML; - if (query[i] == value || query[i] == label) { - return true; - } - } - return false; - }; - - var query = obj.filters[columnId]; - obj.results = []; - for (var j = 0; j < obj.options.data.length; j++) { - if (search(query, columnId, j)) { - obj.results.push(j); - } - } - if (!obj.results.length) { - obj.results = null; - } - - obj.updateResult(); - }; - - /** - * Open the editor - * - * @param object cell - * @return void - */ - obj.openEditor = function (cell, empty, e) { - // Get cell position - var y = cell.getAttribute("data-y"); - var x = cell.getAttribute("data-x"); - - // On edition start - obj.dispatch("oneditionstart", el, cell, x, y); - - // Overflow - if (x > 0) { - obj.records[y][x - 1].style.overflow = "hidden"; - } - - // Create editor - var createEditor = function (type) { - // Cell information - var info = cell.getBoundingClientRect(); - - // Create dropdown - var editor = document.createElement(type); - editor.style.width = info.width + "px"; - editor.style.height = info.height - 2 + "px"; - editor.style.minHeight = info.height - 2 + "px"; - - // Edit cell - cell.classList.add("editor"); - cell.innerHTML = ""; - cell.appendChild(editor); - - // On edition start - obj.dispatch("oncreateeditor", el, cell, x, y, editor); - - return editor; - }; - - // Readonly - if (cell.classList.contains("readonly") == true) { - // Do nothing - } else { - // Holder - obj.edition = [obj.records[y][x], obj.records[y][x].innerHTML, x, y]; - - // If there is a custom editor for it - if (obj.options.columns[x].editor) { - // Custom editors - obj.options.columns[x].editor.openEditor(cell, el, empty, e); - } else { - // Native functions - if (obj.options.columns[x].type == "hidden") { - // Do nothing - } else if ( - obj.options.columns[x].type == "checkbox" || - obj.options.columns[x].type == "radio" - ) { - // Get value - var value = cell.children[0].checked ? false : true; - // Toogle value - obj.setValue(cell, value); - // Do not keep edition open - obj.edition = null; - } else if ( - obj.options.columns[x].type == "dropdown" || - obj.options.columns[x].type == "autocomplete" - ) { - // Get current value - var value = obj.options.data[y][x]; - if (obj.options.columns[x].multiple && !Array.isArray(value)) { - value = value.split(";"); - } - - // Create dropdown - if (typeof obj.options.columns[x].filter == "function") { - var source = obj.options.columns[x].filter( - el, - cell, - x, - y, - obj.options.columns[x].source - ); - } else { - var source = obj.options.columns[x].source; - } - - // Do not change the original source - var data = []; - for (var j = 0; j < source.length; j++) { - data.push(source[j]); - } - - // Create editor - var editor = createEditor("div"); - var options = { - data: data, - multiple: obj.options.columns[x].multiple ? true : false, - autocomplete: - obj.options.columns[x].autocomplete || - obj.options.columns[x].type == "autocomplete" - ? true - : false, - opened: true, - value: value, - width: "100%", - height: editor.style.minHeight, - position: - obj.options.tableOverflow == true || - obj.options.fullscreen == true - ? true - : false, - onclose: function () { - obj.closeEditor(cell, true); - }, - }; - if ( - obj.options.columns[x].options && - obj.options.columns[x].options.type - ) { - options.type = obj.options.columns[x].options.type; - } - jSuites.dropdown(editor, options); - } else if ( - obj.options.columns[x].type == "calendar" || - obj.options.columns[x].type == "color" - ) { - // Value - var value = obj.options.data[y][x]; - // Create editor - var editor = createEditor("input"); - editor.value = value; - - if ( - obj.options.tableOverflow == true || - obj.options.fullscreen == true - ) { - obj.options.columns[x].options.position = true; - } - obj.options.columns[x].options.value = obj.options.data[y][x]; - obj.options.columns[x].options.opened = true; - obj.options.columns[x].options.onclose = function (el, value) { - obj.closeEditor(cell, true); - }; - // Current value - if (obj.options.columns[x].type == "color") { - jSuites.color(editor, obj.options.columns[x].options); - } else { - jSuites.calendar(editor, obj.options.columns[x].options); - } - // Focus on editor - editor.focus(); - } else if (obj.options.columns[x].type == "html") { - var value = obj.options.data[y][x]; - // Create editor - var editor = createEditor("div"); - editor.style.position = "relative"; - var div = document.createElement("div"); - div.classList.add("jexcel_richtext"); - editor.appendChild(div); - jSuites.editor(div, { - focus: true, - value: value, - }); - var rect = cell.getBoundingClientRect(); - var rectContent = div.getBoundingClientRect(); - if (window.innerHeight < rect.bottom + rectContent.height) { - div.style.top = rect.top - (rectContent.height + 2) + "px"; - } else { - div.style.top = rect.top + "px"; - } - } else if (obj.options.columns[x].type == "image") { - // Value - var img = cell.children[0]; - // Create editor - var editor = createEditor("div"); - editor.style.position = "relative"; - var div = document.createElement("div"); - div.classList.add("jclose"); - if (img && img.src) { - div.appendChild(img); - } - editor.appendChild(div); - jSuites.image(div, obj.options.imageOptions); - var rect = cell.getBoundingClientRect(); - var rectContent = div.getBoundingClientRect(); - if (window.innerHeight < rect.bottom + rectContent.height) { - div.style.top = rect.top - (rectContent.height + 2) + "px"; - } else { - div.style.top = rect.top + "px"; - } - } else { - // Value - var value = empty == true ? "" : obj.options.data[y][x]; - - // Basic editor - if ( - obj.options.columns[x].wordWrap != false && - (obj.options.wordWrap == true || - obj.options.columns[x].wordWrap == true) - ) { - var editor = createEditor("textarea"); - } else { - var editor = createEditor("input"); - } - - editor.focus(); - editor.value = value; - - // Column options - var options = obj.options.columns[x]; - // Format - var opt = null; - - // Apply format when is not a formula - if (!isFormula(value)) { - // Format - if ((opt = getMask(options))) { - // Masking - if (!options.disabledMaskOnEdition) { - if (options.mask) { - var m = options.mask.split(";"); - editor.setAttribute("data-mask", m[0]); - } else if (options.locale) { - editor.setAttribute("data-locale", options.locale); - } - } - // Input - opt.input = editor; - // Configuration - editor.mask = opt; - // Do not treat the decimals - jSuites.mask.render(value, opt, false); - } - } - - editor.onblur = function () { - obj.closeEditor(cell, true); - }; - editor.scrollLeft = editor.scrollWidth; - } - } - } - }; - - /** - * Close the editor and save the information - * - * @param object cell - * @param boolean save - * @return void - */ - obj.closeEditor = function (cell, save) { - var x = parseInt(cell.getAttribute("data-x")); - var y = parseInt(cell.getAttribute("data-y")); - - // Get cell properties - if (save == true) { - // If custom editor - if (obj.options.columns[x].editor) { - // Custom editor - var value = obj.options.columns[x].editor.closeEditor(cell, save); - } else { - // Native functions - if ( - obj.options.columns[x].type == "checkbox" || - obj.options.columns[x].type == "radio" || - obj.options.columns[x].type == "hidden" - ) { - // Do nothing - } else if ( - obj.options.columns[x].type == "dropdown" || - obj.options.columns[x].type == "autocomplete" - ) { - var value = cell.children[0].dropdown.close(true); - } else if (obj.options.columns[x].type == "calendar") { - var value = cell.children[0].calendar.close(true); - } else if (obj.options.columns[x].type == "color") { - var value = cell.children[0].color.close(true); - } else if (obj.options.columns[x].type == "html") { - var value = cell.children[0].children[0].editor.getData(); - } else if (obj.options.columns[x].type == "image") { - var img = cell.children[0].children[0].children[0]; - var value = img && img.tagName == "IMG" ? img.src : ""; - } else if (obj.options.columns[x].type == "numeric") { - var value = cell.children[0].value; - if (("" + value).substr(0, 1) != "=") { - if (value == "") { - value = obj.options.columns[x].allowEmpty ? "" : 0; - } - } - cell.children[0].onblur = null; - } else { - var value = cell.children[0].value; - cell.children[0].onblur = null; - - // Column options - var options = obj.options.columns[x]; - // Format - var opt = null; - if ((opt = getMask(options))) { - // Keep numeric in the raw data - if ( - value !== "" && - !isFormula(value) && - typeof value !== "number" - ) { - var t = jSuites.mask.extract(value, opt, true); - if (t && t.value !== "") { - value = t.value; - } - } - } - } - } - - // Ignore changes if the value is the same - if (obj.options.data[y][x] == value) { - cell.innerHTML = obj.edition[1]; - } else { - obj.setValue(cell, value); - } - } else { - if (obj.options.columns[x].editor) { - // Custom editor - obj.options.columns[x].editor.closeEditor(cell, save); - } else { - if ( - obj.options.columns[x].type == "dropdown" || - obj.options.columns[x].type == "autocomplete" - ) { - cell.children[0].dropdown.close(true); - } else if (obj.options.columns[x].type == "calendar") { - cell.children[0].calendar.close(true); - } else if (obj.options.columns[x].type == "color") { - cell.children[0].color.close(true); - } else { - cell.children[0].onblur = null; - } - } - - // Restore value - cell.innerHTML = obj.edition && obj.edition[1] ? obj.edition[1] : ""; - } - - // On edition end - obj.dispatch("oneditionend", el, cell, x, y, value, save); - - // Remove editor class - cell.classList.remove("editor"); - - // Finish edition - obj.edition = null; - }; - - /** - * Get the cell object - * - * @param object cell - * @return string value - */ - obj.getCell = function (cell) { - // Convert in case name is excel liked ex. A10, BB92 - cell = jexcel.getIdFromColumnName(cell, true); - var x = cell[0]; - var y = cell[1]; - - return obj.records[y][x]; - }; - - /** - * Get the column options - * @param x - * @param y - * @returns {{type: string}} - */ - obj.getColumnOptions = function (x, y) { - // Type - var options = obj.options.columns[x]; - - // Cell type - if (!options) { - options = { type: "text" }; - } - - return options; - }; - - /** - * Get the cell object from coords - * - * @param object cell - * @return string value - */ - obj.getCellFromCoords = function (x, y) { - return obj.records[y][x]; - }; - - /** - * Get label - * - * @param object cell - * @return string value - */ - obj.getLabel = function (cell) { - // Convert in case name is excel liked ex. A10, BB92 - cell = jexcel.getIdFromColumnName(cell, true); - var x = cell[0]; - var y = cell[1]; - - return obj.records[y][x].innerHTML; - }; - - /** - * Get labelfrom coords - * - * @param object cell - * @return string value - */ - obj.getLabelFromCoords = function (x, y) { - return obj.records[y][x].innerHTML; - }; - - /** - * Get the value from a cell - * - * @param object cell - * @return string value - */ - obj.getValue = function (cell, processedValue) { - if (typeof cell == "object") { - var x = cell.getAttribute("data-x"); - var y = cell.getAttribute("data-y"); - } else { - cell = jexcel.getIdFromColumnName(cell, true); - var x = cell[0]; - var y = cell[1]; - } - - var value = null; - - if (x != null && y != null) { - if ( - obj.records[y] && - obj.records[y][x] && - (processedValue || obj.options.copyCompatibility == true) - ) { - value = obj.records[y][x].innerHTML; - } else { - if (obj.options.data[y] && obj.options.data[y][x] != "undefined") { - value = obj.options.data[y][x]; - } - } - } - - return value; - }; - - /** - * Get the value from a coords - * - * @param int x - * @param int y - * @return string value - */ - obj.getValueFromCoords = function (x, y, processedValue) { - var value = null; - - if (x != null && y != null) { - if ( - (obj.records[y] && obj.records[y][x] && processedValue) || - obj.options.copyCompatibility == true - ) { - value = obj.records[y][x].innerHTML; - } else { - if (obj.options.data[y] && obj.options.data[y][x] != "undefined") { - value = obj.options.data[y][x]; - } - } - } - - return value; - }; - - /** - * Set a cell value - * - * @param mixed cell destination cell - * @param string value value - * @return void - */ - obj.setValue = function (cell, value, force) { - var records = []; - - if (typeof cell == "string") { - var columnId = jexcel.getIdFromColumnName(cell, true); - var x = columnId[0]; - var y = columnId[1]; - - // Update cell - records.push(obj.updateCell(x, y, value, force)); - - // Update all formulas in the chain - obj.updateFormulaChain(x, y, records); - } else { - var x = null; - var y = null; - if (cell && cell.getAttribute) { - var x = cell.getAttribute("data-x"); - var y = cell.getAttribute("data-y"); - } - - // Update cell - if (x != null && y != null) { - records.push(obj.updateCell(x, y, value, force)); - - // Update all formulas in the chain - obj.updateFormulaChain(x, y, records); - } else { - var keys = Object.keys(cell); - if (keys.length > 0) { - for (var i = 0; i < keys.length; i++) { - if (typeof cell[i] == "string") { - var columnId = jexcel.getIdFromColumnName(cell[i], true); - var x = columnId[0]; - var y = columnId[1]; - } else { - if (cell[i].x != null && cell[i].y != null) { - var x = cell[i].x; - var y = cell[i].y; - // Flexible setup - if (cell[i].newValue != null) { - value = cell[i].newValue; - } else if (cell[i].value != null) { - value = cell[i].value; - } - } else { - var x = cell[i].getAttribute("data-x"); - var y = cell[i].getAttribute("data-y"); - } - } - - // Update cell - if (x != null && y != null) { - records.push(obj.updateCell(x, y, value, force)); - - // Update all formulas in the chain - obj.updateFormulaChain(x, y, records); - } - } - } - } - } - - // Update history - obj.setHistory({ - action: "setValue", - records: records, - selection: obj.selectedCell, - }); - - // Update table with custom configurations if applicable - obj.updateTable(); - - // On after changes - obj.onafterchanges(el, records); - }; - - /** - * Set a cell value based on coordinates - * - * @param int x destination cell - * @param int y destination cell - * @param string value - * @return void - */ - obj.setValueFromCoords = function (x, y, value, force) { - var records = []; - records.push(obj.updateCell(x, y, value, force)); - - // Update all formulas in the chain - obj.updateFormulaChain(x, y, records); - - // Update history - obj.setHistory({ - action: "setValue", - records: records, - selection: obj.selectedCell, - }); - - // Update table with custom configurations if applicable - obj.updateTable(); - - // On after changes - obj.onafterchanges(el, records); - }; - - /** - * Toogle - */ - obj.setCheckRadioValue = function () { - var records = []; - var keys = Object.keys(obj.highlighted); - for (var i = 0; i < keys.length; i++) { - var x = obj.highlighted[i].getAttribute("data-x"); - var y = obj.highlighted[i].getAttribute("data-y"); - - if ( - obj.options.columns[x].type == "checkbox" || - obj.options.columns[x].type == "radio" - ) { - // Update cell - records.push(obj.updateCell(x, y, !obj.options.data[y][x])); - } - } - - if (records.length) { - // Update history - obj.setHistory({ - action: "setValue", - records: records, - selection: obj.selectedCell, - }); - - // On after changes - obj.onafterchanges(el, records); - } - }; - /** - * Strip tags - */ - var stripScript = function (a) { - var b = new Option(); - b.innerHTML = a; - var c = null; - for (a = b.getElementsByTagName("script"); (c = a[0]); ) - c.parentNode.removeChild(c); - return b.innerHTML; - }; - - /** - * Update cell content - * - * @param object cell - * @return void - */ - obj.updateCell = function (x, y, value, force) { - // Changing value depending on the column type - if (obj.records[y][x].classList.contains("readonly") == true && !force) { - // Do nothing - var record = { - x: x, - y: y, - col: x, - row: y, - }; - } else { - // Security - if ( - ("" + value).substr(0, 1) == "=" && - obj.options.secureFormulas == true - ) { - var val = secureFormula(value); - if (val != value) { - // Update the data container - value = val; - } - } - - // On change - var val = obj.dispatch( - "onbeforechange", - el, - obj.records[y][x], - x, - y, - value - ); - - // If you return something this will overwrite the value - if (val != undefined) { - value = val; - } - - if ( - obj.options.columns[x].editor && - typeof obj.options.columns[x].editor.updateCell == "function" - ) { - value = obj.options.columns[x].editor.updateCell( - obj.records[y][x], - value, - force - ); - } - - // History format - var record = { - x: x, - y: y, - col: x, - row: y, - newValue: value, - oldValue: obj.options.data[y][x], - }; - - if (obj.options.columns[x].editor) { - // Update data and cell - obj.options.data[y][x] = value; - } else { - // Native functions - if ( - obj.options.columns[x].type == "checkbox" || - obj.options.columns[x].type == "radio" - ) { - // Unchecked all options - if (obj.options.columns[x].type == "radio") { - for (var j = 0; j < obj.options.data.length; j++) { - obj.options.data[j][x] = false; - } - } - - // Update data and cell - obj.records[y][x].children[0].checked = - value == 1 || value == true || value == "true" || value == "TRUE" - ? true - : false; - obj.options.data[y][x] = obj.records[y][x].children[0].checked; - } else if ( - obj.options.columns[x].type == "dropdown" || - obj.options.columns[x].type == "autocomplete" - ) { - // Update data and cell - obj.options.data[y][x] = value; - obj.records[y][x].textContent = obj.getDropDownValue(x, value); - } else if (obj.options.columns[x].type == "calendar") { - // Try formatted date - var formatted = null; - if (!validDate(value)) { - var tmp = jSuites.calendar.extractDateFromString( - value, - obj.options.columns[x].options.format - ); - if (tmp) { - formatted = tmp; - } - } - // Update data and cell - obj.options.data[y][x] = value; - obj.records[y][x].textContent = jSuites.calendar.getDateString( - formatted ? formatted : value, - obj.options.columns[x].options.format - ); - } else if (obj.options.columns[x].type == "color") { - // Update color - obj.options.data[y][x] = value; - // Render - if (obj.options.columns[x].render == "square") { - var color = document.createElement("div"); - color.className = "color"; - color.style.backgroundColor = value; - obj.records[y][x].textContent = ""; - obj.records[y][x].appendChild(color); - } else { - obj.records[y][x].style.color = value; - obj.records[y][x].textContent = value; - } - } else if (obj.options.columns[x].type == "image") { - value = "" + value; - obj.options.data[y][x] = value; - obj.records[y][x].innerHTML = ""; - if (value && value.substr(0, 10) == "data:image") { - var img = document.createElement("img"); - img.src = value; - obj.records[y][x].appendChild(img); - } - } else { - // Update data and cell - obj.options.data[y][x] = value; - // Label - if (obj.options.columns[x].type == "html") { - obj.records[y][x].innerHTML = stripScript( - obj.parseValue(x, y, value) - ); - } else { - if ( - obj.options.stripHTML === false || - obj.options.columns[x].stripHTML === false - ) { - obj.records[y][x].innerHTML = stripScript( - obj.parseValue(x, y, value, obj.records[y][x]) - ); - } else { - obj.records[y][x].textContent = obj.parseValue( - x, - y, - value, - obj.records[y][x] - ); - } - } - // Handle big text inside a cell - if ( - obj.options.columns[x].wordWrap != false && - (obj.options.wordWrap == true || - obj.options.columns[x].wordWrap == true || - obj.records[y][x].innerHTML.length > 200) - ) { - obj.records[y][x].style.whiteSpace = "pre-wrap"; - } else { - obj.records[y][x].style.whiteSpace = ""; - } - } - } - - // Overflow - if (x > 0) { - if (value) { - obj.records[y][x - 1].style.overflow = "hidden"; - } else { - obj.records[y][x - 1].style.overflow = ""; - } - } - - // On change - obj.dispatch( - "onchange", - el, - obj.records[y] && obj.records[y][x] ? obj.records[y][x] : null, - x, - y, - value, - record.oldValue - ); - } - - return record; - }; - - /** - * Helper function to copy data using the corner icon - */ - obj.copyData = function (o, d) { - // Get data from all selected cells - var data = obj.getData(true, true); - - // Selected cells - var h = obj.selectedContainer; - - // Cells - var x1 = parseInt(o.getAttribute("data-x")); - var y1 = parseInt(o.getAttribute("data-y")); - var x2 = parseInt(d.getAttribute("data-x")); - var y2 = parseInt(d.getAttribute("data-y")); - - // Records - var records = []; - var breakControl = false; - - if (h[0] == x1) { - // Vertical copy - if (y1 < h[1]) { - var rowNumber = y1 - h[1]; - } else { - var rowNumber = 1; - } - var colNumber = 0; - } else { - if (x1 < h[0]) { - var colNumber = x1 - h[0]; - } else { - var colNumber = 1; - } - var rowNumber = 0; - } - - // Copy data procedure - var posx = 0; - var posy = 0; - - for (var j = y1; j <= y2; j++) { - // Skip hidden rows - if (obj.rows[j] && obj.rows[j].style.display == "none") { - continue; - } - - // Controls - if (data[posy] == undefined) { - posy = 0; - } - posx = 0; - - // Data columns - if (h[0] != x1) { - if (x1 < h[0]) { - var colNumber = x1 - h[0]; - } else { - var colNumber = 1; - } - } - // Data columns - for (var i = x1; i <= x2; i++) { - // Update non-readonly - if ( - obj.records[j][i] && - !obj.records[j][i].classList.contains("readonly") && - obj.records[j][i].style.display != "none" && - breakControl == false - ) { - // Stop if contains value - if (!obj.selection.length) { - if (obj.options.data[j][i] != "") { - breakControl = true; - continue; - } - } - - // Column - if (data[posy] == undefined) { - posx = 0; - } else if (data[posy][posx] == undefined) { - posx = 0; - } - - // Value - var value = data[posy][posx]; - - if (value && !data[1] && obj.options.autoIncrement == true) { - if ( - obj.options.columns[i].type == "text" || - obj.options.columns[i].type == "number" - ) { - if (("" + value).substr(0, 1) == "=") { - var tokens = value.match(/([A-Z]+[0-9]+)/g); - - if (tokens) { - var affectedTokens = []; - for (var index = 0; index < tokens.length; index++) { - var position = jexcel.getIdFromColumnName( - tokens[index], - 1 - ); - position[0] += colNumber; - position[1] += rowNumber; - if (position[1] < 0) { - position[1] = 0; - } - var token = jexcel.getColumnNameFromId([ - position[0], - position[1], - ]); - - if (token != tokens[index]) { - affectedTokens[tokens[index]] = token; - } - } - // Update formula - if (affectedTokens) { - value = obj.updateFormula(value, affectedTokens); - } - } - } else { - if (value == Number(value)) { - value = Number(value) + rowNumber; - } - } - } else if (obj.options.columns[i].type == "calendar") { - var date = new Date(value); - date.setDate(date.getDate() + rowNumber); - value = - date.getFullYear() + - "-" + - jexcel.doubleDigitFormat(parseInt(date.getMonth() + 1)) + - "-" + - jexcel.doubleDigitFormat(date.getDate()) + - " " + - "00:00:00"; - } - } - - records.push(obj.updateCell(i, j, value)); - - // Update all formulas in the chain - obj.updateFormulaChain(i, j, records); - } - posx++; - if (h[0] != x1) { - colNumber++; - } - } - posy++; - rowNumber++; - } - - // Update history - obj.setHistory({ - action: "setValue", - records: records, - selection: obj.selectedCell, - }); - - // Update table with custom configuration if applicable - obj.updateTable(); - - // On after changes - obj.onafterchanges(el, records); - }; - - /** - * Refresh current selection - */ - obj.refreshSelection = function () { - if (obj.selectedCell) { - obj.updateSelectionFromCoords( - obj.selectedCell[0], - obj.selectedCell[1], - obj.selectedCell[2], - obj.selectedCell[3] - ); - } - }; - - /** - * Move coords to A1 in case overlaps with an excluded cell - */ - obj.conditionalSelectionUpdate = function (type, o, d) { - if (type == 1) { - if ( - obj.selectedCell && - ((o >= obj.selectedCell[1] && o <= obj.selectedCell[3]) || - (d >= obj.selectedCell[1] && d <= obj.selectedCell[3])) - ) { - obj.resetSelection(); - return; - } - } else { - if ( - obj.selectedCell && - ((o >= obj.selectedCell[0] && o <= obj.selectedCell[2]) || - (d >= obj.selectedCell[0] && d <= obj.selectedCell[2])) - ) { - obj.resetSelection(); - return; - } - } - }; - - /** - * Clear table selection - */ - obj.resetSelection = function (blur) { - // Remove style - if (!obj.highlighted.length) { - var previousStatus = 0; - } else { - var previousStatus = 1; - - for (var i = 0; i < obj.highlighted.length; i++) { - obj.highlighted[i].classList.remove("highlight"); - obj.highlighted[i].classList.remove("highlight-left"); - obj.highlighted[i].classList.remove("highlight-right"); - obj.highlighted[i].classList.remove("highlight-top"); - obj.highlighted[i].classList.remove("highlight-bottom"); - obj.highlighted[i].classList.remove("highlight-selected"); - - var px = parseInt(obj.highlighted[i].getAttribute("data-x")); - var py = parseInt(obj.highlighted[i].getAttribute("data-y")); - - // Check for merged cells - if (obj.highlighted[i].getAttribute("data-merged")) { - var colspan = parseInt(obj.highlighted[i].getAttribute("colspan")); - var rowspan = parseInt(obj.highlighted[i].getAttribute("rowspan")); - var ux = colspan > 0 ? px + (colspan - 1) : px; - var uy = rowspan > 0 ? py + (rowspan - 1) : py; - } else { - var ux = px; - var uy = py; - } - - // Remove selected from headers - for (var j = px; j <= ux; j++) { - if (obj.headers[j]) { - obj.headers[j].classList.remove("selected"); - } - } - - // Remove selected from rows - for (var j = py; j <= uy; j++) { - if (obj.rows[j]) { - obj.rows[j].classList.remove("selected"); - } - } - } - } - - // Reset highlighted cells - obj.highlighted = []; - - // Reset - obj.selectedCell = null; - - // Hide corner - obj.corner.style.top = "-2000px"; - obj.corner.style.left = "-2000px"; - - if (blur == true && previousStatus == 1) { - obj.dispatch("onblur", el); - } - - return previousStatus; - }; - - /** - * Update selection based on two cells - */ - obj.updateSelection = function (el1, el2, origin) { - var x1 = el1.getAttribute("data-x"); - var y1 = el1.getAttribute("data-y"); - if (el2) { - var x2 = el2.getAttribute("data-x"); - var y2 = el2.getAttribute("data-y"); - } else { - var x2 = x1; - var y2 = y1; - } - - obj.updateSelectionFromCoords(x1, y1, x2, y2, origin); - }; - - /** - * Update selection from coords - */ - obj.updateSelectionFromCoords = function (x1, y1, x2, y2, origin) { - // Reset Selection - var updated = null; - var previousState = obj.resetSelection(); - - // select column - if (y1 == null) { - y1 = 0; - y2 = obj.rows.length - 1; - } - - // Same element - if (x2 == null) { - x2 = x1; - } - if (y2 == null) { - y2 = y1; - } - - // Selection must be within the existing data - if (x1 >= obj.headers.length) { - x1 = obj.headers.length - 1; - } - if (y1 >= obj.rows.length) { - y1 = obj.rows.length - 1; - } - if (x2 >= obj.headers.length) { - x2 = obj.headers.length - 1; - } - if (y2 >= obj.rows.length) { - y2 = obj.rows.length - 1; - } - - // Keep selected cell - obj.selectedCell = [x1, y1, x2, y2]; - - // Select cells - if (x1 != null) { - // Add selected cell - if (obj.records[y1][x1]) { - obj.records[y1][x1].classList.add("highlight-selected"); - } - - // Origin & Destination - if (parseInt(x1) < parseInt(x2)) { - var px = parseInt(x1); - var ux = parseInt(x2); - } else { - var px = parseInt(x2); - var ux = parseInt(x1); - } - - if (parseInt(y1) < parseInt(y2)) { - var py = parseInt(y1); - var uy = parseInt(y2); - } else { - var py = parseInt(y2); - var uy = parseInt(y1); - } - - // Verify merged columns - for (var i = px; i <= ux; i++) { - for (var j = py; j <= uy; j++) { - if ( - obj.records[j][i] && - obj.records[j][i].getAttribute("data-merged") - ) { - var x = parseInt(obj.records[j][i].getAttribute("data-x")); - var y = parseInt(obj.records[j][i].getAttribute("data-y")); - var colspan = parseInt(obj.records[j][i].getAttribute("colspan")); - var rowspan = parseInt(obj.records[j][i].getAttribute("rowspan")); - - if (colspan > 1) { - if (x < px) { - px = x; - } - if (x + colspan > ux) { - ux = x + colspan - 1; - } - } - - if (rowspan) { - if (y < py) { - py = y; - } - if (y + rowspan > uy) { - uy = y + rowspan - 1; - } - } - } - } - } - - // Limits - var borderLeft = null; - var borderRight = null; - var borderTop = null; - var borderBottom = null; - - // Vertical limits - for (var j = py; j <= uy; j++) { - if (obj.rows[j].style.display != "none") { - if (borderTop == null) { - borderTop = j; - } - borderBottom = j; - } - } - - // Redefining styles - for (var i = px; i <= ux; i++) { - for (var j = py; j <= uy; j++) { - if ( - obj.rows[j].style.display != "none" && - obj.records[j][i].style.display != "none" - ) { - obj.records[j][i].classList.add("highlight"); - obj.highlighted.push(obj.records[j][i]); - } - } - - // Horizontal limits - if (obj.options.columns[i].type != "hidden") { - if (borderLeft == null) { - borderLeft = i; - } - borderRight = i; - } - } - - // Create borders - if (!borderLeft) { - borderLeft = 0; - } - if (!borderRight) { - borderRight = 0; - } - for (var i = borderLeft; i <= borderRight; i++) { - if (obj.options.columns[i].type != "hidden") { - // Top border - if (obj.records[borderTop] && obj.records[borderTop][i]) { - obj.records[borderTop][i].classList.add("highlight-top"); - } - // Bottom border - if (obj.records[borderBottom] && obj.records[borderBottom][i]) { - obj.records[borderBottom][i].classList.add("highlight-bottom"); - } - // Add selected from headers - obj.headers[i].classList.add("selected"); - } - } - - for (var j = borderTop; j <= borderBottom; j++) { - if (obj.rows[j] && obj.rows[j].style.display != "none") { - // Left border - obj.records[j][borderLeft].classList.add("highlight-left"); - // Right border - obj.records[j][borderRight].classList.add("highlight-right"); - // Add selected from rows - obj.rows[j].classList.add("selected"); - } - } - - obj.selectedContainer = [ - borderLeft, - borderTop, - borderRight, - borderBottom, - ]; - } - - // Handle events - if (previousState == 0) { - obj.dispatch("onfocus", el); - - obj.removeCopyingSelection(); - } - - obj.dispatch( - "onselection", - el, - borderLeft, - borderTop, - borderRight, - borderBottom, - origin - ); - - // Find corner cell - obj.updateCornerPosition(); - }; - - /** - * Remove copy selection - * - * @return void - */ - obj.removeCopySelection = function () { - // Remove current selection - for (var i = 0; i < obj.selection.length; i++) { - obj.selection[i].classList.remove("selection"); - obj.selection[i].classList.remove("selection-left"); - obj.selection[i].classList.remove("selection-right"); - obj.selection[i].classList.remove("selection-top"); - obj.selection[i].classList.remove("selection-bottom"); - } - - obj.selection = []; - }; - - /** - * Update copy selection - * - * @param int x, y - * @return void - */ - obj.updateCopySelection = function (x3, y3) { - // Remove selection - obj.removeCopySelection(); - - // Get elements first and last - var x1 = obj.selectedContainer[0]; - var y1 = obj.selectedContainer[1]; - var x2 = obj.selectedContainer[2]; - var y2 = obj.selectedContainer[3]; - - if (x3 != null && y3 != null) { - if (x3 - x2 > 0) { - var px = parseInt(x2) + 1; - var ux = parseInt(x3); - } else { - var px = parseInt(x3); - var ux = parseInt(x1) - 1; - } - - if (y3 - y2 > 0) { - var py = parseInt(y2) + 1; - var uy = parseInt(y3); - } else { - var py = parseInt(y3); - var uy = parseInt(y1) - 1; - } - - if (ux - px <= uy - py) { - var px = parseInt(x1); - var ux = parseInt(x2); - } else { - var py = parseInt(y1); - var uy = parseInt(y2); - } - - for (var j = py; j <= uy; j++) { - for (var i = px; i <= ux; i++) { - if ( - obj.records[j][i] && - obj.rows[j].style.display != "none" && - obj.records[j][i].style.display != "none" - ) { - obj.records[j][i].classList.add("selection"); - obj.records[py][i].classList.add("selection-top"); - obj.records[uy][i].classList.add("selection-bottom"); - obj.records[j][px].classList.add("selection-left"); - obj.records[j][ux].classList.add("selection-right"); - - // Persist selected elements - obj.selection.push(obj.records[j][i]); - } - } - } - } - }; - - /** - * Update corner position - * - * @return void - */ - obj.updateCornerPosition = function () { - // If any selected cells - if (!obj.highlighted.length) { - obj.corner.style.top = "-2000px"; - obj.corner.style.left = "-2000px"; - } else { - // Get last cell - var last = obj.highlighted[obj.highlighted.length - 1]; - var lastX = last.getAttribute("data-x"); - - var contentRect = obj.content.getBoundingClientRect(); - var x1 = contentRect.left; - var y1 = contentRect.top; - - var lastRect = last.getBoundingClientRect(); - var x2 = lastRect.left; - var y2 = lastRect.top; - var w2 = lastRect.width; - var h2 = lastRect.height; - - var x = x2 - x1 + obj.content.scrollLeft + w2 - 4; - var y = y2 - y1 + obj.content.scrollTop + h2 - 4; - - // Place the corner in the correct place - obj.corner.style.top = y + "px"; - obj.corner.style.left = x + "px"; - - if (obj.options.freezeColumns) { - var width = obj.getFreezeWidth(); - // Only check if the last column is not part of the merged cells - if (lastX > obj.options.freezeColumns - 1 && x2 - x1 + w2 < width) { - obj.corner.style.display = "none"; - } else { - if (obj.options.selectionCopy == true) { - obj.corner.style.display = ""; - } - } - } else { - if (obj.options.selectionCopy == true) { - obj.corner.style.display = ""; - } - } - } - }; - - /** - * Update scroll position based on the selection - */ - obj.updateScroll = function (direction) { - // Jspreadsheet Container information - var contentRect = obj.content.getBoundingClientRect(); - var x1 = contentRect.left; - var y1 = contentRect.top; - var w1 = contentRect.width; - var h1 = contentRect.height; - - // Direction Left or Up - var reference = obj.records[obj.selectedCell[3]][obj.selectedCell[2]]; - - // Reference - var referenceRect = reference.getBoundingClientRect(); - var x2 = referenceRect.left; - var y2 = referenceRect.top; - var w2 = referenceRect.width; - var h2 = referenceRect.height; - - // Direction - if (direction == 0 || direction == 1) { - var x = x2 - x1 + obj.content.scrollLeft; - var y = y2 - y1 + obj.content.scrollTop - 2; - } else { - var x = x2 - x1 + obj.content.scrollLeft + w2; - var y = y2 - y1 + obj.content.scrollTop + h2; - } - - // Top position check - if (y > obj.content.scrollTop + 30 && y < obj.content.scrollTop + h1) { - // In the viewport - } else { - // Out of viewport - if (y < obj.content.scrollTop + 30) { - obj.content.scrollTop = y - h2; - } else { - obj.content.scrollTop = y - (h1 - 2); - } - } - - // Freeze columns? - var freezed = obj.getFreezeWidth(); - - // Left position check - TODO: change that to the bottom border of the element - if ( - x > obj.content.scrollLeft + freezed && - x < obj.content.scrollLeft + w1 - ) { - // In the viewport - } else { - // Out of viewport - if (x < obj.content.scrollLeft + 30) { - obj.content.scrollLeft = x; - if (obj.content.scrollLeft < 50) { - obj.content.scrollLeft = 0; - } - } else if (x < obj.content.scrollLeft + freezed) { - obj.content.scrollLeft = x - freezed - 1; - } else { - obj.content.scrollLeft = x - (w1 - 20); - } - } - }; - - /** - * Get the column width - * - * @param int column column number (first column is: 0) - * @return int current width - */ - obj.getWidth = function (column) { - if (typeof column === "undefined") { - // Get all headers - var data = []; - for (var i = 0; i < obj.headers.length; i++) { - data.push(obj.options.columns[i].width); - } - } else { - // In case the column is an object - if (typeof column == "object") { - column = $(column).getAttribute("data-x"); - } - - data = obj.colgroup[column].getAttribute("width"); - } - - return data; - }; - - /** - * Set the column width - * - * @param int column number (first column is: 0) - * @param int new column width - * @param int old column width - */ - obj.setWidth = function (column, width, oldWidth) { - if (width) { - if (Array.isArray(column)) { - // Oldwidth - if (!oldWidth) { - var oldWidth = []; - } - // Set width - for (var i = 0; i < column.length; i++) { - if (!oldWidth[i]) { - oldWidth[i] = obj.colgroup[column[i]].getAttribute("width"); - } - var w = Array.isArray(width) && width[i] ? width[i] : width; - obj.colgroup[column[i]].setAttribute("width", w); - obj.options.columns[column[i]].width = w; - } - } else { - // Oldwidth - if (!oldWidth) { - oldWidth = obj.colgroup[column].getAttribute("width"); - } - // Set width - obj.colgroup[column].setAttribute("width", width); - obj.options.columns[column].width = width; - } - - // Keeping history of changes - obj.setHistory({ - action: "setWidth", - column: column, - oldValue: oldWidth, - newValue: width, - }); - - // On resize column - obj.dispatch("onresizecolumn", el, column, width, oldWidth); - - // Update corner position - obj.updateCornerPosition(); - } - }; - - /** - * Set the row height - * - * @param row - row number (first row is: 0) - * @param height - new row height - * @param oldHeight - old row height - */ - obj.setHeight = function (row, height, oldHeight) { - if (height > 0) { - // In case the column is an object - if (typeof row == "object") { - row = row.getAttribute("data-y"); - } - - // Oldwidth - if (!oldHeight) { - oldHeight = obj.rows[row].getAttribute("height"); - - if (!oldHeight) { - var rect = obj.rows[row].getBoundingClientRect(); - oldHeight = rect.height; - } - } - - // Integer - height = parseInt(height); - - // Set width - obj.rows[row].style.height = height + "px"; - - // Keep options updated - if (!obj.options.rows[row]) { - obj.options.rows[row] = {}; - } - obj.options.rows[row].height = height; - - // Keeping history of changes - obj.setHistory({ - action: "setHeight", - row: row, - oldValue: oldHeight, - newValue: height, - }); - - // On resize column - obj.dispatch("onresizerow", el, row, height, oldHeight); - - // Update corner position - obj.updateCornerPosition(); - } - }; - - /** - * Get the row height - * - * @param row - row number (first row is: 0) - * @return height - current row height - */ - obj.getHeight = function (row) { - if (typeof row === "undefined") { - // Get height of all rows - var data = []; - for (var j = 0; j < obj.rows.length; j++) { - var h = obj.rows[j].style.height; - if (h) { - data[j] = h; - } - } - } else { - // In case the row is an object - if (typeof row == "object") { - row = $(row).getAttribute("data-y"); - } - - var data = obj.rows[row].style.height; - } - - return data; - }; - - obj.setFooter = function (data) { - if (data) { - obj.options.footers = data; - } - - if (obj.options.footers) { - if (!obj.tfoot) { - obj.tfoot = document.createElement("tfoot"); - obj.table.appendChild(obj.tfoot); - } - - for (var j = 0; j < obj.options.footers.length; j++) { - if (obj.tfoot.children[j]) { - var tr = obj.tfoot.children[j]; - } else { - var tr = document.createElement("tr"); - var td = document.createElement("td"); - tr.appendChild(td); - obj.tfoot.appendChild(tr); - } - for (var i = 0; i < obj.headers.length; i++) { - if (!obj.options.footers[j][i]) { - obj.options.footers[j][i] = ""; - } - if (obj.tfoot.children[j].children[i + 1]) { - var td = obj.tfoot.children[j].children[i + 1]; - } else { - var td = document.createElement("td"); - tr.appendChild(td); - - // Text align - var colAlign = obj.options.columns[i].align - ? obj.options.columns[i].align - : "center"; - td.style.textAlign = colAlign; - } - td.textContent = obj.parseValue( - +obj.records.length + i, - j, - obj.options.footers[j][i] - ); - - // Hide/Show with hideColumn()/showColumn() - td.style.display = obj.colgroup[i].style.display; - } - } - } - }; - - /** - * Get the column title - * - * @param column - column number (first column is: 0) - * @param title - new column title - */ - obj.getHeader = function (column) { - return obj.headers[column].textContent; - }; - - /** - * Set the column title - * - * @param column - column number (first column is: 0) - * @param title - new column title - */ - obj.setHeader = function (column, newValue) { - if (obj.headers[column]) { - var oldValue = obj.headers[column].textContent; - - if (!newValue) { - newValue = prompt(obj.options.text.columnName, oldValue); - } - - if (newValue) { - obj.headers[column].textContent = newValue; - // Keep the title property - obj.headers[column].setAttribute("title", newValue); - // Update title - obj.options.columns[column].title = newValue; - } - - obj.setHistory({ - action: "setHeader", - column: column, - oldValue: oldValue, - newValue: newValue, - }); - - // On onchange header - obj.dispatch("onchangeheader", el, column, oldValue, newValue); - } - }; - - /** - * Get the headers - * - * @param asArray - * @return mixed - */ - obj.getHeaders = function (asArray) { - var title = []; - - for (var i = 0; i < obj.headers.length; i++) { - title.push(obj.getHeader(i)); - } - - return asArray ? title : title.join(obj.options.csvDelimiter); - }; - - /** - * Get meta information from cell(s) - * - * @return integer - */ - obj.getMeta = function (cell, key) { - if (!cell) { - return obj.options.meta; - } else { - if (key) { - return obj.options.meta[cell] && obj.options.meta[cell][key] - ? obj.options.meta[cell][key] - : null; - } else { - return obj.options.meta[cell] ? obj.options.meta[cell] : null; - } - } - }; - - /** - * Set meta information to cell(s) - * - * @return integer - */ - obj.setMeta = function (o, k, v) { - if (!obj.options.meta) { - obj.options.meta = {}; - } - - if (k && v) { - // Set data value - if (!obj.options.meta[o]) { - obj.options.meta[o] = {}; - } - obj.options.meta[o][k] = v; - } else { - // Apply that for all cells - var keys = Object.keys(o); - for (var i = 0; i < keys.length; i++) { - if (!obj.options.meta[keys[i]]) { - obj.options.meta[keys[i]] = {}; - } - - var prop = Object.keys(o[keys[i]]); - for (var j = 0; j < prop.length; j++) { - obj.options.meta[keys[i]][prop[j]] = o[keys[i]][prop[j]]; - } - } - } - - obj.dispatch("onchangemeta", el, o, k, v); - }; - - /** - * Update meta information - * - * @return integer - */ - obj.updateMeta = function (affectedCells) { - if (obj.options.meta) { - var newMeta = {}; - var keys = Object.keys(obj.options.meta); - for (var i = 0; i < keys.length; i++) { - if (affectedCells[keys[i]]) { - newMeta[affectedCells[keys[i]]] = obj.options.meta[keys[i]]; - } else { - newMeta[keys[i]] = obj.options.meta[keys[i]]; - } - } - // Update meta information - obj.options.meta = newMeta; - } - }; - - /** - * Get style information from cell(s) - * - * @return integer - */ - (obj.getStyle = function (cell, key) { - // Cell - if (!cell) { - // Control vars - var data = {}; - - // Column and row length - var x = obj.options.data[0].length; - var y = obj.options.data.length; - - // Go through the columns to get the data - for (var j = 0; j < y; j++) { - for (var i = 0; i < x; i++) { - // Value - var v = key - ? obj.records[j][i].style[key] - : obj.records[j][i].getAttribute("style"); - - // Any meta data for this column? - if (v) { - // Column name - var k = jexcel.getColumnNameFromId([i, j]); - // Value - data[k] = v; - } - } - } - - return data; - } else { - cell = jexcel.getIdFromColumnName(cell, true); - - return key - ? obj.records[cell[1]][cell[0]].style[key] - : obj.records[cell[1]][cell[0]].getAttribute("style"); - } - }), - (obj.resetStyle = function (o, ignoreHistoryAndEvents) { - var keys = Object.keys(o); - for (var i = 0; i < keys.length; i++) { - // Position - var cell = jexcel.getIdFromColumnName(keys[i], true); - if (obj.records[cell[1]] && obj.records[cell[1]][cell[0]]) { - obj.records[cell[1]][cell[0]].setAttribute("style", ""); - } - } - obj.setStyle(o, null, null, null, ignoreHistoryAndEvents); - }); - - /** - * Set meta information to cell(s) - * - * @return integer - */ - obj.setStyle = function (o, k, v, force, ignoreHistoryAndEvents) { - var newValue = {}; - var oldValue = {}; - - // Apply style - var applyStyle = function (cellId, key, value) { - // Position - var cell = jexcel.getIdFromColumnName(cellId, true); - - if ( - obj.records[cell[1]] && - obj.records[cell[1]][cell[0]] && - (obj.records[cell[1]][cell[0]].classList.contains("readonly") == - false || - force) - ) { - // Current value - var currentValue = obj.records[cell[1]][cell[0]].style[key]; - - // Change layout - if (currentValue == value && !force) { - value = ""; - obj.records[cell[1]][cell[0]].style[key] = ""; - } else { - obj.records[cell[1]][cell[0]].style[key] = value; - } - - // History - if (!oldValue[cellId]) { - oldValue[cellId] = []; - } - if (!newValue[cellId]) { - newValue[cellId] = []; - } - - oldValue[cellId].push([key + ":" + currentValue]); - newValue[cellId].push([key + ":" + value]); - } - }; - - if (k && v) { - // Get object from string - if (typeof o == "string") { - applyStyle(o, k, v); - } else { - // Avoid duplications - var oneApplication = []; - // Apply that for all cells - for (var i = 0; i < o.length; i++) { - var x = o[i].getAttribute("data-x"); - var y = o[i].getAttribute("data-y"); - var cellName = jexcel.getColumnNameFromId([x, y]); - // This happens when is a merged cell - if (!oneApplication[cellName]) { - applyStyle(cellName, k, v); - oneApplication[cellName] = true; - } - } - } - } else { - var keys = Object.keys(o); - for (var i = 0; i < keys.length; i++) { - var style = o[keys[i]]; - if (typeof style == "string") { - style = style.split(";"); - } - for (var j = 0; j < style.length; j++) { - if (typeof style[j] == "string") { - style[j] = style[j].split(":"); - } - // Apply value - if (style[j][0].trim()) { - applyStyle(keys[i], style[j][0].trim(), style[j][1]); - } - } - } - } - - var keys = Object.keys(oldValue); - for (var i = 0; i < keys.length; i++) { - oldValue[keys[i]] = oldValue[keys[i]].join(";"); - } - var keys = Object.keys(newValue); - for (var i = 0; i < keys.length; i++) { - newValue[keys[i]] = newValue[keys[i]].join(";"); - } - - if (!ignoreHistoryAndEvents) { - // Keeping history of changes - obj.setHistory({ - action: "setStyle", - oldValue: oldValue, - newValue: newValue, - }); - } - - obj.dispatch("onchangestyle", el, o, k, v); - }; - - /** - * Get cell comments, null cell for all - */ - obj.getComments = function (cell, withAuthor) { - if (cell) { - if (typeof cell == "string") { - var cell = jexcel.getIdFromColumnName(cell, true); - } - - if (withAuthor) { - return [ - obj.records[cell[1]][cell[0]].getAttribute("title"), - obj.records[cell[1]][cell[0]].getAttribute("author"), - ]; - } else { - return obj.records[cell[1]][cell[0]].getAttribute("title") || ""; - } - } else { - var data = {}; - for (var j = 0; j < obj.options.data.length; j++) { - for (var i = 0; i < obj.options.columns.length; i++) { - var comments = obj.records[j][i].getAttribute("title"); - if (comments) { - var cell = jexcel.getColumnNameFromId([i, j]); - data[cell] = comments; - } - } - } - return data; - } - }; - - /** - * Set cell comments - */ - obj.setComments = function (cellId, comments, author) { - if (typeof cellId == "string") { - var cell = jexcel.getIdFromColumnName(cellId, true); - } else { - var cell = cellId; - } - - // Keep old value - var title = obj.records[cell[1]][cell[0]].getAttribute("title"); - var author = obj.records[cell[1]][cell[0]].getAttribute("data-author"); - var oldValue = [title, author]; - - // Set new values - obj.records[cell[1]][cell[0]].setAttribute( - "title", - comments ? comments : "" - ); - obj.records[cell[1]][cell[0]].setAttribute( - "data-author", - author ? author : "" - ); - - // Remove class if there is no comment - if (comments) { - obj.records[cell[1]][cell[0]].classList.add("jexcel_comments"); - } else { - obj.records[cell[1]][cell[0]].classList.remove("jexcel_comments"); - } - - // Save history - obj.setHistory({ - action: "setComments", - column: cellId, - newValue: [comments, author], - oldValue: oldValue, - }); - // Set comments - obj.dispatch("oncomments", el, comments, title, cell, cell[0], cell[1]); - }; - - /** - * Get table config information - */ - obj.getConfig = function () { - var options = obj.options; - options.style = obj.getStyle(); - options.mergeCells = obj.getMerge(); - options.comments = obj.getComments(); - - return options; - }; - - /** - * Sort data and reload table - */ - obj.orderBy = function (column, order) { - if (column >= 0) { - // Merged cells - if (Object.keys(obj.options.mergeCells).length > 0) { - if ( - !confirm( - obj.options.text - .thisActionWillDestroyAnyExistingMergedCellsAreYouSure - ) - ) { - return false; - } else { - // Remove merged cells - obj.destroyMerged(); - } - } - - // Direction - if (order == null) { - order = obj.headers[column].classList.contains("arrow-down") ? 1 : 0; - } else { - order = order ? 1 : 0; - } - - // Test order - var temp = []; - if ( - obj.options.columns[column].type == "number" || - obj.options.columns[column].type == "numeric" || - obj.options.columns[column].type == "percentage" || - obj.options.columns[column].type == "autonumber" || - obj.options.columns[column].type == "color" - ) { - for (var j = 0; j < obj.options.data.length; j++) { - temp[j] = [j, Number(obj.options.data[j][column])]; - } - } else if ( - obj.options.columns[column].type == "calendar" || - obj.options.columns[column].type == "checkbox" || - obj.options.columns[column].type == "radio" - ) { - for (var j = 0; j < obj.options.data.length; j++) { - temp[j] = [j, obj.options.data[j][column]]; - } - } else { - for (var j = 0; j < obj.options.data.length; j++) { - temp[j] = [j, obj.records[j][column].textContent.toLowerCase()]; - } - } - - // Default sorting method - if (typeof obj.options.sorting !== "function") { - obj.options.sorting = function (direction) { - return function (a, b) { - var valueA = a[1]; - var valueB = b[1]; - - if (!direction) { - return valueA === "" && valueB !== "" - ? 1 - : valueA !== "" && valueB === "" - ? -1 - : valueA > valueB - ? 1 - : valueA < valueB - ? -1 - : 0; - } else { - return valueA === "" && valueB !== "" - ? 1 - : valueA !== "" && valueB === "" - ? -1 - : valueA > valueB - ? -1 - : valueA < valueB - ? 1 - : 0; - } - }; - }; - } - - temp = temp.sort(obj.options.sorting(order)); - - // Save history - var newValue = []; - for (var j = 0; j < temp.length; j++) { - newValue[j] = temp[j][0]; - } - - // Save history - obj.setHistory({ - action: "orderBy", - rows: newValue, - column: column, - order: order, - }); - - // Update order - obj.updateOrderArrow(column, order); - obj.updateOrder(newValue); - - // On sort event - obj.dispatch("onsort", el, column, order); - - return true; - } - }; - - /** - * Update order arrow - */ - obj.updateOrderArrow = function (column, order) { - // Remove order - for (var i = 0; i < obj.headers.length; i++) { - obj.headers[i].classList.remove("arrow-up"); - obj.headers[i].classList.remove("arrow-down"); - } - - // No order specified then toggle order - if (order) { - obj.headers[column].classList.add("arrow-up"); - } else { - obj.headers[column].classList.add("arrow-down"); - } - }; - - /** - * Update rows position - */ - obj.updateOrder = function (rows) { - // History - var data = []; - for (var j = 0; j < rows.length; j++) { - data[j] = obj.options.data[rows[j]]; - } - obj.options.data = data; - - var data = []; - for (var j = 0; j < rows.length; j++) { - data[j] = obj.records[rows[j]]; - } - obj.records = data; - - var data = []; - for (var j = 0; j < rows.length; j++) { - data[j] = obj.rows[rows[j]]; - } - obj.rows = data; - - // Update references - obj.updateTableReferences(); - - // Redo search - if (obj.results && obj.results.length) { - if (obj.searchInput.value) { - obj.search(obj.searchInput.value); - } else { - obj.closeFilter(); - } - } else { - // Create page - obj.results = null; - obj.pageNumber = 0; - - if (obj.options.pagination > 0) { - obj.page(0); - } else if (obj.options.lazyLoading == true) { - obj.loadPage(0); - } else { - for (var j = 0; j < obj.rows.length; j++) { - obj.tbody.appendChild(obj.rows[j]); - } - } - } - }; - - /** - * Move row - * - * @return void - */ - obj.moveRow = function (o, d, ignoreDom) { - if (Object.keys(obj.options.mergeCells).length > 0) { - if (o > d) { - var insertBefore = 1; - } else { - var insertBefore = 0; - } - - if ( - obj.isRowMerged(o).length || - obj.isRowMerged(d, insertBefore).length - ) { - if ( - !confirm( - obj.options.text - .thisActionWillDestroyAnyExistingMergedCellsAreYouSure - ) - ) { - return false; - } else { - obj.destroyMerged(); - } - } - } - - if (obj.options.search == true) { - if (obj.results && obj.results.length != obj.rows.length) { - if ( - confirm( - obj.options.text.thisActionWillClearYourSearchResultsAreYouSure - ) - ) { - obj.resetSearch(); - } else { - return false; - } - } - - obj.results = null; - } - - if (!ignoreDom) { - if ( - Array.prototype.indexOf.call(obj.tbody.children, obj.rows[d]) >= 0 - ) { - if (o > d) { - obj.tbody.insertBefore(obj.rows[o], obj.rows[d]); - } else { - obj.tbody.insertBefore(obj.rows[o], obj.rows[d].nextSibling); - } - } else { - obj.tbody.removeChild(obj.rows[o]); - } - } - - // Place references in the correct position - obj.rows.splice(d, 0, obj.rows.splice(o, 1)[0]); - obj.records.splice(d, 0, obj.records.splice(o, 1)[0]); - obj.options.data.splice(d, 0, obj.options.data.splice(o, 1)[0]); - - // Respect pagination - if ( - obj.options.pagination > 0 && - obj.tbody.children.length != obj.options.pagination - ) { - obj.page(obj.pageNumber); - } - - // Keeping history of changes - obj.setHistory({ - action: "moveRow", - oldValue: o, - newValue: d, - }); - - // Update table references - obj.updateTableReferences(); - - // Events - obj.dispatch("onmoverow", el, o, d); - }; - - /** - * Insert a new row - * - * @param mixed - number of blank lines to be insert or a single array with the data of the new row - * @param rowNumber - * @param insertBefore - * @return void - */ - obj.insertRow = function (mixed, rowNumber, insertBefore) { - // Configuration - if (obj.options.allowInsertRow == true) { - // Records - var records = []; - - // Data to be insert - var data = []; - - // The insert could be lead by number of rows or the array of data - if (mixed > 0) { - var numOfRows = mixed; - } else { - var numOfRows = 1; - - if (mixed) { - data = mixed; - } - } - - // Direction - var insertBefore = insertBefore ? true : false; - - // Current column number - var lastRow = obj.options.data.length - 1; - - if ( - rowNumber == undefined || - rowNumber >= parseInt(lastRow) || - rowNumber < 0 - ) { - rowNumber = lastRow; - } - - // Onbeforeinsertrow - if ( - obj.dispatch( - "onbeforeinsertrow", - el, - rowNumber, - numOfRows, - insertBefore - ) === false - ) { - return false; - } - - // Merged cells - if (Object.keys(obj.options.mergeCells).length > 0) { - if (obj.isRowMerged(rowNumber, insertBefore).length) { - if ( - !confirm( - obj.options.text - .thisActionWillDestroyAnyExistingMergedCellsAreYouSure - ) - ) { - return false; - } else { - obj.destroyMerged(); - } - } - } - - // Clear any search - if (obj.options.search == true) { - if (obj.results && obj.results.length != obj.rows.length) { - if ( - confirm( - obj.options.text.thisActionWillClearYourSearchResultsAreYouSure - ) - ) { - obj.resetSearch(); - } else { - return false; - } - } - - obj.results = null; - } - - // Insertbefore - var rowIndex = !insertBefore ? rowNumber + 1 : rowNumber; - - // Keep the current data - var currentRecords = obj.records.splice(rowIndex); - var currentData = obj.options.data.splice(rowIndex); - var currentRows = obj.rows.splice(rowIndex); - - // Adding lines - var rowRecords = []; - var rowData = []; - var rowNode = []; - - for (var row = rowIndex; row < numOfRows + rowIndex; row++) { - // Push data to the data container - obj.options.data[row] = []; - for (var col = 0; col < obj.options.columns.length; col++) { - obj.options.data[row][col] = data[col] ? data[col] : ""; - } - // Create row - var tr = obj.createRow(row, obj.options.data[row]); - // Append node - if (currentRows[0]) { - if ( - Array.prototype.indexOf.call( - obj.tbody.children, - currentRows[0] - ) >= 0 - ) { - obj.tbody.insertBefore(tr, currentRows[0]); - } - } else { - if ( - Array.prototype.indexOf.call( - obj.tbody.children, - obj.rows[rowNumber] - ) >= 0 - ) { - obj.tbody.appendChild(tr); - } - } - // Record History - rowRecords.push(obj.records[row]); - rowData.push(obj.options.data[row]); - rowNode.push(tr); - } - - // Copy the data back to the main data - Array.prototype.push.apply(obj.records, currentRecords); - Array.prototype.push.apply(obj.options.data, currentData); - Array.prototype.push.apply(obj.rows, currentRows); - - // Respect pagination - if (obj.options.pagination > 0) { - obj.page(obj.pageNumber); - } - - // Keep history - obj.setHistory({ - action: "insertRow", - rowNumber: rowNumber, - numOfRows: numOfRows, - insertBefore: insertBefore, - rowRecords: rowRecords, - rowData: rowData, - rowNode: rowNode, - }); - - // Remove table references - obj.updateTableReferences(); - - // Events - obj.dispatch( - "oninsertrow", - el, - rowNumber, - numOfRows, - rowRecords, - insertBefore - ); - } - }; - - /** - * Delete a row by number - * - * @param integer rowNumber - row number to be excluded - * @param integer numOfRows - number of lines - * @return void - */ - obj.deleteRow = function (rowNumber, numOfRows) { - // Global Configuration - if (obj.options.allowDeleteRow == true) { - if ( - obj.options.allowDeletingAllRows == true || - obj.options.data.length > 1 - ) { - // Delete row definitions - if (rowNumber == undefined) { - var number = obj.getSelectedRows(); - - if (!number[0]) { - rowNumber = obj.options.data.length - 1; - numOfRows = 1; - } else { - rowNumber = parseInt(number[0].getAttribute("data-y")); - numOfRows = number.length; - } - } - - // Last column - var lastRow = obj.options.data.length - 1; - - if (rowNumber == undefined || rowNumber > lastRow || rowNumber < 0) { - rowNumber = lastRow; - } - - if (!numOfRows) { - numOfRows = 1; - } - - // Do not delete more than the number of records - if (rowNumber + numOfRows >= obj.options.data.length) { - numOfRows = obj.options.data.length - rowNumber; - } - - // Onbeforedeleterow - if ( - obj.dispatch("onbeforedeleterow", el, rowNumber, numOfRows) === - false - ) { - return false; - } - - if (parseInt(rowNumber) > -1) { - // Merged cells - var mergeExists = false; - if (Object.keys(obj.options.mergeCells).length > 0) { - for (var row = rowNumber; row < rowNumber + numOfRows; row++) { - if (obj.isRowMerged(row, false).length) { - mergeExists = true; - } - } - } - if (mergeExists) { - if ( - !confirm( - obj.options.text - .thisActionWillDestroyAnyExistingMergedCellsAreYouSure - ) - ) { - return false; - } else { - obj.destroyMerged(); - } - } - - // Clear any search - if (obj.options.search == true) { - if (obj.results && obj.results.length != obj.rows.length) { - if ( - confirm( - obj.options.text - .thisActionWillClearYourSearchResultsAreYouSure - ) - ) { - obj.resetSearch(); - } else { - return false; - } - } - - obj.results = null; - } - - // If delete all rows, and set allowDeletingAllRows false, will stay one row - if ( - obj.options.allowDeletingAllRows == false && - lastRow + 1 === numOfRows - ) { - numOfRows--; - console.error( - "Jspreadsheet: It is not possible to delete the last row" - ); - } - - // Remove node - for (var row = rowNumber; row < rowNumber + numOfRows; row++) { - if ( - Array.prototype.indexOf.call( - obj.tbody.children, - obj.rows[row] - ) >= 0 - ) { - obj.rows[row].className = ""; - obj.rows[row].parentNode.removeChild(obj.rows[row]); - } - } - - // Remove data - var rowRecords = obj.records.splice(rowNumber, numOfRows); - var rowData = obj.options.data.splice(rowNumber, numOfRows); - var rowNode = obj.rows.splice(rowNumber, numOfRows); - - // Respect pagination - if ( - obj.options.pagination > 0 && - obj.tbody.children.length != obj.options.pagination - ) { - obj.page(obj.pageNumber); - } - - // Remove selection - obj.conditionalSelectionUpdate( - 1, - rowNumber, - rowNumber + numOfRows - 1 - ); - - // Keep history - obj.setHistory({ - action: "deleteRow", - rowNumber: rowNumber, - numOfRows: numOfRows, - insertBefore: 1, - rowRecords: rowRecords, - rowData: rowData, - rowNode: rowNode, - }); - - // Remove table references - obj.updateTableReferences(); - - // Events - obj.dispatch("ondeleterow", el, rowNumber, numOfRows, rowRecords); - } - } else { - console.error( - "Jspreadsheet: It is not possible to delete the last row" - ); - } - } - }; - - /** - * Move column - * - * @return void - */ - obj.moveColumn = function (o, d) { - if (Object.keys(obj.options.mergeCells).length > 0) { - if (o > d) { - var insertBefore = 1; - } else { - var insertBefore = 0; - } - - if ( - obj.isColMerged(o).length || - obj.isColMerged(d, insertBefore).length - ) { - if ( - !confirm( - obj.options.text - .thisActionWillDestroyAnyExistingMergedCellsAreYouSure - ) - ) { - return false; - } else { - obj.destroyMerged(); - } - } - } - - var o = parseInt(o); - var d = parseInt(d); - - if (o > d) { - obj.headerContainer.insertBefore(obj.headers[o], obj.headers[d]); - obj.colgroupContainer.insertBefore(obj.colgroup[o], obj.colgroup[d]); - - for (var j = 0; j < obj.rows.length; j++) { - obj.rows[j].insertBefore(obj.records[j][o], obj.records[j][d]); - } - } else { - obj.headerContainer.insertBefore( - obj.headers[o], - obj.headers[d].nextSibling - ); - obj.colgroupContainer.insertBefore( - obj.colgroup[o], - obj.colgroup[d].nextSibling - ); - - for (var j = 0; j < obj.rows.length; j++) { - obj.rows[j].insertBefore( - obj.records[j][o], - obj.records[j][d].nextSibling - ); - } - } - - obj.options.columns.splice(d, 0, obj.options.columns.splice(o, 1)[0]); - obj.headers.splice(d, 0, obj.headers.splice(o, 1)[0]); - obj.colgroup.splice(d, 0, obj.colgroup.splice(o, 1)[0]); - - for (var j = 0; j < obj.rows.length; j++) { - obj.options.data[j].splice(d, 0, obj.options.data[j].splice(o, 1)[0]); - obj.records[j].splice(d, 0, obj.records[j].splice(o, 1)[0]); - } - - // Update footers position - if (obj.options.footers) { - for (var j = 0; j < obj.options.footers.length; j++) { - obj.options.footers[j].splice( - d, - 0, - obj.options.footers[j].splice(o, 1)[0] - ); - } - } - - // Keeping history of changes - obj.setHistory({ - action: "moveColumn", - oldValue: o, - newValue: d, - }); - - // Update table references - obj.updateTableReferences(); - - // Events - obj.dispatch("onmovecolumn", el, o, d); - }; - - /** - * Insert a new column - * - * @param mixed - num of columns to be added or data to be added in one single column - * @param int columnNumber - number of columns to be created - * @param bool insertBefore - * @param object properties - column properties - * @return void - */ - obj.insertColumn = function ( - mixed, - columnNumber, - insertBefore, - properties - ) { - // Configuration - if (obj.options.allowInsertColumn == true) { - // Records - var records = []; - - // Data to be insert - var data = []; - - // The insert could be lead by number of rows or the array of data - if (mixed > 0) { - var numOfColumns = mixed; - } else { - var numOfColumns = 1; - - if (mixed) { - data = mixed; - } - } - - // Direction - var insertBefore = insertBefore ? true : false; - - // Current column number - var lastColumn = obj.options.columns.length - 1; - - // Confirm position - if ( - columnNumber == undefined || - columnNumber >= parseInt(lastColumn) || - columnNumber < 0 - ) { - columnNumber = lastColumn; - } - - // Onbeforeinsertcolumn - if ( - obj.dispatch( - "onbeforeinsertcolumn", - el, - columnNumber, - numOfColumns, - insertBefore - ) === false - ) { - return false; - } - - // Merged cells - if (Object.keys(obj.options.mergeCells).length > 0) { - if (obj.isColMerged(columnNumber, insertBefore).length) { - if ( - !confirm( - obj.options.text - .thisActionWillDestroyAnyExistingMergedCellsAreYouSure - ) - ) { - return false; - } else { - obj.destroyMerged(); - } - } - } - - // Create default properties - if (!properties) { - properties = []; - } - - for (var i = 0; i < numOfColumns; i++) { - if (!properties[i]) { - properties[i] = { - type: "text", - source: [], - options: [], - width: obj.options.defaultColWidth, - align: obj.options.defaultColAlign, - }; - } - } - - // Insert before - var columnIndex = !insertBefore ? columnNumber + 1 : columnNumber; - obj.options.columns = jexcel.injectArray( - obj.options.columns, - columnIndex, - properties - ); - - // Open space in the containers - var currentHeaders = obj.headers.splice(columnIndex); - var currentColgroup = obj.colgroup.splice(columnIndex); - - // History - var historyHeaders = []; - var historyColgroup = []; - var historyRecords = []; - var historyData = []; - var historyFooters = []; - - // Add new headers - for (var col = columnIndex; col < numOfColumns + columnIndex; col++) { - obj.createCellHeader(col); - obj.headerContainer.insertBefore( - obj.headers[col], - obj.headerContainer.children[col + 1] - ); - obj.colgroupContainer.insertBefore( - obj.colgroup[col], - obj.colgroupContainer.children[col + 1] - ); - - historyHeaders.push(obj.headers[col]); - historyColgroup.push(obj.colgroup[col]); - } - - // Add new footer cells - if (obj.options.footers) { - for (var j = 0; j < obj.options.footers.length; j++) { - historyFooters[j] = []; - for (var i = 0; i < numOfColumns; i++) { - historyFooters[j].push(""); - } - obj.options.footers[j].splice(columnIndex, 0, historyFooters[j]); - } - } - - // Adding visual columns - for (var row = 0; row < obj.options.data.length; row++) { - // Keep the current data - var currentData = obj.options.data[row].splice(columnIndex); - var currentRecord = obj.records[row].splice(columnIndex); - - // History - historyData[row] = []; - historyRecords[row] = []; - - for (var col = columnIndex; col < numOfColumns + columnIndex; col++) { - // New value - var value = data[row] ? data[row] : ""; - obj.options.data[row][col] = value; - // New cell - var td = obj.createCell(col, row, obj.options.data[row][col]); - obj.records[row][col] = td; - // Add cell to the row - if (obj.rows[row]) { - obj.rows[row].insertBefore(td, obj.rows[row].children[col + 1]); - } - - // Record History - historyData[row].push(value); - historyRecords[row].push(td); - } - - // Copy the data back to the main data - Array.prototype.push.apply(obj.options.data[row], currentData); - Array.prototype.push.apply(obj.records[row], currentRecord); - } - - Array.prototype.push.apply(obj.headers, currentHeaders); - Array.prototype.push.apply(obj.colgroup, currentColgroup); - - // Adjust nested headers - if (obj.options.nestedHeaders && obj.options.nestedHeaders.length > 0) { - // Flexible way to handle nestedheaders - if (obj.options.nestedHeaders[0] && obj.options.nestedHeaders[0][0]) { - for (var j = 0; j < obj.options.nestedHeaders.length; j++) { - var colspan = - parseInt( - obj.options.nestedHeaders[j][ - obj.options.nestedHeaders[j].length - 1 - ].colspan - ) + numOfColumns; - obj.options.nestedHeaders[j][ - obj.options.nestedHeaders[j].length - 1 - ].colspan = colspan; - obj.thead.children[j].children[ - obj.thead.children[j].children.length - 1 - ].setAttribute("colspan", colspan); - var o = - obj.thead.children[j].children[ - obj.thead.children[j].children.length - 1 - ].getAttribute("data-column"); - o = o.split(","); - for ( - var col = columnIndex; - col < numOfColumns + columnIndex; - col++ - ) { - o.push(col); - } - obj.thead.children[j].children[ - obj.thead.children[j].children.length - 1 - ].setAttribute("data-column", o); - } - } else { - var colspan = - parseInt(obj.options.nestedHeaders[0].colspan) + numOfColumns; - obj.options.nestedHeaders[0].colspan = colspan; - obj.thead.children[0].children[ - obj.thead.children[0].children.length - 1 - ].setAttribute("colspan", colspan); - } - } - - // Keep history - obj.setHistory({ - action: "insertColumn", - columnNumber: columnNumber, - numOfColumns: numOfColumns, - insertBefore: insertBefore, - columns: properties, - headers: historyHeaders, - colgroup: historyColgroup, - records: historyRecords, - footers: historyFooters, - data: historyData, - }); - - // Remove table references - obj.updateTableReferences(); - - // Events - obj.dispatch( - "oninsertcolumn", - el, - columnNumber, - numOfColumns, - historyRecords, - insertBefore - ); - } - }; - - /** - * Delete a column by number - * - * @param integer columnNumber - reference column to be excluded - * @param integer numOfColumns - number of columns to be excluded from the reference column - * @return void - */ - obj.deleteColumn = function (columnNumber, numOfColumns) { - // Global Configuration - if (obj.options.allowDeleteColumn == true) { - if (obj.headers.length > 1) { - // Delete column definitions - if (columnNumber == undefined) { - var number = obj.getSelectedColumns(true); - - if (!number.length) { - // Remove last column - columnNumber = obj.headers.length - 1; - numOfColumns = 1; - } else { - // Remove selected - columnNumber = parseInt(number[0]); - numOfColumns = parseInt(number.length); - } - } - - // Lasat column - var lastColumn = obj.options.data[0].length - 1; - - if ( - columnNumber == undefined || - columnNumber > lastColumn || - columnNumber < 0 - ) { - columnNumber = lastColumn; - } - - // Minimum of columns to be delete is 1 - if (!numOfColumns) { - numOfColumns = 1; - } - - // Can't delete more than the limit of the table - if (numOfColumns > obj.options.data[0].length - columnNumber) { - numOfColumns = obj.options.data[0].length - columnNumber; - } - - // onbeforedeletecolumn - if ( - obj.dispatch( - "onbeforedeletecolumn", - el, - columnNumber, - numOfColumns - ) === false - ) { - return false; - } - - // Can't remove the last column - if (parseInt(columnNumber) > -1) { - // Merged cells - var mergeExists = false; - if (Object.keys(obj.options.mergeCells).length > 0) { - for ( - var col = columnNumber; - col < columnNumber + numOfColumns; - col++ - ) { - if (obj.isColMerged(col, false).length) { - mergeExists = true; - } - } - } - if (mergeExists) { - if ( - !confirm( - obj.options.text - .thisActionWillDestroyAnyExistingMergedCellsAreYouSure - ) - ) { - return false; - } else { - obj.destroyMerged(); - } - } - - // Delete the column properties - var columns = obj.options.columns.splice( - columnNumber, - numOfColumns - ); - - for ( - var col = columnNumber; - col < columnNumber + numOfColumns; - col++ - ) { - obj.colgroup[col].className = ""; - obj.headers[col].className = ""; - obj.colgroup[col].parentNode.removeChild(obj.colgroup[col]); - obj.headers[col].parentNode.removeChild(obj.headers[col]); - } - - var historyHeaders = obj.headers.splice(columnNumber, numOfColumns); - var historyColgroup = obj.colgroup.splice( - columnNumber, - numOfColumns - ); - var historyRecords = []; - var historyData = []; - var historyFooters = []; - - for (var row = 0; row < obj.options.data.length; row++) { - for ( - var col = columnNumber; - col < columnNumber + numOfColumns; - col++ - ) { - obj.records[row][col].className = ""; - obj.records[row][col].parentNode.removeChild( - obj.records[row][col] - ); - } - } - - // Delete headers - for (var row = 0; row < obj.options.data.length; row++) { - // History - historyData[row] = obj.options.data[row].splice( - columnNumber, - numOfColumns - ); - historyRecords[row] = obj.records[row].splice( - columnNumber, - numOfColumns - ); - } - - // Delete footers - if (obj.options.footers) { - for (var row = 0; row < obj.options.footers.length; row++) { - historyFooters[row] = obj.options.footers[row].splice( - columnNumber, - numOfColumns - ); - } - } - - // Remove selection - obj.conditionalSelectionUpdate( - 0, - columnNumber, - columnNumber + numOfColumns - 1 - ); - - // Adjust nested headers - if ( - obj.options.nestedHeaders && - obj.options.nestedHeaders.length > 0 - ) { - // Flexible way to handle nestedheaders - if ( - obj.options.nestedHeaders[0] && - obj.options.nestedHeaders[0][0] - ) { - for (var j = 0; j < obj.options.nestedHeaders.length; j++) { - var colspan = - parseInt( - obj.options.nestedHeaders[j][ - obj.options.nestedHeaders[j].length - 1 - ].colspan - ) - numOfColumns; - obj.options.nestedHeaders[j][ - obj.options.nestedHeaders[j].length - 1 - ].colspan = colspan; - obj.thead.children[j].children[ - obj.thead.children[j].children.length - 1 - ].setAttribute("colspan", colspan); - } - } else { - var colspan = - parseInt(obj.options.nestedHeaders[0].colspan) - numOfColumns; - obj.options.nestedHeaders[0].colspan = colspan; - obj.thead.children[0].children[ - obj.thead.children[0].children.length - 1 - ].setAttribute("colspan", colspan); - } - } - - // Keeping history of changes - obj.setHistory({ - action: "deleteColumn", - columnNumber: columnNumber, - numOfColumns: numOfColumns, - insertBefore: 1, - columns: columns, - headers: historyHeaders, - colgroup: historyColgroup, - records: historyRecords, - footers: historyFooters, - data: historyData, - }); - - // Update table references - obj.updateTableReferences(); - - // Delete - obj.dispatch( - "ondeletecolumn", - el, - columnNumber, - numOfColumns, - historyRecords - ); - } - } else { - console.error( - "Jspreadsheet: It is not possible to delete the last column" - ); - } - } - }; - - /** - * Get selected rows numbers - * - * @return array - */ - (obj.getSelectedRows = function (asIds) { - var rows = []; - // Get all selected rows - for (var j = 0; j < obj.rows.length; j++) { - if (obj.rows[j].classList.contains("selected")) { - if (asIds) { - rows.push(j); - } else { - rows.push(obj.rows[j]); - } - } - } - - return rows; - }), - /** - * Get selected column numbers - * - * @return array - */ - (obj.getSelectedColumns = function () { - var cols = []; - // Get all selected cols - for (var i = 0; i < obj.headers.length; i++) { - if (obj.headers[i].classList.contains("selected")) { - cols.push(i); - } - } - - return cols; - }); - - /** - * Get highlighted - * - * @return array - */ - obj.getHighlighted = function () { - return obj.highlighted; - }; - - /** - * Update cell references - * - * @return void - */ - obj.updateTableReferences = function () { - // Update headers - for (var i = 0; i < obj.headers.length; i++) { - var x = obj.headers[i].getAttribute("data-x"); - - if (x != i) { - // Update coords - obj.headers[i].setAttribute("data-x", i); - // Title - if (!obj.headers[i].getAttribute("title")) { - obj.headers[i].innerHTML = jexcel.getColumnName(i); - } - } - } - - // Update all rows - for (var j = 0; j < obj.rows.length; j++) { - if (obj.rows[j]) { - var y = obj.rows[j].getAttribute("data-y"); - - if (y != j) { - // Update coords - obj.rows[j].setAttribute("data-y", j); - obj.rows[j].children[0].setAttribute("data-y", j); - // Row number - obj.rows[j].children[0].innerHTML = j + 1; - } - } - } - - // Regular cells affected by this change - var affectedTokens = []; - var mergeCellUpdates = []; - - // Update cell - var updatePosition = function (x, y, i, j) { - if (x != i) { - obj.records[j][i].setAttribute("data-x", i); - } - if (y != j) { - obj.records[j][i].setAttribute("data-y", j); - } - - // Other updates - if (x != i || y != j) { - var columnIdFrom = jexcel.getColumnNameFromId([x, y]); - var columnIdTo = jexcel.getColumnNameFromId([i, j]); - affectedTokens[columnIdFrom] = columnIdTo; - } - }; - - for (var j = 0; j < obj.records.length; j++) { - for (var i = 0; i < obj.records[0].length; i++) { - if (obj.records[j][i]) { - // Current values - var x = obj.records[j][i].getAttribute("data-x"); - var y = obj.records[j][i].getAttribute("data-y"); - - // Update column - if (obj.records[j][i].getAttribute("data-merged")) { - var columnIdFrom = jexcel.getColumnNameFromId([x, y]); - var columnIdTo = jexcel.getColumnNameFromId([i, j]); - if (mergeCellUpdates[columnIdFrom] == null) { - if (columnIdFrom == columnIdTo) { - mergeCellUpdates[columnIdFrom] = false; - } else { - var totalX = parseInt(i - x); - var totalY = parseInt(j - y); - mergeCellUpdates[columnIdFrom] = [columnIdTo, totalX, totalY]; - } - } - } else { - updatePosition(x, y, i, j); - } - } - } - } - - // Update merged if applicable - var keys = Object.keys(mergeCellUpdates); - if (keys.length) { - for (var i = 0; i < keys.length; i++) { - if (mergeCellUpdates[keys[i]]) { - var info = jexcel.getIdFromColumnName(keys[i], true); - var x = info[0]; - var y = info[1]; - updatePosition( - x, - y, - x + mergeCellUpdates[keys[i]][1], - y + mergeCellUpdates[keys[i]][2] - ); - - var columnIdFrom = keys[i]; - var columnIdTo = mergeCellUpdates[keys[i]][0]; - for ( - var j = 0; - j < obj.options.mergeCells[columnIdFrom][2].length; - j++ - ) { - var x = parseInt( - obj.options.mergeCells[columnIdFrom][2][j].getAttribute( - "data-x" - ) - ); - var y = parseInt( - obj.options.mergeCells[columnIdFrom][2][j].getAttribute( - "data-y" - ) - ); - obj.options.mergeCells[columnIdFrom][2][j].setAttribute( - "data-x", - x + mergeCellUpdates[keys[i]][1] - ); - obj.options.mergeCells[columnIdFrom][2][j].setAttribute( - "data-y", - y + mergeCellUpdates[keys[i]][2] - ); - } - - obj.options.mergeCells[columnIdTo] = - obj.options.mergeCells[columnIdFrom]; - delete obj.options.mergeCells[columnIdFrom]; - } - } - } - - // Update formulas - obj.updateFormulas(affectedTokens); - - // Update meta data - obj.updateMeta(affectedTokens); - - // Refresh selection - obj.refreshSelection(); - - // Update table with custom configuration if applicable - obj.updateTable(); - }; - - /** - * Custom settings for the cells - */ - obj.updateTable = function () { - // Check for spare - if (obj.options.minSpareRows > 0) { - var numBlankRows = 0; - for (var j = obj.rows.length - 1; j >= 0; j--) { - var test = false; - for (var i = 0; i < obj.headers.length; i++) { - if (obj.options.data[j][i]) { - test = true; - } - } - if (test) { - break; - } else { - numBlankRows++; - } - } - - if (obj.options.minSpareRows - numBlankRows > 0) { - obj.insertRow(obj.options.minSpareRows - numBlankRows); - } - } - - if (obj.options.minSpareCols > 0) { - var numBlankCols = 0; - for (var i = obj.headers.length - 1; i >= 0; i--) { - var test = false; - for (var j = 0; j < obj.rows.length; j++) { - if (obj.options.data[j][i]) { - test = true; - } - } - if (test) { - break; - } else { - numBlankCols++; - } - } - - if (obj.options.minSpareCols - numBlankCols > 0) { - obj.insertColumn(obj.options.minSpareCols - numBlankCols); - } - } - - // Customizations by the developer - if (typeof obj.options.updateTable == "function") { - if (obj.options.detachForUpdates) { - el.removeChild(obj.content); - } - - for (var j = 0; j < obj.rows.length; j++) { - for (var i = 0; i < obj.headers.length; i++) { - obj.options.updateTable( - el, - obj.records[j][i], - i, - j, - obj.options.data[j][i], - obj.records[j][i].textContent, - jexcel.getColumnNameFromId([i, j]) - ); - } - } - - if (obj.options.detachForUpdates) { - el.insertBefore(obj.content, obj.pagination); - } - } - - // Update footers - if (obj.options.footers) { - obj.setFooter(); - } - - // Update corner position - setTimeout(function () { - obj.updateCornerPosition(); - }, 0); - }; - - /** - * Readonly - */ - obj.isReadOnly = function (cell) { - if ((cell = obj.getCell(cell))) { - return cell.classList.contains("readonly") ? true : false; - } - }; - - /** - * Readonly - */ - obj.setReadOnly = function (cell, state) { - if ((cell = obj.getCell(cell))) { - if (state) { - cell.classList.add("readonly"); - } else { - cell.classList.remove("readonly"); - } - } - }; - - /** - * Show row - */ - obj.showRow = function (rowNumber) { - obj.rows[rowNumber].style.display = ""; - }; - - /** - * Hide row - */ - obj.hideRow = function (rowNumber) { - obj.rows[rowNumber].style.display = "none"; - }; - - /** - * Show column - */ - obj.showColumn = function (colNumber) { - obj.headers[colNumber].style.display = ""; - obj.colgroup[colNumber].style.display = ""; - if (obj.filter && obj.filter.children.length > colNumber + 1) { - obj.filter.children[colNumber + 1].style.display = ""; - } - for (var j = 0; j < obj.options.data.length; j++) { - obj.records[j][colNumber].style.display = ""; - } - - // Update footers - if (obj.options.footers) { - obj.setFooter(); - } - - obj.resetSelection(); - }; - - /** - * Hide column - */ - obj.hideColumn = function (colNumber) { - obj.headers[colNumber].style.display = "none"; - obj.colgroup[colNumber].style.display = "none"; - if (obj.filter && obj.filter.children.length > colNumber + 1) { - obj.filter.children[colNumber + 1].style.display = "none"; - } - for (var j = 0; j < obj.options.data.length; j++) { - obj.records[j][colNumber].style.display = "none"; - } - - // Update footers - if (obj.options.footers) { - obj.setFooter(); - } - - obj.resetSelection(); - }; - - /** - * Show index column - */ - obj.showIndex = function () { - obj.table.classList.remove("jexcel_hidden_index"); - }; - - /** - * Hide index column - */ - obj.hideIndex = function () { - obj.table.classList.add("jexcel_hidden_index"); - }; - - /** - * Update all related cells in the chain - */ - var chainLoopProtection = []; - - obj.updateFormulaChain = function (x, y, records) { - var cellId = jexcel.getColumnNameFromId([x, y]); - if (obj.formula[cellId] && obj.formula[cellId].length > 0) { - if (chainLoopProtection[cellId]) { - obj.records[y][x].innerHTML = "#ERROR"; - obj.formula[cellId] = ""; - } else { - // Protection - chainLoopProtection[cellId] = true; - - for (var i = 0; i < obj.formula[cellId].length; i++) { - var cell = jexcel.getIdFromColumnName(obj.formula[cellId][i], true); - // Update cell - var value = "" + obj.options.data[cell[1]][cell[0]]; - if (value.substr(0, 1) == "=") { - records.push(obj.updateCell(cell[0], cell[1], value, true)); - } else { - // No longer a formula, remove from the chain - Object.keys(obj.formula)[i] = null; - } - obj.updateFormulaChain(cell[0], cell[1], records); - } - } - } - - chainLoopProtection = []; - }; - - /** - * Update formulas - */ - obj.updateFormulas = function (referencesToUpdate) { - // Update formulas - for (var j = 0; j < obj.options.data.length; j++) { - for (var i = 0; i < obj.options.data[0].length; i++) { - var value = "" + obj.options.data[j][i]; - // Is formula - if (value.substr(0, 1) == "=") { - // Replace tokens - var newFormula = obj.updateFormula(value, referencesToUpdate); - if (newFormula != value) { - obj.options.data[j][i] = newFormula; - } - } - } - } - - // Update formula chain - var formula = []; - var keys = Object.keys(obj.formula); - for (var j = 0; j < keys.length; j++) { - // Current key and values - var key = keys[j]; - var value = obj.formula[key]; - // Update key - if (referencesToUpdate[key]) { - key = referencesToUpdate[key]; - } - // Update values - formula[key] = []; - for (var i = 0; i < value.length; i++) { - var letter = value[i]; - if (referencesToUpdate[letter]) { - letter = referencesToUpdate[letter]; - } - formula[key].push(letter); - } - } - obj.formula = formula; - }; - - /** - * Update formula - */ - obj.updateFormula = function (formula, referencesToUpdate) { - var testLetter = /[A-Z]/; - var testNumber = /[0-9]/; - - var newFormula = ""; - var letter = null; - var number = null; - var token = ""; - - for (var index = 0; index < formula.length; index++) { - if (testLetter.exec(formula[index])) { - letter = 1; - number = 0; - token += formula[index]; - } else if (testNumber.exec(formula[index])) { - number = letter ? 1 : 0; - token += formula[index]; - } else { - if (letter && number) { - token = referencesToUpdate[token] - ? referencesToUpdate[token] - : token; - } - newFormula += token; - newFormula += formula[index]; - letter = 0; - number = 0; - token = ""; - } - } - - if (token) { - if (letter && number) { - token = referencesToUpdate[token] ? referencesToUpdate[token] : token; - } - newFormula += token; - } - - return newFormula; - }; - - /** - * Secure formula - */ - var secureFormula = function (oldValue) { - var newValue = ""; - var inside = 0; - - for (var i = 0; i < oldValue.length; i++) { - if (oldValue[i] == '"') { - if (inside == 0) { - inside = 1; - } else { - inside = 0; - } - } - - if (inside == 1) { - newValue += oldValue[i]; - } else { - newValue += oldValue[i].toUpperCase(); - } - } - - return newValue; - }; - - /** - * Parse formulas - */ - obj.executeFormula = function (expression, x, y) { - var formulaResults = []; - var formulaLoopProtection = []; - - // Execute formula with loop protection - var execute = function (expression, x, y) { - // Parent column identification - var parentId = jexcel.getColumnNameFromId([x, y]); - - // Code protection - if (formulaLoopProtection[parentId]) { - console.error("Reference loop detected"); - return "#ERROR"; - } - - formulaLoopProtection[parentId] = true; - - // Convert range tokens - var tokensUpdate = function (tokens) { - for (var index = 0; index < tokens.length; index++) { - var f = []; - var token = tokens[index].split(":"); - var e1 = jexcel.getIdFromColumnName(token[0], true); - var e2 = jexcel.getIdFromColumnName(token[1], true); - - if (e1[0] <= e2[0]) { - var x1 = e1[0]; - var x2 = e2[0]; - } else { - var x1 = e2[0]; - var x2 = e1[0]; - } - - if (e1[1] <= e2[1]) { - var y1 = e1[1]; - var y2 = e2[1]; - } else { - var y1 = e2[1]; - var y2 = e1[1]; - } - - for (var j = y1; j <= y2; j++) { - for (var i = x1; i <= x2; i++) { - f.push(jexcel.getColumnNameFromId([i, j])); - } - } - - expression = expression.replace(tokens[index], f.join(",")); - } - }; - - // Range with $ remove $ - expression = expression.replace(/\$?([A-Z]+)\$?([0-9]+)/g, "$1$2"); - - var tokens = expression.match(/([A-Z]+[0-9]+)\:([A-Z]+[0-9]+)/g); - if (tokens && tokens.length) { - tokensUpdate(tokens); - } - - // Get tokens - var tokens = expression.match(/([A-Z]+[0-9]+)/g); - - // Direct self-reference protection - if (tokens && tokens.indexOf(parentId) > -1) { - console.error("Self Reference detected"); - return "#ERROR"; - } else { - // Expressions to be used in the parsing - var formulaExpressions = {}; - - if (tokens) { - for (var i = 0; i < tokens.length; i++) { - // Keep chain - if (!obj.formula[tokens[i]]) { - obj.formula[tokens[i]] = []; - } - // Is already in the register - if (obj.formula[tokens[i]].indexOf(parentId) < 0) { - obj.formula[tokens[i]].push(parentId); - } - - // Do not calculate again - if (eval("typeof(" + tokens[i] + ') == "undefined"')) { - // Coords - var position = jexcel.getIdFromColumnName(tokens[i], 1); - // Get value - if ( - typeof obj.options.data[position[1]] != "undefined" && - typeof obj.options.data[position[1]][position[0]] != - "undefined" - ) { - var value = obj.options.data[position[1]][position[0]]; - } else { - var value = ""; - } - // Get column data - if (("" + value).substr(0, 1) == "=") { - if (formulaResults[tokens[i]]) { - value = formulaResults[tokens[i]]; - } else { - value = execute(value, position[0], position[1]); - formulaResults[tokens[i]] = value; - } - } - // Type! - if (("" + value).trim() == "") { - // Null - formulaExpressions[tokens[i]] = null; - } else { - if ( - value == Number(value) && - obj.options.autoCasting == true - ) { - // Number - formulaExpressions[tokens[i]] = Number(value); - } else { - // Trying any formatted number - var number = obj.parseNumber(value, position[0]); - if (obj.options.autoCasting == true && number) { - formulaExpressions[tokens[i]] = number; - } else { - formulaExpressions[tokens[i]] = '"' + value + '"'; - } - } - } - } - } - } - - // Convert formula to javascript - try { - var res = jexcel.formula( - expression.substr(1), - formulaExpressions, - x, - y, - obj - ); - } catch (e) { - var res = "#ERROR"; - console.log(e); - } - - return res; - } - }; - - return execute(expression, x, y); - }; - - /** - * Trying to extract a number from a string - */ - obj.parseNumber = function (value, columnNumber) { - // Decimal point - var decimal = - columnNumber && obj.options.columns[columnNumber].decimal - ? obj.options.columns[columnNumber].decimal - : "."; - - // Parse both parts of the number - var number = "" + value; - number = number.split(decimal); - number[0] = number[0].match(/[+-]?[0-9]/g); - if (number[0]) { - number[0] = number[0].join(""); - } - if (number[1]) { - number[1] = number[1].match(/[0-9]*/g).join(""); - } - - // Is a valid number - if (number[0] && Number.isInteger(Number(number[0]))) { - if (!number[1]) { - var value = Number(number[0] + ".00"); - } else { - var value = Number(number[0] + "." + number[1]); - } - } else { - var value = null; - } - - return value; - }; - - /** - * Get row number - */ - obj.row = function (cell) {}; - - /** - * Get col number - */ - obj.col = function (cell) {}; - - obj.up = function (shiftKey, ctrlKey) { - if (shiftKey) { - if (obj.selectedCell[3] > 0) { - obj.up.visible(1, ctrlKey ? 0 : 1); - } - } else { - if (obj.selectedCell[1] > 0) { - obj.up.visible(0, ctrlKey ? 0 : 1); - } - obj.selectedCell[2] = obj.selectedCell[0]; - obj.selectedCell[3] = obj.selectedCell[1]; - } - - // Update selection - obj.updateSelectionFromCoords( - obj.selectedCell[0], - obj.selectedCell[1], - obj.selectedCell[2], - obj.selectedCell[3] - ); - - // Change page - if (obj.options.lazyLoading == true) { - if (obj.selectedCell[1] == 0 || obj.selectedCell[3] == 0) { - obj.loadPage(0); - obj.updateSelectionFromCoords( - obj.selectedCell[0], - obj.selectedCell[1], - obj.selectedCell[2], - obj.selectedCell[3] - ); - } else { - if (obj.loadValidation()) { - obj.updateSelectionFromCoords( - obj.selectedCell[0], - obj.selectedCell[1], - obj.selectedCell[2], - obj.selectedCell[3] - ); - } else { - var item = parseInt(obj.tbody.firstChild.getAttribute("data-y")); - if (obj.selectedCell[1] - item < 30) { - obj.loadUp(); - obj.updateSelectionFromCoords( - obj.selectedCell[0], - obj.selectedCell[1], - obj.selectedCell[2], - obj.selectedCell[3] - ); - } - } - } - } else if (obj.options.pagination > 0) { - var pageNumber = obj.whichPage(obj.selectedCell[3]); - if (pageNumber != obj.pageNumber) { - obj.page(pageNumber); - } - } - - obj.updateScroll(1); - }; - - obj.up.visible = function (group, direction) { - if (group == 0) { - var x = parseInt(obj.selectedCell[0]); - var y = parseInt(obj.selectedCell[1]); - } else { - var x = parseInt(obj.selectedCell[2]); - var y = parseInt(obj.selectedCell[3]); - } - - if (direction == 0) { - for (var j = 0; j < y; j++) { - if ( - obj.records[j][x].style.display != "none" && - obj.rows[j].style.display != "none" - ) { - y = j; - break; - } - } - } else { - y = obj.up.get(x, y); - } - - if (group == 0) { - obj.selectedCell[0] = x; - obj.selectedCell[1] = y; - } else { - obj.selectedCell[2] = x; - obj.selectedCell[3] = y; - } - }; - - obj.up.get = function (x, y) { - var x = parseInt(x); - var y = parseInt(y); - for (var j = y - 1; j >= 0; j--) { - if ( - obj.records[j][x].style.display != "none" && - obj.rows[j].style.display != "none" - ) { - if (obj.records[j][x].getAttribute("data-merged")) { - if (obj.records[j][x] == obj.records[y][x]) { - continue; - } - } - y = j; - break; - } - } - - return y; - }; - - obj.down = function (shiftKey, ctrlKey) { - if (shiftKey) { - if (obj.selectedCell[3] < obj.records.length - 1) { - obj.down.visible(1, ctrlKey ? 0 : 1); - } - } else { - if (obj.selectedCell[1] < obj.records.length - 1) { - obj.down.visible(0, ctrlKey ? 0 : 1); - } - obj.selectedCell[2] = obj.selectedCell[0]; - obj.selectedCell[3] = obj.selectedCell[1]; - } - - obj.updateSelectionFromCoords( - obj.selectedCell[0], - obj.selectedCell[1], - obj.selectedCell[2], - obj.selectedCell[3] - ); - - // Change page - if (obj.options.lazyLoading == true) { - if ( - obj.selectedCell[1] == obj.records.length - 1 || - obj.selectedCell[3] == obj.records.length - 1 - ) { - obj.loadPage(-1); - obj.updateSelectionFromCoords( - obj.selectedCell[0], - obj.selectedCell[1], - obj.selectedCell[2], - obj.selectedCell[3] - ); - } else { - if (obj.loadValidation()) { - obj.updateSelectionFromCoords( - obj.selectedCell[0], - obj.selectedCell[1], - obj.selectedCell[2], - obj.selectedCell[3] - ); - } else { - var item = parseInt(obj.tbody.lastChild.getAttribute("data-y")); - if (item - obj.selectedCell[3] < 30) { - obj.loadDown(); - obj.updateSelectionFromCoords( - obj.selectedCell[0], - obj.selectedCell[1], - obj.selectedCell[2], - obj.selectedCell[3] - ); - } - } - } - } else if (obj.options.pagination > 0) { - var pageNumber = obj.whichPage(obj.selectedCell[3]); - if (pageNumber != obj.pageNumber) { - obj.page(pageNumber); - } - } - - obj.updateScroll(3); - }; - - obj.down.visible = function (group, direction) { - if (group == 0) { - var x = parseInt(obj.selectedCell[0]); - var y = parseInt(obj.selectedCell[1]); - } else { - var x = parseInt(obj.selectedCell[2]); - var y = parseInt(obj.selectedCell[3]); - } - - if (direction == 0) { - for (var j = obj.rows.length - 1; j > y; j--) { - if ( - obj.records[j][x].style.display != "none" && - obj.rows[j].style.display != "none" - ) { - y = j; - break; - } - } - } else { - y = obj.down.get(x, y); - } - - if (group == 0) { - obj.selectedCell[0] = x; - obj.selectedCell[1] = y; - } else { - obj.selectedCell[2] = x; - obj.selectedCell[3] = y; - } - }; - - obj.down.get = function (x, y) { - var x = parseInt(x); - var y = parseInt(y); - for (var j = y + 1; j < obj.rows.length; j++) { - if ( - obj.records[j][x].style.display != "none" && - obj.rows[j].style.display != "none" - ) { - if (obj.records[j][x].getAttribute("data-merged")) { - if (obj.records[j][x] == obj.records[y][x]) { - continue; - } - } - y = j; - break; - } - } - - return y; - }; - - obj.right = function (shiftKey, ctrlKey) { - if (shiftKey) { - if (obj.selectedCell[2] < obj.headers.length - 1) { - obj.right.visible(1, ctrlKey ? 0 : 1); - } - } else { - if (obj.selectedCell[0] < obj.headers.length - 1) { - obj.right.visible(0, ctrlKey ? 0 : 1); - } - obj.selectedCell[2] = obj.selectedCell[0]; - obj.selectedCell[3] = obj.selectedCell[1]; - } - - obj.updateSelectionFromCoords( - obj.selectedCell[0], - obj.selectedCell[1], - obj.selectedCell[2], - obj.selectedCell[3] - ); - obj.updateScroll(2); - }; - - obj.right.visible = function (group, direction) { - if (group == 0) { - var x = parseInt(obj.selectedCell[0]); - var y = parseInt(obj.selectedCell[1]); - } else { - var x = parseInt(obj.selectedCell[2]); - var y = parseInt(obj.selectedCell[3]); - } - - if (direction == 0) { - for (var i = obj.headers.length - 1; i > x; i--) { - if (obj.records[y][i].style.display != "none") { - x = i; - break; - } - } - } else { - x = obj.right.get(x, y); - } - - if (group == 0) { - obj.selectedCell[0] = x; - obj.selectedCell[1] = y; - } else { - obj.selectedCell[2] = x; - obj.selectedCell[3] = y; - } - }; - - obj.right.get = function (x, y) { - var x = parseInt(x); - var y = parseInt(y); - - for (var i = x + 1; i < obj.headers.length; i++) { - if (obj.records[y][i].style.display != "none") { - if (obj.records[y][i].getAttribute("data-merged")) { - if (obj.records[y][i] == obj.records[y][x]) { - continue; - } - } - x = i; - break; - } - } - - return x; - }; - - obj.left = function (shiftKey, ctrlKey) { - if (shiftKey) { - if (obj.selectedCell[2] > 0) { - obj.left.visible(1, ctrlKey ? 0 : 1); - } - } else { - if (obj.selectedCell[0] > 0) { - obj.left.visible(0, ctrlKey ? 0 : 1); - } - obj.selectedCell[2] = obj.selectedCell[0]; - obj.selectedCell[3] = obj.selectedCell[1]; - } - - obj.updateSelectionFromCoords( - obj.selectedCell[0], - obj.selectedCell[1], - obj.selectedCell[2], - obj.selectedCell[3] - ); - obj.updateScroll(0); - }; - - obj.left.visible = function (group, direction) { - if (group == 0) { - var x = parseInt(obj.selectedCell[0]); - var y = parseInt(obj.selectedCell[1]); - } else { - var x = parseInt(obj.selectedCell[2]); - var y = parseInt(obj.selectedCell[3]); - } - - if (direction == 0) { - for (var i = 0; i < x; i++) { - if (obj.records[y][i].style.display != "none") { - x = i; - break; - } - } - } else { - x = obj.left.get(x, y); - } - - if (group == 0) { - obj.selectedCell[0] = x; - obj.selectedCell[1] = y; - } else { - obj.selectedCell[2] = x; - obj.selectedCell[3] = y; - } - }; - - obj.left.get = function (x, y) { - var x = parseInt(x); - var y = parseInt(y); - for (var i = x - 1; i >= 0; i--) { - if (obj.records[y][i].style.display != "none") { - if (obj.records[y][i].getAttribute("data-merged")) { - if (obj.records[y][i] == obj.records[y][x]) { - continue; - } - } - x = i; - break; - } - } - - return x; - }; - - obj.first = function (shiftKey, ctrlKey) { - if (shiftKey) { - if (ctrlKey) { - obj.selectedCell[3] = 0; - } else { - obj.left.visible(1, 0); - } - } else { - if (ctrlKey) { - obj.selectedCell[1] = 0; - } else { - obj.left.visible(0, 0); - } - obj.selectedCell[2] = obj.selectedCell[0]; - obj.selectedCell[3] = obj.selectedCell[1]; - } - - // Change page - if ( - obj.options.lazyLoading == true && - (obj.selectedCell[1] == 0 || obj.selectedCell[3] == 0) - ) { - obj.loadPage(0); - } else if (obj.options.pagination > 0) { - var pageNumber = obj.whichPage(obj.selectedCell[3]); - if (pageNumber != obj.pageNumber) { - obj.page(pageNumber); - } - } - - obj.updateSelectionFromCoords( - obj.selectedCell[0], - obj.selectedCell[1], - obj.selectedCell[2], - obj.selectedCell[3] - ); - obj.updateScroll(1); - }; - - obj.last = function (shiftKey, ctrlKey) { - if (shiftKey) { - if (ctrlKey) { - obj.selectedCell[3] = obj.records.length - 1; - } else { - obj.right.visible(1, 0); - } - } else { - if (ctrlKey) { - obj.selectedCell[1] = obj.records.length - 1; - } else { - obj.right.visible(0, 0); - } - obj.selectedCell[2] = obj.selectedCell[0]; - obj.selectedCell[3] = obj.selectedCell[1]; - } - - // Change page - if ( - obj.options.lazyLoading == true && - (obj.selectedCell[1] == obj.records.length - 1 || - obj.selectedCell[3] == obj.records.length - 1) - ) { - obj.loadPage(-1); - } else if (obj.options.pagination > 0) { - var pageNumber = obj.whichPage(obj.selectedCell[3]); - if (pageNumber != obj.pageNumber) { - obj.page(pageNumber); - } - } - - obj.updateSelectionFromCoords( - obj.selectedCell[0], - obj.selectedCell[1], - obj.selectedCell[2], - obj.selectedCell[3] - ); - obj.updateScroll(3); - }; - - obj.selectAll = function () { - if (!obj.selectedCell) { - obj.selectedCell = []; - } - - obj.selectedCell[0] = 0; - obj.selectedCell[1] = 0; - obj.selectedCell[2] = obj.headers.length - 1; - obj.selectedCell[3] = obj.records.length - 1; - - obj.updateSelectionFromCoords( - obj.selectedCell[0], - obj.selectedCell[1], - obj.selectedCell[2], - obj.selectedCell[3] - ); - }; - - /** - * Go to a page in a lazyLoading - */ - obj.loadPage = function (pageNumber) { - // Search - if ( - (obj.options.search == true || obj.options.filters == true) && - obj.results - ) { - var results = obj.results; - } else { - var results = obj.rows; - } - - // Per page - var quantityPerPage = 100; - - // pageNumber - if (pageNumber == null || pageNumber == -1) { - // Last page - pageNumber = Math.ceil(results.length / quantityPerPage) - 1; - } - - var startRow = pageNumber * quantityPerPage; - var finalRow = pageNumber * quantityPerPage + quantityPerPage; - if (finalRow > results.length) { - finalRow = results.length; - } - startRow = finalRow - 100; - if (startRow < 0) { - startRow = 0; - } - - // Appeding items - for (var j = startRow; j < finalRow; j++) { - if ( - (obj.options.search == true || obj.options.filters == true) && - obj.results - ) { - obj.tbody.appendChild(obj.rows[results[j]]); - } else { - obj.tbody.appendChild(obj.rows[j]); - } - - if (obj.tbody.children.length > quantityPerPage) { - obj.tbody.removeChild(obj.tbody.firstChild); - } - } - }; - - obj.loadUp = function () { - // Search - if ( - (obj.options.search == true || obj.options.filters == true) && - obj.results - ) { - var results = obj.results; - } else { - var results = obj.rows; - } - var test = 0; - if (results.length > 100) { - // Get the first element in the page - var item = parseInt(obj.tbody.firstChild.getAttribute("data-y")); - if ( - (obj.options.search == true || obj.options.filters == true) && - obj.results - ) { - item = results.indexOf(item); - } - if (item > 0) { - for (var j = 0; j < 30; j++) { - item = item - 1; - if (item > -1) { - if ( - (obj.options.search == true || obj.options.filters == true) && - obj.results - ) { - obj.tbody.insertBefore( - obj.rows[results[item]], - obj.tbody.firstChild - ); - } else { - obj.tbody.insertBefore(obj.rows[item], obj.tbody.firstChild); - } - if (obj.tbody.children.length > 100) { - obj.tbody.removeChild(obj.tbody.lastChild); - test = 1; - } - } - } - } - } - return test; - }; - - obj.loadDown = function () { - // Search - if ( - (obj.options.search == true || obj.options.filters == true) && - obj.results - ) { - var results = obj.results; - } else { - var results = obj.rows; - } - var test = 0; - if (results.length > 100) { - // Get the last element in the page - var item = parseInt(obj.tbody.lastChild.getAttribute("data-y")); - if ( - (obj.options.search == true || obj.options.filters == true) && - obj.results - ) { - item = results.indexOf(item); - } - if (item < obj.rows.length - 1) { - for (var j = 0; j <= 30; j++) { - if (item < results.length) { - if ( - (obj.options.search == true || obj.options.filters == true) && - obj.results - ) { - obj.tbody.appendChild(obj.rows[results[item]]); - } else { - obj.tbody.appendChild(obj.rows[item]); - } - if (obj.tbody.children.length > 100) { - obj.tbody.removeChild(obj.tbody.firstChild); - test = 1; - } - } - item = item + 1; - } - } - } - - return test; - }; - - obj.loadValidation = function () { - if (obj.selectedCell) { - var currentPage = - parseInt(obj.tbody.firstChild.getAttribute("data-y")) / 100; - var selectedPage = parseInt(obj.selectedCell[3] / 100); - var totalPages = parseInt(obj.rows.length / 100); - - if (currentPage != selectedPage && selectedPage <= totalPages) { - if ( - !Array.prototype.indexOf.call( - obj.tbody.children, - obj.rows[obj.selectedCell[3]] - ) - ) { - obj.loadPage(selectedPage); - return true; - } - } - } - - return false; - }; - - /** - * Reset search - */ - obj.resetSearch = function () { - obj.searchInput.value = ""; - obj.search(""); - obj.results = null; - }; - - /** - * Search - */ - obj.search = function (query) { - // Query - if (query) { - var query = query.toLowerCase(); - } - - // Reset any filter - if (obj.options.filters) { - obj.resetFilters(); - } - - // Reset selection - obj.resetSelection(); - - // Total of results - obj.pageNumber = 0; - obj.results = []; - - if (query) { - // Search filter - var search = function (item, query, index) { - for (var i = 0; i < item.length; i++) { - if ( - ("" + item[i]).toLowerCase().search(query) >= 0 || - ("" + obj.records[index][i].innerHTML) - .toLowerCase() - .search(query) >= 0 - ) { - return true; - } - } - return false; - }; - - // Result - var addToResult = function (k) { - if (obj.results.indexOf(k) == -1) { - obj.results.push(k); - } - }; - - // Filter - var data = obj.options.data.filter(function (v, k) { - if (search(v, query, k)) { - // Merged rows found - var rows = obj.isRowMerged(k); - if (rows.length) { - for (var i = 0; i < rows.length; i++) { - var row = jexcel.getIdFromColumnName(rows[i], true); - for (var j = 0; j < obj.options.mergeCells[rows[i]][1]; j++) { - addToResult(row[1] + j); - } - } - } else { - // Normal row found - addToResult(k); - } - return true; - } else { - return false; - } - }); - } else { - obj.results = null; - } - - return obj.updateResult(); - }; - - obj.updateResult = function () { - var total = 0; - var index = 0; - - // Page 1 - if (obj.options.lazyLoading == true) { - total = 100; - } else if (obj.options.pagination > 0) { - total = obj.options.pagination; - } else { - if (obj.results) { - total = obj.results.length; - } else { - total = obj.rows.length; - } - } - - // Reset current nodes - while (obj.tbody.firstChild) { - obj.tbody.removeChild(obj.tbody.firstChild); - } - - // Hide all records from the table - for (var j = 0; j < obj.rows.length; j++) { - if (!obj.results || obj.results.indexOf(j) > -1) { - if (index < total) { - obj.tbody.appendChild(obj.rows[j]); - index++; - } - obj.rows[j].style.display = ""; - } else { - obj.rows[j].style.display = "none"; - } - } - - // Update pagination - if (obj.options.pagination > 0) { - obj.updatePagination(); - } - - obj.updateCornerPosition(); - - return total; - }; - - /** - * Which page the cell is - */ - obj.whichPage = function (cell) { - // Search - if ( - (obj.options.search == true || obj.options.filters == true) && - obj.results - ) { - cell = obj.results.indexOf(cell); - } - - return ( - Math.ceil((parseInt(cell) + 1) / parseInt(obj.options.pagination)) - 1 - ); - }; - - /** - * Go to page - */ - obj.page = function (pageNumber) { - var oldPage = obj.pageNumber; - - // Search - if ( - (obj.options.search == true || obj.options.filters == true) && - obj.results - ) { - var results = obj.results; - } else { - var results = obj.rows; - } - - // Per page - var quantityPerPage = parseInt(obj.options.pagination); - - // pageNumber - if (pageNumber == null || pageNumber == -1) { - // Last page - pageNumber = Math.ceil(results.length / quantityPerPage) - 1; - } - - // Page number - obj.pageNumber = pageNumber; - - var startRow = pageNumber * quantityPerPage; - var finalRow = pageNumber * quantityPerPage + quantityPerPage; - if (finalRow > results.length) { - finalRow = results.length; - } - if (startRow < 0) { - startRow = 0; - } - - // Reset container - while (obj.tbody.firstChild) { - obj.tbody.removeChild(obj.tbody.firstChild); - } - - // Appeding items - for (var j = startRow; j < finalRow; j++) { - if ( - (obj.options.search == true || obj.options.filters == true) && - obj.results - ) { - obj.tbody.appendChild(obj.rows[results[j]]); - } else { - obj.tbody.appendChild(obj.rows[j]); - } - } - - if (obj.options.pagination > 0) { - obj.updatePagination(); - } - - // Update corner position - obj.updateCornerPosition(); - - // Events - obj.dispatch("onchangepage", el, pageNumber, oldPage); - }; - - /** - * Update the pagination - */ - obj.updatePagination = function () { - // Reset container - obj.pagination.children[0].innerHTML = ""; - obj.pagination.children[1].innerHTML = ""; - - // Start pagination - if (obj.options.pagination) { - // Searchable - if ( - (obj.options.search == true || obj.options.filters == true) && - obj.results - ) { - var results = obj.results.length; - } else { - var results = obj.rows.length; - } - - if (!results) { - // No records found - obj.pagination.children[0].innerHTML = - obj.options.text.noRecordsFound; - } else { - // Pagination container - var quantyOfPages = Math.ceil(results / obj.options.pagination); - - if (obj.pageNumber < 6) { - var startNumber = 1; - var finalNumber = quantyOfPages < 10 ? quantyOfPages : 10; - } else if (quantyOfPages - obj.pageNumber < 5) { - var startNumber = quantyOfPages - 9; - var finalNumber = quantyOfPages; - if (startNumber < 1) { - startNumber = 1; - } - } else { - var startNumber = obj.pageNumber - 4; - var finalNumber = obj.pageNumber + 5; - } - - // First - if (startNumber > 1) { - var paginationItem = document.createElement("div"); - paginationItem.className = "jexcel_page"; - paginationItem.innerHTML = "<"; - paginationItem.title = 1; - obj.pagination.children[1].appendChild(paginationItem); - } - - // Get page links - for (var i = startNumber; i <= finalNumber; i++) { - var paginationItem = document.createElement("div"); - paginationItem.className = "jexcel_page"; - paginationItem.innerHTML = i; - obj.pagination.children[1].appendChild(paginationItem); - - if (obj.pageNumber == i - 1) { - paginationItem.classList.add("jexcel_page_selected"); - } - } - - // Last - if (finalNumber < quantyOfPages) { - var paginationItem = document.createElement("div"); - paginationItem.className = "jexcel_page"; - paginationItem.innerHTML = ">"; - paginationItem.title = quantyOfPages; - obj.pagination.children[1].appendChild(paginationItem); - } - - // Text - var format = function (format) { - var args = Array.prototype.slice.call(arguments, 1); - return format.replace(/{(\d+)}/g, function (match, number) { - return typeof args[number] != "undefined" ? args[number] : match; - }); - }; - - obj.pagination.children[0].innerHTML = format( - obj.options.text.showingPage, - obj.pageNumber + 1, - quantyOfPages - ); - } - } - }; - - /** - * Download CSV table - * - * @return null - */ - obj.download = function (includeHeaders) { - if (obj.options.allowExport == false) { - console.error("Export not allowed"); - } else { - // Data - var data = ""; - - // Get data - data += obj.copy( - false, - obj.options.csvDelimiter, - true, - includeHeaders, - true - ); - - // Download element - var blob = new Blob(["\uFEFF" + data], { - type: "text/csv;charset=utf-8;", - }); - - // IE Compatibility - if (window.navigator && window.navigator.msSaveOrOpenBlob) { - window.navigator.msSaveOrOpenBlob( - blob, - obj.options.csvFileName + ".csv" - ); - } else { - // Download element - var pom = document.createElement("a"); - var url = URL.createObjectURL(blob); - pom.href = url; - pom.setAttribute("download", obj.options.csvFileName + ".csv"); - document.body.appendChild(pom); - pom.click(); - pom.parentNode.removeChild(pom); - } - } - }; - - /** - * Initializes a new history record for undo/redo - * - * @return null - */ - obj.setHistory = function (changes) { - if (obj.ignoreHistory != true) { - // Increment and get the current history index - var index = ++obj.historyIndex; - - // Slice the array to discard undone changes - obj.history = obj.history = obj.history.slice(0, index + 1); - - // Keep history - obj.history[index] = changes; - } - }; - - /** - * Copy method - * - * @param bool highlighted - Get only highlighted cells - * @param delimiter - \t default to keep compatibility with excel - * @return string value - */ - obj.copy = function ( - highlighted, - delimiter, - returnData, - includeHeaders, - download - ) { - if (!delimiter) { - delimiter = "\t"; - } - - var div = new RegExp(delimiter, "ig"); - - // Controls - var header = []; - var col = []; - var colLabel = []; - var row = []; - var rowLabel = []; - var x = obj.options.data[0].length; - var y = obj.options.data.length; - var tmp = ""; - var copyHeader = false; - var headers = ""; - var nestedHeaders = ""; - var numOfCols = 0; - var numOfRows = 0; - - // Partial copy - var copyX = 0; - var copyY = 0; - var isPartialCopy = true; - // Go through the columns to get the data - for (var j = 0; j < y; j++) { - for (var i = 0; i < x; i++) { - // If cell is highlighted - if ( - !highlighted || - obj.records[j][i].classList.contains("highlight") - ) { - if (copyX <= i) { - copyX = i; - } - if (copyY <= j) { - copyY = j; - } - } - } - } - if (x === copyX + 1 && y === copyY + 1) { - isPartialCopy = false; - } - - if ( - (download && obj.options.includeHeadersOnDownload == true) || - (!download && - obj.options.includeHeadersOnCopy == true && - !isPartialCopy) || - includeHeaders - ) { - // Nested headers - if (obj.options.nestedHeaders && obj.options.nestedHeaders.length > 0) { - // Flexible way to handle nestedheaders - if ( - !(obj.options.nestedHeaders[0] && obj.options.nestedHeaders[0][0]) - ) { - tmp = [obj.options.nestedHeaders]; - } else { - tmp = obj.options.nestedHeaders; - } - - for (var j = 0; j < tmp.length; j++) { - var nested = []; - for (var i = 0; i < tmp[j].length; i++) { - var colspan = parseInt(tmp[j][i].colspan); - nested.push(tmp[j][i].title); - for (var c = 0; c < colspan - 1; c++) { - nested.push(""); - } - } - nestedHeaders += nested.join(delimiter) + "\r\n"; - } - } - - copyHeader = true; - } - - // Reset container - obj.style = []; - - // Go through the columns to get the data - for (var j = 0; j < y; j++) { - col = []; - colLabel = []; - - for (var i = 0; i < x; i++) { - // If cell is highlighted - if ( - !highlighted || - obj.records[j][i].classList.contains("highlight") - ) { - if (copyHeader == true) { - header.push(obj.headers[i].textContent); - } - // Values - var value = obj.options.data[j][i]; - if ( - value.match && - (value.match(div) || - value.match(/,/g) || - value.match(/\n/) || - value.match(/\"/)) - ) { - value = value.replace(new RegExp('"', "g"), '""'); - value = '"' + value + '"'; - } - col.push(value); - - // Labels - if ( - obj.options.columns[i].type == "checkbox" || - obj.options.columns[i].type == "radio" - ) { - var label = value; - } else { - if (obj.options.stripHTMLOnCopy == true) { - var label = obj.records[j][i].textContent; - } else { - var label = obj.records[j][i].innerHTML; - } - if ( - label.match && - (label.match(div) || - label.match(/,/g) || - label.match(/\n/) || - label.match(/\"/)) - ) { - // Scape double quotes - label = label.replace(new RegExp('"', "g"), '""'); - label = '"' + label + '"'; - } - } - colLabel.push(label); - - // Get style - tmp = obj.records[j][i].getAttribute("style"); - tmp = tmp.replace("display: none;", ""); - obj.style.push(tmp ? tmp : ""); - } - } - - if (col.length) { - if (copyHeader) { - numOfCols = col.length; - row.push(header.join(delimiter)); - } - row.push(col.join(delimiter)); - } - if (colLabel.length) { - numOfRows++; - if (copyHeader) { - rowLabel.push(header.join(delimiter)); - copyHeader = false; - } - rowLabel.push(colLabel.join(delimiter)); - } - } - - if (x == numOfCols && y == numOfRows) { - headers = nestedHeaders; - } - - // Final string - var str = headers + row.join("\r\n"); - var strLabel = headers + rowLabel.join("\r\n"); - - // Create a hidden textarea to copy the values - if (!returnData) { - if (obj.options.copyCompatibility == true) { - obj.textarea.value = strLabel; - } else { - obj.textarea.value = str; - } - obj.textarea.select(); - document.execCommand("copy"); - } - - // Keep data - if (obj.options.copyCompatibility == true) { - obj.data = strLabel; - } else { - obj.data = str; - } - // Keep non visible information - obj.hashString = obj.hash(obj.data); - - // Any exiting border should go - if (!returnData) { - obj.removeCopyingSelection(); - - // Border - if (obj.highlighted) { - for (var i = 0; i < obj.highlighted.length; i++) { - obj.highlighted[i].classList.add("copying"); - if (obj.highlighted[i].classList.contains("highlight-left")) { - obj.highlighted[i].classList.add("copying-left"); - } - if (obj.highlighted[i].classList.contains("highlight-right")) { - obj.highlighted[i].classList.add("copying-right"); - } - if (obj.highlighted[i].classList.contains("highlight-top")) { - obj.highlighted[i].classList.add("copying-top"); - } - if (obj.highlighted[i].classList.contains("highlight-bottom")) { - obj.highlighted[i].classList.add("copying-bottom"); - } - } - } - - // Paste event - obj.dispatch( - "oncopy", - el, - obj.options.copyCompatibility == true ? rowLabel : row, - obj.hashString - ); - } - - return obj.data; - }; - - /** - * Jspreadsheet paste method - * - * @param integer row number - * @return string value - */ - obj.paste = function (x, y, data) { - // Paste filter - var ret = obj.dispatch("onbeforepaste", el, data, x, y); - - if (ret === false) { - return false; - } else if (ret) { - var data = ret; - } - - // Controls - var hash = obj.hash(data); - var style = hash == obj.hashString ? obj.style : null; - - // Depending on the behavior - if (obj.options.copyCompatibility == true && hash == obj.hashString) { - var data = obj.data; - } - - // Split new line - var data = obj.parseCSV(data, "\t"); - - if (x != null && y != null && data) { - // Records - var i = 0; - var j = 0; - var records = []; - var newStyle = {}; - var oldStyle = {}; - var styleIndex = 0; - - // Index - var colIndex = parseInt(x); - var rowIndex = parseInt(y); - var row = null; - - // Go through the columns to get the data - while ((row = data[j])) { - i = 0; - colIndex = parseInt(x); - - while (row[i] != null) { - // Update and keep history - var record = obj.updateCell(colIndex, rowIndex, row[i]); - // Keep history - records.push(record); - // Update all formulas in the chain - obj.updateFormulaChain(colIndex, rowIndex, records); - // Style - if (style && style[styleIndex]) { - var columnName = jexcel.getColumnNameFromId([colIndex, rowIndex]); - newStyle[columnName] = style[styleIndex]; - oldStyle[columnName] = obj.getStyle(columnName); - obj.records[rowIndex][colIndex].setAttribute( - "style", - style[styleIndex] - ); - styleIndex++; - } - i++; - if (row[i] != null) { - if (colIndex >= obj.headers.length - 1) { - // If the pasted column is out of range, create it if possible - if (obj.options.allowInsertColumn == true) { - obj.insertColumn(); - // Otherwise skip the pasted data that overflows - } else { - break; - } - } - colIndex = obj.right.get(colIndex, rowIndex); - } - } - - j++; - if (data[j]) { - if (rowIndex >= obj.rows.length - 1) { - // If the pasted row is out of range, create it if possible - if (obj.options.allowInsertRow == true) { - obj.insertRow(); - // Otherwise skip the pasted data that overflows - } else { - break; - } - } - rowIndex = obj.down.get(x, rowIndex); - } - } - - // Select the new cells - obj.updateSelectionFromCoords(x, y, colIndex, rowIndex); - - // Update history - obj.setHistory({ - action: "setValue", - records: records, - selection: obj.selectedCell, - newStyle: newStyle, - oldStyle: oldStyle, - }); - - // Update table - obj.updateTable(); - - // Paste event - obj.dispatch("onpaste", el, data); - - // On after changes - obj.onafterchanges(el, records); - } - - obj.removeCopyingSelection(); - }; - - /** - * Remove copying border - */ - obj.removeCopyingSelection = function () { - var copying = document.querySelectorAll(".jexcel .copying"); - for (var i = 0; i < copying.length; i++) { - copying[i].classList.remove("copying"); - copying[i].classList.remove("copying-left"); - copying[i].classList.remove("copying-right"); - copying[i].classList.remove("copying-top"); - copying[i].classList.remove("copying-bottom"); - } - }; - - /** - * Process row - */ - obj.historyProcessRow = function (type, historyRecord) { - var rowIndex = !historyRecord.insertBefore - ? historyRecord.rowNumber + 1 - : +historyRecord.rowNumber; - - if (obj.options.search == true) { - if (obj.results && obj.results.length != obj.rows.length) { - obj.resetSearch(); - } - } - - // Remove row - if (type == 1) { - var numOfRows = historyRecord.numOfRows; - // Remove nodes - for (var j = rowIndex; j < numOfRows + rowIndex; j++) { - obj.rows[j].parentNode.removeChild(obj.rows[j]); - } - // Remove references - obj.records.splice(rowIndex, numOfRows); - obj.options.data.splice(rowIndex, numOfRows); - obj.rows.splice(rowIndex, numOfRows); - - obj.conditionalSelectionUpdate(1, rowIndex, numOfRows + rowIndex - 1); - } else { - // Insert data - obj.records = jexcel.injectArray( - obj.records, - rowIndex, - historyRecord.rowRecords - ); - obj.options.data = jexcel.injectArray( - obj.options.data, - rowIndex, - historyRecord.rowData - ); - obj.rows = jexcel.injectArray( - obj.rows, - rowIndex, - historyRecord.rowNode - ); - // Insert nodes - var index = 0; - for (var j = rowIndex; j < historyRecord.numOfRows + rowIndex; j++) { - obj.tbody.insertBefore( - historyRecord.rowNode[index], - obj.tbody.children[j] - ); - index++; - } - } - - // Respect pagination - if (obj.options.pagination > 0) { - obj.page(obj.pageNumber); - } - - obj.updateTableReferences(); - }; - - /** - * Process column - */ - obj.historyProcessColumn = function (type, historyRecord) { - var columnIndex = !historyRecord.insertBefore - ? historyRecord.columnNumber + 1 - : historyRecord.columnNumber; - - // Remove column - if (type == 1) { - var numOfColumns = historyRecord.numOfColumns; - - obj.options.columns.splice(columnIndex, numOfColumns); - for (var i = columnIndex; i < numOfColumns + columnIndex; i++) { - obj.headers[i].parentNode.removeChild(obj.headers[i]); - obj.colgroup[i].parentNode.removeChild(obj.colgroup[i]); - } - obj.headers.splice(columnIndex, numOfColumns); - obj.colgroup.splice(columnIndex, numOfColumns); - for (var j = 0; j < historyRecord.data.length; j++) { - for (var i = columnIndex; i < numOfColumns + columnIndex; i++) { - obj.records[j][i].parentNode.removeChild(obj.records[j][i]); - } - obj.records[j].splice(columnIndex, numOfColumns); - obj.options.data[j].splice(columnIndex, numOfColumns); - } - // Process footers - if (obj.options.footers) { - for (var j = 0; j < obj.options.footers.length; j++) { - obj.options.footers[j].splice(columnIndex, numOfColumns); - } - } - } else { - // Insert data - obj.options.columns = jexcel.injectArray( - obj.options.columns, - columnIndex, - historyRecord.columns - ); - obj.headers = jexcel.injectArray( - obj.headers, - columnIndex, - historyRecord.headers - ); - obj.colgroup = jexcel.injectArray( - obj.colgroup, - columnIndex, - historyRecord.colgroup - ); - - var index = 0; - for ( - var i = columnIndex; - i < historyRecord.numOfColumns + columnIndex; - i++ - ) { - obj.headerContainer.insertBefore( - historyRecord.headers[index], - obj.headerContainer.children[i + 1] - ); - obj.colgroupContainer.insertBefore( - historyRecord.colgroup[index], - obj.colgroupContainer.children[i + 1] - ); - index++; - } - - for (var j = 0; j < historyRecord.data.length; j++) { - obj.options.data[j] = jexcel.injectArray( - obj.options.data[j], - columnIndex, - historyRecord.data[j] - ); - obj.records[j] = jexcel.injectArray( - obj.records[j], - columnIndex, - historyRecord.records[j] - ); - var index = 0; - for ( - var i = columnIndex; - i < historyRecord.numOfColumns + columnIndex; - i++ - ) { - obj.rows[j].insertBefore( - historyRecord.records[j][index], - obj.rows[j].children[i + 1] - ); - index++; - } - } - // Process footers - if (obj.options.footers) { - for (var j = 0; j < obj.options.footers.length; j++) { - obj.options.footers[j] = jexcel.injectArray( - obj.options.footers[j], - columnIndex, - historyRecord.footers[j] - ); - } - } - } - - // Adjust nested headers - if (obj.options.nestedHeaders && obj.options.nestedHeaders.length > 0) { - // Flexible way to handle nestedheaders - if (obj.options.nestedHeaders[0] && obj.options.nestedHeaders[0][0]) { - for (var j = 0; j < obj.options.nestedHeaders.length; j++) { - if (type == 1) { - var colspan = - parseInt( - obj.options.nestedHeaders[j][ - obj.options.nestedHeaders[j].length - 1 - ].colspan - ) - historyRecord.numOfColumns; - } else { - var colspan = - parseInt( - obj.options.nestedHeaders[j][ - obj.options.nestedHeaders[j].length - 1 - ].colspan - ) + historyRecord.numOfColumns; - } - obj.options.nestedHeaders[j][ - obj.options.nestedHeaders[j].length - 1 - ].colspan = colspan; - obj.thead.children[j].children[ - obj.thead.children[j].children.length - 1 - ].setAttribute("colspan", colspan); - } - } else { - if (type == 1) { - var colspan = - parseInt(obj.options.nestedHeaders[0].colspan) - - historyRecord.numOfColumns; - } else { - var colspan = - parseInt(obj.options.nestedHeaders[0].colspan) + - historyRecord.numOfColumns; - } - obj.options.nestedHeaders[0].colspan = colspan; - obj.thead.children[0].children[ - obj.thead.children[0].children.length - 1 - ].setAttribute("colspan", colspan); - } - } - - obj.updateTableReferences(); - }; - - /** - * Undo last action - */ - obj.undo = function () { - // Ignore events and history - var ignoreEvents = obj.ignoreEvents ? true : false; - var ignoreHistory = obj.ignoreHistory ? true : false; - - obj.ignoreEvents = true; - obj.ignoreHistory = true; - - // Records - var records = []; - - // Update cells - if (obj.historyIndex >= 0) { - // History - var historyRecord = obj.history[obj.historyIndex--]; - - if (historyRecord.action == "insertRow") { - obj.historyProcessRow(1, historyRecord); - } else if (historyRecord.action == "deleteRow") { - obj.historyProcessRow(0, historyRecord); - } else if (historyRecord.action == "insertColumn") { - obj.historyProcessColumn(1, historyRecord); - } else if (historyRecord.action == "deleteColumn") { - obj.historyProcessColumn(0, historyRecord); - } else if (historyRecord.action == "moveRow") { - obj.moveRow(historyRecord.newValue, historyRecord.oldValue); - } else if (historyRecord.action == "moveColumn") { - obj.moveColumn(historyRecord.newValue, historyRecord.oldValue); - } else if (historyRecord.action == "setMerge") { - obj.removeMerge(historyRecord.column, historyRecord.data); - } else if (historyRecord.action == "setStyle") { - obj.setStyle(historyRecord.oldValue, null, null, 1); - } else if (historyRecord.action == "setWidth") { - obj.setWidth(historyRecord.column, historyRecord.oldValue); - } else if (historyRecord.action == "setHeight") { - obj.setHeight(historyRecord.row, historyRecord.oldValue); - } else if (historyRecord.action == "setHeader") { - obj.setHeader(historyRecord.column, historyRecord.oldValue); - } else if (historyRecord.action == "setComments") { - obj.setComments( - historyRecord.column, - historyRecord.oldValue[0], - historyRecord.oldValue[1] - ); - } else if (historyRecord.action == "orderBy") { - var rows = []; - for (var j = 0; j < historyRecord.rows.length; j++) { - rows[historyRecord.rows[j]] = j; - } - obj.updateOrderArrow( - historyRecord.column, - historyRecord.order ? 0 : 1 - ); - obj.updateOrder(rows); - } else if (historyRecord.action == "setValue") { - // Redo for changes in cells - for (var i = 0; i < historyRecord.records.length; i++) { - records.push({ - x: historyRecord.records[i].x, - y: historyRecord.records[i].y, - newValue: historyRecord.records[i].oldValue, - }); - - if (historyRecord.oldStyle) { - obj.resetStyle(historyRecord.oldStyle); - } - } - // Update records - obj.setValue(records); - - // Update selection - if (historyRecord.selection) { - obj.updateSelectionFromCoords( - historyRecord.selection[0], - historyRecord.selection[1], - historyRecord.selection[2], - historyRecord.selection[3] - ); - } - } - } - obj.ignoreEvents = ignoreEvents; - obj.ignoreHistory = ignoreHistory; - - // Events - obj.dispatch("onundo", el, historyRecord); - }; - - /** - * Redo previously undone action - */ - obj.redo = function () { - // Ignore events and history - var ignoreEvents = obj.ignoreEvents ? true : false; - var ignoreHistory = obj.ignoreHistory ? true : false; - - obj.ignoreEvents = true; - obj.ignoreHistory = true; - - // Records - var records = []; - - // Update cells - if (obj.historyIndex < obj.history.length - 1) { - // History - var historyRecord = obj.history[++obj.historyIndex]; - - if (historyRecord.action == "insertRow") { - obj.historyProcessRow(0, historyRecord); - } else if (historyRecord.action == "deleteRow") { - obj.historyProcessRow(1, historyRecord); - } else if (historyRecord.action == "insertColumn") { - obj.historyProcessColumn(0, historyRecord); - } else if (historyRecord.action == "deleteColumn") { - obj.historyProcessColumn(1, historyRecord); - } else if (historyRecord.action == "moveRow") { - obj.moveRow(historyRecord.oldValue, historyRecord.newValue); - } else if (historyRecord.action == "moveColumn") { - obj.moveColumn(historyRecord.oldValue, historyRecord.newValue); - } else if (historyRecord.action == "setMerge") { - obj.setMerge( - historyRecord.column, - historyRecord.colspan, - historyRecord.rowspan, - 1 - ); - } else if (historyRecord.action == "setStyle") { - obj.setStyle(historyRecord.newValue, null, null, 1); - } else if (historyRecord.action == "setWidth") { - obj.setWidth(historyRecord.column, historyRecord.newValue); - } else if (historyRecord.action == "setHeight") { - obj.setHeight(historyRecord.row, historyRecord.newValue); - } else if (historyRecord.action == "setHeader") { - obj.setHeader(historyRecord.column, historyRecord.newValue); - } else if (historyRecord.action == "setComments") { - obj.setComments( - historyRecord.column, - historyRecord.newValue[0], - historyRecord.newValue[1] - ); - } else if (historyRecord.action == "orderBy") { - obj.updateOrderArrow(historyRecord.column, historyRecord.order); - obj.updateOrder(historyRecord.rows); - } else if (historyRecord.action == "setValue") { - obj.setValue(historyRecord.records); - // Redo for changes in cells - for (var i = 0; i < historyRecord.records.length; i++) { - if (historyRecord.oldStyle) { - obj.resetStyle(historyRecord.newStyle); - } - } - // Update selection - if (historyRecord.selection) { - obj.updateSelectionFromCoords( - historyRecord.selection[0], - historyRecord.selection[1], - historyRecord.selection[2], - historyRecord.selection[3] - ); - } - } - } - obj.ignoreEvents = ignoreEvents; - obj.ignoreHistory = ignoreHistory; - - // Events - obj.dispatch("onredo", el, historyRecord); - }; - - /** - * Get dropdown value from key - */ - obj.getDropDownValue = function (column, key) { - var value = []; - - if (obj.options.columns[column] && obj.options.columns[column].source) { - // Create array from source - var combo = []; - var source = obj.options.columns[column].source; - - for (var i = 0; i < source.length; i++) { - if (typeof source[i] == "object") { - combo[source[i].id] = source[i].name; - } else { - combo[source[i]] = source[i]; - } - } - - // Guarantee single multiple compatibility - var keys = Array.isArray(key) ? key : ("" + key).split(";"); - - for (var i = 0; i < keys.length; i++) { - if (typeof keys[i] === "object") { - value.push(combo[keys[i].id]); - } else { - if (combo[keys[i]]) { - value.push(combo[keys[i]]); - } - } - } - } else { - console.error("Invalid column"); - } - - return value.length > 0 ? value.join("; ") : ""; - }; - - /** - * From stack overflow contributions - */ - obj.parseCSV = function (str, delimiter) { - // Remove last line break - str = str.replace(/\r?\n$|\r$|\n$/g, ""); - // Last caracter is the delimiter - if (str.charCodeAt(str.length - 1) == 9) { - str += "\0"; - } - // user-supplied delimeter or default comma - delimiter = delimiter || ","; - - var arr = []; - var quote = false; // true means we're inside a quoted field - // iterate over each character, keep track of current row and column (of the returned array) - for (var row = 0, col = 0, c = 0; c < str.length; c++) { - var cc = str[c], - nc = str[c + 1]; - arr[row] = arr[row] || []; - arr[row][col] = arr[row][col] || ""; - - // If the current character is a quotation mark, and we're inside a quoted field, and the next character is also a quotation mark, add a quotation mark to the current column and skip the next character - if (cc == '"' && quote && nc == '"') { - arr[row][col] += cc; - ++c; - continue; - } - - // If it's just one quotation mark, begin/end quoted field - if (cc == '"') { - quote = !quote; - continue; - } - - // If it's a comma and we're not in a quoted field, move on to the next column - if (cc == delimiter && !quote) { - ++col; - continue; - } - - // If it's a newline (CRLF) and we're not in a quoted field, skip the next character and move on to the next row and move to column 0 of that new row - if (cc == "\r" && nc == "\n" && !quote) { - ++row; - col = 0; - ++c; - continue; - } - - // If it's a newline (LF or CR) and we're not in a quoted field, move on to the next row and move to column 0 of that new row - if (cc == "\n" && !quote) { - ++row; - col = 0; - continue; - } - if (cc == "\r" && !quote) { - ++row; - col = 0; - continue; - } - - // Otherwise, append the current character to the current column - arr[row][col] += cc; - } - return arr; - }; - - obj.hash = function (str) { - var hash = 0, - i, - chr; - - if (str.length === 0) { - return hash; - } else { - for (i = 0; i < str.length; i++) { - chr = str.charCodeAt(i); - hash = (hash << 5) - hash + chr; - hash |= 0; - } - } - return hash; - }; - - obj.onafterchanges = function (el, records) { - // Events - obj.dispatch("onafterchanges", el, records); - }; - - obj.destroy = function () { - jexcel.destroy(el); - }; - - /** - * Initialization method - */ - obj.init = function () { - jexcel.current = obj; - - // Build handlers - if (typeof jexcel.build == "function") { - if (obj.options.root) { - jexcel.build(obj.options.root); - } else { - jexcel.build(document); - jexcel.build = null; - } - } - - // Event - el.setAttribute("tabindex", 1); - el.addEventListener("focus", function (e) { - if (jexcel.current && !obj.selectedCell) { - obj.updateSelectionFromCoords(0, 0, 0, 0); - obj.left(); - } - }); - - // Load the table data based on an CSV file - if (obj.options.csv) { - // Loading - if (obj.options.loadingSpin == true) { - jSuites.loading.show(); - } - - // Load CSV file - jSuites.ajax({ - url: obj.options.csv, - method: obj.options.method, - data: obj.options.requestVariables, - dataType: "text", - success: function (result) { - // Convert data - var newData = obj.parseCSV(result, obj.options.csvDelimiter); - - // Headers - if (obj.options.csvHeaders == true && newData.length > 0) { - var headers = newData.shift(); - for (var i = 0; i < headers.length; i++) { - if (!obj.options.columns[i]) { - obj.options.columns[i] = { - type: "text", - align: obj.options.defaultColAlign, - width: obj.options.defaultColWidth, - }; - } - // Precedence over pre-configurated titles - if (typeof obj.options.columns[i].title === "undefined") { - obj.options.columns[i].title = headers[i]; - } - } - } - // Data - obj.options.data = newData; - // Prepare table - obj.prepareTable(); - // Hide spin - if (obj.options.loadingSpin == true) { - jSuites.loading.hide(); - } - }, - }); - } else if (obj.options.url) { - // Loading - if (obj.options.loadingSpin == true) { - jSuites.loading.show(); - } - - jSuites.ajax({ - url: obj.options.url, - method: obj.options.method, - data: obj.options.requestVariables, - dataType: "json", - success: function (result) { - // Data - obj.options.data = result.data ? result.data : result; - // Prepare table - obj.prepareTable(); - // Hide spin - if (obj.options.loadingSpin == true) { - jSuites.loading.hide(); - } - }, - }); - } else { - // Prepare table - obj.prepareTable(); - } - }; - - // Context menu - if (options && options.contextMenu != null) { - obj.options.contextMenu = options.contextMenu; - } else { - obj.options.contextMenu = function (el, x, y, e) { - var items = []; - - if (y == null) { - // Insert a new column - if (obj.options.allowInsertColumn == true) { - items.push({ - title: obj.options.text.insertANewColumnBefore, - onclick: function () { - obj.insertColumn(1, parseInt(x), 1); - }, - }); - } - - if (obj.options.allowInsertColumn == true) { - items.push({ - title: obj.options.text.insertANewColumnAfter, - onclick: function () { - obj.insertColumn(1, parseInt(x), 0); - }, - }); - } - - // Delete a column - if (obj.options.allowDeleteColumn == true) { - items.push({ - title: obj.options.text.deleteSelectedColumns, - onclick: function () { - obj.deleteColumn( - obj.getSelectedColumns().length ? undefined : parseInt(x) - ); - }, - }); - } - - // Rename column - if (obj.options.allowRenameColumn == true) { - items.push({ - title: obj.options.text.renameThisColumn, - onclick: function () { - obj.setHeader(x); - }, - }); - } - - // Sorting - if (obj.options.columnSorting == true) { - // Line - items.push({ type: "line" }); - - items.push({ - title: obj.options.text.orderAscending, - onclick: function () { - obj.orderBy(x, 0); - }, - }); - items.push({ - title: obj.options.text.orderDescending, - onclick: function () { - obj.orderBy(x, 1); - }, - }); - } - } else { - // Insert new row - if (obj.options.allowInsertRow == true) { - items.push({ - title: obj.options.text.insertANewRowBefore, - onclick: function () { - obj.insertRow(1, parseInt(y), 1); - }, - }); - - items.push({ - title: obj.options.text.insertANewRowAfter, - onclick: function () { - obj.insertRow(1, parseInt(y)); - }, - }); - } - - if (obj.options.allowDeleteRow == true) { - items.push({ - title: obj.options.text.deleteSelectedRows, - onclick: function () { - obj.deleteRow( - obj.getSelectedRows().length ? undefined : parseInt(y) - ); - }, - }); - } - - if (x) { - if (obj.options.allowComments == true) { - items.push({ type: "line" }); - - var title = obj.records[y][x].getAttribute("title") || ""; - - items.push({ - title: title - ? obj.options.text.editComments - : obj.options.text.addComments, - onclick: function () { - var comment = prompt(obj.options.text.comments, title); - if (comment) { - obj.setComments([x, y], comment); - } - }, - }); - - if (title) { - items.push({ - title: obj.options.text.clearComments, - onclick: function () { - obj.setComments([x, y], ""); - }, - }); - } - } - } - } - - // Line - items.push({ type: "line" }); - - // Copy - items.push({ - title: obj.options.text.copy, - shortcut: "Ctrl + C", - onclick: function () { - obj.copy(true); - }, - }); - - // Paste - if (navigator && navigator.clipboard) { - items.push({ - title: obj.options.text.paste, - shortcut: "Ctrl + V", - onclick: function () { - if (obj.selectedCell) { - navigator.clipboard.readText().then(function (text) { - if (text) { - jexcel.current.paste( - obj.selectedCell[0], - obj.selectedCell[1], - text - ); - } - }); - } - }, - }); - } - - // Save - if (obj.options.allowExport) { - items.push({ - title: obj.options.text.saveAs, - shortcut: "Ctrl + S", - onclick: function () { - obj.download(); - }, - }); - } - - // About - if (obj.options.about) { - items.push({ - title: obj.options.text.about, - onclick: function () { - if (obj.options.about === true) { - alert(Version().print()); - } else { - alert(obj.options.about); - } - }, - }); - } - - return items; - }; - } - - obj.scrollControls = function (e) { - obj.wheelControls(); - - if ( - obj.options.freezeColumns > 0 && - obj.content.scrollLeft != scrollLeft - ) { - obj.updateFreezePosition(); - } - - // Close editor - if ( - obj.options.lazyLoading == true || - obj.options.tableOverflow == true - ) { - if (obj.edition && e.target.className.substr(0, 9) != "jdropdown") { - obj.closeEditor(obj.edition[0], true); - } - } - }; - - obj.wheelControls = function (e) { - if (obj.options.lazyLoading == true) { - if (jexcel.timeControlLoading == null) { - jexcel.timeControlLoading = setTimeout(function () { - if ( - obj.content.scrollTop + obj.content.clientHeight >= - obj.content.scrollHeight - 10 - ) { - if (obj.loadDown()) { - if ( - obj.content.scrollTop + obj.content.clientHeight > - obj.content.scrollHeight - 10 - ) { - obj.content.scrollTop = - obj.content.scrollTop - obj.content.clientHeight; - } - obj.updateCornerPosition(); - } - } else if (obj.content.scrollTop <= obj.content.clientHeight) { - if (obj.loadUp()) { - if (obj.content.scrollTop < 10) { - obj.content.scrollTop = - obj.content.scrollTop + obj.content.clientHeight; - } - obj.updateCornerPosition(); - } - } - - jexcel.timeControlLoading = null; - }, 100); - } - } - }; - - // Get width of all freezed cells together - obj.getFreezeWidth = function () { - var width = 0; - if (obj.options.freezeColumns > 0) { - for (var i = 0; i < obj.options.freezeColumns; i++) { - width += parseInt(obj.options.columns[i].width); - } - } - return width; - }; - - var scrollLeft = 0; - - obj.updateFreezePosition = function () { - scrollLeft = obj.content.scrollLeft; - var width = 0; - if (scrollLeft > 50) { - for (var i = 0; i < obj.options.freezeColumns; i++) { - if (i > 0) { - // Must check if the previous column is hidden or not to determin whether the width shoule be added or not! - if (obj.options.columns[i - 1].type !== "hidden") { - width += parseInt(obj.options.columns[i - 1].width); - } - } - obj.headers[i].classList.add("jexcel_freezed"); - obj.headers[i].style.left = width + "px"; - for (var j = 0; j < obj.rows.length; j++) { - if (obj.rows[j] && obj.records[j][i]) { - var shifted = - scrollLeft + - (i > 0 ? obj.records[j][i - 1].style.width : 0) - - 51 + - "px"; - obj.records[j][i].classList.add("jexcel_freezed"); - obj.records[j][i].style.left = shifted; - } - } - } - } else { - for (var i = 0; i < obj.options.freezeColumns; i++) { - obj.headers[i].classList.remove("jexcel_freezed"); - obj.headers[i].style.left = ""; - for (var j = 0; j < obj.rows.length; j++) { - if (obj.records[j][i]) { - obj.records[j][i].classList.remove("jexcel_freezed"); - obj.records[j][i].style.left = ""; - } - } - } - } - - // Place the corner in the correct place - obj.updateCornerPosition(); - }; - - el.addEventListener("DOMMouseScroll", obj.wheelControls); - el.addEventListener("mousewheel", obj.wheelControls); - - el.jexcel = obj; - el.jspreadsheet = obj; - - obj.init(); - - return obj; - }; - - // Define dictionary - jexcel.setDictionary = function (o) { - jSuites.setDictionary(o); - }; - - // Define extensions - jexcel.setExtensions = function (o) { - var k = Object.keys(o); - for (var i = 0; i < k.length; i++) { - if (typeof o[k[i]] === "function") { - jexcel[k[i]] = o[k[i]]; - if (jexcel.license && typeof o[k[i]].license == "function") { - o[k[i]].license(jexcel.license); - } - } - } - }; - - /** - * Formulas - */ - if (typeof formula !== "undefined") { - jexcel.formula = formula; - } - jexcel.version = Version; - - jexcel.current = null; - jexcel.timeControl = null; - jexcel.timeControlLoading = null; - - const destroyEvents = function (root) { - root.removeEventListener("mouseup", jexcel.mouseUpControls); - root.removeEventListener("mousedown", jexcel.mouseDownControls); - root.removeEventListener("mousemove", jexcel.mouseMoveControls); - root.removeEventListener("mouseover", jexcel.mouseOverControls); - root.removeEventListener("dblclick", jexcel.doubleClickControls); - root.removeEventListener("paste", jexcel.pasteControls); - root.removeEventListener("contextmenu", jexcel.contextMenuControls); - root.removeEventListener("touchstart", jexcel.touchStartControls); - root.removeEventListener("touchend", jexcel.touchEndControls); - root.removeEventListener("touchcancel", jexcel.touchEndControls); - document.removeEventListener("keydown", jexcel.keyDownControls); - }; - - jexcel.destroy = function (element, destroyEventHandlers) { - if (element.jexcel) { - var root = element.jexcel.options.root - ? element.jexcel.options.root - : document; - element.removeEventListener( - "DOMMouseScroll", - element.jexcel.scrollControls - ); - element.removeEventListener("mousewheel", element.jexcel.scrollControls); - element.jexcel = null; - element.innerHTML = ""; - - if (destroyEventHandlers) { - destroyEvents(root); - jexcel = null; - } - } - }; - - jexcel.build = function (root) { - destroyEvents(root); - root.addEventListener("mouseup", jexcel.mouseUpControls); - root.addEventListener("mousedown", jexcel.mouseDownControls); - root.addEventListener("mousemove", jexcel.mouseMoveControls); - root.addEventListener("mouseover", jexcel.mouseOverControls); - root.addEventListener("dblclick", jexcel.doubleClickControls); - root.addEventListener("paste", jexcel.pasteControls); - root.addEventListener("contextmenu", jexcel.contextMenuControls); - root.addEventListener("touchstart", jexcel.touchStartControls); - root.addEventListener("touchend", jexcel.touchEndControls); - root.addEventListener("touchcancel", jexcel.touchEndControls); - root.addEventListener("touchmove", jexcel.touchEndControls); - document.addEventListener("keydown", jexcel.keyDownControls); - }; - - /** - * Events - */ - jexcel.keyDownControls = function (e) { - if (jexcel.current) { - if (jexcel.current.edition) { - if (e.which == 27) { - // Escape - if (jexcel.current.edition) { - // Exit without saving - jexcel.current.closeEditor(jexcel.current.edition[0], false); - } - e.preventDefault(); - } else if (e.which == 13) { - // Enter - if ( - jexcel.current.options.columns[jexcel.current.edition[2]].type == - "calendar" - ) { - jexcel.current.closeEditor(jexcel.current.edition[0], true); - } else if ( - jexcel.current.options.columns[jexcel.current.edition[2]].type == - "dropdown" || - jexcel.current.options.columns[jexcel.current.edition[2]].type == - "autocomplete" - ) { - // Do nothing - } else { - // Alt enter -> do not close editor - if ( - (jexcel.current.options.wordWrap == true || - jexcel.current.options.columns[jexcel.current.edition[2]] - .wordWrap == true || - jexcel.current.options.data[jexcel.current.edition[3]][ - jexcel.current.edition[2] - ].length > 200) && - e.altKey - ) { - // Add new line to the editor - var editorTextarea = jexcel.current.edition[0].children[0]; - var editorValue = jexcel.current.edition[0].children[0].value; - var editorIndexOf = editorTextarea.selectionStart; - editorValue = - editorValue.slice(0, editorIndexOf) + - "\n" + - editorValue.slice(editorIndexOf); - editorTextarea.value = editorValue; - editorTextarea.focus(); - editorTextarea.selectionStart = editorIndexOf + 1; - editorTextarea.selectionEnd = editorIndexOf + 1; - } else { - jexcel.current.edition[0].children[0].blur(); - } - } - } else if (e.which == 9) { - // Tab - if ( - ["calendar", "html"].includes( - jexcel.current.options.columns[jexcel.current.edition[2]].type - ) - ) { - jexcel.current.closeEditor(jexcel.current.edition[0], true); - } else { - jexcel.current.edition[0].children[0].blur(); - } - } - } - - if (!jexcel.current.edition && jexcel.current.selectedCell) { - // Which key - if (e.which == 37) { - jexcel.current.left(e.shiftKey, e.ctrlKey); - e.preventDefault(); - } else if (e.which == 39) { - jexcel.current.right(e.shiftKey, e.ctrlKey); - e.preventDefault(); - } else if (e.which == 38) { - jexcel.current.up(e.shiftKey, e.ctrlKey); - e.preventDefault(); - } else if (e.which == 40) { - jexcel.current.down(e.shiftKey, e.ctrlKey); - e.preventDefault(); - } else if (e.which == 36) { - jexcel.current.first(e.shiftKey, e.ctrlKey); - e.preventDefault(); - } else if (e.which == 35) { - jexcel.current.last(e.shiftKey, e.ctrlKey); - e.preventDefault(); - } else if (e.which == 46) { - // Delete - if (jexcel.current.options.editable == true) { - if (jexcel.current.selectedRow) { - if (jexcel.current.options.allowDeleteRow == true) { - if ( - confirm( - jexcel.current.options.text - .areYouSureToDeleteTheSelectedRows - ) - ) { - jexcel.current.deleteRow(); - } - } - } else if (jexcel.current.selectedHeader) { - if (jexcel.current.options.allowDeleteColumn == true) { - if ( - confirm( - jexcel.current.options.text - .areYouSureToDeleteTheSelectedColumns - ) - ) { - jexcel.current.deleteColumn(); - } - } - } else { - // Change value - jexcel.current.setValue(jexcel.current.highlighted, ""); - } - } - } else if (e.which == 13) { - // Move cursor - if (e.shiftKey) { - jexcel.current.up(); - } else { - if (jexcel.current.options.allowInsertRow == true) { - if (jexcel.current.options.allowManualInsertRow == true) { - if ( - jexcel.current.selectedCell[1] == - jexcel.current.options.data.length - 1 - ) { - // New record in case selectedCell in the last row - jexcel.current.insertRow(); - } - } - } - - jexcel.current.down(); - } - e.preventDefault(); - } else if (e.which == 9) { - // Tab - if (e.shiftKey) { - jexcel.current.left(); - } else { - if (jexcel.current.options.allowInsertColumn == true) { - if (jexcel.current.options.allowManualInsertColumn == true) { - if ( - jexcel.current.selectedCell[0] == - jexcel.current.options.data[0].length - 1 - ) { - // New record in case selectedCell in the last column - jexcel.current.insertColumn(); - } - } - } - - jexcel.current.right(); - } - e.preventDefault(); - } else { - if ((e.ctrlKey || e.metaKey) && !e.shiftKey) { - if (e.which == 65) { - // Ctrl + A - jexcel.current.selectAll(); - e.preventDefault(); - } else if (e.which == 83) { - // Ctrl + S - jexcel.current.download(); - e.preventDefault(); - } else if (e.which == 89) { - // Ctrl + Y - jexcel.current.redo(); - e.preventDefault(); - } else if (e.which == 90) { - // Ctrl + Z - jexcel.current.undo(); - e.preventDefault(); - } else if (e.which == 67) { - // Ctrl + C - jexcel.current.copy(true); - e.preventDefault(); - } else if (e.which == 88) { - // Ctrl + X - if (jexcel.current.options.editable == true) { - jexcel.cutControls(); - } else { - jexcel.copyControls(); - } - e.preventDefault(); - } else if (e.which == 86) { - // Ctrl + V - jexcel.pasteControls(); - } - } else { - if (jexcel.current.selectedCell) { - if (jexcel.current.options.editable == true) { - var rowId = jexcel.current.selectedCell[1]; - var columnId = jexcel.current.selectedCell[0]; - - // If is not readonly - if ( - jexcel.current.options.columns[columnId].type != "readonly" - ) { - // Characters able to start a edition - if (e.keyCode == 32) { - // Space - e.preventDefault(); - if ( - jspreadsheet.current.options.columns[columnId].type == - "checkbox" || - jspreadsheet.current.options.columns[columnId].type == - "radio" - ) { - jspreadsheet.current.setCheckRadioValue(); - } else { - // Start edition - jspreadsheet.current.openEditor( - jspreadsheet.current.records[rowId][columnId], - true - ); - } - } else if (e.keyCode == 113) { - // Start edition with current content F2 - jexcel.current.openEditor( - jexcel.current.records[rowId][columnId], - false - ); - } else if ( - e.keyCode == 8 || - (e.keyCode >= 48 && e.keyCode <= 57) || - (e.keyCode >= 96 && e.keyCode <= 111) || - (e.keyCode >= 187 && e.keyCode <= 190) || - ((String.fromCharCode(e.keyCode) == e.key || - String.fromCharCode(e.keyCode).toLowerCase() == - e.key.toLowerCase()) && - jexcel.validLetter(String.fromCharCode(e.keyCode))) - ) { - // Start edition - jexcel.current.openEditor( - jexcel.current.records[rowId][columnId], - true - ); - // Prevent entries in the calendar - if ( - jexcel.current.options.columns[columnId].type == - "calendar" - ) { - e.preventDefault(); - } - } - } - } - } - } - } - } else { - if (e.target.classList.contains("jexcel_search")) { - if (jexcel.timeControl) { - clearTimeout(jexcel.timeControl); - } - - jexcel.timeControl = setTimeout(function () { - jexcel.current.search(e.target.value); - }, 200); - } - } - } - }; - - jexcel.isMouseAction = false; - - jexcel.mouseDownControls = function (e) { - e = e || window.event; - if (e.buttons) { - var mouseButton = e.buttons; - } else if (e.button) { - var mouseButton = e.button; - } else { - var mouseButton = e.which; - } - - // Get elements - var jexcelTable = jexcel.getElement(e.target); - - if (jexcelTable[0]) { - if (jexcel.current != jexcelTable[0].jexcel) { - if (jexcel.current) { - if (jexcel.current.edition) { - jexcel.current.closeEditor(jexcel.current.edition[0], true); - } - jexcel.current.resetSelection(); - } - jexcel.current = jexcelTable[0].jexcel; - } - } else { - if (jexcel.current) { - if (jexcel.current.edition) { - jexcel.current.closeEditor(jexcel.current.edition[0], true); - } - - jexcel.current.resetSelection(true); - jexcel.current = null; - } - } - - if (jexcel.current && mouseButton == 1) { - if (e.target.classList.contains("jexcel_selectall")) { - if (jexcel.current) { - jexcel.current.selectAll(); - } - } else if (e.target.classList.contains("jexcel_corner")) { - if (jexcel.current.options.editable == true) { - jexcel.current.selectedCorner = true; - } - } else { - // Header found - if (jexcelTable[1] == 1) { - var columnId = e.target.getAttribute("data-x"); - if (columnId) { - // Update cursor - var info = e.target.getBoundingClientRect(); - if ( - jexcel.current.options.columnResize == true && - info.width - e.offsetX < 6 - ) { - // Resize helper - jexcel.current.resizing = { - mousePosition: e.pageX, - column: columnId, - width: info.width, - }; - - // Border indication - jexcel.current.headers[columnId].classList.add("resizing"); - for (var j = 0; j < jexcel.current.records.length; j++) { - if (jexcel.current.records[j][columnId]) { - jexcel.current.records[j][columnId].classList.add("resizing"); - } - } - } else if ( - jexcel.current.options.columnDrag == true && - info.height - e.offsetY < 6 - ) { - if (jexcel.current.isColMerged(columnId).length) { - console.error( - "Jspreadsheet: This column is part of a merged cell." - ); - } else { - // Reset selection - jexcel.current.resetSelection(); - // Drag helper - jexcel.current.dragging = { - element: e.target, - column: columnId, - destination: columnId, - }; - // Border indication - jexcel.current.headers[columnId].classList.add("dragging"); - for (var j = 0; j < jexcel.current.records.length; j++) { - if (jexcel.current.records[j][columnId]) { - jexcel.current.records[j][columnId].classList.add( - "dragging" - ); - } - } - } - } else { - if (jexcel.current.selectedHeader && (e.shiftKey || e.ctrlKey)) { - var o = jexcel.current.selectedHeader; - var d = columnId; - } else { - // Press to rename - if ( - jexcel.current.selectedHeader == columnId && - jexcel.current.options.allowRenameColumn == true - ) { - jexcel.timeControl = setTimeout(function () { - jexcel.current.setHeader(columnId); - }, 800); - } - - // Keep track of which header was selected first - jexcel.current.selectedHeader = columnId; - - // Update selection single column - var o = columnId; - var d = columnId; - } - - // Update selection - jexcel.current.updateSelectionFromCoords( - o, - 0, - d, - jexcel.current.options.data.length - 1 - ); - } - } else { - if (e.target.parentNode.classList.contains("jexcel_nested")) { - if (e.target.getAttribute("data-column")) { - var column = e.target.getAttribute("data-column").split(","); - var c1 = parseInt(column[0]); - var c2 = parseInt(column[column.length - 1]); - } else { - var c1 = 0; - var c2 = jexcel.current.options.columns.length - 1; - } - jexcel.current.updateSelectionFromCoords( - c1, - 0, - c2, - jexcel.current.options.data.length - 1 - ); - } - } - } else { - jexcel.current.selectedHeader = false; - } - - // Body found - if (jexcelTable[1] == 2) { - var rowId = e.target.getAttribute("data-y"); - - if (e.target.classList.contains("jexcel_row")) { - var info = e.target.getBoundingClientRect(); - if ( - jexcel.current.options.rowResize == true && - info.height - e.offsetY < 6 - ) { - // Resize helper - jexcel.current.resizing = { - element: e.target.parentNode, - mousePosition: e.pageY, - row: rowId, - height: info.height, - }; - // Border indication - e.target.parentNode.classList.add("resizing"); - } else if ( - jexcel.current.options.rowDrag == true && - info.width - e.offsetX < 6 - ) { - if (jexcel.current.isRowMerged(rowId).length) { - console.error( - "Jspreadsheet: This row is part of a merged cell" - ); - } else if ( - jexcel.current.options.search == true && - jexcel.current.results - ) { - console.error( - "Jspreadsheet: Please clear your search before perform this action" - ); - } else { - // Reset selection - jexcel.current.resetSelection(); - // Drag helper - jexcel.current.dragging = { - element: e.target.parentNode, - row: rowId, - destination: rowId, - }; - // Border indication - e.target.parentNode.classList.add("dragging"); - } - } else { - if (jexcel.current.selectedRow && (e.shiftKey || e.ctrlKey)) { - var o = jexcel.current.selectedRow; - var d = rowId; - } else { - // Keep track of which header was selected first - jexcel.current.selectedRow = rowId; - - // Update selection single column - var o = rowId; - var d = rowId; - } - - // Update selection - jexcel.current.updateSelectionFromCoords( - 0, - o, - jexcel.current.options.data[0].length - 1, - d - ); - } - } else { - // Jclose - if ( - e.target.classList.contains("jclose") && - e.target.clientWidth - e.offsetX < 50 && - e.offsetY < 50 - ) { - jexcel.current.closeEditor(jexcel.current.edition[0], true); - } else { - var getCellCoords = function (element) { - var x = element.getAttribute("data-x"); - var y = element.getAttribute("data-y"); - if (x && y) { - return [x, y]; - } else { - if (element.parentNode) { - return getCellCoords(element.parentNode); - } - } - }; - - var position = getCellCoords(e.target); - if (position) { - var columnId = position[0]; - var rowId = position[1]; - // Close edition - if (jexcel.current.edition) { - if ( - jexcel.current.edition[2] != columnId || - jexcel.current.edition[3] != rowId - ) { - jexcel.current.closeEditor(jexcel.current.edition[0], true); - } - } - - if (!jexcel.current.edition) { - // Update cell selection - if (e.shiftKey) { - jexcel.current.updateSelectionFromCoords( - jexcel.current.selectedCell[0], - jexcel.current.selectedCell[1], - columnId, - rowId - ); - } else { - jexcel.current.updateSelectionFromCoords(columnId, rowId); - } - } - - // No full row selected - jexcel.current.selectedHeader = null; - jexcel.current.selectedRow = null; - } - } - } - } else { - jexcel.current.selectedRow = false; - } - - // Pagination - if (e.target.classList.contains("jexcel_page")) { - if (e.target.textContent == "<") { - jexcel.current.page(0); - } else if (e.target.textContent == ">") { - jexcel.current.page(e.target.getAttribute("title") - 1); - } else { - jexcel.current.page(e.target.textContent - 1); - } - } - } - - if (jexcel.current.edition) { - jexcel.isMouseAction = false; - } else { - jexcel.isMouseAction = true; - } - } else { - jexcel.isMouseAction = false; - } - }; - - jexcel.mouseUpControls = function (e) { - if (jexcel.current) { - // Update cell size - if (jexcel.current.resizing) { - // Columns to be updated - if (jexcel.current.resizing.column) { - // New width - var newWidth = - jexcel.current.colgroup[ - jexcel.current.resizing.column - ].getAttribute("width"); - // Columns - var columns = jexcel.current.getSelectedColumns(); - if (columns.length > 1) { - var currentWidth = []; - for (var i = 0; i < columns.length; i++) { - currentWidth.push( - parseInt( - jexcel.current.colgroup[columns[i]].getAttribute("width") - ) - ); - } - // Previous width - var index = columns.indexOf( - parseInt(jexcel.current.resizing.column) - ); - currentWidth[index] = jexcel.current.resizing.width; - jexcel.current.setWidth(columns, newWidth, currentWidth); - } else { - jexcel.current.setWidth( - jexcel.current.resizing.column, - newWidth, - jexcel.current.resizing.width - ); - } - // Remove border - jexcel.current.headers[ - jexcel.current.resizing.column - ].classList.remove("resizing"); - for (var j = 0; j < jexcel.current.records.length; j++) { - if (jexcel.current.records[j][jexcel.current.resizing.column]) { - jexcel.current.records[j][ - jexcel.current.resizing.column - ].classList.remove("resizing"); - } - } - } else { - // Remove Class - jexcel.current.rows[ - jexcel.current.resizing.row - ].children[0].classList.remove("resizing"); - var newHeight = - jexcel.current.rows[jexcel.current.resizing.row].getAttribute( - "height" - ); - jexcel.current.setHeight( - jexcel.current.resizing.row, - newHeight, - jexcel.current.resizing.height - ); - // Remove border - jexcel.current.resizing.element.classList.remove("resizing"); - } - // Reset resizing helper - jexcel.current.resizing = null; - } else if (jexcel.current.dragging) { - // Reset dragging helper - if (jexcel.current.dragging) { - if (jexcel.current.dragging.column) { - // Target - var columnId = e.target.getAttribute("data-x"); - // Remove move style - jexcel.current.headers[ - jexcel.current.dragging.column - ].classList.remove("dragging"); - for (var j = 0; j < jexcel.current.rows.length; j++) { - if (jexcel.current.records[j][jexcel.current.dragging.column]) { - jexcel.current.records[j][ - jexcel.current.dragging.column - ].classList.remove("dragging"); - } - } - for (var i = 0; i < jexcel.current.headers.length; i++) { - jexcel.current.headers[i].classList.remove("dragging-left"); - jexcel.current.headers[i].classList.remove("dragging-right"); - } - // Update position - if (columnId) { - if ( - jexcel.current.dragging.column != - jexcel.current.dragging.destination - ) { - jexcel.current.moveColumn( - jexcel.current.dragging.column, - jexcel.current.dragging.destination - ); - } - } - } else { - if (jexcel.current.dragging.element.nextSibling) { - var position = parseInt( - jexcel.current.dragging.element.nextSibling.getAttribute( - "data-y" - ) - ); - if (jexcel.current.dragging.row < position) { - position -= 1; - } - } else { - var position = parseInt( - jexcel.current.dragging.element.previousSibling.getAttribute( - "data-y" - ) - ); - } - if ( - jexcel.current.dragging.row != jexcel.current.dragging.destination - ) { - jexcel.current.moveRow( - jexcel.current.dragging.row, - position, - true - ); - } - jexcel.current.dragging.element.classList.remove("dragging"); - } - jexcel.current.dragging = null; - } - } else { - // Close any corner selection - if (jexcel.current.selectedCorner) { - jexcel.current.selectedCorner = false; - - // Data to be copied - if (jexcel.current.selection.length > 0) { - // Copy data - jexcel.current.copyData( - jexcel.current.selection[0], - jexcel.current.selection[jexcel.current.selection.length - 1] - ); - - // Remove selection - jexcel.current.removeCopySelection(); - } - } - } - } - - // Clear any time control - if (jexcel.timeControl) { - clearTimeout(jexcel.timeControl); - jexcel.timeControl = null; - } - - // Mouse up - jexcel.isMouseAction = false; - }; - - // Mouse move controls - jexcel.mouseMoveControls = function (e) { - e = e || window.event; - if (e.buttons) { - var mouseButton = e.buttons; - } else if (e.button) { - var mouseButton = e.button; - } else { - var mouseButton = e.which; - } - - if (!mouseButton) { - jexcel.isMouseAction = false; - } - - if (jexcel.current) { - if (jexcel.isMouseAction == true) { - // Resizing is ongoing - if (jexcel.current.resizing) { - if (jexcel.current.resizing.column) { - var width = e.pageX - jexcel.current.resizing.mousePosition; - - if (jexcel.current.resizing.width + width > 0) { - var tempWidth = jexcel.current.resizing.width + width; - jexcel.current.colgroup[ - jexcel.current.resizing.column - ].setAttribute("width", tempWidth); - - jexcel.current.updateCornerPosition(); - } - } else { - var height = e.pageY - jexcel.current.resizing.mousePosition; - - if (jexcel.current.resizing.height + height > 0) { - var tempHeight = jexcel.current.resizing.height + height; - jexcel.current.rows[jexcel.current.resizing.row].setAttribute( - "height", - tempHeight - ); - - jexcel.current.updateCornerPosition(); - } - } - } else if (jexcel.current.dragging) { - if (jexcel.current.dragging.column) { - var columnId = e.target.getAttribute("data-x"); - if (columnId) { - if (jexcel.current.isColMerged(columnId).length) { - console.error( - "Jspreadsheet: This column is part of a merged cell." - ); - } else { - for (var i = 0; i < jexcel.current.headers.length; i++) { - jexcel.current.headers[i].classList.remove("dragging-left"); - jexcel.current.headers[i].classList.remove("dragging-right"); - } - - if (jexcel.current.dragging.column == columnId) { - jexcel.current.dragging.destination = parseInt(columnId); - } else { - if (e.target.clientWidth / 2 > e.offsetX) { - if (jexcel.current.dragging.column < columnId) { - jexcel.current.dragging.destination = - parseInt(columnId) - 1; - } else { - jexcel.current.dragging.destination = parseInt(columnId); - } - jexcel.current.headers[columnId].classList.add( - "dragging-left" - ); - } else { - if (jexcel.current.dragging.column < columnId) { - jexcel.current.dragging.destination = parseInt(columnId); - } else { - jexcel.current.dragging.destination = - parseInt(columnId) + 1; - } - jexcel.current.headers[columnId].classList.add( - "dragging-right" - ); - } - } - } - } - } else { - var rowId = e.target.getAttribute("data-y"); - if (rowId) { - if (jexcel.current.isRowMerged(rowId).length) { - console.error( - "Jspreadsheet: This row is part of a merged cell." - ); - } else { - var target = - e.target.clientHeight / 2 > e.offsetY - ? e.target.parentNode.nextSibling - : e.target.parentNode; - if (jexcel.current.dragging.element != target) { - e.target.parentNode.parentNode.insertBefore( - jexcel.current.dragging.element, - target - ); - jexcel.current.dragging.destination = - Array.prototype.indexOf.call( - jexcel.current.dragging.element.parentNode.children, - jexcel.current.dragging.element - ); - } - } - } - } - } - } else { - var x = e.target.getAttribute("data-x"); - var y = e.target.getAttribute("data-y"); - var rect = e.target.getBoundingClientRect(); - - if (jexcel.current.cursor) { - jexcel.current.cursor.style.cursor = ""; - jexcel.current.cursor = null; - } - - if ( - e.target.parentNode.parentNode && - e.target.parentNode.parentNode.className - ) { - if (e.target.parentNode.parentNode.classList.contains("resizable")) { - if ( - e.target && - x && - !y && - rect.width - (e.clientX - rect.left) < 6 - ) { - jexcel.current.cursor = e.target; - jexcel.current.cursor.style.cursor = "col-resize"; - } else if ( - e.target && - !x && - y && - rect.height - (e.clientY - rect.top) < 6 - ) { - jexcel.current.cursor = e.target; - jexcel.current.cursor.style.cursor = "row-resize"; - } - } - - if (e.target.parentNode.parentNode.classList.contains("draggable")) { - if ( - e.target && - !x && - y && - rect.width - (e.clientX - rect.left) < 6 - ) { - jexcel.current.cursor = e.target; - jexcel.current.cursor.style.cursor = "move"; - } else if ( - e.target && - x && - !y && - rect.height - (e.clientY - rect.top) < 6 - ) { - jexcel.current.cursor = e.target; - jexcel.current.cursor.style.cursor = "move"; - } - } - } - } - } - }; - - jexcel.mouseOverControls = function (e) { - e = e || window.event; - if (e.buttons) { - var mouseButton = e.buttons; - } else if (e.button) { - var mouseButton = e.button; - } else { - var mouseButton = e.which; - } - - if (!mouseButton) { - jexcel.isMouseAction = false; - } - - if (jexcel.current && jexcel.isMouseAction == true) { - // Get elements - var jexcelTable = jexcel.getElement(e.target); - - if (jexcelTable[0]) { - // Avoid cross reference - if (jexcel.current != jexcelTable[0].jexcel) { - if (jexcel.current) { - return false; - } - } - - var columnId = e.target.getAttribute("data-x"); - var rowId = e.target.getAttribute("data-y"); - if (jexcel.current.resizing || jexcel.current.dragging) { - } else { - // Header found - if (jexcelTable[1] == 1) { - if (jexcel.current.selectedHeader) { - var columnId = e.target.getAttribute("data-x"); - var o = jexcel.current.selectedHeader; - var d = columnId; - // Update selection - jexcel.current.updateSelectionFromCoords( - o, - 0, - d, - jexcel.current.options.data.length - 1 - ); - } - } - - // Body found - if (jexcelTable[1] == 2) { - if (e.target.classList.contains("jexcel_row")) { - if (jexcel.current.selectedRow) { - var o = jexcel.current.selectedRow; - var d = rowId; - // Update selection - jexcel.current.updateSelectionFromCoords( - 0, - o, - jexcel.current.options.data[0].length - 1, - d - ); - } - } else { - // Do not select edtion is in progress - if (!jexcel.current.edition) { - if (columnId && rowId) { - if (jexcel.current.selectedCorner) { - jexcel.current.updateCopySelection(columnId, rowId); - } else { - if (jexcel.current.selectedCell) { - jexcel.current.updateSelectionFromCoords( - jexcel.current.selectedCell[0], - jexcel.current.selectedCell[1], - columnId, - rowId - ); - } - } - } - } - } - } - } - } - } - - // Clear any time control - if (jexcel.timeControl) { - clearTimeout(jexcel.timeControl); - jexcel.timeControl = null; - } - }; - - /** - * Double click event handler: controls the double click in the corner, cell edition or column re-ordering. - */ - jexcel.doubleClickControls = function (e) { - // Jexcel is selected - if (jexcel.current) { - // Corner action - if (e.target.classList.contains("jexcel_corner")) { - // Any selected cells - if (jexcel.current.highlighted.length > 0) { - // Copy from this - var x1 = jexcel.current.highlighted[0].getAttribute("data-x"); - var y1 = - parseInt( - jexcel.current.highlighted[ - jexcel.current.highlighted.length - 1 - ].getAttribute("data-y") - ) + 1; - // Until this - var x2 = - jexcel.current.highlighted[ - jexcel.current.highlighted.length - 1 - ].getAttribute("data-x"); - var y2 = jexcel.current.records.length - 1; - // Execute copy - jexcel.current.copyData( - jexcel.current.records[y1][x1], - jexcel.current.records[y2][x2] - ); - } - } else if (e.target.classList.contains("jexcel_column_filter")) { - // Column - var columnId = e.target.getAttribute("data-x"); - // Open filter - jexcel.current.openFilter(columnId); - } else { - // Get table - var jexcelTable = jexcel.getElement(e.target); - - // Double click over header - if ( - jexcelTable[1] == 1 && - jexcel.current.options.columnSorting == true - ) { - // Check valid column header coords - var columnId = e.target.getAttribute("data-x"); - if (columnId) { - jexcel.current.orderBy(columnId); - } - } - - // Double click over body - if (jexcelTable[1] == 2 && jexcel.current.options.editable == true) { - if (!jexcel.current.edition) { - var getCellCoords = function (element) { - if (element.parentNode) { - var x = element.getAttribute("data-x"); - var y = element.getAttribute("data-y"); - if (x && y) { - return element; - } else { - return getCellCoords(element.parentNode); - } - } - }; - var cell = getCellCoords(e.target); - if (cell && cell.classList.contains("highlight")) { - jexcel.current.openEditor(cell); - } - } - } - } - } - }; - - jexcel.copyControls = function (e) { - if (jexcel.current && jexcel.copyControls.enabled) { - if (!jexcel.current.edition) { - jexcel.current.copy(true); - } - } - }; - - jexcel.cutControls = function (e) { - if (jexcel.current) { - if (!jexcel.current.edition) { - jexcel.current.copy(true); - if (jexcel.current.options.editable == true) { - jexcel.current.setValue(jexcel.current.highlighted, ""); - } - } - } - }; - - jexcel.pasteControls = function (e) { - if (jexcel.current && jexcel.current.selectedCell) { - if (!jexcel.current.edition) { - if (jexcel.current.options.editable == true) { - if (e && e.clipboardData) { - jexcel.current.paste( - jexcel.current.selectedCell[0], - jexcel.current.selectedCell[1], - e.clipboardData.getData("text") - ); - e.preventDefault(); - } else if (window.clipboardData) { - jexcel.current.paste( - jexcel.current.selectedCell[0], - jexcel.current.selectedCell[1], - window.clipboardData.getData("text") - ); - } - } - } - } - }; - - jexcel.contextMenuControls = function (e) { - e = e || window.event; - if ("buttons" in e) { - var mouseButton = e.buttons; - } else { - var mouseButton = e.which || e.button; - } - - if (jexcel.current) { - if (jexcel.current.edition) { - e.preventDefault(); - } else if (jexcel.current.options.contextMenu) { - jexcel.current.contextMenu.contextmenu.close(); - - if (jexcel.current) { - var x = e.target.getAttribute("data-x"); - var y = e.target.getAttribute("data-y"); - - if (x || y) { - if ( - x < parseInt(jexcel.current.selectedCell[0]) || - x > parseInt(jexcel.current.selectedCell[2]) || - y < parseInt(jexcel.current.selectedCell[1]) || - y > parseInt(jexcel.current.selectedCell[3]) - ) { - jexcel.current.updateSelectionFromCoords(x, y, x, y); - } - - // Table found - var items = jexcel.current.options.contextMenu( - jexcel.current, - x, - y, - e - ); - // The id is depending on header and body - jexcel.current.contextMenu.contextmenu.open(e, items); - // Avoid the real one - e.preventDefault(); - } - } - } - } - }; - - jexcel.touchStartControls = function (e) { - var jexcelTable = jexcel.getElement(e.target); - - if (jexcelTable[0]) { - if (jexcel.current != jexcelTable[0].jexcel) { - if (jexcel.current) { - jexcel.current.resetSelection(); - } - jexcel.current = jexcelTable[0].jexcel; - } - } else { - if (jexcel.current) { - jexcel.current.resetSelection(); - jexcel.current = null; - } - } - - if (jexcel.current) { - if (!jexcel.current.edition) { - var columnId = e.target.getAttribute("data-x"); - var rowId = e.target.getAttribute("data-y"); - - if (columnId && rowId) { - jexcel.current.updateSelectionFromCoords(columnId, rowId); - - jexcel.timeControl = setTimeout(function () { - // Keep temporary reference to the element - if (jexcel.current.options.columns[columnId].type == "color") { - jexcel.tmpElement = null; - } else { - jexcel.tmpElement = e.target; - } - jexcel.current.openEditor(e.target, false, e); - }, 500); - } - } - } - }; - - jexcel.touchEndControls = function (e) { - // Clear any time control - if (jexcel.timeControl) { - clearTimeout(jexcel.timeControl); - jexcel.timeControl = null; - // Element - if ( - jexcel.tmpElement && - jexcel.tmpElement.children[0].tagName == "INPUT" - ) { - jexcel.tmpElement.children[0].focus(); - } - jexcel.tmpElement = null; - } - }; - - /** - * Jexcel extensions - */ - - jexcel.tabs = function (tabs, result) { - var instances = []; - // Create tab container - if (!tabs.classList.contains("jexcel_tabs")) { - tabs.innerHTML = ""; - tabs.classList.add("jexcel_tabs"); - tabs.jexcel = []; - - var div = document.createElement("div"); - var headers = tabs.appendChild(div); - var div = document.createElement("div"); - var content = tabs.appendChild(div); - } else { - var headers = tabs.children[0]; - var content = tabs.children[1]; - } - - var spreadsheet = []; - var link = []; - for (var i = 0; i < result.length; i++) { - // Spreadsheet container - spreadsheet[i] = document.createElement("div"); - spreadsheet[i].classList.add("jexcel_tab"); - var worksheet = jexcel(spreadsheet[i], result[i]); - content.appendChild(spreadsheet[i]); - instances[i] = tabs.jexcel.push(worksheet); - - // Tab link - link[i] = document.createElement("div"); - link[i].classList.add("jexcel_tab_link"); - link[i].setAttribute("data-spreadsheet", tabs.jexcel.length - 1); - link[i].innerHTML = result[i].sheetName; - link[i].onclick = function () { - for (var j = 0; j < headers.children.length; j++) { - headers.children[j].classList.remove("selected"); - content.children[j].style.display = "none"; - } - var i = this.getAttribute("data-spreadsheet"); - content.children[i].style.display = "block"; - headers.children[i].classList.add("selected"); - }; - headers.appendChild(link[i]); - } - - // First tab - for (var j = 0; j < headers.children.length; j++) { - headers.children[j].classList.remove("selected"); - content.children[j].style.display = "none"; - } - headers.children[headers.children.length - 1].classList.add("selected"); - content.children[headers.children.length - 1].style.display = "block"; - - return instances; - }; - - // Compability to older versions - jexcel.createTabs = jexcel.tabs; - - jexcel.fromSpreadsheet = function (file, __callback) { - var convert = function (workbook) { - var spreadsheets = []; - workbook.SheetNames.forEach(function (sheetName) { - var spreadsheet = {}; - spreadsheet.rows = []; - spreadsheet.columns = []; - spreadsheet.data = []; - spreadsheet.style = {}; - spreadsheet.sheetName = sheetName; - - // Column widths - var temp = workbook.Sheets[sheetName]["!cols"]; - if (temp && temp.length) { - for (var i = 0; i < temp.length; i++) { - spreadsheet.columns[i] = {}; - if (temp[i] && temp[i].wpx) { - spreadsheet.columns[i].width = temp[i].wpx + "px"; - } - } - } - // Rows heights - var temp = workbook.Sheets[sheetName]["!rows"]; - if (temp && temp.length) { - for (var i = 0; i < temp.length; i++) { - if (temp[i] && temp[i].hpx) { - spreadsheet.rows[i] = {}; - spreadsheet.rows[i].height = temp[i].hpx + "px"; - } - } - } - // Merge cells - var temp = workbook.Sheets[sheetName]["!merges"]; - if (temp && temp.length > 0) { - spreadsheet.mergeCells = []; - for (var i = 0; i < temp.length; i++) { - var x1 = temp[i].s.c; - var y1 = temp[i].s.r; - var x2 = temp[i].e.c; - var y2 = temp[i].e.r; - var key = jexcel.getColumnNameFromId([x1, y1]); - spreadsheet.mergeCells[key] = [x2 - x1 + 1, y2 - y1 + 1]; - } - } - // Data container - var max_x = 0; - var max_y = 0; - var temp = Object.keys(workbook.Sheets[sheetName]); - for (var i = 0; i < temp.length; i++) { - if (temp[i].substr(0, 1) != "!") { - var cell = workbook.Sheets[sheetName][temp[i]]; - var info = jexcel.getIdFromColumnName(temp[i], true); - if (!spreadsheet.data[info[1]]) { - spreadsheet.data[info[1]] = []; - } - spreadsheet.data[info[1]][info[0]] = cell.f ? "=" + cell.f : cell.w; - if (max_x < info[0]) { - max_x = info[0]; - } - if (max_y < info[1]) { - max_y = info[1]; - } - // Style - if (cell.style && Object.keys(cell.style).length > 0) { - spreadsheet.style[temp[i]] = cell.style; - } - if (cell.s && cell.s.fgColor) { - if (spreadsheet.style[temp[i]]) { - spreadsheet.style[temp[i]] += ";"; - } - spreadsheet.style[temp[i]] += - "background-color:#" + cell.s.fgColor.rgb; - } - } - } - var numColumns = spreadsheet.columns; - for (var j = 0; j <= max_y; j++) { - for (var i = 0; i <= max_x; i++) { - if (!spreadsheet.data[j]) { - spreadsheet.data[j] = []; - } - if (!spreadsheet.data[j][i]) { - if (numColumns < i) { - spreadsheet.data[j][i] = ""; - } - } - } - } - spreadsheets.push(spreadsheet); - }); - - return spreadsheets; - }; - - var oReq; - oReq = new XMLHttpRequest(); - oReq.open("GET", file, true); - - if (typeof Uint8Array !== "undefined") { - oReq.responseType = "arraybuffer"; - oReq.onload = function (e) { - var arraybuffer = oReq.response; - var data = new Uint8Array(arraybuffer); - var wb = XLSX.read(data, { - type: "array", - cellFormula: true, - cellStyles: true, - }); - __callback(convert(wb)); - }; - } else { - oReq.setRequestHeader("Accept-Charset", "x-user-defined"); - oReq.onreadystatechange = function () { - if (oReq.readyState == 4 && oReq.status == 200) { - var ff = convertResponseBodyToText(oReq.responseBody); - var wb = XLSX.read(ff, { - type: "binary", - cellFormula: true, - cellStyles: true, - }); - __callback(convert(wb)); - } - }; - } - - oReq.send(); - }; - - /** - * Valid international letter - */ - - jexcel.validLetter = function (text) { - var regex = - /([\u0041-\u005A\u0061-\u007A\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC-\u0400-\u04FF']+)/g; - return text.match(regex) ? 1 : 0; - }; - - /** - * Helper injectArray - */ - jexcel.injectArray = function (o, idx, arr) { - return o.slice(0, idx).concat(arr).concat(o.slice(idx)); - }; - - /** - * Get letter based on a number - * - * @param integer i - * @return string letter - */ - jexcel.getColumnName = function (i) { - var letter = ""; - if (i > 701) { - letter += String.fromCharCode(64 + parseInt(i / 676)); - letter += String.fromCharCode(64 + parseInt((i % 676) / 26)); - } else if (i > 25) { - letter += String.fromCharCode(64 + parseInt(i / 26)); - } - letter += String.fromCharCode(65 + (i % 26)); - - return letter; - }; - - /** - * Convert excel like column to jexcel id - * - * @param string id - * @return string id - */ - jexcel.getIdFromColumnName = function (id, arr) { - // Get the letters - var t = /^[a-zA-Z]+/.exec(id); - - if (t) { - // Base 26 calculation - var code = 0; - for (var i = 0; i < t[0].length; i++) { - code += - parseInt(t[0].charCodeAt(i) - 64) * Math.pow(26, t[0].length - 1 - i); - } - code--; - // Make sure jexcel starts on zero - if (code < 0) { - code = 0; - } - - // Number - var number = parseInt(/[0-9]+$/.exec(id)); - if (number > 0) { - number--; - } - - if (arr == true) { - id = [code, number]; - } else { - id = code + "-" + number; - } - } - - return id; - }; - - /** - * Convert jexcel id to excel like column name - * - * @param string id - * @return string id - */ - jexcel.getColumnNameFromId = function (cellId) { - if (!Array.isArray(cellId)) { - cellId = cellId.split("-"); - } - - return ( - jexcel.getColumnName(parseInt(cellId[0])) + (parseInt(cellId[1]) + 1) - ); - }; - - /** - * Verify element inside jexcel table - * - * @param string id - * @return string id - */ - jexcel.getElement = function (element) { - var jexcelSection = 0; - var jexcelElement = 0; - - function path(element) { - if (element.className) { - if (element.classList.contains("jexcel_container")) { - jexcelElement = element; - } - } - - if (element.tagName == "THEAD") { - jexcelSection = 1; - } else if (element.tagName == "TBODY") { - jexcelSection = 2; - } - - if (element.parentNode) { - if (!jexcelElement) { - path(element.parentNode); - } - } - } - - path(element); - - return [jexcelElement, jexcelSection]; - }; - - jexcel.doubleDigitFormat = function (v) { - v = "" + v; - if (v.length == 1) { - v = "0" + v; - } - return v; - }; - - jexcel.createFromTable = function (el, options) { - if (el.tagName != "TABLE") { - console.log("Element is not a table"); - } else { - // Configuration - if (!options) { - options = {}; - } - options.columns = []; - options.data = []; - - // Colgroup - var colgroup = el.querySelectorAll("colgroup > col"); - if (colgroup.length) { - // Get column width - for (var i = 0; i < colgroup.length; i++) { - var width = colgroup[i].style.width; - if (!width) { - var width = colgroup[i].getAttribute("width"); - } - // Set column width - if (width) { - if (!options.columns[i]) { - options.columns[i] = {}; - } - options.columns[i].width = width; - } - } - } - - // Parse header - var parseHeader = function (header) { - // Get width information - var info = header.getBoundingClientRect(); - var width = info.width > 50 ? info.width : 50; - - // Create column option - if (!options.columns[i]) { - options.columns[i] = {}; - } - if (header.getAttribute("data-celltype")) { - options.columns[i].type = header.getAttribute("data-celltype"); - } else { - options.columns[i].type = "text"; - } - options.columns[i].width = width + "px"; - options.columns[i].title = header.innerHTML; - options.columns[i].align = header.style.textAlign || "center"; - - if ((info = header.getAttribute("name"))) { - options.columns[i].name = info; - } - if ((info = header.getAttribute("id"))) { - options.columns[i].id = info; - } - }; - - // Headers - var nested = []; - var headers = el.querySelectorAll(":scope > thead > tr"); - if (headers.length) { - for (var j = 0; j < headers.length - 1; j++) { - var cells = []; - for (var i = 0; i < headers[j].children.length; i++) { - var row = { - title: headers[j].children[i].textContent, - colspan: headers[j].children[i].getAttribute("colspan") || 1, - }; - cells.push(row); - } - nested.push(cells); - } - // Get the last row in the thead - headers = headers[headers.length - 1].children; - // Go though the headers - for (var i = 0; i < headers.length; i++) { - parseHeader(headers[i]); - } - } - - // Content - var rowNumber = 0; - var mergeCells = {}; - var rows = {}; - var style = {}; - var classes = {}; - - var content = el.querySelectorAll(":scope > tr, :scope > tbody > tr"); - for (var j = 0; j < content.length; j++) { - options.data[rowNumber] = []; - if ( - options.parseTableFirstRowAsHeader == true && - !headers.length && - j == 0 - ) { - for (var i = 0; i < content[j].children.length; i++) { - parseHeader(content[j].children[i]); - } - } else { - for (var i = 0; i < content[j].children.length; i++) { - // WickedGrid formula compatibility - var value = content[j].children[i].getAttribute("data-formula"); - if (value) { - if (value.substr(0, 1) != "=") { - value = "=" + value; - } - } else { - var value = content[j].children[i].innerHTML; - } - options.data[rowNumber].push(value); - - // Key - var cellName = jexcel.getColumnNameFromId([i, j]); - - // Classes - var tmp = content[j].children[i].getAttribute("class"); - if (tmp) { - classes[cellName] = tmp; - } - - // Merged cells - var mergedColspan = - parseInt(content[j].children[i].getAttribute("colspan")) || 0; - var mergedRowspan = - parseInt(content[j].children[i].getAttribute("rowspan")) || 0; - if (mergedColspan || mergedRowspan) { - mergeCells[cellName] = [mergedColspan || 1, mergedRowspan || 1]; - } - - // Avoid problems with hidden cells - if ( - (s = - content[j].children[i].style && - content[j].children[i].style.display == "none") - ) { - content[j].children[i].style.display = ""; - } - // Get style - var s = content[j].children[i].getAttribute("style"); - if (s) { - style[cellName] = s; - } - // Bold - if (content[j].children[i].classList.contains("styleBold")) { - if (style[cellName]) { - style[cellName] += "; font-weight:bold;"; - } else { - style[cellName] = "font-weight:bold;"; - } - } - } - - // Row Height - if (content[j].style && content[j].style.height) { - rows[j] = { height: content[j].style.height }; - } - - // Index - rowNumber++; - } - } - - // Nested - if (Object.keys(nested).length > 0) { - options.nestedHeaders = nested; - } - // Style - if (Object.keys(style).length > 0) { - options.style = style; - } - // Merged - if (Object.keys(mergeCells).length > 0) { - options.mergeCells = mergeCells; - } - // Row height - if (Object.keys(rows).length > 0) { - options.rows = rows; - } - // Classes - if (Object.keys(classes).length > 0) { - options.classes = classes; - } - - var content = el.querySelectorAll("tfoot tr"); - if (content.length) { - var footers = []; - for (var j = 0; j < content.length; j++) { - var footer = []; - for (var i = 0; i < content[j].children.length; i++) { - footer.push(content[j].children[i].textContent); - } - footers.push(footer); - } - if (Object.keys(footers).length > 0) { - options.footers = footers; - } - } - // TODO: data-hiddencolumns="3,4" - - // I guess in terms the better column type - if (options.parseTableAutoCellType == true) { - var pattern = []; - for (var i = 0; i < options.columns.length; i++) { - var test = true; - var testCalendar = true; - pattern[i] = []; - for (var j = 0; j < options.data.length; j++) { - var value = options.data[j][i]; - if (!pattern[i][value]) { - pattern[i][value] = 0; - } - pattern[i][value]++; - if (value.length > 25) { - test = false; - } - if (value.length == 10) { - if (!(value.substr(4, 1) == "-" && value.substr(7, 1) == "-")) { - testCalendar = false; - } - } else { - testCalendar = false; - } - } - - var keys = Object.keys(pattern[i]).length; - if (testCalendar) { - options.columns[i].type = "calendar"; - } else if ( - test == true && - keys > 1 && - keys <= parseInt(options.data.length * 0.1) - ) { - options.columns[i].type = "dropdown"; - options.columns[i].source = Object.keys(pattern[i]); - } - } - } - - return options; - } - }; - - // Helpers - jexcel.helpers = (function () { - var component = {}; - - /** - * Get carret position for one element - */ - component.getCaretIndex = function (e) { - if (this.config.root) { - var d = this.config.root; - } else { - var d = window; - } - var pos = 0; - var s = d.getSelection(); - if (s) { - if (s.rangeCount !== 0) { - var r = s.getRangeAt(0); - var p = r.cloneRange(); - p.selectNodeContents(e); - p.setEnd(r.endContainer, r.endOffset); - pos = p.toString().length; - } - } - return pos; - }; - - /** - * Invert keys and values - */ - component.invert = function (o) { - var d = []; - var k = Object.keys(o); - for (var i = 0; i < k.length; i++) { - d[o[k[i]]] = k[i]; - } - return d; - }; - - /** - * Get letter based on a number - * - * @param integer i - * @return string letter - */ - component.getColumnName = function (i) { - var letter = ""; - if (i > 701) { - letter += String.fromCharCode(64 + parseInt(i / 676)); - letter += String.fromCharCode(64 + parseInt((i % 676) / 26)); - } else if (i > 25) { - letter += String.fromCharCode(64 + parseInt(i / 26)); - } - letter += String.fromCharCode(65 + (i % 26)); - - return letter; - }; - - /** - * Get column name from coords - */ - component.getColumnNameFromCoords = function (x, y) { - return component.getColumnName(parseInt(x)) + (parseInt(y) + 1); - }; - - component.getCoordsFromColumnName = function (columnName) { - // Get the letters - var t = /^[a-zA-Z]+/.exec(columnName); - - if (t) { - // Base 26 calculation - var code = 0; - for (var i = 0; i < t[0].length; i++) { - code += - parseInt(t[0].charCodeAt(i) - 64) * - Math.pow(26, t[0].length - 1 - i); - } - code--; - // Make sure jspreadsheet starts on zero - if (code < 0) { - code = 0; - } - - // Number - var number = parseInt(/[0-9]+$/.exec(columnName)) || null; - if (number > 0) { - number--; - } - - return [code, number]; - } - }; - - /** - * Extract json configuration from a TABLE DOM tag - */ - component.createFromTable = function () {}; - - /** - * Helper injectArray - */ - component.injectArray = function (o, idx, arr) { - return o.slice(0, idx).concat(arr).concat(o.slice(idx)); - }; - - /** - * Parse CSV string to JS array - */ - component.parseCSV = function (str, delimiter) { - // user-supplied delimeter or default comma - delimiter = delimiter || ","; - - // Final data - var col = 0; - var row = 0; - var num = 0; - var data = [[]]; - var limit = 0; - var flag = null; - var inside = false; - var closed = false; - - // Go over all chars - for (var i = 0; i < str.length; i++) { - // Create new row - if (!data[row]) { - data[row] = []; - } - // Create new column - if (!data[row][col]) { - data[row][col] = ""; - } - - // Ignore - if (str[i] == "\r") { - continue; - } - - // New row - if ( - (str[i] == "\n" || str[i] == delimiter) && - (inside == false || closed == true || !flag) - ) { - // Restart flags - flag = null; - inside = false; - closed = false; - - if (data[row][col][0] == '"') { - var val = data[row][col].trim(); - if (val[val.length - 1] == '"') { - data[row][col] = val.substr(1, val.length - 2); - } - } - - // Go to the next cell - if (str[i] == "\n") { - // New line - col = 0; - row++; - } else { - // New column - col++; - if (col > limit) { - // Keep the reference of max column - limit = col; - } - } - } else { - // Inside quotes - if (str[i] == '"') { - inside = !inside; - } - - if (flag === null) { - flag = inside; - if (flag == true) { - continue; - } - } else if (flag === true && !closed) { - if (str[i] == '"') { - if (str[i + 1] == '"') { - inside = true; - data[row][col] += str[i]; - i++; - } else { - closed = true; - } - continue; - } - } - - data[row][col] += str[i]; - } - } - - // Make sure a square matrix is generated - for (var j = 0; j < data.length; j++) { - for (var i = 0; i <= limit; i++) { - if (data[j][i] === undefined) { - data[j][i] = ""; - } - } - } - - return data; - }; - - return component; - })(); - - /** - * Jquery Support - */ - if (typeof jQuery != "undefined") { - (function ($) { - $.fn.jspreadsheet = $.fn.jexcel = function (mixed) { - var spreadsheetContainer = $(this).get(0); - if (!spreadsheetContainer.jexcel) { - return jexcel($(this).get(0), arguments[0]); - } else { - if (Array.isArray(spreadsheetContainer.jexcel)) { - return spreadsheetContainer.jexcel[mixed][arguments[1]].apply( - this, - Array.prototype.slice.call(arguments, 2) - ); - } else { - return spreadsheetContainer.jexcel[mixed].apply( - this, - Array.prototype.slice.call(arguments, 1) - ); - } - } - }; - })(jQuery); - } - - return jexcel; -}); diff --git a/assets/vendor/jsuites.js b/assets/vendor/jsuites.js deleted file mode 100644 index b19916d..0000000 --- a/assets/vendor/jsuites.js +++ /dev/null @@ -1,12414 +0,0 @@ -/** - * (c) jSuites Javascript Web Components - * - * Website: https://jsuites.net - * Description: Create amazing web based applications. - * - * MIT License - * - */ -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : - typeof define === 'function' && define.amd ? define(factory) : - global.jSuites = factory(); -}(this, (function () { - - 'use strict'; - -var jSuites = {}; - -var Version = '4.17.5'; - -var Events = function() { - - document.jsuitesComponents = []; - - var find = function(DOMElement, component) { - if (DOMElement[component.type] && DOMElement[component.type] == component) { - return true; - } - if (DOMElement.component && DOMElement.component == component) { - return true; - } - if (DOMElement.parentNode) { - return find(DOMElement.parentNode, component); - } - return false; - } - - var isOpened = function(e) { - if (document.jsuitesComponents && document.jsuitesComponents.length > 0) { - for (var i = 0; i < document.jsuitesComponents.length; i++) { - if (document.jsuitesComponents[i] && ! find(e, document.jsuitesComponents[i])) { - document.jsuitesComponents[i].close(); - } - } - } - } - - // Width of the border - var cornerSize = 15; - - // Current element - var element = null; - - // Controllers - var editorAction = false; - - // Event state - var state = { - x: null, - y: null, - } - - // Tooltip element - var tooltip = document.createElement('div') - tooltip.classList.add('jtooltip'); - - // Events - var mouseDown = function(e) { - // Check if this is the floating - var item = jSuites.findElement(e.target, 'jpanel'); - // Jfloating found - if (item && ! item.classList.contains("readonly")) { - // Add focus to the chart container - item.focus(); - // Keep the tracking information - var rect = e.target.getBoundingClientRect(); - editorAction = { - e: item, - x: e.clientX, - y: e.clientY, - w: rect.width, - h: rect.height, - d: item.style.cursor, - resizing: item.style.cursor ? true : false, - actioned: false, - } - - // Make sure width and height styling is OK - if (! item.style.width) { - item.style.width = rect.width + 'px'; - } - - if (! item.style.height) { - item.style.height = rect.height + 'px'; - } - - // Remove any selection from the page - var s = window.getSelection(); - if (s.rangeCount) { - for (var i = 0; i < s.rangeCount; i++) { - s.removeRange(s.getRangeAt(i)); - } - } - - e.preventDefault(); - e.stopPropagation(); - } else { - // No floating action found - editorAction = false; - } - - // Verify current components tracking - if (e.changedTouches && e.changedTouches[0]) { - var x = e.changedTouches[0].clientX; - var y = e.changedTouches[0].clientY; - } else { - var x = e.clientX; - var y = e.clientY; - } - - // Which component I am clicking - var path = e.path || (e.composedPath && e.composedPath()); - - // If path available get the first element in the chain - if (path) { - element = path[0]; - } else { - // Try to guess using the coordinates - if (e.target && e.target.shadowRoot) { - var d = e.target.shadowRoot; - } else { - var d = document; - } - // Get the first target element - element = d.elementFromPoint(x, y); - } - - isOpened(element); - } - - var mouseUp = function(e) { - if (editorAction && editorAction.e) { - if (typeof(editorAction.e.refresh) == 'function' && state.actioned) { - editorAction.e.refresh(); - } - editorAction.e.style.cursor = ''; - } - - // Reset - state = { - x: null, - y: null, - } - - editorAction = false; - } - - var mouseMove = function(e) { - if (editorAction) { - var x = e.clientX || e.pageX; - var y = e.clientY || e.pageY; - - // Action on going - if (! editorAction.resizing) { - if (state.x == null && state.y == null) { - state.x = x; - state.y = y; - } - - var dx = x - state.x; - var dy = y - state.y; - var top = editorAction.e.offsetTop + dy; - var left = editorAction.e.offsetLeft + dx; - - // Update position - editorAction.e.style.top = top + 'px'; - editorAction.e.style.left = left + 'px'; - editorAction.e.style.cursor = "move"; - - state.x = x; - state.y = y; - - - // Update element - if (typeof(editorAction.e.refresh) == 'function') { - state.actioned = true; - editorAction.e.refresh('position', top, left); - } - } else { - var width = null; - var height = null; - - if (editorAction.d == 'e-resize' || editorAction.d == 'ne-resize' || editorAction.d == 'se-resize') { - // Update width - width = editorAction.w + (x - editorAction.x); - editorAction.e.style.width = width + 'px'; - - // Update Height - if (e.shiftKey) { - var newHeight = (x - editorAction.x) * (editorAction.h / editorAction.w); - height = editorAction.h + newHeight; - editorAction.e.style.height = height + 'px'; - } else { - var newHeight = false; - } - } - - if (! newHeight) { - if (editorAction.d == 's-resize' || editorAction.d == 'se-resize' || editorAction.d == 'sw-resize') { - height = editorAction.h + (y - editorAction.y); - editorAction.e.style.height = height + 'px'; - } - } - - // Update element - if (typeof(editorAction.e.refresh) == 'function') { - state.actioned = true; - editorAction.e.refresh('dimensions', width, height); - } - } - } else { - // Resizing action - var item = jSuites.findElement(e.target, 'jpanel'); - // Found eligible component - if (item) { - if (item.getAttribute('tabindex')) { - var rect = item.getBoundingClientRect(); - if (e.clientY - rect.top < cornerSize) { - if (rect.width - (e.clientX - rect.left) < cornerSize) { - item.style.cursor = 'ne-resize'; - } else if (e.clientX - rect.left < cornerSize) { - item.style.cursor = 'nw-resize'; - } else { - item.style.cursor = 'n-resize'; - } - } else if (rect.height - (e.clientY - rect.top) < cornerSize) { - if (rect.width - (e.clientX - rect.left) < cornerSize) { - item.style.cursor = 'se-resize'; - } else if (e.clientX - rect.left < cornerSize) { - item.style.cursor = 'sw-resize'; - } else { - item.style.cursor = 's-resize'; - } - } else if (rect.width - (e.clientX - rect.left) < cornerSize) { - item.style.cursor = 'e-resize'; - } else if (e.clientX - rect.left < cornerSize) { - item.style.cursor = 'w-resize'; - } else { - item.style.cursor = ''; - } - } - } - } - } - - var mouseOver = function(e) { - var message = e.target.getAttribute('data-tooltip'); - if (message) { - // Instructions - tooltip.innerText = message; - - // Position - if (e.changedTouches && e.changedTouches[0]) { - var x = e.changedTouches[0].clientX; - var y = e.changedTouches[0].clientY; - } else { - var x = e.clientX; - var y = e.clientY; - } - - tooltip.style.top = y + 'px'; - tooltip.style.left = x + 'px'; - document.body.appendChild(tooltip); - } else if (tooltip.innerText) { - tooltip.innerText = ''; - document.body.removeChild(tooltip); - } - } - - var dblClick = function(e) { - var item = jSuites.findElement(e.target, 'jpanel'); - if (item && typeof(item.dblclick) == 'function') { - // Create edition - item.dblclick(e); - } - } - - var contextMenu = function(e) { - var item = document.activeElement; - if (item && typeof(item.contextmenu) == 'function') { - // Create edition - item.contextmenu(e); - - e.preventDefault(); - e.stopImmediatePropagation(); - } else { - // Search for possible context menus - item = jSuites.findElement(e.target, function(o) { - return o.tagName && o.getAttribute('aria-contextmenu-id'); - }); - - if (item) { - var o = document.querySelector('#' + item); - if (! o) { - console.error('JSUITES: contextmenu id not found: ' + item); - } else { - o.contextmenu.open(e); - e.preventDefault(); - e.stopImmediatePropagation(); - } - } - } - } - - var keyDown = function(e) { - var item = document.activeElement; - if (item) { - if (e.key == "Delete" && typeof(item.delete) == 'function') { - item.delete(); - e.preventDefault(); - e.stopImmediatePropagation(); - } - } - - if (document.jsuitesComponents && document.jsuitesComponents.length) { - if (item = document.jsuitesComponents[document.jsuitesComponents.length - 1]) { - if (e.key == "Escape" && typeof(item.isOpened) == 'function' && typeof(item.close) == 'function') { - if (item.isOpened()) { - item.close(); - e.preventDefault(); - e.stopImmediatePropagation(); - } - } - } - } - } - - document.addEventListener('mouseup', mouseUp); - document.addEventListener("mousedown", mouseDown); - document.addEventListener('mousemove', mouseMove); - document.addEventListener('mouseover', mouseOver); - document.addEventListener('dblclick', dblClick); - document.addEventListener('keydown', keyDown); - document.addEventListener('contextmenu', contextMenu); -} - -/** - * Global jsuites event - */ -if (typeof(document) !== "undefined" && ! document.jsuitesComponents) { - Events(); -} - -jSuites.version = Version; - -jSuites.setExtensions = function(o) { - if (typeof(o) == 'object') { - var k = Object.keys(o); - for (var i = 0; i < k.length; i++) { - jSuites[k[i]] = o[k[i]]; - } - } -} - -jSuites.tracking = function(component, state) { - if (state == true) { - document.jsuitesComponents = document.jsuitesComponents.filter(function(v) { - return v !== null; - }); - - // Start after all events - setTimeout(function() { - document.jsuitesComponents.push(component); - }, 0); - - } else { - var index = document.jsuitesComponents.indexOf(component); - if (index >= 0) { - document.jsuitesComponents.splice(index, 1); - } - } -} - -/** - * Get or set a property from a JSON from a string. - */ -jSuites.path = function(str, val) { - str = str.split('.'); - if (str.length) { - var o = this; - var p = null; - while (str.length > 1) { - // Get the property - p = str.shift(); - // Check if the property exists - if (o.hasOwnProperty(p)) { - o = o[p]; - } else { - // Property does not exists - if (val === undefined) { - return undefined; - } else { - // Create the property - o[p] = {}; - // Next property - o = o[p]; - } - } - } - // Get the property - p = str.shift(); - // Set or get the value - if (val !== undefined) { - o[p] = val; - // Success - return true; - } else { - // Return the value - if (o) { - return o[p]; - } - } - } - // Something went wrong - return false; -} - -// Update dictionary -jSuites.setDictionary = function(d) { - if (! document.dictionary) { - document.dictionary = {} - } - // Replace the key into the dictionary and append the new ones - var k = Object.keys(d); - for (var i = 0; i < k.length; i++) { - document.dictionary[k[i]] = d[k[i]]; - } - - // Translations - var t = null; - for (var i = 0; i < jSuites.calendar.weekdays.length; i++) { - t = jSuites.translate(jSuites.calendar.weekdays[i]); - if (jSuites.calendar.weekdays[i]) { - jSuites.calendar.weekdays[i] = t; - jSuites.calendar.weekdaysShort[i] = t.substr(0,3); - } - } - for (var i = 0; i < jSuites.calendar.months.length; i++) { - t = jSuites.translate(jSuites.calendar.months[i]); - if (t) { - jSuites.calendar.months[i] = t; - jSuites.calendar.monthsShort[i] = t.substr(0,3); - } - } -} - -// Translate -jSuites.translate = function(t) { - if (typeof(document) !== "undefined" && document.dictionary) { - return document.dictionary[t] || t; - } else { - return t; - } -} - -jSuites.ajax = (function(options, complete) { - if (Array.isArray(options)) { - // Create multiple request controller - var multiple = { - instance: [], - complete: complete, - } - - if (options.length > 0) { - for (var i = 0; i < options.length; i++) { - options[i].multiple = multiple; - multiple.instance.push(jSuites.ajax(options[i])); - } - } - - return multiple; - } - - if (! options.data) { - options.data = {}; - } - - if (options.type) { - options.method = options.type; - } - - // Default method - if (! options.method) { - options.method = 'GET'; - } - - // Default type - if (! options.dataType) { - options.dataType = 'json'; - } - - if (options.data) { - // Parse object to variables format - var parseData = function (value, key) { - var vars = []; - if (value) { - var keys = Object.keys(value); - if (keys.length) { - for (var i = 0; i < keys.length; i++) { - if (key) { - var k = key + '[' + keys[i] + ']'; - } else { - var k = keys[i]; - } - - if (value[k] instanceof FileList) { - vars[k] = value[keys[i]]; - } else if (value[keys[i]] === null || value[keys[i]] === undefined) { - vars[k] = ''; - } else if (typeof(value[keys[i]]) == 'object') { - var r = parseData(value[keys[i]], k); - var o = Object.keys(r); - for (var j = 0; j < o.length; j++) { - vars[o[j]] = r[o[j]]; - } - } else { - vars[k] = value[keys[i]]; - } - } - } - } - - return vars; - } - - var d = parseData(options.data); - var k = Object.keys(d); - - // Data form - if (options.method == 'GET') { - if (k.length) { - var data = []; - for (var i = 0; i < k.length; i++) { - data.push(k[i] + '=' + encodeURIComponent(d[k[i]])); - } - - if (options.url.indexOf('?') < 0) { - options.url += '?'; - } - options.url += data.join('&'); - } - } else { - var data = new FormData(); - for (var i = 0; i < k.length; i++) { - if (d[k[i]] instanceof FileList) { - if (d[k[i]].length) { - for (var j = 0; j < d[k[i]].length; j++) { - data.append(k[i], d[k[i]][j], d[k[i]][j].name); - } - } - } else { - data.append(k[i], d[k[i]]); - } - } - } - } - - var httpRequest = new XMLHttpRequest(); - httpRequest.open(options.method, options.url, true); - httpRequest.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); - - // Content type - if (options.contentType) { - httpRequest.setRequestHeader('Content-Type', options.contentType); - } - - // Headers - if (options.method == 'POST') { - httpRequest.setRequestHeader('Accept', 'application/json'); - } else { - if (options.dataType == 'blob') { - httpRequest.responseType = "blob"; - } else { - if (! options.contentType) { - if (options.dataType == 'json') { - httpRequest.setRequestHeader('Content-Type', 'text/json'); - } else if (options.dataType == 'html') { - httpRequest.setRequestHeader('Content-Type', 'text/html'); - } - } - } - } - - // No cache - if (options.cache != true) { - httpRequest.setRequestHeader('pragma', 'no-cache'); - httpRequest.setRequestHeader('cache-control', 'no-cache'); - } - - // Authentication - if (options.withCredentials == true) { - httpRequest.withCredentials = true - } - - // Before send - if (typeof(options.beforeSend) == 'function') { - options.beforeSend(httpRequest); - } - - // Before send - if (typeof(jSuites.ajax.beforeSend) == 'function') { - jSuites.ajax.beforeSend(httpRequest); - } - - if (document.ajax && typeof(document.ajax.beforeSend) == 'function') { - document.ajax.beforeSend(httpRequest); - } - - httpRequest.onload = function() { - if (httpRequest.status === 200) { - if (options.dataType == 'json') { - try { - var result = JSON.parse(httpRequest.responseText); - - if (options.success && typeof(options.success) == 'function') { - options.success(result); - } - } catch(err) { - if (options.error && typeof(options.error) == 'function') { - options.error(err, result); - } - } - } else { - if (options.dataType == 'blob') { - var result = httpRequest.response; - } else { - var result = httpRequest.responseText; - } - - if (options.success && typeof(options.success) == 'function') { - options.success(result); - } - } - } else { - if (options.error && typeof(options.error) == 'function') { - options.error(httpRequest.responseText, httpRequest.status); - } - } - - // Global queue - if (jSuites.ajax.queue && jSuites.ajax.queue.length > 0) { - jSuites.ajax.send(jSuites.ajax.queue.shift()); - } - - // Global complete method - if (jSuites.ajax.requests && jSuites.ajax.requests.length) { - // Get index of this request in the container - var index = jSuites.ajax.requests.indexOf(httpRequest); - // Remove from the ajax requests container - jSuites.ajax.requests.splice(index, 1); - // Deprected: Last one? - if (! jSuites.ajax.requests.length) { - // Object event - if (options.complete && typeof(options.complete) == 'function') { - options.complete(result); - } - } - // Group requests - if (options.group) { - if (jSuites.ajax.oncomplete && typeof(jSuites.ajax.oncomplete[options.group]) == 'function') { - if (! jSuites.ajax.pending(options.group)) { - jSuites.ajax.oncomplete[options.group](); - jSuites.ajax.oncomplete[options.group] = null; - } - } - } - // Multiple requests controller - if (options.multiple && options.multiple.instance) { - // Get index of this request in the container - var index = options.multiple.instance.indexOf(httpRequest); - // Remove from the ajax requests container - options.multiple.instance.splice(index, 1); - // If this is the last one call method complete - if (! options.multiple.instance.length) { - if (options.multiple.complete && typeof(options.multiple.complete) == 'function') { - options.multiple.complete(result); - } - } - } - } - } - - // Keep the options - httpRequest.options = options; - // Data - httpRequest.data = data; - - // Queue - if (options.queue == true && jSuites.ajax.requests.length > 0) { - jSuites.ajax.queue.push(httpRequest); - } else { - jSuites.ajax.send(httpRequest) - } - - return httpRequest; -}); - -jSuites.ajax.send = function(httpRequest) { - if (httpRequest.data) { - if (Array.isArray(httpRequest.data)) { - httpRequest.send(httpRequest.data.join('&')); - } else { - httpRequest.send(httpRequest.data); - } - } else { - httpRequest.send(); - } - - jSuites.ajax.requests.push(httpRequest); -} - -jSuites.ajax.exists = function(url, __callback) { - var http = new XMLHttpRequest(); - http.open('HEAD', url, false); - http.send(); - if (http.status) { - __callback(http.status); - } -} - -jSuites.ajax.pending = function(group) { - var n = 0; - var o = jSuites.ajax.requests; - if (o && o.length) { - for (var i = 0; i < o.length; i++) { - if (! group || group == o[i].options.group) { - n++ - } - } - } - return n; -} - -jSuites.ajax.oncomplete = {}; -jSuites.ajax.requests = []; -jSuites.ajax.queue = []; - -jSuites.alert = function(message) { - if (jSuites.getWindowWidth() < 800 && jSuites.dialog) { - jSuites.dialog.open({ - title:'Alert', - message:message, - }); - } else { - alert(message); - } -} - -jSuites.animation = {}; - -jSuites.animation.slideLeft = function(element, direction, done) { - if (direction == true) { - element.classList.add('slide-left-in'); - setTimeout(function() { - element.classList.remove('slide-left-in'); - if (typeof(done) == 'function') { - done(); - } - }, 400); - } else { - element.classList.add('slide-left-out'); - setTimeout(function() { - element.classList.remove('slide-left-out'); - if (typeof(done) == 'function') { - done(); - } - }, 400); - } -} - -jSuites.animation.slideRight = function(element, direction, done) { - if (direction == true) { - element.classList.add('slide-right-in'); - setTimeout(function() { - element.classList.remove('slide-right-in'); - if (typeof(done) == 'function') { - done(); - } - }, 400); - } else { - element.classList.add('slide-right-out'); - setTimeout(function() { - element.classList.remove('slide-right-out'); - if (typeof(done) == 'function') { - done(); - } - }, 400); - } -} - -jSuites.animation.slideTop = function(element, direction, done) { - if (direction == true) { - element.classList.add('slide-top-in'); - setTimeout(function() { - element.classList.remove('slide-top-in'); - if (typeof(done) == 'function') { - done(); - } - }, 400); - } else { - element.classList.add('slide-top-out'); - setTimeout(function() { - element.classList.remove('slide-top-out'); - if (typeof(done) == 'function') { - done(); - } - }, 400); - } -} - -jSuites.animation.slideBottom = function(element, direction, done) { - if (direction == true) { - element.classList.add('slide-bottom-in'); - setTimeout(function() { - element.classList.remove('slide-bottom-in'); - if (typeof(done) == 'function') { - done(); - } - }, 400); - } else { - element.classList.add('slide-bottom-out'); - setTimeout(function() { - element.classList.remove('slide-bottom-out'); - if (typeof(done) == 'function') { - done(); - } - }, 100); - } -} - -jSuites.animation.fadeIn = function(element, done) { - element.style.display = ''; - element.classList.add('fade-in'); - setTimeout(function() { - element.classList.remove('fade-in'); - if (typeof(done) == 'function') { - done(); - } - }, 2000); -} - -jSuites.animation.fadeOut = function(element, done) { - element.classList.add('fade-out'); - setTimeout(function() { - element.style.display = 'none'; - element.classList.remove('fade-out'); - if (typeof(done) == 'function') { - done(); - } - }, 1000); -} - -jSuites.calendar = (function(el, options) { - // Already created, update options - if (el.calendar) { - return el.calendar.setOptions(options, true); - } - - // New instance - var obj = { type:'calendar' }; - obj.options = {}; - - // Date - obj.date = null; - - /** - * Update options - */ - obj.setOptions = function(options, reset) { - // Default configuration - var defaults = { - // Render type: [ default | year-month-picker ] - type: 'default', - // Restrictions - validRange: null, - // Starting weekday - 0 for sunday, 6 for saturday - startingDay: null, - // Date format - format: 'DD/MM/YYYY', - // Allow keyboard date entry - readonly: true, - // Today is default - today: false, - // Show timepicker - time: false, - // Show the reset button - resetButton: true, - // Placeholder - placeholder: '', - // Translations can be done here - months: jSuites.calendar.monthsShort, - monthsFull: jSuites.calendar.months, - weekdays: jSuites.calendar.weekdays, - textDone: jSuites.translate('Done'), - textReset: jSuites.translate('Reset'), - textUpdate: jSuites.translate('Update'), - // Value - value: null, - // Fullscreen (this is automatic set for screensize < 800) - fullscreen: false, - // Create the calendar closed as default - opened: false, - // Events - onopen: null, - onclose: null, - onchange: null, - onupdate: null, - // Internal mode controller - mode: null, - position: null, - // Data type - dataType: null, - // Controls - controls: true, - } - - // Loop through our object - for (var property in defaults) { - if (options && options.hasOwnProperty(property)) { - obj.options[property] = options[property]; - } else { - if (typeof(obj.options[property]) == 'undefined' || reset === true) { - obj.options[property] = defaults[property]; - } - } - } - - // Reset button - if (obj.options.resetButton == false) { - calendarReset.style.display = 'none'; - } else { - calendarReset.style.display = ''; - } - - // Readonly - if (obj.options.readonly) { - el.setAttribute('readonly', 'readonly'); - } else { - el.removeAttribute('readonly'); - } - - // Placeholder - if (obj.options.placeholder) { - el.setAttribute('placeholder', obj.options.placeholder); - } else { - el.removeAttribute('placeholder'); - } - - if (jSuites.isNumeric(obj.options.value) && obj.options.value > 0) { - obj.options.value = jSuites.calendar.numToDate(obj.options.value); - // Data type numeric - obj.options.dataType = 'numeric'; - } - - // Texts - calendarReset.innerHTML = obj.options.textReset; - calendarConfirm.innerHTML = obj.options.textDone; - calendarControlsUpdateButton.innerHTML = obj.options.textUpdate; - - // Define mask - el.setAttribute('data-mask', obj.options.format.toLowerCase()); - - // Value - if (! obj.options.value && obj.options.today) { - var value = jSuites.calendar.now(); - } else { - var value = obj.options.value; - } - - // Set internal date - if (value) { - // Force the update - obj.options.value = null; - // New value - obj.setValue(value); - } - - return obj; - } - - /** - * Open the calendar - */ - obj.open = function (value) { - if (! calendar.classList.contains('jcalendar-focus')) { - if (! calendar.classList.contains('jcalendar-inline')) { - // Current - jSuites.calendar.current = obj; - // Start tracking - jSuites.tracking(obj, true); - // Create the days - obj.getDays(); - // Render months - if (obj.options.type == 'year-month-picker') { - obj.getMonths(); - } - // Get time - if (obj.options.time) { - calendarSelectHour.value = obj.date[3]; - calendarSelectMin.value = obj.date[4]; - } - - // Show calendar - calendar.classList.add('jcalendar-focus'); - - // Get the position of the corner helper - if (jSuites.getWindowWidth() < 800 || obj.options.fullscreen) { - calendar.classList.add('jcalendar-fullsize'); - // Animation - jSuites.animation.slideBottom(calendarContent, 1); - } else { - calendar.classList.remove('jcalendar-fullsize'); - - var rect = el.getBoundingClientRect(); - var rectContent = calendarContent.getBoundingClientRect(); - - if (obj.options.position) { - calendarContainer.style.position = 'fixed'; - if (window.innerHeight < rect.bottom + rectContent.height) { - calendarContainer.style.top = (rect.top - (rectContent.height + 2)) + 'px'; - } else { - calendarContainer.style.top = (rect.top + rect.height + 2) + 'px'; - } - calendarContainer.style.left = rect.left + 'px'; - } else { - if (window.innerHeight < rect.bottom + rectContent.height) { - var d = -1 * (rect.height + rectContent.height + 2); - if (d + rect.top < 0) { - d = -1 * (rect.top + rect.height); - } - calendarContainer.style.top = d + 'px'; - } else { - calendarContainer.style.top = 2 + 'px'; - } - - if (window.innerWidth < rect.left + rectContent.width) { - var d = window.innerWidth - (rect.left + rectContent.width + 20); - calendarContainer.style.left = d + 'px'; - } else { - calendarContainer.style.left = '0px'; - } - } - } - - // Events - if (typeof(obj.options.onopen) == 'function') { - obj.options.onopen(el); - } - } - } - } - - obj.close = function (ignoreEvents, update) { - if (calendar.classList.contains('jcalendar-focus')) { - if (update !== false) { - var element = calendar.querySelector('.jcalendar-selected'); - - if (typeof(update) == 'string') { - var value = update; - } else if (! element || element.classList.contains('jcalendar-disabled')) { - var value = obj.options.value - } else { - var value = obj.getValue(); - } - - obj.setValue(value); - } - - // Events - if (! ignoreEvents && typeof(obj.options.onclose) == 'function') { - obj.options.onclose(el); - } - // Hide - calendar.classList.remove('jcalendar-focus'); - // Stop tracking - jSuites.tracking(obj, false); - // Current - jSuites.calendar.current = null; - } - - return obj.options.value; - } - - obj.prev = function() { - // Check if the visualization is the days picker or years picker - if (obj.options.mode == 'years') { - obj.date[0] = obj.date[0] - 12; - - // Update picker table of days - obj.getYears(); - } else if (obj.options.mode == 'months') { - obj.date[0] = parseInt(obj.date[0]) - 1; - // Update picker table of months - obj.getMonths(); - } else { - // Go to the previous month - if (obj.date[1] < 2) { - obj.date[0] = obj.date[0] - 1; - obj.date[1] = 12; - } else { - obj.date[1] = obj.date[1] - 1; - } - - // Update picker table of days - obj.getDays(); - } - } - - obj.next = function() { - // Check if the visualization is the days picker or years picker - if (obj.options.mode == 'years') { - obj.date[0] = parseInt(obj.date[0]) + 12; - - // Update picker table of days - obj.getYears(); - } else if (obj.options.mode == 'months') { - obj.date[0] = parseInt(obj.date[0]) + 1; - // Update picker table of months - obj.getMonths(); - } else { - // Go to the previous month - if (obj.date[1] > 11) { - obj.date[0] = parseInt(obj.date[0]) + 1; - obj.date[1] = 1; - } else { - obj.date[1] = parseInt(obj.date[1]) + 1; - } - - // Update picker table of days - obj.getDays(); - } - } - - /** - * Set today - */ - obj.setToday = function() { - // Today - var value = new Date().toISOString().substr(0, 10); - // Change value - obj.setValue(value); - // Value - return value; - } - - obj.setValue = function(val) { - if (! val) { - val = '' + val; - } - // Values - var newValue = val; - var oldValue = obj.options.value; - - if (oldValue != newValue) { - // Set label - if (! newValue) { - obj.date = null; - var val = ''; - el.classList.remove('jcalendar_warning'); - el.title = ''; - } else { - var value = obj.setLabel(newValue, obj.options); - var date = newValue.split(' '); - if (! date[1]) { - date[1] = '00:00:00'; - } - var time = date[1].split(':') - var date = date[0].split('-'); - var y = parseInt(date[0]); - var m = parseInt(date[1]); - var d = parseInt(date[2]); - var h = parseInt(time[0]); - var i = parseInt(time[1]); - obj.date = [ y, m, d, h, i, 0 ]; - var val = obj.setLabel(newValue, obj.options); - - // Current selection day - var current = jSuites.calendar.now(new Date(y, m-1, d), true); - - // Available ranges - if (obj.options.validRange) { - if (! obj.options.validRange[0] || current >= obj.options.validRange[0]) { - var test1 = true; - } else { - var test1 = false; - } - - if (! obj.options.validRange[1] || current <= obj.options.validRange[1]) { - var test2 = true; - } else { - var test2 = false; - } - - if (! (test1 && test2)) { - el.classList.add('jcalendar_warning'); - el.title = jSuites.translate('Date outside the valid range'); - } else { - el.classList.remove('jcalendar_warning'); - el.title = ''; - } - } else { - el.classList.remove('jcalendar_warning'); - el.title = ''; - } - } - - // New value - obj.options.value = newValue; - - if (typeof(obj.options.onchange) == 'function') { - obj.options.onchange(el, newValue, oldValue); - } - - // Lemonade JS - if (el.value != val) { - el.value = val; - if (typeof(el.oninput) == 'function') { - el.oninput({ - type: 'input', - target: el, - value: el.value - }); - } - } - } - - obj.getDays(); - // Render months - if (obj.options.type == 'year-month-picker') { - obj.getMonths(); - } - } - - obj.getValue = function() { - if (obj.date) { - if (obj.options.time) { - return jSuites.two(obj.date[0]) + '-' + jSuites.two(obj.date[1]) + '-' + jSuites.two(obj.date[2]) + ' ' + jSuites.two(obj.date[3]) + ':' + jSuites.two(obj.date[4]) + ':' + jSuites.two(0); - } else { - return jSuites.two(obj.date[0]) + '-' + jSuites.two(obj.date[1]) + '-' + jSuites.two(obj.date[2]) + ' ' + jSuites.two(0) + ':' + jSuites.two(0) + ':' + jSuites.two(0); - } - } else { - return ""; - } - } - - /** - * Calendar - */ - obj.update = function(element, v) { - if (element.classList.contains('jcalendar-disabled')) { - // Do nothing - } else { - var elements = calendar.querySelector('.jcalendar-selected'); - if (elements) { - elements.classList.remove('jcalendar-selected'); - } - element.classList.add('jcalendar-selected'); - - if (element.classList.contains('jcalendar-set-month')) { - obj.date[1] = v; - obj.date[2] = 1; // first day of the month - } else { - obj.date[2] = element.innerText; - } - - if (! obj.options.time) { - obj.close(); - } else { - obj.date[3] = calendarSelectHour.value; - obj.date[4] = calendarSelectMin.value; - } - } - - // Update - updateActions(); - } - - /** - * Set to blank - */ - obj.reset = function() { - // Close calendar - obj.setValue(''); - obj.date = null; - obj.close(false, false); - } - - /** - * Get calendar days - */ - obj.getDays = function() { - // Mode - obj.options.mode = 'days'; - - // Setting current values in case of NULLs - var date = new Date(); - - // Current selection - var year = obj.date && jSuites.isNumeric(obj.date[0]) ? obj.date[0] : parseInt(date.getFullYear()); - var month = obj.date && jSuites.isNumeric(obj.date[1]) ? obj.date[1] : parseInt(date.getMonth()) + 1; - var day = obj.date && jSuites.isNumeric(obj.date[2]) ? obj.date[2] : parseInt(date.getDate()); - var hour = obj.date && jSuites.isNumeric(obj.date[3]) ? obj.date[3] : parseInt(date.getHours()); - var min = obj.date && jSuites.isNumeric(obj.date[4]) ? obj.date[4] : parseInt(date.getMinutes()); - - // Selection container - obj.date = [ year, month, day, hour, min, 0 ]; - - // Update title - calendarLabelYear.innerHTML = year; - calendarLabelMonth.innerHTML = obj.options.months[month - 1]; - - // Current month and Year - var isCurrentMonthAndYear = (date.getMonth() == month - 1) && (date.getFullYear() == year) ? true : false; - var currentDay = date.getDate(); - - // Number of days in the month - var date = new Date(year, month, 0, 0, 0); - var numberOfDays = date.getDate(); - - // First day - var date = new Date(year, month-1, 0, 0, 0); - var firstDay = date.getDay() + 1; - - // Index value - var index = obj.options.startingDay || 0; - - // First of day relative to the starting calendar weekday - firstDay = firstDay - index; - - // Reset table - calendarBody.innerHTML = ''; - - // Weekdays Row - var row = document.createElement('tr'); - row.setAttribute('align', 'center'); - calendarBody.appendChild(row); - - // Create weekdays row - for (var i = 0; i < 7; i++) { - var cell = document.createElement('td'); - cell.classList.add('jcalendar-weekday') - cell.innerHTML = obj.options.weekdays[index].substr(0,1); - row.appendChild(cell); - // Next week day - index++; - // Restart index - if (index > 6) { - index = 0; - } - } - - // Index of days - var index = 0; - var d = 0; - - // Calendar table - for (var j = 0; j < 6; j++) { - // Reset cells container - var row = document.createElement('tr'); - row.setAttribute('align', 'center'); - row.style.height = '34px'; - - // Create cells - for (var i = 0; i < 7; i++) { - // Create cell - var cell = document.createElement('td'); - cell.classList.add('jcalendar-set-day'); - - if (index >= firstDay && index < (firstDay + numberOfDays)) { - // Day cell - d++; - cell.innerHTML = d; - - // Selected - if (d == day) { - cell.classList.add('jcalendar-selected'); - } - - // Current selection day is today - if (isCurrentMonthAndYear && currentDay == d) { - cell.style.fontWeight = 'bold'; - } - - // Current selection day - var current = jSuites.calendar.now(new Date(year, month-1, d), true); - - // Available ranges - if (obj.options.validRange) { - if (! obj.options.validRange[0] || current >= obj.options.validRange[0]) { - var test1 = true; - } else { - var test1 = false; - } - - if (! obj.options.validRange[1] || current <= obj.options.validRange[1]) { - var test2 = true; - } else { - var test2 = false; - } - - if (! (test1 && test2)) { - cell.classList.add('jcalendar-disabled'); - } - } - } - // Day cell - row.appendChild(cell); - // Index - index++; - } - - // Add cell to the calendar body - calendarBody.appendChild(row); - } - - // Show time controls - if (obj.options.time) { - calendarControlsTime.style.display = ''; - } else { - calendarControlsTime.style.display = 'none'; - } - - // Update - updateActions(); - } - - obj.getMonths = function() { - // Mode - obj.options.mode = 'months'; - - // Loading month labels - var months = obj.options.months; - - // Value - var value = obj.options.value; - - // Current date - var date = new Date(); - var currentYear = parseInt(date.getFullYear()); - var currentMonth = parseInt(date.getMonth()) + 1; - var selectedYear = obj.date && jSuites.isNumeric(obj.date[0]) ? obj.date[0] : currentYear; - var selectedMonth = obj.date && jSuites.isNumeric(obj.date[1]) ? obj.date[1] : currentMonth; - - // Update title - calendarLabelYear.innerHTML = obj.date[0]; - calendarLabelMonth.innerHTML = months[selectedMonth-1]; - - // Table - var table = document.createElement('table'); - table.setAttribute('width', '100%'); - - // Row - var row = null; - - // Calendar table - for (var i = 0; i < 12; i++) { - if (! (i % 4)) { - // Reset cells container - var row = document.createElement('tr'); - row.setAttribute('align', 'center'); - table.appendChild(row); - } - - // Create cell - var cell = document.createElement('td'); - cell.classList.add('jcalendar-set-month'); - cell.setAttribute('data-value', i+1); - cell.innerText = months[i]; - - if (obj.options.validRange) { - var current = selectedYear + '-' + jSuites.two(i+1); - if (! obj.options.validRange[0] || current >= obj.options.validRange[0].substr(0,7)) { - var test1 = true; - } else { - var test1 = false; - } - - if (! obj.options.validRange[1] || current <= obj.options.validRange[1].substr(0,7)) { - var test2 = true; - } else { - var test2 = false; - } - - if (! (test1 && test2)) { - cell.classList.add('jcalendar-disabled'); - } - } - - if (i+1 == selectedMonth) { - cell.classList.add('jcalendar-selected'); - } - - if (currentYear == selectedYear && i+1 == currentMonth) { - cell.style.fontWeight = 'bold'; - } - - row.appendChild(cell); - } - - calendarBody.innerHTML = ''; - calendarBody.children[0].children[0].appendChild(table); - - // Update - updateActions(); - } - - obj.getYears = function() { - // Mode - obj.options.mode = 'years'; - - // Current date - var date = new Date(); - var currentYear = date.getFullYear(); - var selectedYear = obj.date && jSuites.isNumeric(obj.date[0]) ? obj.date[0] : parseInt(date.getFullYear()); - - // Array of years - var y = []; - for (var i = 0; i < 25; i++) { - y[i] = parseInt(obj.date[0]) + (i - 12); - } - - // Assembling the year tables - var table = document.createElement('table'); - table.setAttribute('width', '100%'); - - for (var i = 0; i < 25; i++) { - if (! (i % 5)) { - // Reset cells container - var row = document.createElement('tr'); - row.setAttribute('align', 'center'); - table.appendChild(row); - } - - // Create cell - var cell = document.createElement('td'); - cell.classList.add('jcalendar-set-year'); - cell.innerText = y[i]; - - if (selectedYear == y[i]) { - cell.classList.add('jcalendar-selected'); - } - - if (currentYear == y[i]) { - cell.style.fontWeight = 'bold'; - } - - row.appendChild(cell); - } - - calendarBody.innerHTML = ''; - calendarBody.firstChild.firstChild.appendChild(table); - - // Update - updateActions(); - } - - obj.setLabel = function(value, mixed) { - return jSuites.calendar.getDateString(value, mixed); - } - - obj.fromFormatted = function (value, format) { - return jSuites.calendar.extractDateFromString(value, format); - } - - var mouseUpControls = function(e) { - var element = jSuites.findElement(e.target, 'jcalendar-container'); - if (element) { - var action = e.target.className; - - // Object id - if (action == 'jcalendar-prev') { - obj.prev(); - } else if (action == 'jcalendar-next') { - obj.next(); - } else if (action == 'jcalendar-month') { - obj.getMonths(); - } else if (action == 'jcalendar-year') { - obj.getYears(); - } else if (action == 'jcalendar-set-year') { - obj.date[0] = e.target.innerText; - if (obj.options.type == 'year-month-picker') { - obj.getMonths(); - } else { - obj.getDays(); - } - } else if (e.target.classList.contains('jcalendar-set-month')) { - var month = parseInt(e.target.getAttribute('data-value')); - if (obj.options.type == 'year-month-picker') { - obj.update(e.target, month); - } else { - obj.date[1] = month; - obj.getDays(); - } - } else if (action == 'jcalendar-confirm' || action == 'jcalendar-update' || action == 'jcalendar-close') { - obj.close(); - } else if (action == 'jcalendar-backdrop') { - obj.close(false, false); - } else if (action == 'jcalendar-reset') { - obj.reset(); - } else if (e.target.classList.contains('jcalendar-set-day') && e.target.innerText) { - obj.update(e.target); - } - } else { - obj.close(); - } - } - - var keyUpControls = function(e) { - if (e.target.value && e.target.value.length > 3) { - var test = jSuites.calendar.extractDateFromString(e.target.value, obj.options.format); - if (test) { - obj.setValue(test); - } - } - } - - // Update actions button - var updateActions = function() { - var currentDay = calendar.querySelector('.jcalendar-selected'); - - if (currentDay && currentDay.classList.contains('jcalendar-disabled')) { - calendarControlsUpdateButton.setAttribute('disabled', 'disabled'); - calendarSelectHour.setAttribute('disabled', 'disabled'); - calendarSelectMin.setAttribute('disabled', 'disabled'); - } else { - calendarControlsUpdateButton.removeAttribute('disabled'); - calendarSelectHour.removeAttribute('disabled'); - calendarSelectMin.removeAttribute('disabled'); - } - - // Event - if (typeof(obj.options.onupdate) == 'function') { - obj.options.onupdate(el, obj.getValue()); - } - } - - var calendar = null; - var calendarReset = null; - var calendarConfirm = null; - var calendarContainer = null; - var calendarContent = null; - var calendarLabelYear = null; - var calendarLabelMonth = null; - var calendarTable = null; - var calendarBody = null; - - var calendarControls = null; - var calendarControlsTime = null; - var calendarControlsUpdate = null; - var calendarControlsUpdateButton = null; - var calendarSelectHour = null; - var calendarSelectMin = null; - - var init = function() { - // Get value from initial element if that is an input - if (el.tagName == 'INPUT' && el.value) { - options.value = el.value; - } - - // Calendar DOM elements - calendarReset = document.createElement('div'); - calendarReset.className = 'jcalendar-reset'; - - calendarConfirm = document.createElement('div'); - calendarConfirm.className = 'jcalendar-confirm'; - - calendarControls = document.createElement('div'); - calendarControls.className = 'jcalendar-controls' - calendarControls.style.borderBottom = '1px solid #ddd'; - calendarControls.appendChild(calendarReset); - calendarControls.appendChild(calendarConfirm); - - calendarContainer = document.createElement('div'); - calendarContainer.className = 'jcalendar-container'; - calendarContent = document.createElement('div'); - calendarContent.className = 'jcalendar-content'; - calendarContainer.appendChild(calendarContent); - - // Main element - if (el.tagName == 'DIV') { - calendar = el; - calendar.classList.add('jcalendar-inline'); - } else { - // Add controls to the screen - calendarContent.appendChild(calendarControls); - - calendar = document.createElement('div'); - calendar.className = 'jcalendar'; - } - calendar.classList.add('jcalendar-container'); - calendar.appendChild(calendarContainer); - - // Table container - var calendarTableContainer = document.createElement('div'); - calendarTableContainer.className = 'jcalendar-table'; - calendarContent.appendChild(calendarTableContainer); - - // Previous button - var calendarHeaderPrev = document.createElement('td'); - calendarHeaderPrev.setAttribute('colspan', '2'); - calendarHeaderPrev.className = 'jcalendar-prev'; - - // Header with year and month - calendarLabelYear = document.createElement('span'); - calendarLabelYear.className = 'jcalendar-year'; - calendarLabelMonth = document.createElement('span'); - calendarLabelMonth.className = 'jcalendar-month'; - - var calendarHeaderTitle = document.createElement('td'); - calendarHeaderTitle.className = 'jcalendar-header'; - calendarHeaderTitle.setAttribute('colspan', '3'); - calendarHeaderTitle.appendChild(calendarLabelMonth); - calendarHeaderTitle.appendChild(calendarLabelYear); - - var calendarHeaderNext = document.createElement('td'); - calendarHeaderNext.setAttribute('colspan', '2'); - calendarHeaderNext.className = 'jcalendar-next'; - - var calendarHeader = document.createElement('thead'); - var calendarHeaderRow = document.createElement('tr'); - calendarHeaderRow.appendChild(calendarHeaderPrev); - calendarHeaderRow.appendChild(calendarHeaderTitle); - calendarHeaderRow.appendChild(calendarHeaderNext); - calendarHeader.appendChild(calendarHeaderRow); - - calendarTable = document.createElement('table'); - calendarBody = document.createElement('tbody'); - calendarTable.setAttribute('cellpadding', '0'); - calendarTable.setAttribute('cellspacing', '0'); - calendarTable.appendChild(calendarHeader); - calendarTable.appendChild(calendarBody); - calendarTableContainer.appendChild(calendarTable); - - calendarSelectHour = document.createElement('select'); - calendarSelectHour.className = 'jcalendar-select'; - calendarSelectHour.onchange = function() { - obj.date[3] = this.value; - - // Event - if (typeof(obj.options.onupdate) == 'function') { - obj.options.onupdate(el, obj.getValue()); - } - } - - for (var i = 0; i < 24; i++) { - var element = document.createElement('option'); - element.value = i; - element.innerHTML = jSuites.two(i); - calendarSelectHour.appendChild(element); - } - - calendarSelectMin = document.createElement('select'); - calendarSelectMin.className = 'jcalendar-select'; - calendarSelectMin.onchange = function() { - obj.date[4] = this.value; - - // Event - if (typeof(obj.options.onupdate) == 'function') { - obj.options.onupdate(el, obj.getValue()); - } - } - - for (var i = 0; i < 60; i++) { - var element = document.createElement('option'); - element.value = i; - element.innerHTML = jSuites.two(i); - calendarSelectMin.appendChild(element); - } - - // Footer controls - var calendarControlsFooter = document.createElement('div'); - calendarControlsFooter.className = 'jcalendar-controls'; - - calendarControlsTime = document.createElement('div'); - calendarControlsTime.className = 'jcalendar-time'; - calendarControlsTime.style.maxWidth = '140px'; - calendarControlsTime.appendChild(calendarSelectHour); - calendarControlsTime.appendChild(calendarSelectMin); - - calendarControlsUpdateButton = document.createElement('button'); - calendarControlsUpdateButton.setAttribute('type', 'button'); - calendarControlsUpdateButton.className = 'jcalendar-update'; - - calendarControlsUpdate = document.createElement('div'); - calendarControlsUpdate.style.flexGrow = '10'; - calendarControlsUpdate.appendChild(calendarControlsUpdateButton); - calendarControlsFooter.appendChild(calendarControlsTime); - - // Only show the update button for input elements - if (el.tagName == 'INPUT') { - calendarControlsFooter.appendChild(calendarControlsUpdate); - } - - calendarContent.appendChild(calendarControlsFooter); - - var calendarBackdrop = document.createElement('div'); - calendarBackdrop.className = 'jcalendar-backdrop'; - calendar.appendChild(calendarBackdrop); - - // Handle events - el.addEventListener("keyup", keyUpControls); - - // Add global events - calendar.addEventListener("swipeleft", function(e) { - jSuites.animation.slideLeft(calendarTable, 0, function() { - obj.next(); - jSuites.animation.slideRight(calendarTable, 1); - }); - e.preventDefault(); - e.stopPropagation(); - }); - - calendar.addEventListener("swiperight", function(e) { - jSuites.animation.slideRight(calendarTable, 0, function() { - obj.prev(); - jSuites.animation.slideLeft(calendarTable, 1); - }); - e.preventDefault(); - e.stopPropagation(); - }); - - if ('ontouchend' in document.documentElement === true) { - calendar.addEventListener("touchend", mouseUpControls); - el.addEventListener("touchend", obj.open); - } else { - calendar.addEventListener("mouseup", mouseUpControls); - el.addEventListener("mouseup", obj.open); - } - - // Global controls - if (! jSuites.calendar.hasEvents) { - // Execute only one time - jSuites.calendar.hasEvents = true; - // Enter and Esc - document.addEventListener("keydown", jSuites.calendar.keydown); - } - - // Set configuration - obj.setOptions(options); - - // Append element to the DOM - if (el.tagName == 'INPUT') { - el.parentNode.insertBefore(calendar, el.nextSibling); - // Add properties - el.setAttribute('autocomplete', 'off'); - // Element - el.classList.add('jcalendar-input'); - // Value - el.value = obj.setLabel(obj.getValue(), obj.options); - } else { - // Get days - obj.getDays(); - // Hour - if (obj.options.time) { - calendarSelectHour.value = obj.date[3]; - calendarSelectMin.value = obj.date[4]; - } - } - - // Default opened - if (obj.options.opened == true) { - obj.open(); - } - - // Controls - if (obj.options.controls == false) { - calendarContainer.classList.add('jcalendar-hide-controls'); - } - - // Change method - el.change = obj.setValue; - - // Global generic value handler - el.val = function(val) { - if (val === undefined) { - return obj.getValue(); - } else { - obj.setValue(val); - } - } - - // Keep object available from the node - el.calendar = calendar.calendar = obj; - } - - init(); - - return obj; -}); - -jSuites.calendar.keydown = function(e) { - var calendar = null; - if (calendar = jSuites.calendar.current) { - if (e.which == 13) { - // ENTER - calendar.close(false, true); - } else if (e.which == 27) { - // ESC - calendar.close(false, false); - } - } -} - -jSuites.calendar.prettify = function(d, texts) { - if (! texts) { - var texts = { - justNow: 'Just now', - xMinutesAgo: '{0}m ago', - xHoursAgo: '{0}h ago', - xDaysAgo: '{0}d ago', - xWeeksAgo: '{0}w ago', - xMonthsAgo: '{0} mon ago', - xYearsAgo: '{0}y ago', - } - } - - var d1 = new Date(); - var d2 = new Date(d); - var total = parseInt((d1 - d2) / 1000 / 60); - - String.prototype.format = function(o) { - return this.replace('{0}', o); - } - - if (total == 0) { - var text = texts.justNow; - } else if (total < 90) { - var text = texts.xMinutesAgo.format(total); - } else if (total < 1440) { // One day - var text = texts.xHoursAgo.format(Math.round(total/60)); - } else if (total < 20160) { // 14 days - var text = texts.xDaysAgo.format(Math.round(total / 1440)); - } else if (total < 43200) { // 30 days - var text = texts.xWeeksAgo.format(Math.round(total / 10080)); - } else if (total < 1036800) { // 24 months - var text = texts.xMonthsAgo.format(Math.round(total / 43200)); - } else { // 24 months+ - var text = texts.xYearsAgo.format(Math.round(total / 525600)); - } - - return text; -} - -jSuites.calendar.prettifyAll = function() { - var elements = document.querySelectorAll('.prettydate'); - for (var i = 0; i < elements.length; i++) { - if (elements[i].getAttribute('data-date')) { - elements[i].innerHTML = jSuites.calendar.prettify(elements[i].getAttribute('data-date')); - } else { - if (elements[i].innerHTML) { - elements[i].setAttribute('title', elements[i].innerHTML); - elements[i].setAttribute('data-date', elements[i].innerHTML); - elements[i].innerHTML = jSuites.calendar.prettify(elements[i].innerHTML); - } - } - } -} - -jSuites.calendar.now = function(date, dateOnly) { - if (Array.isArray(date)) { - var y = date[0]; - var m = date[1]; - var d = date[2]; - var h = date[3]; - var i = date[4]; - var s = date[5]; - } else { - if (! date) { - var date = new Date(); - } - var y = date.getFullYear(); - var m = date.getMonth() + 1; - var d = date.getDate(); - var h = date.getHours(); - var i = date.getMinutes(); - var s = date.getSeconds(); - } - - if (dateOnly == true) { - return jSuites.two(y) + '-' + jSuites.two(m) + '-' + jSuites.two(d); - } else { - return jSuites.two(y) + '-' + jSuites.two(m) + '-' + jSuites.two(d) + ' ' + jSuites.two(h) + ':' + jSuites.two(i) + ':' + jSuites.two(s); - } -} - -jSuites.calendar.toArray = function(value) { - var date = value.split(((value.indexOf('T') !== -1) ? 'T' : ' ')); - var time = date[1]; - var date = date[0].split('-'); - var y = parseInt(date[0]); - var m = parseInt(date[1]); - var d = parseInt(date[2]); - - if (time) { - var time = time.split(':'); - var h = parseInt(time[0]); - var i = parseInt(time[1]); - } else { - var h = 0; - var i = 0; - } - return [ y, m, d, h, i, 0 ]; -} - -// Helper to extract date from a string -jSuites.calendar.extractDateFromString = function(date, format) { - var o = jSuites.mask(date, { mask: format }, true); - - // Check if in format Excel (Need difference with format date or type detected is numeric) - if (date > 0 && Number(date) == date && (o.values.join("") !== o.value || o.type == "numeric")) { - var d = new Date(Math.round((date - 25569)*86400*1000)); - return d.getFullYear() + "-" + jSuites.two(d.getMonth()) + "-" + jSuites.two(d.getDate()) + ' 00:00:00'; - } - - var complete = false; - - if (o.values.length === o.tokens.length && o.values[o.values.length-1].length >= o.tokens[o.tokens.length-1].length) { - complete = true; - } - - if (o.date[0] && o.date[1] && (o.date[2] || complete)) { - if (! o.date[2]) { - o.date[2] = 1; - } - - return o.date[0] + '-' + jSuites.two(o.date[1]) + '-' + jSuites.two(o.date[2]) + ' ' + jSuites.two(o.date[3]) + ':' + jSuites.two(o.date[4])+ ':' + jSuites.two(o.date[5]); - } - - return ''; -} - -var excelInitialTime = Date.UTC(1900, 0, 0); -var excelLeapYearBug = Date.UTC(1900, 1, 29); -var millisecondsPerDay = 86400000; - -/** - * Date to number - */ -jSuites.calendar.dateToNum = function(jsDate) { - if (typeof(jsDate) === 'string') { - jsDate = new Date(jsDate + ' GMT+0'); - } - var jsDateInMilliseconds = jsDate.getTime(); - - if (jsDateInMilliseconds >= excelLeapYearBug) { - jsDateInMilliseconds += millisecondsPerDay; - } - - jsDateInMilliseconds -= excelInitialTime; - - return jsDateInMilliseconds / millisecondsPerDay; -} - -/** - * Number to date - */ -// !IMPORTANT! -// Excel incorrectly considers 1900 to be a leap year -jSuites.calendar.numToDate = function(excelSerialNumber) { - var jsDateInMilliseconds = excelInitialTime + excelSerialNumber * millisecondsPerDay; - - if (jsDateInMilliseconds >= excelLeapYearBug) { - jsDateInMilliseconds -= millisecondsPerDay; - } - - const d = new Date(jsDateInMilliseconds); - - var date = [ - d.getUTCFullYear(), - d.getUTCMonth()+1, - d.getUTCDate(), - d.getUTCHours(), - d.getUTCMinutes(), - d.getUTCSeconds(), - ]; - - return jSuites.calendar.now(date); -} - -// Helper to convert date into string -jSuites.calendar.getDateString = function(value, options) { - if (! options) { - var options = {}; - } - - // Labels - if (options && typeof(options) == 'object') { - var format = options.format; - } else { - var format = options; - } - - if (! format) { - format = 'YYYY-MM-DD'; - } - - // Convert to number of hours - if (format.indexOf('[h]') >= 0) { - var result = 0; - if (value && jSuites.isNumeric(value)) { - result = parseFloat(24 * Number(value)); - if (format.indexOf('mm') >= 0) { - var h = (''+result).split('.'); - if (h[1]) { - var d = 60 * parseFloat('0.' + h[1]) - d = parseFloat(d.toFixed(2)); - } else { - var d = 0; - } - result = parseInt(h[0]) + ':' + jSuites.two(d); - } - } - return result; - } - - // Date instance - if (value instanceof Date) { - value = jSuites.calendar.now(value); - } else if (value && jSuites.isNumeric(value)) { - value = jSuites.calendar.numToDate(value); - } - - // Tokens - var tokens = [ 'DAY', 'WD', 'DDDD', 'DDD', 'DD', 'D', 'Q', 'HH24', 'HH12', 'HH', 'H', 'AM/PM', 'MI', 'SS', 'MS', 'YYYY', 'YYY', 'YY', 'Y', 'MONTH', 'MON', 'MMMMM', 'MMMM', 'MMM', 'MM', 'M', '.' ]; - - // Expression to extract all tokens from the string - var e = new RegExp(tokens.join('|'), 'gi'); - // Extract - var t = format.match(e); - - // Compatibility with excel - for (var i = 0; i < t.length; i++) { - if (t[i].toUpperCase() == 'MM') { - // Not a month, correct to minutes - if (t[i-1] && t[i-1].toUpperCase().indexOf('H') >= 0) { - t[i] = 'mi'; - } else if (t[i-2] && t[i-2].toUpperCase().indexOf('H') >= 0) { - t[i] = 'mi'; - } else if (t[i+1] && t[i+1].toUpperCase().indexOf('S') >= 0) { - t[i] = 'mi'; - } else if (t[i+2] && t[i+2].toUpperCase().indexOf('S') >= 0) { - t[i] = 'mi'; - } - } - } - - // Object - var o = { - tokens: t - } - - // Value - if (value) { - var d = ''+value; - var splitStr = (d.indexOf('T') !== -1) ? 'T' : ' '; - d = d.split(splitStr); - - var h = 0; - var m = 0; - var s = 0; - - if (d[1]) { - h = d[1].split(':'); - m = h[1] ? h[1] : 0; - s = h[2] ? h[2] : 0; - h = h[0] ? h[0] : 0; - } - - d = d[0].split('-'); - - if (d[0] && d[1] && d[2] && d[0] > 0 && d[1] > 0 && d[1] < 13 && d[2] > 0 && d[2] < 32) { - - // Data - o.data = [ d[0], d[1], d[2], h, m, s ]; - - // Value - o.value = []; - - // Calendar instance - var calendar = new Date(o.data[0], o.data[1]-1, o.data[2], o.data[3], o.data[4], o.data[5]); - - // Get method - var get = function(i) { - // Token - var t = this.tokens[i]; - // Case token - var s = t.toUpperCase(); - var v = null; - - if (s === 'YYYY') { - v = this.data[0]; - } else if (s === 'YYY') { - v = this.data[0].substring(1,4); - } else if (s === 'YY') { - v = this.data[0].substring(2,4); - } else if (s === 'Y') { - v = this.data[0].substring(3,4); - } else if (t === 'MON') { - v = jSuites.calendar.months[calendar.getMonth()].substr(0,3).toUpperCase(); - } else if (t === 'mon') { - v = jSuites.calendar.months[calendar.getMonth()].substr(0,3).toLowerCase(); - } else if (t === 'MONTH') { - v = jSuites.calendar.months[calendar.getMonth()].toUpperCase(); - } else if (t === 'month') { - v = jSuites.calendar.months[calendar.getMonth()].toLowerCase(); - } else if (s === 'MMMMM') { - v = jSuites.calendar.months[calendar.getMonth()].substr(0, 1); - } else if (s === 'MMMM' || t === 'Month') { - v = jSuites.calendar.months[calendar.getMonth()]; - } else if (s === 'MMM' || t == 'Mon') { - v = jSuites.calendar.months[calendar.getMonth()].substr(0,3); - } else if (s === 'MM') { - v = jSuites.two(this.data[1]); - } else if (s === 'M') { - v = calendar.getMonth()+1; - } else if (t === 'DAY') { - v = jSuites.calendar.weekdays[calendar.getDay()].toUpperCase(); - } else if (t === 'day') { - v = jSuites.calendar.weekdays[calendar.getDay()].toLowerCase(); - } else if (s === 'DDDD' || t == 'Day') { - v = jSuites.calendar.weekdays[calendar.getDay()]; - } else if (s === 'DDD') { - v = jSuites.calendar.weekdays[calendar.getDay()].substr(0,3); - } else if (s === 'DD') { - v = jSuites.two(this.data[2]); - } else if (s === 'D') { - v = this.data[2]; - } else if (s === 'Q') { - v = Math.floor((calendar.getMonth() + 3) / 3); - } else if (s === 'HH24' || s === 'HH') { - v = jSuites.two(this.data[3]); - } else if (s === 'HH12') { - if (this.data[3] > 12) { - v = jSuites.two(this.data[3] - 12); - } else { - v = jSuites.two(this.data[3]); - } - } else if (s === 'H') { - v = this.data[3]; - } else if (s === 'MI') { - v = jSuites.two(this.data[4]); - } else if (s === 'SS') { - v = jSuites.two(this.data[5]); - } else if (s === 'MS') { - v = calendar.getMilliseconds(); - } else if (s === 'AM/PM') { - if (this.data[3] >= 12) { - v = 'PM'; - } else { - v = 'AM'; - } - } else if (s === 'WD') { - v = jSuites.calendar.weekdays[calendar.getDay()]; - } - - if (v === null) { - this.value[i] = this.tokens[i]; - } else { - this.value[i] = v; - } - } - - for (var i = 0; i < o.tokens.length; i++) { - get.call(o, i); - } - // Put pieces together - value = o.value.join(''); - } else { - value = ''; - } - } - - return value; -} - -// Jsuites calendar labels -jSuites.calendar.weekdays = [ 'Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday' ]; -jSuites.calendar.months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; -jSuites.calendar.weekdaysShort = [ 'Sun','Mon','Tue','Wed','Thu','Fri','Sat' ]; -jSuites.calendar.monthsShort = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; - - -jSuites.color = (function(el, options) { - // Already created, update options - if (el.color) { - return el.color.setOptions(options, true); - } - - // New instance - var obj = { type: 'color' }; - obj.options = {}; - - var container = null; - var backdrop = null; - var content = null; - var resetButton = null; - var closeButton = null; - var tabs = null; - var jsuitesTabs = null; - - /** - * Update options - */ - obj.setOptions = function(options, reset) { - /** - * @typedef {Object} defaults - * @property {(string|Array)} value - Initial value of the compontent - * @property {string} placeholder - The default instruction text on the element - * @property {requestCallback} onchange - Method to be execute after any changes on the element - * @property {requestCallback} onclose - Method to be execute when the element is closed - * @property {string} doneLabel - Label for button done - * @property {string} resetLabel - Label for button reset - * @property {string} resetValue - Value for button reset - * @property {Bool} showResetButton - Active or note for button reset - default false - */ - var defaults = { - placeholder: '', - value: null, - onopen: null, - onclose: null, - onchange: null, - closeOnChange: true, - palette: null, - position: null, - doneLabel: 'Done', - resetLabel: 'Reset', - fullscreen: false, - opened: false, - } - - if (! options) { - options = {}; - } - - if (options && ! options.palette) { - // Default pallete - options.palette = jSuites.palette(); - } - - // Loop through our object - for (var property in defaults) { - if (options && options.hasOwnProperty(property)) { - obj.options[property] = options[property]; - } else { - if (typeof(obj.options[property]) == 'undefined' || reset === true) { - obj.options[property] = defaults[property]; - } - } - } - - // Update the text of the controls, if they have already been created - if (resetButton) { - resetButton.innerHTML = obj.options.resetLabel; - } - if (closeButton) { - closeButton.innerHTML = obj.options.doneLabel; - } - - // Update the pallete - if (obj.options.palette && jsuitesTabs) { - jsuitesTabs.updateContent(0, table()); - } - - // Value - if (typeof obj.options.value === 'string') { - el.value = obj.options.value; - if (el.tagName === 'INPUT') { - el.style.color = el.value; - el.style.backgroundColor = el.value; - } - } - - // Placeholder - if (obj.options.placeholder) { - el.setAttribute('placeholder', obj.options.placeholder); - } else { - if (el.getAttribute('placeholder')) { - el.removeAttribute('placeholder'); - } - } - - return obj; - } - - obj.select = function(color) { - // Remove current selected mark - var selected = container.querySelector('.jcolor-selected'); - if (selected) { - selected.classList.remove('jcolor-selected'); - } - - // Mark cell as selected - if (obj.values[color]) { - obj.values[color].classList.add('jcolor-selected'); - } - - obj.options.value = color; - } - - /** - * Open color pallete - */ - obj.open = function() { - if (! container.classList.contains('jcolor-focus')) { - // Start tracking - jSuites.tracking(obj, true); - - // Show color picker - container.classList.add('jcolor-focus'); - - // Select current color - if (obj.options.value) { - obj.select(obj.options.value); - } - - // Reset margin - content.style.marginTop = ''; - content.style.marginLeft = ''; - - var rectContent = content.getBoundingClientRect(); - var availableWidth = jSuites.getWindowWidth(); - var availableHeight = jSuites.getWindowHeight(); - - if (availableWidth < 800 || obj.options.fullscreen == true) { - content.classList.add('jcolor-fullscreen'); - jSuites.animation.slideBottom(content, 1); - backdrop.style.display = 'block'; - } else { - if (content.classList.contains('jcolor-fullscreen')) { - content.classList.remove('jcolor-fullscreen'); - backdrop.style.display = ''; - } - - if (obj.options.position) { - content.style.position = 'fixed'; - } else { - content.style.position = ''; - } - - if (rectContent.left + rectContent.width > availableWidth) { - content.style.marginLeft = -1 * (rectContent.left + rectContent.width - (availableWidth - 20)) + 'px'; - } - if (rectContent.top + rectContent.height > availableHeight) { - content.style.marginTop = -1 * (rectContent.top + rectContent.height - (availableHeight - 20)) + 'px'; - } - } - - - if (typeof(obj.options.onopen) == 'function') { - obj.options.onopen(el); - } - - jsuitesTabs.setBorder(jsuitesTabs.getActive()); - - // Update sliders - if (obj.options.value) { - var rgb = HexToRgb(obj.options.value); - - rgbInputs.forEach(function(rgbInput, index) { - rgbInput.value = rgb[index]; - rgbInput.dispatchEvent(new Event('input')); - }); - } - } - } - - /** - * Close color pallete - */ - obj.close = function(ignoreEvents) { - if (container.classList.contains('jcolor-focus')) { - // Remove focus - container.classList.remove('jcolor-focus'); - // Make sure backdrop is hidden - backdrop.style.display = ''; - // Call related events - if (! ignoreEvents && typeof(obj.options.onclose) == 'function') { - obj.options.onclose(el); - } - // Stop the object - jSuites.tracking(obj, false); - } - - return obj.options.value; - } - - /** - * Set value - */ - obj.setValue = function(color) { - if (! color) { - color = ''; - } - - if (color != obj.options.value) { - obj.options.value = color; - slidersResult = color; - - // Remove current selecded mark - obj.select(color); - - // Onchange - if (typeof(obj.options.onchange) == 'function') { - obj.options.onchange(el, color); - } - - // Changes - if (el.value != obj.options.value) { - // Set input value - el.value = obj.options.value; - if (el.tagName === 'INPUT') { - el.style.color = el.value; - el.style.backgroundColor = el.value; - } - - // Element onchange native - if (typeof(el.oninput) == 'function') { - el.oninput({ - type: 'input', - target: el, - value: el.value - }); - } - } - - if (obj.options.closeOnChange == true) { - obj.close(); - } - } - } - - /** - * Get value - */ - obj.getValue = function() { - return obj.options.value; - } - - var backdropClickControl = false; - - // Converts a number in decimal to hexadecimal - var decToHex = function(num) { - var hex = num.toString(16); - return hex.length === 1 ? "0" + hex : hex; - } - - // Converts a color in rgb to hexadecimal - var rgbToHex = function(r, g, b) { - return "#" + decToHex(r) + decToHex(g) + decToHex(b); - } - - // Converts a number in hexadecimal to decimal - var hexToDec = function(hex) { - return parseInt('0x' + hex); - } - - // Converts a color in hexadecimal to rgb - var HexToRgb = function(hex) { - return [hexToDec(hex.substr(1, 2)), hexToDec(hex.substr(3, 2)), hexToDec(hex.substr(5, 2))] - } - - var table = function() { - // Content of the first tab - var tableContainer = document.createElement('div'); - tableContainer.className = 'jcolor-grid'; - - // Cells - obj.values = []; - - // Table pallete - var t = document.createElement('table'); - t.setAttribute('cellpadding', '7'); - t.setAttribute('cellspacing', '0'); - - for (var j = 0; j < obj.options.palette.length; j++) { - var tr = document.createElement('tr'); - for (var i = 0; i < obj.options.palette[j].length; i++) { - var td = document.createElement('td'); - var color = obj.options.palette[j][i]; - if (color.length < 7 && color.substr(0,1) !== '#') { - color = '#' + color; - } - td.style.backgroundColor = color; - td.setAttribute('data-value', color); - td.innerHTML = ''; - tr.appendChild(td); - - // Selected color - if (obj.options.value == color) { - td.classList.add('jcolor-selected'); - } - - // Possible values - obj.values[color] = td; - } - t.appendChild(tr); - } - - // Append to the table - tableContainer.appendChild(t); - - return tableContainer; - } - - // Canvas where the image will be rendered - var canvas = document.createElement('canvas'); - canvas.width = 200; - canvas.height = 160; - var context = canvas.getContext("2d"); - - var resizeCanvas = function() { - // Specifications necessary to correctly obtain colors later in certain positions - var m = tabs.firstChild.getBoundingClientRect(); - canvas.width = m.width - 14; - gradient() - } - - var gradient = function() { - var g = context.createLinearGradient(0, 0, canvas.width, 0); - // Create color gradient - g.addColorStop(0, "rgb(255,0,0)"); - g.addColorStop(0.15, "rgb(255,0,255)"); - g.addColorStop(0.33, "rgb(0,0,255)"); - g.addColorStop(0.49, "rgb(0,255,255)"); - g.addColorStop(0.67, "rgb(0,255,0)"); - g.addColorStop(0.84, "rgb(255,255,0)"); - g.addColorStop(1, "rgb(255,0,0)"); - context.fillStyle = g; - context.fillRect(0, 0, canvas.width, canvas.height); - g = context.createLinearGradient(0, 0, 0, canvas.height); - g.addColorStop(0, "rgba(255,255,255,1)"); - g.addColorStop(0.5, "rgba(255,255,255,0)"); - g.addColorStop(0.5, "rgba(0,0,0,0)"); - g.addColorStop(1, "rgba(0,0,0,1)"); - context.fillStyle = g; - context.fillRect(0, 0, canvas.width, canvas.height); - } - - var hsl = function() { - var element = document.createElement('div'); - element.className = "jcolor-hsl"; - - var point = document.createElement('div'); - point.className = 'jcolor-point'; - - var div = document.createElement('div'); - div.appendChild(canvas); - div.appendChild(point); - element.appendChild(div); - - // Moves the marquee point to the specified position - var update = function(buttons, x, y) { - if (buttons === 1) { - var rect = element.getBoundingClientRect(); - var left = x - rect.left; - var top = y - rect.top; - if (left < 0) { - left = 0; - } - if (top < 0) { - top = 0; - } - if (left > rect.width) { - left = rect.width; - } - if (top > rect.height) { - top = rect.height; - } - point.style.left = left + 'px'; - point.style.top = top + 'px'; - var pixel = context.getImageData(left, top, 1, 1).data; - slidersResult = rgbToHex(pixel[0], pixel[1], pixel[2]); - } - } - - // Applies the point's motion function to the div that contains it - element.addEventListener('mousedown', function(e) { - update(e.buttons, e.clientX, e.clientY); - }); - - element.addEventListener('mousemove', function(e) { - update(e.buttons, e.clientX, e.clientY); - }); - - element.addEventListener('touchmove', function(e) { - update(1, e.changedTouches[0].clientX, e.changedTouches[0].clientY); - }); - - return element; - } - - var slidersResult = ''; - - var rgbInputs = []; - - var changeInputColors = function() { - if (slidersResult !== '') { - for (var j = 0; j < rgbInputs.length; j++) { - var currentColor = HexToRgb(slidersResult); - - currentColor[j] = 0; - - var newGradient = 'linear-gradient(90deg, rgb('; - newGradient += currentColor.join(', '); - newGradient += '), rgb('; - - currentColor[j] = 255; - - newGradient += currentColor.join(', '); - newGradient += '))'; - - rgbInputs[j].style.backgroundImage = newGradient; - } - } - } - - var sliders = function() { - // Content of the third tab - var slidersElement = document.createElement('div'); - slidersElement.className = 'jcolor-sliders'; - - var slidersBody = document.createElement('div'); - - // Creates a range-type input with the specified name - var createSliderInput = function(name) { - var inputContainer = document.createElement('div'); - inputContainer.className = 'jcolor-sliders-input-container'; - - var label = document.createElement('label'); - label.innerText = name; - - var subContainer = document.createElement('div'); - subContainer.className = 'jcolor-sliders-input-subcontainer'; - - var input = document.createElement('input'); - input.type = 'range'; - input.min = 0; - input.max = 255; - input.value = 0; - - inputContainer.appendChild(label); - subContainer.appendChild(input); - - var value = document.createElement('div'); - value.innerText = input.value; - - input.addEventListener('input', function() { - value.innerText = input.value; - }); - - subContainer.appendChild(value); - inputContainer.appendChild(subContainer); - - slidersBody.appendChild(inputContainer); - - return input; - } - - // Creates red, green and blue inputs - rgbInputs = [ - createSliderInput('Red'), - createSliderInput('Green'), - createSliderInput('Blue'), - ]; - - slidersElement.appendChild(slidersBody); - - // Element that prints the current color - var slidersResultColor = document.createElement('div'); - slidersResultColor.className = 'jcolor-sliders-final-color'; - - var resultElement = document.createElement('div'); - resultElement.style.visibility = 'hidden'; - resultElement.innerText = 'a'; - slidersResultColor.appendChild(resultElement) - - // Update the element that prints the current color - var updateResult = function() { - var resultColor = rgbToHex(parseInt(rgbInputs[0].value), parseInt(rgbInputs[1].value), parseInt(rgbInputs[2].value)); - - resultElement.innerText = resultColor; - resultElement.style.color = resultColor; - resultElement.style.removeProperty('visibility'); - - slidersResult = resultColor; - } - - // Apply the update function to color inputs - rgbInputs.forEach(function(rgbInput) { - rgbInput.addEventListener('input', function() { - updateResult(); - changeInputColors(); - }); - }); - - slidersElement.appendChild(slidersResultColor); - - return slidersElement; - } - - var init = function() { - // Initial options - obj.setOptions(options); - - // Add a proper input tag when the element is an input - if (el.tagName == 'INPUT') { - el.classList.add('jcolor-input'); - el.readOnly = true; - } - - // Table container - container = document.createElement('div'); - container.className = 'jcolor'; - - // Table container - backdrop = document.createElement('div'); - backdrop.className = 'jcolor-backdrop'; - container.appendChild(backdrop); - - // Content - content = document.createElement('div'); - content.className = 'jcolor-content'; - - // Controls - var controls = document.createElement('div'); - controls.className = 'jcolor-controls'; - content.appendChild(controls); - - // Reset button - resetButton = document.createElement('div'); - resetButton.className = 'jcolor-reset'; - resetButton.innerHTML = obj.options.resetLabel; - controls.appendChild(resetButton); - - // Close button - closeButton = document.createElement('div'); - closeButton.className = 'jcolor-close'; - closeButton.innerHTML = obj.options.doneLabel; - controls.appendChild(closeButton); - - // Element that will be used to create the tabs - tabs = document.createElement('div'); - content.appendChild(tabs); - - // Starts the jSuites tabs component - jsuitesTabs = jSuites.tabs(tabs, { - animation: true, - data: [ - { - title: 'Grid', - contentElement: table(), - }, - { - title: 'Spectrum', - contentElement: hsl(), - }, - { - title: 'Sliders', - contentElement: sliders(), - } - ], - onchange: function(element, instance, index) { - if (index === 1) { - resizeCanvas(); - } else { - var color = slidersResult !== '' ? slidersResult : obj.getValue(); - - if (index === 2 && color) { - var rgb = HexToRgb(color); - - rgbInputs.forEach(function(rgbInput, index) { - rgbInput.value = rgb[index]; - rgbInput.dispatchEvent(new Event('input')); - }); - } - } - }, - palette: 'modern', - }); - - container.appendChild(content); - - // Insert picker after the element - if (el.tagName == 'INPUT') { - el.parentNode.insertBefore(container, el.nextSibling); - } else { - el.appendChild(container); - } - - container.addEventListener("click", function(e) { - if (e.target.tagName == 'TD') { - var value = e.target.getAttribute('data-value'); - if (value) { - obj.setValue(value); - } - } else if (e.target.classList.contains('jcolor-reset')) { - obj.setValue(''); - obj.close(); - } else if (e.target.classList.contains('jcolor-close')) { - if (jsuitesTabs.getActive() > 0) { - obj.setValue(slidersResult); - } - obj.close(); - } else if (e.target.classList.contains('jcolor-backdrop')) { - obj.close(); - } else { - obj.open(); - } - }); - - /** - * If element is focus open the picker - */ - el.addEventListener("mouseup", function(e) { - obj.open(); - }); - - // If the picker is open on the spectrum tab, it changes the canvas size when the window size is changed - window.addEventListener('resize', function() { - if (container.classList.contains('jcolor-focus') && jsuitesTabs.getActive() == 1) { - resizeCanvas(); - } - }); - - // Default opened - if (obj.options.opened == true) { - obj.open(); - } - - // Change - el.change = obj.setValue; - - // Global generic value handler - el.val = function(val) { - if (val === undefined) { - return obj.getValue(); - } else { - obj.setValue(val); - } - } - - // Keep object available from the node - el.color = obj; - - // Container shortcut - container.color = obj; - } - - obj.toHex = function(rgb) { - var hex = function(x) { - return ("0" + parseInt(x).toString(16)).slice(-2); - } - if (rgb) { - if (/^#[0-9A-F]{6}$/i.test(rgb)) { - return rgb; - } else { - rgb = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/); - if (rgb && rgb.length) { - return "#" + hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]); - } else { - return ""; - } - } - } - } - - init(); - - return obj; -}); - - - -jSuites.contextmenu = (function(el, options) { - // New instance - var obj = { type:'contextmenu'}; - obj.options = {}; - - // Default configuration - var defaults = { - items: null, - onclick: null, - }; - - // Loop through our object - for (var property in defaults) { - if (options && options.hasOwnProperty(property)) { - obj.options[property] = options[property]; - } else { - obj.options[property] = defaults[property]; - } - } - - // Class definition - el.classList.add('jcontextmenu'); - - /** - * Open contextmenu - */ - obj.open = function(e, items) { - if (items) { - // Update content - obj.options.items = items; - // Create items - obj.create(items); - } - - // Close current contextmenu - if (jSuites.contextmenu.current) { - jSuites.contextmenu.current.close(); - } - - // Add to the opened components monitor - jSuites.tracking(obj, true); - - // Show context menu - el.classList.add('jcontextmenu-focus'); - - // Current - jSuites.contextmenu.current = obj; - - // Coordinates - if ((obj.options.items && obj.options.items.length > 0) || el.children.length) { - if (e.target) { - if (e.changedTouches && e.changedTouches[0]) { - x = e.changedTouches[0].clientX; - y = e.changedTouches[0].clientY; - } else { - var x = e.clientX; - var y = e.clientY; - } - } else { - var x = e.x; - var y = e.y; - } - - var rect = el.getBoundingClientRect(); - - if (window.innerHeight < y + rect.height) { - var h = y - rect.height; - if (h < 0) { - h = 0; - } - el.style.top = h + 'px'; - } else { - el.style.top = y + 'px'; - } - - if (window.innerWidth < x + rect.width) { - if (x - rect.width > 0) { - el.style.left = (x - rect.width) + 'px'; - } else { - el.style.left = '10px'; - } - } else { - el.style.left = x + 'px'; - } - } - } - - obj.isOpened = function() { - return el.classList.contains('jcontextmenu-focus') ? true : false; - } - - /** - * Close menu - */ - obj.close = function() { - if (el.classList.contains('jcontextmenu-focus')) { - el.classList.remove('jcontextmenu-focus'); - } - jSuites.tracking(obj, false); - } - - /** - * Create items based on the declared objectd - * @param {object} items - List of object - */ - obj.create = function(items) { - // Update content - el.innerHTML = ''; - - // Add header contextmenu - var itemHeader = createHeader(); - el.appendChild(itemHeader); - - // Append items - for (var i = 0; i < items.length; i++) { - var itemContainer = createItemElement(items[i]); - el.appendChild(itemContainer); - } - } - - /** - * createHeader for context menu - * @private - * @returns {HTMLElement} - */ - function createHeader() { - var header = document.createElement('div'); - header.classList.add("header"); - header.addEventListener("click", function(e) { - e.preventDefault(); - e.stopPropagation(); - }); - var title = document.createElement('a'); - title.classList.add("title"); - title.innerHTML = jSuites.translate("Menu"); - - header.appendChild(title); - - var closeButton = document.createElement('a'); - closeButton.classList.add("close"); - closeButton.innerHTML = jSuites.translate("close"); - closeButton.addEventListener("click", function(e) { - obj.close(); - }); - - header.appendChild(closeButton); - - return header; - } - - /** - * Private function for create a new Item element - * @param {type} item - * @returns {jsuitesL#15.jSuites.contextmenu.createItemElement.itemContainer} - */ - function createItemElement(item) { - if (item.type && (item.type == 'line' || item.type == 'divisor')) { - var itemContainer = document.createElement('hr'); - } else { - var itemContainer = document.createElement('div'); - var itemText = document.createElement('a'); - itemText.innerHTML = item.title; - - if (item.tooltip) { - itemContainer.setAttribute('title', item.tooltip); - } - - if (item.icon) { - itemContainer.setAttribute('data-icon', item.icon); - } - - if (item.id) { - itemContainer.id = item.id; - } - - if (item.disabled) { - itemContainer.className = 'jcontextmenu-disabled'; - } else if (item.onclick) { - itemContainer.method = item.onclick; - itemContainer.addEventListener("mousedown", function(e) { - e.preventDefault(); - }); - itemContainer.addEventListener("mouseup", function(e) { - // Execute method - this.method(this, e); - }); - } - itemContainer.appendChild(itemText); - - if (item.submenu) { - var itemIconSubmenu = document.createElement('span'); - itemIconSubmenu.innerHTML = "►"; - itemContainer.appendChild(itemIconSubmenu); - itemContainer.classList.add('jcontexthassubmenu'); - var el_submenu = document.createElement('div'); - // Class definition - el_submenu.classList.add('jcontextmenu'); - // Focusable - el_submenu.setAttribute('tabindex', '900'); - - // Append items - var submenu = item.submenu; - for (var i = 0; i < submenu.length; i++) { - var itemContainerSubMenu = createItemElement(submenu[i]); - el_submenu.appendChild(itemContainerSubMenu); - } - - itemContainer.appendChild(el_submenu); - } else if (item.shortcut) { - var itemShortCut = document.createElement('span'); - itemShortCut.innerHTML = item.shortcut; - itemContainer.appendChild(itemShortCut); - } - } - return itemContainer; - } - - if (typeof(obj.options.onclick) == 'function') { - el.addEventListener('click', function(e) { - obj.options.onclick(obj, e); - }); - } - - // Create items - if (obj.options.items) { - obj.create(obj.options.items); - } - - window.addEventListener("mousewheel", function() { - obj.close(); - }); - - el.contextmenu = obj; - - return obj; -}); - - -jSuites.dropdown = (function(el, options) { - // Already created, update options - if (el.dropdown) { - return el.dropdown.setOptions(options, true); - } - - // New instance - var obj = { type: 'dropdown' }; - obj.options = {}; - - // Success - var success = function(data, val) { - // Set data - if (data && data.length) { - // Sort - if (obj.options.sortResults !== false) { - if(typeof obj.options.sortResults == "function") { - data.sort(obj.options.sortResults); - } else { - data.sort(sortData); - } - } - - obj.setData(data); - } - - // Onload method - if (typeof(obj.options.onload) == 'function') { - obj.options.onload(el, obj, data, val); - } - - // Set value - if (val) { - applyValue(val); - } - - // Component value - if (val === undefined || val === null) { - obj.options.value = ''; - } - el.value = obj.options.value; - - // Open dropdown - if (obj.options.opened == true) { - obj.open(); - } - } - - - // Default sort - var sortData = function(itemA, itemB) { - var testA, testB; - if(typeof itemA == "string") { - testA = itemA; - } else { - if(itemA.text) { - testA = itemA.text; - } else if(itemA.name) { - testA = itemA.name; - } - } - - if(typeof itemB == "string") { - testB = itemB; - } else { - if(itemB.text) { - testB = itemB.text; - } else if(itemB.name) { - testB = itemB.name; - } - } - - if (typeof testA == "string" || typeof testB == "string") { - if (typeof testA != "string") { testA = ""+testA; } - if (typeof testB != "string") { testB = ""+testB; } - return testA.localeCompare(testB); - } else { - return testA - testB; - } - } - - /** - * Reset the options for the dropdown - */ - var resetValue = function() { - // Reset value container - obj.value = {}; - // Remove selected - for (var i = 0; i < obj.items.length; i++) { - if (obj.items[i].selected == true) { - if (obj.items[i].element) { - obj.items[i].element.classList.remove('jdropdown-selected') - } - obj.items[i].selected = null; - } - } - // Reset options - obj.options.value = ''; - // Reset value - el.value = ''; - } - - /** - * Apply values to the dropdown - */ - var applyValue = function(values) { - // Reset the current values - resetValue(); - - // Read values - if (values !== null) { - if (! values) { - if (typeof(obj.value['']) !== 'undefined') { - obj.value[''] = ''; - } - } else { - if (! Array.isArray(values)) { - values = ('' + values).split(';'); - } - for (var i = 0; i < values.length; i++) { - obj.value[values[i]] = ''; - } - } - } - - // Update the DOM - for (var i = 0; i < obj.items.length; i++) { - if (typeof(obj.value[Value(i)]) !== 'undefined') { - if (obj.items[i].element) { - obj.items[i].element.classList.add('jdropdown-selected') - } - obj.items[i].selected = true; - - // Keep label - obj.value[Value(i)] = Text(i); - } - } - - // Global value - obj.options.value = Object.keys(obj.value).join(';'); - - // Update labels - obj.header.value = obj.getText(); - } - - // Get the value of one item - var Value = function(k, v) { - // Legacy purposes - if (! obj.options.format) { - var property = 'value'; - } else { - var property = 'id'; - } - - if (obj.items[k]) { - if (v !== undefined) { - return obj.items[k].data[property] = v; - } else { - return obj.items[k].data[property]; - } - } - - return ''; - } - - // Get the label of one item - var Text = function(k, v) { - // Legacy purposes - if (! obj.options.format) { - var property = 'text'; - } else { - var property = 'name'; - } - - if (obj.items[k]) { - if (v !== undefined) { - return obj.items[k].data[property] = v; - } else { - return obj.items[k].data[property]; - } - } - - return ''; - } - - var getValue = function() { - return Object.keys(obj.value); - } - - var getText = function() { - var data = []; - var k = Object.keys(obj.value); - for (var i = 0; i < k.length; i++) { - data.push(obj.value[k[i]]); - } - return data; - } - - obj.setOptions = function(options, reset) { - if (! options) { - options = {}; - } - - // Default configuration - var defaults = { - url: null, - data: [], - format: 0, - multiple: false, - autocomplete: false, - remoteSearch: false, - lazyLoading: false, - type: null, - width: null, - maxWidth: null, - opened: false, - value: null, - placeholder: '', - newOptions: false, - position: false, - onchange: null, - onload: null, - onopen: null, - onclose: null, - onfocus: null, - onblur: null, - oninsert: null, - onbeforeinsert: null, - sortResults: false, - autofocus: false, - } - - // Loop through our object - for (var property in defaults) { - if (options && options.hasOwnProperty(property)) { - obj.options[property] = options[property]; - } else { - if (typeof(obj.options[property]) == 'undefined' || reset === true) { - obj.options[property] = defaults[property]; - } - } - } - - // Force autocomplete search - if (obj.options.remoteSearch == true || obj.options.type === 'searchbar') { - obj.options.autocomplete = true; - } - - // New options - if (obj.options.newOptions == true) { - obj.header.classList.add('jdropdown-add'); - } else { - obj.header.classList.remove('jdropdown-add'); - } - - // Autocomplete - if (obj.options.autocomplete == true) { - obj.header.removeAttribute('readonly'); - } else { - obj.header.setAttribute('readonly', 'readonly'); - } - - // Place holder - if (obj.options.placeholder) { - obj.header.setAttribute('placeholder', obj.options.placeholder); - } else { - obj.header.removeAttribute('placeholder'); - } - - // Remove specific dropdown typing to add again - el.classList.remove('jdropdown-searchbar'); - el.classList.remove('jdropdown-picker'); - el.classList.remove('jdropdown-list'); - - if (obj.options.type == 'searchbar') { - el.classList.add('jdropdown-searchbar'); - } else if (obj.options.type == 'list') { - el.classList.add('jdropdown-list'); - } else if (obj.options.type == 'picker') { - el.classList.add('jdropdown-picker'); - } else { - if (jSuites.getWindowWidth() < 800) { - if (obj.options.autocomplete) { - el.classList.add('jdropdown-searchbar'); - obj.options.type = 'searchbar'; - } else { - el.classList.add('jdropdown-picker'); - obj.options.type = 'picker'; - } - } else { - if (obj.options.width) { - el.style.width = obj.options.width; - el.style.minWidth = obj.options.width; - } else { - el.style.removeProperty('width'); - el.style.removeProperty('min-width'); - } - - el.classList.add('jdropdown-default'); - obj.options.type = 'default'; - } - } - - // Close button - if (obj.options.type == 'searchbar') { - containerHeader.appendChild(closeButton); - } else { - container.insertBefore(closeButton, container.firstChild); - } - - // Load the content - if (obj.options.url && ! options.data) { - jSuites.ajax({ - url: obj.options.url, - method: 'GET', - dataType: 'json', - success: function(data) { - if (data) { - success(data, obj.options.value); - } - } - }); - } else { - success(obj.options.data, obj.options.value); - } - - // Return the instance - return obj; - } - - // Helpers - var containerHeader = null; - var container = null; - var content = null; - var closeButton = null; - var resetButton = null; - var backdrop = null; - - var keyTimer = null; - - /** - * Init dropdown - */ - var init = function() { - // Do not accept null - if (! options) { - options = {}; - } - - // If the element is a SELECT tag, create a configuration object - if (el.tagName == 'SELECT') { - var ret = jSuites.dropdown.extractFromDom(el, options); - el = ret.el; - options = ret.options; - } - - // Place holder - if (! options.placeholder && el.getAttribute('placeholder')) { - options.placeholder = el.getAttribute('placeholder'); - } - - // Value container - obj.value = {}; - // Containers - obj.items = []; - obj.groups = []; - // Search options - obj.search = ''; - obj.results = null; - - // Create dropdown - el.classList.add('jdropdown'); - - // Header container - containerHeader = document.createElement('div'); - containerHeader.className = 'jdropdown-container-header'; - - // Header - obj.header = document.createElement('input'); - obj.header.className = 'jdropdown-header jss_object'; - obj.header.type = 'text'; - obj.header.setAttribute('autocomplete', 'off'); - obj.header.onfocus = function() { - if (typeof(obj.options.onfocus) == 'function') { - obj.options.onfocus(el); - } - } - - obj.header.onblur = function() { - if (typeof(obj.options.onblur) == 'function') { - obj.options.onblur(el); - } - } - - obj.header.onkeyup = function(e) { - if (obj.options.autocomplete == true && ! keyTimer) { - if (obj.search != obj.header.value.trim()) { - keyTimer = setTimeout(function() { - obj.find(obj.header.value.trim()); - keyTimer = null; - }, 400); - } - - if (! el.classList.contains('jdropdown-focus')) { - obj.open(); - } - } else { - if (! obj.options.autocomplete) { - obj.next(e.key); - } - } - } - - // Global controls - if (! jSuites.dropdown.hasEvents) { - // Execute only one time - jSuites.dropdown.hasEvents = true; - // Enter and Esc - document.addEventListener("keydown", jSuites.dropdown.keydown); - } - - // Container - container = document.createElement('div'); - container.className = 'jdropdown-container'; - - // Dropdown content - content = document.createElement('div'); - content.className = 'jdropdown-content'; - - // Close button - closeButton = document.createElement('div'); - closeButton.className = 'jdropdown-close'; - closeButton.innerHTML = 'Done'; - - // Reset button - resetButton = document.createElement('div'); - resetButton.className = 'jdropdown-reset'; - resetButton.innerHTML = 'x'; - resetButton.onclick = function() { - obj.reset(); - obj.close(); - } - - // Create backdrop - backdrop = document.createElement('div'); - backdrop.className = 'jdropdown-backdrop'; - - // Append elements - containerHeader.appendChild(obj.header); - - container.appendChild(content); - el.appendChild(containerHeader); - el.appendChild(container); - el.appendChild(backdrop); - - // Set the otiptions - obj.setOptions(options); - - if ('ontouchsend' in document.documentElement === true) { - el.addEventListener('touchsend', jSuites.dropdown.mouseup); - } else { - el.addEventListener('mouseup', jSuites.dropdown.mouseup); - } - - // Lazyloading - if (obj.options.lazyLoading == true) { - jSuites.lazyLoading(content, { - loadUp: obj.loadUp, - loadDown: obj.loadDown, - }); - } - - content.onwheel = function(e) { - e.stopPropagation(); - } - - // Change method - el.change = obj.setValue; - - // Global generic value handler - el.val = function(val) { - if (val === undefined) { - return obj.getValue(obj.options.multiple ? true : false); - } else { - obj.setValue(val); - } - } - - // Keep object available from the node - el.dropdown = obj; - } - - /** - * Get the current remote source of data URL - */ - obj.getUrl = function() { - return obj.options.url; - } - - /** - * Set the new data from a remote source - * @param {string} url - url from the remote source - * @param {function} callback - callback when the data is loaded - */ - obj.setUrl = function(url, callback) { - obj.options.url = url; - - jSuites.ajax({ - url: obj.options.url, - method: 'GET', - dataType: 'json', - success: function(data) { - obj.setData(data); - // Callback - if (typeof(callback) == 'function') { - callback(obj); - } - } - }); - } - - /** - * Set ID for one item - */ - obj.setId = function(item, v) { - // Legacy purposes - if (! obj.options.format) { - var property = 'value'; - } else { - var property = 'id'; - } - - if (typeof(item) == 'object') { - item[property] = v; - } else { - obj.items[item].data[property] = v; - } - } - - /** - * Add a new item - * @param {string} title - title of the new item - * @param {string} id - value/id of the new item - */ - obj.add = function(title, id) { - if (! title) { - var current = obj.options.autocomplete == true ? obj.header.value : ''; - var title = prompt(jSuites.translate('Add A New Option'), current); - if (! title) { - return false; - } - } - - // Id - if (! id) { - id = jSuites.guid(); - } - - // Create new item - if (! obj.options.format) { - var item = { - value: id, - text: title, - } - } else { - var item = { - id: id, - name: title, - } - } - - // Callback - if (typeof(obj.options.onbeforeinsert) == 'function') { - var ret = obj.options.onbeforeinsert(obj, item); - if (ret === false) { - return false; - } else if (ret) { - item = ret; - } - } - - // Add item to the main list - obj.options.data.push(item); - - // Create DOM - var newItem = obj.createItem(item); - - // Append DOM to the list - content.appendChild(newItem.element); - - // Callback - if (typeof(obj.options.oninsert) == 'function') { - obj.options.oninsert(obj, item, newItem); - } - - // Show content - if (content.style.display == 'none') { - content.style.display = ''; - } - - // Search? - if (obj.results) { - obj.results.push(newItem); - } - - return item; - } - - /** - * Create a new item - */ - obj.createItem = function(data, group, groupName) { - // Keep the correct source of data - if (! obj.options.format) { - if (! data.value && data.id !== undefined) { - data.value = data.id; - //delete data.id; - } - if (! data.text && data.name !== undefined) { - data.text = data.name; - //delete data.name; - } - } else { - if (! data.id && data.value !== undefined) { - data.id = data.value; - //delete data.value; - } - if (! data.name && data.text !== undefined) { - data.name = data.text - //delete data.text; - } - } - - // Create item - var item = {}; - item.element = document.createElement('div'); - item.element.className = 'jdropdown-item'; - item.element.indexValue = obj.items.length; - item.data = data; - - // Groupd DOM - if (group) { - item.group = group; - } - - // Id - if (data.id) { - item.element.setAttribute('id', data.id); - } - - // Disabled - if (data.disabled == true) { - item.element.setAttribute('data-disabled', true); - } - - // Tooltip - if (data.tooltip) { - item.element.setAttribute('title', data.tooltip); - } - - // Image - if (data.image) { - var image = document.createElement('img'); - image.className = 'jdropdown-image'; - image.src = data.image; - if (! data.title) { - image.classList.add('jdropdown-image-small'); - } - item.element.appendChild(image); - } else if (data.icon) { - var icon = document.createElement('span'); - icon.className = "jdropdown-icon material-icons"; - icon.innerText = data.icon; - if (! data.title) { - icon.classList.add('jdropdown-icon-small'); - } - if (data.color) { - icon.style.color = data.color; - } - item.element.appendChild(icon); - } else if (data.color) { - var color = document.createElement('div'); - color.className = 'jdropdown-color'; - color.style.backgroundColor = data.color; - item.element.appendChild(color); - } - - // Set content - if (! obj.options.format) { - var text = data.text; - } else { - var text = data.name; - } - - var node = document.createElement('div'); - node.className = 'jdropdown-description'; - node.innerHTML = text || ' '; - - // Title - if (data.title) { - var title = document.createElement('div'); - title.className = 'jdropdown-title'; - title.innerText = data.title; - node.appendChild(title); - } - - // Set content - if (! obj.options.format) { - var val = data.value; - } else { - var val = data.id; - } - - // Value - if (obj.value[val]) { - item.element.classList.add('jdropdown-selected'); - item.selected = true; - } - - // Keep DOM accessible - obj.items.push(item); - - // Add node to item - item.element.appendChild(node); - - return item; - } - - obj.appendData = function(data) { - // Create elements - if (data.length) { - // Helpers - var items = []; - var groups = []; - - // Prepare data - for (var i = 0; i < data.length; i++) { - // Process groups - if (data[i].group) { - if (! groups[data[i].group]) { - groups[data[i].group] = []; - } - groups[data[i].group].push(i); - } else { - items.push(i); - } - } - - // Number of items counter - var counter = 0; - - // Groups - var groupNames = Object.keys(groups); - - // Append groups in case exists - if (groupNames.length > 0) { - for (var i = 0; i < groupNames.length; i++) { - // Group container - var group = document.createElement('div'); - group.className = 'jdropdown-group'; - // Group name - var groupName = document.createElement('div'); - groupName.className = 'jdropdown-group-name'; - groupName.innerHTML = groupNames[i]; - // Group arrow - var groupArrow = document.createElement('i'); - groupArrow.className = 'jdropdown-group-arrow jdropdown-group-arrow-down'; - groupName.appendChild(groupArrow); - // Group items - var groupContent = document.createElement('div'); - groupContent.className = 'jdropdown-group-items'; - for (var j = 0; j < groups[groupNames[i]].length; j++) { - var item = obj.createItem(data[groups[groupNames[i]][j]], group, groupNames[i]); - - if (obj.options.lazyLoading == false || counter < 200) { - groupContent.appendChild(item.element); - counter++; - } - } - // Group itens - group.appendChild(groupName); - group.appendChild(groupContent); - // Keep group DOM - obj.groups.push(group); - // Only add to the screen if children on the group - if (groupContent.children.length > 0) { - // Add DOM to the content - content.appendChild(group); - } - } - } - - if (items.length) { - for (var i = 0; i < items.length; i++) { - var item = obj.createItem(data[items[i]]); - if (obj.options.lazyLoading == false || counter < 200) { - content.appendChild(item.element); - counter++; - } - } - } - } - } - - obj.setData = function(data) { - // Reset current value - resetValue(); - - // Make sure the content container is blank - content.innerHTML = ''; - - // Reset - obj.header.value = ''; - - // Reset items and values - obj.items = []; - - // Prepare data - if (data && data.length) { - for (var i = 0; i < data.length; i++) { - // Compatibility - if (typeof(data[i]) != 'object') { - // Correct format - if (! obj.options.format) { - data[i] = { - value: data[i], - text: data[i] - } - } else { - data[i] = { - id: data[i], - name: data[i] - } - } - } - } - - // Append data - obj.appendData(data); - - // Update data - obj.options.data = data; - } else { - // Update data - obj.options.data = []; - } - - obj.close(); - } - - obj.getData = function() { - return obj.options.data; - } - - /** - * Get position of the item - */ - obj.getPosition = function(val) { - for (var i = 0; i < obj.items.length; i++) { - if (Value(i) == val) { - return i; - } - } - return false; - } - - /** - * Get dropdown current text - */ - obj.getText = function(asArray) { - // Get value - var v = getText(); - // Return value - if (asArray) { - return v; - } else { - return v.join('; '); - } - } - - /** - * Get dropdown current value - */ - obj.getValue = function(asArray) { - // Get value - var v = getValue(); - // Return value - if (asArray) { - return v; - } else { - return v.join(';'); - } - } - - /** - * Change event - */ - var change = function(oldValue) { - // Lemonade JS - if (el.value != obj.options.value) { - el.value = obj.options.value; - if (typeof(el.oninput) == 'function') { - el.oninput({ - type: 'input', - target: el, - value: el.value - }); - } - } - - // Events - if (typeof(obj.options.onchange) == 'function') { - obj.options.onchange(el, obj, oldValue, obj.options.value); - } - } - - /** - * Set value - */ - obj.setValue = function(newValue) { - // Current value - var oldValue = obj.getValue(); - // New value - if (Array.isArray(newValue)) { - newValue = newValue.join(';') - } - - if (oldValue !== newValue) { - // Set value - applyValue(newValue); - - // Change - change(oldValue); - } - } - - obj.resetSelected = function() { - obj.setValue(null); - } - - obj.selectIndex = function(index, force) { - // Make sure is a number - var index = parseInt(index); - - // Only select those existing elements - if (obj.items && obj.items[index] && (force === true || obj.items[index].data.disabled !== true)) { - // Reset cursor to a new position - obj.setCursor(index, false); - - // Behaviour - if (! obj.options.multiple) { - // Update value - if (obj.items[index].selected) { - obj.setValue(null); - } else { - obj.setValue(Value(index)); - } - - // Close component - obj.close(); - } else { - // Old value - var oldValue = obj.options.value; - - // Toggle option - if (obj.items[index].selected) { - obj.items[index].element.classList.remove('jdropdown-selected'); - obj.items[index].selected = false; - - delete obj.value[Value(index)]; - } else { - // Select element - obj.items[index].element.classList.add('jdropdown-selected'); - obj.items[index].selected = true; - - // Set value - obj.value[Value(index)] = Text(index); - } - - // Global value - obj.options.value = Object.keys(obj.value).join(';'); - - // Update labels for multiple dropdown - if (obj.options.autocomplete == false) { - obj.header.value = getText().join('; '); - } - - // Events - change(oldValue); - } - } - } - - obj.selectItem = function(item) { - obj.selectIndex(item.indexValue); - } - - var exists = function(k, result) { - for (var j = 0; j < result.length; j++) { - if (! obj.options.format) { - if (result[j].value == k) { - return true; - } - } else { - if (result[j].id == k) { - return true; - } - } - } - return false; - } - - obj.find = function(str) { - if (obj.search == str.trim()) { - return false; - } - - // Search term - obj.search = str; - - // Reset index - obj.setCursor(); - - // Remove nodes from all groups - if (obj.groups.length) { - for (var i = 0; i < obj.groups.length; i++) { - obj.groups[i].lastChild.innerHTML = ''; - } - } - - // Remove all nodes - content.innerHTML = ''; - - // Remove current items in the remote search - if (obj.options.remoteSearch == true) { - // Reset results - obj.results = null; - // URL - var url = obj.options.url + (obj.options.url.indexOf('?') > 0 ? '&' : '?') + 'q=' + str; - // Remote search - jSuites.ajax({ - url: url, - method: 'GET', - dataType: 'json', - success: function(result) { - // Reset items - obj.items = []; - - // Add the current selected items to the results in case they are not there - var current = Object.keys(obj.value); - if (current.length) { - for (var i = 0; i < current.length; i++) { - if (! exists(current[i], result)) { - if (! obj.options.format) { - result.unshift({ value: current[i], text: obj.value[current[i]] }); - } else { - result.unshift({ id: current[i], name: obj.value[current[i]] }); - } - } - } - } - // Append data - obj.appendData(result); - // Show or hide results - if (! result.length) { - content.style.display = 'none'; - } else { - content.style.display = ''; - } - } - }); - } else { - // Search terms - str = new RegExp(str, 'gi'); - - // Reset search - var results = []; - - // Append options - for (var i = 0; i < obj.items.length; i++) { - // Item label - var label = Text(i); - // Item title - var title = obj.items[i].data.title || ''; - // Group name - var groupName = obj.items[i].data.group || ''; - // Synonym - var synonym = obj.items[i].data.synonym || ''; - if (synonym) { - synonym = synonym.join(' '); - } - - if (str == null || obj.items[i].selected == true || label.match(str) || title.match(str) || groupName.match(str) || synonym.match(str)) { - results.push(obj.items[i]); - } - } - - if (! results.length) { - content.style.display = 'none'; - - // Results - obj.results = null; - } else { - content.style.display = ''; - - // Results - obj.results = results; - - // Show 200 items at once - var number = results.length || 0; - - // Lazyloading - if (obj.options.lazyLoading == true && number > 200) { - number = 200; - } - - for (var i = 0; i < number; i++) { - if (obj.results[i].group) { - if (! obj.results[i].group.parentNode) { - content.appendChild(obj.results[i].group); - } - obj.results[i].group.lastChild.appendChild(obj.results[i].element); - } else { - content.appendChild(obj.results[i].element); - } - } - } - } - - // Auto focus - if (obj.options.autofocus == true) { - obj.first(); - } - } - - obj.open = function() { - // Focus - if (! el.classList.contains('jdropdown-focus')) { - // Current dropdown - jSuites.dropdown.current = obj; - - // Start tracking - jSuites.tracking(obj, true); - - // Add focus - el.classList.add('jdropdown-focus'); - - // Animation - if (jSuites.getWindowWidth() < 800) { - if (obj.options.type == null || obj.options.type == 'picker') { - jSuites.animation.slideBottom(container, 1); - } - } - - // Filter - if (obj.options.autocomplete == true) { - obj.header.value = obj.search; - obj.header.focus(); - } - - // Set cursor for the first or first selected element - var k = getValue(); - if (k[0]) { - var cursor = obj.getPosition(k[0]); - if (cursor !== false) { - obj.setCursor(cursor); - } - } - - // Container Size - if (! obj.options.type || obj.options.type == 'default') { - var rect = el.getBoundingClientRect(); - var rectContainer = container.getBoundingClientRect(); - - if (obj.options.position) { - container.style.position = 'fixed'; - if (window.innerHeight < rect.bottom + rectContainer.height) { - container.style.top = ''; - container.style.bottom = (window.innerHeight - rect.top ) + 1 + 'px'; - } else { - container.style.top = rect.bottom + 'px'; - container.style.bottom = ''; - } - container.style.left = rect.left + 'px'; - } else { - if (window.innerHeight < rect.bottom + rectContainer.height) { - container.style.top = ''; - container.style.bottom = rect.height + 1 + 'px'; - } else { - container.style.top = ''; - container.style.bottom = ''; - } - } - - container.style.minWidth = rect.width + 'px'; - - if (obj.options.maxWidth) { - container.style.maxWidth = obj.options.maxWidth; - } - - if (! obj.items.length && obj.options.autocomplete == true) { - content.style.display = 'none'; - } else { - content.style.display = ''; - } - } - } - - // Events - if (typeof(obj.options.onopen) == 'function') { - obj.options.onopen(el); - } - } - - obj.close = function(ignoreEvents) { - if (el.classList.contains('jdropdown-focus')) { - // Update labels - obj.header.value = obj.getText(); - // Remove cursor - obj.setCursor(); - // Events - if (! ignoreEvents && typeof(obj.options.onclose) == 'function') { - obj.options.onclose(el); - } - // Blur - if (obj.header.blur) { - obj.header.blur(); - } - // Remove focus - el.classList.remove('jdropdown-focus'); - // Start tracking - jSuites.tracking(obj, false); - // Current dropdown - jSuites.dropdown.current = null; - } - - return obj.getValue(); - } - - /** - * Set cursor - */ - obj.setCursor = function(index, setPosition) { - // Remove current cursor - if (obj.currentIndex != null) { - // Remove visual cursor - if (obj.items && obj.items[obj.currentIndex]) { - obj.items[obj.currentIndex].element.classList.remove('jdropdown-cursor'); - } - } - - if (index == undefined) { - obj.currentIndex = null; - } else { - index = parseInt(index); - - // Cursor only for visible items - if (obj.items[index].element.parentNode) { - obj.items[index].element.classList.add('jdropdown-cursor'); - obj.currentIndex = index; - - // Update scroll to the cursor element - if (setPosition !== false && obj.items[obj.currentIndex].element) { - var container = content.scrollTop; - var element = obj.items[obj.currentIndex].element; - content.scrollTop = element.offsetTop - element.scrollTop + element.clientTop - 95; - } - } - } - } - - // Compatibility - obj.resetCursor = obj.setCursor; - obj.updateCursor = obj.setCursor; - - /** - * Reset cursor and selected items - */ - obj.reset = function() { - // Reset cursor - obj.setCursor(); - - // Reset selected - obj.setValue(null); - } - - /** - * First available item - */ - obj.first = function() { - if (obj.options.lazyLoading === true) { - obj.loadFirst(); - } - - var items = content.querySelectorAll('.jdropdown-item'); - if (items.length) { - var newIndex = items[0].indexValue; - obj.setCursor(newIndex); - } - } - - /** - * Last available item - */ - obj.last = function() { - if (obj.options.lazyLoading === true) { - obj.loadLast(); - } - - var items = content.querySelectorAll('.jdropdown-item'); - if (items.length) { - var newIndex = items[items.length-1].indexValue; - obj.setCursor(newIndex); - } - } - - obj.next = function(letter) { - var newIndex = null; - - if (letter) { - if (letter.length == 1) { - // Current index - var current = obj.currentIndex || -1; - // Letter - letter = letter.toLowerCase(); - - var e = null; - var l = null; - var items = content.querySelectorAll('.jdropdown-item'); - if (items.length) { - for (var i = 0; i < items.length; i++) { - if (items[i].indexValue > current) { - if (e = obj.items[items[i].indexValue]) { - if (l = e.element.innerText[0]) { - l = l.toLowerCase(); - if (letter == l) { - newIndex = items[i].indexValue; - break; - } - } - } - } - } - obj.setCursor(newIndex); - } - } - } else { - if (obj.currentIndex == undefined || obj.currentIndex == null) { - obj.first(); - } else { - var element = obj.items[obj.currentIndex].element; - - var next = element.nextElementSibling; - if (next) { - if (next.classList.contains('jdropdown-group')) { - next = next.lastChild.firstChild; - } - newIndex = next.indexValue; - } else { - if (element.parentNode.classList.contains('jdropdown-group-items')) { - if (next = element.parentNode.parentNode.nextElementSibling) { - if (next.classList.contains('jdropdown-group')) { - next = next.lastChild.firstChild; - } else if (next.classList.contains('jdropdown-item')) { - newIndex = next.indexValue; - } else { - next = null; - } - } - - if (next) { - newIndex = next.indexValue; - } - } - } - - if (newIndex !== null) { - obj.setCursor(newIndex); - } - } - } - } - - obj.prev = function() { - var newIndex = null; - - if (obj.currentIndex === null) { - obj.first(); - } else { - var element = obj.items[obj.currentIndex].element; - - var prev = element.previousElementSibling; - if (prev) { - if (prev.classList.contains('jdropdown-group')) { - prev = prev.lastChild.lastChild; - } - newIndex = prev.indexValue; - } else { - if (element.parentNode.classList.contains('jdropdown-group-items')) { - if (prev = element.parentNode.parentNode.previousElementSibling) { - if (prev.classList.contains('jdropdown-group')) { - prev = prev.lastChild.lastChild; - } else if (prev.classList.contains('jdropdown-item')) { - newIndex = prev.indexValue; - } else { - prev = null - } - } - - if (prev) { - newIndex = prev.indexValue; - } - } - } - } - - if (newIndex !== null) { - obj.setCursor(newIndex); - } - } - - obj.loadFirst = function() { - // Search - if (obj.results) { - var results = obj.results; - } else { - var results = obj.items; - } - - // Show 200 items at once - var number = results.length || 0; - - // Lazyloading - if (obj.options.lazyLoading == true && number > 200) { - number = 200; - } - - // Reset container - content.innerHTML = ''; - - // First 200 items - for (var i = 0; i < number; i++) { - if (results[i].group) { - if (! results[i].group.parentNode) { - content.appendChild(results[i].group); - } - results[i].group.lastChild.appendChild(results[i].element); - } else { - content.appendChild(results[i].element); - } - } - - // Scroll go to the begin - content.scrollTop = 0; - } - - obj.loadLast = function() { - // Search - if (obj.results) { - var results = obj.results; - } else { - var results = obj.items; - } - - // Show first page - var number = results.length; - - // Max 200 items - if (number > 200) { - number = number - 200; - - // Reset container - content.innerHTML = ''; - - // First 200 items - for (var i = number; i < results.length; i++) { - if (results[i].group) { - if (! results[i].group.parentNode) { - content.appendChild(results[i].group); - } - results[i].group.lastChild.appendChild(results[i].element); - } else { - content.appendChild(results[i].element); - } - } - - // Scroll go to the begin - content.scrollTop = content.scrollHeight; - } - } - - obj.loadUp = function() { - var test = false; - - // Search - if (obj.results) { - var results = obj.results; - } else { - var results = obj.items; - } - - var items = content.querySelectorAll('.jdropdown-item'); - var fistItem = items[0].indexValue; - fistItem = obj.items[fistItem]; - var index = results.indexOf(fistItem) - 1; - - if (index > 0) { - var number = 0; - - while (index > 0 && results[index] && number < 200) { - if (results[index].group) { - if (! results[index].group.parentNode) { - content.insertBefore(results[index].group, content.firstChild); - } - results[index].group.lastChild.insertBefore(results[index].element, results[index].group.lastChild.firstChild); - } else { - content.insertBefore(results[index].element, content.firstChild); - } - - index--; - number++; - } - - // New item added - test = true; - } - - return test; - } - - obj.loadDown = function() { - var test = false; - - // Search - if (obj.results) { - var results = obj.results; - } else { - var results = obj.items; - } - - var items = content.querySelectorAll('.jdropdown-item'); - var lastItem = items[items.length-1].indexValue; - lastItem = obj.items[lastItem]; - var index = results.indexOf(lastItem) + 1; - - if (index < results.length) { - var number = 0; - while (index < results.length && results[index] && number < 200) { - if (results[index].group) { - if (! results[index].group.parentNode) { - content.appendChild(results[index].group); - } - results[index].group.lastChild.appendChild(results[index].element); - } else { - content.appendChild(results[index].element); - } - - index++; - number++; - } - - // New item added - test = true; - } - - return test; - } - - init(); - - return obj; -}); - -jSuites.dropdown.keydown = function(e) { - var dropdown = null; - if (dropdown = jSuites.dropdown.current) { - if (e.which == 13 || e.which == 9) { // enter or tab - if (dropdown.header.value && dropdown.currentIndex == null && dropdown.options.newOptions) { - // if they typed something in, but it matched nothing, and newOptions are allowed, start that flow - dropdown.add(); - } else { - // Quick Select/Filter - if (dropdown.currentIndex == null && dropdown.options.autocomplete == true && dropdown.header.value != "") { - dropdown.find(dropdown.header.value); - } - dropdown.selectIndex(dropdown.currentIndex); - } - } else if (e.which == 38) { // up arrow - if (dropdown.currentIndex == null) { - dropdown.first(); - } else if (dropdown.currentIndex > 0) { - dropdown.prev(); - } - e.preventDefault(); - } else if (e.which == 40) { // down arrow - if (dropdown.currentIndex == null) { - dropdown.first(); - } else if (dropdown.currentIndex + 1 < dropdown.items.length) { - dropdown.next(); - } - e.preventDefault(); - } else if (e.which == 36) { - dropdown.first(); - if (! e.target.classList.contains('jdropdown-header')) { - e.preventDefault(); - } - } else if (e.which == 35) { - dropdown.last(); - if (! e.target.classList.contains('jdropdown-header')) { - e.preventDefault(); - } - } else if (e.which == 27) { - dropdown.close(); - } else if (e.which == 33) { // page up - if (dropdown.currentIndex == null) { - dropdown.first(); - } else if (dropdown.currentIndex > 0) { - for (var i = 0; i < 7; i++) { - dropdown.prev() - } - } - e.preventDefault(); - } else if (e.which == 34) { // page down - if (dropdown.currentIndex == null) { - dropdown.first(); - } else if (dropdown.currentIndex + 1 < dropdown.items.length) { - for (var i = 0; i < 7; i++) { - dropdown.next() - } - } - e.preventDefault(); - } - } -} - -jSuites.dropdown.mouseup = function(e) { - var element = jSuites.findElement(e.target, 'jdropdown'); - if (element) { - var dropdown = element.dropdown; - if (e.target.classList.contains('jdropdown-header')) { - if (element.classList.contains('jdropdown-focus') && element.classList.contains('jdropdown-default')) { - var rect = element.getBoundingClientRect(); - - if (e.changedTouches && e.changedTouches[0]) { - var x = e.changedTouches[0].clientX; - var y = e.changedTouches[0].clientY; - } else { - var x = e.clientX; - var y = e.clientY; - } - - if (rect.width - (x - rect.left) < 30) { - if (e.target.classList.contains('jdropdown-add')) { - dropdown.add(); - } else { - dropdown.close(); - } - } else { - if (dropdown.options.autocomplete == false) { - dropdown.close(); - } - } - } else { - dropdown.open(); - } - } else if (e.target.classList.contains('jdropdown-group-name')) { - var items = e.target.nextSibling.children; - if (e.target.nextSibling.style.display != 'none') { - for (var i = 0; i < items.length; i++) { - if (items[i].style.display != 'none') { - dropdown.selectItem(items[i]); - } - } - } - } else if (e.target.classList.contains('jdropdown-group-arrow')) { - if (e.target.classList.contains('jdropdown-group-arrow-down')) { - e.target.classList.remove('jdropdown-group-arrow-down'); - e.target.classList.add('jdropdown-group-arrow-up'); - e.target.parentNode.nextSibling.style.display = 'none'; - } else { - e.target.classList.remove('jdropdown-group-arrow-up'); - e.target.classList.add('jdropdown-group-arrow-down'); - e.target.parentNode.nextSibling.style.display = ''; - } - } else if (e.target.classList.contains('jdropdown-item')) { - dropdown.selectItem(e.target); - } else if (e.target.classList.contains('jdropdown-image')) { - dropdown.selectItem(e.target.parentNode); - } else if (e.target.classList.contains('jdropdown-description')) { - dropdown.selectItem(e.target.parentNode); - } else if (e.target.classList.contains('jdropdown-title')) { - dropdown.selectItem(e.target.parentNode.parentNode); - } else if (e.target.classList.contains('jdropdown-close') || e.target.classList.contains('jdropdown-backdrop')) { - dropdown.close(); - } - } -} - -jSuites.dropdown.extractFromDom = function(el, options) { - // Keep reference - var select = el; - if (! options) { - options = {}; - } - // Prepare configuration - if (el.getAttribute('multiple') && (! options || options.multiple == undefined)) { - options.multiple = true; - } - if (el.getAttribute('placeholder') && (! options || options.placeholder == undefined)) { - options.placeholder = el.getAttribute('placeholder'); - } - if (el.getAttribute('data-autocomplete') && (! options || options.autocomplete == undefined)) { - options.autocomplete = true; - } - if (! options || options.width == undefined) { - options.width = el.offsetWidth; - } - if (el.value && (! options || options.value == undefined)) { - options.value = el.value; - } - if (! options || options.data == undefined) { - options.data = []; - for (var j = 0; j < el.children.length; j++) { - if (el.children[j].tagName == 'OPTGROUP') { - for (var i = 0; i < el.children[j].children.length; i++) { - options.data.push({ - value: el.children[j].children[i].value, - text: el.children[j].children[i].innerHTML, - group: el.children[j].getAttribute('label'), - }); - } - } else { - options.data.push({ - value: el.children[j].value, - text: el.children[j].innerHTML, - }); - } - } - } - if (! options || options.onchange == undefined) { - options.onchange = function(a,b,c,d) { - if (options.multiple == true) { - if (obj.items[b].classList.contains('jdropdown-selected')) { - select.options[b].setAttribute('selected', 'selected'); - } else { - select.options[b].removeAttribute('selected'); - } - } else { - select.value = d; - } - } - } - // Create DIV - var div = document.createElement('div'); - el.parentNode.insertBefore(div, el); - el.style.display = 'none'; - el = div; - - return { el:el, options:options }; -} - -jSuites.editor = (function(el, options) { - // New instance - var obj = { type:'editor' }; - obj.options = {}; - - // Default configuration - var defaults = { - // Load data from a remove location - url: null, - // Initial HTML content - value: '', - // Initial snippet - snippet: null, - // Add toolbar - toolbar: true, - toolbarOnTop: false, - // Website parser is to read websites and images from cross domain - remoteParser: null, - // Placeholder - placeholder: null, - // Parse URL - filterPaste: true, - // Accept drop files - dropZone: true, - dropAsSnippet: false, - acceptImages: true, - acceptFiles: false, - maxFileSize: 5000000, - allowImageResize: true, - // Style - maxHeight: null, - height: null, - focus: false, - // Events - onclick: null, - onfocus: null, - onblur: null, - onload: null, - onkeyup: null, - onkeydown: null, - onchange: null, - extensions: null, - type: null, - }; - - // Loop through our object - for (var property in defaults) { - if (options && options.hasOwnProperty(property)) { - obj.options[property] = options[property]; - } else { - obj.options[property] = defaults[property]; - } - } - - // Private controllers - var editorTimer = null; - var editorAction = null; - var files = []; - - // Keep the reference for the container - obj.el = el; - - if (typeof(obj.options.onclick) == 'function') { - el.onclick = function(e) { - obj.options.onclick(el, obj, e); - } - } - - // Prepare container - el.classList.add('jeditor-container'); - - // Snippet - var snippet = document.createElement('div'); - snippet.className = 'jsnippet'; - snippet.setAttribute('contenteditable', false); - - // Toolbar - var toolbar = document.createElement('div'); - toolbar.className = 'jeditor-toolbar'; - - obj.editor = document.createElement('div'); - obj.editor.setAttribute('contenteditable', true); - obj.editor.setAttribute('spellcheck', false); - obj.editor.classList.add('jeditor'); - - // Placeholder - if (obj.options.placeholder) { - obj.editor.setAttribute('data-placeholder', obj.options.placeholder); - } - - // Max height - if (obj.options.maxHeight || obj.options.height) { - obj.editor.style.overflowY = 'auto'; - - if (obj.options.maxHeight) { - obj.editor.style.maxHeight = obj.options.maxHeight; - } - if (obj.options.height) { - obj.editor.style.height = obj.options.height; - } - } - - // Set editor initial value - if (obj.options.url) { - jSuites.ajax({ - url: obj.options.url, - dataType: 'html', - success: function(result) { - obj.editor.innerHTML = result; - - jSuites.editor.setCursor(obj.editor, obj.options.focus == 'initial' ? true : false); - } - }) - } else { - if (obj.options.value) { - obj.editor.innerHTML = obj.options.value; - } else { - // Create from existing elements - for (var i = 0; i < el.children.length; i++) { - obj.editor.appendChild(el.children[i]); - } - } - } - - // Make sure element is empty - el.innerHTML = ''; - - /** - * Onchange event controllers - */ - var change = function(e) { - if (typeof(obj.options.onchange) == 'function') { - obj.options.onchange(el, obj, e); - } - - // Update value - obj.options.value = obj.getData(); - - // Lemonade JS - if (el.value != obj.options.value) { - el.value = obj.options.value; - if (typeof(el.oninput) == 'function') { - el.oninput({ - type: 'input', - target: el, - value: el.value - }); - } - } - } - - /** - * Extract images from a HTML string - */ - var extractImageFromHtml = function(html) { - // Create temp element - var div = document.createElement('div'); - div.innerHTML = html; - - // Extract images - var img = div.querySelectorAll('img'); - - if (img.length) { - for (var i = 0; i < img.length; i++) { - obj.addImage(img[i].src); - } - } - } - - /** - * Insert node at caret - */ - var insertNodeAtCaret = function(newNode) { - var sel, range; - - if (window.getSelection) { - sel = window.getSelection(); - if (sel.rangeCount) { - range = sel.getRangeAt(0); - var selectedText = range.toString(); - range.deleteContents(); - range.insertNode(newNode); - // move the cursor after element - range.setStartAfter(newNode); - range.setEndAfter(newNode); - sel.removeAllRanges(); - sel.addRange(range); - } - } - } - - var updateTotalImages = function() { - var o = null; - if (o = snippet.children[0]) { - // Make sure is a grid - if (! o.classList.contains('jslider-grid')) { - o.classList.add('jslider-grid'); - } - // Quantify of images - var number = o.children.length; - // Set the configuration of the grid - o.setAttribute('data-number', number > 4 ? 4 : number); - // Total of images inside the grid - if (number > 4) { - o.setAttribute('data-total', number - 4); - } else { - o.removeAttribute('data-total'); - } - } - } - - /** - * Append image to the snippet - */ - var appendImage = function(image) { - if (! snippet.innerHTML) { - obj.appendSnippet({}); - } - snippet.children[0].appendChild(image); - updateTotalImages(); - } - - /** - * Append snippet - * @Param object data - */ - obj.appendSnippet = function(data) { - // Reset snippet - snippet.innerHTML = ''; - - // Attributes - var a = [ 'image', 'title', 'description', 'host', 'url' ]; - - for (var i = 0; i < a.length; i++) { - var div = document.createElement('div'); - div.className = 'jsnippet-' + a[i]; - div.setAttribute('data-k', a[i]); - snippet.appendChild(div); - if (data[a[i]]) { - if (a[i] == 'image') { - if (! Array.isArray(data.image)) { - data.image = [ data.image ]; - } - for (var j = 0; j < data.image.length; j++) { - var img = document.createElement('img'); - img.src = data.image[j]; - div.appendChild(img); - } - } else { - div.innerHTML = data[a[i]]; - } - } - } - - obj.editor.appendChild(document.createElement('br')); - obj.editor.appendChild(snippet); - } - - /** - * Set editor value - */ - obj.setData = function(o) { - if (typeof(o) == 'object') { - obj.editor.innerHTML = o.content; - } else { - obj.editor.innerHTML = o; - } - - if (obj.options.focus) { - jSuites.editor.setCursor(obj.editor, true); - } - - // Reset files container - files = []; - } - - obj.getFiles = function() { - var f = obj.editor.querySelectorAll('.jfile'); - var d = []; - for (var i = 0; i < f.length; i++) { - if (files[f[i].src]) { - d.push(files[f[i].src]); - } - } - return d; - } - - obj.getText = function() { - return obj.editor.innerText; - } - - /** - * Get editor data - */ - obj.getData = function(json) { - if (! json) { - var data = obj.editor.innerHTML; - } else { - var data = { - content : '', - } - - // Get snippet - if (snippet.innerHTML) { - var index = 0; - data.snippet = {}; - for (var i = 0; i < snippet.children.length; i++) { - // Get key from element - var key = snippet.children[i].getAttribute('data-k'); - if (key) { - if (key == 'image') { - if (! data.snippet.image) { - data.snippet.image = []; - } - // Get all images - for (var j = 0; j < snippet.children[i].children.length; j++) { - data.snippet.image.push(snippet.children[i].children[j].getAttribute('src')) - } - } else { - data.snippet[key] = snippet.children[i].innerHTML; - } - } - } - } - - // Get files - var f = Object.keys(files); - if (f.length) { - data.files = []; - for (var i = 0; i < f.length; i++) { - data.files.push(files[f[i]]); - } - } - - // Get content - var d = document.createElement('div'); - d.innerHTML = obj.editor.innerHTML; - var s = d.querySelector('.jsnippet'); - if (s) { - s.remove(); - } - - var text = d.innerHTML; - text = text.replace(/
/g, "\n"); - text = text.replace(/<\/div>/g, "<\/div>\n"); - text = text.replace(/<(?:.|\n)*?>/gm, ""); - data.content = text.trim(); - - // Process extensions - processExtensions('getData', data); - } - - return data; - } - - // Reset - obj.reset = function() { - obj.editor.innerHTML = ''; - snippet.innerHTML = ''; - files = []; - } - - obj.addPdf = function(data) { - if (data.result.substr(0,4) != 'data') { - console.error('Invalid source'); - } else { - var canvas = document.createElement('canvas'); - canvas.width = 60; - canvas.height = 60; - - var img = new Image(); - var ctx = canvas.getContext('2d'); - ctx.drawImage(img, 0, 0, canvas.width, canvas.height); - - canvas.toBlob(function(blob) { - var newImage = document.createElement('img'); - newImage.src = window.URL.createObjectURL(blob); - newImage.title = data.name; - newImage.className = 'jfile pdf'; - - files[newImage.src] = { - file: newImage.src, - extension: 'pdf', - content: data.result, - } - - //insertNodeAtCaret(newImage); - document.execCommand('insertHtml', false, newImage.outerHTML); - }); - } - } - - obj.addImage = function(src, asSnippet) { - if (! src) { - src = ''; - } - - if (src.substr(0,4) != 'data' && ! obj.options.remoteParser) { - console.error('remoteParser not defined in your initialization'); - } else { - // This is to process cross domain images - if (src.substr(0,4) == 'data') { - var extension = src.split(';') - extension = extension[0].split('/'); - extension = extension[1]; - } else { - var extension = src.substr(src.lastIndexOf('.') + 1); - // Work for cross browsers - src = obj.options.remoteParser + src; - } - - var img = new Image(); - - img.onload = function onload() { - var canvas = document.createElement('canvas'); - canvas.width = img.width; - canvas.height = img.height; - - var ctx = canvas.getContext('2d'); - ctx.drawImage(img, 0, 0, canvas.width, canvas.height); - - canvas.toBlob(function(blob) { - var newImage = document.createElement('img'); - newImage.src = window.URL.createObjectURL(blob); - newImage.classList.add('jfile'); - newImage.setAttribute('tabindex', '900'); - newImage.setAttribute('width', img.width); - newImage.setAttribute('height', img.height); - files[newImage.src] = { - file: newImage.src, - extension: extension, - content: canvas.toDataURL(), - } - - if (obj.options.dropAsSnippet || asSnippet) { - appendImage(newImage); - // Just to understand the attachment is part of a snippet - files[newImage.src].snippet = true; - } else { - //insertNodeAtCaret(newImage); - document.execCommand('insertHtml', false, newImage.outerHTML); - } - - change(); - }); - }; - - img.src = src; - } - } - - obj.addFile = function(files) { - var reader = []; - - for (var i = 0; i < files.length; i++) { - if (files[i].size > obj.options.maxFileSize) { - alert('The file is too big'); - } else { - // Only PDF or Images - var type = files[i].type.split('/'); - - if (type[0] == 'image') { - type = 1; - } else if (type[1] == 'pdf') { - type = 2; - } else { - type = 0; - } - - if (type) { - // Create file - reader[i] = new FileReader(); - reader[i].index = i; - reader[i].type = type; - reader[i].name = files[i].name; - reader[i].date = files[i].lastModified; - reader[i].size = files[i].size; - reader[i].addEventListener("load", function (data) { - // Get result - if (data.target.type == 2) { - if (obj.options.acceptFiles == true) { - obj.addPdf(data.target); - } - } else { - obj.addImage(data.target.result); - } - }, false); - - reader[i].readAsDataURL(files[i]) - } else { - alert('The extension is not allowed'); - } - } - } - } - - // Destroy - obj.destroy = function() { - obj.editor.removeEventListener('mouseup', editorMouseUp); - obj.editor.removeEventListener('mousedown', editorMouseDown); - obj.editor.removeEventListener('mousemove', editorMouseMove); - obj.editor.removeEventListener('keyup', editorKeyUp); - obj.editor.removeEventListener('keydown', editorKeyDown); - obj.editor.removeEventListener('dragstart', editorDragStart); - obj.editor.removeEventListener('dragenter', editorDragEnter); - obj.editor.removeEventListener('dragover', editorDragOver); - obj.editor.removeEventListener('drop', editorDrop); - obj.editor.removeEventListener('paste', editorPaste); - obj.editor.removeEventListener('blur', editorBlur); - obj.editor.removeEventListener('focus', editorFocus); - - el.editor = null; - el.classList.remove('jeditor-container'); - - toolbar.remove(); - snippet.remove(); - obj.editor.remove(); - } - - obj.upload = function() { - jSuites.click(obj.file); - } - - // Elements to be removed - var remove = [ - HTMLUnknownElement, - HTMLAudioElement, - HTMLEmbedElement, - HTMLIFrameElement, - HTMLTextAreaElement, - HTMLInputElement, - HTMLScriptElement - ]; - - // Valid properties - var validProperty = ['width', 'height', 'align', 'border', 'src', 'tabindex']; - - // Valid CSS attributes - var validStyle = ['color', 'font-weight', 'font-size', 'background', 'background-color', 'margin']; - - var parse = function(element) { - // Remove attributes - if (element.attributes && element.attributes.length) { - var image = null; - var style = null; - // Process style attribute - var elementStyle = element.getAttribute('style'); - if (elementStyle) { - style = []; - var t = elementStyle.split(';'); - for (var j = 0; j < t.length; j++) { - var v = t[j].trim().split(':'); - if (validStyle.indexOf(v[0].trim()) >= 0) { - var k = v.shift(); - var v = v.join(':'); - style.push(k + ':' + v); - } - } - } - // Process image - if (element.tagName.toUpperCase() == 'IMG') { - if (! obj.options.acceptImages || ! element.src) { - element.parentNode.removeChild(element); - } else { - // Check if is data - element.setAttribute('tabindex', '900'); - // Check attributes for persistance - obj.addImage(element.src); - } - } - // Remove attributes - var attr = []; - var numAttributes = element.attributes.length - 1; - if (numAttributes > 0) { - for (var i = numAttributes; i >= 0 ; i--) { - attr.push(element.attributes[i].name); - } - attr.forEach(function(v) { - if (validProperty.indexOf(v) == -1) { - element.removeAttribute(v); - } - }); - } - element.style = ''; - // Add valid style - if (style && style.length) { - element.setAttribute('style', style.join(';')); - } - } - // Parse children - if (element.children.length) { - for (var i = 0; i < element.children.length; i++) { - parse(element.children[i]); - } - } - - if (remove.indexOf(element.constructor) >= 0) { - element.remove(); - } - } - - var select = function(e) { - var s = window.getSelection() - var r = document.createRange(); - r.selectNode(e); - s.addRange(r) - } - - var filter = function(data) { - if (data) { - data = data.replace(new RegExp('', 'gsi'), ''); - } - var parser = new DOMParser(); - var d = parser.parseFromString(data, "text/html"); - parse(d); - var span = document.createElement('span'); - span.innerHTML = d.firstChild.innerHTML; - return span; - } - - var editorPaste = function(e) { - if (obj.options.filterPaste == true) { - if (e.clipboardData || e.originalEvent.clipboardData) { - var html = (e.originalEvent || e).clipboardData.getData('text/html'); - var text = (e.originalEvent || e).clipboardData.getData('text/plain'); - var file = (e.originalEvent || e).clipboardData.files - } else if (window.clipboardData) { - var html = window.clipboardData.getData('Html'); - var text = window.clipboardData.getData('Text'); - var file = window.clipboardData.files - } - - if (file.length) { - // Paste a image from the clipboard - obj.addFile(file); - } else { - if (! html) { - html = text.split('\r\n'); - if (! e.target.innerText) { - html.map(function(v) { - var d = document.createElement('div'); - d.innerText = v; - obj.editor.appendChild(d); - }); - } else { - html = html.map(function(v) { - return '
' + v + '
'; - }); - document.execCommand('insertHtml', false, html.join('')); - } - } else { - var d = filter(html); - // Paste to the editor - //insertNodeAtCaret(d); - document.execCommand('insertHtml', false, d.innerHTML); - } - } - - e.preventDefault(); - } - } - - var editorDragStart = function(e) { - if (editorAction && editorAction.e) { - e.preventDefault(); - } - } - - var editorDragEnter = function(e) { - if (editorAction || obj.options.dropZone == false) { - // Do nothing - } else { - el.classList.add('jeditor-dragging'); - e.preventDefault(); - } - } - - var editorDragOver = function(e) { - if (editorAction || obj.options.dropZone == false) { - // Do nothing - } else { - if (editorTimer) { - clearTimeout(editorTimer); - } - - editorTimer = setTimeout(function() { - el.classList.remove('jeditor-dragging'); - }, 100); - e.preventDefault(); - } - } - - var editorDrop = function(e) { - if (editorAction || obj.options.dropZone == false) { - // Do nothing - } else { - // Position caret on the drop - var range = null; - if (document.caretRangeFromPoint) { - range=document.caretRangeFromPoint(e.clientX, e.clientY); - } else if (e.rangeParent) { - range=document.createRange(); - range.setStart(e.rangeParent,e.rangeOffset); - } - var sel = window.getSelection(); - sel.removeAllRanges(); - sel.addRange(range); - sel.anchorNode.parentNode.focus(); - - var html = (e.originalEvent || e).dataTransfer.getData('text/html'); - var text = (e.originalEvent || e).dataTransfer.getData('text/plain'); - var file = (e.originalEvent || e).dataTransfer.files; - - if (file.length) { - obj.addFile(file); - } else if (text) { - extractImageFromHtml(html); - } - - el.classList.remove('jeditor-dragging'); - e.preventDefault(); - } - } - - var editorBlur = function(e) { - // Process extensions - processExtensions('onevent', e); - // Apply changes - change(e); - // Blur - if (typeof(obj.options.onblur) == 'function') { - obj.options.onblur(el, obj, e); - } - } - - var editorFocus = function(e) { - // Focus - if (typeof(obj.options.onfocus) == 'function') { - obj.options.onfocus(el, obj, e); - } - } - - var editorKeyUp = function(e) { - if (! obj.editor.innerHTML) { - obj.editor.innerHTML = '

'; - } - if (typeof(obj.options.onkeyup) == 'function') { - obj.options.onkeyup(el, obj, e); - } - } - - var editorKeyDown = function(e) { - // Process extensions - processExtensions('onevent', e); - - if (e.key == 'Delete') { - if (e.target.tagName == 'IMG') { - var parent = e.target.parentNode; - select(e.target); - if (parent.classList.contains('jsnippet-image')) { - updateTotalImages(); - } - } - } - - if (typeof(obj.options.onkeydown) == 'function') { - obj.options.onkeydown(el, obj, e); - } - } - - var editorMouseUp = function(e) { - if (editorAction && editorAction.e) { - editorAction.e.classList.remove('resizing'); - - if (editorAction.e.changed == true) { - var image = editorAction.e.cloneNode() - image.width = parseInt(editorAction.e.style.width) || editorAction.e.getAttribute('width'); - image.height = parseInt(editorAction.e.style.height) || editorAction.e.getAttribute('height'); - editorAction.e.style.width = ''; - editorAction.e.style.height = ''; - select(editorAction.e); - document.execCommand('insertHtml', false, image.outerHTML); - } - } - - editorAction = false; - } - - var editorMouseDown = function(e) { - var close = function(snippet) { - var rect = snippet.getBoundingClientRect(); - if (rect.width - (e.clientX - rect.left) < 40 && e.clientY - rect.top < 40) { - snippet.innerHTML = ''; - snippet.remove(); - } - } - - if (e.target.tagName == 'IMG') { - if (e.target.style.cursor) { - var rect = e.target.getBoundingClientRect(); - editorAction = { - e: e.target, - x: e.clientX, - y: e.clientY, - w: rect.width, - h: rect.height, - d: e.target.style.cursor, - } - - if (! e.target.getAttribute('width')) { - e.target.setAttribute('width', rect.width) - } - - if (! e.target.getAttribute('height')) { - e.target.setAttribute('height', rect.height) - } - - var s = window.getSelection(); - if (s.rangeCount) { - for (var i = 0; i < s.rangeCount; i++) { - s.removeRange(s.getRangeAt(i)); - } - } - - e.target.classList.add('resizing'); - } else { - editorAction = true; - } - } else { - if (e.target.classList.contains('jsnippet')) { - close(e.target); - } else if (e.target.parentNode.classList.contains('jsnippet')) { - close(e.target.parentNode); - } - - editorAction = true; - } - } - - var editorMouseMove = function(e) { - if (e.target.tagName == 'IMG' && ! e.target.parentNode.classList.contains('jsnippet-image') && obj.options.allowImageResize == true) { - if (e.target.getAttribute('tabindex')) { - var rect = e.target.getBoundingClientRect(); - if (e.clientY - rect.top < 5) { - if (rect.width - (e.clientX - rect.left) < 5) { - e.target.style.cursor = 'ne-resize'; - } else if (e.clientX - rect.left < 5) { - e.target.style.cursor = 'nw-resize'; - } else { - e.target.style.cursor = 'n-resize'; - } - } else if (rect.height - (e.clientY - rect.top) < 5) { - if (rect.width - (e.clientX - rect.left) < 5) { - e.target.style.cursor = 'se-resize'; - } else if (e.clientX - rect.left < 5) { - e.target.style.cursor = 'sw-resize'; - } else { - e.target.style.cursor = 's-resize'; - } - } else if (rect.width - (e.clientX - rect.left) < 5) { - e.target.style.cursor = 'e-resize'; - } else if (e.clientX - rect.left < 5) { - e.target.style.cursor = 'w-resize'; - } else { - e.target.style.cursor = ''; - } - } - } - - // Move - if (e.which == 1 && editorAction && editorAction.d) { - if (editorAction.d == 'e-resize' || editorAction.d == 'ne-resize' || editorAction.d == 'se-resize') { - editorAction.e.style.width = (editorAction.w + (e.clientX - editorAction.x)); - - if (e.shiftKey) { - var newHeight = (e.clientX - editorAction.x) * (editorAction.h / editorAction.w); - editorAction.e.style.height = editorAction.h + newHeight; - } else { - var newHeight = null; - } - } - - if (! newHeight) { - if (editorAction.d == 's-resize' || editorAction.d == 'se-resize' || editorAction.d == 'sw-resize') { - if (! e.shiftKey) { - editorAction.e.style.height = editorAction.h + (e.clientY - editorAction.y); - } - } - } - - editorAction.e.changed = true; - } - } - - var processExtensions = function(method, data) { - if (obj.options.extensions) { - var ext = Object.keys(obj.options.extensions); - if (ext.length) { - for (var i = 0; i < ext.length; i++) - if (obj.options.extensions[ext[i]] && typeof(obj.options.extensions[ext[i]][method]) == 'function') { - obj.options.extensions[ext[i]][method].call(obj, data); - } - } - } - } - - var loadExtensions = function() { - if (obj.options.extensions) { - var ext = Object.keys(obj.options.extensions); - if (ext.length) { - for (var i = 0; i < ext.length; i++) { - if (obj.options.extensions[ext[i]] && typeof (obj.options.extensions[ext[i]]) == 'function') { - obj.options.extensions[ext[i]] = obj.options.extensions[ext[i]](el, obj); - } - } - } - } - } - - document.addEventListener('mouseup', editorMouseUp); - document.addEventListener('mousemove', editorMouseMove); - obj.editor.addEventListener('mousedown', editorMouseDown); - obj.editor.addEventListener('keyup', editorKeyUp); - obj.editor.addEventListener('keydown', editorKeyDown); - obj.editor.addEventListener('dragstart', editorDragStart); - obj.editor.addEventListener('dragenter', editorDragEnter); - obj.editor.addEventListener('dragover', editorDragOver); - obj.editor.addEventListener('drop', editorDrop); - obj.editor.addEventListener('paste', editorPaste); - obj.editor.addEventListener('focus', editorFocus); - obj.editor.addEventListener('blur', editorBlur); - - // Append editor to the container - el.appendChild(obj.editor); - // Snippet - if (obj.options.snippet) { - obj.appendSnippet(obj.options.snippet); - } - - // Add toolbar - if (obj.options.toolbar) { - // Default toolbar configuration - if (Array.isArray(obj.options.toolbar)) { - var toolbarOptions = { - container: true, - responsive: true, - items: obj.options.toolbar - } - } else if (obj.options.toolbar === true) { - var toolbarOptions = { - container: true, - responsive: true, - items: [], - } - } else { - var toolbarOptions = obj.options.toolbar; - } - - // Default items - if (! (toolbarOptions.items && toolbarOptions.items.length)) { - toolbarOptions.items = jSuites.editor.getDefaultToolbar(obj); - } - - if (obj.options.toolbarOnTop) { - // Add class - el.classList.add('toolbar-on-top'); - // Append to the DOM - el.insertBefore(toolbar, el.firstChild); - } else { - // Add padding to the editor - obj.editor.style.padding = '15px'; - // Append to the DOM - el.appendChild(toolbar); - } - - // Create toolbar - jSuites.toolbar(toolbar, toolbarOptions); - - toolbar.addEventListener('click', function() { - obj.editor.focus(); - }) - } - - // Upload file - obj.file = document.createElement('input'); - obj.file.style.display = 'none'; - obj.file.type = 'file'; - obj.file.setAttribute('accept', 'image/*'); - obj.file.onchange = function() { - obj.addFile(this.files); - } - el.appendChild(obj.file); - - // Focus to the editor - if (obj.editor.innerHTML && obj.options.focus) { - jSuites.editor.setCursor(obj.editor, obj.options.focus == 'initial' ? true : false); - } - - // Change method - el.change = obj.setData; - - // Global generic value handler - el.val = function(val) { - if (val === undefined) { - // Data type - var o = el.getAttribute('data-html') === 'true' ? false : true; - return obj.getData(o); - } else { - obj.setData(val); - } - } - - loadExtensions(); - - el.editor = obj; - - // Onload - if (typeof(obj.options.onload) == 'function') { - obj.options.onload(el, obj, obj.editor); - } - - return obj; -}); - -jSuites.editor.setCursor = function(element, first) { - element.focus(); - document.execCommand('selectAll'); - var sel = window.getSelection(); - var range = sel.getRangeAt(0); - if (first == true) { - var node = range.startContainer; - var size = 0; - } else { - var node = range.endContainer; - var size = node.length; - } - range.setStart(node, size); - range.setEnd(node, size); - sel.removeAllRanges(); - sel.addRange(range); -} - -jSuites.editor.getDefaultToolbar = function(obj) { - - var color = function(a,b,c) { - if (! c.color) { - var t = null; - var colorPicker = jSuites.color(c, { - onchange: function(o, v) { - if (c.k === 'color') { - document.execCommand('foreColor', false, v); - } else { - document.execCommand('backColor', false, v); - } - } - }); - c.color.open(); - } - } - - var items = []; - - items.push({ - content: 'undo', - onclick: function() { - document.execCommand('undo'); - } - }); - - items.push({ - content: 'redo', - onclick: function() { - document.execCommand('redo'); - } - }); - - items.push({ - type: 'divisor' - }); - - if (obj.options.toolbarOnTop) { - items.push({ - type: 'select', - width: '140px', - options: ['Default', 'Verdana', 'Arial', 'Courier New'], - render: function (e) { - return '' + e + ''; - }, - onchange: function (a,b,c,d,e) { - document.execCommand("fontName", false, d); - } - }); - - items.push({ - type: 'select', - content: 'format_size', - options: ['x-small', 'small', 'medium', 'large', 'x-large'], - render: function (e) { - return '' + e + ''; - }, - onchange: function (a,b,c,d,e) { - //var html = `${text}`; - //document.execCommand('insertHtml', false, html); - document.execCommand("fontSize", false, parseInt(e)+1); - //var f = window.getSelection().anchorNode.parentNode - //f.removeAttribute("size"); - //f.style.fontSize = d; - } - }); - - items.push({ - type: 'select', - options: ['format_align_left', 'format_align_center', 'format_align_right', 'format_align_justify'], - render: function (e) { - return '' + e + ''; - }, - onchange: function (a,b,c,d,e) { - var options = ['JustifyLeft','justifyCenter','justifyRight','justifyFull']; - document.execCommand(options[e]); - } - }); - - items.push({ - type: 'divisor' - }); - - items.push({ - content: 'format_color_text', - k: 'color', - onclick: color, - }); - - items.push({ - content: 'format_color_fill', - k: 'background-color', - onclick: color, - }); - } - - items.push({ - content: 'format_bold', - onclick: function(a,b,c) { - document.execCommand('bold'); - - if (document.queryCommandState("bold")) { - c.classList.add('selected'); - } else { - c.classList.remove('selected'); - } - } - }); - - items.push({ - content: 'format_italic', - onclick: function(a,b,c) { - document.execCommand('italic'); - - if (document.queryCommandState("italic")) { - c.classList.add('selected'); - } else { - c.classList.remove('selected'); - } - } - }); - - items.push({ - content: 'format_underline', - onclick: function(a,b,c) { - document.execCommand('underline'); - - if (document.queryCommandState("underline")) { - c.classList.add('selected'); - } else { - c.classList.remove('selected'); - } - } - }); - - items.push({ - type:'divisor' - }); - - items.push({ - content: 'format_list_bulleted', - onclick: function(a,b,c) { - document.execCommand('insertUnorderedList'); - - if (document.queryCommandState("insertUnorderedList")) { - c.classList.add('selected'); - } else { - c.classList.remove('selected'); - } - } - }); - - items.push({ - content: 'format_list_numbered', - onclick: function(a,b,c) { - document.execCommand('insertOrderedList'); - - if (document.queryCommandState("insertOrderedList")) { - c.classList.add('selected'); - } else { - c.classList.remove('selected'); - } - } - }); - - items.push({ - content: 'format_indent_increase', - onclick: function(a,b,c) { - document.execCommand('indent', true, null); - - if (document.queryCommandState("indent")) { - c.classList.add('selected'); - } else { - c.classList.remove('selected'); - } - } - }); - - items.push({ - content: 'format_indent_decrease', - onclick: function() { - document.execCommand('outdent'); - - if (document.queryCommandState("outdent")) { - this.classList.add('selected'); - } else { - this.classList.remove('selected'); - } - } - }); - - if (obj.options.toolbarOnTop) { - items.push({ - type: 'divisor' - }); - - items.push({ - content: 'photo', - onclick: function () { - obj.upload(); - } - }); - - items.push({ - type: 'select', - content: 'table_view', - columns: 10, - right: true, - options: [ - '0x0', '1x0', '2x0', '3x0', '4x0', '5x0', '6x0', '7x0', '8x0', '9x0', - '0x1', '1x1', '2x1', '3x1', '4x1', '5x1', '6x1', '7x1', '8x1', '9x1', - '0x2', '1x2', '2x2', '3x2', '4x2', '5x2', '6x2', '7x2', '8x2', '9x2', - '0x3', '1x3', '2x3', '3x3', '4x3', '5x3', '6x3', '7x3', '8x3', '9x3', - '0x4', '1x4', '2x4', '3x4', '4x4', '5x4', '6x4', '7x4', '8x4', '9x4', - '0x5', '1x5', '2x5', '3x5', '4x5', '5x5', '6x5', '7x5', '8x5', '9x5', - '0x6', '1x6', '2x6', '3x6', '4x6', '5x6', '6x6', '7x6', '8x6', '9x6', - '0x7', '1x7', '2x7', '3x7', '4x7', '5x7', '6x7', '7x7', '8x7', '9x7', - '0x8', '1x8', '2x8', '3x8', '4x8', '5x8', '6x8', '7x8', '8x8', '9x8', - '0x9', '1x9', '2x9', '3x9', '4x9', '5x9', '6x9', '7x9', '8x9', '9x9', - ], - render: function (e, item) { - if (item) { - item.onmouseover = this.onmouseover; - e = e.split('x'); - item.setAttribute('data-x', e[0]); - item.setAttribute('data-y', e[1]); - } - var element = document.createElement('div'); - item.style.margin = '1px'; - item.style.border = '1px solid #ddd'; - return element; - }, - onmouseover: function (e) { - var x = parseInt(e.target.getAttribute('data-x')); - var y = parseInt(e.target.getAttribute('data-y')); - for (var i = 0; i < e.target.parentNode.children.length; i++) { - var element = e.target.parentNode.children[i]; - var ex = parseInt(element.getAttribute('data-x')); - var ey = parseInt(element.getAttribute('data-y')); - if (ex <= x && ey <= y) { - element.style.backgroundColor = '#cae1fc'; - element.style.borderColor = '#2977ff'; - } else { - element.style.backgroundColor = ''; - element.style.borderColor = '#ddd'; - } - } - }, - onchange: function (a, b, c) { - c = c.split('x'); - var table = document.createElement('table'); - var tbody = document.createElement('tbody'); - for (var y = 0; y <= c[1]; y++) { - var tr = document.createElement('tr'); - for (var x = 0; x <= c[0]; x++) { - var td = document.createElement('td'); - td.innerHTML = ''; - tr.appendChild(td); - } - tbody.appendChild(tr); - } - table.appendChild(tbody); - table.setAttribute('width', '100%'); - table.setAttribute('cellpadding', '6'); - table.setAttribute('cellspacing', '0'); - document.execCommand('insertHTML', false, table.outerHTML); - } - }); - } - - return items; -} - - -jSuites.form = (function(el, options) { - var obj = {}; - obj.options = {}; - - // Default configuration - var defaults = { - url: null, - message: 'Are you sure? There are unsaved information in your form', - ignore: false, - currentHash: null, - submitButton:null, - validations: null, - onbeforeload: null, - onload: null, - onbeforesave: null, - onsave: null, - onbeforeremove: null, - onremove: null, - onerror: function(el, message) { - jSuites.alert(message); - } - }; - - // Loop through our object - for (var property in defaults) { - if (options && options.hasOwnProperty(property)) { - obj.options[property] = options[property]; - } else { - obj.options[property] = defaults[property]; - } - } - - // Validations - if (! obj.options.validations) { - obj.options.validations = {}; - } - - // Submit Button - if (! obj.options.submitButton) { - obj.options.submitButton = el.querySelector('input[type=submit]'); - } - - if (obj.options.submitButton && obj.options.url) { - obj.options.submitButton.onclick = function() { - obj.save(); - } - } - - if (! obj.options.validations.email) { - obj.options.validations.email = jSuites.validations.email; - } - - if (! obj.options.validations.length) { - obj.options.validations.length = jSuites.validations.length; - } - - if (! obj.options.validations.required) { - obj.options.validations.required = jSuites.validations.required; - } - - obj.setUrl = function(url) { - obj.options.url = url; - } - - obj.load = function() { - jSuites.ajax({ - url: obj.options.url, - method: 'GET', - dataType: 'json', - queue: true, - success: function(data) { - // Overwrite values from the backend - if (typeof(obj.options.onbeforeload) == 'function') { - var ret = obj.options.onbeforeload(el, data); - if (ret) { - data = ret; - } - } - // Apply values to the form - jSuites.form.setElements(el, data); - // Onload methods - if (typeof(obj.options.onload) == 'function') { - obj.options.onload(el, data); - } - } - }); - } - - obj.save = function() { - var test = obj.validate(); - - if (test) { - obj.options.onerror(el, test); - } else { - var data = jSuites.form.getElements(el, true); - - if (typeof(obj.options.onbeforesave) == 'function') { - var data = obj.options.onbeforesave(el, data); - - if (data === false) { - return; - } - } - - jSuites.ajax({ - url: obj.options.url, - method: 'POST', - dataType: 'json', - data: data, - success: function(result) { - if (typeof(obj.options.onsave) == 'function') { - obj.options.onsave(el, data, result); - } - } - }); - } - } - - obj.remove = function() { - if (typeof(obj.options.onbeforeremove) == 'function') { - var ret = obj.options.onbeforeremove(el, obj); - if (ret === false) { - return false; - } - } - - jSuites.ajax({ - url: obj.options.url, - method: 'DELETE', - dataType: 'json', - success: function(result) { - if (typeof(obj.options.onremove) == 'function') { - obj.options.onremove(el, obj, result); - } - - obj.reset(); - } - }); - } - - var addError = function(element) { - // Add error in the element - element.classList.add('error'); - // Submit button - if (obj.options.submitButton) { - obj.options.submitButton.setAttribute('disabled', true); - } - // Return error message - var error = element.getAttribute('data-error') || 'There is an error in the form'; - element.setAttribute('title', error); - return error; - } - - var delError = function(element) { - var error = false; - // Remove class from this element - element.classList.remove('error'); - element.removeAttribute('title'); - // Get elements in the form - var elements = el.querySelectorAll("input, select, textarea, div[name]"); - // Run all elements - for (var i = 0; i < elements.length; i++) { - if (elements[i].getAttribute('data-validation')) { - if (elements[i].classList.contains('error')) { - error = true; - } - } - } - - if (obj.options.submitButton) { - if (error) { - obj.options.submitButton.setAttribute('disabled', true); - } else { - obj.options.submitButton.removeAttribute('disabled'); - } - } - } - - obj.validateElement = function(element) { - // Test results - var test = false; - // Value - var value = jSuites.form.getValue(element); - // Validation - var validation = element.getAttribute('data-validation'); - // Parse - if (typeof(obj.options.validations[validation]) == 'function' && ! obj.options.validations[validation](value, element)) { - // Not passed in the test - test = addError(element); - } else { - if (element.classList.contains('error')) { - delError(element); - } - } - - return test; - } - - obj.reset = function() { - // Get elements in the form - var name = null; - var elements = el.querySelectorAll("input, select, textarea, div[name]"); - // Run all elements - for (var i = 0; i < elements.length; i++) { - if (name = elements[i].getAttribute('name')) { - if (elements[i].type == 'checkbox' || elements[i].type == 'radio') { - elements[i].checked = false; - } else { - if (typeof(elements[i].val) == 'function') { - elements[i].val(''); - } else { - elements[i].value = ''; - } - } - } - } - } - - // Run form validation - obj.validate = function() { - var test = []; - // Get elements in the form - var elements = el.querySelectorAll("input, select, textarea, div[name]"); - // Run all elements - for (var i = 0; i < elements.length; i++) { - // Required - if (elements[i].getAttribute('data-validation')) { - var res = obj.validateElement(elements[i]); - if (res) { - test.push(res); - } - } - } - if (test.length > 0) { - return test.join('
'); - } else { - return false; - } - } - - // Check the form - obj.getError = function() { - // Validation - return obj.validation() ? true : false; - } - - // Return the form hash - obj.setHash = function() { - return obj.getHash(jSuites.form.getElements(el)); - } - - // Get the form hash - obj.getHash = function(str) { - var hash = 0, i, chr; - - if (str.length === 0) { - return hash; - } else { - for (i = 0; i < str.length; i++) { - chr = str.charCodeAt(i); - hash = ((hash << 5) - hash) + chr; - hash |= 0; - } - } - - return hash; - } - - // Is there any change in the form since start tracking? - obj.isChanged = function() { - var hash = obj.setHash(); - return (obj.options.currentHash != hash); - } - - // Restart tracking - obj.resetTracker = function() { - obj.options.currentHash = obj.setHash(); - obj.options.ignore = false; - } - - // Ignore flag - obj.setIgnore = function(ignoreFlag) { - obj.options.ignore = ignoreFlag ? true : false; - } - - // Start tracking in one second - setTimeout(function() { - obj.options.currentHash = obj.setHash(); - }, 1000); - - // Validations - el.addEventListener("keyup", function(e) { - if (e.target.getAttribute('data-validation')) { - obj.validateElement(e.target); - } - }); - - // Alert - if (! jSuites.form.hasEvents) { - window.addEventListener("beforeunload", function (e) { - if (obj.isChanged() && obj.options.ignore == false) { - var confirmationMessage = obj.options.message? obj.options.message : "\o/"; - - if (confirmationMessage) { - if (typeof e == 'undefined') { - e = window.event; - } - - if (e) { - e.returnValue = confirmationMessage; - } - - return confirmationMessage; - } else { - return void(0); - } - } - }); - - jSuites.form.hasEvents = true; - } - - el.form = obj; - - return obj; -}); - -// Get value from one element -jSuites.form.getValue = function(element) { - var value = null; - if (element.type == 'checkbox') { - if (element.checked == true) { - value = element.value || true; - } - } else if (element.type == 'radio') { - if (element.checked == true) { - value = element.value; - } - } else if (element.type == 'file') { - value = element.files; - } else if (element.tagName == 'select' && element.multiple == true) { - value = []; - var options = element.querySelectorAll("options[selected]"); - for (var j = 0; j < options.length; j++) { - value.push(options[j].value); - } - } else if (typeof(element.val) == 'function') { - value = element.val(); - } else { - value = element.value || ''; - } - - return value; -} - -// Get form elements -jSuites.form.getElements = function(el, asArray) { - var data = {}; - var name = null; - var elements = el.querySelectorAll("input, select, textarea, div[name]"); - - for (var i = 0; i < elements.length; i++) { - if (name = elements[i].getAttribute('name')) { - data[name] = jSuites.form.getValue(elements[i]) || ''; - } - } - - return asArray == true ? data : JSON.stringify(data); -} - -//Get form elements -jSuites.form.setElements = function(el, data) { - var name = null; - var value = null; - var elements = el.querySelectorAll("input, select, textarea, div[name]"); - for (var i = 0; i < elements.length; i++) { - // Attributes - var type = elements[i].getAttribute('type'); - if (name = elements[i].getAttribute('name')) { - // Transform variable names in pathname - name = name.replace(new RegExp(/\[(.*?)\]/ig), '.$1'); - value = null; - // Seach for the data in the path - if (name.match(/\./)) { - var tmp = jSuites.path.call(data, name) || ''; - if (typeof(tmp) !== 'undefined') { - value = tmp; - } - } else { - if (typeof(data[name]) !== 'undefined') { - value = data[name]; - } - } - // Set the values - if (value !== null) { - if (type == 'checkbox' || type == 'radio') { - elements[i].checked = value ? true : false; - } else if (type == 'file') { - // Do nothing - } else { - if (typeof (elements[i].val) == 'function') { - elements[i].val(value); - } else { - elements[i].value = value; - } - } - } - } - } -} - -// Legacy -jSuites.tracker = jSuites.form; - -jSuites.focus = function(el) { - if (el.innerText.length) { - var range = document.createRange(); - var sel = window.getSelection(); - var node = el.childNodes[el.childNodes.length-1]; - range.setStart(node, node.length) - range.collapse(true) - sel.removeAllRanges() - sel.addRange(range) - el.scrollLeft = el.scrollWidth; - } -} - -jSuites.isNumeric = (function (num) { - if (typeof(num) === 'string') { - num = num.trim(); - } - return !isNaN(num) && num !== null && num !== ''; -}); - -jSuites.guid = function() { - return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { - var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8); - return v.toString(16); - }); -} - -jSuites.getNode = function() { - var node = document.getSelection().anchorNode; - if (node) { - return (node.nodeType == 3 ? node.parentNode : node); - } else { - return null; - } -} -/** - * Generate hash from a string - */ -jSuites.hash = function(str) { - var hash = 0, i, chr; - - if (str.length === 0) { - return hash; - } else { - for (i = 0; i < str.length; i++) { - chr = str.charCodeAt(i); - if (chr > 32) { - hash = ((hash << 5) - hash) + chr; - hash |= 0; - } - } - } - return hash; -} - -/** - * Generate a random color - */ -jSuites.randomColor = function(h) { - var lum = -0.25; - var hex = String('#' + Math.random().toString(16).slice(2, 8).toUpperCase()).replace(/[^0-9a-f]/gi, ''); - if (hex.length < 6) { - hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2]; - } - var rgb = [], c, i; - for (i = 0; i < 3; i++) { - c = parseInt(hex.substr(i * 2, 2), 16); - c = Math.round(Math.min(Math.max(0, c + (c * lum)), 255)).toString(16); - rgb.push(("00" + c).substr(c.length)); - } - - // Return hex - if (h == true) { - return '#' + jSuites.two(rgb[0].toString(16)) + jSuites.two(rgb[1].toString(16)) + jSuites.two(rgb[2].toString(16)); - } - - return rgb; -} - -jSuites.getWindowWidth = function() { - var w = window, - d = document, - e = d.documentElement, - g = d.getElementsByTagName('body')[0], - x = w.innerWidth || e.clientWidth || g.clientWidth; - return x; -} - -jSuites.getWindowHeight = function() { - var w = window, - d = document, - e = d.documentElement, - g = d.getElementsByTagName('body')[0], - y = w.innerHeight|| e.clientHeight|| g.clientHeight; - return y; -} - -jSuites.getPosition = function(e) { - if (e.changedTouches && e.changedTouches[0]) { - var x = e.changedTouches[0].pageX; - var y = e.changedTouches[0].pageY; - } else { - var x = (window.Event) ? e.pageX : e.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft); - var y = (window.Event) ? e.pageY : e.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop); - } - - return [ x, y ]; -} - -jSuites.click = function(el) { - if (el.click) { - el.click(); - } else { - var evt = new MouseEvent('click', { - bubbles: true, - cancelable: true, - view: window - }); - el.dispatchEvent(evt); - } -} - -jSuites.findElement = function(element, condition) { - var foundElement = false; - - function path (element) { - if (element && ! foundElement) { - if (typeof(condition) == 'function') { - foundElement = condition(element) - } else if (typeof(condition) == 'string') { - if (element.classList && element.classList.contains(condition)) { - foundElement = element; - } - } - } - - if (element.parentNode && ! foundElement) { - path(element.parentNode); - } - } - - path(element); - - return foundElement; -} - -// Two digits -jSuites.two = function(value) { - value = '' + value; - if (value.length == 1) { - value = '0' + value; - } - return value; -} - -jSuites.sha512 = (function(str) { - function int64(msint_32, lsint_32) { - this.highOrder = msint_32; - this.lowOrder = lsint_32; - } - - var H = [new int64(0x6a09e667, 0xf3bcc908), new int64(0xbb67ae85, 0x84caa73b), - new int64(0x3c6ef372, 0xfe94f82b), new int64(0xa54ff53a, 0x5f1d36f1), - new int64(0x510e527f, 0xade682d1), new int64(0x9b05688c, 0x2b3e6c1f), - new int64(0x1f83d9ab, 0xfb41bd6b), new int64(0x5be0cd19, 0x137e2179)]; - - var K = [new int64(0x428a2f98, 0xd728ae22), new int64(0x71374491, 0x23ef65cd), - new int64(0xb5c0fbcf, 0xec4d3b2f), new int64(0xe9b5dba5, 0x8189dbbc), - new int64(0x3956c25b, 0xf348b538), new int64(0x59f111f1, 0xb605d019), - new int64(0x923f82a4, 0xaf194f9b), new int64(0xab1c5ed5, 0xda6d8118), - new int64(0xd807aa98, 0xa3030242), new int64(0x12835b01, 0x45706fbe), - new int64(0x243185be, 0x4ee4b28c), new int64(0x550c7dc3, 0xd5ffb4e2), - new int64(0x72be5d74, 0xf27b896f), new int64(0x80deb1fe, 0x3b1696b1), - new int64(0x9bdc06a7, 0x25c71235), new int64(0xc19bf174, 0xcf692694), - new int64(0xe49b69c1, 0x9ef14ad2), new int64(0xefbe4786, 0x384f25e3), - new int64(0x0fc19dc6, 0x8b8cd5b5), new int64(0x240ca1cc, 0x77ac9c65), - new int64(0x2de92c6f, 0x592b0275), new int64(0x4a7484aa, 0x6ea6e483), - new int64(0x5cb0a9dc, 0xbd41fbd4), new int64(0x76f988da, 0x831153b5), - new int64(0x983e5152, 0xee66dfab), new int64(0xa831c66d, 0x2db43210), - new int64(0xb00327c8, 0x98fb213f), new int64(0xbf597fc7, 0xbeef0ee4), - new int64(0xc6e00bf3, 0x3da88fc2), new int64(0xd5a79147, 0x930aa725), - new int64(0x06ca6351, 0xe003826f), new int64(0x14292967, 0x0a0e6e70), - new int64(0x27b70a85, 0x46d22ffc), new int64(0x2e1b2138, 0x5c26c926), - new int64(0x4d2c6dfc, 0x5ac42aed), new int64(0x53380d13, 0x9d95b3df), - new int64(0x650a7354, 0x8baf63de), new int64(0x766a0abb, 0x3c77b2a8), - new int64(0x81c2c92e, 0x47edaee6), new int64(0x92722c85, 0x1482353b), - new int64(0xa2bfe8a1, 0x4cf10364), new int64(0xa81a664b, 0xbc423001), - new int64(0xc24b8b70, 0xd0f89791), new int64(0xc76c51a3, 0x0654be30), - new int64(0xd192e819, 0xd6ef5218), new int64(0xd6990624, 0x5565a910), - new int64(0xf40e3585, 0x5771202a), new int64(0x106aa070, 0x32bbd1b8), - new int64(0x19a4c116, 0xb8d2d0c8), new int64(0x1e376c08, 0x5141ab53), - new int64(0x2748774c, 0xdf8eeb99), new int64(0x34b0bcb5, 0xe19b48a8), - new int64(0x391c0cb3, 0xc5c95a63), new int64(0x4ed8aa4a, 0xe3418acb), - new int64(0x5b9cca4f, 0x7763e373), new int64(0x682e6ff3, 0xd6b2b8a3), - new int64(0x748f82ee, 0x5defb2fc), new int64(0x78a5636f, 0x43172f60), - new int64(0x84c87814, 0xa1f0ab72), new int64(0x8cc70208, 0x1a6439ec), - new int64(0x90befffa, 0x23631e28), new int64(0xa4506ceb, 0xde82bde9), - new int64(0xbef9a3f7, 0xb2c67915), new int64(0xc67178f2, 0xe372532b), - new int64(0xca273ece, 0xea26619c), new int64(0xd186b8c7, 0x21c0c207), - new int64(0xeada7dd6, 0xcde0eb1e), new int64(0xf57d4f7f, 0xee6ed178), - new int64(0x06f067aa, 0x72176fba), new int64(0x0a637dc5, 0xa2c898a6), - new int64(0x113f9804, 0xbef90dae), new int64(0x1b710b35, 0x131c471b), - new int64(0x28db77f5, 0x23047d84), new int64(0x32caab7b, 0x40c72493), - new int64(0x3c9ebe0a, 0x15c9bebc), new int64(0x431d67c4, 0x9c100d4c), - new int64(0x4cc5d4be, 0xcb3e42b6), new int64(0x597f299c, 0xfc657e2a), - new int64(0x5fcb6fab, 0x3ad6faec), new int64(0x6c44198c, 0x4a475817)]; - - var W = new Array(64); - var a, b, c, d, e, f, g, h, i, j; - var T1, T2; - var charsize = 8; - - function utf8_encode(str) { - return unescape(encodeURIComponent(str)); - } - - function str2binb(str) { - var bin = []; - var mask = (1 << charsize) - 1; - var len = str.length * charsize; - - for (var i = 0; i < len; i += charsize) { - bin[i >> 5] |= (str.charCodeAt(i / charsize) & mask) << (32 - charsize - (i % 32)); - } - - return bin; - } - - function binb2hex(binarray) { - var hex_tab = "0123456789abcdef"; - var str = ""; - var length = binarray.length * 4; - var srcByte; - - for (var i = 0; i < length; i += 1) { - srcByte = binarray[i >> 2] >> ((3 - (i % 4)) * 8); - str += hex_tab.charAt((srcByte >> 4) & 0xF) + hex_tab.charAt(srcByte & 0xF); - } - - return str; - } - - function safe_add_2(x, y) { - var lsw, msw, lowOrder, highOrder; - - lsw = (x.lowOrder & 0xFFFF) + (y.lowOrder & 0xFFFF); - msw = (x.lowOrder >>> 16) + (y.lowOrder >>> 16) + (lsw >>> 16); - lowOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF); - - lsw = (x.highOrder & 0xFFFF) + (y.highOrder & 0xFFFF) + (msw >>> 16); - msw = (x.highOrder >>> 16) + (y.highOrder >>> 16) + (lsw >>> 16); - highOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF); - - return new int64(highOrder, lowOrder); - } - - function safe_add_4(a, b, c, d) { - var lsw, msw, lowOrder, highOrder; - - lsw = (a.lowOrder & 0xFFFF) + (b.lowOrder & 0xFFFF) + (c.lowOrder & 0xFFFF) + (d.lowOrder & 0xFFFF); - msw = (a.lowOrder >>> 16) + (b.lowOrder >>> 16) + (c.lowOrder >>> 16) + (d.lowOrder >>> 16) + (lsw >>> 16); - lowOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF); - - lsw = (a.highOrder & 0xFFFF) + (b.highOrder & 0xFFFF) + (c.highOrder & 0xFFFF) + (d.highOrder & 0xFFFF) + (msw >>> 16); - msw = (a.highOrder >>> 16) + (b.highOrder >>> 16) + (c.highOrder >>> 16) + (d.highOrder >>> 16) + (lsw >>> 16); - highOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF); - - return new int64(highOrder, lowOrder); - } - - function safe_add_5(a, b, c, d, e) { - var lsw, msw, lowOrder, highOrder; - - lsw = (a.lowOrder & 0xFFFF) + (b.lowOrder & 0xFFFF) + (c.lowOrder & 0xFFFF) + (d.lowOrder & 0xFFFF) + (e.lowOrder & 0xFFFF); - msw = (a.lowOrder >>> 16) + (b.lowOrder >>> 16) + (c.lowOrder >>> 16) + (d.lowOrder >>> 16) + (e.lowOrder >>> 16) + (lsw >>> 16); - lowOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF); - - lsw = (a.highOrder & 0xFFFF) + (b.highOrder & 0xFFFF) + (c.highOrder & 0xFFFF) + (d.highOrder & 0xFFFF) + (e.highOrder & 0xFFFF) + (msw >>> 16); - msw = (a.highOrder >>> 16) + (b.highOrder >>> 16) + (c.highOrder >>> 16) + (d.highOrder >>> 16) + (e.highOrder >>> 16) + (lsw >>> 16); - highOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF); - - return new int64(highOrder, lowOrder); - } - - function maj(x, y, z) { - return new int64( - (x.highOrder & y.highOrder) ^ (x.highOrder & z.highOrder) ^ (y.highOrder & z.highOrder), - (x.lowOrder & y.lowOrder) ^ (x.lowOrder & z.lowOrder) ^ (y.lowOrder & z.lowOrder) - ); - } - - function ch(x, y, z) { - return new int64( - (x.highOrder & y.highOrder) ^ (~x.highOrder & z.highOrder), - (x.lowOrder & y.lowOrder) ^ (~x.lowOrder & z.lowOrder) - ); - } - - function rotr(x, n) { - if (n <= 32) { - return new int64( - (x.highOrder >>> n) | (x.lowOrder << (32 - n)), - (x.lowOrder >>> n) | (x.highOrder << (32 - n)) - ); - } else { - return new int64( - (x.lowOrder >>> n) | (x.highOrder << (32 - n)), - (x.highOrder >>> n) | (x.lowOrder << (32 - n)) - ); - } - } - - function sigma0(x) { - var rotr28 = rotr(x, 28); - var rotr34 = rotr(x, 34); - var rotr39 = rotr(x, 39); - - return new int64( - rotr28.highOrder ^ rotr34.highOrder ^ rotr39.highOrder, - rotr28.lowOrder ^ rotr34.lowOrder ^ rotr39.lowOrder - ); - } - - function sigma1(x) { - var rotr14 = rotr(x, 14); - var rotr18 = rotr(x, 18); - var rotr41 = rotr(x, 41); - - return new int64( - rotr14.highOrder ^ rotr18.highOrder ^ rotr41.highOrder, - rotr14.lowOrder ^ rotr18.lowOrder ^ rotr41.lowOrder - ); - } - - function gamma0(x) { - var rotr1 = rotr(x, 1), rotr8 = rotr(x, 8), shr7 = shr(x, 7); - - return new int64( - rotr1.highOrder ^ rotr8.highOrder ^ shr7.highOrder, - rotr1.lowOrder ^ rotr8.lowOrder ^ shr7.lowOrder - ); - } - - function gamma1(x) { - var rotr19 = rotr(x, 19); - var rotr61 = rotr(x, 61); - var shr6 = shr(x, 6); - - return new int64( - rotr19.highOrder ^ rotr61.highOrder ^ shr6.highOrder, - rotr19.lowOrder ^ rotr61.lowOrder ^ shr6.lowOrder - ); - } - - function shr(x, n) { - if (n <= 32) { - return new int64( - x.highOrder >>> n, - x.lowOrder >>> n | (x.highOrder << (32 - n)) - ); - } else { - return new int64( - 0, - x.highOrder << (32 - n) - ); - } - } - - var str = utf8_encode(str); - var strlen = str.length*charsize; - str = str2binb(str); - - str[strlen >> 5] |= 0x80 << (24 - strlen % 32); - str[(((strlen + 128) >> 10) << 5) + 31] = strlen; - - for (var i = 0; i < str.length; i += 32) { - a = H[0]; - b = H[1]; - c = H[2]; - d = H[3]; - e = H[4]; - f = H[5]; - g = H[6]; - h = H[7]; - - for (var j = 0; j < 80; j++) { - if (j < 16) { - W[j] = new int64(str[j*2 + i], str[j*2 + i + 1]); - } else { - W[j] = safe_add_4(gamma1(W[j - 2]), W[j - 7], gamma0(W[j - 15]), W[j - 16]); - } - - T1 = safe_add_5(h, sigma1(e), ch(e, f, g), K[j], W[j]); - T2 = safe_add_2(sigma0(a), maj(a, b, c)); - h = g; - g = f; - f = e; - e = safe_add_2(d, T1); - d = c; - c = b; - b = a; - a = safe_add_2(T1, T2); - } - - H[0] = safe_add_2(a, H[0]); - H[1] = safe_add_2(b, H[1]); - H[2] = safe_add_2(c, H[2]); - H[3] = safe_add_2(d, H[3]); - H[4] = safe_add_2(e, H[4]); - H[5] = safe_add_2(f, H[5]); - H[6] = safe_add_2(g, H[6]); - H[7] = safe_add_2(h, H[7]); - } - - var binarray = []; - for (var i = 0; i < H.length; i++) { - binarray.push(H[i].highOrder); - binarray.push(H[i].lowOrder); - } - - return binb2hex(binarray); -}); - - -jSuites.image = jSuites.upload = (function(el, options) { - var obj = {}; - obj.options = {}; - - // Default configuration - var defaults = { - type: 'image', - extension: '*', - input: false, - minWidth: false, - maxWidth: null, - maxHeight: null, - maxJpegSizeBytes: null, // For example, 350Kb would be 350000 - onchange: null, - multiple: false, - remoteParser: null, - text:{ - extensionNotAllowed:'The extension is not allowed', - } - }; - - // Loop through our object - for (var property in defaults) { - if (options && options.hasOwnProperty(property)) { - obj.options[property] = options[property]; - } else { - obj.options[property] = defaults[property]; - } - } - - // Multiple - if (obj.options.multiple == true) { - el.setAttribute('data-multiple', true); - } - - // Container - el.content = []; - - // Upload icon - el.classList.add('jupload'); - - if (obj.options.input == true) { - el.classList.add('input'); - } - - obj.add = function(data) { - // Reset container for single files - if (obj.options.multiple == false) { - el.content = []; - el.innerText = ''; - } - - // Append to the element - if (obj.options.type == 'image') { - var img = document.createElement('img'); - img.setAttribute('src', data.file); - img.setAttribute('tabindex', -1); - if (! el.getAttribute('name')) { - img.className = 'jfile'; - img.content = data; - } - el.appendChild(img); - } else { - if (data.name) { - var name = data.name; - } else { - var name = data.file; - } - var div = document.createElement('div'); - div.innerText = name || obj.options.type; - div.classList.add('jupload-item'); - div.setAttribute('tabindex', -1); - el.appendChild(div); - } - - if (data.content) { - data.file = jSuites.guid(); - } - - // Push content - el.content.push(data); - - // Onchange - if (typeof(obj.options.onchange) == 'function') { - obj.options.onchange(el, data); - } - } - - obj.addFromFile = function(file) { - var type = file.type.split('/'); - if (type[0] == obj.options.type) { - var readFile = new FileReader(); - readFile.addEventListener("load", function (v) { - var data = { - file: v.srcElement.result, - extension: file.name.substr(file.name.lastIndexOf('.') + 1), - name: file.name, - size: file.size, - lastmodified: file.lastModified, - content: v.srcElement.result, - } - - obj.add(data); - }); - - readFile.readAsDataURL(file); - } else { - alert(obj.options.text.extensionNotAllowed); - } - } - - obj.addFromUrl = function(src) { - if (src.substr(0,4) != 'data' && ! obj.options.remoteParser) { - console.error('remoteParser not defined in your initialization'); - } else { - // This is to process cross domain images - if (src.substr(0,4) == 'data') { - var extension = src.split(';') - extension = extension[0].split('/'); - var type = extension[0].replace('data:',''); - if (type == obj.options.type) { - var data = { - file: src, - name: '', - extension: extension[1], - content: src, - } - obj.add(data); - } else { - alert(obj.options.text.extensionNotAllowed); - } - } else { - var extension = src.substr(src.lastIndexOf('.') + 1); - // Work for cross browsers - src = obj.options.remoteParser + src; - // Get remove content - jSuites.ajax({ - url: src, - type: 'GET', - dataType: 'blob', - success: function(data) { - //add(extension[0].replace('data:',''), data); - } - }) - } - } - } - - var getDataURL = function(canvas, type) { - var compression = 0.92; - var lastContentLength = null; - var content = canvas.toDataURL(type, compression); - while (obj.options.maxJpegSizeBytes && type === 'image/jpeg' && - content.length > obj.options.maxJpegSizeBytes && content.length !== lastContentLength) { - // Apply the compression - compression *= 0.9; - lastContentLength = content.length; - content = canvas.toDataURL(type, compression); - } - return content; - } - - var mime = obj.options.type + '/' + obj.options.extension; - var input = document.createElement('input'); - input.type = 'file'; - input.setAttribute('accept', mime); - input.onchange = function() { - for (var i = 0; i < this.files.length; i++) { - obj.addFromFile(this.files[i]); - } - } - - // Allow multiple files - if (obj.options.multiple == true) { - input.setAttribute('multiple', true); - } - - var current = null; - - el.addEventListener("click", function(e) { - current = null; - if (! el.children.length || e.target === el) { - jSuites.click(input); - } else { - if (e.target.parentNode == el) { - current = e.target; - } - } - }); - - el.addEventListener("dblclick", function(e) { - jSuites.click(input); - }); - - el.addEventListener('dragenter', function(e) { - el.style.border = '1px dashed #000'; - }); - - el.addEventListener('dragleave', function(e) { - el.style.border = '1px solid #eee'; - }); - - el.addEventListener('dragstop', function(e) { - el.style.border = '1px solid #eee'; - }); - - el.addEventListener('dragover', function(e) { - e.preventDefault(); - }); - - el.addEventListener('keydown', function(e) { - if (current && e.which == 46) { - var index = Array.prototype.indexOf.call(el.children, current); - if (index >= 0) { - el.content.splice(index, 1); - current.remove(); - current = null; - } - } - }); - - el.addEventListener('drop', function(e) { - e.preventDefault(); - e.stopPropagation(); - - var html = (e.originalEvent || e).dataTransfer.getData('text/html'); - var file = (e.originalEvent || e).dataTransfer.files; - - if (file.length) { - for (var i = 0; i < e.dataTransfer.files.length; i++) { - obj.addFromFile(e.dataTransfer.files[i]); - } - } else if (html) { - if (obj.options.multiple == false) { - el.innerText = ''; - } - - // Create temp element - var div = document.createElement('div'); - div.innerHTML = html; - - // Extract images - var img = div.querySelectorAll('img'); - - if (img.length) { - for (var i = 0; i < img.length; i++) { - obj.addFromUrl(img[i].src); - } - } - } - - el.style.border = '1px solid #eee'; - - return false; - }); - - el.val = function(val) { - if (val === undefined) { - return el.content && el.content.length ? el.content : null; - } else { - // Reset - el.innerText = ''; - el.content = []; - - if (val) { - if (Array.isArray(val)) { - for (var i = 0; i < val.length; i++) { - if (typeof(val[i]) == 'string') { - obj.add({ file: val[i] }); - } else { - obj.add(val[i]); - } - } - } else if (typeof(val) == 'string') { - obj.add({ file: val }); - } - } - } - } - - el.upload = el.image = obj; - - return obj; -}); - -jSuites.image.create = function(data) { - var img = document.createElement('img'); - img.setAttribute('src', data.file); - img.className = 'jfile'; - img.setAttribute('tabindex', -1); - img.content = data; - - return img; -} - - -jSuites.lazyLoading = (function(el, options) { - var obj = {} - - // Mandatory options - if (! options.loadUp || typeof(options.loadUp) != 'function') { - options.loadUp = function() { - return false; - } - } - if (! options.loadDown || typeof(options.loadDown) != 'function') { - options.loadDown = function() { - return false; - } - } - // Timer ms - if (! options.timer) { - options.timer = 100; - } - - // Timer - var timeControlLoading = null; - - // Controls - var scrollControls = function(e) { - if (timeControlLoading == null) { - var event = false; - var scrollTop = el.scrollTop; - if (el.scrollTop + (el.clientHeight * 2) >= el.scrollHeight) { - if (options.loadDown()) { - if (scrollTop == el.scrollTop) { - el.scrollTop = el.scrollTop - (el.clientHeight); - } - event = true; - } - } else if (el.scrollTop <= el.clientHeight) { - if (options.loadUp()) { - if (scrollTop == el.scrollTop) { - el.scrollTop = el.scrollTop + (el.clientHeight); - } - event = true; - } - } - - timeControlLoading = setTimeout(function() { - timeControlLoading = null; - }, options.timer); - - if (event) { - if (typeof(options.onupdate) == 'function') { - options.onupdate(); - } - } - } - } - - // Onscroll - el.onscroll = function(e) { - scrollControls(e); - } - - el.onwheel = function(e) { - scrollControls(e); - } - - return obj; -}); - -jSuites.loading = (function() { - var obj = {}; - - var loading = null; - - obj.show = function(timeout) { - if (! loading) { - loading = document.createElement('div'); - loading.className = 'jloading'; - } - document.body.appendChild(loading); - - // Max timeout in seconds - if (timeout > 0) { - setTimeout(function() { - obj.hide(); - }, timeout * 1000) - } - } - - obj.hide = function() { - if (loading && loading.parentNode) { - document.body.removeChild(loading); - } - } - - return obj; -})(); - -jSuites.mask = (function() { - // Currency - var tokens = { - // Text - text: [ '@' ], - // Currency tokens - currency: [ '#(.{1})##0?(.{1}0+)?( ?;(.*)?)?', '#' ], - // Percentage - percentage: [ '0{1}(.{1}0+)?%' ], - // Number - numeric: [ '0{1}(.{1}0+)?' ], - // Data tokens - datetime: [ 'YYYY', 'YYY', 'YY', 'MMMMM', 'MMMM', 'MMM', 'MM', 'DDDDD', 'DDDD', 'DDD', 'DD', 'DY', 'DAY', 'WD', 'D', 'Q', 'MONTH', 'MON', 'HH24', 'HH12', 'HH', '\\[H\\]', 'H', 'AM/PM', 'PM', 'AM', 'MI', 'SS', 'MS', 'Y', 'M' ], - // Other - general: [ 'A', '0', '[0-9a-zA-Z\$]+', '.'] - } - - var getDate = function() { - if (this.mask.toLowerCase().indexOf('[h]') !== -1) { - var m = 0; - if (this.date[4]) { - m = parseFloat(this.date[4] / 60); - } - var v = parseInt(this.date[3]) + m; - v /= 24; - } else if (! (this.date[0] && this.date[1] && this.date[2]) && (this.date[3] || this.date[4])) { - v = jSuites.two(this.date[3]) + ':' + jSuites.two(this.date[4]) + ':' + jSuites.two(this.date[5]) - } else { - if (this.date[0] && this.date[1] && ! this.date[2]) { - this.date[2] = 1; - } - v = jSuites.two(this.date[0]) + '-' + jSuites.two(this.date[1]) + '-' + jSuites.two(this.date[2]); - - if (this.date[3] || this.date[4] || this.date[5]) { - v += ' ' + jSuites.two(this.date[3]) + ':' + jSuites.two(this.date[4]) + ':' + jSuites.two(this.date[5]); - } - } - - return v; - } - - var extractDate = function() { - var v = ''; - if (! (this.date[0] && this.date[1] && this.date[2]) && (this.date[3] || this.date[4])) { - if (this.mask.toLowerCase().indexOf('[h]') !== -1) { - v = parseInt(this.date[3]); - } else { - v = parseInt(this.date[3]) % 24; - } - if (this.date[4]) { - v += parseFloat(this.date[4] / 60); - } - v /= 24; - } else if (this.date[0] || this.date[1] || this.date[2] || this.date[3] || this.date[4] || this.date[5]) { - if (this.date[0] && this.date[1] && ! this.date[2]) { - this.date[2] = 1; - } - var t = jSuites.calendar.now(this.date); - v = jSuites.calendar.dateToNum(t); - if (this.date[4]) { - v += parseFloat(this.date[4] / 60); - } - } - return v; - } - - var isBlank = function(v) { - return v === null || v === '' || v === undefined ? true : false; - } - - var isFormula = function(value) { - return (''+value).chartAt(0) == '='; - } - - var isNumeric = function(t) { - return t === 'currency' || t === 'percentage' || t === 'numeric' ? true : false; - } - /** - * Get the decimal defined in the mask configuration - */ - var getDecimal = function(v) { - if (v && Number(v) == v) { - return '.'; - } else { - if (this.options.decimal) { - return this.options.decimal; - } else { - if (this.locale) { - var t = Intl.NumberFormat(this.locale).format(1.1); - return this.options.decimal = t[1]; - } else { - if (! v) { - v = this.mask; - } - var e = new RegExp('0{1}(.{1})0+', 'ig'); - var t = e.exec(v); - if (t && t[1] && t[1].length == 1) { - // Save decimal - this.options.decimal = t[1]; - // Return decimal - return t[1]; - } else { - // Did not find any decimal last resort the default - var e = new RegExp('#{1}(.{1})#+', 'ig'); - var t = e.exec(v); - if (t && t[1] && t[1].length == 1) { - if (t[1] === ',') { - this.options.decimal = '.'; - } else { - this.options.decimal = ','; - } - } else { - this.options.decimal = '1.1'.toLocaleString().substring(1,2); - } - } - } - } - } - - if (this.options.decimal) { - return this.options.decimal; - } else { - return null; - } - } - - var ParseValue = function(v, decimal) { - if (v == '') { - return ''; - } - - // Get decimal - if (! decimal) { - decimal = getDecimal.call(this); - } - - // New value - v = (''+v).split(decimal); - - // Signal - var signal = v[0].match(/[-]+/g); - if (signal && signal.length) { - signal = true; - } else { - signal = false; - } - - v[0] = v[0].match(/[0-9]+/g); - - if (v[0]) { - if (signal) { - v[0].unshift('-'); - } - v[0] = v[0].join(''); - } else { - if (signal) { - v[0] = '-'; - } - } - - if (v[0] || v[1]) { - if (v[1] !== undefined) { - v[1] = v[1].match(/[0-9]+/g); - if (v[1]) { - v[1] = v[1].join(''); - } else { - v[1] = ''; - } - } - } else { - return ''; - } - return v; - } - - var FormatValue = function(v, event) { - if (v == '') { - return ''; - } - // Get decimal - var d = getDecimal.call(this); - // Convert value - var o = this.options; - // Parse value - v = ParseValue.call(this, v); - if (v == '') { - return ''; - } - // Temporary value - if (v[0]) { - var t = parseFloat(v[0] + '.1'); - if (o.style == 'percent') { - t /= 100; - } - } else { - var t = null; - } - - if ((v[0] == '-' || v[0] == '-00') && ! v[1] && (event && event.inputType == "deleteContentBackward")) { - return ''; - } - - var n = new Intl.NumberFormat(this.locale, o).format(t); - n = n.split(d); - if (typeof(n[1]) !== 'undefined') { - var s = n[1].replace(/[0-9]*/g, ''); - if (s) { - n[2] = s; - } - } - - if (v[1] !== undefined) { - n[1] = d + v[1]; - } else { - n[1] = ''; - } - - return n.join(''); - } - - var Format = function(e, event) { - var v = Value.call(e); - if (! v) { - return; - } - - // Get decimal - var d = getDecimal.call(this); - var n = FormatValue.call(this, v, event); - var t = (n.length) - v.length; - var index = Caret.call(e) + t; - // Set value and update caret - Value.call(e, n, index, true); - } - - var Extract = function(v) { - // Keep the raw value - var current = ParseValue.call(this, v); - if (current) { - // Negative values - if (current[0] === '-') { - current[0] = '-0'; - } - return parseFloat(current.join('.')); - } - return null; - } - - /** - * Caret getter and setter methods - */ - var Caret = function(index, adjustNumeric) { - if (index === undefined) { - if (this.tagName == 'DIV') { - var pos = 0; - var s = window.getSelection(); - if (s) { - if (s.rangeCount !== 0) { - var r = s.getRangeAt(0); - var p = r.cloneRange(); - p.selectNodeContents(this); - p.setEnd(r.endContainer, r.endOffset); - pos = p.toString().length; - } - } - return pos; - } else { - return this.selectionStart; - } - } else { - // Get the current value - var n = Value.call(this); - - // Review the position - if (adjustNumeric) { - var p = null; - for (var i = 0; i < n.length; i++) { - if (n[i].match(/[\-0-9]/g) || n[i] == '.' || n[i] == ',') { - p = i; - } - } - - // If the string has no numbers - if (p === null) { - p = n.indexOf(' '); - } - - if (index >= p) { - index = p + 1; - } - } - - // Do not update caret - if (index > n.length) { - index = n.length; - } - - if (index) { - // Set caret - if (this.tagName == 'DIV') { - var s = window.getSelection(); - var r = document.createRange(); - - if (this.childNodes[0]) { - r.setStart(this.childNodes[0], index); - s.removeAllRanges(); - s.addRange(r); - } - } else { - this.selectionStart = index; - this.selectionEnd = index; - } - } - } - } - - /** - * Value getter and setter method - */ - var Value = function(v, updateCaret, adjustNumeric) { - if (this.tagName == 'DIV') { - if (v === undefined) { - var v = this.innerText; - if (this.value && this.value.length > v.length) { - v = this.value; - } - return v; - } else { - if (this.innerText !== v) { - this.innerText = v; - - if (updateCaret) { - Caret.call(this, updateCaret, adjustNumeric); - } - } - } - } else { - if (v === undefined) { - return this.value; - } else { - if (this.value !== v) { - this.value = v; - if (updateCaret) { - Caret.call(this, updateCaret, adjustNumeric); - } - } - } - } - } - - // Labels - var weekDaysFull = jSuites.calendar.weekdays; - var weekDays = jSuites.calendar.weekdaysShort; - var monthsFull = jSuites.calendar.months; - var months = jSuites.calendar.monthsShort; - - var parser = { - 'YEAR': function(v, s) { - var y = ''+new Date().getFullYear(); - - if (typeof(this.values[this.index]) === 'undefined') { - this.values[this.index] = ''; - } - if (parseInt(v) >= 0 && parseInt(v) <= 10) { - if (this.values[this.index].length < s) { - this.values[this.index] += v; - } - } - if (this.values[this.index].length == s) { - if (s == 2) { - var y = y.substr(0,2) + this.values[this.index]; - } else if (s == 3) { - var y = y.substr(0,1) + this.values[this.index]; - } else if (s == 4) { - var y = this.values[this.index]; - } - this.date[0] = y; - this.index++; - } - }, - 'YYYY': function(v) { - parser.YEAR.call(this, v, 4); - }, - 'YYY': function(v) { - parser.YEAR.call(this, v, 3); - }, - 'YY': function(v) { - parser.YEAR.call(this, v, 2); - }, - 'FIND': function(v, a) { - if (isBlank(this.values[this.index])) { - this.values[this.index] = ''; - } - if (this.event && this.event.inputType && this.event.inputType.indexOf('delete') > -1) { - this.values[this.index] += v; - return; - } - var pos = 0; - var count = 0; - var value = (this.values[this.index] + v).toLowerCase(); - for (var i = 0; i < a.length; i++) { - if (a[i].toLowerCase().indexOf(value) == 0) { - pos = i; - count++; - } - } - if (count > 1) { - this.values[this.index] += v; - } else if (count == 1) { - // Jump number of chars - var t = (a[pos].length - this.values[this.index].length) - 1; - this.position += t; - - this.values[this.index] = a[pos]; - this.index++; - return pos; - } - }, - 'MMM': function(v) { - var ret = parser.FIND.call(this, v, months); - if (ret !== undefined) { - this.date[1] = ret + 1; - } - }, - 'MON': function(v) { - parser['MMM'].call(this, v); - }, - 'MMMM': function(v) { - var ret = parser.FIND.call(this, v, monthsFull); - if (ret !== undefined) { - this.date[1] = ret + 1; - } - }, - 'MONTH': function(v) { - parser['MMMM'].call(this, v); - }, - 'MMMMM': function(v) { - if (isBlank(this.values[this.index])) { - this.values[this.index] = ''; - } - var pos = 0; - var count = 0; - var value = (this.values[this.index] + v).toLowerCase(); - for (var i = 0; i < monthsFull.length; i++) { - if (monthsFull[i][0].toLowerCase().indexOf(value) == 0) { - this.values[this.index] = monthsFull[i][0]; - this.date[1] = i + 1; - this.index++; - break; - } - } - }, - 'MM': function(v) { - if (isBlank(this.values[this.index])) { - if (parseInt(v) > 1 && parseInt(v) < 10) { - this.date[1] = this.values[this.index] = '0' + v; - this.index++; - } else if (parseInt(v) < 2) { - this.values[this.index] = v; - } - } else { - if (this.values[this.index] == 1 && parseInt(v) < 3) { - this.date[1] = this.values[this.index] += v; - this.index++; - } else if (this.values[this.index] == 0 && parseInt(v) > 0 && parseInt(v) < 10) { - this.date[1] = this.values[this.index] += v; - this.index++; - } - } - }, - 'M': function(v) { - var test = false; - if (parseInt(v) >= 0 && parseInt(v) < 10) { - if (isBlank(this.values[this.index])) { - this.values[this.index] = v; - if (v > 1) { - this.date[1] = this.values[this.index]; - this.index++; - } - } else { - if (this.values[this.index] == 1 && parseInt(v) < 3) { - this.date[1] = this.values[this.index] += v; - this.index++; - } else if (this.values[this.index] == 0 && parseInt(v) > 0) { - this.date[1] = this.values[this.index] += v; - this.index++; - } else { - var test = true; - } - } - } else { - var test = true; - } - - // Re-test - if (test == true) { - var t = parseInt(this.values[this.index]); - if (t > 0 && t < 12) { - this.date[2] = this.values[this.index]; - this.index++; - // Repeat the character - this.position--; - } - } - }, - 'D': function(v) { - var test = false; - if (parseInt(v) >= 0 && parseInt(v) < 10) { - if (isBlank(this.values[this.index])) { - this.values[this.index] = v; - if (parseInt(v) > 3) { - this.date[2] = this.values[this.index]; - this.index++; - } - } else { - if (this.values[this.index] == 3 && parseInt(v) < 2) { - this.date[2] = this.values[this.index] += v; - this.index++; - } else if (this.values[this.index] == 1 || this.values[this.index] == 2) { - this.date[2] = this.values[this.index] += v; - this.index++; - } else if (this.values[this.index] == 0 && parseInt(v) > 0) { - this.date[2] = this.values[this.index] += v; - this.index++; - } else { - var test = true; - } - } - } else { - var test = true; - } - - // Re-test - if (test == true) { - var t = parseInt(this.values[this.index]); - if (t > 0 && t < 32) { - this.date[2] = this.values[this.index]; - this.index++; - // Repeat the character - this.position--; - } - } - }, - 'DD': function(v) { - if (isBlank(this.values[this.index])) { - if (parseInt(v) > 3 && parseInt(v) < 10) { - this.date[2] = this.values[this.index] = '0' + v; - this.index++; - } else if (parseInt(v) < 10) { - this.values[this.index] = v; - } - } else { - if (this.values[this.index] == 3 && parseInt(v) < 2) { - this.date[2] = this.values[this.index] += v; - this.index++; - } else if ((this.values[this.index] == 1 || this.values[this.index] == 2) && parseInt(v) < 10) { - this.date[2] = this.values[this.index] += v; - this.index++; - } else if (this.values[this.index] == 0 && parseInt(v) > 0 && parseInt(v) < 10) { - this.date[2] = this.values[this.index] += v; - this.index++; - } - } - }, - 'DDD': function(v) { - parser.FIND.call(this, v, weekDays); - }, - 'DY': function(v) { - parser['DDD'].call(this, v); - }, - 'DDDD': function(v) { - parser.FIND.call(this, v, weekDaysFull); - }, - 'DAY': function(v) { - parser['DDDD'].call(this, v); - }, - 'HH12': function(v, two) { - if (isBlank(this.values[this.index])) { - if (parseInt(v) > 1 && parseInt(v) < 10) { - if (two) { - v = 0 + v; - } - this.date[3] = this.values[this.index] = v; - this.index++; - } else if (parseInt(v) < 10) { - this.values[this.index] = v; - } - } else { - if (this.values[this.index] == 1 && parseInt(v) < 3) { - this.date[3] = this.values[this.index] += v; - this.index++; - } else if (this.values[this.index] < 1 && parseInt(v) < 10) { - this.date[3] = this.values[this.index] += v; - this.index++; - } - } - }, - 'HH24': function(v, two) { - var test = false; - if (parseInt(v) >= 0 && parseInt(v) < 10) { - if (this.values[this.index] == null || this.values[this.index] == '') { - if (parseInt(v) > 2 && parseInt(v) < 10) { - if (two) { - v = 0 + v; - } - this.date[3] = this.values[this.index] = v; - this.index++; - } else if (parseInt(v) < 10) { - this.values[this.index] = v; - } - } else { - if (this.values[this.index] == 2 && parseInt(v) < 4) { - this.date[3] = this.values[this.index] += v; - this.index++; - } else if (this.values[this.index] < 2 && parseInt(v) < 10) { - this.date[3] = this.values[this.index] += v; - this.index++; - } - } - } - }, - 'HH': function(v) { - parser['HH24'].call(this, v, 1); - }, - 'H': function(v) { - parser['HH24'].call(this, v, 0); - }, - '\\[H\\]': function(v) { - if (this.values[this.index] == undefined) { - this.values[this.index] = ''; - } - if (v.match(/[0-9]/g)) { - this.date[3] = this.values[this.index] += v; - } else { - if (this.values[this.index].match(/[0-9]/g)) { - this.date[3] = this.values[this.index]; - this.index++; - // Repeat the character - this.position--; - } - } - }, - 'N60': function(v, i) { - if (this.values[this.index] == null || this.values[this.index] == '') { - if (parseInt(v) > 5 && parseInt(v) < 10) { - this.date[i] = this.values[this.index] = '0' + v; - this.index++; - } else if (parseInt(v) < 10) { - this.values[this.index] = v; - } - } else { - if (parseInt(v) < 10) { - this.date[i] = this.values[this.index] += v; - this.index++; - } - } - }, - 'MI': function(v) { - parser.N60.call(this, v, 4); - }, - 'SS': function(v) { - parser.N60.call(this, v, 5); - }, - 'AM/PM': function(v) { - this.values[this.index] = ''; - if (v) { - if (this.date[3] > 12) { - this.values[this.index] = 'PM'; - } else { - this.values[this.index] = 'AM'; - } - } - this.index++; - }, - 'WD': function(v) { - if (typeof(this.values[this.index]) === 'undefined') { - this.values[this.index] = ''; - } - if (parseInt(v) >= 0 && parseInt(v) < 7) { - this.values[this.index] = v; - } - if (this.value[this.index].length == 1) { - this.index++; - } - }, - '0{1}(.{1}0+)?': function(v) { - // Get decimal - var decimal = getDecimal.call(this); - // Negative number - var neg = false; - // Create if is blank - if (isBlank(this.values[this.index])) { - this.values[this.index] = ''; - } else { - if (this.values[this.index] == '-') { - neg = true; - } - } - var current = ParseValue.call(this, this.values[this.index], decimal); - if (current) { - this.values[this.index] = current.join(decimal); - } - // New entry - if (parseInt(v) >= 0 && parseInt(v) < 10) { - // Replace the zero for a number - if (this.values[this.index] == '0' && v > 0) { - this.values[this.index] = ''; - } else if (this.values[this.index] == '-0' && v > 0) { - this.values[this.index] = '-'; - } - // Don't add up zeros because does not mean anything here - if ((this.values[this.index] != '0' && this.values[this.index] != '-0') || v == decimal) { - this.values[this.index] += v; - } - } else if (decimal && v == decimal) { - if (this.values[this.index].indexOf(decimal) == -1) { - if (! this.values[this.index]) { - this.values[this.index] = '0'; - } - this.values[this.index] += v; - } - } else if (v == '-') { - // Negative signed - neg = true; - } - - if (neg === true && this.values[this.index][0] !== '-') { - this.values[this.index] = '-' + this.values[this.index]; - } - }, - '0{1}(.{1}0+)?%': function(v) { - parser['0{1}(.{1}0+)?'].call(this, v); - - if (this.values[this.index].match(/[\-0-9]/g)) { - if (this.values[this.index] && this.values[this.index].indexOf('%') == -1) { - this.values[this.index] += '%'; - } - } else { - this.values[this.index] = ''; - } - }, - '#(.{1})##0?(.{1}0+)?( ?;(.*)?)?': function(v) { - // Parse number - parser['0{1}(.{1}0+)?'].call(this, v); - // Get decimal - var decimal = getDecimal.call(this); - // Get separator - var separator = this.tokens[this.index].substr(1,1); - // Negative - var negative = this.values[this.index][0] === '-' ? true : false; - // Current value - var current = ParseValue.call(this, this.values[this.index], decimal); - - // Get main and decimal parts - if (current !== '') { - // Format number - var n = current[0].match(/[0-9]/g); - if (n) { - // Format - n = n.join(''); - var t = []; - var s = 0; - for (var j = n.length - 1; j >= 0 ; j--) { - t.push(n[j]); - s++; - if (! (s % 3)) { - t.push(separator); - } - } - t = t.reverse(); - current[0] = t.join(''); - if (current[0].substr(0,1) == separator) { - current[0] = current[0].substr(1); - } - } else { - current[0] = ''; - } - - // Value - this.values[this.index] = current.join(decimal); - - // Negative - if (negative) { - this.values[this.index] = '-' + this.values[this.index]; - } - } - }, - '0': function(v) { - if (v.match(/[0-9]/g)) { - this.values[this.index] = v; - this.index++; - } - }, - '[0-9a-zA-Z$]+': function(v) { - if (isBlank(this.values[this.index])) { - this.values[this.index] = ''; - } - var t = this.tokens[this.index]; - var s = this.values[this.index]; - var i = s.length; - - if (t[i] == v) { - this.values[this.index] += v; - - if (this.values[this.index] == t) { - this.index++; - } - } else { - this.values[this.index] = t; - this.index++; - - if (v.match(/[\-0-9]/g)) { - // Repeat the character - this.position--; - } - } - }, - 'A': function(v) { - if (v.match(/[a-zA-Z]/gi)) { - this.values[this.index] = v; - this.index++; - } - }, - '.': function(v) { - parser['[0-9a-zA-Z$]+'].call(this, v); - }, - '@': function(v) { - if (isBlank(this.values[this.index])) { - this.values[this.index] = ''; - } - this.values[this.index] += v; - } - } - - /** - * Get the tokens in the mask string - */ - var getTokens = function(str) { - if (this.type == 'general') { - var t = [].concat(tokens.general); - } else { - var t = [].concat(tokens.currency, tokens.datetime, tokens.percentage, tokens.numeric, tokens.text, tokens.general); - } - // Expression to extract all tokens from the string - var e = new RegExp(t.join('|'), 'gi'); - // Extract - return str.match(e); - } - - /** - * Get the method of one given token - */ - var getMethod = function(str) { - if (! this.type) { - var types = Object.keys(tokens); - } else if (this.type == 'text') { - var types = [ 'text' ]; - } else if (this.type == 'general') { - var types = [ 'general' ]; - } else if (this.type == 'datetime') { - var types = [ 'numeric', 'datetime', 'general' ]; - } else { - var types = [ 'currency', 'percentage', 'numeric', 'general' ]; - } - - // Found - for (var i = 0; i < types.length; i++) { - var type = types[i]; - for (var j = 0; j < tokens[type].length; j++) { - var e = new RegExp(tokens[type][j], 'gi'); - var r = str.match(e); - if (r) { - return { type: type, method: tokens[type][j] } - } - } - } - } - - /** - * Identify each method for each token - */ - var getMethods = function(t) { - var result = []; - for (var i = 0; i < t.length; i++) { - var m = getMethod.call(this, t[i]); - if (m) { - result.push(m.method); - } else { - result.push(null); - } - } - - // Compatibility with excel - for (var i = 0; i < result.length; i++) { - if (result[i] == 'MM') { - // Not a month, correct to minutes - if (result[i-1] && result[i-1].indexOf('H') >= 0) { - result[i] = 'MI'; - } else if (result[i-2] && result[i-2].indexOf('H') >= 0) { - result[i] = 'MI'; - } else if (result[i+1] && result[i+1].indexOf('S') >= 0) { - result[i] = 'MI'; - } else if (result[i+2] && result[i+2].indexOf('S') >= 0) { - result[i] = 'MI'; - } - } - } - - return result; - } - - /** - * Get the type for one given token - */ - var getType = function(str) { - var m = getMethod.call(this, str); - if (m) { - var type = m.type; - } - - if (type) { - var numeric = 0; - // Make sure the correct type - var t = getTokens.call(this, str); - for (var i = 0; i < t.length; i++) { - m = getMethod.call(this, t[i]); - if (m && isNumeric(m.type)) { - numeric++; - } - } - if (numeric > 1) { - type = 'general'; - } - } - - return type; - } - - /** - * Parse character per character using the detected tokens in the mask - */ - var parse = function() { - // Parser method for this position - if (typeof(parser[this.methods[this.index]]) == 'function') { - parser[this.methods[this.index]].call(this, this.value[this.position]); - this.position++; - } else { - this.values[this.index] = this.tokens[this.index]; - this.index++; - } - } - - var isFormula = function(value) { - var v = (''+value)[0]; - return v == '=' ? true : false; - } - - var toPlainString = function(num) { - return (''+ +num).replace(/(-?)(\d*)\.?(\d*)e([+-]\d+)/, - function(a,b,c,d,e) { - return e < 0 - ? b + '0.' + Array(1-e-c.length).join(0) + c + d - : b + c + d + Array(e-d.length+1).join(0); - }); - } - - /** - * Mask function - * @param {mixed|string} JS input or a string to be parsed - * @param {object|string} When the first param is a string, the second is the mask or object with the mask options - */ - var obj = function(e, config, returnObject) { - // Options - var r = null; - var t = null; - var o = { - // Element - input: null, - // Current value - value: null, - // Mask options - options: {}, - // New values for each token found - values: [], - // Token position - index: 0, - // Character position - position: 0, - // Date raw values - date: [0,0,0,0,0,0], - // Raw number for the numeric values - number: 0, - } - - // This is a JavaScript Event - if (typeof(e) == 'object') { - // Element - o.input = e.target; - // Current value - o.value = Value.call(e.target); - // Current caret position - o.caret = Caret.call(e.target); - // Mask - if (t = e.target.getAttribute('data-mask')) { - o.mask = t; - } - // Type - if (t = e.target.getAttribute('data-type')) { - o.type = t; - } - // Options - if (e.target.mask) { - if (e.target.mask.options) { - o.options = e.target.mask.options; - } - if (e.target.mask.locale) { - o.locale = e.target.mask.locale; - } - } else { - // Locale - if (t = e.target.getAttribute('data-locale')) { - o.locale = t; - if (o.mask) { - o.options.style = o.mask; - } - } - } - // Extra configuration - if (e.target.attributes && e.target.attributes.length) { - for (var i = 0; i < e.target.attributes.length; i++) { - var k = e.target.attributes[i].name; - var v = e.target.attributes[i].value; - if (k.substr(0,4) == 'data') { - o.options[k.substr(5)] = v; - } - } - } - } else { - // Options - if (typeof(config) == 'string') { - // Mask - o.mask = config; - } else { - // Mask - var k = Object.keys(config); - for (var i = 0; i < k.length; i++) { - o[k[i]] = config[k[i]]; - } - } - - if (typeof(e) === 'number') { - // Get decimal - getDecimal.call(o, o.mask); - // Replace to the correct decimal - e = (''+e).replace('.', o.options.decimal); - } - - // Current - o.value = e; - - if (o.input) { - // Value - Value.call(o.input, e); - // Focus - jSuites.focus(o.input); - // Caret - o.caret = Caret.call(o.input); - } - } - - // Mask detected start the process - if (! isFormula(o.value) && (o.mask || o.locale)) { - // Compatibility fixes - if (o.mask) { - // Remove [] - o.mask = o.mask.replace(new RegExp(/\[h]/),'|h|'); - o.mask = o.mask.replace(new RegExp(/\[.*?\]/),''); - o.mask = o.mask.replace(new RegExp(/\|h\|/),'[h]'); - if (o.mask.indexOf(';') !== -1) { - var t = o.mask.split(';'); - o.mask = t[0]; - } - // Excel mask TODO: Improve - if (o.mask.indexOf('##') !== -1) { - var d = o.mask.split(';'); - if (d[0]) { - d[0] = d[0].replace('*', '\t'); - d[0] = d[0].replace(new RegExp(/_-/g), ' '); - d[0] = d[0].replace(new RegExp(/_/g), ''); - d[0] = d[0].replace('##0.###','##0.000'); - d[0] = d[0].replace('##0.##','##0.00'); - d[0] = d[0].replace('##0.#','##0.0'); - d[0] = d[0].replace('##0,###','##0,000'); - d[0] = d[0].replace('##0,##','##0,00'); - d[0] = d[0].replace('##0,#','##0,0'); - } - o.mask = d[0]; - } - // Get type - if (! o.type) { - o.type = getType.call(o, o.mask); - } - // Get tokens - o.tokens = getTokens.call(o, o.mask); - } - - // On new input - if (typeof(e) !== 'object' || ! e.inputType || ! e.inputType.indexOf('insert') || ! e.inputType.indexOf('delete')) { - // Start transformation - if (o.locale) { - if (o.input) { - Format.call(o, o.input, e); - } else { - var newValue = FormatValue.call(o, o.value); - } - } else { - // Get tokens - o.methods = getMethods.call(o, o.tokens); - o.event = e; - - // Go through all tokes - while (o.position < o.value.length && typeof(o.tokens[o.index]) !== 'undefined') { - // Get the appropriate parser - parse.call(o); - } - - // New value - var newValue = o.values.join(''); - - // Add tokens to the end of string only if string is not empty - if (isNumeric(o.type) && newValue !== '') { - // Complement things in the end of the mask - while (typeof(o.tokens[o.index]) !== 'undefined') { - var t = getMethod.call(o, o.tokens[o.index]); - if (t && t.type == 'general') { - o.values[o.index] = o.tokens[o.index]; - } - o.index++; - } - - var adjustNumeric = true; - } else { - var adjustNumeric = false; - } - - // New value - newValue = o.values.join(''); - - // Reset value - if (o.input) { - t = newValue.length - o.value.length; - if (t > 0) { - var caret = o.caret + t; - } else { - var caret = o.caret; - } - Value.call(o.input, newValue, caret, adjustNumeric); - } - } - } - - // Update raw data - if (o.input) { - var label = null; - if (isNumeric(o.type)) { - // Extract the number - o.number = Extract.call(o, Value.call(o.input)); - // Keep the raw data as a property of the tag - if (o.type == 'percentage') { - label = o.number / 100; - } else { - label = o.number; - } - } else if (o.type == 'datetime') { - label = getDate.call(o); - - if (o.date[0] && o.date[1] && o.date[2]) { - o.input.setAttribute('data-completed', true); - } - } - - if (label) { - o.input.setAttribute('data-value', label); - } - } - - if (newValue !== undefined) { - if (returnObject) { - return o; - } else { - return newValue; - } - } - } - } - - // Get the type of the mask - obj.getType = getType; - - // Extract the tokens from a mask - obj.prepare = function(str, o) { - if (! o) { - o = {}; - } - return getTokens.call(o, str); - } - - /** - * Apply the mask to a element (legacy) - */ - obj.apply = function(e) { - var v = Value.call(e.target); - if (e.key.length == 1) { - v += e.key; - } - Value.call(e.target, obj(v, e.target.getAttribute('data-mask'))); - } - - /** - * Legacy support - */ - obj.run = function(value, mask, decimal) { - return obj(value, { mask: mask, decimal: decimal }); - } - - /** - * Extract number from masked string - */ - obj.extract = function(v, options, returnObject) { - if (isBlank(v)) { - return v; - } - if (typeof(options) != 'object') { - return value; - } else { - options = Object.assign({}, options); - - if (! options.options) { - options.options = {}; - } - } - - // Compatibility - if (! options.mask && options.format) { - options.mask = options.format; - } - - // Remove [] - if (options.mask) { - if (options.mask.indexOf(';') !== -1) { - var t = options.mask.split(';'); - options.mask = t[0]; - } - options.mask = options.mask.replace(new RegExp(/\[h]/),'|h|'); - options.mask = options.mask.replace(new RegExp(/\[.*?\]/),''); - options.mask = options.mask.replace(new RegExp(/\|h\|/),'[h]'); - } - - // Get decimal - getDecimal.call(options, options.mask); - - var type = null; - if (options.type == 'percent' || options.options.style == 'percent') { - type = 'percentage'; - } else if (options.mask) { - type = getType.call(options, options.mask); - } - - if (type === 'general') { - var o = obj(v, options, true); - - value = v; - } else if (type === 'datetime') { - if (v instanceof Date) { - var t = jSuites.calendar.getDateString(value, options.mask); - } - - var o = obj(v, options, true); - - if (jSuites.isNumeric(v)) { - value = v; - } else { - var value = extractDate.call(o); - } - } else { - var value = Extract.call(options, v); - // Percentage - if (type == 'percentage') { - value /= 100; - } - var o = options; - } - - o.value = value; - - if (! o.type && type) { - o.type = type; - } - - if (returnObject) { - return o; - } else { - return value; - } - } - - /** - * Render - */ - obj.render = function(value, options, fullMask) { - if (isBlank(value)) { - return value; - } - - if (typeof(options) != 'object') { - return value; - } else { - options = Object.assign({}, options); - - if (! options.options) { - options.options = {}; - } - } - - // Compatibility - if (! options.mask && options.format) { - options.mask = options.format; - } - - // Remove [] - if (options.mask) { - if (options.mask.indexOf(';') !== -1) { - var t = options.mask.split(';'); - options.mask = t[0]; - } - options.mask = options.mask.replace(new RegExp(/\[h]/),'|h|'); - options.mask = options.mask.replace(new RegExp(/\[.*?\]/),''); - options.mask = options.mask.replace(new RegExp(/\|h\|/),'[h]'); - } - - var type = null; - if (options.type == 'percent' || options.options.style == 'percent') { - type = 'percentage'; - } else if (options.mask) { - type = getType.call(options, options.mask); - } else if (value instanceof Date) { - type = 'datetime'; - } - - // Fill with blanks - var fillWithBlanks = false; - - if (type =='datetime' || options.type == 'calendar') { - var t = jSuites.calendar.getDateString(value, options.mask); - if (t) { - value = t; - } - if (options.mask && fullMask) { - fillWithBlanks = true; - } - } else { - // Percentage - if (type == 'percentage') { - value *= 100; - } - // Number of decimal places - if (typeof(value) === 'number') { - var t = null; - if (options.mask && fullMask && ((''+value).indexOf('e') === -1)) { - var d = getDecimal.call(options, options.mask); - if (options.mask.indexOf(d) !== -1) { - d = options.mask.split(d); - d = (''+d[1].match(/[0-9]+/g)) - d = d.length; - t = value.toFixed(d); - } else { - t = value.toFixed(0); - } - } else if (options.locale && fullMask) { - // Append zeros - var d = (''+value).split('.'); - if (options.options) { - if (typeof(d[1]) === 'undefined') { - d[1] = ''; - } - var len = d[1].length; - if (options.options.minimumFractionDigits > len) { - for (var i = 0; i < options.options.minimumFractionDigits - len; i++) { - d[1] += '0'; - } - } - } - if (! d[1].length) { - t = d[0] - } else { - t = d.join('.'); - } - var len = d[1].length; - if (options.options && options.options.maximumFractionDigits < len) { - t = parseFloat(t).toFixed(options.options.maximumFractionDigits); - } - } else { - t = toPlainString(value); - } - - if (t !== null) { - value = t; - // Get decimal - getDecimal.call(options, options.mask); - // Replace to the correct decimal - if (options.options.decimal) { - value = value.replace('.', options.options.decimal); - } - } - } else { - if (options.mask && fullMask) { - fillWithBlanks = true; - } - } - } - - if (fillWithBlanks) { - var s = options.mask.length - value.length; - if (s > 0) { - for (var i = 0; i < s; i++) { - value += ' '; - } - } - } - - value = obj(value, options); - - // Numeric mask, number of zeros - if (fullMask && type === 'numeric') { - var maskZeros = options.mask.match(new RegExp(/^[0]+$/gm)); - if (maskZeros && maskZeros.length === 1) { - var maskLength = maskZeros[0].length; - if (maskLength > 3) { - value = '' + value; - while (value.length < maskLength) { - value = '0' + value; - } - } - } - } - - return value; - } - - obj.set = function(e, m) { - if (m) { - e.setAttribute('data-mask', m); - // Reset the value - var event = new Event('input', { - bubbles: true, - cancelable: true, - }); - e.dispatchEvent(event); - } - } - - if (typeof document !== 'undefined') { - document.addEventListener('input', function(e) { - if (e.target.getAttribute('data-mask') || e.target.mask) { - obj(e); - } - }); - } - - return obj; -})(); - -jSuites.modal = (function(el, options) { - var obj = {}; - obj.options = {}; - - // Default configuration - var defaults = { - url: null, - onopen: null, - onclose: null, - onload: null, - closed: false, - width: null, - height: null, - title: null, - padding: null, - backdrop: true, - icon: null, - }; - - // Loop through our object - for (var property in defaults) { - if (options && options.hasOwnProperty(property)) { - obj.options[property] = options[property]; - } else { - obj.options[property] = defaults[property]; - } - } - - // Title - if (! obj.options.title && el.getAttribute('title')) { - obj.options.title = el.getAttribute('title'); - } - - var temp = document.createElement('div'); - while (el.children[0]) { - temp.appendChild(el.children[0]); - } - - obj.title = document.createElement('div'); - obj.title.className = 'jmodal_title'; - if (obj.options.icon) { - obj.title.setAttribute('data-icon', obj.options.icon); - } - - obj.content = document.createElement('div'); - obj.content.className = 'jmodal_content'; - obj.content.innerHTML = el.innerHTML; - - while (temp.children[0]) { - obj.content.appendChild(temp.children[0]); - } - - obj.container = document.createElement('div'); - obj.container.className = 'jmodal'; - obj.container.appendChild(obj.title); - obj.container.appendChild(obj.content); - - if (obj.options.padding) { - obj.content.style.padding = obj.options.padding; - } - if (obj.options.width) { - obj.container.style.width = obj.options.width; - } - if (obj.options.height) { - obj.container.style.height = obj.options.height; - } - if (obj.options.title) { - var title = document.createElement('h4'); - title.innerText = obj.options.title; - obj.title.appendChild(title); - } - - el.innerHTML = ''; - el.style.display = 'none'; - el.appendChild(obj.container); - - // Backdrop - if (obj.options.backdrop) { - var backdrop = document.createElement('div'); - backdrop.className = 'jmodal_backdrop'; - backdrop.onclick = function () { - obj.close(); - } - el.appendChild(backdrop); - } - - obj.open = function() { - el.style.display = 'block'; - // Fullscreen - var rect = obj.container.getBoundingClientRect(); - if (jSuites.getWindowWidth() < rect.width) { - obj.container.style.top = ''; - obj.container.style.left = ''; - obj.container.classList.add('jmodal_fullscreen'); - jSuites.animation.slideBottom(obj.container, 1); - } else { - if (obj.options.backdrop) { - backdrop.style.display = 'block'; - } - } - // Event - if (typeof(obj.options.onopen) == 'function') { - obj.options.onopen(el, obj); - } - } - - obj.resetPosition = function() { - obj.container.style.top = ''; - obj.container.style.left = ''; - } - - obj.isOpen = function() { - return el.style.display != 'none' ? true : false; - } - - obj.close = function() { - if (obj.isOpen()) { - el.style.display = 'none'; - if (obj.options.backdrop) { - // Backdrop - backdrop.style.display = ''; - } - // Remove fullscreen class - obj.container.classList.remove('jmodal_fullscreen'); - // Event - if (typeof(obj.options.onclose) == 'function') { - obj.options.onclose(el, obj); - } - } - } - - if (! jSuites.modal.hasEvents) { - // Position - var tracker = null; - - document.addEventListener('keydown', function(e) { - if (e.which == 27) { - var modals = document.querySelectorAll('.jmodal'); - for (var i = 0; i < modals.length; i++) { - modals[i].parentNode.modal.close(); - } - } - }); - - document.addEventListener('mouseup', function(e) { - var item = jSuites.findElement(e.target, 'jmodal'); - if (item) { - // Get target info - var rect = item.getBoundingClientRect(); - - if (e.changedTouches && e.changedTouches[0]) { - var x = e.changedTouches[0].clientX; - var y = e.changedTouches[0].clientY; - } else { - var x = e.clientX; - var y = e.clientY; - } - - if (rect.width - (x - rect.left) < 50 && (y - rect.top) < 50) { - item.parentNode.modal.close(); - } - } - - if (tracker) { - tracker.element.style.cursor = 'auto'; - tracker = null; - } - }); - - document.addEventListener('mousedown', function(e) { - var item = jSuites.findElement(e.target, 'jmodal'); - if (item) { - // Get target info - var rect = item.getBoundingClientRect(); - - if (e.changedTouches && e.changedTouches[0]) { - var x = e.changedTouches[0].clientX; - var y = e.changedTouches[0].clientY; - } else { - var x = e.clientX; - var y = e.clientY; - } - - if (rect.width - (x - rect.left) < 50 && (y - rect.top) < 50) { - // Do nothing - } else { - if (y - rect.top < 50) { - if (document.selection) { - document.selection.empty(); - } else if ( window.getSelection ) { - window.getSelection().removeAllRanges(); - } - - tracker = { - left: rect.left, - top: rect.top, - x: e.clientX, - y: e.clientY, - width: rect.width, - height: rect.height, - element: item, - } - } - } - } - }); - - document.addEventListener('mousemove', function(e) { - if (tracker) { - e = e || window.event; - if (e.buttons) { - var mouseButton = e.buttons; - } else if (e.button) { - var mouseButton = e.button; - } else { - var mouseButton = e.which; - } - - if (mouseButton) { - tracker.element.style.top = (tracker.top + (e.clientY - tracker.y) + (tracker.height / 2)) + 'px'; - tracker.element.style.left = (tracker.left + (e.clientX - tracker.x) + (tracker.width / 2)) + 'px'; - tracker.element.style.cursor = 'move'; - } else { - tracker.element.style.cursor = 'auto'; - } - } - }); - - jSuites.modal.hasEvents = true; - } - - if (obj.options.url) { - jSuites.ajax({ - url: obj.options.url, - method: 'GET', - dataType: 'text/html', - success: function(data) { - obj.content.innerHTML = data; - - if (! obj.options.closed) { - obj.open(); - } - - if (typeof(obj.options.onload) === 'function') { - obj.options.onload(obj); - } - } - }); - } else { - if (! obj.options.closed) { - obj.open(); - } - - if (typeof(obj.options.onload) === 'function') { - obj.options.onload(obj); - } - } - - // Keep object available from the node - el.modal = obj; - - return obj; -}); - - -jSuites.notification = (function(options) { - var obj = {}; - obj.options = {}; - - // Default configuration - var defaults = { - icon: null, - name: 'Notification', - date: null, - error: null, - title: null, - message: null, - timeout: 4000, - autoHide: true, - closeable: true, - }; - - // Loop through our object - for (var property in defaults) { - if (options && options.hasOwnProperty(property)) { - obj.options[property] = options[property]; - } else { - obj.options[property] = defaults[property]; - } - } - - var notification = document.createElement('div'); - notification.className = 'jnotification'; - - if (obj.options.error) { - notification.classList.add('jnotification-error'); - } - - var notificationContainer = document.createElement('div'); - notificationContainer.className = 'jnotification-container'; - notification.appendChild(notificationContainer); - - var notificationHeader = document.createElement('div'); - notificationHeader.className = 'jnotification-header'; - notificationContainer.appendChild(notificationHeader); - - var notificationImage = document.createElement('div'); - notificationImage.className = 'jnotification-image'; - notificationHeader.appendChild(notificationImage); - - if (obj.options.icon) { - var notificationIcon = document.createElement('img'); - notificationIcon.src = obj.options.icon; - notificationImage.appendChild(notificationIcon); - } - - var notificationName = document.createElement('div'); - notificationName.className = 'jnotification-name'; - notificationName.innerHTML = obj.options.name; - notificationHeader.appendChild(notificationName); - - if (obj.options.closeable == true) { - var notificationClose = document.createElement('div'); - notificationClose.className = 'jnotification-close'; - notificationClose.onclick = function() { - obj.hide(); - } - notificationHeader.appendChild(notificationClose); - } - - var notificationDate = document.createElement('div'); - notificationDate.className = 'jnotification-date'; - notificationHeader.appendChild(notificationDate); - - var notificationContent = document.createElement('div'); - notificationContent.className = 'jnotification-content'; - notificationContainer.appendChild(notificationContent); - - if (obj.options.title) { - var notificationTitle = document.createElement('div'); - notificationTitle.className = 'jnotification-title'; - notificationTitle.innerHTML = obj.options.title; - notificationContent.appendChild(notificationTitle); - } - - var notificationMessage = document.createElement('div'); - notificationMessage.className = 'jnotification-message'; - notificationMessage.innerHTML = obj.options.message; - notificationContent.appendChild(notificationMessage); - - obj.show = function() { - document.body.appendChild(notification); - if (jSuites.getWindowWidth() > 800) { - jSuites.animation.fadeIn(notification); - } else { - jSuites.animation.slideTop(notification, 1); - } - } - - obj.hide = function() { - if (jSuites.getWindowWidth() > 800) { - jSuites.animation.fadeOut(notification, function() { - if (notification.parentNode) { - notification.parentNode.removeChild(notification); - if (notificationTimeout) { - clearTimeout(notificationTimeout); - } - } - }); - } else { - jSuites.animation.slideTop(notification, 0, function() { - if (notification.parentNode) { - notification.parentNode.removeChild(notification); - if (notificationTimeout) { - clearTimeout(notificationTimeout); - } - } - }); - } - }; - - obj.show(); - - if (obj.options.autoHide == true) { - var notificationTimeout = setTimeout(function() { - obj.hide(); - }, obj.options.timeout); - } - - if (jSuites.getWindowWidth() < 800) { - notification.addEventListener("swipeup", function(e) { - obj.hide(); - e.preventDefault(); - e.stopPropagation(); - }); - } - - return obj; -}); - -jSuites.notification.isVisible = function() { - var j = document.querySelector('.jnotification'); - return j && j.parentNode ? true : false; -} - -// More palettes https://coolors.co/ or https://gka.github.io/palettes/#/10|s|003790,005647,ffffe0|ffffe0,ff005e,93003a|1|1 -jSuites.palette = (function() { - /** - * Available palettes - */ - var palette = { - material: [ - [ "#ffebee", "#fce4ec", "#f3e5f5", "#e8eaf6", "#e3f2fd", "#e0f7fa", "#e0f2f1", "#e8f5e9", "#f1f8e9", "#f9fbe7", "#fffde7", "#fff8e1", "#fff3e0", "#fbe9e7", "#efebe9", "#fafafa", "#eceff1" ], - [ "#ffcdd2", "#f8bbd0", "#e1bee7", "#c5cae9", "#bbdefb", "#b2ebf2", "#b2dfdb", "#c8e6c9", "#dcedc8", "#f0f4c3", "#fff9c4", "#ffecb3", "#ffe0b2", "#ffccbc", "#d7ccc8", "#f5f5f5", "#cfd8dc" ], - [ "#ef9a9a", "#f48fb1", "#ce93d8", "#9fa8da", "#90caf9", "#80deea", "#80cbc4", "#a5d6a7", "#c5e1a5", "#e6ee9c", "#fff59d", "#ffe082", "#ffcc80", "#ffab91", "#bcaaa4", "#eeeeee", "#b0bec5" ], - [ "#e57373", "#f06292", "#ba68c8", "#7986cb", "#64b5f6", "#4dd0e1", "#4db6ac", "#81c784", "#aed581", "#dce775", "#fff176", "#ffd54f", "#ffb74d", "#ff8a65", "#a1887f", "#e0e0e0", "#90a4ae" ], - [ "#ef5350", "#ec407a", "#ab47bc", "#5c6bc0", "#42a5f5", "#26c6da", "#26a69a", "#66bb6a", "#9ccc65", "#d4e157", "#ffee58", "#ffca28", "#ffa726", "#ff7043", "#8d6e63", "#bdbdbd", "#78909c" ], - [ "#f44336", "#e91e63", "#9c27b0", "#3f51b5", "#2196f3", "#00bcd4", "#009688", "#4caf50", "#8bc34a", "#cddc39", "#ffeb3b", "#ffc107", "#ff9800", "#ff5722", "#795548", "#9e9e9e", "#607d8b" ], - [ "#e53935", "#d81b60", "#8e24aa", "#3949ab", "#1e88e5", "#00acc1", "#00897b", "#43a047", "#7cb342", "#c0ca33", "#fdd835", "#ffb300", "#fb8c00", "#f4511e", "#6d4c41", "#757575", "#546e7a" ], - [ "#d32f2f", "#c2185b", "#7b1fa2", "#303f9f", "#1976d2", "#0097a7", "#00796b", "#388e3c", "#689f38", "#afb42b", "#fbc02d", "#ffa000", "#f57c00", "#e64a19", "#5d4037", "#616161", "#455a64" ], - [ "#c62828", "#ad1457", "#6a1b9a", "#283593", "#1565c0", "#00838f", "#00695c", "#2e7d32", "#558b2f", "#9e9d24", "#f9a825", "#ff8f00", "#ef6c00", "#d84315", "#4e342e", "#424242", "#37474f" ], - [ "#b71c1c", "#880e4f", "#4a148c", "#1a237e", "#0d47a1", "#006064", "#004d40", "#1b5e20", "#33691e", "#827717", "#f57f17", "#ff6f00", "#e65100", "#bf360c", "#3e2723", "#212121", "#263238" ], - ], - fire: [ - ["0b1a6d","840f38","b60718","de030b","ff0c0c","fd491c","fc7521","faa331","fbb535","ffc73a"], - ["071147","5f0b28","930513","be0309","ef0000","fa3403","fb670b","f9991b","faad1e","ffc123"], - ["03071e","370617","6a040f","9d0208","d00000","dc2f02","e85d04","f48c06","faa307","ffba08"], - ["020619","320615","61040d","8c0207","bc0000","c82a02","d05203","db7f06","e19405","efab00"], - ["020515","2d0513","58040c","7f0206","aa0000","b62602","b94903","c57205","ca8504","d89b00"], - ], - baby: [ - ["eddcd2","fff1e6","fde2e4","fad2e1","c5dedd","dbe7e4","f0efeb","d6e2e9","bcd4e6","99c1de"], - ["e1c4b3","ffd5b5","fab6ba","f5a8c4","aacecd","bfd5cf","dbd9d0","baceda","9dc0db","7eb1d5"], - ["daa990","ffb787","f88e95","f282a9","8fc4c3","a3c8be","cec9b3","9dbcce","82acd2","649dcb"], - ["d69070","ff9c5e","f66770","f05f8f","74bbb9","87bfae","c5b993","83aac3","699bca","4d89c2"], - ["c97d5d","f58443","eb4d57","e54a7b","66a9a7","78ae9c","b5a67e","7599b1","5c88b7","4978aa"], - ], - chart: [ - ['#C1D37F','#4C5454','#FFD275','#66586F','#D05D5B','#C96480','#95BF8F','#6EA240','#0F0F0E','#EB8258','#95A3B3','#995D81'], - ], - } - - /** - * Get a pallete - */ - var component = function(o) { - // Otherwise get palette value - if (palette[o]) { - return palette[o]; - } else { - return palette.material; - } - } - - component.get = function(o) { - // Otherwise get palette value - if (palette[o]) { - return palette[o]; - } else { - return palette; - } - } - - component.set = function(o, v) { - palette[o] = v; - } - - return component; -})(); - - -jSuites.picker = (function(el, options) { - // Already created, update options - if (el.picker) { - return el.picker.setOptions(options, true); - } - - // New instance - var obj = { type: 'picker' }; - obj.options = {}; - - var dropdownHeader = null; - var dropdownContent = null; - - /** - * The element passed is a DOM element - */ - var isDOM = function(o) { - return (o instanceof Element || o instanceof HTMLDocument); - } - - /** - * Create the content options - */ - var createContent = function() { - dropdownContent.innerHTML = ''; - - // Create items - var keys = Object.keys(obj.options.data); - - // Go though all options - for (var i = 0; i < keys.length; i++) { - // Item - var dropdownItem = document.createElement('div'); - dropdownItem.classList.add('jpicker-item'); - dropdownItem.k = keys[i]; - dropdownItem.v = obj.options.data[keys[i]]; - // Label - var item = obj.getLabel(keys[i], dropdownItem); - if (isDOM(item)) { - dropdownItem.appendChild(item); - } else { - dropdownItem.innerHTML = item; - } - // Append - dropdownContent.appendChild(dropdownItem); - } - } - - /** - * Set or reset the options for the picker - */ - obj.setOptions = function(options, reset) { - // Default configuration - var defaults = { - value: 0, - data: null, - render: null, - onchange: null, - onmouseover: null, - onselect: null, - onopen: null, - onclose: null, - onload: null, - width: null, - header: true, - right: false, - bottom: false, - content: false, - columns: null, - grid: null, - height: null, - } - - // Legacy purpose only - if (options && options.options) { - options.data = options.options; - } - - // Loop through the initial configuration - for (var property in defaults) { - if (options && options.hasOwnProperty(property)) { - obj.options[property] = options[property]; - } else { - if (typeof(obj.options[property]) == 'undefined' || reset === true) { - obj.options[property] = defaults[property]; - } - } - } - - // Start using the options - if (obj.options.header === false) { - dropdownHeader.style.display = 'none'; - } else { - dropdownHeader.style.display = ''; - } - - // Width - if (obj.options.width) { - dropdownHeader.style.width = parseInt(obj.options.width) + 'px'; - } else { - dropdownHeader.style.width = ''; - } - - // Height - if (obj.options.height) { - dropdownContent.style.maxHeight = obj.options.height + 'px'; - dropdownContent.style.overflow = 'scroll'; - } else { - dropdownContent.style.overflow = ''; - } - - if (obj.options.columns > 0) { - if (! obj.options.grid) { - dropdownContent.classList.add('jpicker-columns'); - dropdownContent.style.width = obj.options.width ? obj.options.width : 36 * obj.options.columns + 'px'; - } else { - dropdownContent.classList.add('jpicker-grid'); - dropdownContent.style.gridTemplateColumns = 'repeat(' + obj.options.grid + ', 1fr)'; - } - } - - if (isNaN(obj.options.value)) { - obj.options.value = '0'; - } - - // Create list from data - createContent(); - - // Set value - obj.setValue(obj.options.value); - - // Set options all returns the own instance - return obj; - } - - obj.getValue = function() { - return obj.options.value; - } - - obj.setValue = function(v) { - // Set label - obj.setLabel(v); - - // Update value - obj.options.value = String(v); - - // Lemonade JS - if (el.value != obj.options.value) { - el.value = obj.options.value; - if (typeof(el.oninput) == 'function') { - el.oninput({ - type: 'input', - target: el, - value: el.value - }); - } - } - - if (dropdownContent.children[v].getAttribute('type') !== 'generic') { - obj.close(); - } - } - - obj.getLabel = function(v, item) { - var label = obj.options.data[v] || null; - if (typeof(obj.options.render) == 'function') { - label = obj.options.render(label, item); - } - return label; - } - - obj.setLabel = function(v) { - var item; - - if (obj.options.content) { - item = '' + obj.options.content + ''; - } else { - item = obj.getLabel(v, null); - } - // Label - if (isDOM(item)) { - dropdownHeader.innerHTML = ''; - dropdownHeader.appendChild(item); - } else { - dropdownHeader.innerHTML = item; - } - } - - obj.open = function() { - if (! el.classList.contains('jpicker-focus')) { - // Start tracking the element - jSuites.tracking(obj, true); - - // Open picker - el.classList.add('jpicker-focus'); - el.focus(); - - var top = 0; - var left = 0; - - dropdownContent.style.marginLeft = ''; - - var rectHeader = dropdownHeader.getBoundingClientRect(); - var rectContent = dropdownContent.getBoundingClientRect(); - - if (window.innerHeight < rectHeader.bottom + rectContent.height || obj.options.bottom) { - top = -1 * (rectContent.height + 4); - } else { - top = rectHeader.height + 4; - } - - if (obj.options.right === true) { - left = -1 * rectContent.width + rectHeader.width; - } - - if (rectContent.left + left < 0) { - left = left + rectContent.left + 10; - } - if (rectContent.left + rectContent.width > window.innerWidth) { - left = -1 * (10 + rectContent.left + rectContent.width - window.innerWidth); - } - - dropdownContent.style.marginTop = parseInt(top) + 'px'; - dropdownContent.style.marginLeft = parseInt(left) + 'px'; - - //dropdownContent.style.marginTop - if (typeof obj.options.onopen == 'function') { - obj.options.onopen(el, obj); - } - } - } - - obj.close = function() { - if (el.classList.contains('jpicker-focus')) { - el.classList.remove('jpicker-focus'); - - // Start tracking the element - jSuites.tracking(obj, false); - - if (typeof obj.options.onclose == 'function') { - obj.options.onclose(el, obj); - } - } - } - - /** - * Create floating picker - */ - var init = function() { - // Class - el.classList.add('jpicker'); - el.setAttribute('tabindex', '900'); - el.onmousedown = function(e) { - if (! el.classList.contains('jpicker-focus')) { - obj.open(); - } - } - - // Dropdown Header - dropdownHeader = document.createElement('div'); - dropdownHeader.classList.add('jpicker-header'); - - // Dropdown content - dropdownContent = document.createElement('div'); - dropdownContent.classList.add('jpicker-content'); - dropdownContent.onclick = function(e) { - var item = jSuites.findElement(e.target, 'jpicker-item'); - if (item) { - if (item.parentNode === dropdownContent) { - // Update label - obj.setValue(item.k); - // Call method - if (typeof(obj.options.onchange) == 'function') { - obj.options.onchange.call(obj, el, obj, item.v, item.v, item.k, e); - } - } - } - } - - // Append content and header - el.appendChild(dropdownHeader); - el.appendChild(dropdownContent); - - // Default value - el.value = options.value || 0; - - // Set options - obj.setOptions(options); - - if (typeof(obj.options.onload) == 'function') { - obj.options.onload(el, obj); - } - - // Change - el.change = obj.setValue; - - // Global generic value handler - el.val = function(val) { - if (val === undefined) { - return obj.getValue(); - } else { - obj.setValue(val); - } - } - - // Reference - el.picker = obj; - } - - init(); - - return obj; -}); - -jSuites.progressbar = (function(el, options) { - var obj = {}; - obj.options = {}; - - // Default configuration - var defaults = { - value: 0, - onchange: null, - width: null, - }; - - // Loop through the initial configuration - for (var property in defaults) { - if (options && options.hasOwnProperty(property)) { - obj.options[property] = options[property]; - } else { - obj.options[property] = defaults[property]; - } - } - - // Class - el.classList.add('jprogressbar'); - el.setAttribute('tabindex', 1); - el.setAttribute('data-value', obj.options.value); - - var bar = document.createElement('div'); - bar.style.width = obj.options.value + '%'; - bar.style.color = '#fff'; - el.appendChild(bar); - - if (obj.options.width) { - el.style.width = obj.options.width; - } - - // Set value - obj.setValue = function(value) { - value = parseInt(value); - obj.options.value = value; - bar.style.width = value + '%'; - el.setAttribute('data-value', value + '%'); - - if (value < 6) { - el.style.color = '#000'; - } else { - el.style.color = '#fff'; - } - - // Update value - obj.options.value = value; - - if (typeof(obj.options.onchange) == 'function') { - obj.options.onchange(el, value); - } - - // Lemonade JS - if (el.value != obj.options.value) { - el.value = obj.options.value; - if (typeof(el.oninput) == 'function') { - el.oninput({ - type: 'input', - target: el, - value: el.value - }); - } - } - } - - obj.getValue = function() { - return obj.options.value; - } - - var action = function(e) { - if (e.which) { - // Get target info - var rect = el.getBoundingClientRect(); - - if (e.changedTouches && e.changedTouches[0]) { - var x = e.changedTouches[0].clientX; - var y = e.changedTouches[0].clientY; - } else { - var x = e.clientX; - var y = e.clientY; - } - - obj.setValue(Math.round((x - rect.left) / rect.width * 100)); - } - } - - // Events - if ('touchstart' in document.documentElement === true) { - el.addEventListener('touchstart', action); - el.addEventListener('touchend', action); - } else { - el.addEventListener('mousedown', action); - el.addEventListener("mousemove", action); - } - - // Change - el.change = obj.setValue; - - // Global generic value handler - el.val = function(val) { - if (val === undefined) { - return obj.getValue(); - } else { - obj.setValue(val); - } - } - - // Reference - el.progressbar = obj; - - return obj; -}); - -jSuites.rating = (function(el, options) { - // Already created, update options - if (el.rating) { - return el.rating.setOptions(options, true); - } - - // New instance - var obj = {}; - obj.options = {}; - - obj.setOptions = function(options, reset) { - // Default configuration - var defaults = { - number: 5, - value: 0, - tooltip: [ 'Very bad', 'Bad', 'Average', 'Good', 'Very good' ], - onchange: null, - }; - - // Loop through the initial configuration - for (var property in defaults) { - if (options && options.hasOwnProperty(property)) { - obj.options[property] = options[property]; - } else { - if (typeof(obj.options[property]) == 'undefined' || reset === true) { - obj.options[property] = defaults[property]; - } - } - } - - // Make sure the container is empty - el.innerHTML = ''; - - // Add elements - for (var i = 0; i < obj.options.number; i++) { - var div = document.createElement('div'); - div.setAttribute('data-index', (i + 1)) - div.setAttribute('title', obj.options.tooltip[i]) - el.appendChild(div); - } - - // Selected option - if (obj.options.value) { - for (var i = 0; i < obj.options.number; i++) { - if (i < obj.options.value) { - el.children[i].classList.add('jrating-selected'); - } - } - } - - return obj; - } - - // Set value - obj.setValue = function(index) { - for (var i = 0; i < obj.options.number; i++) { - if (i < index) { - el.children[i].classList.add('jrating-selected'); - } else { - el.children[i].classList.remove('jrating-over'); - el.children[i].classList.remove('jrating-selected'); - } - } - - obj.options.value = index; - - if (typeof(obj.options.onchange) == 'function') { - obj.options.onchange(el, index); - } - - // Lemonade JS - if (el.value != obj.options.value) { - el.value = obj.options.value; - if (typeof(el.oninput) == 'function') { - el.oninput({ - type: 'input', - target: el, - value: el.value - }); - } - } - } - - obj.getValue = function() { - return obj.options.value; - } - - var init = function() { - // Start plugin - obj.setOptions(options); - - // Class - el.classList.add('jrating'); - - // Events - el.addEventListener("click", function(e) { - var index = e.target.getAttribute('data-index'); - if (index != undefined) { - if (index == obj.options.value) { - obj.setValue(0); - } else { - obj.setValue(index); - } - } - }); - - el.addEventListener("mouseover", function(e) { - var index = e.target.getAttribute('data-index'); - for (var i = 0; i < obj.options.number; i++) { - if (i < index) { - el.children[i].classList.add('jrating-over'); - } else { - el.children[i].classList.remove('jrating-over'); - } - } - }); - - el.addEventListener("mouseout", function(e) { - for (var i = 0; i < obj.options.number; i++) { - el.children[i].classList.remove('jrating-over'); - } - }); - - // Change - el.change = obj.setValue; - - // Global generic value handler - el.val = function(val) { - if (val === undefined) { - return obj.getValue(); - } else { - obj.setValue(val); - } - } - - // Reference - el.rating = obj; - } - - init(); - - return obj; -}); - - -jSuites.search = (function(el, options) { - if (el.search) { - return el.search; - } - - var index = null; - - var select = function(e) { - if (e.target.classList.contains('jsearch_item')) { - var element = e.target; - } else { - var element = e.target.parentNode; - } - - obj.selectIndex(element); - e.preventDefault(); - } - - var createList = function(data) { - // Reset container - container.innerHTML = ''; - // Print results - if (! data.length) { - // Show container - el.style.display = ''; - } else { - // Show container - el.style.display = 'block'; - - // Show items (only 10) - var len = data.length < 11 ? data.length : 10; - for (var i = 0; i < len; i++) { - if (typeof(data[i]) == 'string') { - var text = data[i]; - var value = data[i]; - } else { - // Legacy - var text = data[i].text; - if (! text && data[i].name) { - text = data[i].name; - } - var value = data[i].value; - if (! value && data[i].id) { - value = data[i].id; - } - } - - var div = document.createElement('div'); - div.setAttribute('data-value', value); - div.setAttribute('data-text', text); - div.className = 'jsearch_item'; - - if (data[i].id) { - div.setAttribute('id', data[i].id) - } - - if (obj.options.forceSelect && i == 0) { - div.classList.add('selected'); - } - var img = document.createElement('img'); - if (data[i].image) { - img.src = data[i].image; - } else { - img.style.display = 'none'; - } - div.appendChild(img); - - var item = document.createElement('div'); - item.innerHTML = text; - div.appendChild(item); - - // Append item to the container - container.appendChild(div); - } - } - } - - var execute = function(str) { - if (str != obj.terms) { - // New terms - obj.terms = str; - // New index - if (obj.options.forceSelect) { - index = 0; - } else { - index = null; - } - // Array or remote search - if (Array.isArray(obj.options.data)) { - var test = function(o) { - if (typeof(o) == 'string') { - if ((''+o).toLowerCase().search(str.toLowerCase()) >= 0) { - return true; - } - } else { - for (var key in o) { - var value = o[key]; - if ((''+value).toLowerCase().search(str.toLowerCase()) >= 0) { - return true; - } - } - } - return false; - } - - var results = obj.options.data.filter(function(item) { - return test(item); - }); - - // Show items - createList(results); - } else { - // Get remove results - jSuites.ajax({ - url: obj.options.data + str, - method: 'GET', - dataType: 'json', - success: function(data) { - // Show items - createList(data); - } - }); - } - } - } - - // Search timer - var timer = null; - - // Search methods - var obj = function(str) { - if (timer) { - clearTimeout(timer); - } - timer = setTimeout(function() { - execute(str); - }, 500); - } - if(options.forceSelect === null) { - options.forceSelect = true; - } - obj.options = { - data: options.data || null, - input: options.input || null, - searchByNode: options.searchByNode || null, - onselect: options.onselect || null, - forceSelect: options.forceSelect, - onbeforesearch: options.onbeforesearch || null, - }; - - obj.selectIndex = function(item) { - var id = item.getAttribute('id'); - var text = item.getAttribute('data-text'); - var value = item.getAttribute('data-value'); - // Onselect - if (typeof(obj.options.onselect) == 'function') { - obj.options.onselect(obj, text, value, id); - } - // Close container - obj.close(); - } - - obj.open = function() { - el.style.display = 'block'; - } - - obj.close = function() { - if (timer) { - clearTimeout(timer); - } - // Current terms - obj.terms = ''; - // Remove results - container.innerHTML = ''; - // Hide - el.style.display = ''; - } - - obj.isOpened = function() { - return el.style.display ? true : false; - } - - obj.keydown = function(e) { - if (obj.isOpened()) { - if (e.key == 'Enter') { - // Enter - if (index!==null && container.children[index]) { - obj.selectIndex(container.children[index]); - e.preventDefault(); - } else { - obj.close(); - } - } else if (e.key === 'ArrowUp') { - // Up - if (index!==null && container.children[0]) { - container.children[index].classList.remove('selected'); - if(!obj.options.forceSelect && index === 0) { - index = null; - } else { - index = Math.max(0, index-1); - container.children[index].classList.add('selected'); - } - } - e.preventDefault(); - } else if (e.key === 'ArrowDown') { - // Down - if(index == null) { - index = -1; - } else { - container.children[index].classList.remove('selected'); - } - if (index < 9 && container.children[index+1]) { - index++; - } - container.children[index].classList.add('selected'); - e.preventDefault(); - } - } - } - - obj.keyup = function(e) { - if (! obj.options.searchByNode && obj.options.input) { - if (obj.options.input.tagName === 'DIV') { - var terms = obj.options.input.innerText; - } else { - var terms = obj.options.input.value; - } - } else { - // Current node - var node = jSuites.getNode(); - if (node) { - var terms = node.innerText; - } - } - - if (typeof(obj.options.onbeforesearch) == 'function') { - var ret = obj.options.onbeforesearch(obj, terms); - if (ret) { - terms = ret; - } else { - if (ret === false) { - // Ignore event - return; - } - } - } - - obj(terms); - } - - // Add events - if (obj.options.input) { - obj.options.input.addEventListener("keyup", obj.keyup); - obj.options.input.addEventListener("keydown", obj.keydown); - } - - // Append element - var container = document.createElement('div'); - container.classList.add('jsearch_container'); - container.onmousedown = select; - el.appendChild(container); - - el.classList.add('jsearch'); - el.search = obj; - - return obj; -}); - - -jSuites.slider = (function(el, options) { - var obj = {}; - obj.options = {}; - obj.currentImage = null; - - if (options) { - obj.options = options; - } - - // Focus - el.setAttribute('tabindex', '900') - - // Items - obj.options.items = []; - - if (! el.classList.contains('jslider')) { - el.classList.add('jslider'); - el.classList.add('unselectable'); - - if (obj.options.height) { - el.style.minHeight = obj.options.height; - } - if (obj.options.width) { - el.style.width = obj.options.width; - } - if (obj.options.grid) { - el.classList.add('jslider-grid'); - var number = el.children.length; - if (number > 4) { - el.setAttribute('data-total', number - 4); - } - el.setAttribute('data-number', (number > 4 ? 4 : number)); - } - - // Add slider counter - var counter = document.createElement('div'); - counter.classList.add('jslider-counter'); - - // Move children inside - if (el.children.length > 0) { - // Keep children items - for (var i = 0; i < el.children.length; i++) { - obj.options.items.push(el.children[i]); - - // counter click event - var item = document.createElement('div'); - item.onclick = function() { - var index = Array.prototype.slice.call(counter.children).indexOf(this); - obj.show(obj.currentImage = obj.options.items[index]); - } - counter.appendChild(item); - } - } - // Add caption - var caption = document.createElement('div'); - caption.className = 'jslider-caption'; - - // Add close buttom - var controls = document.createElement('div'); - var close = document.createElement('div'); - close.className = 'jslider-close'; - close.innerHTML = ''; - - close.onclick = function() { - obj.close(); - } - controls.appendChild(caption); - controls.appendChild(close); - } - - obj.updateCounter = function(index) { - for (var i = 0; i < counter.children.length; i ++) { - if (counter.children[i].classList.contains('jslider-counter-focus')) { - counter.children[i].classList.remove('jslider-counter-focus'); - break; - } - } - counter.children[index].classList.add('jslider-counter-focus'); - } - - obj.show = function(target) { - if (! target) { - var target = el.children[0]; - } - - // Focus element - el.classList.add('jslider-focus'); - el.classList.remove('jslider-grid'); - el.appendChild(controls); - el.appendChild(counter); - - // Update counter - var index = obj.options.items.indexOf(target); - obj.updateCounter(index); - - // Remove display - for (var i = 0; i < el.children.length; i++) { - el.children[i].style.display = ''; - } - target.style.display = 'block'; - - // Is there any previous - if (target.previousElementSibling) { - el.classList.add('jslider-left'); - } else { - el.classList.remove('jslider-left'); - } - - // Is there any next - if (target.nextElementSibling && target.nextElementSibling.tagName == 'IMG') { - el.classList.add('jslider-right'); - } else { - el.classList.remove('jslider-right'); - } - - obj.currentImage = target; - - // Vertical image - if (obj.currentImage.offsetHeight > obj.currentImage.offsetWidth) { - obj.currentImage.classList.add('jslider-vertical'); - } - - controls.children[0].innerText = obj.currentImage.getAttribute('title'); - } - - obj.open = function() { - obj.show(); - - // Event - if (typeof(obj.options.onopen) == 'function') { - obj.options.onopen(el); - } - } - - obj.close = function() { - // Remove control classes - el.classList.remove('jslider-focus'); - el.classList.remove('jslider-left'); - el.classList.remove('jslider-right'); - // Show as a grid depending on the configuration - if (obj.options.grid) { - el.classList.add('jslider-grid'); - } - // Remove display - for (var i = 0; i < el.children.length; i++) { - el.children[i].style.display = ''; - } - // Remove controls from the component - counter.remove(); - controls.remove(); - // Current image - obj.currentImage = null; - // Event - if (typeof(obj.options.onclose) == 'function') { - obj.options.onclose(el); - } - } - - obj.reset = function() { - el.innerHTML = ''; - } - - obj.next = function() { - var nextImage = obj.currentImage.nextElementSibling; - if (nextImage && nextImage.tagName === 'IMG') { - obj.show(obj.currentImage.nextElementSibling); - } - } - - obj.prev = function() { - if (obj.currentImage.previousElementSibling) { - obj.show(obj.currentImage.previousElementSibling); - } - } - - var mouseUp = function(e) { - // Open slider - if (e.target.tagName == 'IMG') { - obj.show(e.target); - } else if (! e.target.classList.contains('jslider-close') && ! (e.target.parentNode.classList.contains('jslider-counter') || e.target.classList.contains('jslider-counter'))){ - // Arrow controls - var offsetX = e.offsetX || e.changedTouches[0].clientX; - if (e.target.clientWidth - offsetX < 40) { - // Show next image - obj.next(); - } else if (offsetX < 40) { - // Show previous image - obj.prev(); - } - } - } - - if ('ontouchend' in document.documentElement === true) { - el.addEventListener('touchend', mouseUp); - } else { - el.addEventListener('mouseup', mouseUp); - } - - // Add global events - el.addEventListener("swipeleft", function(e) { - obj.next(); - e.preventDefault(); - e.stopPropagation(); - }); - - el.addEventListener("swiperight", function(e) { - obj.prev(); - e.preventDefault(); - e.stopPropagation(); - }); - - el.addEventListener('keydown', function(e) { - if (e.which == 27) { - obj.close(); - } - }); - - el.slider = obj; - - return obj; -}); - -jSuites.sorting = (function(el, options) { - var obj = {}; - obj.options = {}; - - var defaults = { - pointer: null, - direction: null, - ondragstart: null, - ondragend: null, - ondrop: null, - } - - var dragElement = null; - - // Loop through the initial configuration - for (var property in defaults) { - if (options && options.hasOwnProperty(property)) { - obj.options[property] = options[property]; - } else { - obj.options[property] = defaults[property]; - } - } - - el.classList.add('jsorting'); - - el.addEventListener('dragstart', function(e) { - var position = Array.prototype.indexOf.call(e.target.parentNode.children, e.target); - dragElement = { - element: e.target, - o: position, - d: position - } - e.target.style.opacity = '0.25'; - - if (typeof(obj.options.ondragstart) == 'function') { - obj.options.ondragstart(el, e.target, e); - } - }); - - el.addEventListener('dragover', function(e) { - e.preventDefault(); - - if (getElement(e.target) && dragElement) { - if (e.target.getAttribute('draggable') == 'true' && dragElement.element != e.target) { - if (! obj.options.direction) { - var condition = e.target.clientHeight / 2 > e.offsetY; - } else { - var condition = e.target.clientWidth / 2 > e.offsetX; - } - - if (condition) { - e.target.parentNode.insertBefore(dragElement.element, e.target); - } else { - e.target.parentNode.insertBefore(dragElement.element, e.target.nextSibling); - } - - dragElement.d = Array.prototype.indexOf.call(e.target.parentNode.children, dragElement.element); - } - } - }); - - el.addEventListener('dragleave', function(e) { - e.preventDefault(); - }); - - el.addEventListener('dragend', function(e) { - e.preventDefault(); - - if (dragElement) { - if (typeof(obj.options.ondragend) == 'function') { - obj.options.ondragend(el, dragElement.element, e); - } - - // Cancelled put element to the original position - if (dragElement.o < dragElement.d) { - e.target.parentNode.insertBefore(dragElement.element, e.target.parentNode.children[dragElement.o]); - } else { - e.target.parentNode.insertBefore(dragElement.element, e.target.parentNode.children[dragElement.o].nextSibling); - } - - dragElement.element.style.opacity = ''; - dragElement = null; - } - }); - - el.addEventListener('drop', function(e) { - e.preventDefault(); - - if (dragElement && (dragElement.o != dragElement.d)) { - if (typeof(obj.options.ondrop) == 'function') { - obj.options.ondrop(el, dragElement.o, dragElement.d, dragElement.element, e.target, e); - } - } - - dragElement.element.style.opacity = ''; - dragElement = null; - }); - - var getElement = function(element) { - var sorting = false; - - function path (element) { - if (element.className) { - if (element.classList.contains('jsorting')) { - sorting = true; - } - } - - if (! sorting) { - path(element.parentNode); - } - } - - path(element); - - return sorting; - } - - for (var i = 0; i < el.children.length; i++) { - if (! el.children[i].hasAttribute('draggable')) { - el.children[i].setAttribute('draggable', 'true'); - } - } - - el.val = function() { - var id = null; - var data = []; - for (var i = 0; i < el.children.length; i++) { - if (id = el.children[i].getAttribute('data-id')) { - data.push(id); - } - } - return data; - } - - return el; -}); - -jSuites.tabs = (function(el, options) { - var obj = {}; - obj.options = {}; - - // Default configuration - var defaults = { - data: [], - position: null, - allowCreate: false, - allowChangePosition: false, - onclick: null, - onload: null, - onchange: null, - oncreate: null, - ondelete: null, - onbeforecreate: null, - onchangeposition: null, - animation: false, - hideHeaders: false, - padding: null, - palette: null, - maxWidth: null, - } - - // Loop through the initial configuration - for (var property in defaults) { - if (options && options.hasOwnProperty(property)) { - obj.options[property] = options[property]; - } else { - obj.options[property] = defaults[property]; - } - } - - // Class - el.classList.add('jtabs'); - - var prev = null; - var next = null; - var border = null; - - // Helpers - var setBorder = function(index) { - if (obj.options.animation) { - setTimeout(function() { - var rect = obj.headers.children[index].getBoundingClientRect(); - - if (obj.options.palette == 'modern') { - border.style.width = rect.width - 4 + 'px'; - border.style.left = obj.headers.children[index].offsetLeft + 2 + 'px'; - } else { - border.style.width = rect.width + 'px'; - border.style.left = obj.headers.children[index].offsetLeft + 'px'; - } - - if (obj.options.position == 'bottom') { - border.style.top = '0px'; - } else { - border.style.bottom = '0px'; - } - }, 150); - } - } - - var updateControls = function(x) { - if (typeof(obj.headers.scrollTo) == 'function') { - obj.headers.scrollTo({ - left: x, - behavior: 'smooth', - }); - } else { - obj.headers.scrollLeft = x; - } - - if (x <= 1) { - prev.classList.add('disabled'); - } else { - prev.classList.remove('disabled'); - } - - if (x >= obj.headers.scrollWidth - obj.headers.offsetWidth) { - next.classList.add('disabled'); - } else { - next.classList.remove('disabled'); - } - - if (obj.headers.scrollWidth <= obj.headers.offsetWidth) { - prev.style.display = 'none'; - next.style.display = 'none'; - } else { - prev.style.display = ''; - next.style.display = ''; - } - } - - obj.setBorder = setBorder; - - // Set value - obj.open = function(index) { - var previous = null; - for (var i = 0; i < obj.headers.children.length; i++) { - if (obj.headers.children[i].classList.contains('jtabs-selected')) { - // Current one - previous = i; - } - // Remote selected - obj.headers.children[i].classList.remove('jtabs-selected'); - if (obj.content.children[i]) { - obj.content.children[i].classList.remove('jtabs-selected'); - } - } - - obj.headers.children[index].classList.add('jtabs-selected'); - if (obj.content.children[index]) { - obj.content.children[index].classList.add('jtabs-selected'); - } - - if (previous != index && typeof(obj.options.onchange) == 'function') { - if (obj.content.children[index]) { - obj.options.onchange(el, obj, index, obj.headers.children[index], obj.content.children[index]); - } - } - - // Hide - if (obj.options.hideHeaders == true && (obj.headers.children.length < 3 && obj.options.allowCreate == false)) { - obj.headers.parentNode.style.display = 'none'; - } else { - // Set border - setBorder(index); - - obj.headers.parentNode.style.display = ''; - - var x1 = obj.headers.children[index].offsetLeft; - var x2 = x1 + obj.headers.children[index].offsetWidth; - var r1 = obj.headers.scrollLeft; - var r2 = r1 + obj.headers.offsetWidth; - - if (! (r1 <= x1 && r2 >= x2)) { - // Out of the viewport - updateControls(x1 - 1); - } - } - } - - obj.selectIndex = function(a) { - var index = Array.prototype.indexOf.call(obj.headers.children, a); - if (index >= 0) { - obj.open(index); - } - - return index; - } - - obj.rename = function(i, title) { - if (! title) { - title = prompt('New title', obj.headers.children[i].innerText); - } - obj.headers.children[i].innerText = title; - obj.open(i); - } - - obj.create = function(title, url) { - if (typeof(obj.options.onbeforecreate) == 'function') { - var ret = obj.options.onbeforecreate(el); - if (ret === false) { - return false; - } else { - title = ret; - } - } - - var div = obj.appendElement(title); - - if (typeof(obj.options.oncreate) == 'function') { - obj.options.oncreate(el, div) - } - - setBorder(); - - return div; - } - - obj.remove = function(index) { - return obj.deleteElement(index); - } - - obj.nextNumber = function() { - var num = 0; - for (var i = 0; i < obj.headers.children.length; i++) { - var tmp = obj.headers.children[i].innerText.match(/[0-9].*/); - if (tmp > num) { - num = parseInt(tmp); - } - } - if (! num) { - num = 1; - } else { - num++; - } - - return num; - } - - obj.deleteElement = function(index) { - if (! obj.headers.children[index]) { - return false; - } else { - obj.headers.removeChild(obj.headers.children[index]); - obj.content.removeChild(obj.content.children[index]); - } - - obj.open(0); - - if (typeof(obj.options.ondelete) == 'function') { - obj.options.ondelete(el, index) - } - } - - obj.appendElement = function(title, cb) { - if (! title) { - var title = prompt('Title?', ''); - } - - if (title) { - // Add content - var div = document.createElement('div'); - obj.content.appendChild(div); - - // Add headers - var h = document.createElement('div'); - h.innerHTML = title; - h.content = div; - obj.headers.insertBefore(h, obj.headers.lastChild); - - // Sortable - if (obj.options.allowChangePosition) { - h.setAttribute('draggable', 'true'); - } - // Open new tab - obj.selectIndex(h); - - // Callback - if (typeof(cb) == 'function') { - cb(div, h); - } - - // Return element - return div; - } - } - - obj.getActive = function() { - for (var i = 0; i < obj.headers.children.length; i++) { - if (obj.headers.children[i].classList.contains('jtabs-selected')) { - return i - } - } - return 0; - } - - obj.updateContent = function(position, newContent) { - if (typeof newContent !== 'string') { - var contentItem = newContent; - } else { - var contentItem = document.createElement('div'); - contentItem.innerHTML = newContent; - } - - if (obj.content.children[position].classList.contains('jtabs-selected')) { - newContent.classList.add('jtabs-selected'); - } - - obj.content.replaceChild(newContent, obj.content.children[position]); - - setBorder(); - } - - obj.updatePosition = function(f, t) { - // Ondrop update position of content - if (f > t) { - obj.content.insertBefore(obj.content.children[f], obj.content.children[t]); - } else { - obj.content.insertBefore(obj.content.children[f], obj.content.children[t].nextSibling); - } - - // Open destination tab - obj.open(t); - - // Call event - if (typeof(obj.options.onchangeposition) == 'function') { - obj.options.onchangeposition(obj.headers, f, t); - } - } - - obj.move = function(f, t) { - if (f > t) { - obj.headers.insertBefore(obj.headers.children[f], obj.headers.children[t]); - } else { - obj.headers.insertBefore(obj.headers.children[f], obj.headers.children[t].nextSibling); - } - - obj.updatePosition(f, t); - } - - obj.setBorder = setBorder; - - obj.init = function() { - el.innerHTML = ''; - - // Make sure the component is blank - obj.headers = document.createElement('div'); - obj.content = document.createElement('div'); - obj.headers.classList.add('jtabs-headers'); - obj.content.classList.add('jtabs-content'); - - if (obj.options.palette) { - el.classList.add('jtabs-modern'); - } else { - el.classList.remove('jtabs-modern'); - } - - // Padding - if (obj.options.padding) { - obj.content.style.padding = parseInt(obj.options.padding) + 'px'; - } - - // Header - var header = document.createElement('div'); - header.className = 'jtabs-headers-container'; - header.appendChild(obj.headers); - if (obj.options.maxWidth) { - header.style.maxWidth = parseInt(obj.options.maxWidth) + 'px'; - } - - // Controls - var controls = document.createElement('div'); - controls.className = 'jtabs-controls'; - controls.setAttribute('draggable', 'false'); - header.appendChild(controls); - - // Append DOM elements - if (obj.options.position == 'bottom') { - el.appendChild(obj.content); - el.appendChild(header); - } else { - el.appendChild(header); - el.appendChild(obj.content); - } - - // New button - if (obj.options.allowCreate == true) { - var add = document.createElement('div'); - add.className = 'jtabs-add'; - add.onclick = function() { - obj.create(); - } - controls.appendChild(add); - } - - prev = document.createElement('div'); - prev.className = 'jtabs-prev'; - prev.onclick = function() { - updateControls(obj.headers.scrollLeft - obj.headers.offsetWidth); - } - controls.appendChild(prev); - - next = document.createElement('div'); - next.className = 'jtabs-next'; - next.onclick = function() { - updateControls(obj.headers.scrollLeft + obj.headers.offsetWidth); - } - controls.appendChild(next); - - // Data - for (var i = 0; i < obj.options.data.length; i++) { - // Title - if (obj.options.data[i].titleElement) { - var headerItem = obj.options.data[i].titleElement; - } else { - var headerItem = document.createElement('div'); - } - // Icon - if (obj.options.data[i].icon) { - var iconContainer = document.createElement('div'); - var icon = document.createElement('i'); - icon.classList.add('material-icons'); - icon.innerHTML = obj.options.data[i].icon; - iconContainer.appendChild(icon); - headerItem.appendChild(iconContainer); - } - // Title - if (obj.options.data[i].title) { - var title = document.createTextNode(obj.options.data[i].title); - headerItem.appendChild(title); - } - // Width - if (obj.options.data[i].width) { - headerItem.style.width = obj.options.data[i].width; - } - // Content - if (obj.options.data[i].contentElement) { - var contentItem = obj.options.data[i].contentElement; - } else { - var contentItem = document.createElement('div'); - contentItem.innerHTML = obj.options.data[i].content; - } - obj.headers.appendChild(headerItem); - obj.content.appendChild(contentItem); - } - - // Animation - border = document.createElement('div'); - border.className = 'jtabs-border'; - obj.headers.appendChild(border); - - if (obj.options.animation) { - el.classList.add('jtabs-animation'); - } - - // Events - obj.headers.addEventListener("click", function(e) { - if (e.target.parentNode.classList.contains('jtabs-headers')) { - var target = e.target; - } else { - if (e.target.tagName == 'I') { - var target = e.target.parentNode.parentNode; - } else { - var target = e.target.parentNode; - } - } - - var index = obj.selectIndex(target); - - if (typeof(obj.options.onclick) == 'function') { - obj.options.onclick(el, obj, index, obj.headers.children[index], obj.content.children[index]); - } - }); - - obj.headers.addEventListener("contextmenu", function(e) { - obj.selectIndex(e.target); - }); - - if (obj.headers.children.length) { - // Open first tab - obj.open(0); - } - - // Update controls - updateControls(0); - - if (obj.options.allowChangePosition == true) { - jSuites.sorting(obj.headers, { - direction: 1, - ondrop: function(a,b,c) { - obj.updatePosition(b,c); - }, - }); - } - - if (typeof(obj.options.onload) == 'function') { - obj.options.onload(el, obj); - } - } - - // Loading existing nodes as the data - if (el.children[0] && el.children[0].children.length) { - // Create from existing elements - for (var i = 0; i < el.children[0].children.length; i++) { - var item = obj.options.data && obj.options.data[i] ? obj.options.data[i] : {}; - - if (el.children[1] && el.children[1].children[i]) { - item.titleElement = el.children[0].children[i]; - item.contentElement = el.children[1].children[i]; - } else { - item.contentElement = el.children[0].children[i]; - } - - obj.options.data[i] = item; - } - } - - // Remote controller flag - var loadingRemoteData = false; - - // Create from data - if (obj.options.data) { - // Append children - for (var i = 0; i < obj.options.data.length; i++) { - if (obj.options.data[i].url) { - jSuites.ajax({ - url: obj.options.data[i].url, - type: 'GET', - dataType: 'text/html', - index: i, - success: function(result) { - obj.options.data[this.index].content = result; - }, - complete: function() { - obj.init(); - } - }); - - // Flag loading - loadingRemoteData = true; - } - } - } - - if (! loadingRemoteData) { - obj.init(); - } - - el.tabs = obj; - - return obj; -}); - -jSuites.tags = (function(el, options) { - // Redefine configuration - if (el.tags) { - return el.tags.setOptions(options, true); - } - - var obj = { type:'tags' }; - obj.options = {}; - - // Limit - var limit = function() { - return obj.options.limit && el.children.length >= obj.options.limit ? true : false; - } - - // Search helpers - var search = null; - var searchContainer = null; - - obj.setOptions = function(options, reset) { - /** - * @typedef {Object} defaults - * @property {(string|Array)} value - Initial value of the compontent - * @property {number} limit - Max number of tags inside the element - * @property {string} search - The URL for suggestions - * @property {string} placeholder - The default instruction text on the element - * @property {validation} validation - Method to validate the tags - * @property {requestCallback} onbeforechange - Method to be execute before any changes on the element - * @property {requestCallback} onchange - Method to be execute after any changes on the element - * @property {requestCallback} onfocus - Method to be execute when on focus - * @property {requestCallback} onblur - Method to be execute when on blur - * @property {requestCallback} onload - Method to be execute when the element is loaded - */ - var defaults = { - value: '', - limit: null, - limitMessage: null, - search: null, - placeholder: null, - validation: null, - onbeforepaste: null, - onbeforechange: null, - onlimit: null, - onchange: null, - onfocus: null, - onblur: null, - onload: null, - colors: null, - } - - // Loop through though the default configuration - for (var property in defaults) { - if (options && options.hasOwnProperty(property)) { - obj.options[property] = options[property]; - } else { - if (typeof(obj.options[property]) == 'undefined' || reset === true) { - obj.options[property] = defaults[property]; - } - } - } - - // Placeholder - if (obj.options.placeholder) { - el.setAttribute('data-placeholder', obj.options.placeholder); - } else { - el.removeAttribute('data-placeholder'); - } - el.placeholder = obj.options.placeholder; - - // Update value - obj.setValue(obj.options.value); - - // Validate items - filter(); - - // Create search box - if (obj.options.search) { - if (! searchContainer) { - searchContainer = document.createElement('div'); - el.parentNode.insertBefore(searchContainer, el.nextSibling); - - // Create container - search = jSuites.search(searchContainer, { - data: obj.options.search, - onselect: function(a,b,c) { - obj.selectIndex(b,c); - } - }); - } - } else { - if (searchContainer) { - search = null; - searchContainer.remove(); - searchContainer = null; - } - } - - return obj; - } - - /** - * Add a new tag to the element - * @param {(?string|Array)} value - The value of the new element - */ - obj.add = function(value, focus) { - if (typeof(obj.options.onbeforechange) == 'function') { - var ret = obj.options.onbeforechange(el, obj, obj.options.value, value); - if (ret === false) { - return false; - } else { - if (ret != null) { - value = ret; - } - } - } - - // Make sure search is closed - if (search) { - search.close(); - } - - if (limit()) { - if (typeof(obj.options.onlimit) == 'function') { - obj.options.onlimit(obj, obj.options.limit); - } else if (obj.options.limitMessage) { - alert(obj.options.limitMessage + ' ' + obj.options.limit); - } - } else { - // Get node - var node = jSuites.getNode(); - - if (node && node.parentNode && node.parentNode.classList.contains('jtags') && - node.nextSibling && (! (node.nextSibling.innerText && node.nextSibling.innerText.trim()))) { - div = node.nextSibling; - } else { - // Remove not used last item - if (el.lastChild) { - if (! el.lastChild.innerText.trim()) { - el.removeChild(el.lastChild); - } - } - - // Mix argument string or array - if (! value || typeof(value) == 'string') { - var div = createElement(value, value, node); - } else { - for (var i = 0; i <= value.length; i++) { - if (! limit()) { - if (! value[i] || typeof(value[i]) == 'string') { - var t = value[i] || ''; - var v = null; - } else { - var t = value[i].text; - var v = value[i].value; - } - - // Add element - var div = createElement(t, v); - } - } - } - - // Change - change(); - } - - // Place caret - if (focus) { - setFocus(div); - } - } - } - - obj.setLimit = function(limit) { - obj.options.limit = limit; - var n = el.children.length - limit; - while (el.children.length > limit) { - el.removeChild(el.lastChild); - } - } - - // Remove a item node - obj.remove = function(node) { - // Remove node - node.parentNode.removeChild(node); - // Make sure element is not blank - if (! el.children.length) { - obj.add('', true); - } else { - change(); - } - } - - /** - * Get all tags in the element - * @return {Array} data - All tags as an array - */ - obj.getData = function() { - var data = []; - for (var i = 0; i < el.children.length; i++) { - // Get value - var text = el.children[i].innerText.replace("\n", ""); - // Get id - var value = el.children[i].getAttribute('data-value'); - if (! value) { - value = text; - } - // Item - if (text || value) { - data.push({ text: text, value: value }); - } - } - return data; - } - - /** - * Get the value of one tag. Null for all tags - * @param {?number} index - Tag index number. Null for all tags. - * @return {string} value - All tags separated by comma - */ - obj.getValue = function(index) { - var value = null; - - if (index != null) { - // Get one individual value - value = el.children[index].getAttribute('data-value'); - if (! value) { - value = el.children[index].innerText.replace("\n", ""); - } - } else { - // Get all - var data = []; - for (var i = 0; i < el.children.length; i++) { - value = el.children[i].innerText.replace("\n", ""); - if (value) { - data.push(obj.getValue(i)); - } - } - value = data.join(','); - } - - return value; - } - - /** - * Set the value of the element based on a string separeted by (,|;|\r\n) - * @param {mixed} value - A string or array object with values - */ - obj.setValue = function(mixed) { - if (! mixed) { - obj.reset(); - } else { - if (el.value != mixed) { - if (Array.isArray(mixed)) { - obj.add(mixed); - } else { - // Remove whitespaces - var text = (''+mixed).trim(); - // Tags - var data = extractTags(text); - // Reset - el.innerHTML = ''; - // Add tags to the element - obj.add(data); - } - } - } - } - - /** - * Reset the data from the element - */ - obj.reset = function() { - // Empty class - el.classList.add('jtags-empty'); - // Empty element - el.innerHTML = '
'; - // Execute changes - change(); - } - - /** - * Verify if all tags in the element are valid - * @return {boolean} - */ - obj.isValid = function() { - var test = 0; - for (var i = 0; i < el.children.length; i++) { - if (el.children[i].classList.contains('jtags_error')) { - test++; - } - } - return test == 0 ? true : false; - } - - /** - * Add one element from the suggestions to the element - * @param {object} item - Node element in the suggestions container - */ - obj.selectIndex = function(text, value) { - var node = jSuites.getNode(); - if (node) { - // Append text to the caret - node.innerText = text; - // Set node id - if (value) { - node.setAttribute('data-value', value); - } - // Remove any error - node.classList.remove('jtags_error'); - if (! limit()) { - // Add new item - obj.add('', true); - } - } - } - - /** - * Search for suggestions - * @param {object} node - Target node for any suggestions - */ - obj.search = function(node) { - // Search for - var terms = node.innerText; - } - - // Destroy tags element - obj.destroy = function() { - // Bind events - el.removeEventListener('mouseup', tagsMouseUp); - el.removeEventListener('keydown', tagsKeyDown); - el.removeEventListener('keyup', tagsKeyUp); - el.removeEventListener('paste', tagsPaste); - el.removeEventListener('focus', tagsFocus); - el.removeEventListener('blur', tagsBlur); - - // Remove element - el.parentNode.removeChild(el); - } - - var setFocus = function(node) { - if (el.children.length) { - var range = document.createRange(); - var sel = window.getSelection(); - if (! node) { - var node = el.childNodes[el.childNodes.length-1]; - } - range.setStart(node, node.length) - range.collapse(true) - sel.removeAllRanges() - sel.addRange(range) - el.scrollLeft = el.scrollWidth; - } - } - - var createElement = function(label, value, node) { - var div = document.createElement('div'); - div.innerHTML = label ? label : ''; - if (value) { - div.setAttribute('data-value', value); - } - - if (node && node.parentNode.classList.contains('jtags')) { - el.insertBefore(div, node.nextSibling); - } else { - el.appendChild(div); - } - - return div; - } - - var change = function() { - // Value - var value = obj.getValue(); - - if (value != obj.options.value) { - obj.options.value = value; - if (typeof(obj.options.onchange) == 'function') { - obj.options.onchange(el, obj, obj.options.value); - } - - // Lemonade JS - if (el.value != obj.options.value) { - el.value = obj.options.value; - if (typeof(el.oninput) == 'function') { - el.oninput({ - type: 'input', - target: el, - value: el.value - }); - } - } - } - - filter(); - } - - /** - * Filter tags - */ - var filter = function() { - for (var i = 0; i < el.children.length; i++) { - if (el.children[i].tagName === 'DIV') { - // Create label design - if (!obj.getValue(i)) { - el.children[i].classList.remove('jtags_label'); - } else { - el.children[i].classList.add('jtags_label'); - - // Validation in place - if (typeof (obj.options.validation) == 'function') { - if (obj.getValue(i)) { - if (!obj.options.validation(el.children[i], el.children[i].innerText, el.children[i].getAttribute('data-value'))) { - el.children[i].classList.add('jtags_error'); - } else { - el.children[i].classList.remove('jtags_error'); - } - } else { - el.children[i].classList.remove('jtags_error'); - } - } else { - el.children[i].classList.remove('jtags_error'); - } - } - } - } - - isEmpty(); - } - - var isEmpty = function() { - // Can't be empty - if (! el.innerText.trim()) { - if (! el.children.length || el.children[0].tagName === 'BR') { - el.innerHTML = ''; - setFocus(createElement()); - } - } else { - el.classList.remove('jtags-empty'); - } - } - - /** - * Extract tags from a string - * @param {string} text - Raw string - * @return {Array} data - Array with extracted tags - */ - var extractTags = function(text) { - /** @type {Array} */ - var data = []; - - /** @type {string} */ - var word = ''; - - // Remove whitespaces - text = text.trim(); - - if (text) { - for (var i = 0; i < text.length; i++) { - if (text[i] == ',' || text[i] == ';' || text[i] == '\n') { - if (word) { - data.push(word.trim()); - word = ''; - } - } else { - word += text[i]; - } - } - - if (word) { - data.push(word); - } - } - - return data; - } - - /** @type {number} */ - var anchorOffset = 0; - - /** - * Processing event keydown on the element - * @param e {object} - */ - var tagsKeyDown = function(e) { - // Anchoroffset - anchorOffset = window.getSelection().anchorOffset; - - // Verify if is empty - isEmpty(); - - // Comma - if (e.key === 'Tab' || e.key === ';' || e.key === ',') { - var n = window.getSelection().anchorOffset; - if (n > 1) { - if (limit()) { - if (typeof(obj.options.onlimit) == 'function') { - obj.options.onlimit(obj, obj.options.limit) - } - } else { - obj.add('', true); - } - } - e.preventDefault(); - } else if (e.key == 'Enter') { - if (! search || ! search.isOpened()) { - var n = window.getSelection().anchorOffset; - if (n > 1) { - if (! limit()) { - obj.add('', true); - } - } - e.preventDefault(); - } - } else if (e.key == 'Backspace') { - // Back space - do not let last item to be removed - if (el.children.length == 1 && window.getSelection().anchorOffset < 1) { - e.preventDefault(); - } - } - - // Search events - if (search) { - search.keydown(e); - } - - // Verify if is empty - isEmpty(); - } - - /** - * Processing event keyup on the element - * @param e {object} - */ - var tagsKeyUp = function(e) { - if (e.which == 39) { - // Right arrow - var n = window.getSelection().anchorOffset; - if (n > 1 && n == anchorOffset) { - obj.add('', true); - } - } else if (e.which == 13 || e.which == 38 || e.which == 40) { - e.preventDefault(); - } else { - if (search) { - search.keyup(e); - } - } - - filter(); - } - - /** - * Processing event paste on the element - * @param e {object} - */ - var tagsPaste = function(e) { - if (e.clipboardData || e.originalEvent.clipboardData) { - var text = (e.originalEvent || e).clipboardData.getData('text/plain'); - } else if (window.clipboardData) { - var text = window.clipboardData.getData('Text'); - } - - var data = extractTags(text); - - if (typeof(obj.options.onbeforepaste) == 'function') { - var ret = obj.options.onbeforepaste(el, obj, data); - if (ret === false) { - e.preventDefault(); - return false; - } else { - if (ret) { - data = ret; - } - } - } - - if (data.length > 1) { - obj.add(data, true); - e.preventDefault(); - } else if (data[0]) { - document.execCommand('insertText', false, data[0]) - e.preventDefault(); - } - } - - /** - * Processing event mouseup on the element - * @param e {object} - */ - var tagsMouseUp = function(e) { - if (e.target.parentNode && e.target.parentNode.classList.contains('jtags')) { - if (e.target.classList.contains('jtags_label') || e.target.classList.contains('jtags_error')) { - var rect = e.target.getBoundingClientRect(); - if (rect.width - (e.clientX - rect.left) < 16) { - obj.remove(e.target); - } - } - } - - // Set focus in the last item - if (e.target == el) { - setFocus(); - } - } - - var tagsFocus = function() { - if (! el.classList.contains('jtags-focus')) { - if (! el.children.length || obj.getValue(el.children.length - 1)) { - if (! limit()) { - createElement(''); - } - } - - if (typeof(obj.options.onfocus) == 'function') { - obj.options.onfocus(el, obj, obj.getValue()); - } - - el.classList.add('jtags-focus'); - } - } - - var tagsBlur = function() { - if (el.classList.contains('jtags-focus')) { - if (search) { - search.close(); - } - - for (var i = 0; i < el.children.length - 1; i++) { - // Create label design - if (! obj.getValue(i)) { - el.removeChild(el.children[i]); - } - } - - change(); - - el.classList.remove('jtags-focus'); - - if (typeof(obj.options.onblur) == 'function') { - obj.options.onblur(el, obj, obj.getValue()); - } - } - } - - var init = function() { - // Bind events - if ('touchend' in document.documentElement === true) { - el.addEventListener('touchend', tagsMouseUp); - } else { - el.addEventListener('mouseup', tagsMouseUp); - } - - el.addEventListener('keydown', tagsKeyDown); - el.addEventListener('keyup', tagsKeyUp); - el.addEventListener('paste', tagsPaste); - el.addEventListener('focus', tagsFocus); - el.addEventListener('blur', tagsBlur); - - // Editable - el.setAttribute('contenteditable', true); - - // Prepare container - el.classList.add('jtags'); - - // Initial options - obj.setOptions(options); - - if (typeof(obj.options.onload) == 'function') { - obj.options.onload(el, obj); - } - - // Change methods - el.change = obj.setValue; - - // Global generic value handler - el.val = function(val) { - if (val === undefined) { - return obj.getValue(); - } else { - obj.setValue(val); - } - } - - el.tags = obj; - } - - init(); - - return obj; -}); - -jSuites.toolbar = (function(el, options) { - // New instance - var obj = { type:'toolbar' }; - obj.options = {}; - - // Default configuration - var defaults = { - app: null, - container: false, - badge: false, - title: false, - responsive: false, - maxWidth: null, - bottom: true, - items: [], - } - - // Loop through our object - for (var property in defaults) { - if (options && options.hasOwnProperty(property)) { - obj.options[property] = options[property]; - } else { - obj.options[property] = defaults[property]; - } - } - - if (! el && options.app && options.app.el) { - el = document.createElement('div'); - options.app.el.appendChild(el); - } - - // Arrow - var toolbarArrow = document.createElement('div'); - toolbarArrow.classList.add('jtoolbar-item'); - toolbarArrow.classList.add('jtoolbar-arrow'); - - var toolbarFloating = document.createElement('div'); - toolbarFloating.classList.add('jtoolbar-floating'); - toolbarArrow.appendChild(toolbarFloating); - - obj.selectItem = function(element) { - var elements = toolbarContent.children; - for (var i = 0; i < elements.length; i++) { - if (element != elements[i]) { - elements[i].classList.remove('jtoolbar-selected'); - } - } - element.classList.add('jtoolbar-selected'); - } - - obj.hide = function() { - jSuites.animation.slideBottom(el, 0, function() { - el.style.display = 'none'; - }); - } - - obj.show = function() { - el.style.display = ''; - jSuites.animation.slideBottom(el, 1); - } - - obj.get = function() { - return el; - } - - obj.setBadge = function(index, value) { - toolbarContent.children[index].children[1].firstChild.innerHTML = value; - } - - obj.destroy = function() { - toolbar.remove(); - el.innerHTML = ''; - } - - obj.update = function(a, b) { - for (var i = 0; i < toolbarContent.children.length; i++) { - // Toolbar element - var toolbarItem = toolbarContent.children[i]; - // State management - if (typeof(toolbarItem.updateState) == 'function') { - toolbarItem.updateState(el, obj, toolbarItem, a, b); - } - } - for (var i = 0; i < toolbarFloating.children.length; i++) { - // Toolbar element - var toolbarItem = toolbarFloating.children[i]; - // State management - if (typeof(toolbarItem.updateState) == 'function') { - toolbarItem.updateState(el, obj, toolbarItem, a, b); - } - } - } - - obj.create = function(items) { - // Reset anything in the toolbar - toolbarContent.innerHTML = ''; - // Create elements in the toolbar - for (var i = 0; i < items.length; i++) { - var toolbarItem = document.createElement('div'); - toolbarItem.classList.add('jtoolbar-item'); - - if (items[i].width) { - toolbarItem.style.width = parseInt(items[i].width) + 'px'; - } - - if (items[i].k) { - toolbarItem.k = items[i].k; - } - - if (items[i].tooltip) { - toolbarItem.setAttribute('title', items[i].tooltip); - } - - // Id - if (items[i].id) { - toolbarItem.setAttribute('id', items[i].id); - } - - // Selected - if (items[i].updateState) { - toolbarItem.updateState = items[i].updateState; - } - - if (items[i].active) { - toolbarItem.classList.add('jtoolbar-active'); - } - - if (items[i].disabled) { - toolbarItem.classList.add('jtoolbar-disabled'); - } - - if (items[i].type == 'select' || items[i].type == 'dropdown') { - jSuites.picker(toolbarItem, items[i]); - } else if (items[i].type == 'divisor') { - toolbarItem.classList.add('jtoolbar-divisor'); - } else if (items[i].type == 'label') { - toolbarItem.classList.add('jtoolbar-label'); - toolbarItem.innerHTML = items[i].content; - } else { - // Material icons - var toolbarIcon = document.createElement('i'); - if (typeof(items[i].class) === 'undefined') { - toolbarIcon.classList.add('material-icons'); - } else { - var c = items[i].class.split(' '); - for (var j = 0; j < c.length; j++) { - toolbarIcon.classList.add(c[j]); - } - } - toolbarIcon.innerHTML = items[i].content ? items[i].content : ''; - toolbarItem.appendChild(toolbarIcon); - - // Badge options - if (obj.options.badge == true) { - var toolbarBadge = document.createElement('div'); - toolbarBadge.classList.add('jbadge'); - var toolbarBadgeContent = document.createElement('div'); - toolbarBadgeContent.innerHTML = items[i].badge ? items[i].badge : ''; - toolbarBadge.appendChild(toolbarBadgeContent); - toolbarItem.appendChild(toolbarBadge); - } - - // Title - if (items[i].title) { - if (obj.options.title == true) { - var toolbarTitle = document.createElement('span'); - toolbarTitle.innerHTML = items[i].title; - toolbarItem.appendChild(toolbarTitle); - } else { - toolbarItem.setAttribute('title', items[i].title); - } - } - - if (obj.options.app && items[i].route) { - // Route - toolbarItem.route = items[i].route; - // Onclick for route - toolbarItem.onclick = function() { - obj.options.app.pages(this.route); - } - // Create pages - obj.options.app.pages(items[i].route, { - toolbarItem: toolbarItem, - closed: true - }); - } - } - - if (items[i].onclick) { - toolbarItem.onclick = items[i].onclick.bind(items[i], el, obj, toolbarItem); - } - - toolbarContent.appendChild(toolbarItem); - } - - // Fits to the page - setTimeout(function() { - obj.refresh(); - }, 0); - } - - obj.open = function() { - toolbarArrow.classList.add('jtoolbar-arrow-selected'); - - var rectElement = el.getBoundingClientRect(); - var rect = toolbarFloating.getBoundingClientRect(); - if (rect.bottom > window.innerHeight || obj.options.bottom) { - toolbarFloating.style.bottom = '0'; - } else { - toolbarFloating.style.removeProperty('bottom'); - } - - toolbarFloating.style.right = '0'; - - toolbarArrow.children[0].focus(); - // Start tracking - jSuites.tracking(obj, true); - } - - obj.close = function() { - toolbarArrow.classList.remove('jtoolbar-arrow-selected') - // End tracking - jSuites.tracking(obj, false); - } - - obj.refresh = function() { - if (obj.options.responsive == true) { - // Width of the c - var rect = el.parentNode.getBoundingClientRect(); - if (! obj.options.maxWidth) { - obj.options.maxWidth = rect.width; - } - // Available parent space - var available = parseInt(obj.options.maxWidth); - // Remove arrow - if (toolbarArrow.parentNode) { - toolbarArrow.parentNode.removeChild(toolbarArrow); - } - // Move all items to the toolbar - while (toolbarFloating.firstChild) { - toolbarContent.appendChild(toolbarFloating.firstChild); - } - // Toolbar is larger than the parent, move elements to the floating element - if (available < toolbarContent.offsetWidth) { - // Give space to the floating element - available -= 50; - // Move to the floating option - while (toolbarContent.lastChild && available < toolbarContent.offsetWidth) { - toolbarFloating.insertBefore(toolbarContent.lastChild, toolbarFloating.firstChild); - } - } - // Show arrow - if (toolbarFloating.children.length > 0) { - toolbarContent.appendChild(toolbarArrow); - } - } - } - - obj.setReadonly = function(state) { - state = state ? 'add' : 'remove'; - el.classList[state]('jtoolbar-disabled'); - } - - el.onclick = function(e) { - var element = jSuites.findElement(e.target, 'jtoolbar-item'); - if (element) { - obj.selectItem(element); - } - - if (e.target.classList.contains('jtoolbar-arrow')) { - obj.open(); - } - } - - window.addEventListener('resize', function() { - obj.refresh(); - }); - - // Toolbar - el.classList.add('jtoolbar'); - // Reset content - el.innerHTML = ''; - // Container - if (obj.options.container == true) { - el.classList.add('jtoolbar-container'); - } - // Content - var toolbarContent = document.createElement('div'); - el.appendChild(toolbarContent); - // Special toolbar for mobile applications - if (obj.options.app) { - el.classList.add('jtoolbar-mobile'); - } - // Create toolbar - obj.create(obj.options.items); - // Shortcut - el.toolbar = obj; - - return obj; -}); - -jSuites.validations = (function() { - /** - * Options: Object, - * Properties: - * Constraint, - * Reference, - * Value - */ - - var isNumeric = function(num) { - return !isNaN(num) && num !== null && num !== ''; - } - - var numberCriterias = { - 'between': function(value, range) { - return value >= range[0] && value <= range[1]; - }, - 'not between': function(value, range) { - return value < range[0] || value > range[1]; - }, - '<': function(value, range) { - return value < range[0]; - }, - '<=': function(value, range) { - return value <= range[0]; - }, - '>': function(value, range) { - return value > range[0]; - }, - '>=': function(value, range) { - return value >= range[0]; - }, - '=': function(value, range) { - return value == range[0]; - }, - '!=': function(value, range) { - return value != range[0]; - }, - } - - var dateCriterias = { - 'valid date': function() { - return true; - }, - '=': function(value, range) { - return value === range[0]; - }, - '<': function(value, range) { - return value < range[0]; - }, - '<=': function(value, range) { - return value <= range[0]; - }, - '>': function(value, range) { - return value > range[0]; - }, - '>=': function(value, range) { - return value >= range[0]; - }, - 'between': function(value, range) { - return value >= range[0] && value <= range[1]; - }, - 'not between': function(value, range) { - return value < range[0] || value > range[1]; - }, - } - - var textCriterias = { - 'contains': function(value, range) { - return value.includes(range[0]); - }, - 'not contains': function(value, range) { - return !value.includes(range[0]); - }, - 'begins with': function(value, range) { - return value.startsWith(range[0]); - }, - 'ends with': function(value, range) { - return value.endsWith(range[0]); - }, - '=': function(value, range) { - return value === range[0]; - }, - 'valid email': function(value) { - var pattern = new RegExp(/^[^\s@]+@[^\s@]+\.[^\s@]+$/); - - return pattern.test(value); - }, - 'valid url': function(value) { - var pattern = new RegExp(/(((https?:\/\/)|(www\.))[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|]+)/ig); - - return pattern.test(value); - }, - } - - // Component router - var component = function(value, options) { - if (typeof(component[options.type]) === 'function') { - if (options.allowBlank && value === '') { - return true; - } - - return component[options.type](value, options); - } - return null; - } - - component.url = function() { - var pattern = new RegExp(/(((https?:\/\/)|(www\.))[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|]+)/ig); - return pattern.test(data) ? true : false; - } - - component.email = function(data) { - var pattern = new RegExp(/^[^\s@]+@[^\s@]+\.[^\s@]+$/); - return data && pattern.test(data) ? true : false; - } - - component.required = function(data) { - return data.trim() ? true : false; - } - - component.exist = function(data, options) { - return !!data.toString(); - } - - component['not exist'] = function(data, options) { - return !data.toString(); - } - - component.empty = function(data) { - return !data.toString(); - } - - component.notEmpty = function(data) { - return !!data.toString(); - } - - component.number = function(data, options) { - if (! isNumeric(data)) { - return false; - } - - if (!options || !options.criteria) { - return true; - } - - if (!numberCriterias[options.criteria]) { - return false; - } - - var values = options.value.map(function(num) { - return parseFloat(num); - }) - - return numberCriterias[options.criteria](data, values); - }; - - component.login = function(data) { - var pattern = new RegExp(/^[a-zA-Z0-9\_\-\.\s+]+$/); - return data && pattern.test(data) ? true : false; - } - - component.list = function(data, options) { - var dataType = typeof data; - if (dataType !== 'string' && dataType !== 'number') { - return false; - } - if (typeof(options.value[0]) === 'string') { - var list = options.value[0].split(','); - } else { - var list = options.value[0]; - } - - var validOption = list.findIndex(function name(item) { - return item == data; - }); - - return validOption > -1; - } - - component.date = function(data, options) { - if (new Date(data) == 'Invalid Date') { - return false; - } - - if (!options || !options.criteria) { - return true; - } - - if (!dateCriterias[options.criteria]) { - return false; - } - - var values = options.value.map(function(date) { - return new Date(date).getTime(); - }); - - return dateCriterias[options.criteria](new Date(data).getTime(), values); - } - - component.text = function(data, options) { - if (typeof data !== 'string') { - return false; - } - - if (!options || !options.criteria) { - return true; - } - - if (!textCriterias[options.criteria]) { - return false; - } - - return textCriterias[options.criteria](data, options.value); - } - - component.textLength = function(data, options) { - data = data.toString(); - - return component.number(data.length, options); - } - - return component; -})(); - - - - return jSuites; - -}))); \ No newline at end of file diff --git a/build.bash b/build.bash deleted file mode 100644 index b8da5b4..0000000 --- a/build.bash +++ /dev/null @@ -1,88 +0,0 @@ -#!/bin/bash - -# Global Variables: -SCSS_VENDOR=scss/vendor/ -JS_VENDOR=assets/vendor/ - -JSUITES_JS_URL="https://jsuites.net/v4/jsuites.js" -JSPREADSHEET_JS_URL="https://bossanova.uk/jspreadsheet/v4/jexcel.js" - -JSUITES_CSS_URL="https://raw.githubusercontent.com/jsuites/jsuites/master/dist/jsuites.css" -JSPREADSHEET_CSS_URL="https://bossanova.uk/jspreadsheet/v4/jexcel.css" - -JSUITES_CSS_FILE=jsuites.css -JSUITES_SCSS_FILE=jsuites.scss -JSUITES_SCSS_FILE_LOCATION=$SCSS_VENDOR$JSUITES_SCSS_FILE - -JSUITES_JS_FILE=jsuites.js -JSUITES_NEW_JS_FILE=jsuites.js -JSUITES_JS_FILE_LOCATION=$JS_VENDOR$JSUITES_NEW_JS_FILE - -JSPREADSHEET_CSS_FILE=jexcel.css -JSPREADSHEET_SCSS_FILE=jspreadsheet.scss -JSPREADSHEET_SCSS_FILE_LOCATION=$SCSS_VENDOR$JSPREADSHEET_SCSS_FILE - -JSPREADSHEET_JS_FILE=jexcel.js -JSPREADSHEET_NEW_JS_FILE=jspreadsheet.js -JSPREADSHEET_JS_FILE_LOCATION=$JS_VENDOR$JSPREADSHEET_NEW_JS_FILE - - - - -# Remove all vendor related files: -rm -r ${SCSS_VENDOR}* -rm -r ${JS_VENDOR} - -# Recreate vendor directory -mkdir $JS_VENDOR -echo "Old vendor assets have been removed." - - -# STYLESHEETS: -# Add JSuite vendor file -if test -f "$JSUITES_CSS_FILE"; then - echo "$JSUITES_CSS_FILE already exists." -else - # Fetch jsuite stylesheet - wget $JSUITES_CSS_URL - echo "$JSUITES_CSS_FILE has been created in $(pwd)" - # Move jsuite stylesheet to vendor as a scss file - mv $JSUITES_CSS_FILE $JSUITES_SCSS_FILE_LOCATION - echo "$JSUITES_SCSS_FILE has been placed in the scss vendor directory" - # Scope styles to jexcel_container class - sed -i '' '1s/^/.jexcel_container {\n/' $JSUITES_SCSS_FILE_LOCATION - sed -i '' '$a\ - }' $JSUITES_SCSS_FILE_LOCATION - - # Remove conflicting animation classes - # TODO: Improve below code to handle nested code blocks -fi - -# Add JSpreadsheet vendor file -if test -f "$JSPREADSHEET_CSS_FILE"; then - echo "$JSPREADSHEET_CSS_FILE already exists." -else - # Fetch jspreadsheet stylesheet - wget $JSPREADSHEET_CSS_URL - echo "$JSPREADSHEET_CSS_FILE has been created in $(pwd)" - # Move jspreadsheet stylesheet to vendor as a scss file - mv $JSPREADSHEET_CSS_FILE $JSPREADSHEET_SCSS_FILE_LOCATION -fi - -# Apply prettier to vendor files -yarn prettier --write $SCSS_VENDOR - -# JAVASCRIPTS: -if test -f "$JSUITES_JS_FILE"; then - echo "$JSUITES_JS_FILE already exists." -else - wget $JSUITES_JS_URL - mv $JSUITES_JS_FILE $JSUITES_JS_FILE_LOCATION -fi - -if test -f "$JSPREADSHEET_JS_FILE"; then - echo "$JSPREADSHEET_JS_FILE already exists." -else - wget $JSPREADSHEET_JS_URL - mv $JSPREADSHEET_JS_FILE $JSPREADSHEET_JS_FILE_LOCATION -fi diff --git a/common/common.scss b/common/common.scss deleted file mode 100644 index 4197372..0000000 --- a/common/common.scss +++ /dev/null @@ -1,5 +0,0 @@ -@import "vendor/jspreadsheet"; -@import "vendor/jsuites"; -@import "theme/jspreadsheet-theme"; -@import "post/table-edit-decorator"; -@import "modal/insert-table-modal"; diff --git a/javascripts/discourse-table-builder/lib/utilities.js b/javascripts/discourse-table-builder/lib/utilities.js deleted file mode 100644 index 6a14164..0000000 --- a/javascripts/discourse-table-builder/lib/utilities.js +++ /dev/null @@ -1,77 +0,0 @@ -/* eslint-disable */ - -/** - * Generate markdown table from an array of objects - * Inspired by https://github.com/Ygilany/array-to-table - * - * @param {Array} array Array of objects - * @param {Array} columns Column headings - * @param {String} colPrefix Table column prefix - * - * @return {String} Markdown table - */ -export function arrayToTable(array, cols, colPrefix = "col") { - var table = ""; - - // Generate table headers - table += "|"; - table += cols.join(" | "); - table += "|\r\n|"; - - // Generate table header separator - table += cols - .map(function () { - return "---"; - }) - .join(" | "); - table += "|\r\n"; - - // Generate table body - array.forEach(function (item) { - table += "|"; - - table += - cols - .map(function (_key, index) { - return String(item[`${colPrefix}${index}`] || "").replace( - /\r?\n|\r/g, - " " - ); - }) - .join(" | ") + "|\r\n"; - }); - - return table; -} - -/** - * - * @returns a regular expression finding all markdown tables - */ -export function findTableRegex() { - return /((\r?){2}|^)(^\|[^\r\n]*(\r?\n)?)+(?=(\r?\n){2}|$)/gm; -} - -export function tokenRange(tokens, start, end) { - const contents = []; - let startPushing = false; - let items = []; - - tokens.forEach((token) => { - if (token.type === start) { - startPushing = true; - } - - if (token.type === end) { - contents.push(items); - items = []; - startPushing = false; - } - - if (startPushing) { - items.push(token); - } - }); - - return contents; -} diff --git a/javascripts/discourse/api-initializers/table-builder.js b/javascripts/discourse/api-initializers/table-builder.js deleted file mode 100644 index c54c9eb..0000000 --- a/javascripts/discourse/api-initializers/table-builder.js +++ /dev/null @@ -1,19 +0,0 @@ -import { apiInitializer } from "discourse/lib/api"; -import SpreadsheetEditor from "../components/spreadsheet-editor"; - -export default apiInitializer("1.13.0", (api) => { - const modal = api.container.lookup("service:modal"); - - api.addComposerToolbarPopupMenuOption({ - icon: "table", - label: themePrefix("discourse_table_builder.composer.button"), - action: (toolbarEvent) => { - modal.show(SpreadsheetEditor, { - model: { - toolbarEvent, - tableTokens: null, - }, - }); - }, - }); -}); diff --git a/javascripts/discourse/api-initializers/table-editor.js b/javascripts/discourse/api-initializers/table-editor.js deleted file mode 100644 index 9f187ef..0000000 --- a/javascripts/discourse/api-initializers/table-editor.js +++ /dev/null @@ -1,105 +0,0 @@ -import { apiInitializer } from "discourse/lib/api"; -import SpreadsheetEditor from "../components/spreadsheet-editor"; -import { schedule } from "@ember/runloop"; -import I18n from "I18n"; -import { iconNode } from "discourse-common/lib/icon-library"; -import { create } from "virtual-dom"; -import { ajax } from "discourse/lib/ajax"; -import { popupAjaxError } from "discourse/lib/ajax-error"; -import { parseAsync } from "discourse/lib/text"; -import { tokenRange } from "../../discourse-table-builder/lib/utilities"; - -export default apiInitializer("0.11.1", (api) => { - const modal = api.container.lookup("service:modal"); - - function createButton() { - const openPopupBtn = document.createElement("button"); - openPopupBtn.classList.add( - "open-popup-link", - "btn-default", - "btn", - "btn-icon", - "btn-edit-table", - "no-text" - ); - const editIcon = create( - iconNode("pencil-alt", { class: "edit-table-icon" }) - ); - openPopupBtn.title = I18n.t( - themePrefix("discourse_table_builder.edit.btn_edit") - ); - openPopupBtn.append(editIcon); - return openPopupBtn; - } - - function generateModal() { - const tableIndex = this.tableIndex; - - return ajax(`/posts/${this.id}`, { type: "GET" }) - .then((post) => - parseAsync(post.raw).then((tokens) => { - const allTables = tokenRange(tokens, "table_open", "table_close"); - const tableTokens = allTables[tableIndex]; - - modal.show(SpreadsheetEditor, { - model: { - post, - tableIndex, - tableTokens, - }, - }); - }) - ) - .catch(popupAjaxError); - } - - function generatePopups(tables, attrs) { - tables.forEach((table, index) => { - const popupBtn = createButton(); - table.parentNode.setAttribute("data-table-index", index); - table.parentNode.classList.add("fullscreen-table-wrapper"); - const expandBtn = table.parentNode.querySelector(".open-popup-link"); - - if (table.parentNode.contains(expandBtn)) { - expandBtn.parentNode.insertBefore(popupBtn, expandBtn); - } else { - const buttonWrapper = document.createElement("div"); - buttonWrapper.classList.add("fullscreen-table-wrapper--buttons"); - buttonWrapper.append(popupBtn); - table.parentNode.insertBefore(buttonWrapper, table); - } - - popupBtn.addEventListener( - "click", - generateModal.bind({ tableIndex: index, ...attrs }), - false - ); - }); - } - - function cleanupPopupBtns() { - const popupBtns = document.querySelectorAll("button.open-popup-link"); - popupBtns.forEach((btn) => btn.removeEventListener("click", generateModal)); - } - - api.decorateCookedElement( - (post, helper) => { - const canEdit = helper.widget.attrs.canEdit; - - if (!canEdit) { - return; - } - - schedule("afterRender", () => { - const tables = post.querySelectorAll(".md-table table"); - generatePopups(tables, helper.widget.attrs); - }); - }, - { - onlyStream: true, - id: "edit-table", - } - ); - - api.cleanupStream(cleanupPopupBtns); -}); diff --git a/javascripts/discourse/components/spreadsheet-editor.hbs b/javascripts/discourse/components/spreadsheet-editor.hbs deleted file mode 100644 index cd6866e..0000000 --- a/javascripts/discourse/components/spreadsheet-editor.hbs +++ /dev/null @@ -1,74 +0,0 @@ - - <:body> - -
-
- - - <:footer> -
- - - -
- -
- {{#if this.isEditingTable}} -
- - {{#if this.showEditReason}} - - {{/if}} -
- {{/if}} - -
    -

    {{theme-i18n "discourse_table_builder.modal.help.title"}}

    -
  • - - {{theme-i18n "discourse_table_builder.modal.help.enter_key"}} - - {{theme-i18n "discourse_table_builder.modal.help.new_row"}} -
  • -
  • - - {{theme-i18n "discourse_table_builder.modal.help.tab_key"}} - - {{theme-i18n "discourse_table_builder.modal.help.new_col"}} -
  • -
  • {{theme-i18n "discourse_table_builder.modal.help.options"}}
  • -
-
-
- -
\ No newline at end of file diff --git a/javascripts/discourse/components/spreadsheet-editor.js b/javascripts/discourse/components/spreadsheet-editor.js deleted file mode 100644 index bedf217..0000000 --- a/javascripts/discourse/components/spreadsheet-editor.js +++ /dev/null @@ -1,323 +0,0 @@ -import { action } from "@ember/object"; -import loadScript from "discourse/lib/load-script"; -import { - arrayToTable, - findTableRegex, - tokenRange, -} from "../../discourse-table-builder/lib/utilities"; - -import Component from "@glimmer/component"; -import { ajax } from "discourse/lib/ajax"; -import { popupAjaxError } from "discourse/lib/ajax-error"; -import I18n from "I18n"; -import { schedule } from "@ember/runloop"; -import { tracked } from "@glimmer/tracking"; -import { inject as service } from "@ember/service"; -export default class SpreadsheetEditor extends Component { - @service dialog; - @tracked showEditReason = false; - @tracked loading = null; - - spreadsheet = null; - defaultColWidth = 150; - isEditingTable = !!this.args.model.tableTokens; - - // Getters: - get modalAttributes() { - if (this.isEditingTable) { - return { - title: themePrefix("discourse_table_builder.edit.modal.title"), - insertTable: { - title: themePrefix("discourse_table_builder.edit.modal.create"), - icon: "pencil-alt", - }, - }; - } else { - return { - title: themePrefix("discourse_table_builder.modal.title"), - insertTable: { - title: themePrefix("discourse_table_builder.modal.create"), - icon: "plus", - }, - }; - } - } - - // Actions: - @action - createSpreadsheet(spreadsheet) { - this.spreadsheet = spreadsheet; - - schedule("afterRender", () => { - this.loadLibraries().then(() => { - if (this.isEditingTable) { - this.buildPopulatedTable(this.args.model.tableTokens); - } else { - this.buildNewTable(); - } - }); - }); - } - - @action - showEditReasonField() { - this.showEditReason = !this.showEditReason; - } - - @action - interceptCloseModal() { - if (this._hasChanges()) { - this.dialog.yesNoConfirm({ - message: I18n.t( - themePrefix("discourse_table_builder.modal.confirm_close") - ), - didConfirm: () => this.args.closeModal(), - }); - } else { - this.args.closeModal(); - } - } - - @action - insertTable() { - const updatedHeaders = this.spreadsheet.getHeaders().split(","); // keys - const updatedData = this.spreadsheet.getData(); // values - const markdownTable = this.buildTableMarkdown(updatedHeaders, updatedData); - - if (!this.isEditingTable) { - this.args.model.toolbarEvent.addText(markdownTable); - return this.args.closeModal(); - } else { - return this.updateTable(markdownTable); - } - } - - _hasChanges() { - if (this.isEditingTable) { - const originalSpreadsheetData = this.extractTableContent( - tokenRange(this.args.model.tableTokens, "tr_open", "tr_close") - ); - const currentHeaders = this.spreadsheet.getHeaders().split(","); - const currentRows = this.spreadsheet.getData(); - const currentSpreadsheetData = currentHeaders.concat(currentRows.flat()); - - return ( - JSON.stringify(currentSpreadsheetData) !== - JSON.stringify(originalSpreadsheetData) - ); - } else { - return this.spreadsheet - .getData() - .flat() - .some((element) => element !== ""); - } - } - - // Helper Methods: - loadLibraries() { - this.loading = true; - return loadScript(settings.theme_uploads_local.jsuites) - .then(() => { - return loadScript(settings.theme_uploads_local.jspreadsheet); - }) - .finally(() => (this.loading = false)); - } - - buildNewTable() { - const data = [ - ["", "", ""], - ["", "", ""], - ["", "", ""], - ["", "", ""], - ["", "", ""], - ["", "", ""], - ]; - - const columns = [ - { - title: I18n.t( - themePrefix("discourse_table_builder.default_header.col_1") - ), - width: this.defaultColWidth, - }, - { - title: I18n.t( - themePrefix("discourse_table_builder.default_header.col_2") - ), - width: this.defaultColWidth, - }, - { - title: I18n.t( - themePrefix("discourse_table_builder.default_header.col_3") - ), - width: this.defaultColWidth, - }, - { - title: I18n.t( - themePrefix("discourse_table_builder.default_header.col_4") - ), - width: this.defaultColWidth, - }, - ]; - - return this.buildSpreadsheet(data, columns); - } - - extractTableContent(data) { - return data - .flat() - .filter((t) => t.type === "inline") - .map((t) => t.content); - } - - buildPopulatedTable(tableTokens) { - const contentRows = tokenRange(tableTokens, "tr_open", "tr_close"); - const rows = []; - let headings; - const rowWidthFactor = 8; - - contentRows.forEach((row, index) => { - if (index === 0) { - // headings - headings = this.extractTableContent(row).map((heading) => { - return { - title: heading, - width: Math.max( - heading.length * rowWidthFactor, - this.defaultColWidth - ), - align: "left", - }; - }); - } else { - // rows: - rows.push(this.extractTableContent(row)); - } - }); - - return this.buildSpreadsheet(rows, headings); - } - - buildSpreadsheet(data, columns, opts = {}) { - const postNumber = this.args.model?.post_number; - const exportFileName = postNumber - ? `post-${postNumber}-table-export` - : `post-table-export`; - - // eslint-disable-next-line no-undef - this.spreadsheet = jspreadsheet(this.spreadsheet, { - data, - columns, - defaultColAlign: "left", - wordWrap: true, - csvFileName: exportFileName, - text: this.localeMapping(), - ...opts, - }); - } - - buildUpdatedPost(tableIndex, raw, newRaw) { - const tableToEdit = raw.match(findTableRegex()); - let editedTable; - - if (tableToEdit.length) { - editedTable = raw.replace(tableToEdit[tableIndex], newRaw); - } else { - return raw; - } - - // replace null characters - editedTable = editedTable.replace(/\0/g, "\ufffd"); - return editedTable; - } - - updateTable(markdownTable) { - const tableIndex = this.args.model.tableIndex; - const postId = this.args.model.post.id; - const newRaw = markdownTable; - - const editReason = - this.editReason || - I18n.t(themePrefix("discourse_table_builder.edit.default_edit_reason")); - const raw = this.args.model.post.raw; - const newPostRaw = this.buildUpdatedPost(tableIndex, raw, newRaw); - - return this.sendTableUpdate(postId, newPostRaw, editReason); - } - - sendTableUpdate(postId, raw, edit_reason) { - return ajax(`/posts/${postId}.json`, { - type: "PUT", - data: { - post: { - raw, - edit_reason, - }, - }, - }) - .catch(popupAjaxError) - .finally(() => { - this.args.closeModal(); - }); - } - - buildTableMarkdown(headers, data) { - const table = []; - data.forEach((row) => { - const result = {}; - - headers.forEach((_key, index) => { - const columnKey = `col${index}`; - return (result[columnKey] = row[index]); - }); - table.push(result); - }); - - return arrayToTable(table, headers); - } - - localeMapping() { - return { - noRecordsFound: prefixedLocale("no_records_found"), - show: prefixedLocale("show"), - entries: prefixedLocale("entries"), - insertANewColumnBefore: prefixedLocale("context_menu.col.before"), - insertANewColumnAfter: prefixedLocale("context_menu.col.after"), - deleteSelectedColumns: prefixedLocale("context_menu.col.delete"), - renameThisColumn: prefixedLocale("context_menu.col.rename"), - orderAscending: prefixedLocale("context_menu.order.ascending"), - orderDescending: prefixedLocale("context_menu.order.descending"), - insertANewRowBefore: prefixedLocale("context_menu.row.before"), - insertANewRowAfter: prefixedLocale("context_menu.row.after"), - deleteSelectedRows: prefixedLocale("context_menu.row.delete"), - copy: prefixedLocale("context_menu.copy"), - paste: prefixedLocale("context_menu.paste"), - saveAs: prefixedLocale("context_menu.save"), - about: prefixedLocale("about"), - areYouSureToDeleteTheSelectedRows: prefixedLocale( - "prompts.delete_selected_rows" - ), - areYouSureToDeleteTheSelectedColumns: prefixedLocale( - "prompts.delete_selected_cols" - ), - thisActionWillDestroyAnyExistingMergedCellsAreYouSure: prefixedLocale( - "prompts.will_destroy_merged_cells" - ), - thisActionWillClearYourSearchResultsAreYouSure: prefixedLocale( - "prompts.will_clear_search_results" - ), - thereIsAConflictWithAnotherMergedCell: prefixedLocale( - "prompts.conflict_with_merged_cells" - ), - invalidMergeProperties: prefixedLocale("invalid_merge_props"), - cellAlreadyMerged: prefixedLocale("cells_already_merged"), - noCellsSelected: prefixedLocale("no_cells_selected"), - }; - } -} - -function prefixedLocale(localeString) { - return I18n.t( - themePrefix(`discourse_table_builder.spreadsheet.${localeString}`) - ); -} diff --git a/javascripts/discourse/pre-initializers/add-module-shims.js b/javascripts/discourse/pre-initializers/add-module-shims.js deleted file mode 100644 index 5073a85..0000000 --- a/javascripts/discourse/pre-initializers/add-module-shims.js +++ /dev/null @@ -1,27 +0,0 @@ -// Backwards compatility for core versions before 82b16f4f -// Can be removed once 3.2.0.beta1 is released, and the compat file is updated - -const themeId = themePrefix("foo").match(/theme_translations\.(\d+)\.foo/)[1]; -const base = `discourse/theme-${themeId}`; - -if (!require.entries[`${base}/discourse/components/spreadsheet-editor`]) { - // eslint-disable-next-line no-console - console.warn( - "Running on an old version of core. discourse-table-builder is shimming modules to keep old imports working." - ); - - define( - `discourse/discourse-table-builder/lib/utilities`, - ["exports", `${base}/discourse-table-builder/lib/utilities`], - function (_exports, utilities) { - _exports.tokenRange = utilities.tokenRange; - _exports.arrayToTable = utilities.arrayToTable; - _exports.findTableRegex = utilities.findTableRegex; - } - ); -} - -export default { - name: "add-template-module-shims", - initialize() {}, -}; diff --git a/locales/ar.yml b/locales/ar.yml deleted file mode 100644 index 151eccc..0000000 --- a/locales/ar.yml +++ /dev/null @@ -1,67 +0,0 @@ -# WARNING: Never edit this file. -# It will be overwritten when translations are pulled from Crowdin. -# -# To work with us on translations, join this project: -# https://translate.discourse.org/ - -ar: - discourse_table_builder: - title: "أداة إنشاء الجداول" - composer: - button: "إدراج جدول" - modal: - title: "أداة إنشاء الجداول" - create: "إنشاء جدول" - help: - title: "استخدام محرر جداول البيانات" - enter_key: "Enter" - tab_key: "مفتاح Tab" - new_row: "في نهاية الصف لإدراج صف جديد." - new_col: "في نهاية العمود لإدراج عمود جديد." - options: "انقر بزر الماوس الأيمن على الخلايا للوصول إلى المزيد من الخيارات في القائمة المنسدلة." - edit: - btn_edit: "تعديل الجدول" - modal: - title: "تعديل الجدول" - cancel: "إلغاء" - create: "حفظ" - reason: "ما سبب التعديل؟" - trigger_reason: "أضِف سبب التعديل" - default_edit_reason: "تحديث الجدول باستخدام محرر الجداول" - default_header: - col_1: "العمود 1" - col_2: "العمود 2" - col_3: "العمود 3" - col_4: "العمود 4" - spreadsheet: - no_records_found: "لم يتم العثور على سجلات" - show: "إظهار" - entries: "إدخالات" - about: "نبذة" - prompts: - delete_selected_rows: "هل تريد بالتأكيد حذف الصفوف المحدَّدة؟" - delete_selected_cols: "هل تريد بالتأكيد حذف الأعمدة المحدَّدة؟" - will_destroy_merged_cells: "سيؤدي هذا الإجراء إلى تدمير أي خلايا مدموجة موجودة. هل أنت متأكد؟" - will_clear_search_results: "سيؤدي هذا الإجراء إلى تدمير أي خلايا مدموجة موجودة. هل أنت متأكد؟" - conflicts_with_merged_cells: "هناك تعارض مع خلية مدموجة أخرى" - invalid_merge_props: "خصائص الدمج غير صالحة" - cells_already_merged: "تم دمج الخلية بالفعل" - no_cells_selected: "لم يتم تحديد أي خلايا" - context_menu: - row: - before: "إدراج صف جديد قبله" - after: "إدراج صف جديد بعده" - delete: "حذف الصفوف المحدَّدة" - col: - before: "إدراج عمود جديد قبله" - after: "إدراج عمود جديد بعده" - delete: "حذف الأعمدة المحدَّدة" - rename: "إعادة تسمية هذا العمود" - order: - ascending: "ترتيب تصاعدي" - descending: "ترتيب تنازلي" - copy: "نسخ..." - paste: "لصق..." - save: "الحفظ باسم..." - theme_metadata: - description: "يضيف زرًا إلى أداة الإنشاء لإنشاء الجداول بسهولة بلغة Markdown" diff --git a/locales/be.yml b/locales/be.yml deleted file mode 100644 index 9e64399..0000000 --- a/locales/be.yml +++ /dev/null @@ -1,15 +0,0 @@ -# WARNING: Never edit this file. -# It will be overwritten when translations are pulled from Crowdin. -# -# To work with us on translations, join this project: -# https://translate.discourse.org/ - -be: - discourse_table_builder: - edit: - modal: - cancel: "адмена" - create: "захаваць" - reason: "чаму Вы рэдагуеце паведамленне?" - spreadsheet: - about: "Аб тэме" diff --git a/locales/bg.yml b/locales/bg.yml deleted file mode 100644 index ee50fb5..0000000 --- a/locales/bg.yml +++ /dev/null @@ -1,19 +0,0 @@ -# WARNING: Never edit this file. -# It will be overwritten when translations are pulled from Crowdin. -# -# To work with us on translations, join this project: -# https://translate.discourse.org/ - -bg: - discourse_table_builder: - modal: - help: - enter_key: "Въведете" - edit: - modal: - cancel: "прекрати" - create: "Запази " - reason: "защо редактирате ?" - spreadsheet: - show: "Покажи" - about: "Относно" diff --git a/locales/bs_BA.yml b/locales/bs_BA.yml deleted file mode 100644 index fadf217..0000000 --- a/locales/bs_BA.yml +++ /dev/null @@ -1,19 +0,0 @@ -# WARNING: Never edit this file. -# It will be overwritten when translations are pulled from Crowdin. -# -# To work with us on translations, join this project: -# https://translate.discourse.org/ - -bs_BA: - discourse_table_builder: - modal: - help: - enter_key: "Naprijed" - edit: - modal: - cancel: "otkaži" - create: "Save" - reason: "zašto pravite izmjenu?" - spreadsheet: - show: "Show" - about: "O nama" diff --git a/locales/ca.yml b/locales/ca.yml deleted file mode 100644 index 1b799d0..0000000 --- a/locales/ca.yml +++ /dev/null @@ -1,19 +0,0 @@ -# WARNING: Never edit this file. -# It will be overwritten when translations are pulled from Crowdin. -# -# To work with us on translations, join this project: -# https://translate.discourse.org/ - -ca: - discourse_table_builder: - modal: - help: - enter_key: "Retorn" - edit: - modal: - cancel: "cancel·la" - create: "Desa" - reason: "per què ho editeu?" - spreadsheet: - show: "Mostra" - about: "Quant a" diff --git a/locales/cs.yml b/locales/cs.yml deleted file mode 100644 index e033aef..0000000 --- a/locales/cs.yml +++ /dev/null @@ -1,16 +0,0 @@ -# WARNING: Never edit this file. -# It will be overwritten when translations are pulled from Crowdin. -# -# To work with us on translations, join this project: -# https://translate.discourse.org/ - -cs: - discourse_table_builder: - edit: - modal: - cancel: "zrušit" - create: "Uložit" - reason: "proč byla nutná úprava?" - spreadsheet: - show: "Zobrazit" - about: "O fóru" diff --git a/locales/da.yml b/locales/da.yml deleted file mode 100644 index d05db45..0000000 --- a/locales/da.yml +++ /dev/null @@ -1,19 +0,0 @@ -# WARNING: Never edit this file. -# It will be overwritten when translations are pulled from Crowdin. -# -# To work with us on translations, join this project: -# https://translate.discourse.org/ - -da: - discourse_table_builder: - modal: - help: - enter_key: "Enter" - edit: - modal: - cancel: "annuller" - create: "Gem" - reason: "hvorfor redigerer du?" - spreadsheet: - show: "Vis" - about: "Om" diff --git a/locales/de.yml b/locales/de.yml deleted file mode 100644 index a9b2ff7..0000000 --- a/locales/de.yml +++ /dev/null @@ -1,67 +0,0 @@ -# WARNING: Never edit this file. -# It will be overwritten when translations are pulled from Crowdin. -# -# To work with us on translations, join this project: -# https://translate.discourse.org/ - -de: - discourse_table_builder: - title: "Tabellenersteller" - composer: - button: "Tabelle einfügen" - modal: - title: "Tabellenersteller" - create: "Tabelle erstellen" - help: - title: "Verwendung des Tabellenkalkulationseditors" - enter_key: "Enter" - tab_key: "Tabulatur" - new_row: "am Ende einer Zeile, um eine neue Zeile einzufügen." - new_col: "am Ende einer Spalte, um eine neue Spalte einzufügen." - options: "Klicke mit der rechten Maustaste auf eine Zelle, um weitere Optionen in einem Drop-down-Menü aufzurufen." - edit: - btn_edit: "Tabelle bearbeiten" - modal: - title: "Tabelle bearbeiten" - cancel: "Abbrechen" - create: "Speichern" - reason: "Welchen Grund gibt es für die Bearbeitung?" - trigger_reason: "Grund für die Bearbeitung hinzufügen" - default_edit_reason: "Tabelle per Tabelleneditor aktualisieren" - default_header: - col_1: "Spalte 1" - col_2: "Spalte 2" - col_3: "Spalte 3" - col_4: "Spalte 4" - spreadsheet: - no_records_found: "Keine Datensätze gefunden" - show: "Anzeigen" - entries: "Einträge" - about: "Über" - prompts: - delete_selected_rows: "Bist du sicher, dass du die ausgewählten Zeilen löschen willst?" - delete_selected_cols: "Bist du sicher, dass du die ausgewählten Spalten löschen willst?" - will_destroy_merged_cells: "Durch diese Aktion werden alle vorhandenen zusammengeführten Zellen zerstört. Bist du sicher?" - will_clear_search_results: "Durch diese Aktion werden alle vorhandenen zusammengeführten Zellen zerstört. Bist du sicher?" - conflicts_with_merged_cells: "Es liegt ein Konflikt mit einer anderen zusammengeführten Zelle vor" - invalid_merge_props: "Ungültige zusammengeführte Eigenschaften" - cells_already_merged: "Zelle bereits zusammengeführt" - no_cells_selected: "Keine Zellen ausgewählt" - context_menu: - row: - before: "Davor neue Zeile einfügen" - after: "Danach neue Zeile einfügen" - delete: "Ausgewählte Zeilen löschen" - col: - before: "Davor neue Spalte einfügen" - after: "Danach neue Spalte einfügen" - delete: "Ausgewählte Spalten löschen" - rename: "Diese Spalte umbenennen" - order: - ascending: "Reihenfolge aufsteigend" - descending: "Reihenfolge absteigend" - copy: "Kopieren …" - paste: "Einfügen …" - save: "Speichern als …" - theme_metadata: - description: "Fügt dem Editor eine Schaltfläche hinzu, um einfach Tabellen in Markdown zu erstellen" diff --git a/locales/el.yml b/locales/el.yml deleted file mode 100644 index 3457fab..0000000 --- a/locales/el.yml +++ /dev/null @@ -1,19 +0,0 @@ -# WARNING: Never edit this file. -# It will be overwritten when translations are pulled from Crowdin. -# -# To work with us on translations, join this project: -# https://translate.discourse.org/ - -el: - discourse_table_builder: - modal: - help: - enter_key: "Enter" - edit: - modal: - cancel: "ακύρωση" - create: "Αποθήκευση" - reason: "γιατί αναθεωρείς;" - spreadsheet: - show: "Εμφάνιση" - about: "Σχετικά" diff --git a/locales/en.yml b/locales/en.yml deleted file mode 100644 index 00629de..0000000 --- a/locales/en.yml +++ /dev/null @@ -1,62 +0,0 @@ -en: - discourse_table_builder: - title: "Table Builder" - composer: - button: "Insert Table" - modal: - title: "Table Builder" - create: "Build Table" - help: - title: "Using the Spreadsheet Editor" - enter_key: "Enter" - tab_key: "Tab" - new_row: "at the end of a row to insert a new row." - new_col: "at the end of a column to insert a new column." - options: "Right-click on cells to access more options in a dropdown menu." - confirm_close: "Are you sure you want to close the table builder? Any unsaved changes will be lost." - edit: - btn_edit: "Edit Table" - modal: - title: "Edit Table" - cancel: "cancel" - create: "Save" - reason: "why are you editing?" - trigger_reason: "Add reason for edit" - default_edit_reason: "Update Table with Table Editor" - default_header: - col_1: "Column 1" - col_2: "Column 2" - col_3: "Column 3" - col_4: "Column 4" - spreadsheet: - no_records_found: "No records found" - show: "Show" - entries: "entries" - about: "About" - prompts: - delete_selected_rows: "Are you sure you want to delete the selected rows?" - delete_selected_cols: "Are you sure you want to delete the selected columns?" - will_destroy_merged_cells: "This action will destroy any existing merged cells. Are you sure?" - will_clear_search_results: "This action will destroy any existing merged cells. Are you sure?" - conflicts_with_merged_cells: "There is a conflict with another merged cell" - invalid_merge_props: "Invalid merged properties" - cells_already_merged: "Cell already merged" - no_cells_selected: "No cells selected" - context_menu: - row: - before: "Insert a new row before" - after: "Insert a new row after" - delete: "Delete selected rows" - col: - before: "Insert a new column before" - after: "Insert a new column after" - delete: "Delete selected columns" - rename: "Rename this column" - order: - ascending: "Order ascending" - descending: "Order descending" - copy: "Copy..." - paste: "Paste..." - save: "Save as..." - theme_metadata: - description: "Adds a button to the composer to easily build tables in markdown" diff --git a/locales/en_GB.yml b/locales/en_GB.yml deleted file mode 100644 index 2d4fa18..0000000 --- a/locales/en_GB.yml +++ /dev/null @@ -1,7 +0,0 @@ -# WARNING: Never edit this file. -# It will be overwritten when translations are pulled from Crowdin. -# -# To work with us on translations, join this project: -# https://translate.discourse.org/ - -en_GB: diff --git a/locales/es.yml b/locales/es.yml deleted file mode 100644 index 1110eef..0000000 --- a/locales/es.yml +++ /dev/null @@ -1,67 +0,0 @@ -# WARNING: Never edit this file. -# It will be overwritten when translations are pulled from Crowdin. -# -# To work with us on translations, join this project: -# https://translate.discourse.org/ - -es: - discourse_table_builder: - title: "Creador de tablas" - composer: - button: "Insertar tabla" - modal: - title: "Creador de tablas" - create: "Crear tabla" - help: - title: "Usando el editor de hojas de cálculo" - enter_key: "Intro" - tab_key: "Tabulador" - new_row: "al final de una fila para insertar una nueva fila." - new_col: "al final de una columna para insertar una nueva columna." - options: "Haz clic con el botón derecho en las celdas para acceder a más opciones en un menú desplegable." - edit: - btn_edit: "Editar tabla" - modal: - title: "Editar tabla" - cancel: "cancelar" - create: "Guardar" - reason: "¿Por qué lo estás editando?" - trigger_reason: "Añadir motivo de la edición" - default_edit_reason: "Actualizar tabla con el editor de tablas" - default_header: - col_1: "Columna 1" - col_2: "Columna 2" - col_3: "Columna 3" - col_4: "Columna 4" - spreadsheet: - no_records_found: "No se han encontrado registros" - show: "Mostrar" - entries: "entradas" - about: "Acerca de" - prompts: - delete_selected_rows: "¿Seguro que quieres eliminar las filas seleccionadas?" - delete_selected_cols: "¿Seguro que quieres eliminar las columnas seleccionadas?" - will_destroy_merged_cells: "Esta acción destruirá cualquier celda fusionada existente. ¿Estás seguro/a?" - will_clear_search_results: "Esta acción destruirá cualquier celda fusionada existente. ¿Estás seguro/a?" - conflicts_with_merged_cells: "Hay un conflicto con otra celda fusionada." - invalid_merge_props: "Propiedades fusionadas no válidas" - cells_already_merged: "Celda ya fusionada" - no_cells_selected: "No hay celdas seleccionadas" - context_menu: - row: - before: "Insertar una nueva fila antes" - after: "Insertar una nueva fila después" - delete: "Eliminar filas seleccionadas" - col: - before: "Insertar una nueva columna antes" - after: "Insertar una nueva columna después" - delete: "Eliminar columnas seleccionadas" - rename: "Cambiar el nombre de esta columna" - order: - ascending: "Orden ascendente" - descending: "Orden descendente" - copy: "Copiar..." - paste: "Pegar..." - save: "Guardar como..." - theme_metadata: - description: "Añade un botón al compositor para crear fácilmente tablas en markdown" diff --git a/locales/et.yml b/locales/et.yml deleted file mode 100644 index 20a22a7..0000000 --- a/locales/et.yml +++ /dev/null @@ -1,16 +0,0 @@ -# WARNING: Never edit this file. -# It will be overwritten when translations are pulled from Crowdin. -# -# To work with us on translations, join this project: -# https://translate.discourse.org/ - -et: - discourse_table_builder: - edit: - modal: - cancel: "tühista" - create: "Salvesta" - reason: "miks sa seda muudad?" - spreadsheet: - show: "Näita" - about: "Teave" diff --git a/locales/fa_IR.yml b/locales/fa_IR.yml deleted file mode 100644 index d38f76b..0000000 --- a/locales/fa_IR.yml +++ /dev/null @@ -1,19 +0,0 @@ -# WARNING: Never edit this file. -# It will be overwritten when translations are pulled from Crowdin. -# -# To work with us on translations, join this project: -# https://translate.discourse.org/ - -fa_IR: - discourse_table_builder: - modal: - help: - enter_key: "وارد شدن " - edit: - modal: - cancel: "لغو" - create: "ذخیره کردن" - reason: "چرا ویرایش می‌کنید؟" - spreadsheet: - show: "نشان دادن" - about: "درباره" diff --git a/locales/fi.yml b/locales/fi.yml deleted file mode 100644 index df9e77a..0000000 --- a/locales/fi.yml +++ /dev/null @@ -1,67 +0,0 @@ -# WARNING: Never edit this file. -# It will be overwritten when translations are pulled from Crowdin. -# -# To work with us on translations, join this project: -# https://translate.discourse.org/ - -fi: - discourse_table_builder: - title: "Taulukkotyökalu" - composer: - button: "Lisää taulukko" - modal: - title: "Taulukkotyökalu" - create: "Luo taulukko" - help: - title: "Laskentataulukkoeditorin käyttäminen" - enter_key: "Enter" - tab_key: "Sarkain" - new_row: "rivin lopussa uuden rivin lisäämiseksi." - new_col: "sarakkeen lopussa uuden sarakkeen lisäämiseksi." - options: "Napsauta soluja hiiren kakkospainikkeella nähdäksesi lisää vaihtoehtoja avattavassa valikossa." - edit: - btn_edit: "Muokkaa taulukkoa" - modal: - title: "Muokkaa taulukkoa" - cancel: "peruuta" - create: "Tallenna" - reason: "miksi muokkaat viestiä?" - trigger_reason: "Lisää muokkauksen syy" - default_edit_reason: "Päivitä taulukko taulukkoeditorilla" - default_header: - col_1: "Sarake 1" - col_2: "Sarake 2" - col_3: "Sarake 3" - col_4: "Sarake 4" - spreadsheet: - no_records_found: "Tietueita ei löydy" - show: "Näytä" - entries: "merkintää" - about: "Tietoja" - prompts: - delete_selected_rows: "Oletko varma, että haluat poistaa valitut rivit?" - delete_selected_cols: "Oletko varma, että haluat poistaa valitut sarakkeet?" - will_destroy_merged_cells: "Tämä toiminto tuhoaa olemassa olevat yhdistetyt solut. Oletko varma?" - will_clear_search_results: "Tämä toiminto tuhoaa olemassa olevat yhdistetyt solut. Oletko varma?" - conflicts_with_merged_cells: "Ristiriita toisen yhdistetyn solun kanssa" - invalid_merge_props: "Virheelliset yhdistetyt omaisuudet" - cells_already_merged: "Solu on jo yhdistetty" - no_cells_selected: "Ei valittuja soluja" - context_menu: - row: - before: "Lisää uusi rivi ennen" - after: "Lisää uusi rivi perään" - delete: "Poista valitut rivit" - col: - before: "Lisää uusi sarake ennen" - after: "Lisää uusi sarake perään" - delete: "Poista valitut sarakkeet" - rename: "Nimeä tämä sarake uudelleen" - order: - ascending: "Nouseva järjestys" - descending: "Laskeva järjestys" - copy: "Kopioi..." - paste: "Liitä..." - save: "Tallenna nimellä..." - theme_metadata: - description: "Lisää kirjoitustoimintoon painikkeen, jolla voi luoda taulukoita helposti käyttämällä markdownia" diff --git a/locales/fr.yml b/locales/fr.yml deleted file mode 100644 index 03ee08f..0000000 --- a/locales/fr.yml +++ /dev/null @@ -1,67 +0,0 @@ -# WARNING: Never edit this file. -# It will be overwritten when translations are pulled from Crowdin. -# -# To work with us on translations, join this project: -# https://translate.discourse.org/ - -fr: - discourse_table_builder: - title: "Éditeur de tableaux" - composer: - button: "Insérer un tableau" - modal: - title: "Éditeur de tableaux" - create: "Créer un tableau" - help: - title: "Utiliser l'éditeur de tableaux" - enter_key: "Entrée" - tab_key: "Tabulation" - new_row: "à la fin d'une ligne pour en insérer une nouvelle." - new_col: "à la fin d'une colonne pour en insérer une nouvelle." - options: "Clic droit sur une cellule pour afficher des options contextuelles." - edit: - btn_edit: "Modifier le tableau" - modal: - title: "Modifier le tableau" - cancel: "annuler" - create: "Enregistrer" - reason: "pourquoi modifiez-vous le tableau ?" - trigger_reason: "Ajouter la raison de la modification" - default_edit_reason: "Modifier avec l'éditeur de tableaux" - default_header: - col_1: "Colonne 1" - col_2: "Colonne 2" - col_3: "Colonne 3" - col_4: "Colonne 4" - spreadsheet: - no_records_found: "Aucun enregistrement trouvé" - show: "Afficher" - entries: "entrées" - about: "À propos" - prompts: - delete_selected_rows: "Voulez-vous vraiment supprimer les lignes sélectionnées ?" - delete_selected_cols: "Voulez-vous vraiment supprimer les colonnes sélectionnées ?" - will_destroy_merged_cells: "Cette action détruira toutes les cellules fusionnées existantes. Voulez-vous continuer ?" - will_clear_search_results: "Cette action détruira toutes les cellules fusionnées existantes. Voulez-vous continuer ?" - conflicts_with_merged_cells: "Il y a un conflit avec une autre cellule fusionnée" - invalid_merge_props: "Propriétés fusionnées invalides" - cells_already_merged: "Cellule déjà fusionnée" - no_cells_selected: "Aucune cellule sélectionnée" - context_menu: - row: - before: "Insérer une nouvelle ligne avant" - after: "Insérer une nouvelle ligne après" - delete: "Supprimer les lignes sélectionnées" - col: - before: "Insérer une nouvelle colonne avant" - after: "Insérer une nouvelle colonne après" - delete: "Supprimer les colonnes sélectionnées" - rename: "Renommer cette colonne" - order: - ascending: "Ordre croissant" - descending: "Ordre décroissant" - copy: "Copier..." - paste: "Coller..." - save: "Enregistrer sous..." - theme_metadata: - description: "Ajouter un bouton à l'éditeur pour créer facilement des tableaux en Markdown" diff --git a/locales/gl.yml b/locales/gl.yml deleted file mode 100644 index 8c4320e..0000000 --- a/locales/gl.yml +++ /dev/null @@ -1,19 +0,0 @@ -# WARNING: Never edit this file. -# It will be overwritten when translations are pulled from Crowdin. -# -# To work with us on translations, join this project: -# https://translate.discourse.org/ - -gl: - discourse_table_builder: - modal: - help: - enter_key: "Intro" - edit: - modal: - cancel: "cancelar" - create: "Gardar" - reason: "por que o está editando?" - spreadsheet: - show: "Amosar" - about: "Verbo de" diff --git a/locales/he.yml b/locales/he.yml deleted file mode 100644 index e70b4dd..0000000 --- a/locales/he.yml +++ /dev/null @@ -1,67 +0,0 @@ -# WARNING: Never edit this file. -# It will be overwritten when translations are pulled from Crowdin. -# -# To work with us on translations, join this project: -# https://translate.discourse.org/ - -he: - discourse_table_builder: - title: "בונה טבלאות" - composer: - button: "הוספת טבלה" - modal: - title: "בונה טבלאות" - create: "בניית טבלה" - help: - title: "באמצעות עורך גיליונות הנתונים" - enter_key: "Enter" - tab_key: "Tab" - new_row: "בסוף השורה כדי להוסיף שורה חדשה." - new_col: "בסוף העמודה כדי להוסיף עמודה חדשה." - options: "לחיצה ימנית על תאים מעניקה גישה לאפשרויות נוספות דרך תפריט נפתח." - edit: - btn_edit: "עריכת טבלה" - modal: - title: "עריכת טבלה" - cancel: "ביטול" - create: "שמירה" - reason: "מה סיבת העריכה?" - trigger_reason: "הוספת סיבה לעריכה" - default_edit_reason: "עדכון טבלה עם עורך טבלאות" - default_header: - col_1: "עמודה 1" - col_2: "עמודה 2" - col_3: "עמודה 3" - col_4: "עמודה 4" - spreadsheet: - no_records_found: "לא נמצאו רשומות" - show: "הצגה" - entries: "רשומות" - about: "על אודות" - prompts: - delete_selected_rows: "למחוק את השורות הנבחרות?" - delete_selected_cols: "למחוק את העמודות הנבחרות?" - will_destroy_merged_cells: "פעולה זו תשמיד את התאים הממוזגים באשר הם. להמשיך?" - will_clear_search_results: "פעולה זו תשמיד את התאים הממוזגים באשר הם. להמשיך?" - conflicts_with_merged_cells: "קיימת סתירה עם תא ממוזג אחר" - invalid_merge_props: "מאפיינים ממוזגים שגויים" - cells_already_merged: "התא כבר מוזג" - no_cells_selected: "לא נבחרו תאים" - context_menu: - row: - before: "הוספת שורה חדשה לפני" - after: "הוספת שורה חדשה אחרי" - delete: "מחיקת השורות הנבחרות" - col: - before: "הוספת עמודה חדשה לפני" - after: "הוספת עמודה חדשה אחרי" - delete: "מחיקת העמודות הנבחרות" - rename: "שינוי שם העמודה הזאת" - order: - ascending: "סדר עולה" - descending: "סדר יורד" - copy: "העתקה…" - paste: "הדבקה…" - save: "שמירה בשם…" - theme_metadata: - description: "מוסיף כפתור למחבר ההודעות כדי לבנות טבלאות ב־Markdown בקלות" diff --git a/locales/hr.yml b/locales/hr.yml deleted file mode 100644 index 713adb7..0000000 --- a/locales/hr.yml +++ /dev/null @@ -1,19 +0,0 @@ -# WARNING: Never edit this file. -# It will be overwritten when translations are pulled from Crowdin. -# -# To work with us on translations, join this project: -# https://translate.discourse.org/ - -hr: - discourse_table_builder: - modal: - help: - enter_key: "Unesi" - edit: - modal: - cancel: "otkaži" - create: "Spremi" - reason: "zašto izmjenjujete?" - spreadsheet: - show: "Pokaži" - about: "O nama" diff --git a/locales/hu.yml b/locales/hu.yml deleted file mode 100644 index 572a84d..0000000 --- a/locales/hu.yml +++ /dev/null @@ -1,19 +0,0 @@ -# WARNING: Never edit this file. -# It will be overwritten when translations are pulled from Crowdin. -# -# To work with us on translations, join this project: -# https://translate.discourse.org/ - -hu: - discourse_table_builder: - modal: - help: - enter_key: "Enter" - edit: - modal: - cancel: "mégse" - create: "Mentés" - reason: "miért szerkeszt?" - spreadsheet: - show: "Megjelenítés" - about: "Névjegy" diff --git a/locales/hy.yml b/locales/hy.yml deleted file mode 100644 index f7b5708..0000000 --- a/locales/hy.yml +++ /dev/null @@ -1,19 +0,0 @@ -# WARNING: Never edit this file. -# It will be overwritten when translations are pulled from Crowdin. -# -# To work with us on translations, join this project: -# https://translate.discourse.org/ - -hy: - discourse_table_builder: - modal: - help: - enter_key: "Մուտք" - edit: - modal: - cancel: "չեղարկել" - create: "Պահպանել" - reason: "Ո՞րն է խմբագրման պատճառը:" - spreadsheet: - show: "Ցուցադրել" - about: "Մասին" diff --git a/locales/id.yml b/locales/id.yml deleted file mode 100644 index e194dbd..0000000 --- a/locales/id.yml +++ /dev/null @@ -1,19 +0,0 @@ -# WARNING: Never edit this file. -# It will be overwritten when translations are pulled from Crowdin. -# -# To work with us on translations, join this project: -# https://translate.discourse.org/ - -id: - discourse_table_builder: - modal: - help: - enter_key: "Enter" - edit: - modal: - cancel: "batal" - create: "Simpan" - reason: "mengapa Anda menyunting?" - spreadsheet: - show: "Tunjukkan" - about: "Tentang" diff --git a/locales/it.yml b/locales/it.yml deleted file mode 100644 index b7f0a42..0000000 --- a/locales/it.yml +++ /dev/null @@ -1,67 +0,0 @@ -# WARNING: Never edit this file. -# It will be overwritten when translations are pulled from Crowdin. -# -# To work with us on translations, join this project: -# https://translate.discourse.org/ - -it: - discourse_table_builder: - title: "Costruttore di tabelle" - composer: - button: "Inserisci tabella" - modal: - title: "Costruttore di tabelle" - create: "Costruisci tabella" - help: - title: "Utilizzo dell'editor di fogli di calcolo" - enter_key: "Invio" - tab_key: "Tab" - new_row: "alla fine di una riga per inserire una nuova riga." - new_col: "alla fine di una colonna per inserire una nuova colonna." - options: "Fai clic con il tasto destro sulle celle per accedere a più opzioni in un menu a discesa." - edit: - btn_edit: "Modifica tabella" - modal: - title: "Modifica tabella" - cancel: "annulla" - create: "Salva" - reason: "perché stai modificando?" - trigger_reason: "Aggiungi il motivo della modifica" - default_edit_reason: "Aggiorna tabella con l'editor di tabelle" - default_header: - col_1: "Colonna 1" - col_2: "Colonna 2" - col_3: "Colonna 3" - col_4: "Colonna 4" - spreadsheet: - no_records_found: "Nessun record trovato" - show: "Mostra" - entries: "voci" - about: "Informazioni" - prompts: - delete_selected_rows: "Vuoi davvero eliminare le righe selezionate?" - delete_selected_cols: "Vuoi davvero eliminare le colonne selezionate?" - will_destroy_merged_cells: "Questa azione eliminerà tutte le celle unite esistenti. Continuare?" - will_clear_search_results: "Questa azione eliminerà tutte le celle unite esistenti. Continuare?" - conflicts_with_merged_cells: "C'è un conflitto con un'altra cella unita" - invalid_merge_props: "Proprietà unite non valide" - cells_already_merged: "Cella già unita" - no_cells_selected: "Nessuna cella selezionata" - context_menu: - row: - before: "Inserisci una nuova riga prima" - after: "Inserisci una nuova riga dopo" - delete: "Elimina le righe selezionate" - col: - before: "Inserisci una nuova colonna prima" - after: "Inserisci una nuova colonna dopo" - delete: "Elimina le colonne selezionate" - rename: "Rinomina questa colonna" - order: - ascending: "Ordine crescente" - descending: "Ordine decrescente" - copy: "Copia..." - paste: "Incolla..." - save: "Salva come..." - theme_metadata: - description: "Aggiungi un pulsante all'editor per creare facilmente tabelle in markdown" diff --git a/locales/ja.yml b/locales/ja.yml deleted file mode 100644 index 45463f2..0000000 --- a/locales/ja.yml +++ /dev/null @@ -1,67 +0,0 @@ -# WARNING: Never edit this file. -# It will be overwritten when translations are pulled from Crowdin. -# -# To work with us on translations, join this project: -# https://translate.discourse.org/ - -ja: - discourse_table_builder: - title: "テーブル作成ツール" - composer: - button: "テーブルを挿入" - modal: - title: "テーブル作成ツール" - create: "テーブルを作成" - help: - title: "表計算シート作成ツールの使用" - enter_key: "Enter" - tab_key: "タブ" - new_row: "を行の末尾に使用して、新しい行を挿入します。" - new_col: "を列の末尾に使用して、新しい列を挿入します。" - options: "セルを右クリックすると、ドロップダウンメニューのその他のオプションにアクセスできます。" - edit: - btn_edit: "テーブルを編集" - modal: - title: "テーブルの編集" - cancel: "キャンセル" - create: "保存" - reason: "編集する理由は?" - trigger_reason: "編集理由を追加してください" - default_edit_reason: "テーブル作成ツールでテーブルを更新" - default_header: - col_1: "列 1" - col_2: "列 2" - col_3: "列 3" - col_4: "列 4" - spreadsheet: - no_records_found: "レコードが見つかりません" - show: "表示" - entries: "エントリー" - about: "情報" - prompts: - delete_selected_rows: "選択された行を削除してもよろしいですか?" - delete_selected_cols: "選択された列を削除してもよろしいですか?" - will_destroy_merged_cells: "この操作によって結合された既存の説がすべて破棄されます。よろしいですか?" - will_clear_search_results: "この操作によって結合された既存のセルがすべて破棄されます。よろしいですか?" - conflicts_with_merged_cells: "他の結合セルと競合しています" - invalid_merge_props: "結合されたプロパティが無効です" - cells_already_merged: "セルはすでに結合済みです" - no_cells_selected: "セルが選択されていません" - context_menu: - row: - before: "前に新しい行を挿入" - after: "後に新しい行を挿入" - delete: "選択行を削除" - col: - before: "前に新しい列を挿入" - after: "後に新しい列を挿入" - delete: "選択列を削除" - rename: "この列の名前を変更" - order: - ascending: "昇順で並べ替え" - descending: "降順で並べ替え" - copy: "コピー..." - paste: "貼り付け..." - save: "名前を付けて保存..." - theme_metadata: - description: "マークダウンで簡単にテーブルを作成するためのボタンを作成ツールに追加します" diff --git a/locales/ko.yml b/locales/ko.yml deleted file mode 100644 index a60de20..0000000 --- a/locales/ko.yml +++ /dev/null @@ -1,19 +0,0 @@ -# WARNING: Never edit this file. -# It will be overwritten when translations are pulled from Crowdin. -# -# To work with us on translations, join this project: -# https://translate.discourse.org/ - -ko: - discourse_table_builder: - modal: - help: - enter_key: "시작하다" - edit: - modal: - cancel: "취소" - create: "저장하기" - reason: "왜 편집 중입니까?" - spreadsheet: - show: "보기" - about: "소개" diff --git a/locales/lt.yml b/locales/lt.yml deleted file mode 100644 index 8d5c610..0000000 --- a/locales/lt.yml +++ /dev/null @@ -1,19 +0,0 @@ -# WARNING: Never edit this file. -# It will be overwritten when translations are pulled from Crowdin. -# -# To work with us on translations, join this project: -# https://translate.discourse.org/ - -lt: - discourse_table_builder: - modal: - help: - enter_key: "Įeiti" - edit: - modal: - cancel: "atšaukti" - create: "Išsaugoti" - reason: "kodėl jūs redaguojate?" - spreadsheet: - show: "Rodyti" - about: "Apie" diff --git a/locales/lv.yml b/locales/lv.yml deleted file mode 100644 index 40f7793..0000000 --- a/locales/lv.yml +++ /dev/null @@ -1,19 +0,0 @@ -# WARNING: Never edit this file. -# It will be overwritten when translations are pulled from Crowdin. -# -# To work with us on translations, join this project: -# https://translate.discourse.org/ - -lv: - discourse_table_builder: - modal: - help: - enter_key: "Ievadīt" - edit: - modal: - cancel: "atcelt" - create: "Saglabāt" - reason: "kāpēc jūs rediģējat?" - spreadsheet: - show: "Parādīt" - about: "Par" diff --git a/locales/nb_NO.yml b/locales/nb_NO.yml deleted file mode 100644 index 49d7a76..0000000 --- a/locales/nb_NO.yml +++ /dev/null @@ -1,19 +0,0 @@ -# WARNING: Never edit this file. -# It will be overwritten when translations are pulled from Crowdin. -# -# To work with us on translations, join this project: -# https://translate.discourse.org/ - -nb_NO: - discourse_table_builder: - modal: - help: - enter_key: "Angi" - edit: - modal: - cancel: "avbryt" - create: "Lagre" - reason: "hvorfor endrer du?" - spreadsheet: - show: "Vis" - about: "Om" diff --git a/locales/nl.yml b/locales/nl.yml deleted file mode 100644 index 677c8c0..0000000 --- a/locales/nl.yml +++ /dev/null @@ -1,67 +0,0 @@ -# WARNING: Never edit this file. -# It will be overwritten when translations are pulled from Crowdin. -# -# To work with us on translations, join this project: -# https://translate.discourse.org/ - -nl: - discourse_table_builder: - title: "Tabelbouwer" - composer: - button: "Tabel invoegen" - modal: - title: "Tabelbouwer" - create: "Tabel bouwen" - help: - title: "Gebruik van de spreadsheeteditor" - enter_key: "Enter" - tab_key: "Tab" - new_row: "aan het einde van een rij om een nieuwe rij in te voegen." - new_col: "aan het einde van een kolom om een nieuwe kolom in te voegen." - options: "Rechtsklik op cellen voor meer opties in een vervolgkeuzemenu." - edit: - btn_edit: "Tabel bewerken" - modal: - title: "Tabel bewerken" - cancel: "annuleren" - create: "Opslaan" - reason: "waarom bewerk je?" - trigger_reason: "Reden voor bewerking toevoegen" - default_edit_reason: "Tabel bijwerken met tabeleditor" - default_header: - col_1: "Kolom 1" - col_2: "Kolom 2" - col_3: "Kolom 3" - col_4: "Kolom 4" - spreadsheet: - no_records_found: "Geen records gevonden" - show: "Weergeven" - entries: "vermeldingen" - about: "Over" - prompts: - delete_selected_rows: "Weet je zeker dat je de geselecteerde rijen wilt verwijderen?" - delete_selected_cols: "Weet je zeker dat je de geselecteerde kolommen wilt verwijderen?" - will_destroy_merged_cells: "Hierdoor worden alle bestaande samengevoegde cellen vernietigd. Weet je het zeker?" - will_clear_search_results: "Hierdoor worden alle bestaande samengevoegde cellen vernietigd. Weet je het zeker?" - conflicts_with_merged_cells: "Er is een conflict met een andere samengevoegde cel" - invalid_merge_props: "Ongeldige samengevoegde eigenschappen" - cells_already_merged: "Cel is al samengevoegd" - no_cells_selected: "Geen cellen geselecteerd" - context_menu: - row: - before: "Nieuwe rij invoegen voor" - after: "Nieuwe rij invoegen na" - delete: "Geselecteerde rijen verwijderen" - col: - before: "Nieuwe kolom invoegen voor" - after: "Nieuwe kolom invoegen na" - delete: "Geselecteerde kolommen verwijderen" - rename: "Deze kolom hernoemen" - order: - ascending: "Oplopend sorteren" - descending: "Aflopend sorteren" - copy: "Kopiëren..." - paste: "Plakken..." - save: "Opslaan als..." - theme_metadata: - description: "Voegt een knop toe aan de editor om eenvoudig tabellen te bouwen met markdown" diff --git a/locales/pl_PL.yml b/locales/pl_PL.yml deleted file mode 100644 index 179318f..0000000 --- a/locales/pl_PL.yml +++ /dev/null @@ -1,67 +0,0 @@ -# WARNING: Never edit this file. -# It will be overwritten when translations are pulled from Crowdin. -# -# To work with us on translations, join this project: -# https://translate.discourse.org/ - -pl_PL: - discourse_table_builder: - title: "Konstruktor tabeli" - composer: - button: "Wstaw tabelę" - modal: - title: "Konstruktor tabeli" - create: "Zbuduj tabelę" - help: - title: "Za pomocą edytora arkusza kalkulacyjnego" - enter_key: "Enter" - tab_key: "Tab" - new_row: "na końcu wiersza, aby wstawić nowy wiersz." - new_col: "na końcu kolumny, aby wstawić nową kolumnę." - options: "Kliknij komórki prawym przyciskiem myszy, aby uzyskać dostęp do większej liczby opcji w menu rozwijanym." - edit: - btn_edit: "Edytuj tabelę" - modal: - title: "Edytuj tabelę" - cancel: "anuluj" - create: "Zapisz" - reason: "dlaczego edytujesz?" - trigger_reason: "Dodaj powód edycji" - default_edit_reason: "Zaktualizuj tabelę za pomocą edytora tabel" - default_header: - col_1: "Kolumna 1" - col_2: "Kolumna 2" - col_3: "Kolumna 3" - col_4: "Kolumna 4" - spreadsheet: - no_records_found: "Nie znaleziono rekordów" - show: "Pokaż" - entries: "elementy" - about: "O stronie" - prompts: - delete_selected_rows: "Czy na pewno chcesz usunąć wybrane wiersze?" - delete_selected_cols: "Czy na pewno chcesz usunąć wybrane kolumny?" - will_destroy_merged_cells: "Ta czynność zniszczy wszystkie istniejące scalone komórki. Jesteś pewien?" - will_clear_search_results: "Ta czynność zniszczy wszystkie istniejące scalone komórki. Jesteś pewien?" - conflicts_with_merged_cells: "Występuje konflikt z inną scaloną komórką" - invalid_merge_props: "Nieprawidłowe scalone właściwości" - cells_already_merged: "Komórka już scalona" - no_cells_selected: "Nie wybrano komórek" - context_menu: - row: - before: "Wstaw nowy wiersz przed" - after: "Wstaw nowy wiersz po" - delete: "Usuń wybrane wiersze" - col: - before: "Wstaw nową kolumnę przed" - after: "Wstaw nową kolumnę po" - delete: "Usuń wybrane kolumny" - rename: "Zmień nazwę tej kolumny" - order: - ascending: "Kolejność rosnąca" - descending: "Kolejność malejąca" - copy: "Kopiuj..." - paste: "Wklej..." - save: "Zapisz jako..." - theme_metadata: - description: "Dodaje przycisk do edytora, aby łatwo tworzyć tabele w markdown." diff --git a/locales/pt.yml b/locales/pt.yml deleted file mode 100644 index 682b536..0000000 --- a/locales/pt.yml +++ /dev/null @@ -1,19 +0,0 @@ -# WARNING: Never edit this file. -# It will be overwritten when translations are pulled from Crowdin. -# -# To work with us on translations, join this project: -# https://translate.discourse.org/ - -pt: - discourse_table_builder: - modal: - help: - enter_key: "Entrar" - edit: - modal: - cancel: "cancelar" - create: "Guardar" - reason: "Porque está a editar?" - spreadsheet: - show: "Mostrar" - about: "Sobre" diff --git a/locales/pt_BR.yml b/locales/pt_BR.yml deleted file mode 100644 index 6886f87..0000000 --- a/locales/pt_BR.yml +++ /dev/null @@ -1,67 +0,0 @@ -# WARNING: Never edit this file. -# It will be overwritten when translations are pulled from Crowdin. -# -# To work with us on translations, join this project: -# https://translate.discourse.org/ - -pt_BR: - discourse_table_builder: - title: "Compilador de tabela" - composer: - button: "Inserir tabela" - modal: - title: "Compilador de tabela" - create: "Compilar tabela" - help: - title: "Usando editor de planilha" - enter_key: "Enter" - tab_key: "Aba" - new_row: "no fim da linha para inserir uma nova linha." - new_col: "no fim da coluna para inserir uma nova coluna." - options: "Clique com o botão direito nas células para acessar mais opções no menu suspenso." - edit: - btn_edit: "Editar tabela" - modal: - title: "Editar tabela" - cancel: "cancelar" - create: "Salvar" - reason: "por que você está editando?" - trigger_reason: "Adicionar motivo para edição" - default_edit_reason: "Atualizar tabela com o editor de tabela" - default_header: - col_1: "Coluna 1" - col_2: "Coluna 2" - col_3: "Coluna 3" - col_4: "Coluna 4" - spreadsheet: - no_records_found: "Nenhum registro encontrado" - show: "Exibir" - entries: "entradas" - about: "Sobre" - prompts: - delete_selected_rows: "Tem certeza de que deseja excluir as linhas selecionadas?" - delete_selected_cols: "Tem certeza de que deseja excluir as colunas selecionadas?" - will_destroy_merged_cells: "Esta ação irá desfazer as células mescladas existentes. Tem certeza?" - will_clear_search_results: "Esta ação irá desfazer as células mescladas existentes. Tem certeza?" - conflicts_with_merged_cells: "Há um conflito com outra célula mesclada" - invalid_merge_props: "Propriedades mescladas inválidas" - cells_already_merged: "Células já mescladas" - no_cells_selected: "Nenhuma célula selecionada" - context_menu: - row: - before: "Inserir nova linha antes" - after: "Inserir nova linha depois" - delete: "Excluir linhas selecionadas" - col: - before: "Inserir nova coluna antes" - after: "Inserir nova coluna depois" - delete: "Excluir colunas selecionadas" - rename: "Renomear esta coluna" - order: - ascending: "Ordem crescente" - descending: "Ordem decrescente" - copy: "Copiar..." - paste: "Colar..." - save: "Salvar como..." - theme_metadata: - description: "Adiciona um botão ao compositor para construir tabelas facilmente no Markdown" diff --git a/locales/ro.yml b/locales/ro.yml deleted file mode 100644 index c38471b..0000000 --- a/locales/ro.yml +++ /dev/null @@ -1,16 +0,0 @@ -# WARNING: Never edit this file. -# It will be overwritten when translations are pulled from Crowdin. -# -# To work with us on translations, join this project: -# https://translate.discourse.org/ - -ro: - discourse_table_builder: - edit: - modal: - cancel: "Anulează" - create: "Salvare" - reason: "de ce editezi?" - spreadsheet: - show: "Arată" - about: "Despre" diff --git a/locales/ru.yml b/locales/ru.yml deleted file mode 100644 index c8a9209..0000000 --- a/locales/ru.yml +++ /dev/null @@ -1,67 +0,0 @@ -# WARNING: Never edit this file. -# It will be overwritten when translations are pulled from Crowdin. -# -# To work with us on translations, join this project: -# https://translate.discourse.org/ - -ru: - discourse_table_builder: - title: "Конструктор таблиц" - composer: - button: "Вставить таблицу" - modal: - title: "Конструктор таблиц" - create: "Создать таблицу" - help: - title: "Использование редактора электронных таблиц" - enter_key: "Enter" - tab_key: "Tab" - new_row: "в конце строки — вставить новую строку." - new_col: "в конце столбца — вставить новый столбец." - options: "Клик правой кнопкой мыши на ячейке — дополнительные варианты во всплывающем меню." - edit: - btn_edit: "Редактировать таблицу" - modal: - title: "Редактирование таблицы" - cancel: "отмена" - create: "Сохранить" - reason: "По какой причине производится редактирование?" - trigger_reason: "Добавьте причину редактирования" - default_edit_reason: "Обновление таблицы с помощью редактора таблиц" - default_header: - col_1: "Столбец 1" - col_2: "Столбец 2" - col_3: "Столбец 3" - col_4: "Столбец 4" - spreadsheet: - no_records_found: "Записей не найдено" - show: "Показать" - entries: "записи" - about: "Информация" - prompts: - delete_selected_rows: "Действительно удалить выбранные строки?" - delete_selected_cols: "Действительно удалить выбранные столбцы?" - will_destroy_merged_cells: "Будут удалены все существующие объединенные ячейки. Выполнить действие?" - will_clear_search_results: "Будут удалены все существующие объединенные ячейки. Выполнить действие?" - conflicts_with_merged_cells: "Возник конфликт с другой объединенной ячейкой" - invalid_merge_props: "Недопустимые объединенные свойства" - cells_already_merged: "Ячейка уже объединена" - no_cells_selected: "Ячейки не выбраны" - context_menu: - row: - before: "Вставить новую строку выше" - after: "Вставить новую строку ниже" - delete: "Удалить выбранные строки" - col: - before: "Вставить новый столбец слева" - after: "Вставить новый столбец справа" - delete: "Удалить выбранные столбцы" - rename: "Переименовать столбец" - order: - ascending: "Упорядочить по возрастанию" - descending: "Упорядочить по убыванию" - copy: "Копировать..." - paste: "Вставить..." - save: "Сохранить как..." - theme_metadata: - description: "Добавление кнопки в окно редактора для быстрого создания таблиц" diff --git a/locales/sk.yml b/locales/sk.yml deleted file mode 100644 index 75cdf08..0000000 --- a/locales/sk.yml +++ /dev/null @@ -1,16 +0,0 @@ -# WARNING: Never edit this file. -# It will be overwritten when translations are pulled from Crowdin. -# -# To work with us on translations, join this project: -# https://translate.discourse.org/ - -sk: - discourse_table_builder: - edit: - modal: - cancel: "zrušiť" - create: "Uložiť" - reason: "prečo upravujete?" - spreadsheet: - show: "Zobraziť" - about: "O stránke" diff --git a/locales/sl.yml b/locales/sl.yml deleted file mode 100644 index ca54ae0..0000000 --- a/locales/sl.yml +++ /dev/null @@ -1,19 +0,0 @@ -# WARNING: Never edit this file. -# It will be overwritten when translations are pulled from Crowdin. -# -# To work with us on translations, join this project: -# https://translate.discourse.org/ - -sl: - discourse_table_builder: - modal: - help: - enter_key: "Enter" - edit: - modal: - cancel: "prekliči" - create: "Shrani" - reason: "zakaj spreminjate prispevek?" - spreadsheet: - show: "Prikaži" - about: "O nas" diff --git a/locales/sq.yml b/locales/sq.yml deleted file mode 100644 index 4d5dd84..0000000 --- a/locales/sq.yml +++ /dev/null @@ -1,16 +0,0 @@ -# WARNING: Never edit this file. -# It will be overwritten when translations are pulled from Crowdin. -# -# To work with us on translations, join this project: -# https://translate.discourse.org/ - -sq: - discourse_table_builder: - edit: - modal: - cancel: "anulo" - create: "Ruaj" - reason: "pse jeni duke e redaktuar?" - spreadsheet: - show: "Shfaq" - about: "Rreth" diff --git a/locales/sr.yml b/locales/sr.yml deleted file mode 100644 index 6222158..0000000 --- a/locales/sr.yml +++ /dev/null @@ -1,16 +0,0 @@ -# WARNING: Never edit this file. -# It will be overwritten when translations are pulled from Crowdin. -# -# To work with us on translations, join this project: -# https://translate.discourse.org/ - -sr: - discourse_table_builder: - edit: - modal: - cancel: "otkaži" - create: "Sačuvaj" - reason: "zašto izmenjujete?" - spreadsheet: - show: "Pokaži" - about: "O nama" diff --git a/locales/sv.yml b/locales/sv.yml deleted file mode 100644 index 7703c74..0000000 --- a/locales/sv.yml +++ /dev/null @@ -1,19 +0,0 @@ -# WARNING: Never edit this file. -# It will be overwritten when translations are pulled from Crowdin. -# -# To work with us on translations, join this project: -# https://translate.discourse.org/ - -sv: - discourse_table_builder: - modal: - help: - enter_key: "Retur" - edit: - modal: - cancel: "avbryt" - create: "Spara" - reason: "varför redigerar du?" - spreadsheet: - show: "Visa" - about: "Om" diff --git a/locales/sw.yml b/locales/sw.yml deleted file mode 100644 index 2b3ee62..0000000 --- a/locales/sw.yml +++ /dev/null @@ -1,16 +0,0 @@ -# WARNING: Never edit this file. -# It will be overwritten when translations are pulled from Crowdin. -# -# To work with us on translations, join this project: -# https://translate.discourse.org/ - -sw: - discourse_table_builder: - edit: - modal: - cancel: "ghairi" - create: "Hifadhi" - reason: "kwa nini unahariri?" - spreadsheet: - show: "Onyesha" - about: "Kuhusu" diff --git a/locales/te.yml b/locales/te.yml deleted file mode 100644 index fb87676..0000000 --- a/locales/te.yml +++ /dev/null @@ -1,16 +0,0 @@ -# WARNING: Never edit this file. -# It will be overwritten when translations are pulled from Crowdin. -# -# To work with us on translations, join this project: -# https://translate.discourse.org/ - -te: - discourse_table_builder: - edit: - modal: - cancel: "రద్దు" - create: "భద్రపరుచు" - reason: "మీరెందుకు సవరిస్తున్నారు?" - spreadsheet: - show: "చూపు" - about: "గురించి" diff --git a/locales/th.yml b/locales/th.yml deleted file mode 100644 index db9a84e..0000000 --- a/locales/th.yml +++ /dev/null @@ -1,19 +0,0 @@ -# WARNING: Never edit this file. -# It will be overwritten when translations are pulled from Crowdin. -# -# To work with us on translations, join this project: -# https://translate.discourse.org/ - -th: - discourse_table_builder: - modal: - help: - enter_key: "เอ็นเทอร์" - edit: - modal: - cancel: "ยกเลิก" - create: "บันทึก" - reason: "ทำไมคุณถึงแก้ไข" - spreadsheet: - show: "แสดง" - about: "เกี่ยวกับ" diff --git a/locales/tr_TR.yml b/locales/tr_TR.yml deleted file mode 100644 index 06cd54d..0000000 --- a/locales/tr_TR.yml +++ /dev/null @@ -1,67 +0,0 @@ -# WARNING: Never edit this file. -# It will be overwritten when translations are pulled from Crowdin. -# -# To work with us on translations, join this project: -# https://translate.discourse.org/ - -tr_TR: - discourse_table_builder: - title: "Tablo Oluşturucu" - composer: - button: "Tablo ekle" - modal: - title: "Tablo Oluşturucu" - create: "Tablo oluştur" - help: - title: "Elektronik Tablo Düzenleyiciyi kullanma" - enter_key: "Enter" - tab_key: "Sekme" - new_row: "yeni bir satır eklemek için bir satırın sonuna." - new_col: "yeni bir sütun eklemek için bir sütunun sonuna." - options: "Açılır menüde daha fazla seçeneğe erişmek için hücrelere sağ tıklayın." - edit: - btn_edit: "Tabloyu düzenle" - modal: - title: "Tabloyu düzenle" - cancel: "iptal et" - create: "Kaydet" - reason: "neden düzenleme yapıyorsunuz?" - trigger_reason: "Düzenleme nedeni ekleyin" - default_edit_reason: "Tablo Düzenleyiciyle Tabloyu güncelle" - default_header: - col_1: "Sütun 1" - col_2: "Sütun 2" - col_3: "Sütun 3" - col_4: "Sütun 4" - spreadsheet: - no_records_found: "Kayıt bulunamadı" - show: "Göster" - entries: "girdiler" - about: "Hakkında" - prompts: - delete_selected_rows: "Seçili satırları silmek istediğinizden emin misiniz?" - delete_selected_cols: "Seçili sütunları silmek istediğinizden emin misiniz?" - will_destroy_merged_cells: "Bu eylem mevcut birleştirilmiş hücreleri yok edecek. Emin misiniz?" - will_clear_search_results: "Bu eylem mevcut birleştirilmiş hücreleri yok edecek. Emin misiniz?" - conflicts_with_merged_cells: "Birleştirilmiş başka bir hücre ile çakışma var" - invalid_merge_props: "Geçersiz birleştirilmiş özellikler" - cells_already_merged: "Hücre zaten birleştirildi" - no_cells_selected: "Hücre seçilmedi" - context_menu: - row: - before: "Öncesine yeni bir satır ekle" - after: "Sonrasına yeni bir satır ekle" - delete: "Seçili satırları sil" - col: - before: "Öncesine yeni bir sütun ekle" - after: "Sonrasına yeni bir sütun ekle" - delete: "Seçili sütunları sil" - rename: "Bu sütunu yeniden adlandırın" - order: - ascending: "Artan sıralama" - descending: "Azalan sıralama" - copy: "Kopyala..." - paste: "Yapıştır..." - save: "Farklı kaydet..." - theme_metadata: - description: "Markdown'da tabloları kolayca oluşturmak için besteciye bir düğme ekler" diff --git a/locales/uk.yml b/locales/uk.yml deleted file mode 100644 index b91f040..0000000 --- a/locales/uk.yml +++ /dev/null @@ -1,19 +0,0 @@ -# WARNING: Never edit this file. -# It will be overwritten when translations are pulled from Crowdin. -# -# To work with us on translations, join this project: -# https://translate.discourse.org/ - -uk: - discourse_table_builder: - modal: - help: - enter_key: "Enter" - edit: - modal: - cancel: "скасувати" - create: "Зберегти" - reason: "чому ви редагуєте допис?" - spreadsheet: - show: "Показати" - about: "Про" diff --git a/locales/ur.yml b/locales/ur.yml deleted file mode 100644 index 7c4ef89..0000000 --- a/locales/ur.yml +++ /dev/null @@ -1,19 +0,0 @@ -# WARNING: Never edit this file. -# It will be overwritten when translations are pulled from Crowdin. -# -# To work with us on translations, join this project: -# https://translate.discourse.org/ - -ur: - discourse_table_builder: - modal: - help: - enter_key: "اَینٹر" - edit: - modal: - cancel: "منسوخ" - create: "محفوظ کریں" - reason: "آپ ترمیم کیوں کر رہے ہیں؟" - spreadsheet: - show: "دکھائیں" - about: "بارے میں" diff --git a/locales/vi.yml b/locales/vi.yml deleted file mode 100644 index 9b9271e..0000000 --- a/locales/vi.yml +++ /dev/null @@ -1,19 +0,0 @@ -# WARNING: Never edit this file. -# It will be overwritten when translations are pulled from Crowdin. -# -# To work with us on translations, join this project: -# https://translate.discourse.org/ - -vi: - discourse_table_builder: - modal: - help: - enter_key: "Nhập" - edit: - modal: - cancel: "hủy" - create: "Lưu lại" - reason: "Tại sao bạn sửa" - spreadsheet: - show: "Hiển thị" - about: "Giới thiệu" diff --git a/locales/zh_CN.yml b/locales/zh_CN.yml deleted file mode 100644 index d80c858..0000000 --- a/locales/zh_CN.yml +++ /dev/null @@ -1,67 +0,0 @@ -# WARNING: Never edit this file. -# It will be overwritten when translations are pulled from Crowdin. -# -# To work with us on translations, join this project: -# https://translate.discourse.org/ - -zh_CN: - discourse_table_builder: - title: "表生成器" - composer: - button: "插入表" - modal: - title: "表生成器" - create: "创建表" - help: - title: "使用电子表格编辑器" - enter_key: "Enter" - tab_key: "Tab" - new_row: "在行末尾插入新行。" - new_col: "在列末尾插入新列。" - options: "右键点击单元格可访问下拉菜单中的更多选项。" - edit: - btn_edit: "编辑表" - modal: - title: "编辑表" - cancel: "取消" - create: "保存" - reason: "为何进行这次编辑?" - trigger_reason: "添加编辑原因" - default_edit_reason: "使用表编辑器更新表" - default_header: - col_1: "第 1 列" - col_2: "第 2 列" - col_3: "第 3 列" - col_4: "第 4 列" - spreadsheet: - no_records_found: "找不到记录" - show: "显示" - entries: "个条目" - about: "关于" - prompts: - delete_selected_rows: "确定要删除所选行吗?" - delete_selected_cols: "确定要删除所选列吗?" - will_destroy_merged_cells: "此操作将破坏任何现有的合并单元格。确定吗?" - will_clear_search_results: "此操作将破坏任何现有的合并单元格。确定吗?" - conflicts_with_merged_cells: "与另一合并单元格存在冲突" - invalid_merge_props: "合并属性无效" - cells_already_merged: "单元格已合并" - no_cells_selected: "未选择单元格" - context_menu: - row: - before: "在前面插入新行" - after: "在后面插入新行" - delete: "删除所选行" - col: - before: "在前面插入新列" - after: "在后面插入新列" - delete: "删除所选列" - rename: "重命名此列" - order: - ascending: "按升序排序" - descending: "按降序排序" - copy: "复制…" - paste: "粘贴…" - save: "另存为…" - theme_metadata: - description: "向编辑器添加一个按钮,以便在 Markdown 中轻松构建表" diff --git a/locales/zh_TW.yml b/locales/zh_TW.yml deleted file mode 100644 index 9817950..0000000 --- a/locales/zh_TW.yml +++ /dev/null @@ -1,16 +0,0 @@ -# WARNING: Never edit this file. -# It will be overwritten when translations are pulled from Crowdin. -# -# To work with us on translations, join this project: -# https://translate.discourse.org/ - -zh_TW: - discourse_table_builder: - edit: - modal: - cancel: "取消" - create: "保存" - reason: "你為什麼做編輯?" - spreadsheet: - show: "顯示" - about: "關於" diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 3f554fc..0000000 --- a/package-lock.json +++ /dev/null @@ -1,9739 +0,0 @@ -{ - "name": "discourse-table-builder", - "version": "0.0.1", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "discourse-table-builder", - "version": "0.0.1", - "license": "MIT", - "devDependencies": { - "eslint-config-discourse": "^3.4.0" - } - }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/code-frame/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/code-frame/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", - "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.9.tgz", - "integrity": "sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.9", - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helpers": "^7.22.6", - "@babel/parser": "^7.22.7", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.8", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/eslint-parser": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.22.9.tgz", - "integrity": "sha512-xdMkt39/nviO/4vpVdrEYPwXCsYIXSSAr6mC7WQsNIlGnuxKyKE7GZjalcnbSWiC4OXGNNN3UQPeHfjSC6sTDA==", - "dev": true, - "dependencies": { - "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", - "eslint-visitor-keys": "^2.1.0", - "semver": "^6.3.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || >=14.0.0" - }, - "peerDependencies": { - "@babel/core": ">=7.11.0", - "eslint": "^7.5.0 || ^8.0.0" - } - }, - "node_modules/@babel/generator": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", - "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.23.0", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz", - "integrity": "sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.9", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.9.tgz", - "integrity": "sha512-Pwyi89uO4YrGKxL/eNJ8lfEH55DnRloGPOseaA8NFNL6jAUnn+KccaISiFazCj5IolPPDjGSdzQzXVzODVRqUQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", - "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", - "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", - "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz", - "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.6", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", - "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", - "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.22.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.22.7.tgz", - "integrity": "sha512-omXqPF7Onq4Bb7wHxXjM3jSMSJvUUbvDvmmds7KI5n9Cq6Ln5I05I1W2nRlRof1rGdiUxJrxwe285WF96XlBXQ==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/plugin-syntax-decorators": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-decorators": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.22.5.tgz", - "integrity": "sha512-avpUOBS7IU6al8MmF1XpAyj9QYeLPuSDJI5D4pVMSMdL7xQokKqJPYQC67RCT0aCTashUXPiGwMJ0DEXXCEmMA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", - "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", - "dev": true, - "dependencies": { - "regenerator-runtime": "^0.13.11" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", - "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.0", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.0", - "@babel/types": "^7.23.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", - "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@ember-data/rfc395-data": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@ember-data/rfc395-data/-/rfc395-data-0.0.4.tgz", - "integrity": "sha512-tGRdvgC9/QMQSuSuJV45xoyhI0Pzjm7A9o/MVVA3HakXIImJbbzx/k/6dO9CUEQXIyS2y0fW6C1XaYOG7rY0FQ==", - "dev": true - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", - "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", - "dev": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.0.tgz", - "integrity": "sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/js": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.44.0.tgz", - "integrity": "sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@glimmer/env": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/@glimmer/env/-/env-0.1.7.tgz", - "integrity": "sha512-JKF/a9I9jw6fGoz8kA7LEQslrwJ5jms5CXhu/aqkBWk+PmZ6pTl8mlb/eJ/5ujBGTiQzBhy5AIWF712iA+4/mw==", - "dev": true - }, - "node_modules/@glimmer/global-context": { - "version": "0.84.3", - "resolved": "https://registry.npmjs.org/@glimmer/global-context/-/global-context-0.84.3.tgz", - "integrity": "sha512-8Oy9Wg5IZxMEeAnVmzD2NkObf89BeHoFSzJgJROE/deutd3rxg83mvlOez4zBBGYwnTb+VGU2LYRpet92egJjA==", - "dev": true, - "dependencies": { - "@glimmer/env": "^0.1.7" - } - }, - "node_modules/@glimmer/interfaces": { - "version": "0.84.3", - "resolved": "https://registry.npmjs.org/@glimmer/interfaces/-/interfaces-0.84.3.tgz", - "integrity": "sha512-dk32ykoNojt0mvEaIW6Vli5MGTbQo58uy3Epj7ahCgTHmWOKuw/0G83f2UmFprRwFx689YTXG38I/vbpltEjzg==", - "dev": true, - "dependencies": { - "@simple-dom/interface": "^1.4.0" - } - }, - "node_modules/@glimmer/reference": { - "version": "0.84.3", - "resolved": "https://registry.npmjs.org/@glimmer/reference/-/reference-0.84.3.tgz", - "integrity": "sha512-lV+p/aWPVC8vUjmlvYVU7WQJsLh319SdXuAWoX/SE3pq340BJlAJiEcAc6q52y9JNhT57gMwtjMX96W5Xcx/qw==", - "dev": true, - "dependencies": { - "@glimmer/env": "^0.1.7", - "@glimmer/global-context": "0.84.3", - "@glimmer/interfaces": "0.84.3", - "@glimmer/util": "0.84.3", - "@glimmer/validator": "0.84.3" - } - }, - "node_modules/@glimmer/syntax": { - "version": "0.84.3", - "resolved": "https://registry.npmjs.org/@glimmer/syntax/-/syntax-0.84.3.tgz", - "integrity": "sha512-ioVbTic6ZisLxqTgRBL2PCjYZTFIwobifCustrozRU2xGDiYvVIL0vt25h2c1ioDsX59UgVlDkIK4YTAQQSd2A==", - "dev": true, - "dependencies": { - "@glimmer/interfaces": "0.84.3", - "@glimmer/util": "0.84.3", - "@handlebars/parser": "~2.0.0", - "simple-html-tokenizer": "^0.5.11" - } - }, - "node_modules/@glimmer/util": { - "version": "0.84.3", - "resolved": "https://registry.npmjs.org/@glimmer/util/-/util-0.84.3.tgz", - "integrity": "sha512-qFkh6s16ZSRuu2rfz3T4Wp0fylFj3HBsONGXQcrAdZjdUaIS6v3pNj6mecJ71qRgcym9Hbaq/7/fefIwECUiKw==", - "dev": true, - "dependencies": { - "@glimmer/env": "0.1.7", - "@glimmer/interfaces": "0.84.3", - "@simple-dom/interface": "^1.4.0" - } - }, - "node_modules/@glimmer/validator": { - "version": "0.84.3", - "resolved": "https://registry.npmjs.org/@glimmer/validator/-/validator-0.84.3.tgz", - "integrity": "sha512-RTBV4TokUB0vI31UC7ikpV7lOYpWUlyqaKV//pRC4pexYMlmqnVhkFrdiimB/R1XyNdUOQUmnIAcdic39NkbhQ==", - "dev": true, - "dependencies": { - "@glimmer/env": "^0.1.7", - "@glimmer/global-context": "0.84.3" - } - }, - "node_modules/@handlebars/parser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@handlebars/parser/-/parser-2.0.0.tgz", - "integrity": "sha512-EP9uEDZv/L5Qh9IWuMUGJRfwhXJ4h1dqKTT4/3+tY0eu7sPis7xh23j61SYUnNF4vqCQvvUXpDo9Bh/+q1zASA==", - "dev": true - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "node_modules/@lint-todo/utils": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/@lint-todo/utils/-/utils-13.1.0.tgz", - "integrity": "sha512-uzcZPIPH7hcs+hKMiHfp58MosJpI9sTTgl1pGYau4zq34q1ppswJ6nLeohv/cDhqEBrHjtvldt8zDnVJXRvBlA==", - "dev": true, - "dependencies": { - "@types/eslint": "^7.2.13", - "find-up": "^5.0.0", - "fs-extra": "^9.1.0", - "proper-lockfile": "^4.1.2", - "slash": "^3.0.0", - "tslib": "^2.4.0", - "upath": "^2.0.1" - }, - "engines": { - "node": "12.* || >= 14" - } - }, - "node_modules/@lint-todo/utils/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@lint-todo/utils/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@lint-todo/utils/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@lint-todo/utils/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@lint-todo/utils/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@lint-todo/utils/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@lint-todo/utils/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@lint-todo/utils/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@lint-todo/utils/node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { - "version": "5.1.1-v1", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", - "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", - "dev": true, - "dependencies": { - "eslint-scope": "5.1.1" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@simple-dom/interface": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@simple-dom/interface/-/interface-1.4.0.tgz", - "integrity": "sha512-l5qumKFWU0S+4ZzMaLXFU8tQZsicHEMEyAxI5kDFGhJsRqDwe0a7/iPA/GdxlGyDKseQQAgIz5kzU7eXTrlSpA==", - "dev": true - }, - "node_modules/@types/eslint": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.29.0.tgz", - "integrity": "sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng==", - "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", - "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", - "dev": true - }, - "node_modules/@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", - "dev": true - }, - "node_modules/@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true - }, - "node_modules/@types/symlink-or-copy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@types/symlink-or-copy/-/symlink-or-copy-1.2.0.tgz", - "integrity": "sha512-Lja2xYuuf2B3knEsga8ShbOdsfNOtzT73GyJmZyY7eGl2+ajOqrs8yM5ze0fsSoYwvA6bw7/Qr7OZ7PEEmYwWg==", - "dev": true - }, - "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/aria-query": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", - "dev": true, - "dependencies": { - "dequal": "^2.0.3" - } - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", - "integrity": "sha512-H3LU5RLiSsGXPhN+Nipar0iR0IofH+8r89G2y1tBKxQ/agagKyAjhkAFDRBfodP2caPrNKHpAWNIM/c9yeL7uA==", - "dev": true - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dev": true, - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/async-disk-cache": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/async-disk-cache/-/async-disk-cache-1.3.5.tgz", - "integrity": "sha512-VZpqfR0R7CEOJZ/0FOTgWq70lCrZyS1rkI8PXugDUkTKyyAUgZ2zQ09gLhMkEn+wN8LYeUTPxZdXtlX/kmbXKQ==", - "dev": true, - "dependencies": { - "debug": "^2.1.3", - "heimdalljs": "^0.2.3", - "istextorbinary": "2.1.0", - "mkdirp": "^0.5.0", - "rimraf": "^2.5.3", - "rsvp": "^3.0.18", - "username-sync": "^1.0.2" - } - }, - "node_modules/async-disk-cache/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/async-disk-cache/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/async-disk-cache/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/async-disk-cache/node_modules/rsvp": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", - "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", - "dev": true, - "engines": { - "node": "0.12.* || 4.* || 6.* || >= 7.*" - } - }, - "node_modules/async-promise-queue": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/async-promise-queue/-/async-promise-queue-1.0.5.tgz", - "integrity": "sha512-xi0aQ1rrjPWYmqbwr18rrSKbSaXIeIwSd1J4KAgVfkq8utNbdZoht7GfvfY6swFUAMJ9obkc4WPJmtGwl+B8dw==", - "dev": true, - "dependencies": { - "async": "^2.4.1", - "debug": "^2.6.8" - } - }, - "node_modules/async-promise-queue/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/async-promise-queue/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/babel-import-util": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-import-util/-/babel-import-util-0.2.0.tgz", - "integrity": "sha512-CtWYYHU/MgK88rxMrLfkD356dApswtR/kWZ/c6JifG1m10e7tBBrs/366dFzWMAoqYmG5/JSh+94tUSpIwh+ag==", - "dev": true, - "engines": { - "node": ">= 12.*" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/binaryextensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-2.3.0.tgz", - "integrity": "sha512-nAihlQsYGyc5Bwq6+EsubvANYGExeJKHDO3RjnvwU042fawQTQfM3Kxn7IHUXQOz4bzfwsGYYHGSvXyW4zOGLg==", - "dev": true, - "engines": { - "node": ">=0.8" - }, - "funding": { - "url": "https://bevry.me/fund" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/blank-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/blank-object/-/blank-object-1.0.2.tgz", - "integrity": "sha512-kXQ19Xhoghiyw66CUiGypnuRpWlbHAzY/+NyvqTEdTfhfQGH1/dbEMYiXju7fYKIFePpzp/y9dsu5Cu/PkmawQ==", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/broccoli-debug": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/broccoli-debug/-/broccoli-debug-0.6.5.tgz", - "integrity": "sha512-RIVjHvNar9EMCLDW/FggxFRXqpjhncM/3qq87bn/y+/zR9tqEkHvTqbyOc4QnB97NO2m6342w4wGkemkaeOuWg==", - "dev": true, - "dependencies": { - "broccoli-plugin": "^1.2.1", - "fs-tree-diff": "^0.5.2", - "heimdalljs": "^0.2.1", - "heimdalljs-logger": "^0.1.7", - "symlink-or-copy": "^1.1.8", - "tree-sync": "^1.2.2" - } - }, - "node_modules/broccoli-debug/node_modules/broccoli-plugin": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/broccoli-plugin/-/broccoli-plugin-1.3.1.tgz", - "integrity": "sha512-DW8XASZkmorp+q7J4EeDEZz+LoyKLAd2XZULXyD9l4m9/hAKV3vjHmB1kiUshcWAYMgTP1m2i4NnqCE/23h6AQ==", - "dev": true, - "dependencies": { - "promise-map-series": "^0.2.1", - "quick-temp": "^0.1.3", - "rimraf": "^2.3.4", - "symlink-or-copy": "^1.1.8" - } - }, - "node_modules/broccoli-debug/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/broccoli-funnel": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/broccoli-funnel/-/broccoli-funnel-2.0.2.tgz", - "integrity": "sha512-/vDTqtv7ipjEZQOVqO4vGDVAOZyuYzQ/EgGoyewfOgh1M7IQAToBKZI0oAQPgMBeFPPlIbfMuAngk+ohPBuaHQ==", - "dev": true, - "dependencies": { - "array-equal": "^1.0.0", - "blank-object": "^1.0.1", - "broccoli-plugin": "^1.3.0", - "debug": "^2.2.0", - "fast-ordered-set": "^1.0.0", - "fs-tree-diff": "^0.5.3", - "heimdalljs": "^0.2.0", - "minimatch": "^3.0.0", - "mkdirp": "^0.5.0", - "path-posix": "^1.0.0", - "rimraf": "^2.4.3", - "symlink-or-copy": "^1.0.0", - "walk-sync": "^0.3.1" - }, - "engines": { - "node": "^4.5 || 6.* || >= 7.*" - } - }, - "node_modules/broccoli-funnel/node_modules/broccoli-plugin": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/broccoli-plugin/-/broccoli-plugin-1.3.1.tgz", - "integrity": "sha512-DW8XASZkmorp+q7J4EeDEZz+LoyKLAd2XZULXyD9l4m9/hAKV3vjHmB1kiUshcWAYMgTP1m2i4NnqCE/23h6AQ==", - "dev": true, - "dependencies": { - "promise-map-series": "^0.2.1", - "quick-temp": "^0.1.3", - "rimraf": "^2.3.4", - "symlink-or-copy": "^1.1.8" - } - }, - "node_modules/broccoli-funnel/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/broccoli-funnel/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/broccoli-funnel/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/broccoli-funnel/node_modules/walk-sync": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/walk-sync/-/walk-sync-0.3.4.tgz", - "integrity": "sha512-ttGcuHA/OBnN2pcM6johpYlEms7XpO5/fyKIr48541xXedan4roO8cS1Q2S/zbbjGH/BarYDAMeS2Mi9HE5Tig==", - "dev": true, - "dependencies": { - "ensure-posix-path": "^1.0.0", - "matcher-collection": "^1.0.0" - } - }, - "node_modules/broccoli-kitchen-sink-helpers": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/broccoli-kitchen-sink-helpers/-/broccoli-kitchen-sink-helpers-0.3.1.tgz", - "integrity": "sha512-gqYnKSJxBSjj/uJqeuRAzYVbmjWhG0mOZ8jrp6+fnUIOgLN6MvI7XxBECDHkYMIFPJ8Smf4xaI066Q2FqQDnXg==", - "dev": true, - "dependencies": { - "glob": "^5.0.10", - "mkdirp": "^0.5.1" - } - }, - "node_modules/broccoli-kitchen-sink-helpers/node_modules/glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", - "dev": true, - "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/broccoli-merge-trees": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/broccoli-merge-trees/-/broccoli-merge-trees-3.0.2.tgz", - "integrity": "sha512-ZyPAwrOdlCddduFbsMyyFzJUrvW6b04pMvDiAQZrCwghlvgowJDY+EfoXn+eR1RRA5nmGHJ+B68T63VnpRiT1A==", - "dev": true, - "dependencies": { - "broccoli-plugin": "^1.3.0", - "merge-trees": "^2.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/broccoli-merge-trees/node_modules/broccoli-plugin": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/broccoli-plugin/-/broccoli-plugin-1.3.1.tgz", - "integrity": "sha512-DW8XASZkmorp+q7J4EeDEZz+LoyKLAd2XZULXyD9l4m9/hAKV3vjHmB1kiUshcWAYMgTP1m2i4NnqCE/23h6AQ==", - "dev": true, - "dependencies": { - "promise-map-series": "^0.2.1", - "quick-temp": "^0.1.3", - "rimraf": "^2.3.4", - "symlink-or-copy": "^1.1.8" - } - }, - "node_modules/broccoli-merge-trees/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/broccoli-persistent-filter": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/broccoli-persistent-filter/-/broccoli-persistent-filter-2.3.1.tgz", - "integrity": "sha512-hVsmIgCDrl2NFM+3Gs4Cr2TA6UPaIZip99hN8mtkaUPgM8UeVnCbxelCvBjUBHo0oaaqP5jzqqnRVvb568Yu5g==", - "dev": true, - "dependencies": { - "async-disk-cache": "^1.2.1", - "async-promise-queue": "^1.0.3", - "broccoli-plugin": "^1.0.0", - "fs-tree-diff": "^2.0.0", - "hash-for-dep": "^1.5.0", - "heimdalljs": "^0.2.1", - "heimdalljs-logger": "^0.1.7", - "mkdirp": "^0.5.1", - "promise-map-series": "^0.2.1", - "rimraf": "^2.6.1", - "rsvp": "^4.7.0", - "symlink-or-copy": "^1.0.1", - "sync-disk-cache": "^1.3.3", - "walk-sync": "^1.0.0" - }, - "engines": { - "node": "6.* || >= 8.*" - } - }, - "node_modules/broccoli-persistent-filter/node_modules/broccoli-plugin": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/broccoli-plugin/-/broccoli-plugin-1.3.1.tgz", - "integrity": "sha512-DW8XASZkmorp+q7J4EeDEZz+LoyKLAd2XZULXyD9l4m9/hAKV3vjHmB1kiUshcWAYMgTP1m2i4NnqCE/23h6AQ==", - "dev": true, - "dependencies": { - "promise-map-series": "^0.2.1", - "quick-temp": "^0.1.3", - "rimraf": "^2.3.4", - "symlink-or-copy": "^1.1.8" - } - }, - "node_modules/broccoli-persistent-filter/node_modules/fs-tree-diff": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fs-tree-diff/-/fs-tree-diff-2.0.1.tgz", - "integrity": "sha512-x+CfAZ/lJHQqwlD64pYM5QxWjzWhSjroaVsr8PW831zOApL55qPibed0c+xebaLWVr2BnHFoHdrwOv8pzt8R5A==", - "dev": true, - "dependencies": { - "@types/symlink-or-copy": "^1.2.0", - "heimdalljs-logger": "^0.1.7", - "object-assign": "^4.1.0", - "path-posix": "^1.0.0", - "symlink-or-copy": "^1.1.8" - }, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/broccoli-persistent-filter/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/broccoli-plugin": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/broccoli-plugin/-/broccoli-plugin-2.1.0.tgz", - "integrity": "sha512-ElE4caljW4slapyEhSD9jU9Uayc8SoSABWdmY9SqbV8DHNxU6xg1jJsPcMm+cXOvggR3+G+OXAYQeFjWVnznaw==", - "dev": true, - "dependencies": { - "promise-map-series": "^0.2.1", - "quick-temp": "^0.1.3", - "rimraf": "^2.3.4", - "symlink-or-copy": "^1.1.8" - }, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/broccoli-plugin/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/broccoli-stew": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/broccoli-stew/-/broccoli-stew-3.0.0.tgz", - "integrity": "sha512-NXfi+Vas24n3Ivo21GvENTI55qxKu7OwKRnCLWXld8MiLiQKQlWIq28eoARaFj0lTUFwUa4jKZeA7fW9PiWQeg==", - "dev": true, - "dependencies": { - "broccoli-debug": "^0.6.5", - "broccoli-funnel": "^2.0.0", - "broccoli-merge-trees": "^3.0.1", - "broccoli-persistent-filter": "^2.3.0", - "broccoli-plugin": "^2.1.0", - "chalk": "^2.4.1", - "debug": "^4.1.1", - "ensure-posix-path": "^1.0.1", - "fs-extra": "^8.0.1", - "minimatch": "^3.0.4", - "resolve": "^1.11.1", - "rsvp": "^4.8.5", - "symlink-or-copy": "^1.2.0", - "walk-sync": "^1.1.3" - }, - "engines": { - "node": "8.* || >= 10.*" - } - }, - "node_modules/broccoli-stew/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/broccoli-stew/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/broccoli-stew/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/broccoli-stew/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/broccoli-stew/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/broccoli-stew/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/broccoli-stew/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/browserslist": { - "version": "4.21.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", - "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/can-symlink": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/can-symlink/-/can-symlink-1.0.0.tgz", - "integrity": "sha512-RbsNrFyhwkx+6psk/0fK/Q9orOUr9VMxohGd8vTa4djf4TGLfblBgUfqZChrZuW0Q+mz2eBPFLusw9Jfukzmhg==", - "dev": true, - "dependencies": { - "tmp": "0.0.28" - }, - "bin": { - "can-symlink": "can-symlink.js" - } - }, - "node_modules/can-symlink/node_modules/tmp": { - "version": "0.0.28", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.28.tgz", - "integrity": "sha512-c2mmfiBmND6SOVxzogm1oda0OJ1HZVIk/5n26N59dDTh80MUeavpiCls4PGAdkX1PFkKokLpcf7prSjCeXLsJg==", - "dev": true, - "dependencies": { - "os-tmpdir": "~1.0.1" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001515", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001515.tgz", - "integrity": "sha512-eEFDwUOZbE24sb+Ecsx3+OvNETqjWIdabMy52oOkIgcUtAsQifjUG9q4U9dgTHJM2mfk4uEPxc0+xuFdJ629QA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/clean-up-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clean-up-path/-/clean-up-path-1.0.0.tgz", - "integrity": "sha512-PHGlEF0Z6976qQyN6gM7kKH6EH0RdfZcc8V+QhFe36eRxV0SMH5OUBZG7Bxa9YcreNzyNbK63cGiZxdSZgosRw==", - "dev": true - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", - "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, - "license": "MIT" - }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/css-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", - "dev": true, - "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" - } - }, - "node_modules/date-fns": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", - "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.21.0" - }, - "engines": { - "node": ">=0.11" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/date-fns" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", - "dev": true, - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dev": true, - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/editions": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/editions/-/editions-1.3.4.tgz", - "integrity": "sha512-gzao+mxnYDzIysXKMQi/+M1mjy/rjestjg6OPoYTtI+3Izp23oiGZitsl9lPDPiTGXbcSIk1iJWhliSaglxnUg==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.460", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.460.tgz", - "integrity": "sha512-kKiHnbrHME7z8E6AYaw0ehyxY5+hdaRmeUbjBO22LZMdqTYCO29EvF0T1cQ3pJ1RN5fyMcHl1Lmcsdt9WWJpJQ==", - "dev": true - }, - "node_modules/ember-cli-babel-plugin-helpers": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ember-cli-babel-plugin-helpers/-/ember-cli-babel-plugin-helpers-1.1.1.tgz", - "integrity": "sha512-sKvOiPNHr5F/60NLd7SFzMpYPte/nnGkq/tMIfXejfKHIhaiIkYFqX8Z9UFTKWLLn+V7NOaby6niNPZUdvKCRw==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/ember-cli-version-checker": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/ember-cli-version-checker/-/ember-cli-version-checker-5.1.2.tgz", - "integrity": "sha512-rk7GY+FmLn/2e22HsZs0Ycrz8HQ1W3Fv+2TFOuEFW9optnDXDgkntPBIl6gact/LHsfBM5RKbM3dHsIIeLgl0Q==", - "dev": true, - "dependencies": { - "resolve-package-path": "^3.1.0", - "semver": "^7.3.4", - "silent-error": "^1.1.1" - }, - "engines": { - "node": "10.* || >= 12.*" - } - }, - "node_modules/ember-cli-version-checker/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ember-cli-version-checker/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ember-cli-version-checker/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/ember-rfc176-data": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/ember-rfc176-data/-/ember-rfc176-data-0.3.18.tgz", - "integrity": "sha512-JtuLoYGSjay1W3MQAxt3eINWXNYYQliK90tLwtb8aeCuQK8zKGCRbBodVIrkcTqshULMnRuTOS6t1P7oQk3g6Q==", - "dev": true - }, - "node_modules/ember-template-imports": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/ember-template-imports/-/ember-template-imports-3.4.2.tgz", - "integrity": "sha512-OS8TUVG2kQYYwP3netunLVfeijPoOKIs1SvPQRTNOQX4Pu8xGGBEZmrv0U1YTnQn12Eg+p6w/0UdGbUnITjyzw==", - "dev": true, - "dependencies": { - "babel-import-util": "^0.2.0", - "broccoli-stew": "^3.0.0", - "ember-cli-babel-plugin-helpers": "^1.1.1", - "ember-cli-version-checker": "^5.1.2", - "line-column": "^1.0.2", - "magic-string": "^0.25.7", - "parse-static-imports": "^1.1.0", - "string.prototype.matchall": "^4.0.6", - "validate-peer-dependencies": "^1.1.0" - }, - "engines": { - "node": "12.* || >= 14" - } - }, - "node_modules/ember-template-lint": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/ember-template-lint/-/ember-template-lint-5.11.0.tgz", - "integrity": "sha512-uoVz4IAFRyg3JnMTL+SDtZkHPZM6O1qhvvgcb7LD6325W6asjPZGF1YHDyxnssEOnCSVsu1S5bk77tqE5NnyNg==", - "dev": true, - "dependencies": { - "@lint-todo/utils": "^13.0.3", - "aria-query": "^5.0.2", - "chalk": "^5.2.0", - "ci-info": "^3.8.0", - "date-fns": "^2.30.0", - "ember-template-imports": "^3.4.2", - "ember-template-recast": "^6.1.4", - "eslint-formatter-kakoune": "^1.0.0", - "find-up": "^6.3.0", - "fuse.js": "^6.5.3", - "get-stdin": "^9.0.0", - "globby": "^13.2.0", - "is-glob": "^4.0.3", - "language-tags": "^1.0.8", - "micromatch": "^4.0.5", - "resolve": "^1.22.3", - "v8-compile-cache": "^2.3.0", - "yargs": "^17.7.2" - }, - "bin": { - "ember-template-lint": "bin/ember-template-lint.js" - }, - "engines": { - "node": "^14.18.0 || ^16.0.0 || >= 18.0.0" - } - }, - "node_modules/ember-template-lint-plugin-discourse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ember-template-lint-plugin-discourse/-/ember-template-lint-plugin-discourse-3.0.0.tgz", - "integrity": "sha512-4zi/qN+vXs0ZpJZrwdMfZ5hMThJbeVCFdof6iek4PmgIJhnlA0lzqIa1BrKpSKhr3ckd5K0rUMNcCAm0uKNOtg==", - "dev": true - }, - "node_modules/ember-template-lint/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "dev": true, - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/ember-template-recast": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/ember-template-recast/-/ember-template-recast-6.1.4.tgz", - "integrity": "sha512-fCh+rOK6z+/tsdkTbOE+e7f84P6ObnIRQrCCrnu21E4X05hPeradikIkRMhJdxn4NWrxitfZskQDd37TR/lsNQ==", - "dev": true, - "dependencies": { - "@glimmer/reference": "^0.84.3", - "@glimmer/syntax": "^0.84.3", - "@glimmer/validator": "^0.84.3", - "async-promise-queue": "^1.0.5", - "colors": "^1.4.0", - "commander": "^8.3.0", - "globby": "^11.0.3", - "ora": "^5.4.0", - "slash": "^3.0.0", - "tmp": "^0.2.1", - "workerpool": "^6.4.0" - }, - "bin": { - "ember-template-recast": "lib/bin.js" - }, - "engines": { - "node": "12.* || 14.* || >= 16.*" - } - }, - "node_modules/ember-template-recast/node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/ensure-posix-path": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ensure-posix-path/-/ensure-posix-path-1.1.1.tgz", - "integrity": "sha512-VWU0/zXzVbeJNXvME/5EmLuEj2TauvoaTz6aFYK1Z92JCBlDlZ3Gu0tuGR42kpW1754ywTs+QB0g5TP0oj9Zaw==", - "dev": true - }, - "node_modules/es-abstract": { - "version": "1.21.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.3.tgz", - "integrity": "sha512-ZU4miiY1j3sGPFLJ34VJXEqhpmL+HGByCinGHv4HC+Fxl2fI2Z4yR6tl0mORnDr6PA8eihWo4LmSWDbvhALckg==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.1", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.0", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.44.0.tgz", - "integrity": "sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.1.0", - "@eslint/js": "8.44.0", - "@humanwhocodes/config-array": "^0.11.10", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.0", - "eslint-visitor-keys": "^3.4.1", - "espree": "^9.6.0", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-discourse": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-discourse/-/eslint-config-discourse-3.5.0.tgz", - "integrity": "sha512-IwxNmfyomRKrMCP3dsgxEepKYv/QW5tcLi/NRv7hl06uRK5o+a8QvrFjFiC+KfYcNRQhTQA4So+YwXSrVpCk0A==", - "dev": true, - "dependencies": { - "@babel/core": "^7.22.5", - "@babel/eslint-parser": "^7.22.5", - "@babel/plugin-proposal-decorators": "^7.22.5", - "ember-template-imports": "^3.4.1", - "ember-template-lint": "^5.10.3", - "ember-template-lint-plugin-discourse": "^3.0.0", - "eslint": "^8.43.0", - "eslint-plugin-discourse-ember": "latest", - "eslint-plugin-ember": "^11.8.0", - "eslint-plugin-lodash": "^7.1.0", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-sort-class-members": "^1.18.0", - "prettier": "2.8.8" - } - }, - "node_modules/eslint-formatter-kakoune": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eslint-formatter-kakoune/-/eslint-formatter-kakoune-1.0.0.tgz", - "integrity": "sha512-Uk/TVLt6Nf6Xoz7C1iYuZjOSdJxe5aaauGRke8JhKeJwD66Y61/pY2FjtLP04Ooq9PwV34bzrkKkU2UZ5FtDRA==", - "dev": true - }, - "node_modules/eslint-plugin-discourse-ember": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-discourse-ember/-/eslint-plugin-discourse-ember-0.0.3.tgz", - "integrity": "sha512-EFwWU4FlOSLBa4RolKZL8QD1eGOnvSkACLt4Big+o1ZUIpW7gGvfnJPtxkbaQ4XmhtZ5HetYt6862vVqhUMv9A==", - "dev": true, - "dependencies": { - "requireindex": "~1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-discourse-ember/node_modules/requireindex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.1.0.tgz", - "integrity": "sha512-LBnkqsDE7BZKvqylbmn7lTIVdpx4K/QCduRATpO5R+wtPmky/a8pN1bO2D6wXppn1497AJF9mNjqAXr6bdl9jg==", - "dev": true, - "engines": { - "node": ">=0.10.5" - } - }, - "node_modules/eslint-plugin-ember": { - "version": "11.10.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-ember/-/eslint-plugin-ember-11.10.0.tgz", - "integrity": "sha512-/5VanfpfzIdmWgXWyQ6ylAJWITu8mXivRce06h0uoifVpUoGaBdAkwuto/PLGfDxWdi43xWUFLb5Tpkhx2MoFg==", - "dev": true, - "dependencies": { - "@ember-data/rfc395-data": "^0.0.4", - "@glimmer/syntax": "^0.84.2", - "css-tree": "^2.0.4", - "ember-rfc176-data": "^0.3.15", - "ember-template-imports": "^3.4.2", - "ember-template-recast": "^6.1.4", - "eslint-utils": "^3.0.0", - "estraverse": "^5.2.0", - "lodash.camelcase": "^4.1.1", - "lodash.kebabcase": "^4.1.1", - "magic-string": "^0.30.0", - "requireindex": "^1.2.0", - "snake-case": "^3.0.3" - }, - "engines": { - "node": "14.* || 16.* || >= 18" - }, - "peerDependencies": { - "eslint": ">= 7" - } - }, - "node_modules/eslint-plugin-ember/node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-plugin-ember/node_modules/magic-string": { - "version": "0.30.1", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.1.tgz", - "integrity": "sha512-mbVKXPmS0z0G4XqFDCTllmDQ6coZzn94aMlb0o/A4HEHJCKcanlDZwYJgwnkmgD3jyWhUgj9VsPrfd972yPffA==", - "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/eslint-plugin-es": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", - "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" - }, - "engines": { - "node": ">=8.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=4.19.1" - } - }, - "node_modules/eslint-plugin-lodash": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-lodash/-/eslint-plugin-lodash-7.4.0.tgz", - "integrity": "sha512-Tl83UwVXqe1OVeBRKUeWcfg6/pCW1GTRObbdnbEJgYwjxp5Q92MEWQaH9+dmzbRt6kvYU1Mp893E79nJiCSM8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash": "^4.17.21" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": ">=2" - } - }, - "node_modules/eslint-plugin-node": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", - "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-plugin-es": "^3.0.0", - "eslint-utils": "^2.0.0", - "ignore": "^5.1.1", - "minimatch": "^3.0.4", - "resolve": "^1.10.1", - "semver": "^6.1.0" - }, - "engines": { - "node": ">=8.10.0" - }, - "peerDependencies": { - "eslint": ">=5.16.0" - } - }, - "node_modules/eslint-plugin-sort-class-members": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-sort-class-members/-/eslint-plugin-sort-class-members-1.18.0.tgz", - "integrity": "sha512-y4r5OC3LJNHJZCWfVwFnnRiNrQ/LRf7Pb1wD6/CP8Y4qmUvjtmkwrLvyY755p8SFTOOXVd33HgFuF3XxVW1xbg==", - "dev": true, - "engines": { - "node": ">=4.0.0" - }, - "peerDependencies": { - "eslint": ">=0.8.0" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-scope/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", - "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/espree": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.0.tgz", - "integrity": "sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A==", - "dev": true, - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.0.tgz", - "integrity": "sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fast-ordered-set": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fast-ordered-set/-/fast-ordered-set-1.0.3.tgz", - "integrity": "sha512-MxBW4URybFszOx1YlACEoK52P6lE3xiFcPaGCUZ7QQOZ6uJXKo++Se8wa31SjcZ+NC/fdAWX7UtKEfaGgHS2Vg==", - "dev": true, - "dependencies": { - "blank-object": "^1.0.1" - } - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "dev": true, - "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", - "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/fs-tree-diff": { - "version": "0.5.9", - "resolved": "https://registry.npmjs.org/fs-tree-diff/-/fs-tree-diff-0.5.9.tgz", - "integrity": "sha512-872G8ax0kHh01m9n/2KDzgYwouKza0Ad9iFltBpNykvROvf2AGtoOzPJgGx125aolGPER3JuC7uZFrQ7bG1AZw==", - "dev": true, - "dependencies": { - "heimdalljs-logger": "^0.1.7", - "object-assign": "^4.1.0", - "path-posix": "^1.0.0", - "symlink-or-copy": "^1.1.8" - } - }, - "node_modules/fs-updater": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fs-updater/-/fs-updater-1.0.4.tgz", - "integrity": "sha512-0pJX4mJF/qLsNEwTct8CdnnRdagfb+LmjRPJ8sO+nCnAZLW0cTmz4rTgU25n+RvTuWSITiLKrGVJceJPBIPlKg==", - "dev": true, - "dependencies": { - "can-symlink": "^1.0.0", - "clean-up-path": "^1.0.0", - "heimdalljs": "^0.2.5", - "heimdalljs-logger": "^0.1.9", - "rimraf": "^2.6.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/fs-updater/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true, - "license": "ISC" - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/fuse.js": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-6.6.2.tgz", - "integrity": "sha512-cJaJkxCCxC8qIIcPBF9yGxY0W/tVZS3uEISDxhYIdtk8OL93pe+6Zj7LjCqVV4dzbqcriOZ+kQ/NE4RXZHsIGA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-stdin": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz", - "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/globby": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", - "dev": true, - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hash-for-dep": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/hash-for-dep/-/hash-for-dep-1.5.1.tgz", - "integrity": "sha512-/dQ/A2cl7FBPI2pO0CANkvuuVi/IFS5oTyJ0PsOb6jW6WbVW1js5qJXMJTNbWHXBIPdFTWFbabjB+mE0d+gelw==", - "dev": true, - "dependencies": { - "broccoli-kitchen-sink-helpers": "^0.3.1", - "heimdalljs": "^0.2.3", - "heimdalljs-logger": "^0.1.7", - "path-root": "^0.1.1", - "resolve": "^1.10.0", - "resolve-package-path": "^1.0.11" - } - }, - "node_modules/hash-for-dep/node_modules/resolve-package-path": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/resolve-package-path/-/resolve-package-path-1.2.7.tgz", - "integrity": "sha512-fVEKHGeK85bGbVFuwO9o1aU0n3vqQGrezPc51JGu9UTXpFQfWq5qCeKxyaRUSvephs+06c5j5rPq/dzHGEo8+Q==", - "dev": true, - "dependencies": { - "path-root": "^0.1.1", - "resolve": "^1.10.0" - } - }, - "node_modules/heimdalljs": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/heimdalljs/-/heimdalljs-0.2.6.tgz", - "integrity": "sha512-o9bd30+5vLBvBtzCPwwGqpry2+n0Hi6H1+qwt6y+0kwRHGGF8TFIhJPmnuM0xO97zaKrDZMwO/V56fAnn8m/tA==", - "dev": true, - "dependencies": { - "rsvp": "~3.2.1" - } - }, - "node_modules/heimdalljs-logger": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/heimdalljs-logger/-/heimdalljs-logger-0.1.10.tgz", - "integrity": "sha512-pO++cJbhIufVI/fmB/u2Yty3KJD0TqNPecehFae0/eps0hkZ3b4Zc/PezUMOpYuHFQbA7FxHZxa305EhmjLj4g==", - "dev": true, - "dependencies": { - "debug": "^2.2.0", - "heimdalljs": "^0.2.6" - } - }, - "node_modules/heimdalljs-logger/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/heimdalljs-logger/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/heimdalljs/node_modules/rsvp": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.2.1.tgz", - "integrity": "sha512-Rf4YVNYpKjZ6ASAmibcwTNciQ5Co5Ztq6iZPEykHpkoflnD/K5ryE/rHehFsTm4NJj8nKDhbi3eKBWGogmNnkg==", - "dev": true - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", - "dev": true, - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istextorbinary": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-2.1.0.tgz", - "integrity": "sha512-kT1g2zxZ5Tdabtpp9VSdOzW9lb6LXImyWbzbQeTxoRtHhurC9Ej9Wckngr2+uepPL09ky/mJHmN9jeJPML5t6A==", - "dev": true, - "dependencies": { - "binaryextensions": "1 || 2", - "editions": "^1.1.1", - "textextensions": "1 || 2" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", - "dev": true - }, - "node_modules/language-tags": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.8.tgz", - "integrity": "sha512-aWAZwgPLS8hJ20lNPm9HNVs4inexz6S2sQa3wx/+ycuutMNE5/IfYxiWYBbi+9UWCQVaXYCOPUl6gFrPR7+jGg==", - "dev": true, - "dependencies": { - "language-subtag-registry": "^0.3.20" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/line-column": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/line-column/-/line-column-1.0.2.tgz", - "integrity": "sha512-Ktrjk5noGYlHsVnYWh62FLVs4hTb8A3e+vucNZMgPeAOITdshMSgv4cCZQeRDjm7+goqmo6+liZwTXo+U3sVww==", - "dev": true, - "dependencies": { - "isarray": "^1.0.0", - "isobject": "^2.0.0" - } - }, - "node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "dev": true, - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "dev": true - }, - "node_modules/lodash.kebabcase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", - "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dev": true, - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.8" - } - }, - "node_modules/matcher-collection": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/matcher-collection/-/matcher-collection-1.1.2.tgz", - "integrity": "sha512-YQ/teqaOIIfUHedRam08PB3NK7Mjct6BvzRnJmpGDm8uFXpNr1sbY4yuflI5JcEs6COpYA0FpRQhSDBf1tT95g==", - "dev": true, - "dependencies": { - "minimatch": "^3.0.2" - } - }, - "node_modules/mdn-data": { - "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", - "dev": true - }, - "node_modules/merge-trees": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-trees/-/merge-trees-2.0.0.tgz", - "integrity": "sha512-5xBbmqYBalWqmhYm51XlohhkmVOua3VAUrrWh8t9iOkaLpS6ifqm/UVuUjQCeDVJ9Vx3g2l6ihfkbLSTeKsHbw==", - "dev": true, - "dependencies": { - "fs-updater": "^1.0.4", - "heimdalljs": "^0.2.5" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mktemp": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/mktemp/-/mktemp-0.4.0.tgz", - "integrity": "sha512-IXnMcJ6ZyTuhRmJSjzvHSRhlVPiN9Jwc6e59V0bEJ0ba6OBeX2L0E+mRN1QseeOF4mM+F1Rit6Nh7o+rl2Yn/A==", - "dev": true, - "engines": { - "node": ">0.9" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true, - "license": "MIT" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dev": true, - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", - "dev": true - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dev": true, - "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dev": true, - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-static-imports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/parse-static-imports/-/parse-static-imports-1.1.0.tgz", - "integrity": "sha512-HlxrZcISCblEV0lzXmAHheH/8qEkKgmqkdxyHTPbSqsTUV8GzqmN1L+SSti+VbNPfbBO3bYLPHDiUs2avbAdbA==", - "dev": true - }, - "node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/path-posix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/path-posix/-/path-posix-1.0.0.tgz", - "integrity": "sha512-1gJ0WpNIiYcQydgg3Ed8KzvIqTsDpNwq+cjBCssvBtuTWjEqY1AW+i+OepiEMqDCzyro9B2sLAe4RBPajMYFiA==", - "dev": true - }, - "node_modules/path-root": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", - "dev": true, - "dependencies": { - "path-root-regex": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-root-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/promise-map-series": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/promise-map-series/-/promise-map-series-0.2.3.tgz", - "integrity": "sha512-wx9Chrutvqu1N/NHzTayZjE1BgIwt6SJykQoCOic4IZ9yUDjKyVYrpLa/4YCNsV61eRENfs29hrEquVuB13Zlw==", - "dev": true, - "dependencies": { - "rsvp": "^3.0.14" - } - }, - "node_modules/promise-map-series/node_modules/rsvp": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", - "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", - "dev": true, - "engines": { - "node": "0.12.* || 4.* || 6.* || >= 7.*" - } - }, - "node_modules/proper-lockfile": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", - "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "retry": "^0.12.0", - "signal-exit": "^3.0.2" - } - }, - "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/quick-temp": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/quick-temp/-/quick-temp-0.1.8.tgz", - "integrity": "sha512-YsmIFfD9j2zaFwJkzI6eMG7y0lQP7YeWzgtFgNl38pGWZBSXJooZbOWwkcRot7Vt0Fg9L23pX0tqWU3VvLDsiA==", - "dev": true, - "dependencies": { - "mktemp": "~0.4.0", - "rimraf": "^2.5.4", - "underscore.string": "~3.3.4" - } - }, - "node_modules/quick-temp/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", - "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "functions-have-names": "^1.2.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requireindex": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", - "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", - "dev": true, - "engines": { - "node": ">=0.10.5" - } - }, - "node_modules/resolve": { - "version": "1.22.3", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.3.tgz", - "integrity": "sha512-P8ur/gp/AmbEzjr729bZnLjXK5Z+4P0zhIJgBgzqRih7hL7BOukHGtSTA3ACMY467GRFz3duQsi0bDZdR7DKdw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.12.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-package-path": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/resolve-package-path/-/resolve-package-path-3.1.0.tgz", - "integrity": "sha512-2oC2EjWbMJwvSN6Z7DbDfJMnD8MYEouaLn5eIX0j8XwPsYCVIyY9bbnX88YHVkbr8XHqvZrYbxaLPibfTYKZMA==", - "dev": true, - "dependencies": { - "path-root": "^0.1.1", - "resolve": "^1.17.0" - }, - "engines": { - "node": "10.* || >= 12" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", - "dev": true, - "engines": { - "node": "6.* || >= 7.*" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/silent-error": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/silent-error/-/silent-error-1.1.1.tgz", - "integrity": "sha512-n4iEKyNcg4v6/jpb3c0/iyH2G1nzUNl7Gpqtn/mHIJK9S/q/7MCfoO4rwVOoO59qPFIc0hVHvMbiOJ0NdtxKKw==", - "dev": true, - "dependencies": { - "debug": "^2.2.0" - } - }, - "node_modules/silent-error/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/silent-error/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/simple-html-tokenizer": { - "version": "0.5.11", - "resolved": "https://registry.npmjs.org/simple-html-tokenizer/-/simple-html-tokenizer-0.5.11.tgz", - "integrity": "sha512-C2WEK/Z3HoSFbYq8tI7ni3eOo/NneSPRoPpcM7WdLjFOArFuyXEjAoCdOC3DgMfRyziZQ1hCNR4mrNdWEvD0og==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/snake-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", - "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", - "dev": true, - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "deprecated": "Please use @jridgewell/sourcemap-codec instead", - "dev": true - }, - "node_modules/sprintf-js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", - "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", - "dev": true - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", - "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", - "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/symlink-or-copy": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/symlink-or-copy/-/symlink-or-copy-1.3.1.tgz", - "integrity": "sha512-0K91MEXFpBUaywiwSSkmKjnGcasG/rVBXFLJz5DrgGabpYD6N+3yZrfD6uUIfpuTu65DZLHi7N8CizHc07BPZA==", - "dev": true - }, - "node_modules/sync-disk-cache": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/sync-disk-cache/-/sync-disk-cache-1.3.4.tgz", - "integrity": "sha512-GlkGeM81GPPEKz/lH7QUTbvqLq7K/IUTuaKDSMulP9XQ42glqNJIN/RKgSOw4y8vxL1gOVvj+W7ruEO4s36eCw==", - "dev": true, - "dependencies": { - "debug": "^2.1.3", - "heimdalljs": "^0.2.3", - "mkdirp": "^0.5.0", - "rimraf": "^2.2.8", - "username-sync": "^1.0.2" - } - }, - "node_modules/sync-disk-cache/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/sync-disk-cache/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/sync-disk-cache/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true, - "license": "MIT" - }, - "node_modules/textextensions": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-2.6.0.tgz", - "integrity": "sha512-49WtAWS+tcsy93dRt6P0P3AMD2m5PvXRhuEA0kaXos5ZLlujtYmpmFsB+QvWUSxE1ZsstmYXfQ7L40+EcQgpAQ==", - "dev": true, - "engines": { - "node": ">=0.8" - }, - "funding": { - "url": "https://bevry.me/fund" - } - }, - "node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tree-sync": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/tree-sync/-/tree-sync-1.4.0.tgz", - "integrity": "sha512-YvYllqh3qrR5TAYZZTXdspnIhlKAYezPYw11ntmweoceu4VK+keN356phHRIIo1d+RDmLpHZrUlmxga2gc9kSQ==", - "dev": true, - "dependencies": { - "debug": "^2.2.0", - "fs-tree-diff": "^0.5.6", - "mkdirp": "^0.5.1", - "quick-temp": "^0.1.5", - "walk-sync": "^0.3.3" - } - }, - "node_modules/tree-sync/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/tree-sync/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/tree-sync/node_modules/walk-sync": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/walk-sync/-/walk-sync-0.3.4.tgz", - "integrity": "sha512-ttGcuHA/OBnN2pcM6johpYlEms7XpO5/fyKIr48541xXedan4roO8cS1Q2S/zbbjGH/BarYDAMeS2Mi9HE5Tig==", - "dev": true, - "dependencies": { - "ensure-posix-path": "^1.0.0", - "matcher-collection": "^1.0.0" - } - }, - "node_modules/tslib": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz", - "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==", - "dev": true - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/underscore.string": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.6.tgz", - "integrity": "sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ==", - "dev": true, - "dependencies": { - "sprintf-js": "^1.1.1", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/upath": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", - "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", - "dev": true, - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/username-sync": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/username-sync/-/username-sync-1.0.3.tgz", - "integrity": "sha512-m/7/FSqjJNAzF2La448c/aEom0gJy7HY7Y509h6l0ePvEkFictAGptwWaj1msWJ38JbfEDOUoE8kqFee9EHKdA==", - "dev": true - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true, - "license": "MIT" - }, - "node_modules/validate-peer-dependencies": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/validate-peer-dependencies/-/validate-peer-dependencies-1.2.0.tgz", - "integrity": "sha512-nd2HUpKc6RWblPZQ2GDuI65sxJ2n/UqZwSBVtj64xlWjMx0m7ZB2m9b2JS3v1f+n9VWH/dd1CMhkHfP6pIdckA==", - "dev": true, - "dependencies": { - "resolve-package-path": "^3.1.0", - "semver": "^7.3.2" - } - }, - "node_modules/validate-peer-dependencies/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/validate-peer-dependencies/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/validate-peer-dependencies/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/walk-sync": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/walk-sync/-/walk-sync-1.1.4.tgz", - "integrity": "sha512-nowc9thB/Jg0KW4TgxoRjLLYRPvl3DB/98S89r4ZcJqq2B0alNcKDh6pzLkBSkPMzRSMsJghJHQi79qw0YWEkA==", - "dev": true, - "dependencies": { - "@types/minimatch": "^3.0.3", - "ensure-posix-path": "^1.1.0", - "matcher-collection": "^1.1.1" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.10.tgz", - "integrity": "sha512-uxoA5vLUfRPdjCuJ1h5LlYdmTLbYfums398v3WLkM+i/Wltl2/XyZpQWKbN++ck5L64SR/grOHqtXCUKmlZPNA==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/workerpool": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.4.0.tgz", - "integrity": "sha512-i3KR1mQMNwY2wx20ozq2EjISGtQWDIfV56We+yGJ5yDs8jTwQiLLaqHlkBHITlCuJnYlVRmXegxFxZg7gqI++A==", - "dev": true - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", - "dev": true, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, - "dependencies": { - "@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true - }, - "@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", - "dev": true, - "requires": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/compat-data": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", - "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", - "dev": true - }, - "@babel/core": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.9.tgz", - "integrity": "sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.9", - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helpers": "^7.22.6", - "@babel/parser": "^7.22.7", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.8", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.1" - } - }, - "@babel/eslint-parser": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.22.9.tgz", - "integrity": "sha512-xdMkt39/nviO/4vpVdrEYPwXCsYIXSSAr6mC7WQsNIlGnuxKyKE7GZjalcnbSWiC4OXGNNN3UQPeHfjSC6sTDA==", - "dev": true, - "requires": { - "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", - "eslint-visitor-keys": "^2.1.0", - "semver": "^6.3.1" - } - }, - "@babel/generator": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", - "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", - "dev": true, - "requires": { - "@babel/types": "^7.23.0", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz", - "integrity": "sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.9", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.9.tgz", - "integrity": "sha512-Pwyi89uO4YrGKxL/eNJ8lfEH55DnRloGPOseaA8NFNL6jAUnn+KccaISiFazCj5IolPPDjGSdzQzXVzODVRqUQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "semver": "^6.3.1" - } - }, - "@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "dev": true - }, - "@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dev": true, - "requires": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", - "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-module-transforms": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", - "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.5" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true - }, - "@babel/helper-replace-supers": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", - "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5" - } - }, - "@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", - "dev": true - }, - "@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", - "dev": true - }, - "@babel/helpers": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz", - "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==", - "dev": true, - "requires": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.6", - "@babel/types": "^7.22.5" - } - }, - "@babel/highlight": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", - "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", - "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", - "dev": true - }, - "@babel/plugin-proposal-decorators": { - "version": "7.22.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.22.7.tgz", - "integrity": "sha512-omXqPF7Onq4Bb7wHxXjM3jSMSJvUUbvDvmmds7KI5n9Cq6Ln5I05I1W2nRlRof1rGdiUxJrxwe285WF96XlBXQ==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/plugin-syntax-decorators": "^7.22.5" - } - }, - "@babel/plugin-syntax-decorators": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.22.5.tgz", - "integrity": "sha512-avpUOBS7IU6al8MmF1XpAyj9QYeLPuSDJI5D4pVMSMdL7xQokKqJPYQC67RCT0aCTashUXPiGwMJ0DEXXCEmMA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/runtime": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", - "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.11" - } - }, - "@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" - } - }, - "@babel/traverse": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", - "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.0", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.0", - "@babel/types": "^7.23.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", - "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", - "dev": true, - "requires": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" - } - }, - "@ember-data/rfc395-data": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@ember-data/rfc395-data/-/rfc395-data-0.0.4.tgz", - "integrity": "sha512-tGRdvgC9/QMQSuSuJV45xoyhI0Pzjm7A9o/MVVA3HakXIImJbbzx/k/6dO9CUEQXIyS2y0fW6C1XaYOG7rY0FQ==", - "dev": true - }, - "@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^3.3.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", - "dev": true - } - } - }, - "@eslint-community/regexpp": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", - "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", - "dev": true - }, - "@eslint/eslintrc": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.0.tgz", - "integrity": "sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - } - } - }, - "@eslint/js": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.44.0.tgz", - "integrity": "sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==", - "dev": true - }, - "@glimmer/env": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/@glimmer/env/-/env-0.1.7.tgz", - "integrity": "sha512-JKF/a9I9jw6fGoz8kA7LEQslrwJ5jms5CXhu/aqkBWk+PmZ6pTl8mlb/eJ/5ujBGTiQzBhy5AIWF712iA+4/mw==", - "dev": true - }, - "@glimmer/global-context": { - "version": "0.84.3", - "resolved": "https://registry.npmjs.org/@glimmer/global-context/-/global-context-0.84.3.tgz", - "integrity": "sha512-8Oy9Wg5IZxMEeAnVmzD2NkObf89BeHoFSzJgJROE/deutd3rxg83mvlOez4zBBGYwnTb+VGU2LYRpet92egJjA==", - "dev": true, - "requires": { - "@glimmer/env": "^0.1.7" - } - }, - "@glimmer/interfaces": { - "version": "0.84.3", - "resolved": "https://registry.npmjs.org/@glimmer/interfaces/-/interfaces-0.84.3.tgz", - "integrity": "sha512-dk32ykoNojt0mvEaIW6Vli5MGTbQo58uy3Epj7ahCgTHmWOKuw/0G83f2UmFprRwFx689YTXG38I/vbpltEjzg==", - "dev": true, - "requires": { - "@simple-dom/interface": "^1.4.0" - } - }, - "@glimmer/reference": { - "version": "0.84.3", - "resolved": "https://registry.npmjs.org/@glimmer/reference/-/reference-0.84.3.tgz", - "integrity": "sha512-lV+p/aWPVC8vUjmlvYVU7WQJsLh319SdXuAWoX/SE3pq340BJlAJiEcAc6q52y9JNhT57gMwtjMX96W5Xcx/qw==", - "dev": true, - "requires": { - "@glimmer/env": "^0.1.7", - "@glimmer/global-context": "0.84.3", - "@glimmer/interfaces": "0.84.3", - "@glimmer/util": "0.84.3", - "@glimmer/validator": "0.84.3" - } - }, - "@glimmer/syntax": { - "version": "0.84.3", - "resolved": "https://registry.npmjs.org/@glimmer/syntax/-/syntax-0.84.3.tgz", - "integrity": "sha512-ioVbTic6ZisLxqTgRBL2PCjYZTFIwobifCustrozRU2xGDiYvVIL0vt25h2c1ioDsX59UgVlDkIK4YTAQQSd2A==", - "dev": true, - "requires": { - "@glimmer/interfaces": "0.84.3", - "@glimmer/util": "0.84.3", - "@handlebars/parser": "~2.0.0", - "simple-html-tokenizer": "^0.5.11" - } - }, - "@glimmer/util": { - "version": "0.84.3", - "resolved": "https://registry.npmjs.org/@glimmer/util/-/util-0.84.3.tgz", - "integrity": "sha512-qFkh6s16ZSRuu2rfz3T4Wp0fylFj3HBsONGXQcrAdZjdUaIS6v3pNj6mecJ71qRgcym9Hbaq/7/fefIwECUiKw==", - "dev": true, - "requires": { - "@glimmer/env": "0.1.7", - "@glimmer/interfaces": "0.84.3", - "@simple-dom/interface": "^1.4.0" - } - }, - "@glimmer/validator": { - "version": "0.84.3", - "resolved": "https://registry.npmjs.org/@glimmer/validator/-/validator-0.84.3.tgz", - "integrity": "sha512-RTBV4TokUB0vI31UC7ikpV7lOYpWUlyqaKV//pRC4pexYMlmqnVhkFrdiimB/R1XyNdUOQUmnIAcdic39NkbhQ==", - "dev": true, - "requires": { - "@glimmer/env": "^0.1.7", - "@glimmer/global-context": "0.84.3" - } - }, - "@handlebars/parser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@handlebars/parser/-/parser-2.0.0.tgz", - "integrity": "sha512-EP9uEDZv/L5Qh9IWuMUGJRfwhXJ4h1dqKTT4/3+tY0eu7sPis7xh23j61SYUnNF4vqCQvvUXpDo9Bh/+q1zASA==", - "dev": true - }, - "@humanwhocodes/config-array": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - } - }, - "@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - }, - "dependencies": { - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - } - } - }, - "@lint-todo/utils": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/@lint-todo/utils/-/utils-13.1.0.tgz", - "integrity": "sha512-uzcZPIPH7hcs+hKMiHfp58MosJpI9sTTgl1pGYau4zq34q1ppswJ6nLeohv/cDhqEBrHjtvldt8zDnVJXRvBlA==", - "dev": true, - "requires": { - "@types/eslint": "^7.2.13", - "find-up": "^5.0.0", - "fs-extra": "^9.1.0", - "proper-lockfile": "^4.1.2", - "slash": "^3.0.0", - "tslib": "^2.4.0", - "upath": "^2.0.1" - }, - "dependencies": { - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - } - } - }, - "@nicolo-ribaudo/eslint-scope-5-internals": { - "version": "5.1.1-v1", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", - "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", - "dev": true, - "requires": { - "eslint-scope": "5.1.1" - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@simple-dom/interface": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@simple-dom/interface/-/interface-1.4.0.tgz", - "integrity": "sha512-l5qumKFWU0S+4ZzMaLXFU8tQZsicHEMEyAxI5kDFGhJsRqDwe0a7/iPA/GdxlGyDKseQQAgIz5kzU7eXTrlSpA==", - "dev": true - }, - "@types/eslint": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.29.0.tgz", - "integrity": "sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng==", - "dev": true, - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/estree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", - "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", - "dev": true - }, - "@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", - "dev": true - }, - "@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true - }, - "@types/symlink-or-copy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@types/symlink-or-copy/-/symlink-or-copy-1.2.0.tgz", - "integrity": "sha512-Lja2xYuuf2B3knEsga8ShbOdsfNOtzT73GyJmZyY7eGl2+ajOqrs8yM5ze0fsSoYwvA6bw7/Qr7OZ7PEEmYwWg==", - "dev": true - }, - "acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "aria-query": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", - "dev": true, - "requires": { - "dequal": "^2.0.3" - } - }, - "array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" - } - }, - "array-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", - "integrity": "sha512-H3LU5RLiSsGXPhN+Nipar0iR0IofH+8r89G2y1tBKxQ/agagKyAjhkAFDRBfodP2caPrNKHpAWNIM/c9yeL7uA==", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "async-disk-cache": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/async-disk-cache/-/async-disk-cache-1.3.5.tgz", - "integrity": "sha512-VZpqfR0R7CEOJZ/0FOTgWq70lCrZyS1rkI8PXugDUkTKyyAUgZ2zQ09gLhMkEn+wN8LYeUTPxZdXtlX/kmbXKQ==", - "dev": true, - "requires": { - "debug": "^2.1.3", - "heimdalljs": "^0.2.3", - "istextorbinary": "2.1.0", - "mkdirp": "^0.5.0", - "rimraf": "^2.5.3", - "rsvp": "^3.0.18", - "username-sync": "^1.0.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "rsvp": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", - "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", - "dev": true - } - } - }, - "async-promise-queue": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/async-promise-queue/-/async-promise-queue-1.0.5.tgz", - "integrity": "sha512-xi0aQ1rrjPWYmqbwr18rrSKbSaXIeIwSd1J4KAgVfkq8utNbdZoht7GfvfY6swFUAMJ9obkc4WPJmtGwl+B8dw==", - "dev": true, - "requires": { - "async": "^2.4.1", - "debug": "^2.6.8" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true - }, - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true - }, - "babel-import-util": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-import-util/-/babel-import-util-0.2.0.tgz", - "integrity": "sha512-CtWYYHU/MgK88rxMrLfkD356dApswtR/kWZ/c6JifG1m10e7tBBrs/366dFzWMAoqYmG5/JSh+94tUSpIwh+ag==", - "dev": true - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true - }, - "binaryextensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-2.3.0.tgz", - "integrity": "sha512-nAihlQsYGyc5Bwq6+EsubvANYGExeJKHDO3RjnvwU042fawQTQfM3Kxn7IHUXQOz4bzfwsGYYHGSvXyW4zOGLg==", - "dev": true - }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "blank-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/blank-object/-/blank-object-1.0.2.tgz", - "integrity": "sha512-kXQ19Xhoghiyw66CUiGypnuRpWlbHAzY/+NyvqTEdTfhfQGH1/dbEMYiXju7fYKIFePpzp/y9dsu5Cu/PkmawQ==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "broccoli-debug": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/broccoli-debug/-/broccoli-debug-0.6.5.tgz", - "integrity": "sha512-RIVjHvNar9EMCLDW/FggxFRXqpjhncM/3qq87bn/y+/zR9tqEkHvTqbyOc4QnB97NO2m6342w4wGkemkaeOuWg==", - "dev": true, - "requires": { - "broccoli-plugin": "^1.2.1", - "fs-tree-diff": "^0.5.2", - "heimdalljs": "^0.2.1", - "heimdalljs-logger": "^0.1.7", - "symlink-or-copy": "^1.1.8", - "tree-sync": "^1.2.2" - }, - "dependencies": { - "broccoli-plugin": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/broccoli-plugin/-/broccoli-plugin-1.3.1.tgz", - "integrity": "sha512-DW8XASZkmorp+q7J4EeDEZz+LoyKLAd2XZULXyD9l4m9/hAKV3vjHmB1kiUshcWAYMgTP1m2i4NnqCE/23h6AQ==", - "dev": true, - "requires": { - "promise-map-series": "^0.2.1", - "quick-temp": "^0.1.3", - "rimraf": "^2.3.4", - "symlink-or-copy": "^1.1.8" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "broccoli-funnel": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/broccoli-funnel/-/broccoli-funnel-2.0.2.tgz", - "integrity": "sha512-/vDTqtv7ipjEZQOVqO4vGDVAOZyuYzQ/EgGoyewfOgh1M7IQAToBKZI0oAQPgMBeFPPlIbfMuAngk+ohPBuaHQ==", - "dev": true, - "requires": { - "array-equal": "^1.0.0", - "blank-object": "^1.0.1", - "broccoli-plugin": "^1.3.0", - "debug": "^2.2.0", - "fast-ordered-set": "^1.0.0", - "fs-tree-diff": "^0.5.3", - "heimdalljs": "^0.2.0", - "minimatch": "^3.0.0", - "mkdirp": "^0.5.0", - "path-posix": "^1.0.0", - "rimraf": "^2.4.3", - "symlink-or-copy": "^1.0.0", - "walk-sync": "^0.3.1" - }, - "dependencies": { - "broccoli-plugin": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/broccoli-plugin/-/broccoli-plugin-1.3.1.tgz", - "integrity": "sha512-DW8XASZkmorp+q7J4EeDEZz+LoyKLAd2XZULXyD9l4m9/hAKV3vjHmB1kiUshcWAYMgTP1m2i4NnqCE/23h6AQ==", - "dev": true, - "requires": { - "promise-map-series": "^0.2.1", - "quick-temp": "^0.1.3", - "rimraf": "^2.3.4", - "symlink-or-copy": "^1.1.8" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "walk-sync": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/walk-sync/-/walk-sync-0.3.4.tgz", - "integrity": "sha512-ttGcuHA/OBnN2pcM6johpYlEms7XpO5/fyKIr48541xXedan4roO8cS1Q2S/zbbjGH/BarYDAMeS2Mi9HE5Tig==", - "dev": true, - "requires": { - "ensure-posix-path": "^1.0.0", - "matcher-collection": "^1.0.0" - } - } - } - }, - "broccoli-kitchen-sink-helpers": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/broccoli-kitchen-sink-helpers/-/broccoli-kitchen-sink-helpers-0.3.1.tgz", - "integrity": "sha512-gqYnKSJxBSjj/uJqeuRAzYVbmjWhG0mOZ8jrp6+fnUIOgLN6MvI7XxBECDHkYMIFPJ8Smf4xaI066Q2FqQDnXg==", - "dev": true, - "requires": { - "glob": "^5.0.10", - "mkdirp": "^0.5.1" - }, - "dependencies": { - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "broccoli-merge-trees": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/broccoli-merge-trees/-/broccoli-merge-trees-3.0.2.tgz", - "integrity": "sha512-ZyPAwrOdlCddduFbsMyyFzJUrvW6b04pMvDiAQZrCwghlvgowJDY+EfoXn+eR1RRA5nmGHJ+B68T63VnpRiT1A==", - "dev": true, - "requires": { - "broccoli-plugin": "^1.3.0", - "merge-trees": "^2.0.0" - }, - "dependencies": { - "broccoli-plugin": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/broccoli-plugin/-/broccoli-plugin-1.3.1.tgz", - "integrity": "sha512-DW8XASZkmorp+q7J4EeDEZz+LoyKLAd2XZULXyD9l4m9/hAKV3vjHmB1kiUshcWAYMgTP1m2i4NnqCE/23h6AQ==", - "dev": true, - "requires": { - "promise-map-series": "^0.2.1", - "quick-temp": "^0.1.3", - "rimraf": "^2.3.4", - "symlink-or-copy": "^1.1.8" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "broccoli-persistent-filter": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/broccoli-persistent-filter/-/broccoli-persistent-filter-2.3.1.tgz", - "integrity": "sha512-hVsmIgCDrl2NFM+3Gs4Cr2TA6UPaIZip99hN8mtkaUPgM8UeVnCbxelCvBjUBHo0oaaqP5jzqqnRVvb568Yu5g==", - "dev": true, - "requires": { - "async-disk-cache": "^1.2.1", - "async-promise-queue": "^1.0.3", - "broccoli-plugin": "^1.0.0", - "fs-tree-diff": "^2.0.0", - "hash-for-dep": "^1.5.0", - "heimdalljs": "^0.2.1", - "heimdalljs-logger": "^0.1.7", - "mkdirp": "^0.5.1", - "promise-map-series": "^0.2.1", - "rimraf": "^2.6.1", - "rsvp": "^4.7.0", - "symlink-or-copy": "^1.0.1", - "sync-disk-cache": "^1.3.3", - "walk-sync": "^1.0.0" - }, - "dependencies": { - "broccoli-plugin": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/broccoli-plugin/-/broccoli-plugin-1.3.1.tgz", - "integrity": "sha512-DW8XASZkmorp+q7J4EeDEZz+LoyKLAd2XZULXyD9l4m9/hAKV3vjHmB1kiUshcWAYMgTP1m2i4NnqCE/23h6AQ==", - "dev": true, - "requires": { - "promise-map-series": "^0.2.1", - "quick-temp": "^0.1.3", - "rimraf": "^2.3.4", - "symlink-or-copy": "^1.1.8" - } - }, - "fs-tree-diff": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fs-tree-diff/-/fs-tree-diff-2.0.1.tgz", - "integrity": "sha512-x+CfAZ/lJHQqwlD64pYM5QxWjzWhSjroaVsr8PW831zOApL55qPibed0c+xebaLWVr2BnHFoHdrwOv8pzt8R5A==", - "dev": true, - "requires": { - "@types/symlink-or-copy": "^1.2.0", - "heimdalljs-logger": "^0.1.7", - "object-assign": "^4.1.0", - "path-posix": "^1.0.0", - "symlink-or-copy": "^1.1.8" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "broccoli-plugin": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/broccoli-plugin/-/broccoli-plugin-2.1.0.tgz", - "integrity": "sha512-ElE4caljW4slapyEhSD9jU9Uayc8SoSABWdmY9SqbV8DHNxU6xg1jJsPcMm+cXOvggR3+G+OXAYQeFjWVnznaw==", - "dev": true, - "requires": { - "promise-map-series": "^0.2.1", - "quick-temp": "^0.1.3", - "rimraf": "^2.3.4", - "symlink-or-copy": "^1.1.8" - }, - "dependencies": { - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "broccoli-stew": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/broccoli-stew/-/broccoli-stew-3.0.0.tgz", - "integrity": "sha512-NXfi+Vas24n3Ivo21GvENTI55qxKu7OwKRnCLWXld8MiLiQKQlWIq28eoARaFj0lTUFwUa4jKZeA7fW9PiWQeg==", - "dev": true, - "requires": { - "broccoli-debug": "^0.6.5", - "broccoli-funnel": "^2.0.0", - "broccoli-merge-trees": "^3.0.1", - "broccoli-persistent-filter": "^2.3.0", - "broccoli-plugin": "^2.1.0", - "chalk": "^2.4.1", - "debug": "^4.1.1", - "ensure-posix-path": "^1.0.1", - "fs-extra": "^8.0.1", - "minimatch": "^3.0.4", - "resolve": "^1.11.1", - "rsvp": "^4.8.5", - "symlink-or-copy": "^1.2.0", - "walk-sync": "^1.1.3" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "browserslist": { - "version": "4.21.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", - "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "can-symlink": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/can-symlink/-/can-symlink-1.0.0.tgz", - "integrity": "sha512-RbsNrFyhwkx+6psk/0fK/Q9orOUr9VMxohGd8vTa4djf4TGLfblBgUfqZChrZuW0Q+mz2eBPFLusw9Jfukzmhg==", - "dev": true, - "requires": { - "tmp": "0.0.28" - }, - "dependencies": { - "tmp": { - "version": "0.0.28", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.28.tgz", - "integrity": "sha512-c2mmfiBmND6SOVxzogm1oda0OJ1HZVIk/5n26N59dDTh80MUeavpiCls4PGAdkX1PFkKokLpcf7prSjCeXLsJg==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.1" - } - } - } - }, - "caniuse-lite": { - "version": "1.0.30001515", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001515.tgz", - "integrity": "sha512-eEFDwUOZbE24sb+Ecsx3+OvNETqjWIdabMy52oOkIgcUtAsQifjUG9q4U9dgTHJM2mfk4uEPxc0+xuFdJ629QA==", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "dev": true - }, - "clean-up-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clean-up-path/-/clean-up-path-1.0.0.tgz", - "integrity": "sha512-PHGlEF0Z6976qQyN6gM7kKH6EH0RdfZcc8V+QhFe36eRxV0SMH5OUBZG7Bxa9YcreNzyNbK63cGiZxdSZgosRw==", - "dev": true - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-spinners": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", - "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", - "dev": true - }, - "cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - } - }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true - }, - "commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "css-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", - "dev": true, - "requires": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" - } - }, - "date-fns": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", - "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.21.0" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, - "requires": { - "clone": "^1.0.2" - } - }, - "define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", - "dev": true, - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dev": true, - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "editions": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/editions/-/editions-1.3.4.tgz", - "integrity": "sha512-gzao+mxnYDzIysXKMQi/+M1mjy/rjestjg6OPoYTtI+3Izp23oiGZitsl9lPDPiTGXbcSIk1iJWhliSaglxnUg==", - "dev": true - }, - "electron-to-chromium": { - "version": "1.4.460", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.460.tgz", - "integrity": "sha512-kKiHnbrHME7z8E6AYaw0ehyxY5+hdaRmeUbjBO22LZMdqTYCO29EvF0T1cQ3pJ1RN5fyMcHl1Lmcsdt9WWJpJQ==", - "dev": true - }, - "ember-cli-babel-plugin-helpers": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ember-cli-babel-plugin-helpers/-/ember-cli-babel-plugin-helpers-1.1.1.tgz", - "integrity": "sha512-sKvOiPNHr5F/60NLd7SFzMpYPte/nnGkq/tMIfXejfKHIhaiIkYFqX8Z9UFTKWLLn+V7NOaby6niNPZUdvKCRw==", - "dev": true - }, - "ember-cli-version-checker": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/ember-cli-version-checker/-/ember-cli-version-checker-5.1.2.tgz", - "integrity": "sha512-rk7GY+FmLn/2e22HsZs0Ycrz8HQ1W3Fv+2TFOuEFW9optnDXDgkntPBIl6gact/LHsfBM5RKbM3dHsIIeLgl0Q==", - "dev": true, - "requires": { - "resolve-package-path": "^3.1.0", - "semver": "^7.3.4", - "silent-error": "^1.1.1" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "ember-rfc176-data": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/ember-rfc176-data/-/ember-rfc176-data-0.3.18.tgz", - "integrity": "sha512-JtuLoYGSjay1W3MQAxt3eINWXNYYQliK90tLwtb8aeCuQK8zKGCRbBodVIrkcTqshULMnRuTOS6t1P7oQk3g6Q==", - "dev": true - }, - "ember-template-imports": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/ember-template-imports/-/ember-template-imports-3.4.2.tgz", - "integrity": "sha512-OS8TUVG2kQYYwP3netunLVfeijPoOKIs1SvPQRTNOQX4Pu8xGGBEZmrv0U1YTnQn12Eg+p6w/0UdGbUnITjyzw==", - "dev": true, - "requires": { - "babel-import-util": "^0.2.0", - "broccoli-stew": "^3.0.0", - "ember-cli-babel-plugin-helpers": "^1.1.1", - "ember-cli-version-checker": "^5.1.2", - "line-column": "^1.0.2", - "magic-string": "^0.25.7", - "parse-static-imports": "^1.1.0", - "string.prototype.matchall": "^4.0.6", - "validate-peer-dependencies": "^1.1.0" - } - }, - "ember-template-lint": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/ember-template-lint/-/ember-template-lint-5.11.0.tgz", - "integrity": "sha512-uoVz4IAFRyg3JnMTL+SDtZkHPZM6O1qhvvgcb7LD6325W6asjPZGF1YHDyxnssEOnCSVsu1S5bk77tqE5NnyNg==", - "dev": true, - "requires": { - "@lint-todo/utils": "^13.0.3", - "aria-query": "^5.0.2", - "chalk": "^5.2.0", - "ci-info": "^3.8.0", - "date-fns": "^2.30.0", - "ember-template-imports": "^3.4.2", - "ember-template-recast": "^6.1.4", - "eslint-formatter-kakoune": "^1.0.0", - "find-up": "^6.3.0", - "fuse.js": "^6.5.3", - "get-stdin": "^9.0.0", - "globby": "^13.2.0", - "is-glob": "^4.0.3", - "language-tags": "^1.0.8", - "micromatch": "^4.0.5", - "resolve": "^1.22.3", - "v8-compile-cache": "^2.3.0", - "yargs": "^17.7.2" - }, - "dependencies": { - "chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "dev": true - } - } - }, - "ember-template-lint-plugin-discourse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ember-template-lint-plugin-discourse/-/ember-template-lint-plugin-discourse-3.0.0.tgz", - "integrity": "sha512-4zi/qN+vXs0ZpJZrwdMfZ5hMThJbeVCFdof6iek4PmgIJhnlA0lzqIa1BrKpSKhr3ckd5K0rUMNcCAm0uKNOtg==", - "dev": true - }, - "ember-template-recast": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/ember-template-recast/-/ember-template-recast-6.1.4.tgz", - "integrity": "sha512-fCh+rOK6z+/tsdkTbOE+e7f84P6ObnIRQrCCrnu21E4X05hPeradikIkRMhJdxn4NWrxitfZskQDd37TR/lsNQ==", - "dev": true, - "requires": { - "@glimmer/reference": "^0.84.3", - "@glimmer/syntax": "^0.84.3", - "@glimmer/validator": "^0.84.3", - "async-promise-queue": "^1.0.5", - "colors": "^1.4.0", - "commander": "^8.3.0", - "globby": "^11.0.3", - "ora": "^5.4.0", - "slash": "^3.0.0", - "tmp": "^0.2.1", - "workerpool": "^6.4.0" - }, - "dependencies": { - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - } - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "ensure-posix-path": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ensure-posix-path/-/ensure-posix-path-1.1.1.tgz", - "integrity": "sha512-VWU0/zXzVbeJNXvME/5EmLuEj2TauvoaTz6aFYK1Z92JCBlDlZ3Gu0tuGR42kpW1754ywTs+QB0g5TP0oj9Zaw==", - "dev": true - }, - "es-abstract": { - "version": "1.21.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.3.tgz", - "integrity": "sha512-ZU4miiY1j3sGPFLJ34VJXEqhpmL+HGByCinGHv4HC+Fxl2fI2Z4yR6tl0mORnDr6PA8eihWo4LmSWDbvhALckg==", - "dev": true, - "requires": { - "array-buffer-byte-length": "^1.0.0", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.1", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.0", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.10" - } - }, - "es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "eslint": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.44.0.tgz", - "integrity": "sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==", - "dev": true, - "requires": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.1.0", - "@eslint/js": "8.44.0", - "@humanwhocodes/config-array": "^0.11.10", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.0", - "eslint-visitor-keys": "^3.4.1", - "espree": "^9.6.0", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "dependencies": { - "eslint-scope": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", - "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", - "dev": true - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - } - } - }, - "eslint-config-discourse": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-discourse/-/eslint-config-discourse-3.5.0.tgz", - "integrity": "sha512-IwxNmfyomRKrMCP3dsgxEepKYv/QW5tcLi/NRv7hl06uRK5o+a8QvrFjFiC+KfYcNRQhTQA4So+YwXSrVpCk0A==", - "dev": true, - "requires": { - "@babel/core": "^7.22.5", - "@babel/eslint-parser": "^7.22.5", - "@babel/plugin-proposal-decorators": "^7.22.5", - "ember-template-imports": "^3.4.1", - "ember-template-lint": "^5.10.3", - "ember-template-lint-plugin-discourse": "^3.0.0", - "eslint": "^8.43.0", - "eslint-plugin-discourse-ember": "latest", - "eslint-plugin-ember": "^11.8.0", - "eslint-plugin-lodash": "^7.1.0", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-sort-class-members": "^1.18.0", - "prettier": "2.8.8" - } - }, - "eslint-formatter-kakoune": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eslint-formatter-kakoune/-/eslint-formatter-kakoune-1.0.0.tgz", - "integrity": "sha512-Uk/TVLt6Nf6Xoz7C1iYuZjOSdJxe5aaauGRke8JhKeJwD66Y61/pY2FjtLP04Ooq9PwV34bzrkKkU2UZ5FtDRA==", - "dev": true - }, - "eslint-plugin-discourse-ember": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-discourse-ember/-/eslint-plugin-discourse-ember-0.0.3.tgz", - "integrity": "sha512-EFwWU4FlOSLBa4RolKZL8QD1eGOnvSkACLt4Big+o1ZUIpW7gGvfnJPtxkbaQ4XmhtZ5HetYt6862vVqhUMv9A==", - "dev": true, - "requires": { - "requireindex": "~1.1.0" - }, - "dependencies": { - "requireindex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.1.0.tgz", - "integrity": "sha512-LBnkqsDE7BZKvqylbmn7lTIVdpx4K/QCduRATpO5R+wtPmky/a8pN1bO2D6wXppn1497AJF9mNjqAXr6bdl9jg==", - "dev": true - } - } - }, - "eslint-plugin-ember": { - "version": "11.10.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-ember/-/eslint-plugin-ember-11.10.0.tgz", - "integrity": "sha512-/5VanfpfzIdmWgXWyQ6ylAJWITu8mXivRce06h0uoifVpUoGaBdAkwuto/PLGfDxWdi43xWUFLb5Tpkhx2MoFg==", - "dev": true, - "requires": { - "@ember-data/rfc395-data": "^0.0.4", - "@glimmer/syntax": "^0.84.2", - "css-tree": "^2.0.4", - "ember-rfc176-data": "^0.3.15", - "ember-template-imports": "^3.4.2", - "ember-template-recast": "^6.1.4", - "eslint-utils": "^3.0.0", - "estraverse": "^5.2.0", - "lodash.camelcase": "^4.1.1", - "lodash.kebabcase": "^4.1.1", - "magic-string": "^0.30.0", - "requireindex": "^1.2.0", - "snake-case": "^3.0.3" - }, - "dependencies": { - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - } - }, - "magic-string": { - "version": "0.30.1", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.1.tgz", - "integrity": "sha512-mbVKXPmS0z0G4XqFDCTllmDQ6coZzn94aMlb0o/A4HEHJCKcanlDZwYJgwnkmgD3jyWhUgj9VsPrfd972yPffA==", - "dev": true, - "requires": { - "@jridgewell/sourcemap-codec": "^1.4.15" - } - } - } - }, - "eslint-plugin-es": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", - "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", - "dev": true, - "requires": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" - } - }, - "eslint-plugin-lodash": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-lodash/-/eslint-plugin-lodash-7.4.0.tgz", - "integrity": "sha512-Tl83UwVXqe1OVeBRKUeWcfg6/pCW1GTRObbdnbEJgYwjxp5Q92MEWQaH9+dmzbRt6kvYU1Mp893E79nJiCSM8A==", - "dev": true, - "requires": { - "lodash": "^4.17.21" - } - }, - "eslint-plugin-node": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", - "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", - "dev": true, - "requires": { - "eslint-plugin-es": "^3.0.0", - "eslint-utils": "^2.0.0", - "ignore": "^5.1.1", - "minimatch": "^3.0.4", - "resolve": "^1.10.1", - "semver": "^6.1.0" - } - }, - "eslint-plugin-sort-class-members": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-sort-class-members/-/eslint-plugin-sort-class-members-1.18.0.tgz", - "integrity": "sha512-y4r5OC3LJNHJZCWfVwFnnRiNrQ/LRf7Pb1wD6/CP8Y4qmUvjtmkwrLvyY755p8SFTOOXVd33HgFuF3XxVW1xbg==", - "dev": true, - "requires": {} - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "dependencies": { - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - } - } - }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - }, - "espree": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.0.tgz", - "integrity": "sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A==", - "dev": true, - "requires": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", - "dev": true - } - } - }, - "esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-glob": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.0.tgz", - "integrity": "sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "fast-ordered-set": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fast-ordered-set/-/fast-ordered-set-1.0.3.tgz", - "integrity": "sha512-MxBW4URybFszOx1YlACEoK52P6lE3xiFcPaGCUZ7QQOZ6uJXKo++Se8wa31SjcZ+NC/fdAWX7UtKEfaGgHS2Vg==", - "dev": true, - "requires": { - "blank-object": "^1.0.1" - } - }, - "fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "dev": true, - "requires": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", - "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", - "dev": true - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "requires": { - "is-callable": "^1.1.3" - } - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs-tree-diff": { - "version": "0.5.9", - "resolved": "https://registry.npmjs.org/fs-tree-diff/-/fs-tree-diff-0.5.9.tgz", - "integrity": "sha512-872G8ax0kHh01m9n/2KDzgYwouKza0Ad9iFltBpNykvROvf2AGtoOzPJgGx125aolGPER3JuC7uZFrQ7bG1AZw==", - "dev": true, - "requires": { - "heimdalljs-logger": "^0.1.7", - "object-assign": "^4.1.0", - "path-posix": "^1.0.0", - "symlink-or-copy": "^1.1.8" - } - }, - "fs-updater": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fs-updater/-/fs-updater-1.0.4.tgz", - "integrity": "sha512-0pJX4mJF/qLsNEwTct8CdnnRdagfb+LmjRPJ8sO+nCnAZLW0cTmz4rTgU25n+RvTuWSITiLKrGVJceJPBIPlKg==", - "dev": true, - "requires": { - "can-symlink": "^1.0.0", - "clean-up-path": "^1.0.0", - "heimdalljs": "^0.2.5", - "heimdalljs-logger": "^0.1.9", - "rimraf": "^2.6.2" - }, - "dependencies": { - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true - }, - "fuse.js": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-6.6.2.tgz", - "integrity": "sha512-cJaJkxCCxC8qIIcPBF9yGxY0W/tVZS3uEISDxhYIdtk8OL93pe+6Zj7LjCqVV4dzbqcriOZ+kQ/NE4RXZHsIGA==", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - } - }, - "get-stdin": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz", - "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==", - "dev": true - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3" - } - }, - "globby": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", - "dev": true, - "requires": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "dependencies": { - "slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true - } - } - }, - "gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.3" - } - }, - "graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "hash-for-dep": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/hash-for-dep/-/hash-for-dep-1.5.1.tgz", - "integrity": "sha512-/dQ/A2cl7FBPI2pO0CANkvuuVi/IFS5oTyJ0PsOb6jW6WbVW1js5qJXMJTNbWHXBIPdFTWFbabjB+mE0d+gelw==", - "dev": true, - "requires": { - "broccoli-kitchen-sink-helpers": "^0.3.1", - "heimdalljs": "^0.2.3", - "heimdalljs-logger": "^0.1.7", - "path-root": "^0.1.1", - "resolve": "^1.10.0", - "resolve-package-path": "^1.0.11" - }, - "dependencies": { - "resolve-package-path": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/resolve-package-path/-/resolve-package-path-1.2.7.tgz", - "integrity": "sha512-fVEKHGeK85bGbVFuwO9o1aU0n3vqQGrezPc51JGu9UTXpFQfWq5qCeKxyaRUSvephs+06c5j5rPq/dzHGEo8+Q==", - "dev": true, - "requires": { - "path-root": "^0.1.1", - "resolve": "^1.10.0" - } - } - } - }, - "heimdalljs": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/heimdalljs/-/heimdalljs-0.2.6.tgz", - "integrity": "sha512-o9bd30+5vLBvBtzCPwwGqpry2+n0Hi6H1+qwt6y+0kwRHGGF8TFIhJPmnuM0xO97zaKrDZMwO/V56fAnn8m/tA==", - "dev": true, - "requires": { - "rsvp": "~3.2.1" - }, - "dependencies": { - "rsvp": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.2.1.tgz", - "integrity": "sha512-Rf4YVNYpKjZ6ASAmibcwTNciQ5Co5Ztq6iZPEykHpkoflnD/K5ryE/rHehFsTm4NJj8nKDhbi3eKBWGogmNnkg==", - "dev": true - } - } - }, - "heimdalljs-logger": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/heimdalljs-logger/-/heimdalljs-logger-0.1.10.tgz", - "integrity": "sha512-pO++cJbhIufVI/fmB/u2Yty3KJD0TqNPecehFae0/eps0hkZ3b4Zc/PezUMOpYuHFQbA7FxHZxa305EhmjLj4g==", - "dev": true, - "requires": { - "debug": "^2.2.0", - "heimdalljs": "^0.2.6" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true - }, - "ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", - "dev": true, - "requires": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" - } - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true - }, - "is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true - }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - } - }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true - }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - }, - "istextorbinary": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-2.1.0.tgz", - "integrity": "sha512-kT1g2zxZ5Tdabtpp9VSdOzW9lb6LXImyWbzbQeTxoRtHhurC9Ej9Wckngr2+uepPL09ky/mJHmN9jeJPML5t6A==", - "dev": true, - "requires": { - "binaryextensions": "1 || 2", - "editions": "^1.1.1", - "textextensions": "1 || 2" - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", - "dev": true - }, - "language-tags": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.8.tgz", - "integrity": "sha512-aWAZwgPLS8hJ20lNPm9HNVs4inexz6S2sQa3wx/+ycuutMNE5/IfYxiWYBbi+9UWCQVaXYCOPUl6gFrPR7+jGg==", - "dev": true, - "requires": { - "language-subtag-registry": "^0.3.20" - } - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "line-column": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/line-column/-/line-column-1.0.2.tgz", - "integrity": "sha512-Ktrjk5noGYlHsVnYWh62FLVs4hTb8A3e+vucNZMgPeAOITdshMSgv4cCZQeRDjm7+goqmo6+liZwTXo+U3sVww==", - "dev": true, - "requires": { - "isarray": "^1.0.0", - "isobject": "^2.0.0" - } - }, - "locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "dev": true, - "requires": { - "p-locate": "^6.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "dev": true - }, - "lodash.kebabcase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", - "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", - "dev": true - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - } - }, - "lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dev": true, - "requires": { - "tslib": "^2.0.3" - } - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.8" - } - }, - "matcher-collection": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/matcher-collection/-/matcher-collection-1.1.2.tgz", - "integrity": "sha512-YQ/teqaOIIfUHedRam08PB3NK7Mjct6BvzRnJmpGDm8uFXpNr1sbY4yuflI5JcEs6COpYA0FpRQhSDBf1tT95g==", - "dev": true, - "requires": { - "minimatch": "^3.0.2" - } - }, - "mdn-data": { - "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", - "dev": true - }, - "merge-trees": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-trees/-/merge-trees-2.0.0.tgz", - "integrity": "sha512-5xBbmqYBalWqmhYm51XlohhkmVOua3VAUrrWh8t9iOkaLpS6ifqm/UVuUjQCeDVJ9Vx3g2l6ihfkbLSTeKsHbw==", - "dev": true, - "requires": { - "fs-updater": "^1.0.4", - "heimdalljs": "^0.2.5" - } - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "mktemp": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/mktemp/-/mktemp-0.4.0.tgz", - "integrity": "sha512-IXnMcJ6ZyTuhRmJSjzvHSRhlVPiN9Jwc6e59V0bEJ0ba6OBeX2L0E+mRN1QseeOF4mM+F1Rit6Nh7o+rl2Yn/A==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dev": true, - "requires": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true - }, - "object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dev": true, - "requires": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" - } - }, - "ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "requires": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true - }, - "p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dev": true, - "requires": { - "yocto-queue": "^1.0.0" - } - }, - "p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dev": true, - "requires": { - "p-limit": "^4.0.0" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-static-imports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/parse-static-imports/-/parse-static-imports-1.1.0.tgz", - "integrity": "sha512-HlxrZcISCblEV0lzXmAHheH/8qEkKgmqkdxyHTPbSqsTUV8GzqmN1L+SSti+VbNPfbBO3bYLPHDiUs2avbAdbA==", - "dev": true - }, - "path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-posix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/path-posix/-/path-posix-1.0.0.tgz", - "integrity": "sha512-1gJ0WpNIiYcQydgg3Ed8KzvIqTsDpNwq+cjBCssvBtuTWjEqY1AW+i+OepiEMqDCzyro9B2sLAe4RBPajMYFiA==", - "dev": true - }, - "path-root": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", - "dev": true, - "requires": { - "path-root-regex": "^0.1.0" - } - }, - "path-root-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "dev": true - }, - "promise-map-series": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/promise-map-series/-/promise-map-series-0.2.3.tgz", - "integrity": "sha512-wx9Chrutvqu1N/NHzTayZjE1BgIwt6SJykQoCOic4IZ9yUDjKyVYrpLa/4YCNsV61eRENfs29hrEquVuB13Zlw==", - "dev": true, - "requires": { - "rsvp": "^3.0.14" - }, - "dependencies": { - "rsvp": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", - "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", - "dev": true - } - } - }, - "proper-lockfile": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", - "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.4", - "retry": "^0.12.0", - "signal-exit": "^3.0.2" - } - }, - "punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "quick-temp": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/quick-temp/-/quick-temp-0.1.8.tgz", - "integrity": "sha512-YsmIFfD9j2zaFwJkzI6eMG7y0lQP7YeWzgtFgNl38pGWZBSXJooZbOWwkcRot7Vt0Fg9L23pX0tqWU3VvLDsiA==", - "dev": true, - "requires": { - "mktemp": "~0.4.0", - "rimraf": "^2.5.4", - "underscore.string": "~3.3.4" - }, - "dependencies": { - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true - }, - "regexp.prototype.flags": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", - "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "functions-have-names": "^1.2.3" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true - }, - "requireindex": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", - "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", - "dev": true - }, - "resolve": { - "version": "1.22.3", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.3.tgz", - "integrity": "sha512-P8ur/gp/AmbEzjr729bZnLjXK5Z+4P0zhIJgBgzqRih7hL7BOukHGtSTA3ACMY467GRFz3duQsi0bDZdR7DKdw==", - "dev": true, - "requires": { - "is-core-module": "^2.12.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "resolve-package-path": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/resolve-package-path/-/resolve-package-path-3.1.0.tgz", - "integrity": "sha512-2oC2EjWbMJwvSN6Z7DbDfJMnD8MYEouaLn5eIX0j8XwPsYCVIyY9bbnX88YHVkbr8XHqvZrYbxaLPibfTYKZMA==", - "dev": true, - "requires": { - "path-root": "^0.1.1", - "resolve": "^1.17.0" - } - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", - "dev": true - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - } - }, - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "silent-error": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/silent-error/-/silent-error-1.1.1.tgz", - "integrity": "sha512-n4iEKyNcg4v6/jpb3c0/iyH2G1nzUNl7Gpqtn/mHIJK9S/q/7MCfoO4rwVOoO59qPFIc0hVHvMbiOJ0NdtxKKw==", - "dev": true, - "requires": { - "debug": "^2.2.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "simple-html-tokenizer": { - "version": "0.5.11", - "resolved": "https://registry.npmjs.org/simple-html-tokenizer/-/simple-html-tokenizer-0.5.11.tgz", - "integrity": "sha512-C2WEK/Z3HoSFbYq8tI7ni3eOo/NneSPRoPpcM7WdLjFOArFuyXEjAoCdOC3DgMfRyziZQ1hCNR4mrNdWEvD0og==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "snake-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", - "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", - "dev": true, - "requires": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true - }, - "sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, - "sprintf-js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", - "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", - "dev": true - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "string.prototype.matchall": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", - "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4" - } - }, - "string.prototype.trim": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", - "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "symlink-or-copy": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/symlink-or-copy/-/symlink-or-copy-1.3.1.tgz", - "integrity": "sha512-0K91MEXFpBUaywiwSSkmKjnGcasG/rVBXFLJz5DrgGabpYD6N+3yZrfD6uUIfpuTu65DZLHi7N8CizHc07BPZA==", - "dev": true - }, - "sync-disk-cache": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/sync-disk-cache/-/sync-disk-cache-1.3.4.tgz", - "integrity": "sha512-GlkGeM81GPPEKz/lH7QUTbvqLq7K/IUTuaKDSMulP9XQ42glqNJIN/RKgSOw4y8vxL1gOVvj+W7ruEO4s36eCw==", - "dev": true, - "requires": { - "debug": "^2.1.3", - "heimdalljs": "^0.2.3", - "mkdirp": "^0.5.0", - "rimraf": "^2.2.8", - "username-sync": "^1.0.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "textextensions": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-2.6.0.tgz", - "integrity": "sha512-49WtAWS+tcsy93dRt6P0P3AMD2m5PvXRhuEA0kaXos5ZLlujtYmpmFsB+QvWUSxE1ZsstmYXfQ7L40+EcQgpAQ==", - "dev": true - }, - "tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "requires": { - "rimraf": "^3.0.0" - } - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tree-sync": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/tree-sync/-/tree-sync-1.4.0.tgz", - "integrity": "sha512-YvYllqh3qrR5TAYZZTXdspnIhlKAYezPYw11ntmweoceu4VK+keN356phHRIIo1d+RDmLpHZrUlmxga2gc9kSQ==", - "dev": true, - "requires": { - "debug": "^2.2.0", - "fs-tree-diff": "^0.5.6", - "mkdirp": "^0.5.1", - "quick-temp": "^0.1.5", - "walk-sync": "^0.3.3" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "walk-sync": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/walk-sync/-/walk-sync-0.3.4.tgz", - "integrity": "sha512-ttGcuHA/OBnN2pcM6johpYlEms7XpO5/fyKIr48541xXedan4roO8cS1Q2S/zbbjGH/BarYDAMeS2Mi9HE5Tig==", - "dev": true, - "requires": { - "ensure-posix-path": "^1.0.0", - "matcher-collection": "^1.0.0" - } - } - } - }, - "tslib": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz", - "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==", - "dev": true - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - }, - "typed-array-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" - } - }, - "typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" - } - }, - "unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - } - }, - "underscore.string": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.6.tgz", - "integrity": "sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ==", - "dev": true, - "requires": { - "sprintf-js": "^1.1.1", - "util-deprecate": "^1.0.2" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - }, - "upath": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", - "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", - "dev": true - }, - "update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "dev": true, - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "username-sync": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/username-sync/-/username-sync-1.0.3.tgz", - "integrity": "sha512-m/7/FSqjJNAzF2La448c/aEom0gJy7HY7Y509h6l0ePvEkFictAGptwWaj1msWJ38JbfEDOUoE8kqFee9EHKdA==", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "validate-peer-dependencies": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/validate-peer-dependencies/-/validate-peer-dependencies-1.2.0.tgz", - "integrity": "sha512-nd2HUpKc6RWblPZQ2GDuI65sxJ2n/UqZwSBVtj64xlWjMx0m7ZB2m9b2JS3v1f+n9VWH/dd1CMhkHfP6pIdckA==", - "dev": true, - "requires": { - "resolve-package-path": "^3.1.0", - "semver": "^7.3.2" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "walk-sync": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/walk-sync/-/walk-sync-1.1.4.tgz", - "integrity": "sha512-nowc9thB/Jg0KW4TgxoRjLLYRPvl3DB/98S89r4ZcJqq2B0alNcKDh6pzLkBSkPMzRSMsJghJHQi79qw0YWEkA==", - "dev": true, - "requires": { - "@types/minimatch": "^3.0.3", - "ensure-posix-path": "^1.1.0", - "matcher-collection": "^1.1.1" - } - }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "requires": { - "defaults": "^1.0.3" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "which-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.10.tgz", - "integrity": "sha512-uxoA5vLUfRPdjCuJ1h5LlYdmTLbYfums398v3WLkM+i/Wltl2/XyZpQWKbN++ck5L64SR/grOHqtXCUKmlZPNA==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" - } - }, - "workerpool": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.4.0.tgz", - "integrity": "sha512-i3KR1mQMNwY2wx20ozq2EjISGtQWDIfV56We+yGJ5yDs8jTwQiLLaqHlkBHITlCuJnYlVRmXegxFxZg7gqI++A==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "requires": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - } - }, - "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true - }, - "yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", - "dev": true - } - } -} diff --git a/package.json b/package.json deleted file mode 100644 index 5022733..0000000 --- a/package.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "discourse-table-builder", - "description": "Create and edit markdown tables using a spreadsheet editor.", - "version": "0.0.1", - "repository": "https://github.com/discourse/discourse-table-builder", - "author": "Keegan George", - "license": "MIT", - "scripts": { - "build": "bash ./build.bash" - }, - "devDependencies": { - "eslint-config-discourse": "^3.4.0" - } -} diff --git a/scss/modal/insert-table-modal.scss b/scss/modal/insert-table-modal.scss deleted file mode 100644 index 60fe5f7..0000000 --- a/scss/modal/insert-table-modal.scss +++ /dev/null @@ -1,78 +0,0 @@ -.btn-insert-table { - background: var(--tertiary); - color: var(--secondary); - - .d-icon { - color: var(--secondary); - } - - .discourse-no-touch & { - &:hover { - background-color: var(--tertiary-hover); - color: var(--secondary); - - .d-icon { - color: var(--secondary); - } - } - } -} - -.insert-table-modal { - display: flex; - flex-direction: column; - align-items: flex-start; - - .d-modal__container, - .modal-inner-container { - --modal-max-width: $reply-area-max-width; - width: 100%; - height: 100%; - max-height: unset; - - display: grid; - grid-template-rows: auto 1fr auto; - } - - .modal-body { - padding: 0; - margin: 0; - } - - .d-modal__footer, - .modal-footer { - display: flex; - align-items: center; - justify-content: space-between; - - .secondary-actions { - display: flex; - align-items: center; - gap: 0.5rem; - - .edit-reason { - display: flex; - align-items: center; - gap: 0.5rem; - } - - .btn { - margin-right: 0; - } - - input { - margin: 0; - } - } - - .secondary-actions .tippy-content { - h4 { - color: var(--primary); - } - li { - margin-block: 0.25rem; - color: var(--primary-high); - } - } - } -} diff --git a/scss/post/table-edit-decorator.scss b/scss/post/table-edit-decorator.scss deleted file mode 100644 index b3b56ca..0000000 --- a/scss/post/table-edit-decorator.scss +++ /dev/null @@ -1,41 +0,0 @@ -.open-popup-link { - display: inline; - margin-inline: 0.25em; -} - -.btn-edit-table { - -webkit-user-select: none; - -webkit-touch-callout: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.fullscreen-table-wrapper:hover .btn-edit-table { - opacity: 100%; -} - -.mobile-view { - .btn-edit-table { - display: none; - z-index: 2; - position: absolute; - top: 1rem; - left: 1rem; - } - - .fullscreen-table-wrapper { - position: relative; - - &:hover { - table { - opacity: 0.5; - } - - .btn-edit-table { - display: block; - z-index: 2; - } - } - } -} diff --git a/scss/theme/jspreadsheet-theme.scss b/scss/theme/jspreadsheet-theme.scss deleted file mode 100644 index a05f455..0000000 --- a/scss/theme/jspreadsheet-theme.scss +++ /dev/null @@ -1,272 +0,0 @@ -:root { - --jexcel_header_color: var(--primary-high); - --jexcel_header_color_highlighted: var(--primary-high); - --jexcel_header_background: var(--primary-very-low); - --jexcel_header_background_highlighted: var(--primary-low); - - --jexcel_content_color: var(--primary); - --jexcel_content_color_highlighted: var(--primary-high); - --jexcel_content_background: var(--secondary); - --jexcel_content_background_highlighted: var(--tertiary-very-low); - - --jexcel_menu_background: var(--secondary); - --jexcel_menu_background_highlighted: var(--secondary-very-high); - --jexcel_menu_color: var(--primary-medium); - --jexcel_menu_color_highlighted: var(--primary); - - --jexcel_border_color: var(--primary-low-mid); - --jexcel_border_color_highlighted: var(--tertiary-high); - - --active_color: var(--primary-very-low); - --active-color: var(--active_color); -} - -.jexcel { - border-bottom: 1px solid var(--jexcel_border_color); - border-right: transparent; - background-color: transparent; -} - -table.jexcel > thead > tr > td { - border-top: 1px solid transparent; - border-left: 1px solid transparent; - border-right: 1px solid transparent; - border-bottom: 1px solid #000; - background-color: #fff; - padding: 10px; - font-weight: bold; -} -table.jexcel > tbody > tr > td { - padding: 8px; - border-right: 1px solid transparent; - border-left: 1px solid transparent; -} - -table.jexcel { - border-bottom: 1px solid var(--jexcel_border_color); -} - -.jcontextmenu.jexcel_contextmenu hr { - border-color: var(--jexcel_border_color); -} - -.jexcel_container .jcontextmenu > div a { - color: var(--jexcel_menu_color); -} - -.jexcel_corner { - background-color: var(--tertiary); -} - -.jexcel > tbody > tr > td, -.jexcel > thead > tr > td { - border-top: 1px solid var(--jexcel_border_color); - border-left: 1px solid var(--jexcel_border_color); - background-color: var(--jexcel_content_background); - color: var(--jexcel_content_color); -} - -.jexcel > tbody > tr > td:first-child, -.jexcel > thead > tr > td { - background-color: var(--jexcel_header_background); - color: var(--jexcel_header_color); -} - -.jexcel > thead > tr > td.selected, -.jexcel > tbody > tr.selected > td:first-child { - background-color: var(--jexcel_header_background_highlighted); - color: var(--jexcel_header_color_highlighted); -} - -table.jexcel > tbody > tr > td:first-child { - background-color: var(--jexcel_header_background); -} - -table.jexcel > tbody > tr.selected > td:first-child { - background-color: var(--jexcel_header_background_highlighted); -} - -.jexcel > tbody > tr > td.jexcel_cursor a { - color: var(--active-color); -} - -.jexcel_pagination > div > div { - color: var(--jexcel_header_color); - background: var(--jexcel_header_background); - border: 1px solid var(--jexcel_border_color); -} - -.jexcel_page, -.jexcel_container input, -.jexcel_container select { - color: var(--jexcel_header_color); - background: var(--jexcel_header_background); - border: 1px solid var(--jexcel_border_color); -} - -.jexcel_contextmenu.jcontextmenu { - border: 1px solid var(--jexcel_border_color); - background: var(--jexcel_menu_background); - color: var(--jexcel_menu_color); - box-shadow: 0 12px 12px rgba(0, 0, 0, 0.15); -} - -.jcontextmenu > div a { - color: var(--jexcel_menu_color); -} - -.jcontextmenu > div:not(.contextmenu-line):hover a { - color: var(--jexcel_menu_color_highlighted); -} - -.jcontextmenu > div:not(.contextmenu-line):hover { - background: var(--jexcel_menu_background_highlighted); -} - -.jexcel_dropdown .jdropdown-container, -.jexcel_dropdown .jdropdown-content { - background-color: var(--jexcel_content_background); - color: var(--jexcel_content_color); -} - -.jexcel_dropdown .jdropdown-item { - color: var(--jexcel_content_color); -} - -.jexcel_dropdown .jdropdown-item:hover, -.jexcel_dropdown .jdropdown-selected, -.jexcel_dropdown .jdropdown-cursor { - background-color: var(--jexcel_content_background_highlighted); - color: var(--jexcel_content_color_highlighted); -} - -.jexcel .jcalendar-content { - background-color: var(--jexcel_header_background); - color: var(--jexcel_header_color); -} - -.jexcel .jcalendar-content > table { - background-color: var(--jexcel_content_background); - color: var(--jexcel_content_color); -} - -.jexcel .jcalendar-weekday { - background-color: var(--jexcel_content_background_highlighted); - color: var(--jexcel_content_color_highlighted); -} - -.jexcel .jcalendar-sunday { - color: var(--jexcel_header_color); -} - -.jexcel .jcalendar-selected { - background-color: var(--jexcel_content_background_highlighted); - color: var(--jexcel_content_color_highlighted); -} - -.jexcel_toolbar i.jexcel_toolbar_item { - color: var(--jexcel_content_color); -} - -.jexcel_toolbar i.jexcel_toolbar_item:hover { - background: var(--jexcel_content_background_highlighted); - color: var(--jexcel_content_color_highlighted); -} - -.jexcel_toolbar { - background: var(--jexcel_header_background); -} - -.jexcel_content::-webkit-scrollbar-track { - background: var(--jexcel_background_head); -} - -.jexcel_content::-webkit-scrollbar-thumb { - background: var(--jexcel_background_head_highlighted); -} - -.jexcel_border_main { - border: 1px solid #000; - border-color: var(--jexcel_border_color_highlighted); -} - -.jexcel .highlight { - background-color: var(--jexcel_content_background_highlighted); -} - -.jexcel .highlight-bottom { - border-bottom: 1.5px solid var(--jexcel_border_color_highlighted); -} -.jexcel .highlight-right { - border-right: 1.5px solid var(--jexcel_border_color_highlighted); -} -.jexcel .highlight-left { - border-left: 1.5px solid var(--jexcel_border_color_highlighted); -} -.jexcel .highlight-top { - border-top: 1.5px solid var(--jexcel_border_color_highlighted); -} -.jexcel .copying-top { - border-top-color: var(--jexcel_border_color_highlighted); -} -.jexcel .copying-right { - border-right-color: var(--jexcel_border_color_highlighted); -} -.jexcel .copying-left { - border-left-color: var(--jexcel_border_color_highlighted); -} -.jexcel .copying-bottom { - border-bottom-color: var(--jexcel_border_color_highlighted); -} -.jexcel_border_main, -.jexcel .highlight-top.highlight-left, -.jexcel .highlight-top, -.jexcel .highlight-left { - -webkit-box-shadow: unset; - box-shadow: unset; -} - -table.jexcel > thead > tr > td { - border-top: 1px solid var(--jexcel_border_color); - border-right: 1px solid var(--jexcel_border_color); - border-bottom: 1px solid var(--jexcel_border_color); - background-color: var(--jexcel_header_background); - - &:first-child { - border-left: 1px solid var(--jexcel_border_color); - } -} - -table.jexcel > thead > tr > td.selected { - background-color: var(--jexcel_header_background_highlighted); - color: var(--jexcel_header_color_highlighted); -} - -table.jexcel > tbody > tr > td { - border-right: 1px solid var(--jexcel_border_color); - - &:first-child { - border-left: 1px solid var(--jexcel_border_color); - } -} - -// Hides about item in context menu -.jcontextmenu > div:not(.contextmenu-line):last-child { - display: none; -} - -.jexcel_container { - padding: 0.5em; - min-width: 100%; - .jexcel_content { - min-width: 100%; - padding: 0; - table.jexcel { - min-width: 100%; - } - } -} - -.jexcel_container { - padding: 0; -} diff --git a/scss/vendor/jspreadsheet.scss b/scss/vendor/jspreadsheet.scss deleted file mode 100644 index 92572f0..0000000 --- a/scss/vendor/jspreadsheet.scss +++ /dev/null @@ -1,699 +0,0 @@ -:root { - --jexcel-border-color: #000; -} - -.jexcel_container { - display: inline-block; - padding-right: 2px; - box-sizing: border-box; - overscroll-behavior: contain; - outline: none; -} - -.jexcel_container.fullscreen { - position: fixed; - top: 0px; - left: 0px; - width: 100%; - height: 100%; - z-index: 21; -} - -.jexcel_container.fullscreen .jexcel_content { - overflow: auto; - width: 100%; - height: 100%; - background-color: #ffffff; -} - -.jexcel_container.with-toolbar .jexcel > thead > tr > td { - top: 0; -} - -.jexcel_container.fullscreen.with-toolbar { - height: calc(100% - 46px); -} - -.jexcel_content { - display: inline-block; - box-sizing: border-box; - padding-right: 3px; - padding-bottom: 3px; - position: relative; - scrollbar-width: thin; - scrollbar-color: #666 transparent; -} - -@supports (-moz-appearance: none) { - .jexcel_content { - padding-right: 10px; - } -} - -.jexcel_content::-webkit-scrollbar { - width: 8px; - height: 8px; -} - -.jexcel_content::-webkit-scrollbar-track { - background: #eee; -} - -.jexcel_content::-webkit-scrollbar-thumb { - background: #666; -} - -.jexcel { - border-collapse: separate; - table-layout: fixed; - white-space: nowrap; - empty-cells: show; - border: 0px; - background-color: #fff; - width: 0; - - border-top: 1px solid transparent; - border-left: 1px solid transparent; - border-right: 1px solid #ccc; - border-bottom: 1px solid #ccc; -} - -.jexcel > thead > tr > td { - border-top: 1px solid #ccc; - border-left: 1px solid #ccc; - border-right: 1px solid transparent; - border-bottom: 1px solid transparent; - background-color: #f3f3f3; - padding: 2px; - cursor: pointer; - box-sizing: border-box; - overflow: hidden; - position: -webkit-sticky; - position: sticky; - top: 0; - z-index: 2; -} - -.jexcel_container.with-toolbar .jexcel > thead > tr > td { - top: 42px; -} - -.jexcel > thead > tr > td.dragging { - background-color: #fff; - opacity: 0.5; -} - -.jexcel > thead > tr > td.selected { - background-color: #dcdcdc; -} - -.jexcel > thead > tr > td.arrow-up { - background-repeat: no-repeat; - background-position: center right 5px; - background-image: url("data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath d='M7 14l5-5 5 5H7z' fill='gray'/%3E%3C/svg%3E"); - text-decoration: underline; -} - -.jexcel > thead > tr > td.arrow-down { - background-repeat: no-repeat; - background-position: center right 5px; - background-image: url("data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath d='M7 10l5 5 5-5H7z' fill='gray'/%3E%3C/svg%3E"); - text-decoration: underline; -} - -.jexcel > tbody > tr > td:first-child { - position: relative; - background-color: #f3f3f3; - text-align: center; -} - -.jexcel > tbody.resizable > tr > td:first-child::before { - content: "\00a0"; - width: 100%; - height: 3px; - position: absolute; - bottom: 0px; - left: 0px; - cursor: row-resize; -} - -.jexcel > tbody.draggable > tr > td:first-child::after { - content: "\00a0"; - width: 3px; - height: 100%; - position: absolute; - top: 0px; - right: 0px; - cursor: move; -} - -.jexcel > tbody > tr.dragging > td { - background-color: #eee; - opacity: 0.5; -} - -.jexcel > tbody > tr > td { - border-top: 1px solid #ccc; - border-left: 1px solid #ccc; - border-right: 1px solid transparent; - border-bottom: 1px solid transparent; - padding: 4px; - white-space: nowrap; - box-sizing: border-box; - line-height: 1em; -} - -.jexcel_overflow > tbody > tr > td { - overflow: hidden; -} - -.jexcel > tbody > tr > td:last-child { - overflow: hidden; -} - -.jexcel > tbody > tr > td > img { - display: inline-block; - max-width: 100px; -} - -.jexcel > tbody > tr > td.readonly { - color: rgba(0, 0, 0, 0.3); -} -.jexcel > tbody > tr.selected > td:first-child { - background-color: #dcdcdc; -} -.jexcel > tbody > tr > td > select, -.jexcel > tbody > tr > td > input, -.jexcel > tbody > tr > td > textarea { - border: 0px; - border-radius: 0px; - outline: 0px; - width: 100%; - margin: 0px; - padding: 0px; - padding-right: 2px; - background-color: transparent; - box-sizing: border-box; -} - -.jexcel > tbody > tr > td > textarea { - resize: none; - padding-top: 6px !important; -} - -.jexcel > tbody > tr > td > input[type="checkbox"] { - width: 12px; - margin-top: 2px; -} -.jexcel > tbody > tr > td > input[type="radio"] { - width: 12px; - margin-top: 2px; -} - -.jexcel > tbody > tr > td > select { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - background-repeat: no-repeat; - background-position-x: 100%; - background-position-y: 40%; - background-image: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSdibGFjaycgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyB3aWR0aD0nMjQnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc+PHBhdGggZD0nTTcgMTBsNSA1IDUtNXonLz48cGF0aCBkPSdNMCAwaDI0djI0SDB6JyBmaWxsPSdub25lJy8+PC9zdmc+); -} - -.jexcel > tbody > tr > td.jexcel_dropdown { - background-repeat: no-repeat; - background-position: top 50% right 5px; - background-image: url("data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath d='M7 10l5 5 5-5H7z' fill='lightgray'/%3E%3C/svg%3E"); - text-overflow: ellipsis; - overflow-x: hidden; -} - -.jexcel > tbody > tr > td.jexcel_dropdown.jexcel_comments { - background: url("data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath d='M7 10l5 5 5-5H7z' fill='lightgray'/%3E%3C/svg%3E") - top 50% right 5px no-repeat, - url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFuGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDE5LTAxLTMxVDE4OjU1OjA4WiIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOS0wMS0zMVQxODo1NTowOFoiIHhtcDpNb2RpZnlEYXRlPSIyMDE5LTAxLTMxVDE4OjU1OjA4WiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDphMTlhZDJmOC1kMDI2LTI1NDItODhjOS1iZTRkYjkyMmQ0MmQiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDpkOGI5NDUyMS00ZjEwLWQ5NDktYjUwNC0wZmU1N2I3Nzk1MDEiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDplMzdjYmE1ZS1hYTMwLWNkNDUtYTAyNS1lOWYxZjk2MzUzOGUiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDplMzdjYmE1ZS1hYTMwLWNkNDUtYTAyNS1lOWYxZjk2MzUzOGUiIHN0RXZ0OndoZW49IjIwMTktMDEtMzFUMTg6NTU6MDhaIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmExOWFkMmY4LWQwMjYtMjU0Mi04OGM5LWJlNGRiOTIyZDQyZCIgc3RFdnQ6d2hlbj0iMjAxOS0wMS0zMVQxODo1NTowOFoiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4En6MDAAAAX0lEQVQYlX3KOw6AIBBAwS32RpJADXfx0pTET+ERZJ8F8RODFtONsG0QAoh0CSDM82dqodaBdQXnfoLZQM7gPai+wjNNE8R4pTuAYNZSKZASqL7CMy0LxNgJp30fKYUDi3+vIqb/+rUAAAAASUVORK5CYII=") - top right no-repeat; -} - -.jexcel > tbody > tr > td > .color { - width: 90%; - height: 10px; - margin: auto; -} - -.jexcel > tbody > tr > td > a { - text-decoration: underline; -} - -.jexcel > tbody > tr > td.highlight > a { - color: blue; - cursor: pointer; -} - -.jexcel > tfoot > tr > td { - border-top: 1px solid #ccc; - border-left: 1px solid #ccc; - border-right: 1px solid transparent; - border-bottom: 1px solid transparent; - background-color: #f3f3f3; - padding: 2px; - cursor: pointer; - box-sizing: border-box; - overflow: hidden; -} - -.jexcel .highlight { - background-color: rgba(0, 0, 0, 0.05); -} - -.jexcel .highlight-top { - border-top: 1px solid #000; /* var(--jexcel-border-color);*/ - box-shadow: 0px -1px #ccc; -} - -.jexcel .highlight-left { - border-left: 1px solid #000; /* var(--jexcel-border-color);*/ - box-shadow: -1px 0px #ccc; -} - -.jexcel .highlight-right { - border-right: 1px solid #000; /* var(--jexcel-border-color);*/ -} - -.jexcel .highlight-bottom { - border-bottom: 1px solid #000; /* var(--jexcel-border-color);*/ -} - -.jexcel .highlight-top.highlight-left { - box-shadow: -1px -1px #ccc; - -webkit-box-shadow: -1px -1px #ccc; - -moz-box-shadow: -1px -1px #ccc; -} - -.jexcel .highlight-selected { - background-color: rgba(0, 0, 0, 0); -} -.jexcel .selection { - background-color: rgba(0, 0, 0, 0.05); -} -.jexcel .selection-left { - border-left: 1px dotted #000; -} -.jexcel .selection-right { - border-right: 1px dotted #000; -} -.jexcel .selection-top { - border-top: 1px dotted #000; -} -.jexcel .selection-bottom { - border-bottom: 1px dotted #000; -} -.jexcel_corner { - position: absolute; - background-color: rgb(0, 0, 0); - height: 1px; - width: 1px; - border: 1px solid rgb(255, 255, 255); - top: -2000px; - left: -2000px; - cursor: crosshair; - box-sizing: initial; - z-index: 20; - padding: 2px; -} - -.jexcel .editor { - outline: 0px solid transparent; - overflow: visible; - white-space: nowrap; - text-align: left; - padding: 0px; - box-sizing: border-box; - overflow: visible !important; -} - -.jexcel .editor > input { - padding-left: 4px; -} - -.jexcel .editor .jupload { - position: fixed; - top: 100%; - z-index: 40; - user-select: none; - -webkit-font-smoothing: antialiased; - font-size: 0.875rem; - letter-spacing: 0.2px; - -webkit-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.14), - 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.2); - box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.14), - 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.2); - padding: 10px; - background-color: #fff; - width: 300px; - min-height: 225px; - margin-top: 2px; -} - -.jexcel .editor .jupload img { - width: 100%; - height: auto; -} - -.jexcel .editor .jexcel_richtext { - position: fixed; - top: 100%; - z-index: 40; - user-select: none; - -webkit-font-smoothing: antialiased; - font-size: 0.875rem; - letter-spacing: 0.2px; - -webkit-box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.14), - 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.2); - box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.14), - 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.2); - padding: 10px; - background-color: #fff; - min-width: 280px; - max-width: 310px; - margin-top: 2px; - text-align: left; -} - -.jexcel .editor .jclose:after { - position: absolute; - top: 0; - right: 0; - margin: 10px; - content: "close"; - font-family: "Material icons"; - font-size: 24px; - width: 24px; - height: 24px; - line-height: 24px; - cursor: pointer; - text-shadow: 0px 0px 5px #fff; -} - -.jexcel, -.jexcel td, -.jexcel_corner { - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-user-drag: none; - -khtml-user-drag: none; - -moz-user-drag: none; - -o-user-drag: none; - user-drag: none; -} - -.jexcel_textarea { - position: absolute; - top: -999px; - left: -999px; - width: 1px; - height: 1px; -} -.jexcel .dragline { - position: absolute; -} -.jexcel .dragline div { - position: relative; - top: -6px; - height: 5px; - width: 22px; -} -.jexcel .dragline div:hover { - cursor: move; -} - -.jexcel .onDrag { - background-color: rgba(0, 0, 0, 0.6); -} - -.jexcel .error { - border: 1px solid red; -} - -.jexcel thead td.resizing { - border-right-style: dotted !important; - border-right-color: red !important; -} - -.jexcel tbody tr.resizing > td { - border-bottom-style: dotted !important; - border-bottom-color: red !important; -} - -.jexcel tbody td.resizing { - border-right-style: dotted !important; - border-right-color: red !important; -} - -.jexcel .jdropdown-header { - border: 0px !important; - outline: none !important; - width: 100% !important; - height: 100% !important; - padding: 0px !important; - padding-left: 8px !important; -} - -.jexcel .jdropdown-container { - margin-top: 1px; -} - -.jexcel .jdropdown-container-header { - padding: 0px; - margin: 0px; - height: inherit; -} - -.jexcel .jdropdown-picker { - border: 0px !important; - padding: 0px !important; - width: inherit; - height: inherit; -} - -.jexcel .jexcel_comments { - background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFuGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDE5LTAxLTMxVDE4OjU1OjA4WiIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOS0wMS0zMVQxODo1NTowOFoiIHhtcDpNb2RpZnlEYXRlPSIyMDE5LTAxLTMxVDE4OjU1OjA4WiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDphMTlhZDJmOC1kMDI2LTI1NDItODhjOS1iZTRkYjkyMmQ0MmQiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDpkOGI5NDUyMS00ZjEwLWQ5NDktYjUwNC0wZmU1N2I3Nzk1MDEiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDplMzdjYmE1ZS1hYTMwLWNkNDUtYTAyNS1lOWYxZjk2MzUzOGUiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDplMzdjYmE1ZS1hYTMwLWNkNDUtYTAyNS1lOWYxZjk2MzUzOGUiIHN0RXZ0OndoZW49IjIwMTktMDEtMzFUMTg6NTU6MDhaIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmExOWFkMmY4LWQwMjYtMjU0Mi04OGM5LWJlNGRiOTIyZDQyZCIgc3RFdnQ6d2hlbj0iMjAxOS0wMS0zMVQxODo1NTowOFoiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4En6MDAAAAX0lEQVQYlX3KOw6AIBBAwS32RpJADXfx0pTET+ERZJ8F8RODFtONsG0QAoh0CSDM82dqodaBdQXnfoLZQM7gPai+wjNNE8R4pTuAYNZSKZASqL7CMy0LxNgJp30fKYUDi3+vIqb/+rUAAAAASUVORK5CYII="); - background-repeat: no-repeat; - background-position: top right; -} - -.jexcel .sp-replacer { - margin: 2px; - border: 0px; -} - -.jexcel > thead > tr.jexcel_filter > td > input { - border: 0px; - width: 100%; - outline: none; -} - -.jexcel_about { - float: right; - font-size: 0.7em; - padding: 2px; - text-transform: uppercase; - letter-spacing: 1px; - display: none; -} -.jexcel_about a { - color: #ccc; - text-decoration: none; -} - -.jexcel_about img { - display: none; -} - -.jexcel_filter { - display: flex; - justify-content: space-between; - margin-bottom: 4px; -} - -.jexcel_filter > div { - padding: 8px; - align-items: center; -} - -.jexcel_pagination { - display: flex; - justify-content: space-between; - align-items: center; -} - -.jexcel_pagination > div { - display: flex; - padding: 10px; -} - -.jexcel_pagination > div:last-child { - padding-right: 10px; - padding-top: 10px; -} - -.jexcel_pagination > div > div { - text-align: center; - width: 36px; - height: 36px; - line-height: 34px; - border: 1px solid #ccc; - box-sizing: border-box; - margin-left: 2px; - cursor: pointer; -} - -.jexcel_page { - font-size: 0.8em; -} - -.jexcel_page_selected { - font-weight: bold; - background-color: #f3f3f3; -} - -.jexcel_toolbar { - display: flex; - background-color: #f3f3f3; - border: 1px solid #ccc; - padding: 4px; - margin: 0px 2px 4px 1px; - position: sticky; - top: 0px; - z-index: 21; -} - -.jexcel_toolbar:empty { - display: none; -} - -.jexcel_toolbar i.jexcel_toolbar_item { - width: 24px; - height: 24px; - padding: 4px; - cursor: pointer; - display: inline-block; -} - -.jexcel_toolbar i.jexcel_toolbar_item:hover { - background-color: #ddd; -} - -.jexcel_toolbar select.jexcel_toolbar_item { - margin-left: 2px; - margin-right: 2px; - display: inline-block; - border: 0px; - background-color: transparent; - padding-right: 10px; -} - -.jexcel .dragging-left { - background-repeat: no-repeat; - background-position: top 50% left 0px; - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M14 7l-5 5 5 5V7z'/%3E%3Cpath fill='none' d='M24 0v24H0V0h24z'/%3E%3C/svg%3E"); -} - -.jexcel .dragging-right { - background-repeat: no-repeat; - background-position: top 50% right 0px; - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M10 17l5-5-5-5v10z'/%3E%3Cpath fill='none' d='M0 24V0h24v24H0z'/%3E%3C/svg%3E"); -} - -.jexcel_tabs .jexcel_tab { - display: none; -} - -.jexcel_tabs .jexcel_tab_link { - display: inline-block; - padding: 10px; - padding-left: 20px; - padding-right: 20px; - margin-right: 5px; - margin-bottom: 5px; - background-color: #f3f3f3; - cursor: pointer; -} - -.jexcel_tabs .jexcel_tab_link.selected { - background-color: #ddd; -} - -.jexcel_hidden_index > tbody > tr > td:first-child, -.jexcel_hidden_index > thead > tr > td:first-child, -.jexcel_hidden_index > tfoot > tr > td:first-child, -.jexcel_hidden_index > colgroup > col:first-child { - display: none; -} - -.jexcel .jrating { - display: inline-flex; -} -.jexcel .jrating > div { - zoom: 0.55; -} - -.jexcel .copying-top { - border-top: 1px dashed #000; -} - -.jexcel .copying-left { - border-left: 1px dashed #000; -} - -.jexcel .copying-right { - border-right: 1px dashed #000; -} - -.jexcel .copying-bottom { - border-bottom: 1px dashed #000; -} - -.jexcel .jexcel_column_filter { - background-repeat: no-repeat; - background-position: top 50% right 5px; - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='gray' width='18px' height='18px'%3E%3Cpath d='M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E"); - text-overflow: ellipsis; - overflow: hidden; - padding: 0px; - padding-left: 6px; - padding-right: 20px; -} - -.jexcel thead .jexcel_freezed, -.jexcel tfoot .jexcel_freezed { - left: 0px; - z-index: 3 !important; - box-shadow: 2px 0px 2px 0.2px #ccc !important; - -webkit-box-shadow: 2px 0px 2px 0.2px #ccc !important; - -moz-box-shadow: 2px 0px 2px 0.2px #ccc !important; -} - -.jexcel tbody .jexcel_freezed { - position: relative; - background-color: #fff; - box-shadow: 1px 1px 1px 1px #ccc !important; - -webkit-box-shadow: 2px 4px 4px 0.1px #ccc !important; - -moz-box-shadow: 2px 4px 4px 0.1px #ccc !important; -} - -.red { - color: red; -} - -.jexcel > tbody > tr > td.readonly > input[type="checkbox"], -.jexcel > tbody > tr > td.readonly > input[type="radio"] { - pointer-events: none; - opacity: 0.5; -} diff --git a/scss/vendor/jsuites.scss b/scss/vendor/jsuites.scss deleted file mode 100644 index dcbd6c0..0000000 --- a/scss/vendor/jsuites.scss +++ /dev/null @@ -1,3038 +0,0 @@ -.jexcel_container { - :root { - --button-color: #298ba8; - --active-color: #007aff; - --safe-area-top: env(safe-area-inset-top); - --safe-area-bottom: env(safe-area-inset-bottom); - } - - [data-visible="false"] { - display: none; - } - - div[data-before]:before { - content: attr(data-before); - } - - .unselectable { - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - } - - .jreadonly { - pointer-events: none; - } - - .jdragging { - opacity: 0.2; - filter: alpha(opacity=20); - } - - .jupload.input { - position: relative; - box-sizing: border-box; - background-size: initial; - height: 33px; - min-height: initial; - padding: 6px; - padding-right: 30px; - } - - .jupload.input:before { - content: "save"; - font-size: 18px; - font-family: "Material Icons"; - color: #000; - position: absolute; - right: 5px; - } - - .jupload:empty:before { - z-index: 0; - } - - .jupload img { - width: 100%; - } - - .jupload.input img { - width: initial; - max-width: 100%; - height: 100%; - } - - .jupload[data-multiple] { - padding: 10px; - } - - .jupload[data-multiple] img { - height: 70px; - width: 100px; - object-fit: cover; - margin-right: 5px; - margin-bottom: 5px; - } - - .jupload { - position: relative; - border: 1px dotted #eee; - cursor: pointer; - box-sizing: border-box; - width: 100%; - max-width: 100%; - max-height: 100%; - min-height: 180px; - } - - .jupload:not(.input):before { - content: "\e2c3"; - font-family: "Material Icons"; - font-size: 90px; - color: #eee; - width: 100%; - height: 100%; - display: flex; - align-items: center; - justify-content: center; - position: absolute; - z-index: -1; - } - - .jupload-item { - padding-right: 22px; - border-radius: 1px; - display: inline-block; - position: relative; - } - - .jphoto { - position: relative; - border: 1px dotted #eee; - cursor: pointer; - box-sizing: border-box; - width: 100%; - display: flex; - align-items: center; - justify-content: center; - } - - .jphoto:empty:before { - content: "\e2c3"; - font-family: "Material Icons"; - font-size: 90px; - color: #eee; - width: 100%; - height: 100%; - text-align: center; - } - - .jremove { - opacity: 0.2; - filter: alpha(opacity=20); - } - - .round img { - border-radius: 1000px; - } - - .jtooltip { - position: fixed; - top: 10px; - left: 10px; - z-index: 5; - - font-family: initial; - font-size: 12px; - color: #000; - background-color: #fff; - border: 1px solid black; - padding: 8px; - margin: 10px; - - display: block; - animation: fadeIn 0.5s; - pointer-events: none; - } - - .jtooltip:empty { - display: none; - } - - @keyframes fadeIn { - 0% { - opacity: 0; - } - 100% { - opacity: 1; - } - } - /** Loading */ - .jloading { - position: fixed; - z-index: 10001; - width: 100%; - left: 0; - right: 0; - top: 0; - bottom: 0; - background-color: rgba(0, 0, 0, 0.7); - } - - .jloading::after { - content: ""; - display: block; - margin: 0 auto; - margin-top: 50vh; - width: 40px; - height: 40px; - border-style: solid; - border-color: white; - border-top-color: transparent; - border-width: 4px; - border-radius: 50%; - -webkit-animation: spin 0.8s linear infinite; - animation: spin 0.8s linear infinite; - } - - .jloading.spin { - background-color: transparent; - } - - .jloading.spin::after { - margin: 0 auto; - margin-top: 80px; - border-color: #aaa; - border-top-color: transparent; - } - - /** Animations **/ - .fade-in { - animation: fade-in 2s forwards; - } - - .fade-out { - animation: fade-out 1s forwards; - } - - .slide-left-in { - position: relative; - animation: slide-left-in 0.4s forwards; - } - - .slide-left-out { - position: relative; - animation: slide-left-out 0.4s forwards; - } - - .slide-right-in { - position: relative; - animation: slide-right-in 0.4s forwards; - } - - .slide-right-out { - position: relative; - animation: slide-right-out 0.4s forwards; - } - - .slide-top-in { - position: relative; - animation: slide-top-in 0.4s forwards; - } - - .slide-top-out { - position: relative; - animation: slide-top-out 0.2s forwards; - } - - .slide-bottom-in { - position: relative; - animation: slide-bottom-in 0.4s forwards; - } - - .slide-bottom-out { - position: relative; - animation: slide-bottom-out 0.1s forwards; - } - - .slide-left-in > div { - -webkit-transform: translateZ(0px); - -webkit-transform: translate3d(0, 0, 0); - } - - .slide-left-out > div { - -webkit-transform: translateZ(0px); - -webkit-transform: translate3d(0, 0, 0); - } - - .slide-right-in > div { - -webkit-transform: translateZ(0px); - -webkit-transform: translate3d(0, 0, 0); - } - - .slide-right-out > div { - -webkit-transform: translateZ(0px); - -webkit-transform: translate3d(0, 0, 0); - } - - .spin { - animation: spin 2s infinite linear; - } - - /** Fadein and Fadeout **/ - @keyframes fade-in { - 0% { - opacity: 0; - } - 100% { - opacity: 100; - } - } - - @-webkit-keyframes fade-in { - 0% { - opacity: 0; - } - 100% { - opacity: 100; - } - } - - @keyframes fade-out { - 0% { - opacity: 100; - } - 100% { - opacity: 0; - } - } - - @-webkit-keyframes fade-out { - 0% { - opacity: 100; - } - 100% { - opacity: 0; - } - } - - /** Keyframes Left to Right **/ - @keyframes slide-left-in { - 0% { - left: -100%; - } - 100% { - left: 0%; - } - } - - @-webkit-keyframes slide-left-in { - 0% { - left: -100%; - } - 100% { - left: 0%; - } - } - - @keyframes slide-left-out { - 0% { - left: 0%; - } - 100% { - left: -100%; - } - } - - @-webkit-keyframes slide-left-out { - 0% { - left: 0%; - } - 100% { - left: -100%; - } - } - - /** Keyframes Right to Left **/ - @keyframes slide-right-in { - 0% { - left: 100%; - } - 100% { - left: 0%; - } - } - - @-webkit-keyframes slide-right-in { - 0% { - left: 100%; - } - 100% { - left: 0%; - } - } - - @keyframes slide-right-out { - 0% { - left: 0%; - } - 100% { - left: 100%; - } - } - - @-webkit-keyframes slide-right-out { - 0% { - left: 0%; - } - 100% { - left: 100%; - } - } - - /** Keyframes Top to Bottom **/ - @keyframes slide-top-in { - 0% { - transform: translateY(-100%); - } - 100% { - transform: translateY(0%); - } - } - - @-webkit-keyframes slide-top-in { - 0% { - transform: translateY(-100%); - } - 100% { - -webkit-transform: translateY(0%); - } - } - - @keyframes slide-top-out { - 0% { - transform: translateY(0%); - } - 100% { - transform: translateY(-100%); - } - } - - @-webkit-keyframes slide-top-out { - 0% { - -webkit-transform: translateY(0%); - } - 100% { - -webkit-transform: translateY(-100%); - } - } - - /** Keyframes Bottom to Top **/ - @keyframes slide-bottom-in { - 0% { - transform: translateY(100%); - } - 100% { - transform: translateY(0%); - } - } - - @-webkit-keyframes slide-bottom-in { - 0% { - transform: translateY(100%); - } - 100% { - -webkit-transform: translateY(0%); - } - } - - @keyframes slide-bottom-out { - 0% { - transform: translateY(0%); - } - 100% { - transform: translateY(100%); - } - } - - @-webkit-keyframes slide-bottom-out { - 0% { - -webkit-transform: translateY(0%); - } - 100% { - -webkit-transform: translateY(100%); - } - } - - @-webkit-keyframes spin { - from { - -webkit-transform: rotate(0deg); - } - to { - -webkit-transform: rotate(359deg); - } - } - - @keyframes spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(359deg); - } - } - .jcalendar { - position: absolute; - z-index: 9000; - display: none; - box-sizing: border-box; - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); - -webkit-tap-highlight-color: transparent; - min-width: 280px; - } - - .jcalendar.jcalendar-focus { - display: block; - } - - .jcalendar .jcalendar-backdrop { - position: fixed; - top: 0px; - left: 0px; - z-index: 9000; - min-width: 100%; - min-height: 100%; - background-color: rgba(0, 0, 0, 0.5); - border: 0px; - padding: 0px; - display: none; - } - - .jcalendar .jcalendar-container { - position: relative; - box-sizing: border-box; - } - - .jcalendar .jcalendar-content { - position: absolute; - z-index: 9001; - -webkit-box-shadow: 1px 1px 5px 0px rgba(0, 0, 0, 0.39); - -moz-box-shadow: 1px 1px 5px 0px rgba(0, 0, 0, 0.39); - box-shadow: 1px 1px 5px 0px rgba(0, 0, 0, 0.39); - background-color: #fff; - } - - .jcalendar-header { - text-align: center; - } - - .jcalendar-header span { - margin-right: 4px; - font-size: 1.1em; - font-weight: bold; - } - - .jcalendar-prev { - cursor: pointer; - background-image: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%2724%27 height=%2724%27 viewBox=%270 0 24 24%27%3E%3Cpath d=%27M15.41 16.59L10.83 12l4.58-4.59L14 6l-6 6 6 6 1.41-1.41z%27 fill=%27%23000%27 /%3E%3Cpath fill=%27none%27 d=%27M0 0h24v24H0V0z%27/%3E%3C/svg%3E"); - background-position: center; - background-repeat: no-repeat; - } - - .jcalendar-next { - cursor: pointer; - background-image: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%2724%27 height=%2724%27 viewBox=%270 0 24 24%27%3E%3Cpath d=%27M8.59 16.59L13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.41z%27 fill=%27%23000%27 /%3E%3Cpath fill=%27none%27 d=%27M0 0h24v24H0V0z%27/%3E%3C/svg%3E"); - background-position: center; - background-repeat: no-repeat; - } - - .jcalendar-weekday { - font-weight: 600; - background-color: #fcfcfc; - padding: 14px; - } - - .jcalendar-table { - padding: 10px; - } - - .jcalendar-table > table { - width: 100%; - background-color: #fff; - } - - .jcalendar-table > table > thead { - cursor: pointer; - } - - .jcalendar-table thead td { - padding: 10px; - height: 40px; - } - - .jcalendar-table > table > tbody > tr { - height: 34px; - } - - .jcalendar-table > table > tbody td { - box-sizing: border-box; - cursor: pointer; - padding: 9px; - font-size: 0.9em; - } - - .jcalendar-table tfoot td { - padding: 10px; - } - - .jcalendar-months td, - .jcalendar-years td { - height: 24px; - } - - .jcalendar-input { - padding-right: 18px; - background-image: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%2716%27 height=%2716%27 viewBox=%270 0 24 24%27 fill=%27gray%27%3E%3Cpath d=%27M20 3h-1V1h-2v2H7V1H5v2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 18H4V8h16v13z%27/%3E%3Cpath fill=%27none%27 d=%27M0 0h24v24H0z%27/%3E%3C/svg%3E"); - background-position: top 50% right 5px; - background-repeat: no-repeat; - box-sizing: border-box; - } - - .jcalendar-done { - -webkit-box-shadow: 1px 1px 5px 0px rgba(0, 0, 0, 0.39); - -moz-box-shadow: 1px 1px 5px 0px rgba(0, 0, 0, 0.39); - box-shadow: 1px 1px 5px 0px rgba(0, 0, 0, 0.39); - background-color: #fff; - } - - .jcalendar-update { - border: 1px solid #ccc; - background-color: #fff; - border-radius: 4px; - padding: 5px; - width: 100%; - } - - .jcalendar-container select { - width: 55px; - display: inline-block; - border: 0px; - padding: 4px; - text-align: center; - font-size: 1.1em; - user-select: none; - margin-right: 10px; - } - - .jcalendar-container select:first-child { - margin-right: 2px; - } - - .jcalendar-selected { - background-color: #eee; - } - - .jcalendar-reset, - .jcalendar-confirm { - text-transform: uppercase; - cursor: pointer; - color: var(--active-color); - } - - .jcalendar-controls { - padding: 15px; - - -webkit-box-sizing: border-box; - box-sizing: border-box; - vertical-align: middle; - - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - - -webkit-flex-flow: row wrap; - justify-content: space-between; - align-items: center; - } - - .jcalendar-controls div { - font-weight: bold; - } - - .jcalendar-fullsize { - position: fixed; - width: 100%; - top: 0px; - left: 0px; - } - - .jcalendar-fullsize .jcalendar-content { - position: fixed; - width: 100%; - left: 0px; - bottom: 0px; - } - - .jcalendar-focus.jcalendar-fullsize .jcalendar-backdrop { - display: block; - } - - .jcalendar-sunday { - color: red; - } - .jcalendar-disabled { - color: #ccc; - } - - .jcalendar-time { - display: flex; - } - - .jcalendar_warning { - color: red; - } - - .jcalendar-hide-controls .jcalendar-controls { - display: none; - } - - .jcolor { - display: none; - outline: none; - position: absolute; - } - - .jcolor-input { - padding-right: 24px !important; - background: url("data:image/svg+xml,%0A%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27black%27 width=%2718px%27 height=%2718px%27%3E%3Cpath d=%27M0 0h24v24H0z%27 fill=%27none%27/%3E%3Cpath d=%27M12 3c-4.97 0-9 4.03-9 9s4.03 9 9 9c.83 0 1.5-.67 1.5-1.5 0-.39-.15-.74-.39-1.01-.23-.26-.38-.61-.38-.99 0-.83.67-1.5 1.5-1.5H16c2.76 0 5-2.24 5-5 0-4.42-4.03-8-9-8zm-5.5 9c-.83 0-1.5-.67-1.5-1.5S5.67 9 6.5 9 8 9.67 8 10.5 7.33 12 6.5 12zm3-4C8.67 8 8 7.33 8 6.5S8.67 5 9.5 5s1.5.67 1.5 1.5S10.33 8 9.5 8zm5 0c-.83 0-1.5-.67-1.5-1.5S13.67 5 14.5 5s1.5.67 1.5 1.5S15.33 8 14.5 8zm3 4c-.83 0-1.5-.67-1.5-1.5S16.67 9 17.5 9s1.5.67 1.5 1.5-.67 1.5-1.5 1.5z%27/%3E%3C/svg%3E") - top 50% right 4px no-repeat, - content-box; - box-sizing: border-box; - } - - .jcolor-content { - position: absolute; - z-index: 9000; - user-select: none; - -webkit-font-smoothing: antialiased; - font-size: 0.875rem; - letter-spacing: 0.2px; - -webkit-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.14), - 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.2); - box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.14), - 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.2); - background-color: #fff; - box-sizing: border-box; - min-width: 260px; - } - - .jmodal .jcolor-content { - position: fixed; - } - - .jcolor-controls { - display: flex; - padding: 10px; - border-bottom: 1px solid #eee; - margin-bottom: 5px; - } - - .jcolor-controls div { - flex: 1; - font-size: 1em; - color: var(--active-color); - text-transform: uppercase; - font-weight: bold; - box-sizing: border-box; - } - - .jcolor-content table { - border-collapse: collapse; - box-sizing: border-box; - } - - .jcolor-focus { - display: block; - } - - .jcolor table { - width: 100%; - height: 100%; - min-height: 160px; - } - - .jcolor td { - padding: 7px; - } - - .jcolor-selected { - background-repeat: no-repeat; - background-size: 16px; - background-position: center; - background-image: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%2724%27 height=%2724%27 viewBox=%270 0 24 24%27%3E%3Cpath d=%27M0 0h24v24H0z%27 fill=%27none%27/%3E%3Cpath d=%27M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z%27 fill=%27white%27/%3E%3C/svg%3E"); - } - - .jcolor-fullscreen { - position: fixed; - left: 0px; - bottom: 0px; - width: 100%; - max-height: 290px; - border-radius: 0px; - box-sizing: border-box; - } - - .jcolor-fullscreen .jcolor-controls { - padding: 15px; - -webkit-box-shadow: 1px 0px 1px 0px rgba(0, 0, 0, 0.39); - -moz-box-shadow: 1px 0px 1px 0px rgba(0, 0, 0, 0.39); - box-shadow: 1px 0px 1px 0px rgba(0, 0, 0, 0.39); - } - - .jcolor-reset { - text-align: left; - } - - .jcolor-close { - text-align: right; - } - - .jcolor-backdrop { - position: fixed; - top: 0px; - left: 0px; - min-width: 100%; - min-height: 100%; - background-color: rgba(0, 0, 0, 0.5); - border: 0px; - padding: 0px; - z-index: 8000; - display: none; - - -webkit-touch-callout: none; /* iOS Safari */ - -webkit-user-select: none; /* Safari */ - -khtml-user-select: none; /* Konqueror HTML */ - -moz-user-select: none; /* Firefox */ - -ms-user-select: none; /* Internet Explorer/Edge */ - user-select: none; /* Non-prefixed version, currently - supported by Chrome and Opera */ - } - - .jcolor-content .jtabs-content { - padding: 7px; - } - - .jcolor-grid tr:first-child > td:first-child { - border-top-left-radius: 3px; - } - - .jcolor-grid tr:first-child > td:last-child { - border-top-right-radius: 3px; - } - - .jcolor-grid tr:last-child > td:first-child { - border-bottom-left-radius: 3px; - } - - .jcolor-grid tr:last-child > td:last-child { - border-bottom-right-radius: 3px; - } - - .jcolor-hsl { - box-sizing: border-box; - } - - .jcolor-hsl > div { - height: 100%; - position: relative; - } - - .jcolor-hsl canvas { - display: block; - border-radius: 4px; - -webkit-user-drag: none; - } - - .jcolor-point { - height: 5px; - width: 5px; - background-color: #000; - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - border-radius: 50%; - } - - .jcolor-sliders { - padding: 10px 20px 10px 10px; - } - - .jcolor-sliders input { - -webkit-appearance: none; - - height: 12px; - width: 80%; - - background: #d3d3d3; - opacity: 1; - - border-radius: 30px; - outline: none; - } - - .jcolor-sliders-input-subcontainer { - display: flex; - justify-content: space-between; - align-items: center; - } - - .jcolor-sliders-input-container { - margin-top: 4px; - line-height: 0.8em; - text-align: left; - } - - .jcolor-sliders-input-container > label { - font-size: 10px; - text-transform: uppercase; - color: #bbbbbd; - } - - .jcolor-sliders-input-subcontainer > input { - border: 0px; - padding: 1px; - } - - .jcolor-sliders-input-container input::-webkit-slider-thumb { - -webkit-appearance: none; - height: 12px; - width: 12px; - border-radius: 50%; - background: #000; - border: 2px solid #fff; - cursor: pointer; - } - - .jcolor-sliders-input-container input::-moz-range-thumb { - -webkit-appearance: none; - height: 12px; - width: 12px; - border-radius: 50%; - background: #000; - border: 2px solid #fff; - cursor: pointer; - } - - .jcolor-sliders-final-color { - padding: 6px; - user-select: all; - margin-top: 10px; - text-align: center; - } - - .jcolor-sliders-final-color > div:nth-child(2) { - width: 71px; - text-transform: uppercase; - } - - .jcolor .jtabs .jtabs-headers-container .jtabs-controls { - display: none !important; - } - - .jcolor .jtabs .jtabs-headers-container { - display: flex !important; - justify-content: center; - padding: 4px; - } - - .jcolor .jtabs-headers > div:not(.jtabs-border) { - padding: 2px !important; - padding-left: 15px !important; - padding-right: 15px !important; - font-size: 0.8em; - } - .jcontextmenu { - position: fixed; - z-index: 10000; - background: #fff; - color: #555; - font-size: 11px; - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; - -webkit-box-shadow: 2px 2px 2px 0px rgba(143, 144, 145, 1); - -moz-box-shadow: 2px 2px 2px 0px rgba(143, 144, 145, 1); - box-shadow: 2px 2px 2px 0px rgba(143, 144, 145, 1); - border: 1px solid #c6c6c6; - padding: 0px; - padding-top: 4px; - padding-bottom: 4px; - margin: 0px; - outline: none; - display: none; - } - - .jcontextmenu.jcontextmenu-focus { - display: inline-block; - } - - .jcontextmenu > div { - box-sizing: border-box; - display: flex; - padding: 8px 8px 8px 32px; - width: 250px; - position: relative; - cursor: default; - font-size: 11px; - font-family: sans-serif; - text-align: left; - -webkit-box-align: center; - align-items: center; - } - - .jcontextmenu > div::before { - content: attr(data-icon); - font-family: "Material Icons" !important; - font-size: 15px; - position: absolute; - left: 9px; - line-height: 24px; - } - - .jcontextmenu.symbols > div::before { - font-family: "Material Symbols Outlined" !important; - } - - .jcontextmenu > div.header { - display: none; - } - - .jcontextmenu > div a { - color: #555; - text-decoration: none; - flex: 1; - cursor: pointer; - } - - .jcontextmenu > div span { - margin-right: 10px; - } - - .jcontextmenu .jcontextmenu-disabled a { - color: #ccc; - } - - .jcontextmenu .jcontextmenu-disabled::before { - color: #ccc; - } - - .jcontextmenu > div:hover { - background: #ebebeb; - } - - .jcontextmenu hr { - border: 1px solid #e9e9e9; - border-bottom: 0; - margin-top: 5px; - margin-bottom: 5px; - } - - .jcontextmenu > hr:hover { - background: transparent; - } - - .jcontextmenu .jcontextmenu { - top: 4px; - left: 99%; - opacity: 0; - position: absolute; - } - - .jcontextmenu > div:hover > .jcontextmenu { - display: block; - opacity: 1; - -webkit-transform: translate(0, 0) scale(1); - transform: translate(0, 0) scale(1); - pointer-events: auto; - } - - @media only screen and (max-width: 420px) { - .jcontextmenu { - top: initial !important; - left: 0px !important; - bottom: 0px !important; - width: 100vw; - height: 260px; - overflow: scroll; - animation: slide-bottom-in 0.4s forwards; - padding-top: 0px; - } - .jcontextmenu div { - width: 100%; - text-align: center; - border-bottom: 1px solid #ccc; - padding: 15px; - } - .jcontextmenu > div.header { - background-color: lightgray; - padding: 5px; - top: 0px; - position: sticky; - z-index: 2; - } - .jcontextmenu > div.header > a.title { - text-align: left; - } - - .jcontextmenu > div.header > a.close { - text-align: right; - } - .jcontextmenu a { - font-size: 1.4em; - text-transform: uppercase; - } - .jcontextmenu span { - display: none; - } - .jcontextmenu span { - display: none; - } - .jcontextmenu hr { - display: none; - } - } - - .jdropdown { - cursor: pointer; - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - box-sizing: border-box; - background: #fff; - -webkit-tap-highlight-color: transparent; - display: inline-block; - } - - .jdropdown-backdrop { - position: fixed; - top: 0px; - left: 0px; - min-width: 100%; - min-height: 100%; - background-color: rgba(0, 0, 0, 0.5); - border: 0px; - padding: 0px; - z-index: 8000; - display: none; - } - - .jdropdown[disabled] { - opacity: 0.5; - pointer-events: none; - } - - .jdropdown-focus { - position: relative; - } - - .jdropdown-focus .jdropdown-container { - transform: translate3d(0, 0, 0); - } - - .jdropdown-default.jdropdown-focus .jdropdown-header { - outline: auto 5px -webkit-focus-ring-color; - } - - .jdropdown-default.jdropdown-focus .jdropdown-header.jdropdown-add { - background-image: url("data:image/svg+xml,%0A%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27gray%27 width=%2724px%27 height=%2724px%27%3E%3Cpath d=%27M0 0h24v24H0z%27 fill=%27none%27/%3E%3Cpath d=%27M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10h-4v4h-2v-4H7v-2h4V7h2v4h4v2z%27/%3E%3C/svg%3E"); - } - - .jdropdown-container-header { - padding: 0px; - margin: 0px; - position: relative; - box-sizing: border-box; - } - - .jdropdown-header { - width: 100%; - appearance: none; - background-repeat: no-repeat; - background-position: top 50% right 5px; - background-image: url("data:image/svg+xml,%0A%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%2724%27 height=%2724%27 viewBox=%270 0 24 24%27%3E%3Cpath fill=%27none%27 d=%27M0 0h24v24H0V0z%27/%3E%3Cpath d=%27M7 10l5 5 5-5H7z%27 fill=%27gray%27/%3E%3C/svg%3E"); - text-overflow: ellipsis; - cursor: pointer; - box-sizing: border-box; - -webkit-appearance: none; - -moz-appearance: none; - padding-right: 30px !important; - } - - .jdropdown-insert-button { - font-size: 1.4em; - text-transform: uppercase; - position: absolute; - right: 30px; - top: 4px; - display: none; - } - - .jdropdown-container { - min-width: inherit; - transform: translate3d(-10000px, 0, 0); - position: absolute; - z-index: 9001; - } - - .jdropdown-close { - display: none; - font-size: 1em; - color: var(--active-color); - text-transform: uppercase; - text-align: right; - padding: 12px; - font-weight: bold; - } - - .jdropdown-content { - min-width: inherit; - margin: 0px; - box-sizing: border-box; - } - - .jdropdown-content:empty { - } - - .jdropdown-item { - white-space: nowrap; - text-align: left; - text-overflow: ellipsis; - overflow-x: hidden; - color: #000; - display: flex; - align-items: center; - } - - .jdropdown-description { - text-overflow: ellipsis; - overflow: hidden; - line-height: 1.5em; - } - - .jdropdown-image { - margin-right: 10px; - width: 32px; - height: 32px; - border-radius: 20px; - } - - .jdropdown-image-small { - width: 24px; - height: 24px; - } - - .jdropdown-icon { - margin-right: 10px; - font-size: 30px; - margin-left: -5px; - } - - .jdropdown-icon-small { - font-size: 24px; - margin-left: 0px; - } - - .jdropdown-title { - font-size: 0.7em; - text-overflow: ellipsis; - overflow-x: hidden; - display: block; - } - - /** Default visual **/ - - .jdropdown-default .jdropdown-header { - border: 1px solid #ccc; - padding: 5px; - padding-left: 10px; - padding-right: 16px; - } - - .jdropdown-default .jdropdown-container { - background-color: #fff; - } - - .jdropdown-default.jdropdown-focus.jdropdown-insert .jdropdown-header { - padding-right: 50px; - } - - .jdropdown-default.jdropdown-focus.jdropdown-insert .jdropdown-insert-button { - display: block; - } - - .jdropdown-default .jdropdown-content { - min-width: inherit; - border: 1px solid #8fb1e3; - margin: 0px; - background-color: #fff; - box-sizing: border-box; - min-height: 10px; - max-height: 215px; - overflow-y: auto; - } - - .jdropdown-default .jdropdown-item { - padding: 4px; - padding-left: 8px; - padding-right: 40px; - } - - .jdropdown-default .jdropdown-item:hover { - background-color: #1f93ff; - color: #fff; - } - - .jdropdown-default .jdropdown-cursor { - background-color: #eee; - } - - .jdropdown-default .jdropdown-selected { - background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIiAvPjxwYXRoIGQ9Ik05IDE2LjE3TDQuODMgMTJsLTEuNDIgMS40MUw5IDE5IDIxIDdsLTEuNDEtMS40MXoiIGZpbGw9IndoaXRlIiAvPjwvc3ZnPgo=); - background-repeat: no-repeat; - background-position: top 50% right 5px; - background-color: #1f93ff; - color: #fff; - } - - .jdropdown-default .jdropdown-group { - margin-top: 5px; - } - - .jdropdown-default .jdropdown-group .jdropdown-item { - padding-left: 16px; - } - - .jdropdown-default .jdropdown-group-name { - padding-left: 8px; - font-weight: bold; - text-align: left; - } - - .jdropdown-default .jdropdown-reset_ { - content: "x"; - position: absolute; - top: 0; - right: 0; - margin: 5px; - margin-right: 10px; - font-size: 12px; - width: 12px; - cursor: pointer; - text-shadow: 0px 0px 5px #fff; - display: none; - line-height: 1.8em; - } - - .jdropdown-default.jdropdown-focus .jdropdown-reset_ { - display: block; - } - - /** Default render for mobile **/ - - .jdropdown-picker.jdropdown-focus .jdropdown-backdrop { - display: block; - } - - .jdropdown-picker .jdropdown-header { - outline: none; - } - - .jdropdown-picker .jdropdown-container { - position: fixed; - bottom: 0px; - left: 0px; - border-bottom: 1px solid #e6e6e8; - width: 100%; - background-color: #fff; - box-sizing: border-box; - } - - .jdropdown-picker .jdropdown-close { - -webkit-box-shadow: 0px -1px 5px 0px rgba(0, 0, 0, 0.39); - -moz-box-shadow: 0px -1px 5px 0px rgba(0, 0, 0, 0.39); - box-shadow: 0px -1px 5px 0px rgba(0, 0, 0, 0.39); - background-color: #fff; - display: block; - } - - .jdropdown-picker .jdropdown-content { - overflow-y: scroll; - height: 280px; - background-color: #fafafa; - border-top: 1px solid #e6e6e8; - } - - .jdropdown-picker .jdropdown-group-name { - font-size: 1em; - text-transform: uppercase; - padding-top: 10px; - padding-bottom: 10px; - display: block; - border-bottom: 1px solid #e6e6e8; - padding-left: 20px; - padding-right: 20px; - text-align: center; - font-weight: bold; - } - - .jdropdown-picker .jdropdown-item { - font-size: 1em; - text-transform: uppercase; - padding-top: 10px; - padding-bottom: 10px; - border-bottom: 1px solid #e6e6e8; - padding-left: 20px; - padding-right: 20px; - } - - .jdropdown-picker .jdropdown-selected { - background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIiAvPjxwYXRoIGQ9Ik05IDE2LjE3TDQuODMgMTJsLTEuNDIgMS40MUw5IDE5IDIxIDdsLTEuNDEtMS40MXoiIGZpbGw9IndoaXRlIiAvPjwvc3ZnPgo=); - background-repeat: no-repeat; - background-position: top 50% right 15px; - background-color: #1f93ff; - color: #fff; - } - - .jdropdown-picker .jdropdown-cursor { - background-color: #1f93ff; - color: #fff; - } - - /** Default render for mobile searchbar **/ - - .jdropdown-searchbar.jdropdown-focus { - position: fixed; - top: 0px !important; - left: 0px !important; - width: 100% !important; - height: 100% !important; - background-color: #fafafa; - padding: 0px; - z-index: 9001; - overflow-y: scroll; - will-change: scroll-position; - -webkit-overflow-scrolling: touch; - } - - .jdropdown-searchbar.jdropdown-focus .jdropdown-container-header { - position: fixed; - top: 0px; - left: 0px; - z-index: 9002; - padding: 6px; - background-color: #fff; - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); - width: 100%; - } - - .jdropdown-searchbar.jdropdown-focus .jdropdown-header { - border: 0px !important; - background-position-x: 0% !important; - background-position-y: 40% !important; - background-repeat: no-repeat; - background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMTUuNSAxNGgtLjc5bC0uMjgtLjI3QzE1LjQxIDEyLjU5IDE2IDExLjExIDE2IDkuNSAxNiA1LjkxIDEzLjA5IDMgOS41IDNTMyA1LjkxIDMgOS41IDUuOTEgMTYgOS41IDE2YzEuNjEgMCAzLjA5LS41OSA0LjIzLTEuNTdsLjI3LjI4di43OWw1IDQuOTlMMjAuNDkgMTlsLTQuOTktNXptLTYgMEM3LjAxIDE0IDUgMTEuOTkgNSA5LjVTNy4wMSA1IDkuNSA1IDE0IDcuMDEgMTQgOS41IDExLjk5IDE0IDkuNSAxNHoiIGZpbGw9IiNlNmU2ZTgiLz48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PC9zdmc+); - padding-left: 30px !important; - padding-right: 60px !important; - } - - .jdropdown-searchbar.jdropdown-focus .jdropdown-close { - display: block; - } - - .jdropdown-searchbar .jdropdown-header { - outline: none; - } - - .jdropdown-searchbar .jdropdown-container { - margin-top: 40px; - width: 100%; - } - - .jdropdown-searchbar .jdropdown-close { - position: fixed; - top: 0px; - right: 0px; - } - - .jdropdown-searchbar .jdropdown-content { - margin-top: 10px; - } - - .jdropdown-searchbar .jdropdown-group { - margin-top: 10px; - margin-bottom: 15px; - background-color: #fff; - } - - .jdropdown-searchbar .jdropdown-group-name { - border-top: 1px solid #e6e6e8; - border-bottom: 1px solid #e6e6e8; - padding: 10px; - padding-left: 12px; - font-weight: bold; - } - - .jdropdown-searchbar .jdropdown-group-arrow { - float: right; - width: 24px; - height: 24px; - background-repeat: no-repeat; - } - - .jdropdown-searchbar .jdropdown-group-arrow-down { - background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNNy40MSA4LjU5TDEyIDEzLjE3bDQuNTktNC41OEwxOCAxMGwtNiA2LTYtNiAxLjQxLTEuNDF6Ii8+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgwVjB6Ii8+PC9zdmc+); - } - - .jdropdown-searchbar .jdropdown-group-arrow-up { - background-image: url(data:image/svg+xml;base64,CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTcuNDEgMTUuNDFMMTIgMTAuODNsNC41OSA0LjU4TDE4IDE0bC02LTYtNiA2eiIvPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48L3N2Zz4=); - } - - .jdropdown-searchbar .jdropdown-item { - padding-top: 10px; - padding-bottom: 10px; - border-bottom: 1px solid #e6e6e8; - padding-left: 15px; - padding-right: 40px; - background-color: #fff; - font-size: 0.9em; - } - - .jdropdown-searchbar .jdropdown-description { - text-overflow: ellipsis; - overflow: hidden; - max-width: calc(100% - 20px); - } - - .jdropdown-searchbar .jdropdown-content > .jdropdown-item:first-child { - border-top: 1px solid #e6e6e8; - } - - .jdropdown-searchbar .jdropdown-selected { - background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxeiIgZmlsbD0iIzAwN2FmZiIvPjwvc3ZnPg==); - background-repeat: no-repeat; - background-position: top 50% right 15px; - } - - /** List render **/ - - .jdropdown-list { - } - - .jdropdown-list .jdropdown-container { - display: block; - } - - .jdropdown-list .jdropdown-header { - display: none; - } - - .jdropdown-list .jdropdown-group { - background-color: #fff; - } - - .jdropdown-list .jdropdown-group-name { - border-bottom: 1px solid #e6e6e8; - padding-top: 10px; - padding-bottom: 10px; - font-weight: bold; - } - - .jdropdown-list .jdropdown-item { - padding-top: 10px; - padding-bottom: 10px; - border-bottom: 1px solid #e6e6e8; - padding-left: 10px; - padding-right: 40px; - background-color: #fff; - } - - .jdropdown-list .jdropdown-selected { - background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxeiIgZmlsbD0iIzAwN2FmZiIvPjwvc3ZnPg==); - background-repeat: no-repeat; - background-position: top 50% right 10px; - } - - @media only screen and (max-width: 800px) { - .jdropdown-list { - width: 100% !important; - border: 0px; - padding: 0px; - } - - .jdropdown-list .jdropdown-container { - min-width: 100%; - } - - .jdropdown-searchbar.jdropdown-focus .jdropdown-description { - text-transform: uppercase; - } - } - - .app .jdropdown-item { - text-transform: uppercase; - } - - .jdropdown-create-container { - margin: 10px; - border: 1px solid #ccc; - border-radius: 2px; - padding: 6px; - } - - .jdropdown-color { - background-color: #fff; - border: 1px solid transparent; - border-radius: 12px; - width: 12px; - height: 12px; - margin-right: 6px; - } - - .jdropdown-item[data-disabled] { - opacity: 0.5; - pointer-events: none; - } - .jeditor-container { - border: 1px solid #ccc; - box-sizing: border-box; - } - - .jeditor-container.with-margin { - background-color: #f2f2f2; - max-width: 1200px; - } - - .jeditor-dragging { - border: 1px dashed #000; - } - - .jeditor { - outline: none; - word-break: break-word; - } - - .jeditor-container.with-margin .jeditor { - background-color: #fff; - margin: 80px; - min-height: 800px; - padding: 80px; - max-width: 800px; - } - - .jeditor[data-placeholder]:empty:before { - content: attr(data-placeholder); - color: lightgray; - } - - /** Snippet **/ - - .jsnippet { - margin-top: 15px; - cursor: pointer; - border: 1px solid #ccc; - position: relative; - } - - .jsnippet:focus { - outline: none; - } - - .jsnippet img { - width: 100%; - } - - .jsnippet .jsnippet-title { - padding: 15px; - font-size: 1.4em; - } - - .jsnippet .jsnippet-description { - padding-left: 15px; - padding-right: 15px; - font-size: 1em; - } - - .jsnippet .jsnippet-host { - padding: 15px; - text-transform: uppercase; - font-size: 0.8em; - color: #777; - text-align: right; - } - - .jsnippet .jsnippet-url { - display: none; - } - - .jeditor .jsnippet:after { - content: "close"; - font-family: "Material icons"; - font-size: 24px; - width: 24px; - height: 24px; - line-height: 24px; - cursor: pointer; - text-shadow: 0px 0px 2px #fff; - position: absolute; - top: 12px; - right: 12px; - } - - .jsnippet * { - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -o-user-select: none; - user-select: none; - - -webkit-user-drag: none; - -khtml-user-drag: none; - -moz-user-drag: none; - -o-user-drag: none; - } - - .jeditor img { - border: 2px solid transparent; - box-sizing: border-box; - } - - .jeditor img.resizing { - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -o-user-select: none; - user-select: none; - - -webkit-user-drag: none; - -khtml-user-drag: none; - -moz-user-drag: none; - -o-user-drag: none; - } - - .jeditor img:focus { - border: 2px solid #0096fd; - outline: #0096fd; - } - - .jeditor .pdf { - background-image: url("data:image/svg+xml,%3Csvg version=%271.1%27 id=%27Layer_1%27 xmlns=%27http://www.w3.org/2000/svg%27 xmlns:xlink=%27http://www.w3.org/1999/xlink%27 x=%270px%27 y=%270px%27 viewBox=%270 0 512 512%27 style=%27enable-background:new 0 0 512 512;%27 xml:space=%27preserve%27%3E%3Cpath style=%27fill:%23C30B15;%27 d=%27M511.344,274.266C511.77,268.231,512,262.143,512,256C512,114.615,397.385,0,256,0S0,114.615,0,256 c0,117.769,79.53,216.949,187.809,246.801L511.344,274.266z%27/%3E%3Cpath style=%27fill:%2385080E;%27 d=%27M511.344,274.266L314.991,77.913L119.096,434.087l68.714,68.714C209.522,508.787,232.385,512,256,512 C391.243,512,501.976,407.125,511.344,274.266z%27/%3E%3Cpolygon style=%27fill:%23FFFFFF;%27 points=%27278.328,333.913 255.711,77.913 119.096,77.913 119.096,311.652 %27/%3E%3Cpolygon style=%27fill:%23E8E6E6;%27 points=%27392.904,311.652 392.904,155.826 337.252,133.565 314.991,77.913 255.711,77.913 256.067,333.913 %27/%3E%3Cpolygon style=%27fill:%23FFFFFF;%27 points=%27314.991,155.826 314.991,77.913 392.904,155.826 %27/%3E%3Crect x=%27119.096%27 y=%27311.652%27 style=%27fill:%23FC0F1A;%27 width=%27273.809%27 height=%27122.435%27/%3E%3Cg%3E%3Cpath style=%27fill:%23FFFFFF;%27 d=%27M204.871,346.387c13.547,0,21.341,6.659,21.341,18.465c0,12.412-7.795,19.601-21.341,19.601h-9.611 v14.909h-13.471v-52.975L204.871,346.387L204.871,346.387z M195.26,373.858h8.93c5.904,0,9.308-2.952,9.308-8.552 c0-5.525-3.406-8.324-9.308-8.324h-8.93V373.858z%27/%3E%3Cpath style=%27fill:%23FFFFFF;%27 d=%27M257.928,346.387c16.649,0,28.152,10.746,28.152,26.487c0,15.666-11.655,26.488-28.683,26.488 h-22.25v-52.975H257.928z M248.619,388.615h9.611c8.249,0,14.151-6.357,14.151-15.665c0-9.384-6.205-15.817-14.757-15.817h-9.006 V388.615z%27/%3E%3Cpath style=%27fill:%23FFFFFF;%27 d=%27M308.563,356.982v12.26h23.763v10.596h-23.763v19.525h-13.471v-52.975h39.277v10.595h-25.806 V356.982z%27/%3E%3C/g%3E%3C/svg%3E%0A"); - background-repeat: no-repeat; - background-size: cover; - width: 60px; - height: 60px; - } - - .jeditor-toolbar { - width: fit-content; - max-width: 100%; - box-sizing: border-box; - margin: 10px; - } - - .toolbar-on-top .jeditor-toolbar { - width: initial; - margin: 0px; - box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.1); - display: block; - } - - .toolbar-on-top .jeditor { - padding: 15px; - } - - .toolbar-on-top .jtoolbar .material-icons { - font-size: 24px; - transform: initial; - margin: 4px; - } - - .toolbar-on-top .jtoolbar .jpicker-header { - font-size: 1em; - margin-top: 4px; - margin-bottom: 4px; - } - - .jeditor table { - border-collapse: collapse; - } - - .jeditor table td { - border: 1px solid #bbb; - height: 2em; - } - - .jeditor table td:focus { - border: 1px solid blue; - } - - .jeditor .line-break { - border-top: 1px dashed #ccc; - display: flex; - justify-content: center; - pointer-events: none; - } - - .jeditor .line-break:before { - content: "New page"; - background-color: #fff; - color: #ccc; - margin: -1em; - padding: 6px; - position: absolute; - } - .jfloating { - position: fixed; - bottom: 0px; - right: 0px; - margin-right: 5px; - - -webkit-box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2); - border: 1px solid #ccc; - background-color: #fff; - box-sizing: border-box; - padding-top: 50px !important; - z-index: 9002; - border-radius: 8px; - } - - .jfloating.jfloating-big { - width: 510px !important; - height: 472px !important; - } - - .jfloating.jfloating-small { - width: 300px !important; - height: 320px !important; - } - - .jfloating.jfloating-large { - width: 600px !important; - height: 600px !important; - } - - .jfloating:before { - position: absolute; - top: 0; - left: 0; - width: 100%; - content: attr(title); - padding: 15px; - box-sizing: border-box; - font-size: 1.2em; - box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.2); - background-color: #fff; - border-radius: 8px 8px 0px 0px; - background-color: #404040; - font-size: 0.93rem; - font-weight: 600; - color: white; - letter-spacing: 0.5px; - } - - .jfloating:after { - content: ""; - background-image: url("data:image/svg+xml,%0A%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%2724%27 height=%2724%27 viewBox=%270 0 24 24%27%3E%3Cpath fill=%27%23FFF%27 d=%27M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z%27/%3E%3Cpath d=%27M0 0h24v24H0z%27 fill=%27none%27/%3E%3C/svg%3E"); - position: absolute; - top: 0; - right: 0; - margin: 14px; - font-size: 24px; - width: 24px; - height: 24px; - cursor: pointer; - text-shadow: 0px 0px 5px #fff; - } - - .jfloating_content { - padding: 20px; - overflow-y: auto; - max-height: 100%; - box-sizing: border-box; - height: -webkit-fill-available; - } - - .jfloating.jfloating-minimized { - height: 50px !important; - } - - .jfloating.jfloating-minimized .jfloating_content { - display: none; - } - - .jmodal { - position: fixed; - top: 50%; - left: 50%; - width: 60%; - height: 60%; - -webkit-box-shadow: 0 2px 12px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 2px 12px rgba(0, 0, 0, 0.2); - border: 1px solid #ccc; - background-color: #fff; - transform: translate(-50%, -50%); - box-sizing: border-box; - z-index: 9002; - border-radius: 4px; - display: flex; - flex-direction: column; - } - - .jmodal_title { - padding: 20px; - height: 70px; - box-sizing: border-box; - font-size: 1.4em; - background-color: #fff; - border-radius: 8px 8px 0px 0px; - pointer-events: none; - display: flex; - -webkit-align-items: center; - -webkit-box-align: center; - align-items: center; - border-bottom: 1px solid #eee; - } - - .jmodal_title > div { - font-size: 1.4em; - } - - .jmodal_title[data-icon]:before { - content: attr(data-icon); - font-family: "Material Icons" !important; - width: 24px; - height: 24px; - font-size: 24px; - margin-right: 10px; - line-height: 24px; - } - - .jmodal_content { - padding: 20px; - overflow-y: auto; - height: 100%; - box-sizing: border-box; - scrollbar-width: thin; - scrollbar-color: #333 transparent; - } - - .jmodal_title:empty { - display: none; - } - - .jmodal_title:empty + .jmodal_content { - height: 100%; - } - - .jmodal_content::-webkit-scrollbar { - height: 12px; - } - - .jmodal_content::-webkit-scrollbar { - width: 12px; - } - - .jmodal_content::-webkit-scrollbar-track { - border: 1px solid #fff; - background: #eee; - } - - .jmodal_content::-webkit-scrollbar-thumb { - border: 1px solid #fff; - background: #888; - } - - .jmodal:after { - content: ""; - background-image: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%2724%27 height=%2724%27 viewBox=%270 0 24 24%27%3E%3Cpath d=%27M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z%27/%3E%3Cpath d=%27M0 0h24v24H0z%27 fill=%27none%27/%3E%3C/svg%3E"); - position: absolute; - top: 0; - right: 0; - margin: 25px; - font-size: 24px; - width: 24px; - height: 24px; - cursor: pointer; - text-shadow: 0px 0px 5px #fff; - } - - .jmodal_fullscreen { - width: 100% !important; - height: 100% !important; - top: 0px; - left: 0px; - transform: none; - border: 0px; - border-radius: 0px; - } - - .jmodal_backdrop { - position: fixed; - top: 0px; - left: 0px; - min-width: 100%; - min-height: 100%; - background-color: rgba(0, 0, 0, 0.2); - border: 0px; - padding: 0px; - z-index: 8000; - display: none; - - -webkit-touch-callout: none; /* iOS Safari */ - -webkit-user-select: none; /* Safari */ - -khtml-user-select: none; /* Konqueror HTML */ - -moz-user-select: none; /* Firefox */ - -ms-user-select: none; /* Internet Explorer/Edge */ - user-select: none; /* Non-prefixed version, currently - supported by Chrome and Opera */ - } - - .jmodal_content .jcalendar .jcalendar-content, - .jmodal_content .jdropdown-container { - position: fixed; - } - - .jnotification { - position: fixed; - z-index: 10000; - -webkit-box-sizing: border-box; - box-sizing: border-box; - padding: 10px; - bottom: 0px; - } - - .jnotification-container { - -webkit-box-shadow: 0px 2px 15px -5px rgba(0, 0, 0, 0.7); - box-shadow: 0px 2px 15px -5px rgba(0, 0, 0, 0.7); - padding: 12px; - border-radius: 8px; - - background-color: #000; - background: rgba(92, 92, 92, 1); - background: linear-gradient( - 0deg, - rgba(92, 92, 92, 1) 0%, - rgba(77, 77, 77, 1) 100% - ); - color: #fff; - width: 320px; - margin: 30px; - padding: 20px; - } - - .jnotification-close { - content: ""; - background-image: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%2720%27 height=%2720%27 viewBox=%270 0 24 24%27 fill=%27white%27%3E%3Cpath d=%27M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z%27/%3E%3Cpath d=%27M0 0h24v24H0z%27 fill=%27none%27/%3E%3C/svg%3E"); - font-size: 20px; - width: 20px; - height: 20px; - cursor: pointer; - } - - .jnotification-title { - font-weight: bold; - } - - .jnotification-header { - display: flex; - padding-bottom: 5px; - } - - .jnotification-header:empty { - display: none; - } - - .jnotification-image { - margin-right: 5px; - } - - .jnotification-image:empty { - display: none; - } - - .jnotification-image img { - width: 24px; - } - - .jnotification-name { - text-transform: uppercase; - font-size: 0.9em; - flex: 1; - letter-spacing: 0.1em; - } - - .jnotification-error .jnotification-container { - background: rgb(182, 38, 6); - background: linear-gradient( - 0deg, - rgba(170, 41, 13, 1) 0%, - rgba(149, 11, 11, 1) 100% - ); - } - - @media (max-width: 800px) { - .jnotification { - top: calc(0px + var(--safe-area-top)); - width: 100%; - } - .jnotification-container { - background: rgba(255, 255, 255, 0.95); - border: 1px solid #eee; - color: #444; - margin: 0px; - width: initial; - } - .jnotification-error .jnotification-container { - background: rgba(255, 255, 255, 0.95); - color: #790909; - } - .jnotification-close { - background-image: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%2720%27 height=%2720%27 viewBox=%270 0 24 24%27 fill=%27black%27%3E%3Cpath d=%27M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z%27/%3E%3Cpath d=%27M0 0h24v24H0z%27 fill=%27none%27/%3E%3C/svg%3E"); - } - } - - .jnotification-header { - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-box-pack: start; - -webkit-justify-content: flex-start; - -ms-flex-pack: start; - justify-content: flex-start; - -webkit-box-align: center; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; - } - .jpicker { - cursor: pointer; - white-space: nowrap; - display: inline-flex; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - outline: none; - position: relative; - } - - .jpicker-header { - background-repeat: no-repeat; - background-position: top 50% right 5px; - background-image: url("data:image/svg+xml,%0A%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%2724%27 height=%2724%27 viewBox=%270 0 24 24%27%3E%3Cpath fill=%27none%27 d=%27M0 0h24v24H0V0z%27/%3E%3Cpath d=%27M7 10l5 5 5-5H7z%27 fill=%27gray%27/%3E%3C/svg%3E"); - text-overflow: ellipsis; - cursor: pointer; - box-sizing: border-box; - text-align: left; - outline: none; - - line-height: 24px; - padding: 2px; - padding-left: 12px; - padding-right: 35px; - outline: none; - border-radius: 4px; - } - - .jpicker-header:hover { - background-color: #f2f2f2; - } - - .jpicker-content { - position: absolute; - top: 0; - display: none; - box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14), - 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 2px 4px -1px rgba(0, 0, 0, 0.2); - border-radius: 4px; - background-color: #fff; - padding: 4px; - z-index: 50; - text-align: left; - max-height: 250px; - scrollbar-width: thin; - scrollbar-color: #333 transparent; - } - - .jpicker-content::-webkit-scrollbar { - width: 8px; - } - - .jpicker-content::-webkit-scrollbar-track { - background: #eee; - } - - .jpicker-content::-webkit-scrollbar-thumb { - background: #888; - } - - .jpicker-content > div { - padding: 6px; - padding-left: 15px; - padding-right: 15px; - } - - .jpicker-focus > .jpicker-content { - display: block; - } - - .jpicker-content > div:hover { - background-color: #efefef; - } - - .jpicker-content > div:empty { - opacity: 0; - } - - .jpicker-header > i, - .jpicker-header > div { - display: block; - } - - .jpicker-focus > .jpicker-content.jpicker-columns { - display: flex !important ; - justify-content: center; - flex-wrap: wrap; - } - - .jpicker-focus .jpicker-content.jpicker-grid { - display: inline-grid; - } - - .jprogressbar { - cursor: pointer; - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - box-sizing: border-box; - background: #fff; - -webkit-tap-highlight-color: transparent; - display: inline-block; - box-sizing: border-box; - cursor: pointer; - border: 1px solid #ccc; - position: relative; - } - - .jprogressbar::before { - content: attr(data-value); - position: absolute; - margin: 5px; - margin-left: 10px; - } - - .jprogressbar-header::placeholder { - color: #000; - } - - .jprogressbar::focus { - outline: auto 5px -webkit-focus-ring-color; - } - - .jprogressbar > div { - background-color: #eee; - background-color: red; - box-sizing: border-box; - height: 31px; - } - .jrating { - display: flex; - } - .jrating > div { - width: 24px; - height: 24px; - line-height: 24px; - background-image: url("data:image/svg+xml,%0A%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%2724%27 height=%2724%27 viewBox=%270 0 24 24%27%3E%3Cpath d=%27M22 9.24l-7.19-.62L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21 12 17.27 18.18 21l-1.63-7.03L22 9.24zM12 15.4l-3.76 2.27 1-4.28-3.32-2.88 4.38-.38L12 6.1l1.71 4.04 4.38.38-3.32 2.88 1 4.28L12 15.4z%27 fill=%27gray%27/%3E%3Cpath d=%27M0 0h24v24H0z%27 fill=%27none%27/%3E%3C/svg%3E"); - } - - .jrating .jrating-over { - background-image: url("data:image/svg+xml,%0A%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%2724%27 height=%2724%27 viewBox=%270 0 24 24%27 fill=%27black%27%3E%3Cpath d=%27M0 0h24v24H0z%27 fill=%27none%27/%3E%3Cpath d=%27M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z%27/%3E%3Cpath d=%27M0 0h24v24H0z%27 fill=%27none%27/%3E%3C/svg%3E"); - opacity: 0.7; - } - - .jrating .jrating-selected { - background-image: url("data:image/svg+xml,%0A%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%2724%27 height=%2724%27 viewBox=%270 0 24 24%27 fill=%27red%27%3E%3Cpath d=%27M0 0h24v24H0z%27 fill=%27none%27/%3E%3Cpath d=%27M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z%27/%3E%3Cpath d=%27M0 0h24v24H0z%27 fill=%27none%27/%3E%3C/svg%3E"); - } - - .jsearch { - position: relative; - display: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - } - - .jsearch_container { - position: absolute; - box-shadow: 0 1px 2px 0 rgba(60, 64, 67, 0.302), - 0 2px 6px 2px rgba(60, 64, 67, 0.149); - border: none; - -webkit-border-radius: 4px; - border-radius: 4px; - width: 280px; - padding: 8px 0; - z-index: 1; - - -webkit-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); - -webkit-transition: opacity 0.218s; - transition: opacity 0.218s; - background: #fff; - border: 1px solid rgba(0, 0, 0, 0.2); - cursor: pointer; - margin: 0; - min-width: 300px; - outline: none; - width: auto; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - } - - .jsearch_container:empty:after { - content: attr(data-placeholder); - } - - .jsearch_container > div { - color: #333; - cursor: pointer; - display: -webkit-box; - display: -webkit-flex; - display: flex; - padding: 5px 10px; - user-select: none; - -webkit-align-items: center; - align-items: center; - - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - } - - .jsearch_container > div:hover { - background-color: #e8eaed; - } - - .jsearch_container > div > img { - width: 32px; - height: 32px; - user-select: none; - border-radius: 16px; - margin-right: 2px; - } - - .jsearch_container > div > div { - overflow: hidden; - text-overflow: ellipsis; - margin-left: 2px; - max-width: 300px; - white-space: nowrap; - user-select: none; - } - - .jsearch_container .selected { - background-color: #e8eaed; - } - .jslider { - outline: none; - } - - .jslider-focus { - width: 100% !important; - height: 100% !important; - } - - .jslider-focus img { - display: none; - } - - .jslider img { - width: 100px; - } - - .jslider-left::before { - position: fixed; - left: 15px; - top: 50%; - content: "arrow_back_ios"; - color: #fff; - width: 30px; - height: 30px; - font-family: "Material Icons"; - font-size: 30px; - /* before it was 0px 0px 0px #000 */ - text-shadow: 0px 0px 6px rgb(56, 56, 56); - text-align: center; - cursor: pointer; - } - - .jslider-right::after { - position: fixed; - right: 15px; - top: 50%; - content: "arrow_forward_ios"; - color: #fff; - width: 30px; - height: 30px; - font-family: "Material Icons"; - font-size: 30px; - /* before it was 0px 0px 0px #000 */ - text-shadow: 0px 0px 6px rgb(56, 56, 56); - text-align: center; - cursor: pointer; - } - - .jslider-close { - width: 24px; - height: 24px; - background-image: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%2724%27 height=%2724%27 viewBox=%270 0 24 24%27 fill=%27white%27%3E%3Cpath d=%27M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z%27/%3E%3Cpath d=%27M0 0h24v24H0z%27 fill=%27none%27/%3E%3C/svg%3E"); - position: fixed; - top: 15px; - right: 15px; - cursor: pointer; - z-index: 3000; - - display: block !important; - } - - .jslider-counter { - height: 24px; - background-color: transparent; - position: fixed; - left: 50%; - transform: translateX(-50%); - bottom: 15px; - cursor: pointer; - z-index: 3000; - - display: flex; - display: -webkit-flex; - -webkit-justify-content: center; - -webkit-align-items: center; - -webkit-flex-direction: row; - justify-content: center; - align-items: center; - flex-direction: row; - } - - .jslider-caption { - position: fixed; - max-width: 90vw; - text-overflow: ellipsis; - white-space: nowrap; - overflow: hidden; - top: 15px; - left: 15px; - z-index: 3000; - color: #fff; - font-size: 1rem; - - display: block !important; - } - - .jslider-counter div { - width: 10px; - height: 10px; - background: #fff; - border-radius: 50%; - margin: 0px 5px; - - display: block !important; - } - - .jslider-counter .jslider-counter-focus { - background-color: cornflowerblue; - pointer-events: none; - } - - .jslider-focus { - position: fixed; - left: 0; - top: 0; - width: 100%; - min-height: 100%; - max-height: 100%; - z-index: 2000; - margin: 0px; - box-sizing: border-box; - - background-color: rgba(0, 0, 0, 0.8); - -webkit-transition-duration: 0.05s; - transition-duration: 0.05s; - display: flex; - -ms-flex-align: center; - -webkit-align-items: center; - -webkit-box-align: center; - - align-items: center; - } - - .jslider-focus img { - width: 50vw; - height: auto; - box-sizing: border-box; - margin: 0 auto; - vertical-align: middle; - display: none; - } - - .jslider-focus img.jslider-vertical { - width: auto; - /* before it was 50vh */ - height: 80vh; - } - - @media only screen and (max-width: 576px) { - .jslider-focus img.jslider-vertical { - width: 99vw !important; - height: auto !important; - } - - .jslider-focus img { - width: 100vw !important; - height: auto !important; - } - } - - .jslider-grid { - display: -ms-grid; - display: grid; - grid-gap: 1px; - position: relative; - } - - .jslider-grid[data-number="2"] { - -ms-grid-columns: 1fr 50%; - grid-template-columns: 1fr 50%; - } - - .jslider-grid[data-number="3"] { - -ms-grid-columns: 1fr 33%; - grid-template-columns: 1fr 33%; - } - - .jslider-grid[data-number="4"] { - -ms-grid-columns: 1fr 25%; - grid-template-columns: 1fr 25%; - } - - .jslider-grid img { - display: none; - width: 100%; - height: 100%; - object-fit: cover; - } - - .jslider-grid[data-total]:after { - content: attr(data-total) "+"; - font-size: 1.5em; - position: absolute; - color: #fff; - right: 15px; - bottom: 6px; - } - - .jslider-grid img:first-child { - -ms-grid-column: 1; - -ms-grid-row: 1; - grid-column: 1; - grid-row: 1; - display: block; - } - - .jslider-grid[data-number="2"] img:nth-child(2) { - -ms-grid-column: 2; - -ms-grid-row: 1; - grid-column: 2; - grid-row: 1; - display: block; - } - - .jslider-grid[data-number="3"] img:first-child { - -ms-grid-column: 1 / 2; - -ms-grid-row: 1 / 4; - grid-column: 1 / 2; - grid-row: 1 / 4; - } - - .jslider-grid[data-number="3"] img:nth-child(2) { - -ms-grid-column: 2; - -ms-grid-row: 1; - grid-column: 2; - grid-row: 1; - display: block; - } - - .jslider-grid[data-number="3"] img:nth-child(3) { - -ms-grid-column: 2; - -ms-grid-row: 2; - grid-column: 2; - grid-row: 2; - display: block; - } - - .jslider-grid[data-number="4"] img:first-child { - -ms-grid-column: 1 / 2; - -ms-grid-row: 1 / 4; - grid-column: 1 / 2; - grid-row: 1 / 4; - } - - .jslider-grid[data-number="4"] img:nth-child(2) { - -ms-grid-column: 2; - -ms-grid-row: 1; - grid-column: 2; - grid-row: 1; - display: block; - } - - .jslider-grid[data-number="4"] img:nth-child(3) { - -ms-grid-column: 2; - -ms-grid-row: 2; - grid-column: 2; - grid-row: 2; - display: block; - } - - .jslider-grid[data-number="4"] img:nth-child(4) { - -ms-grid-column: 2; - -ms-grid-row: 3; - grid-column: 2; - grid-row: 3; - display: block; - } - - .jtabs { - max-width: 100vw; - position: relative; - } - - .jtabs .jtabs-headers-container { - display: flex; - align-items: center; - } - - .jtabs .jtabs-headers { - display: flex; - align-items: center; - overflow: hidden; - position: relative; - } - - .jtabs .jtabs-headers > div:not(.jtabs-border) { - padding: 8px; - padding-left: 20px; - padding-right: 20px; - margin-left: 1px; - margin-right: 1px; - background-color: #f1f1f1; - cursor: pointer; - white-space: nowrap; - text-align: center; - } - - .jtabs .jtabs-headers > div.jtabs-selected { - background-color: #e8e8e8; - color: #000; - } - - .jtabs .jtabs-headers > div > div { - color: #555; - width: 100%; - overflow: hidden; - } - - .jtabs .jtabs-headers i { - display: block; - margin: auto; - } - - .jtabs .jtabs-content { - box-sizing: border-box; - } - - .jtabs .jtabs-content > div { - display: none; - box-sizing: border-box; - } - - .jtabs .jtabs-content > div.jtabs-selected { - display: block; - } - - .jtabs .jtabs-border { - position: absolute; - height: 2px; - background-color: #888; - transform-origin: left; - transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1); - transition-property: color, left, transform; - display: none; - } - - .jtabs-animation .jtabs-border { - display: initial; - } - - .jtabs .jtabs-controls { - margin: 3px; - margin-left: 10px; - display: flex; - min-width: 82px; - } - - .jtabs .jtabs-controls > div { - cursor: pointer; - background-position: center; - background-repeat: no-repeat; - width: 24px; - height: 24px; - line-height: 24px; - } - - .jtabs .jtabs-prev { - margin-left: 10px; - background-image: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27gray%27 width=%2718px%27 height=%2718px%27%3E%3Cpath d=%27M0 0h24v24H0z%27 fill=%27none%27/%3E%3Cpath d=%27M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z%27/%3E%3C/svg%3E"); - } - - .jtabs .jtabs-prev.disabled { - margin-left: 10px; - background-image: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27lightgray%27 width=%2718px%27 height=%2718px%27%3E%3Cpath d=%27M0 0h24v24H0z%27 fill=%27none%27/%3E%3Cpath d=%27M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z%27/%3E%3C/svg%3E"); - } - - .jtabs .jtabs-next { - background-image: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27gray%27 width=%2718px%27 height=%2718px%27%3E%3Cpath d=%27M0 0h24v24H0z%27 fill=%27none%27/%3E%3Cpath d=%27M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z%27/%3E%3C/svg%3E"); - } - - .jtabs .jtabs-next.disabled { - background-image: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27lightgray%27 width=%2718px%27 height=%2718px%27%3E%3Cpath d=%27M0 0h24v24H0z%27 fill=%27none%27/%3E%3Cpath d=%27M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z%27/%3E%3C/svg%3E"); - } - - .jtabs .jtabs-add { - background-image: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 height=%2724%27 viewBox=%270 0 24 24%27 width=%2724%27%3E%3Cpath d=%27M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10h-4v4h-2v-4H7v-2h4V7h2v4h4v2z%27 fill=%27%23bbbbbb%27/%3E%3Cpath d=%27M0 0h24v24H0z%27 fill=%27none%27/%3E%3C/svg%3E"); - } - - /** Modern skin **/ - - .jtabs.jtabs-modern .jtabs-headers > div:not(.jtabs-border) { - padding: 4px; - padding-left: 10px; - padding-right: 10px; - background-color: #fff; - } - - .jtabs.jtabs-modern .jtabs-headers > .jtabs-selected { - color: #000; - } - - .jtabs.jtabs-modern .jtabs-headers > .jtabs-selected .material-icons { - color: #000; - } - - .jtabs.jtabs-modern .jtabs-headers { - background: #eeeeef !important; - padding: 2px; - border-radius: 4px; - } - - .jtabs.jtabs-modern .jtabs-headers .jtabs-border { - border-color: #eeeeef !important; - } - - .jtabs.jtabs-modern .jtabs-border { - background-color: rgba(194, 197, 188, 0.884); - } - .jtags { - display: flex; - flex-wrap: wrap; - -ms-flex-direction: row; - -webkit-flex-direction: row; - flex-direction: row; - -ms-flex-pack: flex-start; - -webkit-justify-content: space-between; - justify-content: flex-start; - padding: 1px; - border: 1px solid #ccc; - position: relative; - } - - .jtags.jtags-empty:not(.jtags-focus)::before { - position: absolute; - margin: 3px; - color: #ccc; - content: attr(data-placeholder); - top: 0px; - margin-left: 6px; - } - - .jtags > div { - padding: 5px; - padding-left: 10px; - padding-right: 22px; - position: relative; - border-radius: 1px; - margin: 2px; - display: block; - outline: none; - } - - .jtags > div:empty:before { - content: " "; - white-space: pre; - } - - .jtags > div::after { - content: "x"; - position: absolute; - top: 6px; - right: 4px; - width: 12px; - height: 12px; - cursor: pointer; - font-size: 11px; - display: none; - } - - .jtags_label { - background-color: #eeeeee !important; - } - - .jtags_label::after { - display: inline-block !important; - } - - .jtags_error::after { - color: #fff !important; - } - - .jtags_error { - background-color: #d93025 !important; - color: #fff; - } - - .jtoolbar-container { - border-radius: 2px; - box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14), - 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 2px 4px -1px rgba(0, 0, 0, 0.2); - display: inline-flex !important; - } - - .jtoolbar { - cursor: pointer; - white-space: nowrap; - display: flex; - padding: 4px; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - font-size: 13px; - } - - .jtoolbar-disabled { - pointer-events: none; - opacity: 0.4; - } - - .jtoolbar-mobile { - display: flex; - position: fixed; - bottom: 0; - margin: 0; - left: 0; - width: 100%; - background: #f7f7f8; - z-index: 1; - box-sizing: border-box; - box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.1); - border-radius: 0px; - } - - .jtoolbar > div { - display: inline-flex; - align-items: center; - box-sizing: border-box; - vertical-align: middle; - justify-content: space-evenly; - } - - .jtoolbar-mobile > div { - display: flex; - width: 100%; - } - - .jtoolbar .jtoolbar-item { - text-align: center; - margin: auto; - padding: 2px; - padding-left: 4px; - padding-right: 4px; - } - - .jtoolbar-mobile .jtoolbar-item { - position: relative; - flex: 1; - } - - .jtoolbar .jtoolbar-divisor { - width: 2px; - height: 18px; - padding: 0px; - margin-left: 4px; - margin-right: 4px; - background-color: #ddd; - } - - .jtoolbar .jtoolbar-label { - padding-left: 8px; - padding-right: 8px; - } - - .jtoolbar-mobile a { - text-decoration: none; - display: inline-block; - } - - .jtoolbar-mobile i { - display: inline-flex !important; - color: #929292; - } - - .jtoolbar-mobile span { - font-size: 0.7em; - display: block; - color: #929292; - } - - .jtoolbar-mobile .jtoolbar-selected a, - .jtoolbar-mobile .jtoolbar-selected i, - .jtoolbar-mobile .jtoolbar-selected span { - color: var(--active-color) !important; - background-color: transparent; - } - - .jtoolbar-item { - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - } - - .jtoolbar-item i { - display: block; - color: #333; - } - - .jtoolbar-item:hover { - background-color: #f2f2f2; - } - - .jtoolbar .jpicker { - padding-left: 0px; - padding-right: 0px; - } - - .jtoolbar .jpicker-header { - height: 24px; - line-height: 24px; - padding: 0px; - padding-right: 20px; - padding-left: 8px; - background-position: top 50% right 0px; - display: flex; - align-items: center; - font-size: 0.9em; - } - - .jtoolbar .jpicker-content > div { - padding: 6px; - } - - .jtoolbar-active { - background-color: #eee; - } - - .jtoolbar .fa { - width: 18px; - height: 18px; - display: block; - line-height: 18px; - font-size: 14px; - } - - .jtoolbar .material-icons { - font-size: 18px; - width: 24px; - height: 24px; - display: block; - line-height: 24px; - transform: rotate(0.03deg); - text-align: center; - } - - .jtoolbar .jtoolbar-arrow { - background-repeat: no-repeat; - background-position: center; - background-image: url("data:image/svg+xml,%0A%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27black%27 width=%2718px%27 height=%2718px%27%3E%3Cpath d=%27M0 0h24v24H0z%27 fill=%27none%27/%3E%3Cpath d=%27M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z%27/%3E%3C/svg%3E"); - width: 24px; - height: 16px; - margin-left: 4px; - border-left: 1px solid #f2f2f2; - } - - .jtoolbar-floating { - position: absolute; - display: none; - box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14), - 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 2px 4px -1px rgba(0, 0, 0, 0.2); - border-radius: 4px; - background-color: #fff; - padding: 4px; - z-index: 50; - text-align: left; - margin-right: 20px; - } - - .jtoolbar-floating .jtoolbar-divisor { - display: none; - } - - .jtoolbar-arrow-selected .jtoolbar-floating { - display: flex; - flex-wrap: wrap; - } -} diff --git a/spec/system/page_objects/modals/insert_table.rb b/spec/system/page_objects/modals/insert_table.rb deleted file mode 100644 index 2ca77ec..0000000 --- a/spec/system/page_objects/modals/insert_table.rb +++ /dev/null @@ -1,46 +0,0 @@ -# frozen_string_literal: true - -module PageObjects - module Modals - class InsertTable < PageObjects::Modals::Base - MODAL_SELECTOR = ".insert-table-modal" - SPREADSHEET_TABLE_SELECTOR = "#{MODAL_SELECTOR} .jexcel" - - def click_insert_table - find("#{MODAL_SELECTOR} .btn-insert-table").click - end - - def cancel - find("#{MODAL_SELECTOR} .d-modal-cancel").click - end - - def click_edit_reason - find("#{MODAL_SELECTOR} .btn-edit-reason").click - end - - def type_edit_reason(text) - find("#{MODAL_SELECTOR} .edit-reason input").send_keys(text) - end - - def find_cell(row, col) - find( - "#{SPREADSHEET_TABLE_SELECTOR} tbody tr[data-y='#{row}'] td[data-x='#{col}']" - ) - end - - def select_cell(row, col) - find_cell(row, col).double_click - end - - def type_in_cell(row, col, text) - select_cell(row, col) - cell = find_cell(row, col).find("textarea") - cell.send_keys(text, :return) - end - - def has_content_in_cell?(row, col, content) - find_cell(row, col).text == content - end - end - end -end diff --git a/spec/system/table_builder_spec.rb b/spec/system/table_builder_spec.rb deleted file mode 100644 index 779c206..0000000 --- a/spec/system/table_builder_spec.rb +++ /dev/null @@ -1,157 +0,0 @@ -# frozen_string_literal: true - -require_relative "page_objects/modals/insert_table" - -RSpec.describe "Table Builder", system: true do - fab!(:user) { Fabricate(:user) } - - let!(:theme_component) { upload_theme_component } - let(:composer) { PageObjects::Components::Composer.new } - let(:insert_table_modal) { PageObjects::Modals::InsertTable.new } - let(:sample_table_md) {} - fab!(:topic) { Fabricate(:topic, user: user) } - fab!(:post1) { create_post(user: user, topic: topic, raw: <<~RAW) } - |Make | Model | Year| - |-------| ------- | ----| - |Toyota | Supra | 1998| - |Nissan | Skyline | 1999| - |Honda | S2000 | 2001| - RAW - - let(:topic_page) { PageObjects::Pages::Topic.new } - - before { sign_in(user) } - - def normalize_value(content) - content.strip.gsub(/\s+/, " ").gsub(/\r\n/, "\n") - end - - context "when creating a new table" do - it "should add table items created in spreadsheet to composer input" do - visit("/latest") - page.find("#create-topic").click - page.find(".toolbar-popup-menu-options").click - page.find(".select-kit-row[data-name='Insert Table']").click - insert_table_modal.type_in_cell(0, 0, "Item 1") - insert_table_modal.type_in_cell(0, 1, "Item 2") - insert_table_modal.type_in_cell(0, 2, "Item 3") - insert_table_modal.type_in_cell(0, 3, "Item 4") - insert_table_modal.click_insert_table - - created_table = <<~TABLE - |Column 1 | Column 2 | Column 3 | Column 4| - |--- | --- | --- | ---| - |Item 1 | Item 2 | Item 3 | Item 4| - | | | | | - | | | | | - | | | | | - | | | | | - | | | | | - TABLE - - expect(normalize_value(composer.composer_input.value)).to eq( - normalize_value(created_table) - ) - end - - context "when cancelling table creation" do - it "should close the modal if there are no changes made" do - visit("/latest") - page.find("#create-topic").click - page.find(".toolbar-popup-menu-options").click - page.find(".select-kit-row[data-name='Insert Table']").click - insert_table_modal.cancel - expect(page).to have_no_css(".insert-table-modal") - end - - it "should show a warning popup if there are unsaved changes" do - visit("/latest") - page.find("#create-topic").click - page.find(".toolbar-popup-menu-options").click - page.find(".select-kit-row[data-name='Insert Table']").click - insert_table_modal.type_in_cell(0, 0, "Item 1") - insert_table_modal.cancel - expect(page).to have_css(".dialog-container .dialog-content") - end - end - end - - context "when editing a table" do - it "should prefill the spreadsheet with the markdown table items from the post" do - topic_page.visit_topic(topic) - topic_page.find(".btn-edit-table", visible: :all).click - expect(page).to have_selector(".insert-table-modal") - - expected_table_content = [ - %w[Toyota Supra 1998], - %w[Nissan Skyline 1999], - %w[Honda S2000 2001] - ] - - expected_table_content.each_with_index do |row, row_index| - row.each_with_index do |content, col_index| - expect(insert_table_modal).to have_content_in_cell( - row_index, - col_index, - content - ) - end - end - end - - it "should update the post with the new table content" do - topic_page.visit_topic(topic) - topic_page.find(".btn-edit-table", visible: :all).click - expect(page).to have_selector(".insert-table-modal") - insert_table_modal.type_in_cell(1, 1, " GTR") - insert_table_modal.click_insert_table - - updated_post = <<~RAW - |Make | Model | Year| - |-------| ------- | ----| - |Toyota | Supra | 1998| - |Nissan | Skyline | 1999| - |Honda | S2000 | 2001| - RAW - - expect(normalize_value(post1.reload.raw)).to eq( - normalize_value(updated_post) - ) - end - - context "when adding an edit reason" do - it "should add the edit reason to the edit history" do - edit_reason = "Updated Nissan model" - - topic_page.visit_topic(topic) - topic_page.find(".btn-edit-table", visible: :all).click - expect(page).to have_selector(".insert-table-modal") - insert_table_modal.type_in_cell(1, 1, " GTR") - insert_table_modal.click_edit_reason - insert_table_modal.type_edit_reason(edit_reason) - insert_table_modal.click_insert_table - wait_for { post1.reload.edit_reason == edit_reason } - expect(post1.reload.edit_reason).to eq(edit_reason) - end - end - - context "when cancelling table creation" do - it "should close the modal if there are no changes made" do - topic_page.visit_topic(topic) - topic_page.find(".btn-edit-table", visible: :all).click - expect(page).to have_selector(".insert-table-modal") - insert_table_modal.cancel - expect(page).to have_no_css(".insert-table-modal") - end - - it "should show a warning popup if there are unsaved changes" do - topic_page.visit_topic(topic) - topic_page.find(".btn-edit-table", visible: :all).click - expect(page).to have_selector(".insert-table-modal") - insert_table_modal.type_in_cell(1, 1, " GTR") - insert_table_modal.cancel - expect(page).to have_css(".dialog-container .dialog-content") - end - end - end -end diff --git a/test/acceptance/table-builder-test.js b/test/acceptance/table-builder-test.js deleted file mode 100644 index 1324e17..0000000 --- a/test/acceptance/table-builder-test.js +++ /dev/null @@ -1,43 +0,0 @@ -import I18n from "discourse-i18n"; -import { acceptance, exists } from "discourse/tests/helpers/qunit-helpers"; -import { click, visit } from "@ember/test-helpers"; -import { test } from "qunit"; -import { clearPopupMenuOptionsCallback } from "discourse/controllers/composer"; -import selectKit from "discourse/tests/helpers/select-kit-helper"; - -acceptance("Table Builder", function (needs) { - needs.user(); - needs.hooks.beforeEach(() => clearPopupMenuOptionsCallback()); - - test("Can see table builder button when creating a topic", async function (assert) { - await visit("/"); - await click("#create-topic"); - await click(".d-editor-button-bar .options"); - await selectKit(".toolbar-popup-menu-options").expand(); - - assert - .dom( - `.select-kit-row[data-name='${I18n.t( - themePrefix("discourse_table_builder.composer.button") - )}']` - ) - .exists("it shows the builder button"); - }); - - test("Can see table builder button when editing post", async function (assert) { - await visit("/t/internationalization-localization/280"); - await click("#post_1 .show-more-actions"); - await click("#post_1 .edit"); - assert.ok(exists("#reply-control")); - await click(".d-editor-button-bar .options"); - await selectKit(".toolbar-popup-menu-options").expand(); - - assert - .dom( - `.select-kit-row[data-name='${I18n.t( - themePrefix("discourse_table_builder.composer.button") - )}']` - ) - .exists("it shows the builder button"); - }); -}); diff --git a/test/fixtures/md-table.js b/test/fixtures/md-table.js deleted file mode 100644 index cf410f5..0000000 --- a/test/fixtures/md-table.js +++ /dev/null @@ -1,3 +0,0 @@ -export const mdTable = `|Make | Model | Year|\r\n|--- | --- | ---|\r\n|Toyota | Supra | 1998|\r\n|Nissan | Skyline | 1999|\r\n|Honda | S2000 | 2001|\r\n`; -export const mdTableSpecialChars = `|Make | Model | Price|\r\n|--- | --- | ---|\r\n|Toyota | Supra | $50,000|\r\n| | Celica | $20,000|\r\n|Nissan | GTR | $80,000|\r\n`; -export const mdTableNonUniqueHeadings = `|col1 | col2 | col1|\r\n|--- | --- | ---|\r\n|Col A | Col B | Col C|\r\n`; diff --git a/test/unit/lib/utilities-test.js b/test/unit/lib/utilities-test.js deleted file mode 100644 index 4d0b365..0000000 --- a/test/unit/lib/utilities-test.js +++ /dev/null @@ -1,165 +0,0 @@ -import { discourseModule } from "discourse/tests/helpers/qunit-helpers"; -import { test } from "qunit"; -import { - mdTable, - mdTableNonUniqueHeadings, - mdTableSpecialChars, -} from "../../fixtures/md-table"; - -import { - arrayToTable, - findTableRegex, -} from "../../../discourse-table-builder/lib/utilities"; - -discourseModule("Unit | Utilities", function () { - test("arrayToTable", function (assert) { - const tableData = [ - { - col0: "Toyota", - col1: "Supra", - col2: "1998", - }, - { - col0: "Nissan", - col1: "Skyline", - col2: "1999", - }, - { - col0: "Honda", - col1: "S2000", - col2: "2001", - }, - ]; - - assert.strictEqual( - arrayToTable(tableData, ["Make", "Model", "Year"]), - mdTable, - "it creates a markdown table from an array of objects (with headers as keys)" - ); - - const specialCharsTableData = [ - { - col0: "Toyota", - col1: "Supra", - col2: "$50,000", - }, - { - col0: "", - col1: "Celica", - col2: "$20,000", - }, - { - col0: "Nissan", - col1: "GTR", - col2: "$80,000", - }, - ]; - - assert.strictEqual( - arrayToTable(specialCharsTableData, ["Make", "Model", "Price"]), - mdTableSpecialChars, - "it creates a markdown table with special characters in correct alignment" - ); - - const nonUniqueColumns = ["col1", "col2", "col1"]; - - assert.strictEqual( - arrayToTable( - [{ col0: "Col A", col1: "Col B", col2: "Col C" }], - nonUniqueColumns - ), - mdTableNonUniqueHeadings, - "it does not suppress a column if heading is the same as another column" - ); - }); - test("arrayToTable with custom column prefix", function (assert) { - const tableData = [ - { - A0: "hey", - A1: "you", - }, - { - A0: "over", - A1: "there", - }, - ]; - - assert.strictEqual( - arrayToTable(tableData, ["Col 1", "Col 2"], "A"), - `|Col 1 | Col 2|\r\n|--- | ---|\r\n|hey | you|\r\n|over | there|\r\n`, - "it works" - ); - }); - - test("arrayToTable returns valid table with multiline cell data", function (assert) { - const tableData = [ - { - col0: "Jane\nDoe", - col1: "Teri", - }, - { - col0: "Finch", - col1: "Sami", - }, - ]; - - assert.strictEqual( - arrayToTable(tableData, ["Col 1", "Col 2"]), - `|Col 1 | Col 2|\r\n|--- | ---|\r\n|Jane Doe | Teri|\r\n|Finch | Sami|\r\n`, - "it creates a valid table" - ); - }); - - test("findTableRegex", function (assert) { - const oneTable = `|Make|Model|Year|\r\n|--- | --- | ---|\r\n|Toyota|Supra|1998|`; - - assert.strictEqual( - oneTable.match(findTableRegex()).length, - 1, - "finds one table in markdown" - ); - - const threeTables = `## Heading -|Table1 | PP Port | Device | DP | Medium| -|--- | --- | --- | --- | ---| -| Something | (1+2) | Dude | Mate | Bro | - -|Table2 | PP Port | Device | DP | Medium| -|--- | --- | --- | --- | ---| -| Something | (1+2) | Dude | Mate | Bro | -| ✅ | (1+2) | Dude | Mate | Bro | -| ✅ | (1+2) | Dude | Mate | Bro | - -|Table3 | PP Port | Device | DP | -|--- | --- | --- | --- | -| Something | (1+2) | Dude | Sound | -| | (1+2) | Dude | OW | -| | (1+2) | Dude | OI | - -Random extras - `; - - assert.strictEqual( - threeTables.match(findTableRegex()).length, - 3, - "finds three tables in markdown" - ); - - const ignoreUploads = ` -:information_source: Something - -[details=Example of a cross-connect in Equinix] -![image|603x500, 100%](upload://fURYa9mt00rXZITdYhhyeHFJE8J.png) -[/details] - -|Table1 | PP Port | Device | DP | Medium| -|--- | --- | --- | --- | ---| -| Something | (1+2) | Dude | Mate | Bro | -`; - assert.strictEqual( - ignoreUploads.match(findTableRegex()).length, - 1, - "finds on table, ignoring upload markup" - ); - }); -}); diff --git a/translator.yml b/translator.yml deleted file mode 100644 index d1cf3ae..0000000 --- a/translator.yml +++ /dev/null @@ -1,5 +0,0 @@ -# Configuration file for discourse-translator-bot - -files: -- source_path: locales/en.yml - destination_path: translations.yml diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index bf66982..0000000 --- a/yarn.lock +++ /dev/null @@ -1,3077 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@ampproject/remapping@^2.1.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" - integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== - dependencies: - "@jridgewell/gen-mapping" "^0.1.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@babel/code-frame@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" - integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== - dependencies: - "@babel/highlight" "^7.18.6" - -"@babel/code-frame@^7.22.13": - version "7.22.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" - integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== - dependencies: - "@babel/highlight" "^7.22.13" - chalk "^2.4.2" - -"@babel/compat-data@^7.20.5": - version "7.20.10" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.10.tgz#9d92fa81b87542fff50e848ed585b4212c1d34ec" - integrity sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg== - -"@babel/core@^7.18.5": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.20.7.tgz#37072f951bd4d28315445f66e0ec9f6ae0c8c35f" - integrity sha512-t1ZjCluspe5DW24bn2Rr1CDb2v9rn/hROtg9a2tmd0+QYf4bsloYfLQzjG4qHPNMhWtKdGC33R5AxGR2Af2cBw== - dependencies: - "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.20.7" - "@babel/helper-compilation-targets" "^7.20.7" - "@babel/helper-module-transforms" "^7.20.7" - "@babel/helpers" "^7.20.7" - "@babel/parser" "^7.20.7" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.20.7" - "@babel/types" "^7.20.7" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.1" - semver "^6.3.0" - -"@babel/eslint-parser@^7.18.2": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.19.1.tgz#4f68f6b0825489e00a24b41b6a1ae35414ecd2f4" - integrity sha512-AqNf2QWt1rtu2/1rLswy6CDP7H9Oh3mMhk177Y67Rg8d7RD9WfOLLv8CGn6tisFvS2htm86yIe1yLF6I1UDaGQ== - dependencies: - "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1" - eslint-visitor-keys "^2.1.0" - semver "^6.3.0" - -"@babel/generator@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.7.tgz#f8ef57c8242665c5929fe2e8d82ba75460187b4a" - integrity sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw== - dependencies: - "@babel/types" "^7.20.7" - "@jridgewell/gen-mapping" "^0.3.2" - jsesc "^2.5.1" - -"@babel/generator@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420" - integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g== - dependencies: - "@babel/types" "^7.23.0" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - -"@babel/helper-annotate-as-pure@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" - integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-compilation-targets@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz#a6cd33e93629f5eb473b021aac05df62c4cd09bb" - integrity sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ== - dependencies: - "@babel/compat-data" "^7.20.5" - "@babel/helper-validator-option" "^7.18.6" - browserslist "^4.21.3" - lru-cache "^5.1.1" - semver "^6.3.0" - -"@babel/helper-create-class-features-plugin@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.7.tgz#d0e1f8d7e4ed5dac0389364d9c0c191d948ade6f" - integrity sha512-LtoWbDXOaidEf50hmdDqn9g8VEzsorMexoWMQdQODbvmqYmaF23pBP5VNPAGIFHsFQCIeKokDiz3CH5Y2jlY6w== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.19.0" - "@babel/helper-member-expression-to-functions" "^7.20.7" - "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/helper-replace-supers" "^7.20.7" - "@babel/helper-split-export-declaration" "^7.18.6" - -"@babel/helper-environment-visitor@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" - integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== - -"@babel/helper-environment-visitor@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" - integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== - -"@babel/helper-function-name@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c" - integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w== - dependencies: - "@babel/template" "^7.18.10" - "@babel/types" "^7.19.0" - -"@babel/helper-function-name@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" - integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== - dependencies: - "@babel/template" "^7.22.15" - "@babel/types" "^7.23.0" - -"@babel/helper-hoist-variables@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" - integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-member-expression-to-functions@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.20.7.tgz#a6f26e919582275a93c3aa6594756d71b0bb7f05" - integrity sha512-9J0CxJLq315fEdi4s7xK5TQaNYjZw+nDVpVqr1axNGKzdrdwYBD5b4uKv3n75aABG0rCCTK8Im8Ww7eYfMrZgw== - dependencies: - "@babel/types" "^7.20.7" - -"@babel/helper-module-imports@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" - integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-module-transforms@^7.20.7": - version "7.20.11" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz#df4c7af713c557938c50ea3ad0117a7944b2f1b0" - integrity sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg== - dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-simple-access" "^7.20.2" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/helper-validator-identifier" "^7.19.1" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.20.10" - "@babel/types" "^7.20.7" - -"@babel/helper-optimise-call-expression@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" - integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.20.2": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629" - integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ== - -"@babel/helper-replace-supers@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz#243ecd2724d2071532b2c8ad2f0f9f083bcae331" - integrity sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A== - dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-member-expression-to-functions" "^7.20.7" - "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.20.7" - "@babel/types" "^7.20.7" - -"@babel/helper-simple-access@^7.20.2": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" - integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA== - dependencies: - "@babel/types" "^7.20.2" - -"@babel/helper-split-export-declaration@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" - integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" - integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-string-parser@^7.19.4": - version "7.19.4" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" - integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== - -"@babel/helper-string-parser@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" - integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== - -"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" - integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== - -"@babel/helper-validator-identifier@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" - integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== - -"@babel/helper-validator-option@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" - integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== - -"@babel/helpers@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.20.7.tgz#04502ff0feecc9f20ecfaad120a18f011a8e6dce" - integrity sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA== - dependencies: - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.20.7" - "@babel/types" "^7.20.7" - -"@babel/highlight@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" - integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== - dependencies: - "@babel/helper-validator-identifier" "^7.18.6" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/highlight@^7.22.13": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" - integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== - dependencies: - "@babel/helper-validator-identifier" "^7.22.20" - chalk "^2.4.2" - js-tokens "^4.0.0" - -"@babel/parser@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.7.tgz#66fe23b3c8569220817d5feb8b9dcdc95bb4f71b" - integrity sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg== - -"@babel/parser@^7.22.15", "@babel/parser@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" - integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== - -"@babel/plugin-proposal-decorators@^7.18.2": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.20.7.tgz#05d37453c2ce818f3e47bbeda9468c8de947eecc" - integrity sha512-JB45hbUweYpwAGjkiM7uCyXMENH2lG+9r3G2E+ttc2PRXAoEkpfd/KW5jDg4j8RS6tLtTG1jZi9LbHZVSfs1/A== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.20.7" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-replace-supers" "^7.20.7" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/plugin-syntax-decorators" "^7.19.0" - -"@babel/plugin-syntax-decorators@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.19.0.tgz#5f13d1d8fce96951bea01a10424463c9a5b3a599" - integrity sha512-xaBZUEDntt4faL1yN8oIFlhfXeQAWJW7CLKYsHTUqriCUbj8xOra8bfxxKGi/UwExPFBuPdH4XfHc9rGQhrVkQ== - dependencies: - "@babel/helper-plugin-utils" "^7.19.0" - -"@babel/template@^7.18.10", "@babel/template@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" - integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" - -"@babel/template@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" - integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== - dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/parser" "^7.22.15" - "@babel/types" "^7.22.15" - -"@babel/traverse@^7.20.10", "@babel/traverse@^7.20.7": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.2.tgz#329c7a06735e144a506bdb2cad0268b7f46f4ad8" - integrity sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw== - dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.0" - "@babel/types" "^7.23.0" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/types@^7.18.6", "@babel/types@^7.19.0", "@babel/types@^7.20.2", "@babel/types@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.7.tgz#54ec75e252318423fc07fb644dc6a58a64c09b7f" - integrity sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg== - dependencies: - "@babel/helper-string-parser" "^7.19.4" - "@babel/helper-validator-identifier" "^7.19.1" - to-fast-properties "^2.0.0" - -"@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb" - integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg== - dependencies: - "@babel/helper-string-parser" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.20" - to-fast-properties "^2.0.0" - -"@ember-data/rfc395-data@^0.0.4": - version "0.0.4" - resolved "https://registry.yarnpkg.com/@ember-data/rfc395-data/-/rfc395-data-0.0.4.tgz#ecb86efdf5d7733a76ff14ea651a1b0ed1f8a843" - integrity sha512-tGRdvgC9/QMQSuSuJV45xoyhI0Pzjm7A9o/MVVA3HakXIImJbbzx/k/6dO9CUEQXIyS2y0fW6C1XaYOG7rY0FQ== - -"@eslint/eslintrc@^1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.4.1.tgz#af58772019a2d271b7e2d4c23ff4ddcba3ccfb3e" - integrity sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.4.0" - globals "^13.19.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" - -"@glimmer/env@0.1.7", "@glimmer/env@^0.1.7": - version "0.1.7" - resolved "https://registry.yarnpkg.com/@glimmer/env/-/env-0.1.7.tgz#fd2d2b55a9029c6b37a6c935e8c8871ae70dfa07" - integrity sha512-JKF/a9I9jw6fGoz8kA7LEQslrwJ5jms5CXhu/aqkBWk+PmZ6pTl8mlb/eJ/5ujBGTiQzBhy5AIWF712iA+4/mw== - -"@glimmer/global-context@0.83.1": - version "0.83.1" - resolved "https://registry.yarnpkg.com/@glimmer/global-context/-/global-context-0.83.1.tgz#3e2d97f10ff623bcfb5b7dc29a858d546a6c6d66" - integrity sha512-OwlgqpbOJU73EjZOZdftab0fKbtdJ4x/QQeJseL9cvaAUiK3+w52M5ONFxD1T/yPBp2Mf7NCYqA/uL8tRbzY2A== - dependencies: - "@glimmer/env" "^0.1.7" - -"@glimmer/interfaces@0.83.1": - version "0.83.1" - resolved "https://registry.yarnpkg.com/@glimmer/interfaces/-/interfaces-0.83.1.tgz#fb16f5f683ddc55f130887b6141f58c0751350fe" - integrity sha512-rjAztghzX97v8I4rk3+NguM3XGYcFjc/GbJ8qrEj19KF2lUDoDBW1sB7f0tov3BD5HlrGXei/vOh4+DHfjeB5w== - dependencies: - "@simple-dom/interface" "^1.4.0" - -"@glimmer/reference@^0.83.1": - version "0.83.1" - resolved "https://registry.yarnpkg.com/@glimmer/reference/-/reference-0.83.1.tgz#0345b95431b5bb19843b308e6311d1ef81e36192" - integrity sha512-BThEwDlMkJB1WBPWDrww+VxgGyDbwxh5FFPvGhkovvCZnCb7fAMUCt9pi6CUZtviugkWOBFtE9P4eZZbOLkXeg== - dependencies: - "@glimmer/env" "^0.1.7" - "@glimmer/global-context" "0.83.1" - "@glimmer/interfaces" "0.83.1" - "@glimmer/util" "0.83.1" - "@glimmer/validator" "0.83.1" - -"@glimmer/syntax@^0.83.1": - version "0.83.1" - resolved "https://registry.yarnpkg.com/@glimmer/syntax/-/syntax-0.83.1.tgz#7e18dd445871c157ba0281f12a4fbf316fa49b41" - integrity sha512-n3vEd0GtjtgkOsd2gqkSimp8ecqq5KrHyana/s1XJZvVAPD5rMWT9WvAVWG8XAktns8BxjwLIUoj/vkOfA+eHg== - dependencies: - "@glimmer/interfaces" "0.83.1" - "@glimmer/util" "0.83.1" - "@handlebars/parser" "~2.0.0" - simple-html-tokenizer "^0.5.11" - -"@glimmer/util@0.83.1": - version "0.83.1" - resolved "https://registry.yarnpkg.com/@glimmer/util/-/util-0.83.1.tgz#cc7511b03164d658cf6e3262fce5a0fcb82edceb" - integrity sha512-amvjtl9dvrkxsoitXAly9W5NUaLIE3A2J2tWhBWIL1Z6DOFotfX7ytIosOIcPhJLZCtiXPHzMutQRv0G/MSMsA== - dependencies: - "@glimmer/env" "0.1.7" - "@glimmer/interfaces" "0.83.1" - "@simple-dom/interface" "^1.4.0" - -"@glimmer/validator@0.83.1", "@glimmer/validator@^0.83.0": - version "0.83.1" - resolved "https://registry.yarnpkg.com/@glimmer/validator/-/validator-0.83.1.tgz#7578cb2284f728c8e9302c51fc6e7660b570ac54" - integrity sha512-LaILSNnQgDHZpaUsfjVndbS1JfVn0xdTlJdFJblPbhoVklOBSReZVekens3EQ6xOr3BC612sRm1hBnEPixOY6A== - dependencies: - "@glimmer/env" "^0.1.7" - "@glimmer/global-context" "0.83.1" - -"@handlebars/parser@~2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@handlebars/parser/-/parser-2.0.0.tgz#5e8b7298f31ff8f7b260e6b7363c7e9ceed7d9c5" - integrity sha512-EP9uEDZv/L5Qh9IWuMUGJRfwhXJ4h1dqKTT4/3+tY0eu7sPis7xh23j61SYUnNF4vqCQvvUXpDo9Bh/+q1zASA== - -"@humanwhocodes/config-array@^0.11.8": - version "0.11.8" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9" - integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g== - dependencies: - "@humanwhocodes/object-schema" "^1.2.1" - debug "^4.1.1" - minimatch "^3.0.5" - -"@humanwhocodes/module-importer@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" - integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== - -"@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== - -"@jridgewell/gen-mapping@^0.1.0": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" - integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== - dependencies: - "@jridgewell/set-array" "^1.0.0" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@jridgewell/gen-mapping@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" - integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/resolve-uri@3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" - integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== - -"@jridgewell/resolve-uri@^3.1.0": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== - -"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - -"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" - integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== - -"@jridgewell/sourcemap-codec@^1.4.14": - version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@jridgewell/trace-mapping@^0.3.17": - version "0.3.20" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" - integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@jridgewell/trace-mapping@^0.3.9": - version "0.3.17" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" - integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== - dependencies: - "@jridgewell/resolve-uri" "3.1.0" - "@jridgewell/sourcemap-codec" "1.4.14" - -"@lint-todo/utils@^13.0.3": - version "13.1.0" - resolved "https://registry.yarnpkg.com/@lint-todo/utils/-/utils-13.1.0.tgz#bb99b479e357f20fbf5fa200c59cafda2a02f849" - integrity sha512-uzcZPIPH7hcs+hKMiHfp58MosJpI9sTTgl1pGYau4zq34q1ppswJ6nLeohv/cDhqEBrHjtvldt8zDnVJXRvBlA== - dependencies: - "@types/eslint" "^7.2.13" - find-up "^5.0.0" - fs-extra "^9.1.0" - proper-lockfile "^4.1.2" - slash "^3.0.0" - tslib "^2.4.0" - upath "^2.0.1" - -"@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1": - version "5.1.1-v1" - resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz#dbf733a965ca47b1973177dc0bb6c889edcfb129" - integrity sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg== - dependencies: - eslint-scope "5.1.1" - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@simple-dom/interface@^1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@simple-dom/interface/-/interface-1.4.0.tgz#e8feea579232017f89b0138e2726facda6fbb71f" - integrity sha512-l5qumKFWU0S+4ZzMaLXFU8tQZsicHEMEyAxI5kDFGhJsRqDwe0a7/iPA/GdxlGyDKseQQAgIz5kzU7eXTrlSpA== - -"@types/eslint@^7.2.13": - version "7.29.0" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.29.0.tgz#e56ddc8e542815272720bb0b4ccc2aff9c3e1c78" - integrity sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - -"@types/estree@*": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" - integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== - -"@types/json-schema@*": - version "7.0.11" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" - integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== - -"@types/minimatch@^3.0.3": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" - integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== - -"@types/symlink-or-copy@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@types/symlink-or-copy/-/symlink-or-copy-1.2.0.tgz#4151a81b4052c80bc2becbae09f3a9ec010a9c7a" - integrity sha512-Lja2xYuuf2B3knEsga8ShbOdsfNOtzT73GyJmZyY7eGl2+ajOqrs8yM5ze0fsSoYwvA6bw7/Qr7OZ7PEEmYwWg== - -acorn-jsx@^5.3.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn@^8.8.0: - version "8.8.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" - integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== - -ajv@^6.10.0, ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -aria-query@^5.0.2: - version "5.1.3" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e" - integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== - dependencies: - deep-equal "^2.0.5" - -array-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" - integrity sha512-H3LU5RLiSsGXPhN+Nipar0iR0IofH+8r89G2y1tBKxQ/agagKyAjhkAFDRBfodP2caPrNKHpAWNIM/c9yeL7uA== - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -async-disk-cache@^1.2.1: - version "1.3.5" - resolved "https://registry.yarnpkg.com/async-disk-cache/-/async-disk-cache-1.3.5.tgz#cc6206ed79bb6982b878fc52e0505e4f52b62a02" - integrity sha512-VZpqfR0R7CEOJZ/0FOTgWq70lCrZyS1rkI8PXugDUkTKyyAUgZ2zQ09gLhMkEn+wN8LYeUTPxZdXtlX/kmbXKQ== - dependencies: - debug "^2.1.3" - heimdalljs "^0.2.3" - istextorbinary "2.1.0" - mkdirp "^0.5.0" - rimraf "^2.5.3" - rsvp "^3.0.18" - username-sync "^1.0.2" - -async-promise-queue@^1.0.3, async-promise-queue@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/async-promise-queue/-/async-promise-queue-1.0.5.tgz#cb23bce9fce903a133946a700cc85f27f09ea49d" - integrity sha512-xi0aQ1rrjPWYmqbwr18rrSKbSaXIeIwSd1J4KAgVfkq8utNbdZoht7GfvfY6swFUAMJ9obkc4WPJmtGwl+B8dw== - dependencies: - async "^2.4.1" - debug "^2.6.8" - -async@^2.4.1: - version "2.6.4" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" - integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== - dependencies: - lodash "^4.17.14" - -at-least-node@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== - -available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== - -babel-import-util@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/babel-import-util/-/babel-import-util-0.2.0.tgz#b468bb679919601a3570f9e317536c54f2862e23" - integrity sha512-CtWYYHU/MgK88rxMrLfkD356dApswtR/kWZ/c6JifG1m10e7tBBrs/366dFzWMAoqYmG5/JSh+94tUSpIwh+ag== - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -"binaryextensions@1 || 2": - version "2.3.0" - resolved "https://registry.yarnpkg.com/binaryextensions/-/binaryextensions-2.3.0.tgz#1d269cbf7e6243ea886aa41453c3651ccbe13c22" - integrity sha512-nAihlQsYGyc5Bwq6+EsubvANYGExeJKHDO3RjnvwU042fawQTQfM3Kxn7IHUXQOz4bzfwsGYYHGSvXyW4zOGLg== - -bl@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -blank-object@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/blank-object/-/blank-object-1.0.2.tgz#f990793fbe9a8c8dd013fb3219420bec81d5f4b9" - integrity sha512-kXQ19Xhoghiyw66CUiGypnuRpWlbHAzY/+NyvqTEdTfhfQGH1/dbEMYiXju7fYKIFePpzp/y9dsu5Cu/PkmawQ== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -broccoli-debug@^0.6.5: - version "0.6.5" - resolved "https://registry.yarnpkg.com/broccoli-debug/-/broccoli-debug-0.6.5.tgz#164a5cdafd8936e525e702bf8f91f39d758e2e78" - integrity sha512-RIVjHvNar9EMCLDW/FggxFRXqpjhncM/3qq87bn/y+/zR9tqEkHvTqbyOc4QnB97NO2m6342w4wGkemkaeOuWg== - dependencies: - broccoli-plugin "^1.2.1" - fs-tree-diff "^0.5.2" - heimdalljs "^0.2.1" - heimdalljs-logger "^0.1.7" - symlink-or-copy "^1.1.8" - tree-sync "^1.2.2" - -broccoli-funnel@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/broccoli-funnel/-/broccoli-funnel-2.0.2.tgz#0edf629569bc10bd02cc525f74b9a38e71366a75" - integrity sha512-/vDTqtv7ipjEZQOVqO4vGDVAOZyuYzQ/EgGoyewfOgh1M7IQAToBKZI0oAQPgMBeFPPlIbfMuAngk+ohPBuaHQ== - dependencies: - array-equal "^1.0.0" - blank-object "^1.0.1" - broccoli-plugin "^1.3.0" - debug "^2.2.0" - fast-ordered-set "^1.0.0" - fs-tree-diff "^0.5.3" - heimdalljs "^0.2.0" - minimatch "^3.0.0" - mkdirp "^0.5.0" - path-posix "^1.0.0" - rimraf "^2.4.3" - symlink-or-copy "^1.0.0" - walk-sync "^0.3.1" - -broccoli-kitchen-sink-helpers@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/broccoli-kitchen-sink-helpers/-/broccoli-kitchen-sink-helpers-0.3.1.tgz#77c7c18194b9664163ec4fcee2793444926e0c06" - integrity sha512-gqYnKSJxBSjj/uJqeuRAzYVbmjWhG0mOZ8jrp6+fnUIOgLN6MvI7XxBECDHkYMIFPJ8Smf4xaI066Q2FqQDnXg== - dependencies: - glob "^5.0.10" - mkdirp "^0.5.1" - -broccoli-merge-trees@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/broccoli-merge-trees/-/broccoli-merge-trees-3.0.2.tgz#f33b451994225522b5c9bcf27d59decfd8ba537d" - integrity sha512-ZyPAwrOdlCddduFbsMyyFzJUrvW6b04pMvDiAQZrCwghlvgowJDY+EfoXn+eR1RRA5nmGHJ+B68T63VnpRiT1A== - dependencies: - broccoli-plugin "^1.3.0" - merge-trees "^2.0.0" - -broccoli-persistent-filter@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/broccoli-persistent-filter/-/broccoli-persistent-filter-2.3.1.tgz#4a052e0e0868b344c3a2977e35a3d497aa9eca72" - integrity sha512-hVsmIgCDrl2NFM+3Gs4Cr2TA6UPaIZip99hN8mtkaUPgM8UeVnCbxelCvBjUBHo0oaaqP5jzqqnRVvb568Yu5g== - dependencies: - async-disk-cache "^1.2.1" - async-promise-queue "^1.0.3" - broccoli-plugin "^1.0.0" - fs-tree-diff "^2.0.0" - hash-for-dep "^1.5.0" - heimdalljs "^0.2.1" - heimdalljs-logger "^0.1.7" - mkdirp "^0.5.1" - promise-map-series "^0.2.1" - rimraf "^2.6.1" - rsvp "^4.7.0" - symlink-or-copy "^1.0.1" - sync-disk-cache "^1.3.3" - walk-sync "^1.0.0" - -broccoli-plugin@^1.0.0, broccoli-plugin@^1.2.1, broccoli-plugin@^1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/broccoli-plugin/-/broccoli-plugin-1.3.1.tgz#a26315732fb99ed2d9fb58f12a1e14e986b4fabd" - integrity sha512-DW8XASZkmorp+q7J4EeDEZz+LoyKLAd2XZULXyD9l4m9/hAKV3vjHmB1kiUshcWAYMgTP1m2i4NnqCE/23h6AQ== - dependencies: - promise-map-series "^0.2.1" - quick-temp "^0.1.3" - rimraf "^2.3.4" - symlink-or-copy "^1.1.8" - -broccoli-plugin@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/broccoli-plugin/-/broccoli-plugin-2.1.0.tgz#2fab6c578219cfcc64f773e9616073313fc8b334" - integrity sha512-ElE4caljW4slapyEhSD9jU9Uayc8SoSABWdmY9SqbV8DHNxU6xg1jJsPcMm+cXOvggR3+G+OXAYQeFjWVnznaw== - dependencies: - promise-map-series "^0.2.1" - quick-temp "^0.1.3" - rimraf "^2.3.4" - symlink-or-copy "^1.1.8" - -broccoli-stew@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/broccoli-stew/-/broccoli-stew-3.0.0.tgz#fd1d19d162ad9490b42e5c563b78c26eb1e80b95" - integrity sha512-NXfi+Vas24n3Ivo21GvENTI55qxKu7OwKRnCLWXld8MiLiQKQlWIq28eoARaFj0lTUFwUa4jKZeA7fW9PiWQeg== - dependencies: - broccoli-debug "^0.6.5" - broccoli-funnel "^2.0.0" - broccoli-merge-trees "^3.0.1" - broccoli-persistent-filter "^2.3.0" - broccoli-plugin "^2.1.0" - chalk "^2.4.1" - debug "^4.1.1" - ensure-posix-path "^1.0.1" - fs-extra "^8.0.1" - minimatch "^3.0.4" - resolve "^1.11.1" - rsvp "^4.8.5" - symlink-or-copy "^1.2.0" - walk-sync "^1.1.3" - -browserslist@^4.21.3: - version "4.21.4" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987" - integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== - dependencies: - caniuse-lite "^1.0.30001400" - electron-to-chromium "^1.4.251" - node-releases "^2.0.6" - update-browserslist-db "^1.0.9" - -buffer@^5.5.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -can-symlink@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/can-symlink/-/can-symlink-1.0.0.tgz#97b607d8a84bb6c6e228b902d864ecb594b9d219" - integrity sha512-RbsNrFyhwkx+6psk/0fK/Q9orOUr9VMxohGd8vTa4djf4TGLfblBgUfqZChrZuW0Q+mz2eBPFLusw9Jfukzmhg== - dependencies: - tmp "0.0.28" - -caniuse-lite@^1.0.30001400: - version "1.0.30001441" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001441.tgz#987437b266260b640a23cd18fbddb509d7f69f3e" - integrity sha512-OyxRR4Vof59I3yGWXws6i908EtGbMzVUi3ganaZQHmydk1iwDhRnvaPG2WaR0KcqrDFKrxVZHULT396LEPhXfg== - -chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -ci-info@^3.4.0: - version "3.7.1" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.7.1.tgz#708a6cdae38915d597afdf3b145f2f8e1ff55f3f" - integrity sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w== - -clean-up-path@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/clean-up-path/-/clean-up-path-1.0.0.tgz#de9e8196519912e749c9eaf67c13d64fac72a3e5" - integrity sha512-PHGlEF0Z6976qQyN6gM7kKH6EH0RdfZcc8V+QhFe36eRxV0SMH5OUBZG7Bxa9YcreNzyNbK63cGiZxdSZgosRw== - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-spinners@^2.5.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.7.0.tgz#f815fd30b5f9eaac02db604c7a231ed7cb2f797a" - integrity sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw== - -cliui@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" - integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -colors@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" - integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== - -commander@^8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" - integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -convert-source-map@^1.7.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" - integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== - -cross-spawn@^7.0.2: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -css-tree@^2.0.4: - version "2.3.1" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20" - integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw== - dependencies: - mdn-data "2.0.30" - source-map-js "^1.0.1" - -date-fns@^2.29.2: - version "2.29.3" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.29.3.tgz#27402d2fc67eb442b511b70bbdf98e6411cd68a8" - integrity sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA== - -debug@^2.1.3, debug@^2.2.0, debug@^2.6.8: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@^4.1.0, debug@^4.1.1, debug@^4.3.2: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -deep-equal@^2.0.5: - version "2.1.0" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.1.0.tgz#5ba60402cf44ab92c2c07f3f3312c3d857a0e1dd" - integrity sha512-2pxgvWu3Alv1PoWEyVg7HS8YhGlUFUV7N5oOvfL6d+7xAmLSemMwv/c8Zv/i9KFzxV5Kt5CAvQc70fLwVuf4UA== - dependencies: - call-bind "^1.0.2" - es-get-iterator "^1.1.2" - get-intrinsic "^1.1.3" - is-arguments "^1.1.1" - is-date-object "^1.0.5" - is-regex "^1.1.4" - isarray "^2.0.5" - object-is "^1.1.5" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.4.3" - side-channel "^1.0.4" - which-boxed-primitive "^1.0.2" - which-collection "^1.0.1" - which-typed-array "^1.1.8" - -deep-is@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - -defaults@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" - integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== - dependencies: - clone "^1.0.2" - -define-properties@^1.1.3, define-properties@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" - integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== - dependencies: - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -dot-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" - integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -editions@^1.1.1: - version "1.3.4" - resolved "https://registry.yarnpkg.com/editions/-/editions-1.3.4.tgz#3662cb592347c3168eb8e498a0ff73271d67f50b" - integrity sha512-gzao+mxnYDzIysXKMQi/+M1mjy/rjestjg6OPoYTtI+3Izp23oiGZitsl9lPDPiTGXbcSIk1iJWhliSaglxnUg== - -electron-to-chromium@^1.4.251: - version "1.4.284" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz#61046d1e4cab3a25238f6bf7413795270f125592" - integrity sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA== - -ember-cli-babel-plugin-helpers@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ember-cli-babel-plugin-helpers/-/ember-cli-babel-plugin-helpers-1.1.1.tgz#5016b80cdef37036c4282eef2d863e1d73576879" - integrity sha512-sKvOiPNHr5F/60NLd7SFzMpYPte/nnGkq/tMIfXejfKHIhaiIkYFqX8Z9UFTKWLLn+V7NOaby6niNPZUdvKCRw== - -ember-cli-version-checker@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/ember-cli-version-checker/-/ember-cli-version-checker-5.1.2.tgz#649c7b6404902e3b3d69c396e054cea964911ab0" - integrity sha512-rk7GY+FmLn/2e22HsZs0Ycrz8HQ1W3Fv+2TFOuEFW9optnDXDgkntPBIl6gact/LHsfBM5RKbM3dHsIIeLgl0Q== - dependencies: - resolve-package-path "^3.1.0" - semver "^7.3.4" - silent-error "^1.1.1" - -ember-rfc176-data@^0.3.15: - version "0.3.17" - resolved "https://registry.yarnpkg.com/ember-rfc176-data/-/ember-rfc176-data-0.3.17.tgz#d4fc6c33abd6ef7b3440c107a28e04417b49860a" - integrity sha512-EVzTTKqxv9FZbEh6Ktw56YyWRAA0MijKvl7H8C06wVF+8f/cRRz3dXxa4nkwjzyVwx4rzKGuIGq77hxJAQhWWw== - -ember-template-imports@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/ember-template-imports/-/ember-template-imports-3.4.0.tgz#c40757e2d41e289ce08c0fe80671000bf216e0ef" - integrity sha512-3Cwcj3NXA129g3ZhmrQ/nYOxksFonTmB/qxyaSNTHrLBSoc93UZys47hBz13DlcfoeSCCrNt2Qpq1j890I04PQ== - dependencies: - babel-import-util "^0.2.0" - broccoli-stew "^3.0.0" - ember-cli-babel-plugin-helpers "^1.1.1" - ember-cli-version-checker "^5.1.2" - line-column "^1.0.2" - magic-string "^0.25.7" - parse-static-imports "^1.1.0" - string.prototype.matchall "^4.0.6" - validate-peer-dependencies "^1.1.0" - -ember-template-lint-plugin-discourse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ember-template-lint-plugin-discourse/-/ember-template-lint-plugin-discourse-3.0.0.tgz#9212226e4d2f6dce2e35b480aaf240067d736246" - integrity sha512-4zi/qN+vXs0ZpJZrwdMfZ5hMThJbeVCFdof6iek4PmgIJhnlA0lzqIa1BrKpSKhr3ckd5K0rUMNcCAm0uKNOtg== - -ember-template-lint@^4.10.0: - version "4.18.2" - resolved "https://registry.yarnpkg.com/ember-template-lint/-/ember-template-lint-4.18.2.tgz#18e5e5fc6ea7301e7a075e024008271d2a781e1e" - integrity sha512-yI8kQ8IQ2x5HVq0tQAISXABOHr0Is5sAg6rwceO6M8CYozq7HMxUPEj0VbdcbyIE70SWw/8d24M1rBI4km544Q== - dependencies: - "@lint-todo/utils" "^13.0.3" - aria-query "^5.0.2" - chalk "^4.1.2" - ci-info "^3.4.0" - date-fns "^2.29.2" - ember-template-imports "^3.4.0" - ember-template-recast "^6.1.3" - find-up "^6.3.0" - fuse.js "^6.5.3" - get-stdin "^9.0.0" - globby "^13.1.2" - is-glob "^4.0.3" - language-tags "^1.0.5" - micromatch "^4.0.5" - resolve "^1.22.1" - v8-compile-cache "^2.3.0" - yargs "^17.5.1" - -ember-template-recast@^6.1.3: - version "6.1.3" - resolved "https://registry.yarnpkg.com/ember-template-recast/-/ember-template-recast-6.1.3.tgz#1e9b256ee9da24bcaa7c213088d01f32afc88001" - integrity sha512-45lkfjrWlrMPlOd5rLFeQeePZwAvcS//x1x15kaiQTlqQdYWiYNXwbpWHqV+p9fXY6bEjl6EbyPhG/zBkgh8MA== - dependencies: - "@glimmer/reference" "^0.83.1" - "@glimmer/syntax" "^0.83.1" - "@glimmer/validator" "^0.83.0" - async-promise-queue "^1.0.5" - colors "^1.4.0" - commander "^8.3.0" - globby "^11.0.3" - ora "^5.4.0" - slash "^3.0.0" - tmp "^0.2.1" - workerpool "^6.1.5" - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -ensure-posix-path@^1.0.0, ensure-posix-path@^1.0.1, ensure-posix-path@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ensure-posix-path/-/ensure-posix-path-1.1.1.tgz#3c62bdb19fa4681544289edb2b382adc029179ce" - integrity sha512-VWU0/zXzVbeJNXvME/5EmLuEj2TauvoaTz6aFYK1Z92JCBlDlZ3Gu0tuGR42kpW1754ywTs+QB0g5TP0oj9Zaw== - -es-abstract@^1.19.0, es-abstract@^1.20.4: - version "1.20.5" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.5.tgz#e6dc99177be37cacda5988e692c3fa8b218e95d2" - integrity sha512-7h8MM2EQhsCA7pU/Nv78qOXFpD8Rhqd12gYiSJVkrH9+e8VuA8JlPJK/hQjjlLv6pJvx/z1iRFKzYb0XT/RuAQ== - dependencies: - call-bind "^1.0.2" - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - function.prototype.name "^1.1.5" - get-intrinsic "^1.1.3" - get-symbol-description "^1.0.0" - gopd "^1.0.1" - has "^1.0.3" - has-property-descriptors "^1.0.0" - has-symbols "^1.0.3" - internal-slot "^1.0.3" - is-callable "^1.2.7" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-weakref "^1.0.2" - object-inspect "^1.12.2" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.4.3" - safe-regex-test "^1.0.0" - string.prototype.trimend "^1.0.6" - string.prototype.trimstart "^1.0.6" - unbox-primitive "^1.0.2" - -es-get-iterator@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.2.tgz#9234c54aba713486d7ebde0220864af5e2b283f7" - integrity sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.0" - has-symbols "^1.0.1" - is-arguments "^1.1.0" - is-map "^2.0.2" - is-set "^2.0.2" - is-string "^1.0.5" - isarray "^2.0.5" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -eslint-config-discourse@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/eslint-config-discourse/-/eslint-config-discourse-3.4.0.tgz#636a1824bca48c90aeac5bee2f8d7b993609191f" - integrity sha512-9jwu8GQPDOxAO0ByV6RbInu5r39HrFvbAHQRJ8YoGg2fuvHcX+p7fYcxEWj64LhmF4qD55cAGhN0Gmj10RVjoQ== - dependencies: - "@babel/core" "^7.18.5" - "@babel/eslint-parser" "^7.18.2" - "@babel/plugin-proposal-decorators" "^7.18.2" - ember-template-lint "^4.10.0" - ember-template-lint-plugin-discourse "^3.0.0" - eslint "^8.17.0" - eslint-plugin-discourse-ember latest - eslint-plugin-ember "^10.6.1" - eslint-plugin-lodash "^7.1.0" - eslint-plugin-node "^11.1.0" - eslint-plugin-sort-class-members "^1.14.1" - prettier "2.8.1" - -eslint-plugin-discourse-ember@latest: - version "0.0.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-discourse-ember/-/eslint-plugin-discourse-ember-0.0.3.tgz#69e5876c2ece38ab3d6c4a05f0a20a7dc4c21e37" - integrity sha512-EFwWU4FlOSLBa4RolKZL8QD1eGOnvSkACLt4Big+o1ZUIpW7gGvfnJPtxkbaQ4XmhtZ5HetYt6862vVqhUMv9A== - dependencies: - requireindex "~1.1.0" - -eslint-plugin-ember@^10.6.1: - version "10.6.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-ember/-/eslint-plugin-ember-10.6.1.tgz#04ea84cc82307f64a2faa4f2855b30e5ebf9f722" - integrity sha512-R+TN3jwhYQ2ytZCA1VkfJDZSGgHFOHjsHU1DrBlRXYRepThe56PpuGxywAyDvQ7inhoAz3e6G6M60PzpvjzmNg== - dependencies: - "@ember-data/rfc395-data" "^0.0.4" - css-tree "^2.0.4" - ember-rfc176-data "^0.3.15" - eslint-utils "^3.0.0" - estraverse "^5.2.0" - lodash.kebabcase "^4.1.1" - requireindex "^1.2.0" - snake-case "^3.0.3" - -eslint-plugin-es@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz#75a7cdfdccddc0589934aeeb384175f221c57893" - integrity sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ== - dependencies: - eslint-utils "^2.0.0" - regexpp "^3.0.0" - -eslint-plugin-lodash@^7.1.0: - version "7.4.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-lodash/-/eslint-plugin-lodash-7.4.0.tgz#14a761547f126c92ff56789662a20a44f8bb6290" - integrity sha512-Tl83UwVXqe1OVeBRKUeWcfg6/pCW1GTRObbdnbEJgYwjxp5Q92MEWQaH9+dmzbRt6kvYU1Mp893E79nJiCSM8A== - dependencies: - lodash "^4.17.21" - -eslint-plugin-node@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz#c95544416ee4ada26740a30474eefc5402dc671d" - integrity sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g== - dependencies: - eslint-plugin-es "^3.0.0" - eslint-utils "^2.0.0" - ignore "^5.1.1" - minimatch "^3.0.4" - resolve "^1.10.1" - semver "^6.1.0" - -eslint-plugin-sort-class-members@^1.14.1: - version "1.16.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-sort-class-members/-/eslint-plugin-sort-class-members-1.16.0.tgz#e47596d867a57713571f040024c03fe674dec3fc" - integrity sha512-8l0IqUmoupk9PvO5D4I5zJqirVe9sax5Hpfv9xQmnrSpLYkc8BSYGnUjuHGMSSe4jKuC73NIr38kQv1tPbO+Xg== - -eslint-scope@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-scope@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" - integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - -eslint-utils@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" - integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== - dependencies: - eslint-visitor-keys "^2.0.0" - -eslint-visitor-keys@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - -eslint-visitor-keys@^2.0.0, eslint-visitor-keys@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== - -eslint-visitor-keys@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" - integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== - -eslint@^8.17.0: - version "8.31.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.31.0.tgz#75028e77cbcff102a9feae1d718135931532d524" - integrity sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA== - dependencies: - "@eslint/eslintrc" "^1.4.1" - "@humanwhocodes/config-array" "^0.11.8" - "@humanwhocodes/module-importer" "^1.0.1" - "@nodelib/fs.walk" "^1.2.8" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - doctrine "^3.0.0" - escape-string-regexp "^4.0.0" - eslint-scope "^7.1.1" - eslint-utils "^3.0.0" - eslint-visitor-keys "^3.3.0" - espree "^9.4.0" - esquery "^1.4.0" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - find-up "^5.0.0" - glob-parent "^6.0.2" - globals "^13.19.0" - grapheme-splitter "^1.0.4" - ignore "^5.2.0" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - is-path-inside "^3.0.3" - js-sdsl "^4.1.4" - js-yaml "^4.1.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" - natural-compare "^1.4.0" - optionator "^0.9.1" - regexpp "^3.2.0" - strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" - text-table "^0.2.0" - -espree@^9.4.0: - version "9.4.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.1.tgz#51d6092615567a2c2cff7833445e37c28c0065bd" - integrity sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg== - dependencies: - acorn "^8.8.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.3.0" - -esquery@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-glob@^3.2.11, fast-glob@^3.2.9: - version "3.2.12" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" - integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - -fast-ordered-set@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/fast-ordered-set/-/fast-ordered-set-1.0.3.tgz#3fbb36634f7be79e4f7edbdb4a357dee25d184eb" - integrity sha512-MxBW4URybFszOx1YlACEoK52P6lE3xiFcPaGCUZ7QQOZ6uJXKo++Se8wa31SjcZ+NC/fdAWX7UtKEfaGgHS2Vg== - dependencies: - blank-object "^1.0.1" - -fastq@^1.6.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" - integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== - dependencies: - reusify "^1.0.4" - -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -find-up@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-6.3.0.tgz#2abab3d3280b2dc7ac10199ef324c4e002c8c790" - integrity sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw== - dependencies: - locate-path "^7.1.0" - path-exists "^5.0.0" - -flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== - dependencies: - flatted "^3.1.0" - rimraf "^3.0.2" - -flatted@^3.1.0: - version "3.2.7" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" - integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== - -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - -fs-extra@^8.0.1: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-tree-diff@^0.5.2, fs-tree-diff@^0.5.3, fs-tree-diff@^0.5.6: - version "0.5.9" - resolved "https://registry.yarnpkg.com/fs-tree-diff/-/fs-tree-diff-0.5.9.tgz#a4ec6182c2f5bd80b9b83c8e23e4522e6f5fd946" - integrity sha512-872G8ax0kHh01m9n/2KDzgYwouKza0Ad9iFltBpNykvROvf2AGtoOzPJgGx125aolGPER3JuC7uZFrQ7bG1AZw== - dependencies: - heimdalljs-logger "^0.1.7" - object-assign "^4.1.0" - path-posix "^1.0.0" - symlink-or-copy "^1.1.8" - -fs-tree-diff@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fs-tree-diff/-/fs-tree-diff-2.0.1.tgz#343e4745ab435ec39ebac5f9059ad919cd034afa" - integrity sha512-x+CfAZ/lJHQqwlD64pYM5QxWjzWhSjroaVsr8PW831zOApL55qPibed0c+xebaLWVr2BnHFoHdrwOv8pzt8R5A== - dependencies: - "@types/symlink-or-copy" "^1.2.0" - heimdalljs-logger "^0.1.7" - object-assign "^4.1.0" - path-posix "^1.0.0" - symlink-or-copy "^1.1.8" - -fs-updater@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/fs-updater/-/fs-updater-1.0.4.tgz#2329980f99ae9176e9a0e84f7637538a182ce63b" - integrity sha512-0pJX4mJF/qLsNEwTct8CdnnRdagfb+LmjRPJ8sO+nCnAZLW0cTmz4rTgU25n+RvTuWSITiLKrGVJceJPBIPlKg== - dependencies: - can-symlink "^1.0.0" - clean-up-path "^1.0.0" - heimdalljs "^0.2.5" - heimdalljs-logger "^0.1.9" - rimraf "^2.6.2" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -function.prototype.name@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" - integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.0" - functions-have-names "^1.2.2" - -functions-have-names@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - -fuse.js@^6.5.3: - version "6.6.2" - resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-6.6.2.tgz#fe463fed4b98c0226ac3da2856a415576dc9a111" - integrity sha512-cJaJkxCCxC8qIIcPBF9yGxY0W/tVZS3uEISDxhYIdtk8OL93pe+6Zj7LjCqVV4dzbqcriOZ+kQ/NE4RXZHsIGA== - -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" - integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.3" - -get-stdin@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-9.0.0.tgz#3983ff82e03d56f1b2ea0d3e60325f39d703a575" - integrity sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA== - -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - -glob-parent@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob@^5.0.10: - version "5.0.15" - resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" - integrity sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA== - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "2 || 3" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.1.3: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^13.19.0: - version "13.19.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.19.0.tgz#7a42de8e6ad4f7242fbcca27ea5b23aca367b5c8" - integrity sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ== - dependencies: - type-fest "^0.20.2" - -globby@^11.0.3: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -globby@^13.1.2: - version "13.1.3" - resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.3.tgz#f62baf5720bcb2c1330c8d4ef222ee12318563ff" - integrity sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw== - dependencies: - dir-glob "^3.0.1" - fast-glob "^3.2.11" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^4.0.0" - -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - -grapheme-splitter@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" - integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== - -has-bigints@^1.0.1, has-bigints@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== - dependencies: - get-intrinsic "^1.1.1" - -has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hash-for-dep@^1.5.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/hash-for-dep/-/hash-for-dep-1.5.1.tgz#497754b39bee2f1c4ade4521bfd2af0a7c1196e3" - integrity sha512-/dQ/A2cl7FBPI2pO0CANkvuuVi/IFS5oTyJ0PsOb6jW6WbVW1js5qJXMJTNbWHXBIPdFTWFbabjB+mE0d+gelw== - dependencies: - broccoli-kitchen-sink-helpers "^0.3.1" - heimdalljs "^0.2.3" - heimdalljs-logger "^0.1.7" - path-root "^0.1.1" - resolve "^1.10.0" - resolve-package-path "^1.0.11" - -heimdalljs-logger@^0.1.7, heimdalljs-logger@^0.1.9: - version "0.1.10" - resolved "https://registry.yarnpkg.com/heimdalljs-logger/-/heimdalljs-logger-0.1.10.tgz#90cad58aabb1590a3c7e640ddc6a4cd3a43faaf7" - integrity sha512-pO++cJbhIufVI/fmB/u2Yty3KJD0TqNPecehFae0/eps0hkZ3b4Zc/PezUMOpYuHFQbA7FxHZxa305EhmjLj4g== - dependencies: - debug "^2.2.0" - heimdalljs "^0.2.6" - -heimdalljs@^0.2.0, heimdalljs@^0.2.1, heimdalljs@^0.2.3, heimdalljs@^0.2.5, heimdalljs@^0.2.6: - version "0.2.6" - resolved "https://registry.yarnpkg.com/heimdalljs/-/heimdalljs-0.2.6.tgz#b0eebabc412813aeb9542f9cc622cb58dbdcd9fe" - integrity sha512-o9bd30+5vLBvBtzCPwwGqpry2+n0Hi6H1+qwt6y+0kwRHGGF8TFIhJPmnuM0xO97zaKrDZMwO/V56fAnn8m/tA== - dependencies: - rsvp "~3.2.1" - -ieee754@^1.1.13: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore@^5.1.1, ignore@^5.2.0: - version "5.2.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== - -import-fresh@^3.0.0, import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@^2.0.3, inherits@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -internal-slot@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.4.tgz#8551e7baf74a7a6ba5f749cfb16aa60722f0d6f3" - integrity sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ== - dependencies: - get-intrinsic "^1.1.3" - has "^1.0.3" - side-channel "^1.0.4" - -is-arguments@^1.1.0, is-arguments@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== - dependencies: - has-bigints "^1.0.1" - -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - -is-core-module@^2.9.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" - integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== - dependencies: - has "^1.0.3" - -is-date-object@^1.0.1, is-date-object@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== - dependencies: - has-tostringtag "^1.0.0" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-interactive@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" - integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== - -is-map@^2.0.1, is-map@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" - integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== - -is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== - -is-number-object@^1.0.4: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" - integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== - dependencies: - has-tostringtag "^1.0.0" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-path-inside@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - -is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-set@^2.0.1, is-set@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" - integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== - -is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== - dependencies: - call-bind "^1.0.2" - -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== - dependencies: - has-tostringtag "^1.0.0" - -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - -is-typed-array@^1.1.10: - version "1.1.10" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" - integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" - -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - -is-weakmap@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" - integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== - -is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== - dependencies: - call-bind "^1.0.2" - -is-weakset@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d" - integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - -isarray@1.0.0, isarray@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -isarray@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA== - dependencies: - isarray "1.0.0" - -istextorbinary@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/istextorbinary/-/istextorbinary-2.1.0.tgz#dbed2a6f51be2f7475b68f89465811141b758874" - integrity sha512-kT1g2zxZ5Tdabtpp9VSdOzW9lb6LXImyWbzbQeTxoRtHhurC9Ej9Wckngr2+uepPL09ky/mJHmN9jeJPML5t6A== - dependencies: - binaryextensions "1 || 2" - editions "^1.1.1" - textextensions "1 || 2" - -js-sdsl@^4.1.4: - version "4.2.0" - resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.2.0.tgz#278e98b7bea589b8baaf048c20aeb19eb7ad09d0" - integrity sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ== - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== - -json5@^2.2.1: - version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== - optionalDependencies: - graceful-fs "^4.1.6" - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -language-subtag-registry@^0.3.20: - version "0.3.22" - resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" - integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== - -language-tags@^1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.7.tgz#41cc248730f3f12a452c2e2efe32bc0bbce67967" - integrity sha512-bSytju1/657hFjgUzPAPqszxH62ouE8nQFoFaVlIQfne4wO/wXC9A4+m8jYve7YBBvi59eq0SUpcshvG8h5Usw== - dependencies: - language-subtag-registry "^0.3.20" - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -line-column@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/line-column/-/line-column-1.0.2.tgz#d25af2936b6f4849172b312e4792d1d987bc34a2" - integrity sha512-Ktrjk5noGYlHsVnYWh62FLVs4hTb8A3e+vucNZMgPeAOITdshMSgv4cCZQeRDjm7+goqmo6+liZwTXo+U3sVww== - dependencies: - isarray "^1.0.0" - isobject "^2.0.0" - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -locate-path@^7.1.0: - version "7.1.1" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-7.1.1.tgz#8e1e5a75c7343770cef02ff93c4bf1f0aa666374" - integrity sha512-vJXaRMJgRVD3+cUZs3Mncj2mxpt5mP0EmNOsxRSZRMlbqjvxzDEOIUWXGmavo0ZC9+tNZCBLQ66reA11nbpHZg== - dependencies: - p-locate "^6.0.0" - -lodash.kebabcase@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" - integrity sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g== - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash@^4.17.14, lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-symbols@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -lower-case@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" - integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== - dependencies: - tslib "^2.0.3" - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -magic-string@^0.25.7: - version "0.25.9" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" - integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== - dependencies: - sourcemap-codec "^1.4.8" - -matcher-collection@^1.0.0, matcher-collection@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/matcher-collection/-/matcher-collection-1.1.2.tgz#1076f506f10ca85897b53d14ef54f90a5c426838" - integrity sha512-YQ/teqaOIIfUHedRam08PB3NK7Mjct6BvzRnJmpGDm8uFXpNr1sbY4yuflI5JcEs6COpYA0FpRQhSDBf1tT95g== - dependencies: - minimatch "^3.0.2" - -mdn-data@2.0.30: - version "2.0.30" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc" - integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== - -merge-trees@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-trees/-/merge-trees-2.0.0.tgz#a560d796e566c5d9b2c40472a2967cca48d85161" - integrity sha512-5xBbmqYBalWqmhYm51XlohhkmVOua3VAUrrWh8t9iOkaLpS6ifqm/UVuUjQCeDVJ9Vx3g2l6ihfkbLSTeKsHbw== - dependencies: - fs-updater "^1.0.4" - heimdalljs "^0.2.5" - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -micromatch@^4.0.4, micromatch@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.2.6: - version "1.2.7" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" - integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== - -mkdirp@^0.5.0, mkdirp@^0.5.1: - version "0.5.6" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" - integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== - dependencies: - minimist "^1.2.6" - -mktemp@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/mktemp/-/mktemp-0.4.0.tgz#6d0515611c8a8c84e484aa2000129b98e981ff0b" - integrity sha512-IXnMcJ6ZyTuhRmJSjzvHSRhlVPiN9Jwc6e59V0bEJ0ba6OBeX2L0E+mRN1QseeOF4mM+F1Rit6Nh7o+rl2Yn/A== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== - -no-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" - integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== - dependencies: - lower-case "^2.0.2" - tslib "^2.0.3" - -node-releases@^2.0.6: - version "2.0.8" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.8.tgz#0f349cdc8fcfa39a92ac0be9bc48b7706292b9ae" - integrity sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A== - -object-assign@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -object-inspect@^1.12.2, object-inspect@^1.9.0: - version "1.12.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" - integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== - -object-is@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" - integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object.assign@^4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - has-symbols "^1.0.3" - object-keys "^1.1.1" - -once@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -onetime@^5.1.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== - dependencies: - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - word-wrap "^1.2.3" - -ora@^5.4.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" - integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== - dependencies: - bl "^4.1.0" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-spinners "^2.5.0" - is-interactive "^1.0.0" - is-unicode-supported "^0.1.0" - log-symbols "^4.1.0" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - -os-tmpdir@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== - -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-limit@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644" - integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== - dependencies: - yocto-queue "^1.0.0" - -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -p-locate@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-6.0.0.tgz#3da9a49d4934b901089dca3302fa65dc5a05c04f" - integrity sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw== - dependencies: - p-limit "^4.0.0" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-static-imports@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/parse-static-imports/-/parse-static-imports-1.1.0.tgz#ae2f18f18da1a993080ae406a5219455c0bbad5d" - integrity sha512-HlxrZcISCblEV0lzXmAHheH/8qEkKgmqkdxyHTPbSqsTUV8GzqmN1L+SSti+VbNPfbBO3bYLPHDiUs2avbAdbA== - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-exists@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-5.0.0.tgz#a6aad9489200b21fab31e49cf09277e5116fb9e7" - integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-posix@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/path-posix/-/path-posix-1.0.0.tgz#06b26113f56beab042545a23bfa88003ccac260f" - integrity sha512-1gJ0WpNIiYcQydgg3Ed8KzvIqTsDpNwq+cjBCssvBtuTWjEqY1AW+i+OepiEMqDCzyro9B2sLAe4RBPajMYFiA== - -path-root-regex@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d" - integrity sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ== - -path-root@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/path-root/-/path-root-0.1.1.tgz#9a4a6814cac1c0cd73360a95f32083c8ea4745b7" - integrity sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg== - dependencies: - path-root-regex "^0.1.0" - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -prettier@2.8.1: - version "2.8.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.1.tgz#4e1fd11c34e2421bc1da9aea9bd8127cd0a35efc" - integrity sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg== - -promise-map-series@^0.2.1: - version "0.2.3" - resolved "https://registry.yarnpkg.com/promise-map-series/-/promise-map-series-0.2.3.tgz#c2d377afc93253f6bd03dbb77755eb88ab20a847" - integrity sha512-wx9Chrutvqu1N/NHzTayZjE1BgIwt6SJykQoCOic4IZ9yUDjKyVYrpLa/4YCNsV61eRENfs29hrEquVuB13Zlw== - dependencies: - rsvp "^3.0.14" - -proper-lockfile@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/proper-lockfile/-/proper-lockfile-4.1.2.tgz#c8b9de2af6b2f1601067f98e01ac66baa223141f" - integrity sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA== - dependencies: - graceful-fs "^4.2.4" - retry "^0.12.0" - signal-exit "^3.0.2" - -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -quick-temp@^0.1.3, quick-temp@^0.1.5: - version "0.1.8" - resolved "https://registry.yarnpkg.com/quick-temp/-/quick-temp-0.1.8.tgz#bab02a242ab8fb0dd758a3c9776b32f9a5d94408" - integrity sha512-YsmIFfD9j2zaFwJkzI6eMG7y0lQP7YeWzgtFgNl38pGWZBSXJooZbOWwkcRot7Vt0Fg9L23pX0tqWU3VvLDsiA== - dependencies: - mktemp "~0.4.0" - rimraf "^2.5.4" - underscore.string "~3.3.4" - -readable-stream@^3.4.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -regexp.prototype.flags@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" - integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - functions-have-names "^1.2.2" - -regexpp@^3.0.0, regexpp@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -requireindex@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.2.0.tgz#3463cdb22ee151902635aa6c9535d4de9c2ef1ef" - integrity sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww== - -requireindex@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.1.0.tgz#e5404b81557ef75db6e49c5a72004893fe03e162" - integrity sha512-LBnkqsDE7BZKvqylbmn7lTIVdpx4K/QCduRATpO5R+wtPmky/a8pN1bO2D6wXppn1497AJF9mNjqAXr6bdl9jg== - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-package-path@^1.0.11: - version "1.2.7" - resolved "https://registry.yarnpkg.com/resolve-package-path/-/resolve-package-path-1.2.7.tgz#2a7bc37ad96865e239330e3102c31322847e652e" - integrity sha512-fVEKHGeK85bGbVFuwO9o1aU0n3vqQGrezPc51JGu9UTXpFQfWq5qCeKxyaRUSvephs+06c5j5rPq/dzHGEo8+Q== - dependencies: - path-root "^0.1.1" - resolve "^1.10.0" - -resolve-package-path@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/resolve-package-path/-/resolve-package-path-3.1.0.tgz#35faaa5d54a9c7dd481eb7c4b2a44410c9c763d8" - integrity sha512-2oC2EjWbMJwvSN6Z7DbDfJMnD8MYEouaLn5eIX0j8XwPsYCVIyY9bbnX88YHVkbr8XHqvZrYbxaLPibfTYKZMA== - dependencies: - path-root "^0.1.1" - resolve "^1.17.0" - -resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.1, resolve@^1.17.0, resolve@^1.22.1: - version "1.22.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" - integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== - dependencies: - is-core-module "^2.9.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rimraf@^2.2.8, rimraf@^2.3.4, rimraf@^2.4.3, rimraf@^2.5.3, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -rimraf@^3.0.0, rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -rsvp@^3.0.14, rsvp@^3.0.18: - version "3.6.2" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a" - integrity sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw== - -rsvp@^4.7.0, rsvp@^4.8.5: - version "4.8.5" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" - integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== - -rsvp@~3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.2.1.tgz#07cb4a5df25add9e826ebc67dcc9fd89db27d84a" - integrity sha512-Rf4YVNYpKjZ6ASAmibcwTNciQ5Co5Ztq6iZPEykHpkoflnD/K5ryE/rHehFsTm4NJj8nKDhbi3eKBWGogmNnkg== - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-regex-test@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" - integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" - is-regex "^1.1.4" - -semver@^6.1.0, semver@^6.3.0: - version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^7.3.2, semver@^7.3.4: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - dependencies: - lru-cache "^6.0.0" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -signal-exit@^3.0.2: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -silent-error@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/silent-error/-/silent-error-1.1.1.tgz#f72af5b0d73682a2ba1778b7e32cd8aa7c2d8662" - integrity sha512-n4iEKyNcg4v6/jpb3c0/iyH2G1nzUNl7Gpqtn/mHIJK9S/q/7MCfoO4rwVOoO59qPFIc0hVHvMbiOJ0NdtxKKw== - dependencies: - debug "^2.2.0" - -simple-html-tokenizer@^0.5.11: - version "0.5.11" - resolved "https://registry.yarnpkg.com/simple-html-tokenizer/-/simple-html-tokenizer-0.5.11.tgz#4c5186083c164ba22a7b477b7687ac056ad6b1d9" - integrity sha512-C2WEK/Z3HoSFbYq8tI7ni3eOo/NneSPRoPpcM7WdLjFOArFuyXEjAoCdOC3DgMfRyziZQ1hCNR4mrNdWEvD0og== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slash@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" - integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== - -snake-case@^3.0.3: - version "3.0.4" - resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" - integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== - dependencies: - dot-case "^3.0.4" - tslib "^2.0.3" - -source-map-js@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== - -sourcemap-codec@^1.4.8: - version "1.4.8" - resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" - integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== - -sprintf-js@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" - integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== - -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string.prototype.matchall@^4.0.6: - version "4.0.8" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" - integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - get-intrinsic "^1.1.3" - has-symbols "^1.0.3" - internal-slot "^1.0.3" - regexp.prototype.flags "^1.4.3" - side-channel "^1.0.4" - -string.prototype.trimend@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" - integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -string.prototype.trimstart@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" - integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -symlink-or-copy@^1.0.0, symlink-or-copy@^1.0.1, symlink-or-copy@^1.1.8, symlink-or-copy@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/symlink-or-copy/-/symlink-or-copy-1.3.1.tgz#9506dd64d8e98fa21dcbf4018d1eab23e77f71fe" - integrity sha512-0K91MEXFpBUaywiwSSkmKjnGcasG/rVBXFLJz5DrgGabpYD6N+3yZrfD6uUIfpuTu65DZLHi7N8CizHc07BPZA== - -sync-disk-cache@^1.3.3: - version "1.3.4" - resolved "https://registry.yarnpkg.com/sync-disk-cache/-/sync-disk-cache-1.3.4.tgz#53a2c5a09d8f4bb53160bce182a456ad71574024" - integrity sha512-GlkGeM81GPPEKz/lH7QUTbvqLq7K/IUTuaKDSMulP9XQ42glqNJIN/RKgSOw4y8vxL1gOVvj+W7ruEO4s36eCw== - dependencies: - debug "^2.1.3" - heimdalljs "^0.2.3" - mkdirp "^0.5.0" - rimraf "^2.2.8" - username-sync "^1.0.2" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - -"textextensions@1 || 2": - version "2.6.0" - resolved "https://registry.yarnpkg.com/textextensions/-/textextensions-2.6.0.tgz#d7e4ab13fe54e32e08873be40d51b74229b00fc4" - integrity sha512-49WtAWS+tcsy93dRt6P0P3AMD2m5PvXRhuEA0kaXos5ZLlujtYmpmFsB+QvWUSxE1ZsstmYXfQ7L40+EcQgpAQ== - -tmp@0.0.28: - version "0.0.28" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.28.tgz#172735b7f614ea7af39664fa84cf0de4e515d120" - integrity sha512-c2mmfiBmND6SOVxzogm1oda0OJ1HZVIk/5n26N59dDTh80MUeavpiCls4PGAdkX1PFkKokLpcf7prSjCeXLsJg== - dependencies: - os-tmpdir "~1.0.1" - -tmp@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== - dependencies: - rimraf "^3.0.0" - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -tree-sync@^1.2.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/tree-sync/-/tree-sync-1.4.0.tgz#314598d13abaf752547d9335b8f95d9a137100d6" - integrity sha512-YvYllqh3qrR5TAYZZTXdspnIhlKAYezPYw11ntmweoceu4VK+keN356phHRIIo1d+RDmLpHZrUlmxga2gc9kSQ== - dependencies: - debug "^2.2.0" - fs-tree-diff "^0.5.6" - mkdirp "^0.5.1" - quick-temp "^0.1.5" - walk-sync "^0.3.3" - -tslib@^2.0.3, tslib@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" - integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" - integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== - dependencies: - call-bind "^1.0.2" - has-bigints "^1.0.2" - has-symbols "^1.0.3" - which-boxed-primitive "^1.0.2" - -underscore.string@~3.3.4: - version "3.3.6" - resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-3.3.6.tgz#ad8cf23d7423cb3b53b898476117588f4e2f9159" - integrity sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ== - dependencies: - sprintf-js "^1.1.1" - util-deprecate "^1.0.2" - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -upath@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" - integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== - -update-browserslist-db@^1.0.9: - version "1.0.10" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" - integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -username-sync@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/username-sync/-/username-sync-1.0.3.tgz#ae41c5c8a4c8c2ecc1443a7d0742742bd7e36732" - integrity sha512-m/7/FSqjJNAzF2La448c/aEom0gJy7HY7Y509h6l0ePvEkFictAGptwWaj1msWJ38JbfEDOUoE8kqFee9EHKdA== - -util-deprecate@^1.0.1, util-deprecate@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -v8-compile-cache@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - -validate-peer-dependencies@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/validate-peer-dependencies/-/validate-peer-dependencies-1.2.0.tgz#22aab93c514f4fda457d36c80685e8b1160d2036" - integrity sha512-nd2HUpKc6RWblPZQ2GDuI65sxJ2n/UqZwSBVtj64xlWjMx0m7ZB2m9b2JS3v1f+n9VWH/dd1CMhkHfP6pIdckA== - dependencies: - resolve-package-path "^3.1.0" - semver "^7.3.2" - -walk-sync@^0.3.1, walk-sync@^0.3.3: - version "0.3.4" - resolved "https://registry.yarnpkg.com/walk-sync/-/walk-sync-0.3.4.tgz#cf78486cc567d3a96b5b2237c6108017a5ffb9a4" - integrity sha512-ttGcuHA/OBnN2pcM6johpYlEms7XpO5/fyKIr48541xXedan4roO8cS1Q2S/zbbjGH/BarYDAMeS2Mi9HE5Tig== - dependencies: - ensure-posix-path "^1.0.0" - matcher-collection "^1.0.0" - -walk-sync@^1.0.0, walk-sync@^1.1.3: - version "1.1.4" - resolved "https://registry.yarnpkg.com/walk-sync/-/walk-sync-1.1.4.tgz#81049f3d8095479b49574cfa5f558d7a252b127d" - integrity sha512-nowc9thB/Jg0KW4TgxoRjLLYRPvl3DB/98S89r4ZcJqq2B0alNcKDh6pzLkBSkPMzRSMsJghJHQi79qw0YWEkA== - dependencies: - "@types/minimatch" "^3.0.3" - ensure-posix-path "^1.1.0" - matcher-collection "^1.1.1" - -wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== - dependencies: - defaults "^1.0.3" - -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -which-collection@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" - integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== - dependencies: - is-map "^2.0.1" - is-set "^2.0.1" - is-weakmap "^2.0.1" - is-weakset "^2.0.1" - -which-typed-array@^1.1.8: - version "1.1.9" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" - integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" - is-typed-array "^1.1.10" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -word-wrap@^1.2.3: - version "1.2.4" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.4.tgz#cb4b50ec9aca570abd1f52f33cd45b6c61739a9f" - integrity sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA== - -workerpool@^6.1.5: - version "6.3.1" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.3.1.tgz#80a9b76e70556acfb1457a3984f8637717f7cdee" - integrity sha512-0x7gJm1rhpn5SPG9NENOxPtbfUZZtK/qOg6gEdSqeDBA3dTeR91RJqSPjccPRCkhNfrnnl/dWxSSj5w9CtdzNA== - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yargs-parser@^21.1.1: - version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - -yargs@^17.5.1: - version "17.6.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.6.2.tgz#2e23f2944e976339a1ee00f18c77fedee8332541" - integrity sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw== - dependencies: - cliui "^8.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.1.1" - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== - -yocto-queue@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251" - integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==