From 583a0c174fc8c662e7adebd694c62e836ced16a5 Mon Sep 17 00:00:00 2001 From: DEVSK Date: Thu, 17 Feb 2022 14:51:44 +0100 Subject: [PATCH] init callbacks, update build dependencies, bump version --- README.md | 61 +- bower.json | 2 +- dist/cuttr.js | 76 +- dist/cuttr.min.js | 6 +- dist/cuttr.min.js.map | 2 +- examples/callbacks.html | 67 ++ examples/index.html | 7 +- examples/methods.html | 56 ++ package-lock.json | 1514 ++++++++++++++++++++++----------------- package.json | 13 +- src/cuttr.js | 70 +- 11 files changed, 1168 insertions(+), 706 deletions(-) create mode 100644 examples/callbacks.html create mode 100644 examples/methods.html diff --git a/README.md b/README.md index 64f1849..face5c1 100644 --- a/README.md +++ b/README.md @@ -8,8 +8,8 @@ License - - Known Vulnerabilities + + Known Vulnerabilities License @@ -54,9 +54,9 @@ Link directly to Cuttr files on [unpkg](https://unpkg.com/cuttr). Link directly to Cuttr files on [cdnjs](https://cdnjs.com/libraries/cuttr). ``` html - + - + ``` @@ -94,7 +94,9 @@ If you want to use Cuttr to develop commercial sites, themes, projects, and appl ### Open source license -If you are creating an open source application under a license compatible with the [GNU GPL license v3](https://www.gnu.org/licenses/gpl-3.0.html), you may use Cuttr under the terms of the GPLv3. +If you are creating an open source application under a license compatible with the [GNU GPL license v3](https://www.gnu.org/licenses/gpl-3.0.html), you may use Cuttr under the terms of the GPLv3. + +The credit comments in the JavaScript files should be kept intact (even after combination or minification). [Read more about Cuttr's licenses](https://cuttr.kulahs.de/pricing.html). @@ -144,8 +146,10 @@ let truncateElement = new Cuttr( '.container', { // DEFAULTS LISTED licenseKey: 'YOUR_KEY_HERE', - // use the license key provided on the purchase of the fullPage Commercial License - // if your project is open source and it is compatible with the GPLv3 license leave this field blank + // this option is compulsory + // use the license key provided on the purchase of the Cuttr Commercial License + // if your project is open source and it is compatible with the GPLv3 license you can request a license key + // please read more about licenses here https://github.com/d-e-v-s-k/cuttr-js#license truncate: 'characters', // Truncate method @@ -196,7 +200,7 @@ let truncateElement = new Cuttr( '.container', { ``` ### Methods -Each plugin instance comes with some public methods to call. +Each plugin instance comes with some public methods to call. See them in action inside the examples folder at methods.html. Example Initialization: @@ -254,6 +258,47 @@ $(document).ready(function() { }); ``` +### Callbacks +Each plugin instance provides some callbacks. See them in action inside the examples folder at callbacks.html. + +At plugin initialization, a series of callbacks are available: + +#### afterTruncate() +Callback fired once the original content has been truncated. + +```javascript +let truncateElement = new Cuttr('.element', { + //options here + truncate: 'words', + length: 12, + + // callbacks + afterTruncate: function(){ + let truncateElement = this; + console.log(this); + alert('"afterTruncate" callback fired!'); + } +}); +``` + +#### afterExpand() +Callback fired once the original content has been expanded. + +```javascript +let truncateElement = new Cuttr('.element', { + //options here + truncate: 'words', + length: 12, + + // callbacks + afterExpand: function(){ + let truncateElement = this; + console.log(this); + alert('"afterExpand" callback fired!'); + } +}); +``` + ## Demos & Examples [Checkout our demos & examples page](https://cuttr.kulahs.de/examples.html) diff --git a/bower.json b/bower.json index 9ba0b02..7d90e0b 100644 --- a/bower.json +++ b/bower.json @@ -2,7 +2,7 @@ "name": "cuttr", "description": "Cuttr is a javascript plugin that truncates multi-line string content with multiple truncation methods and custom ellipsis.", "main": "dist/cuttr.js", - "version": "1.3.2", + "version": "1.4.0", "authors": [ "DEVSK" ], diff --git a/dist/cuttr.js b/dist/cuttr.js index c4fa61c..dbb4cc8 100644 --- a/dist/cuttr.js +++ b/dist/cuttr.js @@ -1,12 +1,12 @@ /*! - * Cuttr 1.3.1 + * Cuttr 1.4.0 * https://github.com/d-e-v-s-k/cuttr-js * * @license GPLv3 for open source use only * or Cuttr Commercial License for commercial use * https://cuttr.kulahs.de/pricing/ * - * Copyright (C) 2021 https://cuttr.kulahs.de/ - A project by DEVSK + * Copyright (C) 2022 https://cuttr.kulahs.de/ - A project by DEVSK **/ (function (root, factory) { if (typeof define === 'function' && define.amd) { @@ -58,6 +58,9 @@ readMoreBtnSelectorClass: 'cuttr__readmore', // read-more button selector readMoreBtnAdditionalClasses: '', + // callback functions + afterTruncate: function afterTruncate() {}, + afterExpand: function afterExpand() {}, // private options dataIndex: 'data-cuttr-index' // cuttr index data attribute @@ -70,16 +73,7 @@ Object.keys(options).forEach(function (key) { self.options[key] = options[key]; }); - } //using jQuery initialization? Creating the $.fn.fullpage object - - /*window.cuttr_api = self; - if(options.$){ - console.log(self); - Object.keys(self).forEach(function (key) { - options.$.fn.Cuttr[key] = self[key]; - }); - }*/ - + } var init = function init() { prepare.call(this); @@ -90,8 +84,14 @@ function prepare() { - // return if no target element defined - if (!self.options.elementsToTruncate) return; // set element type depending on source + var isAuthorized = self.options && new RegExp('([\\d\\w]{8}-){3}[\\d\\w]{8}|^(?=.*?[A-Y])(?=.*?[a-y])(?=.*?[0-8])(?=.*?[#?!@$%^&*-]).{8,}$').test(self.options['li' + 'cen' + 'seK' + 'e' + 'y']) || document.domain.indexOf('cuttr' + '.' + 'kul' + 'ahs' + '.' + 'de') > -1; // return if no target element defined + + if (!self.options.elementsToTruncate) { + return; + } else { + displayWarnings(isAuthorized); + } // set element type depending on source + if (!('length' in self.options.elementsToTruncate)) self.options.elementsToTruncate = [self.options.elementsToTruncate]; // loop through target elements to truncate @@ -116,7 +116,10 @@ if (self.options.contentTruncationState[i]) { if (self.options.readMore) addReadMore(currentElement); currentElement.classList += ' ' + self.options.loadedClass; - } + } // here go the callbacks + + + self.options.afterTruncate.call(currentElement); } } /* @@ -288,7 +291,9 @@ if (btnPosition == 'inside' && self.options.readMore) addReadMore(currentElement, true); // update button text and aria event.target.innerHTML = readLessText.replace(/<[^>]*>/g, ""); //event.target.setAttribute('aria-expanded', 'true'); - // truncate content if its shown completely currently + // here go the callbacks + + self.options.afterExpand.call(currentElement); // truncate content if its shown completely currently } else { // truncate content truncatedContent = truncateIt(currentElement, currentContent.trim(), truncateLength, truncateEnding); @@ -298,6 +303,20 @@ if (btnPosition == 'inside' && self.options.readMore) addReadMore(currentElement, true); // update button text and aria event.target.innerHTML = readMoreText.replace(/<[^>]*>/g, ""); //event.target.setAttribute('aria-expanded', 'false'); + // here go the callbacks + + self.options.afterTruncate.call(currentElement); + } + } + /** + * Displays warnings + */ + + + function displayWarnings(isAuthorized) { + if (!isAuthorized) { + showError('error', 'Cuttr.js has a GPLv3 license and it requires a `licenseKey` option. Read about it here:'); + showError('error', 'https://github.com/d-e-v-s-k/cuttr-js#options'); } } /* @@ -341,7 +360,10 @@ if (btnExists) btnExists.innerHTML = readLessText.replace(/<[^>]*>/g, ""); - } + } // here go the callbacks + + + self.options.afterExpand.call(currentElement); } } }; @@ -370,7 +392,7 @@ var truncateLength = currentElement.dataset.cuttrLength ? currentElement.dataset.cuttrLength : self.options.length; var truncateEnding = currentElement.dataset.cuttrEnding ? currentElement.dataset.cuttrEnding : self.options.ending; var truncatedContent = void 0; - var btnExists = void 0; // hide content if its currently truncated + var btnExists = void 0; // hide content if its currently fully visible if (self.options.contentVisibilityState[thisIndex]) { // truncate content @@ -390,7 +412,10 @@ if (btnExists) btnExists.innerHTML = readMoreText.replace(/<[^>]*>/g, ""); - } + } // here go the callbacks + + + self.options.afterTruncate.call(currentElement); } } }; @@ -441,7 +466,16 @@ currentElement = null; } - }; + }; //utils + + /* + shows console message + */ + + + function showError(type, text) { + window.console && window.console[type] && window.console[type]('Cuttr: ' + text); + } init(); return self; @@ -450,7 +484,7 @@ return Cuttr; }); /** - * jQuery adapter for Cuttr.js 1.1.0 + * jQuery adapter for Cuttr.js 1.4.0 */ diff --git a/dist/cuttr.min.js b/dist/cuttr.min.js index f0aff9a..05c2fa3 100644 --- a/dist/cuttr.min.js +++ b/dist/cuttr.min.js @@ -1,12 +1,12 @@ /*! - * Cuttr 1.3.1 + * Cuttr 1.4.0 * https://github.com/d-e-v-s-k/cuttr-js * * @license GPLv3 for open source use only * or Cuttr Commercial License for commercial use * https://cuttr.kulahs.de/pricing/ * - * Copyright (C) 2021 https://cuttr.kulahs.de/ - A project by DEVSK + * Copyright (C) 2022 https://cuttr.kulahs.de/ - A project by DEVSK **/ -!function(t,e){"function"==typeof define&&define.amd?define([],e):"object"==typeof module&&module.exports?module.exports=e():t.Cuttr=e()}(this,function(){return function t(e,n){"use strict";var T=Object.create(t.prototype);T.options={elementsToTruncate:"string"==typeof e?document.querySelectorAll(e):e,originalContent:[],contentVisibilityState:[],contentTruncationState:[],truncate:"characters",length:100,ending:"...",loadedClass:"cuttr--loaded",title:!1,readMore:!1,readMoreText:"read more",readLessText:"read less",readMoreBtnPosition:"after",readMoreBtnTag:"button",readMoreBtnSelectorClass:"cuttr__readmore",readMoreBtnAdditionalClasses:"",dataIndex:"data-cuttr-index"},n&&Object.keys(n).forEach(function(t){T.options[t]=n[t]});function m(t,e,n,o){var i=t.dataset.cuttrIndex;switch(null==n&&(n=100),null==o&&(o="..."),t.dataset.cuttrMethod?t.dataset.cuttrMethod:T.options.truncate){case"characters":return e.length>n?(T.options.contentTruncationState[i]=!0,T.options.contentVisibilityState[i]=!1,e.substring(0,n-o.length)+o+" "):e;case"words":var a=e.split(/ (?=[^>]*(?:<|$))/);return a.length>n?(T.options.contentTruncationState[i]=!0,T.options.contentVisibilityState[i]=!1,a.splice(0,n).join(" ")+" "+o+" "):e;case"sentences":var r=e.match(/[^\.!\?]+[\.!\?]+/g);return r.length>n?(T.options.contentTruncationState[i]=!0,T.options.contentVisibilityState[i]=!1,r.splice(0,n).join(" ")+" "+o+" "):e;default:return e.length>n?(T.options.contentTruncationState[i]=!0,T.options.contentVisibilityState[i]=!1,e.substring(0,n-o.length)+o):e}}function f(t,e){var n,o=t,i=o.dataset.cuttrIndex,a=o.dataset.cuttrReadmore?o.dataset.cuttrReadmore:T.options.readMoreText,r=o.dataset.cuttrReadmore?o.dataset.cuttrReadless:T.options.readLessText,s=o.dataset.cuttrReadmorePosition?o.dataset.cuttrReadmorePosition:T.options.readMoreBtnPosition,d=o.dataset.cuttrReadmoreTag?o.dataset.cuttrReadmoreTag:T.options.readMoreBtnTag,c="."+T.options.readMoreBtnSelectorClass,l=o.dataset.cuttrReadmoreAdditionalClasses?o.dataset.cuttrReadmoreAdditionalClasses:T.options.readMoreBtnAdditionalClasses,u=T.options.contentVisibilityState[i]?r:a,p=" <"+d+' aria-expanded="'+(T.options.contentVisibilityState[i]?"true":"false")+'" class="'+T.options.readMoreBtnSelectorClass+" "+l+'">'+u.replace(/<[^>]*>/g,"")+"";if("after"==s&&o.nextElementSibling?n=o.nextElementSibling.matches(c):"inside"==s&&(n=o.querySelector(c)),!n){switch(s){case"after":o.insertAdjacentHTML("afterend",p);break;case"inside":o.insertAdjacentHTML("beforeend",p);break;default:console.log("no matching read-more button position defined")}e||("after"==s?o.nextElementSibling.addEventListener("click",function(t){t.target&&t.target.classList.contains(T.options.readMoreBtnSelectorClass)&&g(t,s)}):"inside"==s&&o.addEventListener("click",function(t){t.target&&t.target.classList.contains(T.options.readMoreBtnSelectorClass)&&g(t,s)}))}}function g(t,e){var n,o="after"==e?t.target.previousElementSibling:t.target.parentNode,i=o.innerHTML,a=o.dataset.cuttrIndex,r=o.dataset.cuttrReadmore?o.dataset.cuttrReadmore:T.options.readMoreText,s=o.dataset.cuttrReadmore?o.dataset.cuttrReadless:T.options.readLessText,d=o.dataset.cuttrLength?o.dataset.cuttrLength:T.options.length,c=o.dataset.cuttrEnding?o.dataset.cuttrEnding:T.options.ending;T.options.contentVisibilityState[a]?(n=m(o,i.trim(),d,c),o.innerHTML=n,T.options.contentVisibilityState[a]=!1,"inside"==e&&T.options.readMore&&f(o,!0),t.target.innerHTML=r.replace(/<[^>]*>/g,"")):(o.innerHTML=T.options.originalContent[a],T.options.contentVisibilityState[a]=!0,"inside"==e&&T.options.readMore&&f(o,!0),t.target.innerHTML=s.replace(/<[^>]*>/g,""))}return T.expandContent=function(t,e){for(var n=t?document.querySelectorAll(t):T.options.elementsToTruncate,o=0;o]*>/g,""))))}},T.truncateContent=function(t,e){for(var n=t?document.querySelectorAll(t):T.options.elementsToTruncate,o=0;o]*>/g,""))))}},T.destroy=function(t,e){var n;T.expandContent(t,e),n=t?document.querySelectorAll(t):T.options.elementsToTruncate;for(var o=0;on?(T.options.contentTruncationState[i]=!0,T.options.contentVisibilityState[i]=!1,e.substring(0,n-o.length)+o+" "):e;case"words":var a=e.split(/ (?=[^>]*(?:<|$))/);return a.length>n?(T.options.contentTruncationState[i]=!0,T.options.contentVisibilityState[i]=!1,a.splice(0,n).join(" ")+" "+o+" "):e;case"sentences":var r=e.match(/[^\.!\?]+[\.!\?]+/g);return r.length>n?(T.options.contentTruncationState[i]=!0,T.options.contentVisibilityState[i]=!1,r.splice(0,n).join(" ")+" "+o+" "):e;default:return e.length>n?(T.options.contentTruncationState[i]=!0,T.options.contentVisibilityState[i]=!1,e.substring(0,n-o.length)+o):e}}function m(t,e){var n,o=t,i=o.dataset.cuttrIndex,a=o.dataset.cuttrReadmore?o.dataset.cuttrReadmore:T.options.readMoreText,r=o.dataset.cuttrReadmore?o.dataset.cuttrReadless:T.options.readLessText,s=o.dataset.cuttrReadmorePosition?o.dataset.cuttrReadmorePosition:T.options.readMoreBtnPosition,d=o.dataset.cuttrReadmoreTag?o.dataset.cuttrReadmoreTag:T.options.readMoreBtnTag,c="."+T.options.readMoreBtnSelectorClass,l=o.dataset.cuttrReadmoreAdditionalClasses?o.dataset.cuttrReadmoreAdditionalClasses:T.options.readMoreBtnAdditionalClasses,u=T.options.contentVisibilityState[i]?r:a,p=" <"+d+' aria-expanded="'+(T.options.contentVisibilityState[i]?"true":"false")+'" class="'+T.options.readMoreBtnSelectorClass+" "+l+'">'+u.replace(/<[^>]*>/g,"")+"";if("after"==s&&o.nextElementSibling?n=o.nextElementSibling.matches(c):"inside"==s&&(n=o.querySelector(c)),!n){switch(s){case"after":o.insertAdjacentHTML("afterend",p);break;case"inside":o.insertAdjacentHTML("beforeend",p);break;default:console.log("no matching read-more button position defined")}e||("after"==s?o.nextElementSibling.addEventListener("click",function(t){t.target&&t.target.classList.contains(T.options.readMoreBtnSelectorClass)&&g(t,s)}):"inside"==s&&o.addEventListener("click",function(t){t.target&&t.target.classList.contains(T.options.readMoreBtnSelectorClass)&&g(t,s)}))}}function g(t,e){var n,o="after"==e?t.target.previousElementSibling:t.target.parentNode,i=o.innerHTML,a=o.dataset.cuttrIndex,r=o.dataset.cuttrReadmore?o.dataset.cuttrReadmore:T.options.readMoreText,s=o.dataset.cuttrReadmore?o.dataset.cuttrReadless:T.options.readLessText,d=o.dataset.cuttrLength?o.dataset.cuttrLength:T.options.length,c=o.dataset.cuttrEnding?o.dataset.cuttrEnding:T.options.ending;T.options.contentVisibilityState[a]?(n=f(o,i.trim(),d,c),o.innerHTML=n,T.options.contentVisibilityState[a]=!1,"inside"==e&&T.options.readMore&&m(o,!0),t.target.innerHTML=r.replace(/<[^>]*>/g,""),T.options.afterTruncate.call(o)):(o.innerHTML=T.options.originalContent[a],T.options.contentVisibilityState[a]=!0,"inside"==e&&T.options.readMore&&m(o,!0),t.target.innerHTML=s.replace(/<[^>]*>/g,""),T.options.afterExpand.call(o))}function d(t,e){window.console&&window.console[t]&&window.console[t]("Cuttr: "+e)}return T.expandContent=function(t,e){for(var n=t?document.querySelectorAll(t):T.options.elementsToTruncate,o=0;o]*>/g,""))),T.options.afterExpand.call(i))}},T.truncateContent=function(t,e){for(var n=t?document.querySelectorAll(t):T.options.elementsToTruncate,o=0;o]*>/g,""))),T.options.afterTruncate.call(a))}},T.destroy=function(t,e){var n;T.expandContent(t,e),n=t?document.querySelectorAll(t):T.options.elementsToTruncate;for(var o=0;o length) {\n\n // set current content truncation true and return truncated string\n self.options.contentTruncationState[thisIndex] = true;\n // set visibility state\n self.options.contentVisibilityState[thisIndex] = false;\n\n // return new string\n return str.substring(0, length - ending.length) + ending + ' ';\n\n } else {\n return str;\n }\n\n break;\n\n // truncate words\n case 'words':\n\n const words = str.split(/ (?=[^>]*(?:<|$))/);\n\n // check if content (string) is longer than truncation limit\n if (words.length > length) {\n\n // set current content truncation true and return truncated string\n self.options.contentTruncationState[thisIndex] = true;\n // set visibility state\n self.options.contentVisibilityState[thisIndex] = false;\n // return new string\n // split spaces followed by sequence of characters are NOT greater-than signs, less-than sign\n return words.splice(0,length).join(' ') + ' ' + ending + ' ';\n\n } else {\n return str;\n }\n\n break;\n\n // truncate full sentences\n case 'sentences':\n\n const sentences = str.match(/[^\\.!\\?]+[\\.!\\?]+/g);\n\n // check if content (string) is longer than truncation limit\n if (sentences.length > length) {\n\n // set current contetn truncation true and return truncated string\n self.options.contentTruncationState[thisIndex] = true;\n // set visibility state\n self.options.contentVisibilityState[thisIndex] = false;\n // return new string\n return sentences.splice(0,length).join(' ') + ' ' + ending + ' ';\n\n } else {\n return str;\n }\n\n break;\n\n // truncate characters by default\n default:\n\n // check if content (string) is longer than truncation limit\n if (str.length > length) {\n\n // set current contetn truncation true and return truncated string\n self.options.contentTruncationState[thisIndex] = true;\n // set visibility state\n self.options.contentVisibilityState[thisIndex] = false;\n // return new string\n return str.substring(0, length - ending.length) + ending;\n\n } else {\n return str;\n }\n\n }\n\n }\n\n\n /*\n append read more button\n */\n function addReadMore(thisElement, updated) {\n\n const currentElement = thisElement;\n const thisIndex = currentElement.dataset.cuttrIndex;\n const readMoreText = (currentElement.dataset.cuttrReadmore) ? currentElement.dataset.cuttrReadmore : self.options.readMoreText;\n const readLessText = (currentElement.dataset.cuttrReadmore) ? currentElement.dataset.cuttrReadless : self.options.readLessText;\n const btnPosition = (currentElement.dataset.cuttrReadmorePosition) ? currentElement.dataset.cuttrReadmorePosition : self.options.readMoreBtnPosition;\n const btnTag = (currentElement.dataset.cuttrReadmoreTag) ? currentElement.dataset.cuttrReadmoreTag : self.options.readMoreBtnTag;\n const btnSelectorClass = '.' + self.options.readMoreBtnSelectorClass;\n const btnAdditionalClasses = (currentElement.dataset.cuttrReadmoreAdditionalClasses) ? currentElement.dataset.cuttrReadmoreAdditionalClasses : self.options.readMoreBtnAdditionalClasses;\n const btnText = (self.options.contentVisibilityState[thisIndex]) ? readLessText : readMoreText;\n const btnAriaExpanded = (self.options.contentVisibilityState[thisIndex]) ? 'true' : 'false';\n const btnMarkup = ' <' + btnTag + ' aria-expanded=\"' + btnAriaExpanded + '\" class=\"' + self.options.readMoreBtnSelectorClass + ' ' + btnAdditionalClasses + '\">' + btnText.replace(/<[^>]*>/g, \"\") + '';\n let btnExists;\n\n // check for button existence depending on btn position\n if (btnPosition == 'after' && currentElement.nextElementSibling) {\n btnExists = currentElement.nextElementSibling.matches(btnSelectorClass);\n } else if (btnPosition == 'inside') {\n btnExists = currentElement.querySelector(btnSelectorClass);\n }\n\n // insert element only if it doesn't exist\n if (!btnExists) {\n\n // add read-more button to dom\n switch (btnPosition) {\n case 'after':\n currentElement.insertAdjacentHTML('afterend', btnMarkup);\n break;\n case 'inside':\n currentElement.insertAdjacentHTML('beforeend', btnMarkup);\n break;\n default:\n console.log('no matching read-more button position defined');\n }\n\n // listen to read-more clicks - show/hide content\n if (!updated) {\n\n if (btnPosition == 'after') {\n currentElement.nextElementSibling.addEventListener('click',function(event) {\n if (event.target && event.target.classList.contains(self.options.readMoreBtnSelectorClass)) {\n updateContent(event, btnPosition);\n }\n });\n } else if (btnPosition == 'inside') {\n currentElement.addEventListener('click',function(event) {\n if (event.target && event.target.classList.contains(self.options.readMoreBtnSelectorClass)) {\n updateContent(event, btnPosition);\n }\n });\n }\n\n }\n\n }\n\n }\n\n\n /*\n display original/truncated content\n */\n function updateContent(event, btnPosition) {\n\n const currentElement = (btnPosition == 'after') ? event.target.previousElementSibling : event.target.parentNode;\n const currentContent = currentElement.innerHTML;\n const thisIndex = currentElement.dataset.cuttrIndex;\n const readMoreText = (currentElement.dataset.cuttrReadmore) ? currentElement.dataset.cuttrReadmore : self.options.readMoreText;\n const readLessText = (currentElement.dataset.cuttrReadmore) ? currentElement.dataset.cuttrReadless : self.options.readLessText;\n const truncateLength = (currentElement.dataset.cuttrLength) ? currentElement.dataset.cuttrLength : self.options.length;\n const truncateEnding = (currentElement.dataset.cuttrEnding) ? currentElement.dataset.cuttrEnding : self.options.ending;\n let truncatedContent;\n\n // show content if its currently truncated\n if (!self.options.contentVisibilityState[thisIndex]) {\n\n // replace content with original content from element at specific index\n currentElement.innerHTML = self.options.originalContent[thisIndex];\n\n // set visibility state\n self.options.contentVisibilityState[thisIndex] = true;\n\n if (btnPosition == 'inside' && self.options.readMore)\n addReadMore(currentElement, true);\n\n // update button text and aria\n event.target.innerHTML = readLessText.replace(/<[^>]*>/g, \"\");\n //event.target.setAttribute('aria-expanded', 'true');\n\n // truncate content if its shown completely currently\n } else {\n\n // truncate content\n truncatedContent = truncateIt(currentElement, currentContent.trim(), truncateLength, truncateEnding);\n currentElement.innerHTML = truncatedContent;\n\n // set visibility state\n self.options.contentVisibilityState[thisIndex] = false;\n\n if (btnPosition == 'inside' && self.options.readMore)\n addReadMore(currentElement, true);\n\n // update button text and aria\n event.target.innerHTML = readMoreText.replace(/<[^>]*>/g, \"\");\n //event.target.setAttribute('aria-expanded', 'false');\n\n }\n\n }\n\n\n /*\n public function\n expand / show original content\n */\n self.expandContent = function(selector, btnPosition) {\n\n let currentElements;\n\n // set specific element to expand or use current instance node\n if (selector) {\n currentElements = document.querySelectorAll(selector);\n } else {\n currentElements = self.options.elementsToTruncate;\n }\n\n for (let i = 0; i < currentElements.length; i++) {\n\n const currentElement = currentElements[i];\n const currentContent = currentElement.innerHTML;\n const thisIndex = currentElement.dataset.cuttrIndex;\n const readLessText = (currentElement.dataset.cuttrReadmore) ? currentElement.dataset.cuttrReadless : self.options.readLessText;\n const thisBtnPosition = (btnPosition) ? btnPosition : self.options.readMoreBtnPosition;\n const btnSelectorClass = '.' + self.options.readMoreBtnSelectorClass;\n let btnExists;\n\n // show content if its currently truncated\n if (!self.options.contentVisibilityState[thisIndex]) {\n\n // replace content with original content from element at specific index\n currentElement.innerHTML = self.options.originalContent[thisIndex];\n\n // set visibility state\n self.options.contentVisibilityState[thisIndex] = true;\n\n // read-more handling only if enabled\n if (self.options.readMore) {\n\n if (thisBtnPosition == 'inside')\n addReadMore(currentElement, true);\n\n // check for button existence depending on btn position\n if (thisBtnPosition == 'after') {\n btnExists = currentElement.nextElementSibling;\n } else if (thisBtnPosition == 'inside') {\n btnExists = currentElement.querySelector(btnSelectorClass);\n }\n\n // update button text\n if(btnExists)\n btnExists.innerHTML = readLessText.replace(/<[^>]*>/g, \"\");\n\n }\n\n }\n\n }\n\n }\n\n\n /*\n public function\n truncate / hide original content\n */\n self.truncateContent = function(selector, btnPosition) {\n\n let currentElements;\n\n // set specific element to expand or use current instance node\n if (selector) {\n currentElements = document.querySelectorAll(selector);\n } else {\n currentElements = self.options.elementsToTruncate;\n }\n\n for (let i = 0; i < currentElements.length; i++) {\n\n const currentElement = currentElements[i];\n const currentContent = currentElement.innerHTML;\n const thisIndex = currentElement.dataset.cuttrIndex;\n const readMoreText = (currentElement.dataset.cuttrReadmore) ? currentElement.dataset.cuttrReadmore : self.options.readMoreText;\n const thisBtnPosition = (btnPosition) ? btnPosition : self.options.readMoreBtnPosition;\n const btnSelectorClass = '.' + self.options.readMoreBtnSelectorClass;\n const truncateLength = (currentElement.dataset.cuttrLength) ? currentElement.dataset.cuttrLength : self.options.length;\n const truncateEnding = (currentElement.dataset.cuttrEnding) ? currentElement.dataset.cuttrEnding : self.options.ending;\n let truncatedContent;\n let btnExists;\n\n // hide content if its currently truncated\n if (self.options.contentVisibilityState[thisIndex]) {\n\n // truncate content\n truncatedContent = truncateIt(currentElement, currentContent.trim(), truncateLength, truncateEnding);\n currentElement.innerHTML = truncatedContent;\n\n // set visibility state\n self.options.contentVisibilityState[thisIndex] = false;\n\n // read-more handling only if enabled\n if (self.options.readMore) {\n\n if (thisBtnPosition == 'inside')\n addReadMore(currentElement, true);\n\n // check for button existence depending on btn position\n if (thisBtnPosition == 'after') {\n btnExists = currentElement.nextElementSibling;\n } else if (thisBtnPosition == 'inside') {\n btnExists = currentElement.querySelector(btnSelectorClass);\n }\n\n // update button text\n if(btnExists)\n btnExists.innerHTML = readMoreText.replace(/<[^>]*>/g, \"\");\n\n }\n\n }\n\n }\n\n }\n\n\n /*\n public function\n restore the element to a pre-init state\n */\n self.destroy = function(selector, btnPosition) {\n\n // expand original content\n self.expandContent(selector, btnPosition);\n\n let currentElements;\n\n // set specific element to expand or use current instance node\n if (selector) {\n currentElements = document.querySelectorAll(selector);\n } else {\n currentElements = self.options.elementsToTruncate;\n }\n\n for (let i = 0; i < currentElements.length; i++) {\n\n let currentElement = currentElements[i];\n const currentContent = currentElement.innerHTML;\n const thisIndex = currentElement.dataset.cuttrIndex;\n const thisBtnPosition = (btnPosition) ? btnPosition : self.options.readMoreBtnPosition;\n const btnSelectorClass = '.' + self.options.readMoreBtnSelectorClass;\n let btnExists;\n\n // set visibility state\n self.options.contentVisibilityState[thisIndex] = true;\n\n // remove read-more if enabled\n if (self.options.readMore) {\n\n if (thisBtnPosition == 'inside')\n addReadMore(currentElement, true);\n\n // check for button existence depending on btn position\n if (thisBtnPosition == 'after') {\n btnExists = currentElement.nextElementSibling;\n } else if (thisBtnPosition == 'inside') {\n btnExists = currentElement.querySelector(btnSelectorClass);\n }\n\n // remove button\n if(btnExists)\n btnExists.parentNode.removeChild(btnExists);\n //btnExists.remove();\n\n }\n\n // remove element classes\n currentElement.classList.remove(self.options.loadedClass);\n\n // remove truncate-element index from element\n currentElement.removeAttribute(self.options.dataIndex);\n\n // reset current truncation instance\n currentElement = null;\n\n }\n\n }\n\n init();\n return self;\n };\n return Cuttr;\n}));\n\n\n/**\n * jQuery adapter for Cuttr.js 1.1.0\n */\nif(window.jQuery && window.Cuttr){\n (function ($, Cuttr) {\n 'use strict';\n\n // No jQuery No Go\n if (!$ || !Cuttr) {\n //window.cuttr_utils.showError('error', 'jQuery is required to use the jQuery Cuttr adapter!');\n console.log('ERROR - jQuery is required to use the jQuery Cuttr adapter!');\n return;\n }\n\n $.fn.Cuttr = function (options) {\n return this.each((e, element) => {\n options = $.extend({}, options, {'$': $});\n if (!$.data(element, 'Cuttr')) {\n $.data(element, 'Cuttr', new Cuttr(element, options));\n }\n });\n };\n })(window.jQuery, window.Cuttr);\n}\n"]} \ No newline at end of file +{"version":3,"sources":["cuttr.js"],"names":["root","define","amd","factory","module","exports","Cuttr","this","el","options","self","Object","create","prototype","originalContent","document","querySelectorAll","contentVisibilityState","contentTruncationState","truncate","length","ending","loadedClass","readMore","readMoreText","readLessText","readMoreBtnTag","afterExpand","readMoreBtnAdditionalClasses","keys","forEach","key","truncateIt","thisElement","str","thisIndex","dataset","cuttrIndex","substring","cuttrMethod","words","split","splice","join","sentences","match","currentElement","btnAdditionalClasses","nextElementSibling","btnPosition","addReadMore","updated","cuttrReadmore","cuttrReadless","cuttrReadmorePosition","readMoreBtnPosition","addEventListener","cuttrReadmoreTag","event","target","classList","contains","updateContent","cuttrReadmoreAdditionalClasses","btnText","btnMarkup","btnTag","readMoreBtnSelectorClass","replace","btnExists","matches","btnSelectorClass","querySelector","insertAdjacentHTML","previousElementSibling","truncateLength","console","truncatedContent","parentNode","displayWarnings","isAuthorized","innerHTML","cuttrLength","truncateEnding","cuttrEnding","currentContent","trim","thisBtnPosition","afterTruncate","call","expandContent","selector","currentElements","elementsToTruncate","i","showError","type","text","window","truncateContent","removeChild","each","e","destroy","remove","removeAttribute","dataIndex","RegExp","test","domain","indexOf","prepare","contentToTitle","cuttrTitle","title","setAttribute","init","jQuery","$","fn","element","extend","data","log"],"mappings":"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","file":"cuttr.min.js","sourcesContent":["/*!\n * Cuttr 1.4.0\n * https://github.com/d-e-v-s-k/cuttr-js\n *\n * @license GPLv3 for open source use only\n * or Cuttr Commercial License for commercial use\n * https://cuttr.kulahs.de/pricing/\n *\n * Copyright (C) 2022 https://cuttr.kulahs.de/ - A project by DEVSK\n **/\n\n(function (root, factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define([], factory);\n } else if (typeof module === 'object' && module.exports) {\n // Node. Does not work with strict CommonJS, but\n // only CommonJS-like environments that support module.exports,\n // like Node.\n module.exports = factory();\n } else {\n // Browser globals (root is window)\n root.Cuttr = factory();\n }\n}(this, function () {\n const Cuttr = function (el, options){\n 'use strict';\n\n const self = Object.create(Cuttr.prototype);\n\n /**\n * Default settings\n */\n self.options = {\n // global data\n elementsToTruncate: typeof el === 'string' ? document.querySelectorAll(el) : el,\n originalContent: [],\n contentVisibilityState: [],\n contentTruncationState: [],\n\n // set default options\n truncate: 'characters', // truncate method [characters|words|sentences]\n length: 100, // truncation limit\n ending: '...', // truncation ending string\n loadedClass: 'cuttr--loaded', // class to set when truncation finished\n title: false, // add original content to elements title tag\n readMore: false, // read more button enabled/disabled\n readMoreText: 'read more',\n readLessText: 'read less',\n readMoreBtnPosition: 'after', // [after|inside]\n readMoreBtnTag: 'button', // read-more button tag [button|a|...]\n readMoreBtnSelectorClass: 'cuttr__readmore', // read-more button selector\n readMoreBtnAdditionalClasses: '',\n\n // callback functions\n afterTruncate: function(){},\n afterExpand: function(){},\n\n // private options\n dataIndex: 'data-cuttr-index', // cuttr index data attribute\n };\n\n /**\n * User defined options\n */\n if (options) {\n Object.keys(options).forEach(function (key){\n self.options[key] = options[key];\n });\n }\n\n\n const init = function () {\n prepare.call(this);\n };\n\n\n /*\n prepare cuttable elements\n */\n function prepare() {\n\n const isAuthorized = self.options && new RegExp('([\\\\d\\\\w]{8}-){3}[\\\\d\\\\w]{8}|^(?=.*?[A-Y])(?=.*?[a-y])(?=.*?[0-8])(?=.*?[#?!@$%^&*-]).{8,}$').test(self.options['li'+'cen'+'seK' + 'e' + 'y']) || document.domain.indexOf('cuttr'+'.' +'kul' + 'ahs' + '.' + 'de') > -1;\n\n // return if no target element defined\n if (!self.options.elementsToTruncate) {\n return;\n } else {\n displayWarnings(isAuthorized);\n }\n\n // set element type depending on source\n if ( !('length' in self.options.elementsToTruncate) )\n self.options.elementsToTruncate = [self.options.elementsToTruncate];\n\n // loop through target elements to truncate\n for (let i = 0; i < self.options.elementsToTruncate.length; i++) {\n\n const currentElement = self.options.elementsToTruncate[i];\n const currentContent = currentElement.innerHTML;\n const truncateLength = (currentElement.dataset.cuttrLength) ? currentElement.dataset.cuttrLength : self.options.length;\n const truncateEnding = (currentElement.dataset.cuttrEnding) ? currentElement.dataset.cuttrEnding : self.options.ending;\n const contentToTitle = (currentElement.dataset.cuttrTitle) ? currentElement.dataset.cuttrTitle : self.options.title;\n let truncatedContent;\n\n // add truncate-element index to element\n currentElement.setAttribute(self.options.dataIndex, i);\n\n // temporary save elements original content\n self.options.originalContent.push(currentContent);\n\n // truncate content\n truncatedContent = truncateIt(currentElement, currentContent.trim(), truncateLength, truncateEnding);\n\n // set title attr with original text content\n if (contentToTitle)\n currentElement.title = currentElement.textContent.trim();\n\n // set new content\n currentElement.innerHTML = truncatedContent;\n\n // add read-more button if current content is truncated\n if (self.options.contentTruncationState[i]) {\n\n if (self.options.readMore)\n addReadMore(currentElement);\n\n currentElement.classList += ' ' + self.options.loadedClass;\n\n }\n\n // here go the callbacks\n self.options.afterTruncate.call(currentElement);\n\n }\n\n }\n\n\n /*\n truncate text to specific length\n */\n function truncateIt(thisElement, str, length, ending) {\n\n const thisIndex = thisElement.dataset.cuttrIndex;\n const truncateMethod = (thisElement.dataset.cuttrMethod) ? thisElement.dataset.cuttrMethod : self.options.truncate;\n\n // set defaults\n if (length == null) {\n length = 100;\n }\n\n // set defaults\n if (ending == null) {\n ending = '...';\n }\n\n // truncate content based on method\n switch (truncateMethod) {\n\n // truncate characters only\n case 'characters':\n\n // check if content (string) is longer than truncation limit\n if (str.length > length) {\n\n // set current content truncation true and return truncated string\n self.options.contentTruncationState[thisIndex] = true;\n // set visibility state\n self.options.contentVisibilityState[thisIndex] = false;\n\n // return new string\n return str.substring(0, length - ending.length) + ending + ' ';\n\n } else {\n return str;\n }\n\n break;\n\n // truncate words\n case 'words':\n\n const words = str.split(/ (?=[^>]*(?:<|$))/);\n\n // check if content (string) is longer than truncation limit\n if (words.length > length) {\n\n // set current content truncation true and return truncated string\n self.options.contentTruncationState[thisIndex] = true;\n // set visibility state\n self.options.contentVisibilityState[thisIndex] = false;\n // return new string\n // split spaces followed by sequence of characters are NOT greater-than signs, less-than sign\n return words.splice(0,length).join(' ') + ' ' + ending + ' ';\n\n } else {\n return str;\n }\n\n break;\n\n // truncate full sentences\n case 'sentences':\n\n const sentences = str.match(/[^\\.!\\?]+[\\.!\\?]+/g);\n\n // check if content (string) is longer than truncation limit\n if (sentences.length > length) {\n\n // set current contetn truncation true and return truncated string\n self.options.contentTruncationState[thisIndex] = true;\n // set visibility state\n self.options.contentVisibilityState[thisIndex] = false;\n // return new string\n return sentences.splice(0,length).join(' ') + ' ' + ending + ' ';\n\n } else {\n return str;\n }\n\n break;\n\n // truncate characters by default\n default:\n\n // check if content (string) is longer than truncation limit\n if (str.length > length) {\n\n // set current contetn truncation true and return truncated string\n self.options.contentTruncationState[thisIndex] = true;\n // set visibility state\n self.options.contentVisibilityState[thisIndex] = false;\n // return new string\n return str.substring(0, length - ending.length) + ending;\n\n } else {\n return str;\n }\n\n }\n\n }\n\n\n /*\n append read more button\n */\n function addReadMore(thisElement, updated) {\n\n const currentElement = thisElement;\n const thisIndex = currentElement.dataset.cuttrIndex;\n const readMoreText = (currentElement.dataset.cuttrReadmore) ? currentElement.dataset.cuttrReadmore : self.options.readMoreText;\n const readLessText = (currentElement.dataset.cuttrReadmore) ? currentElement.dataset.cuttrReadless : self.options.readLessText;\n const btnPosition = (currentElement.dataset.cuttrReadmorePosition) ? currentElement.dataset.cuttrReadmorePosition : self.options.readMoreBtnPosition;\n const btnTag = (currentElement.dataset.cuttrReadmoreTag) ? currentElement.dataset.cuttrReadmoreTag : self.options.readMoreBtnTag;\n const btnSelectorClass = '.' + self.options.readMoreBtnSelectorClass;\n const btnAdditionalClasses = (currentElement.dataset.cuttrReadmoreAdditionalClasses) ? currentElement.dataset.cuttrReadmoreAdditionalClasses : self.options.readMoreBtnAdditionalClasses;\n const btnText = (self.options.contentVisibilityState[thisIndex]) ? readLessText : readMoreText;\n const btnAriaExpanded = (self.options.contentVisibilityState[thisIndex]) ? 'true' : 'false';\n const btnMarkup = ' <' + btnTag + ' aria-expanded=\"' + btnAriaExpanded + '\" class=\"' + self.options.readMoreBtnSelectorClass + ' ' + btnAdditionalClasses + '\">' + btnText.replace(/<[^>]*>/g, \"\") + '';\n let btnExists;\n\n // check for button existence depending on btn position\n if (btnPosition == 'after' && currentElement.nextElementSibling) {\n btnExists = currentElement.nextElementSibling.matches(btnSelectorClass);\n } else if (btnPosition == 'inside') {\n btnExists = currentElement.querySelector(btnSelectorClass);\n }\n\n // insert element only if it doesn't exist\n if (!btnExists) {\n\n // add read-more button to dom\n switch (btnPosition) {\n case 'after':\n currentElement.insertAdjacentHTML('afterend', btnMarkup);\n break;\n case 'inside':\n currentElement.insertAdjacentHTML('beforeend', btnMarkup);\n break;\n default:\n console.log('no matching read-more button position defined');\n }\n\n // listen to read-more clicks - show/hide content\n if (!updated) {\n\n if (btnPosition == 'after') {\n currentElement.nextElementSibling.addEventListener('click',function(event) {\n if (event.target && event.target.classList.contains(self.options.readMoreBtnSelectorClass)) {\n updateContent(event, btnPosition);\n }\n });\n } else if (btnPosition == 'inside') {\n currentElement.addEventListener('click',function(event) {\n if (event.target && event.target.classList.contains(self.options.readMoreBtnSelectorClass)) {\n updateContent(event, btnPosition);\n }\n });\n }\n\n }\n\n }\n\n }\n\n\n /*\n display original/truncated content\n */\n function updateContent(event, btnPosition) {\n\n const currentElement = (btnPosition == 'after') ? event.target.previousElementSibling : event.target.parentNode;\n const currentContent = currentElement.innerHTML;\n const thisIndex = currentElement.dataset.cuttrIndex;\n const readMoreText = (currentElement.dataset.cuttrReadmore) ? currentElement.dataset.cuttrReadmore : self.options.readMoreText;\n const readLessText = (currentElement.dataset.cuttrReadmore) ? currentElement.dataset.cuttrReadless : self.options.readLessText;\n const truncateLength = (currentElement.dataset.cuttrLength) ? currentElement.dataset.cuttrLength : self.options.length;\n const truncateEnding = (currentElement.dataset.cuttrEnding) ? currentElement.dataset.cuttrEnding : self.options.ending;\n let truncatedContent;\n\n // show content if its currently truncated\n if (!self.options.contentVisibilityState[thisIndex]) {\n\n // replace content with original content from element at specific index\n currentElement.innerHTML = self.options.originalContent[thisIndex];\n\n // set visibility state\n self.options.contentVisibilityState[thisIndex] = true;\n\n if (btnPosition == 'inside' && self.options.readMore)\n addReadMore(currentElement, true);\n\n // update button text and aria\n event.target.innerHTML = readLessText.replace(/<[^>]*>/g, \"\");\n //event.target.setAttribute('aria-expanded', 'true');\n\n // here go the callbacks\n self.options.afterExpand.call(currentElement);\n\n // truncate content if its shown completely currently\n } else {\n\n // truncate content\n truncatedContent = truncateIt(currentElement, currentContent.trim(), truncateLength, truncateEnding);\n currentElement.innerHTML = truncatedContent;\n\n // set visibility state\n self.options.contentVisibilityState[thisIndex] = false;\n\n if (btnPosition == 'inside' && self.options.readMore)\n addReadMore(currentElement, true);\n\n // update button text and aria\n event.target.innerHTML = readMoreText.replace(/<[^>]*>/g, \"\");\n //event.target.setAttribute('aria-expanded', 'false');\n\n // here go the callbacks\n self.options.afterTruncate.call(currentElement);\n\n }\n\n }\n\n\n /**\n * Displays warnings\n */\n function displayWarnings(isAuthorized) {\n\n if (!isAuthorized) {\n showError('error', 'Cuttr.js has a GPLv3 license and it requires a `licenseKey` option. Read about it here:');\n showError('error', 'https://github.com/d-e-v-s-k/cuttr-js#options');\n }\n\n }\n\n\n /*\n public function\n expand / show original content\n */\n self.expandContent = function(selector, btnPosition) {\n\n let currentElements;\n\n // set specific element to expand or use current instance node\n if (selector) {\n currentElements = document.querySelectorAll(selector);\n } else {\n currentElements = self.options.elementsToTruncate;\n }\n\n for (let i = 0; i < currentElements.length; i++) {\n\n const currentElement = currentElements[i];\n const currentContent = currentElement.innerHTML;\n const thisIndex = currentElement.dataset.cuttrIndex;\n const readLessText = (currentElement.dataset.cuttrReadmore) ? currentElement.dataset.cuttrReadless : self.options.readLessText;\n const thisBtnPosition = (btnPosition) ? btnPosition : self.options.readMoreBtnPosition;\n const btnSelectorClass = '.' + self.options.readMoreBtnSelectorClass;\n let btnExists;\n\n // show content if its currently truncated\n if (!self.options.contentVisibilityState[thisIndex]) {\n\n // replace content with original content from element at specific index\n currentElement.innerHTML = self.options.originalContent[thisIndex];\n\n // set visibility state\n self.options.contentVisibilityState[thisIndex] = true;\n\n // read-more handling only if enabled\n if (self.options.readMore) {\n\n if (thisBtnPosition == 'inside')\n addReadMore(currentElement, true);\n\n // check for button existence depending on btn position\n if (thisBtnPosition == 'after') {\n btnExists = currentElement.nextElementSibling;\n } else if (thisBtnPosition == 'inside') {\n btnExists = currentElement.querySelector(btnSelectorClass);\n }\n\n // update button text\n if(btnExists)\n btnExists.innerHTML = readLessText.replace(/<[^>]*>/g, \"\");\n\n }\n\n // here go the callbacks\n self.options.afterExpand.call(currentElement);\n\n }\n\n }\n\n }\n\n\n /*\n public function\n truncate / hide original content\n */\n self.truncateContent = function(selector, btnPosition) {\n\n let currentElements;\n\n // set specific element to expand or use current instance node\n if (selector) {\n currentElements = document.querySelectorAll(selector);\n } else {\n currentElements = self.options.elementsToTruncate;\n }\n\n for (let i = 0; i < currentElements.length; i++) {\n\n const currentElement = currentElements[i];\n const currentContent = currentElement.innerHTML;\n const thisIndex = currentElement.dataset.cuttrIndex;\n const readMoreText = (currentElement.dataset.cuttrReadmore) ? currentElement.dataset.cuttrReadmore : self.options.readMoreText;\n const thisBtnPosition = (btnPosition) ? btnPosition : self.options.readMoreBtnPosition;\n const btnSelectorClass = '.' + self.options.readMoreBtnSelectorClass;\n const truncateLength = (currentElement.dataset.cuttrLength) ? currentElement.dataset.cuttrLength : self.options.length;\n const truncateEnding = (currentElement.dataset.cuttrEnding) ? currentElement.dataset.cuttrEnding : self.options.ending;\n let truncatedContent;\n let btnExists;\n\n // hide content if its currently fully visible\n if (self.options.contentVisibilityState[thisIndex]) {\n\n // truncate content\n truncatedContent = truncateIt(currentElement, currentContent.trim(), truncateLength, truncateEnding);\n currentElement.innerHTML = truncatedContent;\n\n // set visibility state\n self.options.contentVisibilityState[thisIndex] = false;\n\n // read-more handling only if enabled\n if (self.options.readMore) {\n\n if (thisBtnPosition == 'inside')\n addReadMore(currentElement, true);\n\n // check for button existence depending on btn position\n if (thisBtnPosition == 'after') {\n btnExists = currentElement.nextElementSibling;\n } else if (thisBtnPosition == 'inside') {\n btnExists = currentElement.querySelector(btnSelectorClass);\n }\n\n // update button text\n if(btnExists)\n btnExists.innerHTML = readMoreText.replace(/<[^>]*>/g, \"\");\n\n }\n\n // here go the callbacks\n self.options.afterTruncate.call(currentElement);\n\n }\n\n }\n\n }\n\n\n /*\n public function\n restore the element to a pre-init state\n */\n self.destroy = function(selector, btnPosition) {\n\n // expand original content\n self.expandContent(selector, btnPosition);\n\n let currentElements;\n\n // set specific element to expand or use current instance node\n if (selector) {\n currentElements = document.querySelectorAll(selector);\n } else {\n currentElements = self.options.elementsToTruncate;\n }\n\n for (let i = 0; i < currentElements.length; i++) {\n\n let currentElement = currentElements[i];\n const currentContent = currentElement.innerHTML;\n const thisIndex = currentElement.dataset.cuttrIndex;\n const thisBtnPosition = (btnPosition) ? btnPosition : self.options.readMoreBtnPosition;\n const btnSelectorClass = '.' + self.options.readMoreBtnSelectorClass;\n let btnExists;\n\n // set visibility state\n self.options.contentVisibilityState[thisIndex] = true;\n\n // remove read-more if enabled\n if (self.options.readMore) {\n\n if (thisBtnPosition == 'inside')\n addReadMore(currentElement, true);\n\n // check for button existence depending on btn position\n if (thisBtnPosition == 'after') {\n btnExists = currentElement.nextElementSibling;\n } else if (thisBtnPosition == 'inside') {\n btnExists = currentElement.querySelector(btnSelectorClass);\n }\n\n // remove button\n if(btnExists)\n btnExists.parentNode.removeChild(btnExists);\n //btnExists.remove();\n\n }\n\n // remove element classes\n currentElement.classList.remove(self.options.loadedClass);\n\n // remove truncate-element index from element\n currentElement.removeAttribute(self.options.dataIndex);\n\n // reset current truncation instance\n currentElement = null;\n\n }\n\n }\n\n\n //utils\n /*\n shows console message\n */\n function showError(type, text){\n window.console && window.console[type] && window.console[type]('Cuttr: ' + text);\n }\n\n init();\n return self;\n };\n return Cuttr;\n}));\n\n\n/**\n * jQuery adapter for Cuttr.js 1.4.0\n */\nif(window.jQuery && window.Cuttr){\n (function ($, Cuttr) {\n 'use strict';\n\n // No jQuery No Go\n if (!$ || !Cuttr) {\n //window.cuttr_utils.showError('error', 'jQuery is required to use the jQuery Cuttr adapter!');\n console.log('ERROR - jQuery is required to use the jQuery Cuttr adapter!');\n return;\n }\n\n $.fn.Cuttr = function (options) {\n return this.each((e, element) => {\n options = $.extend({}, options, {'$': $});\n if (!$.data(element, 'Cuttr')) {\n $.data(element, 'Cuttr', new Cuttr(element, options));\n }\n });\n };\n })(window.jQuery, window.Cuttr);\n}\n"]} \ No newline at end of file diff --git a/examples/callbacks.html b/examples/callbacks.html new file mode 100644 index 0000000..f9b254b --- /dev/null +++ b/examples/callbacks.html @@ -0,0 +1,67 @@ + + + + + Cuttr.js - Callback examples + + + +

Callback examples

+ +

Word truncation with "Read more"

+ +

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa? Aenean commodo ligula eget dolor. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

+ +

Truncate without breaking the HTML

+ +
+

Lorem ipsum dolor sit amet, link consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

+ image +

Dolor sit amet, link 2 consectetuer adipiscing elit. Aenean commodo ligula eget dolor.

+
+ + + + + + + diff --git a/examples/index.html b/examples/index.html index 5c4c751..75d7f3c 100644 --- a/examples/index.html +++ b/examples/index.html @@ -54,6 +54,8 @@

Truncate without breaking the HTML

length: 13 }); + truncateChar.expandContent(); + new Cuttr('.truncate-words', { //options here truncate: 'words', @@ -91,11 +93,6 @@

Truncate without breaking the HTML

readMoreText: 'Show more', readLessText: 'Show less' }); - - // access an html element's prototype through jQuery's .data() function - //let data = truncateKeepHtml.data('Cuttr'); - //data.expandContent(); - }); diff --git a/examples/methods.html b/examples/methods.html new file mode 100644 index 0000000..e40b038 --- /dev/null +++ b/examples/methods.html @@ -0,0 +1,56 @@ + + + + + Cuttr.js - Method examples + + + +

Method examples

+ +

Character truncation

+ +

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

+

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

+ +

Truncate without breaking the HTML

+ +
+

Lorem ipsum dolor sit amet, link consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

+ image +

Dolor sit amet, link 2 consectetuer adipiscing elit. Aenean commodo ligula eget dolor.

+
+ + + + + + + diff --git a/package-lock.json b/package-lock.json index a7d9c02..a104a86 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,57 +4,60 @@ "lockfileVersion": 1, "requires": true, "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "@ampproject/remapping": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", + "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==", "dev": true, "requires": { - "@babel/highlight": "^7.10.4" + "@jridgewell/trace-mapping": "^0.3.0" } }, - "@babel/compat-data": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.10.5.tgz", - "integrity": "sha512-mPVoWNzIpYJHbWje0if7Ck36bpbtTvIxOi9+6WSK9wjGEXearAqlwBoTQvVjsAY2VIwgcs8V940geY3okzRCEw==", + "@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", "dev": true, "requires": { - "browserslist": "^4.12.0", - "invariant": "^2.2.4", - "semver": "^5.5.0" + "@babel/highlight": "^7.16.7" } }, + "@babel/compat-data": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz", + "integrity": "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==", + "dev": true + }, "@babel/core": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.10.5.tgz", - "integrity": "sha512-O34LQooYVDXPl7QWCdW9p4NR+QlzOr7xShPPJz8GsuCU3/8ua/wqTr7gmnxXv+WBESiGU/G5s16i6tUvHkNb+w==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.10.5", - "@babel/helper-module-transforms": "^7.10.5", - "@babel/helpers": "^7.10.4", - "@babel/parser": "^7.10.5", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.5", - "@babel/types": "^7.10.5", + "version": "7.17.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.4.tgz", + "integrity": "sha512-R9x5r4t4+hBqZTmioSnkrW+I6NmbojwjGT8p4G2Gw1thWbXIHGDnmGdLdFw0/7ljucdIrNRp7Npgb4CyBYzzJg==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.3", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helpers": "^7.17.2", + "@babel/parser": "^7.17.3", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", + "gensync": "^1.0.0-beta.2", "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" + "semver": "^6.3.0" }, "dependencies": { "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" } }, "ms": { @@ -62,384 +65,504 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true } } }, "@babel/generator": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.5.tgz", - "integrity": "sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig==", + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.3.tgz", + "integrity": "sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg==", "dev": true, "requires": { - "@babel/types": "^7.10.5", + "@babel/types": "^7.17.0", "jsesc": "^2.5.1", "source-map": "^0.5.0" } }, "@babel/helper-annotate-as-pure": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", - "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", + "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", "dev": true, "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.16.7" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", - "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", + "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==", "dev": true, "requires": { - "@babel/helper-explode-assignable-expression": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-explode-assignable-expression": "^7.16.7", + "@babel/types": "^7.16.7" } }, "@babel/helper-compilation-targets": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz", - "integrity": "sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", + "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", "dev": true, "requires": { - "@babel/compat-data": "^7.10.4", - "browserslist": "^4.12.0", - "invariant": "^2.2.4", - "levenary": "^1.1.1", - "semver": "^5.5.0" + "@babel/compat-data": "^7.16.4", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.17.5", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "@babel/helper-create-class-features-plugin": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz", - "integrity": "sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A==", + "version": "7.17.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.1.tgz", + "integrity": "sha512-JBdSr/LtyYIno/pNnJ75lBcqc3Z1XXujzPanHqjvvrhOA+DTceTFuJi8XjmWTZh4r3fsdfqaCMN0iZemdkxZHQ==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-member-expression-to-functions": "^7.10.5", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4" + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7" } }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz", - "integrity": "sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz", + "integrity": "sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-regex": "^7.10.4", - "regexpu-core": "^4.7.0" + "@babel/helper-annotate-as-pure": "^7.16.7", + "regexpu-core": "^5.0.1" } }, - "@babel/helper-define-map": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", - "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", + "@babel/helper-define-polyfill-provider": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", + "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/types": "^7.10.5", - "lodash": "^4.17.19" + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "dependencies": { + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "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 + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/helper-environment-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", + "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" } }, "@babel/helper-explode-assignable-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.4.tgz", - "integrity": "sha512-4K71RyRQNPRrR85sr5QY4X3VwG4wtVoXZB9+L3r1Gp38DhELyHCtovqydRi7c1Ovb17eRGiQ/FD5s8JdU0Uy5A==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", + "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==", "dev": true, "requires": { - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/types": "^7.16.7" } }, "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", + "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-get-function-arity": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/types": "^7.16.7" } }, "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", + "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", "dev": true, "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.16.7" } }, "@babel/helper-hoist-variables": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", - "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", "dev": true, "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.16.7" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.5.tgz", - "integrity": "sha512-HiqJpYD5+WopCXIAbQDG0zye5XYVvcO9w/DHp5GsaGkRUaamLj2bEtu6i8rnGGprAhHM3qidCMgp71HF4endhA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz", + "integrity": "sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==", "dev": true, "requires": { - "@babel/types": "^7.10.5" + "@babel/types": "^7.16.7" } }, "@babel/helper-module-imports": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", - "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", "dev": true, "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.16.7" } }, "@babel/helper-module-transforms": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.10.5.tgz", - "integrity": "sha512-4P+CWMJ6/j1W915ITJaUkadLObmCRRSC234uctJfn/vHrsLNxsR8dwlcXv9ZhJWzl77awf+mWXSZEKt5t0OnlA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", + "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", - "@babel/helper-simple-access": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.5", - "lodash": "^4.17.19" + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" } }, "@babel/helper-optimise-call-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", + "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", "dev": true, "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.16.7" } }, "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", "dev": true }, - "@babel/helper-regex": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz", - "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==", + "@babel/helper-remap-async-to-generator": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", + "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==", "dev": true, "requires": { - "lodash": "^4.17.19" + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-wrap-function": "^7.16.8", + "@babel/types": "^7.16.8" } }, - "@babel/helper-remap-async-to-generator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.4.tgz", - "integrity": "sha512-86Lsr6NNw3qTNl+TBcF1oRZMaVzJtbWTyTko+CQL/tvNvcGYEFKbLXDPxtW0HKk3McNOk4KzY55itGWCAGK5tg==", + "@babel/helper-replace-supers": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", + "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-wrap-function": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" } }, - "@babel/helper-replace-supers": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", - "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", + "@babel/helper-simple-access": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", + "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/types": "^7.16.7" } }, - "@babel/helper-simple-access": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz", - "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==", + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", + "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", "dev": true, "requires": { - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/types": "^7.16.0" } }, "@babel/helper-split-export-declaration": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", - "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", "dev": true, "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.16.7" } }, "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", "dev": true }, "@babel/helper-wrap-function": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz", - "integrity": "sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", + "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-function-name": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.8", + "@babel/types": "^7.16.8" } }, "@babel/helpers": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.4.tgz", - "integrity": "sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==", + "version": "7.17.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.2.tgz", + "integrity": "sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==", "dev": true, "requires": { - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.0", + "@babel/types": "^7.17.0" } }, "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.10.4", + "@babel/helper-validator-identifier": "^7.16.7", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", - "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==", + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.3.tgz", + "integrity": "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==", "dev": true }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz", + "integrity": "sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz", + "integrity": "sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.7" + } + }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz", - "integrity": "sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz", + "integrity": "sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.10.4", - "@babel/plugin-syntax-async-generators": "^7.8.0" + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-remap-async-to-generator": "^7.16.8", + "@babel/plugin-syntax-async-generators": "^7.8.4" } }, "@babel/plugin-proposal-class-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz", - "integrity": "sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz", + "integrity": "sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-proposal-class-static-block": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.7.tgz", + "integrity": "sha512-dgqJJrcZoG/4CkMopzhPJjGxsIe9A8RlkQLnL/Vhhx8AA9ZuaRwGSlscSh42hazc7WSrya/IK7mTeoF0DP9tEw==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-class-static-block": "^7.14.5" } }, "@babel/plugin-proposal-dynamic-import": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz", - "integrity": "sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", + "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz", + "integrity": "sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-dynamic-import": "^7.8.0" + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" } }, "@babel/plugin-proposal-json-strings": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz", - "integrity": "sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz", + "integrity": "sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz", + "integrity": "sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.0" + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" } }, "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz", - "integrity": "sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz", + "integrity": "sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" } }, "@babel/plugin-proposal-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz", - "integrity": "sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz", + "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-plugin-utils": "^7.16.7", "@babel/plugin-syntax-numeric-separator": "^7.10.4" } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.4.tgz", - "integrity": "sha512-6vh4SqRuLLarjgeOf4EaROJAHjvu9Gl+/346PbDH9yWbJyfnJ/ah3jmYKYtswEyCoWZiidvVHjHshd4WgjB9BA==", + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.3.tgz", + "integrity": "sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.10.4" + "@babel/compat-data": "^7.17.0", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.16.7" } }, "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz", - "integrity": "sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", + "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" } }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.4.tgz", - "integrity": "sha512-ZIhQIEeavTgouyMSdZRap4VPPHqJJ3NEs2cuHs5p0erH+iz6khB0qfgU8g7UuJkG88+fBMy23ZiU+nuHvekJeQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz", + "integrity": "sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-optional-chaining": "^7.8.0" + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" } }, "@babel/plugin-proposal-private-methods": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz", - "integrity": "sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw==", + "version": "7.16.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz", + "integrity": "sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-class-features-plugin": "^7.16.10", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz", + "integrity": "sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" } }, "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz", - "integrity": "sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz", + "integrity": "sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-syntax-async-generators": { @@ -452,12 +575,21 @@ } }, "@babel/plugin-syntax-class-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz", - "integrity": "sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-syntax-dynamic-import": { @@ -469,6 +601,15 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, "@babel/plugin-syntax-json-strings": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", @@ -478,6 +619,15 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, "@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", @@ -523,405 +673,432 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, "@babel/plugin-syntax-top-level-await": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz", - "integrity": "sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-arrow-functions": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz", - "integrity": "sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz", + "integrity": "sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz", - "integrity": "sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz", + "integrity": "sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.10.4" + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-remap-async-to-generator": "^7.16.8" } }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz", - "integrity": "sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", + "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-block-scoping": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.5.tgz", - "integrity": "sha512-6Ycw3hjpQti0qssQcA6AMSFDHeNJ++R6dIMnpRqUjFeBBTmTDPa8zgF90OVfTvAo11mXZTlVUViY1g8ffrURLg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz", + "integrity": "sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-classes": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz", - "integrity": "sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-define-map": "^7.10.4", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz", + "integrity": "sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", "globals": "^11.1.0" } }, "@babel/plugin-transform-computed-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz", - "integrity": "sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz", + "integrity": "sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-destructuring": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz", - "integrity": "sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA==", + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.3.tgz", + "integrity": "sha512-dDFzegDYKlPqa72xIlbmSkly5MluLoaC1JswABGktyt6NTXSBcUuse/kWE/wvKFWJHPETpi158qJZFS3JmykJg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz", - "integrity": "sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz", + "integrity": "sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz", - "integrity": "sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz", + "integrity": "sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz", - "integrity": "sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", + "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==", "dev": true, "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-for-of": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz", - "integrity": "sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz", + "integrity": "sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz", - "integrity": "sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz", + "integrity": "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz", - "integrity": "sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz", + "integrity": "sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-member-expression-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz", - "integrity": "sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz", + "integrity": "sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-modules-amd": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz", - "integrity": "sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz", + "integrity": "sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.10.5", - "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz", - "integrity": "sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz", + "integrity": "sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-simple-access": "^7.10.4", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-simple-access": "^7.16.7", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz", - "integrity": "sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz", + "integrity": "sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw==", "dev": true, "requires": { - "@babel/helper-hoist-variables": "^7.10.4", - "@babel/helper-module-transforms": "^7.10.5", - "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz", - "integrity": "sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz", + "integrity": "sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz", - "integrity": "sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz", + "integrity": "sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.16.7" } }, "@babel/plugin-transform-new-target": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz", - "integrity": "sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz", + "integrity": "sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-object-super": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz", - "integrity": "sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", + "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4" + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7" } }, "@babel/plugin-transform-parameters": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz", - "integrity": "sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz", + "integrity": "sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-property-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz", - "integrity": "sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", + "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-regenerator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz", - "integrity": "sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz", + "integrity": "sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q==", "dev": true, "requires": { "regenerator-transform": "^0.14.2" } }, "@babel/plugin-transform-reserved-words": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz", - "integrity": "sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz", + "integrity": "sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz", - "integrity": "sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", + "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-spread": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.10.4.tgz", - "integrity": "sha512-1e/51G/Ni+7uH5gktbWv+eCED9pP8ZpRhZB3jOaI3mmzfvJTWHkuyYTv0Z5PYtyM+Tr2Ccr9kUdQxn60fI5WuQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz", + "integrity": "sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz", - "integrity": "sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", + "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-regex": "^7.10.4" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-template-literals": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz", - "integrity": "sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz", + "integrity": "sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz", - "integrity": "sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz", + "integrity": "sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-unicode-escapes": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz", - "integrity": "sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz", + "integrity": "sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz", - "integrity": "sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", + "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/preset-env": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.10.4.tgz", - "integrity": "sha512-tcmuQ6vupfMZPrLrc38d0sF2OjLT3/bZ0dry5HchNCQbrokoQi4reXqclvkkAT5b+gWc23meVWpve5P/7+w/zw==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.10.4", - "@babel/helper-compilation-targets": "^7.10.4", - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-proposal-async-generator-functions": "^7.10.4", - "@babel/plugin-proposal-class-properties": "^7.10.4", - "@babel/plugin-proposal-dynamic-import": "^7.10.4", - "@babel/plugin-proposal-json-strings": "^7.10.4", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.4", - "@babel/plugin-proposal-numeric-separator": "^7.10.4", - "@babel/plugin-proposal-object-rest-spread": "^7.10.4", - "@babel/plugin-proposal-optional-catch-binding": "^7.10.4", - "@babel/plugin-proposal-optional-chaining": "^7.10.4", - "@babel/plugin-proposal-private-methods": "^7.10.4", - "@babel/plugin-proposal-unicode-property-regex": "^7.10.4", - "@babel/plugin-syntax-async-generators": "^7.8.0", - "@babel/plugin-syntax-class-properties": "^7.10.4", - "@babel/plugin-syntax-dynamic-import": "^7.8.0", - "@babel/plugin-syntax-json-strings": "^7.8.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "version": "7.16.11", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.11.tgz", + "integrity": "sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.16.8", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.7", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.7", + "@babel/plugin-proposal-async-generator-functions": "^7.16.8", + "@babel/plugin-proposal-class-properties": "^7.16.7", + "@babel/plugin-proposal-class-static-block": "^7.16.7", + "@babel/plugin-proposal-dynamic-import": "^7.16.7", + "@babel/plugin-proposal-export-namespace-from": "^7.16.7", + "@babel/plugin-proposal-json-strings": "^7.16.7", + "@babel/plugin-proposal-logical-assignment-operators": "^7.16.7", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7", + "@babel/plugin-proposal-numeric-separator": "^7.16.7", + "@babel/plugin-proposal-object-rest-spread": "^7.16.7", + "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", + "@babel/plugin-proposal-optional-chaining": "^7.16.7", + "@babel/plugin-proposal-private-methods": "^7.16.11", + "@babel/plugin-proposal-private-property-in-object": "^7.16.7", + "@babel/plugin-proposal-unicode-property-regex": "^7.16.7", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.0", - "@babel/plugin-syntax-top-level-await": "^7.10.4", - "@babel/plugin-transform-arrow-functions": "^7.10.4", - "@babel/plugin-transform-async-to-generator": "^7.10.4", - "@babel/plugin-transform-block-scoped-functions": "^7.10.4", - "@babel/plugin-transform-block-scoping": "^7.10.4", - "@babel/plugin-transform-classes": "^7.10.4", - "@babel/plugin-transform-computed-properties": "^7.10.4", - "@babel/plugin-transform-destructuring": "^7.10.4", - "@babel/plugin-transform-dotall-regex": "^7.10.4", - "@babel/plugin-transform-duplicate-keys": "^7.10.4", - "@babel/plugin-transform-exponentiation-operator": "^7.10.4", - "@babel/plugin-transform-for-of": "^7.10.4", - "@babel/plugin-transform-function-name": "^7.10.4", - "@babel/plugin-transform-literals": "^7.10.4", - "@babel/plugin-transform-member-expression-literals": "^7.10.4", - "@babel/plugin-transform-modules-amd": "^7.10.4", - "@babel/plugin-transform-modules-commonjs": "^7.10.4", - "@babel/plugin-transform-modules-systemjs": "^7.10.4", - "@babel/plugin-transform-modules-umd": "^7.10.4", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.10.4", - "@babel/plugin-transform-new-target": "^7.10.4", - "@babel/plugin-transform-object-super": "^7.10.4", - "@babel/plugin-transform-parameters": "^7.10.4", - "@babel/plugin-transform-property-literals": "^7.10.4", - "@babel/plugin-transform-regenerator": "^7.10.4", - "@babel/plugin-transform-reserved-words": "^7.10.4", - "@babel/plugin-transform-shorthand-properties": "^7.10.4", - "@babel/plugin-transform-spread": "^7.10.4", - "@babel/plugin-transform-sticky-regex": "^7.10.4", - "@babel/plugin-transform-template-literals": "^7.10.4", - "@babel/plugin-transform-typeof-symbol": "^7.10.4", - "@babel/plugin-transform-unicode-escapes": "^7.10.4", - "@babel/plugin-transform-unicode-regex": "^7.10.4", - "@babel/preset-modules": "^0.1.3", - "@babel/types": "^7.10.4", - "browserslist": "^4.12.0", - "core-js-compat": "^3.6.2", - "invariant": "^2.2.2", - "levenary": "^1.1.1", - "semver": "^5.5.0" + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.16.7", + "@babel/plugin-transform-async-to-generator": "^7.16.8", + "@babel/plugin-transform-block-scoped-functions": "^7.16.7", + "@babel/plugin-transform-block-scoping": "^7.16.7", + "@babel/plugin-transform-classes": "^7.16.7", + "@babel/plugin-transform-computed-properties": "^7.16.7", + "@babel/plugin-transform-destructuring": "^7.16.7", + "@babel/plugin-transform-dotall-regex": "^7.16.7", + "@babel/plugin-transform-duplicate-keys": "^7.16.7", + "@babel/plugin-transform-exponentiation-operator": "^7.16.7", + "@babel/plugin-transform-for-of": "^7.16.7", + "@babel/plugin-transform-function-name": "^7.16.7", + "@babel/plugin-transform-literals": "^7.16.7", + "@babel/plugin-transform-member-expression-literals": "^7.16.7", + "@babel/plugin-transform-modules-amd": "^7.16.7", + "@babel/plugin-transform-modules-commonjs": "^7.16.8", + "@babel/plugin-transform-modules-systemjs": "^7.16.7", + "@babel/plugin-transform-modules-umd": "^7.16.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.8", + "@babel/plugin-transform-new-target": "^7.16.7", + "@babel/plugin-transform-object-super": "^7.16.7", + "@babel/plugin-transform-parameters": "^7.16.7", + "@babel/plugin-transform-property-literals": "^7.16.7", + "@babel/plugin-transform-regenerator": "^7.16.7", + "@babel/plugin-transform-reserved-words": "^7.16.7", + "@babel/plugin-transform-shorthand-properties": "^7.16.7", + "@babel/plugin-transform-spread": "^7.16.7", + "@babel/plugin-transform-sticky-regex": "^7.16.7", + "@babel/plugin-transform-template-literals": "^7.16.7", + "@babel/plugin-transform-typeof-symbol": "^7.16.7", + "@babel/plugin-transform-unicode-escapes": "^7.16.7", + "@babel/plugin-transform-unicode-regex": "^7.16.7", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.16.8", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "core-js-compat": "^3.20.2", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "@babel/preset-modules": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.3.tgz", - "integrity": "sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg==", + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", @@ -932,49 +1109,50 @@ } }, "@babel/runtime": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.5.tgz", - "integrity": "sha512-otddXKhdNn7d0ptoFRHtMLa8LqDxLYwTjB4nYgM1yy5N6gU/MUf8zqyyLltCH3yAVitBzmwK4us+DD0l/MauAg==", + "version": "7.17.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.2.tgz", + "integrity": "sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw==", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" } }, "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", "dev": true, "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" } }, "@babel/traverse": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.5.tgz", - "integrity": "sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.10.5", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", - "@babel/parser": "^7.10.5", - "@babel/types": "^7.10.5", + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", + "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.3", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.17.3", + "@babel/types": "^7.17.0", "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" + "globals": "^11.1.0" }, "dependencies": { "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" } }, "ms": { @@ -986,13 +1164,12 @@ } }, "@babel/types": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", - "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", + "@babel/helper-validator-identifier": "^7.16.7", "to-fast-properties": "^2.0.0" } }, @@ -1027,6 +1204,28 @@ "through2": "^2.0.3" } }, + "@jridgewell/resolve-uri": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", + "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.11", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", + "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", + "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "acorn": { "version": "5.7.4", "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", @@ -1253,6 +1452,44 @@ "object.assign": "^4.1.0" } }, + "babel-plugin-polyfill-corejs2": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", + "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.3.1", + "semver": "^6.1.1" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", + "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.1", + "core-js-compat": "^3.21.0" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", + "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.1" + } + }, "bach": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", @@ -1387,42 +1624,16 @@ } }, "browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", + "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", + "caniuse-lite": "^1.0.30001286", + "electron-to-chromium": "^1.4.17", "escalade": "^3.1.1", - "node-releases": "^1.1.71" - }, - "dependencies": { - "caniuse-lite": { - "version": "1.0.30001230", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001230.tgz", - "integrity": "sha512-5yBd5nWCBS+jWKTcHOzXwo5xzcj4ePE/yjtkZyUV1BTUmrBaA9MRGC+e7mxnqXSA90CmCA8L3eKLaSUkt099IQ==", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.739", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.739.tgz", - "integrity": "sha512-+LPJVRsN7hGZ9EIUUiWCpO7l4E3qBYHNadazlucBfsXBbccDFNKUBAgzE68FnkWGJPwD/AfKhSzL+G+Iqb8A4A==", - "dev": true - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "node-releases": { - "version": "1.1.72", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz", - "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==", - "dev": true - } + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" } }, "buffer-equal": { @@ -1460,6 +1671,12 @@ "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", "dev": true }, + "caniuse-lite": { + "version": "1.0.30001312", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz", + "integrity": "sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==", + "dev": true + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -1481,7 +1698,7 @@ "async-each": "^1.0.1", "braces": "^2.3.2", "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", + "glob-parent": "^6.0.1", "inherits": "^2.0.3", "is-binary-path": "^1.0.0", "is-glob": "^4.0.0", @@ -1491,6 +1708,25 @@ "upath": "^1.1.1" }, "dependencies": { + "glob-parent": { + "version": "^6.0.1", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -1610,12 +1846,6 @@ "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "dev": true }, - "colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", - "dev": true - }, "component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", @@ -1656,9 +1886,7 @@ "dev": true }, "copy-props": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.4.tgz", - "integrity": "sha512-7cjuUME+p+S3HZlbllgsn2CDwS+5eCCX16qBgNC4jgSTf49qR1VKy/Zhl400m0IQXl/bPGEVqncgUUMjrr4s8A==", + "version": "^2.0.5", "dev": true, "requires": { "each-props": "^1.3.0", @@ -1666,12 +1894,12 @@ } }, "core-js-compat": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", - "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", + "version": "3.21.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.21.1.tgz", + "integrity": "sha512-gbgX5AUvMb8gwxC7FLVWYT7Kkgu/y7+h/h1X43yJkNqhlK2fuYyQimqvKGNZFAY6CKii/GFKJ2cp/1/42TN36g==", "dev": true, "requires": { - "browserslist": "^4.8.5", + "browserslist": "^4.19.1", "semver": "7.0.0" }, "dependencies": { @@ -1875,6 +2103,12 @@ "object.defaults": "^1.1.0" } }, + "electron-to-chromium": { + "version": "1.4.71", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.71.tgz", + "integrity": "sha512-Hk61vXXKRb2cd3znPE9F+2pLWdIOmP7GjiTj45y6L3W/lO+hSnUSUhq+6lEaERWBdZOHbk2s3YV5c9xVl3boVw==", + "dev": true + }, "end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -1937,6 +2171,12 @@ "es6-symbol": "^3.1.1" } }, + "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": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -2263,9 +2503,9 @@ "dev": true }, "gensync": { - "version": "1.0.0-beta.1", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", - "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", + "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": { @@ -2294,27 +2534,6 @@ "path-is-absolute": "^1.0.0" } }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, "glob-stream": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", @@ -2323,7 +2542,7 @@ "requires": { "extend": "^3.0.0", "glob": "^7.1.1", - "glob-parent": "^3.1.0", + "glob-parent": "^6.0.1", "is-negated-glob": "^1.0.0", "ordered-read-streams": "^1.0.0", "pumpify": "^1.3.5", @@ -2331,6 +2550,25 @@ "remove-trailing-separator": "^1.0.1", "to-absolute-glob": "^2.0.0", "unique-stream": "^2.0.2" + }, + "dependencies": { + "glob-parent": { + "version": "^6.0.1", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } } }, "glob-watcher": { @@ -2415,7 +2653,7 @@ "array-sort": "^1.0.0", "color-support": "^1.1.3", "concat-stream": "^1.6.0", - "copy-props": "^2.0.1", + "copy-props": "^2.0.5", "fancy-log": "^1.3.2", "gulplog": "^1.0.0", "interpret": "^1.4.0", @@ -2428,6 +2666,11 @@ "semver-greatest-satisfied-range": "^1.1.0", "v8flags": "^3.2.0", "yargs": "^7.1.0" + }, + "dependencies": { + "copy-props": { + "version": "^2.0.5" + } } } } @@ -2600,15 +2843,6 @@ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", "dev": true }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, "invert-kv": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", @@ -2849,9 +3083,9 @@ "dev": true }, "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "dev": true, "requires": { "minimist": "^1.2.5" @@ -2906,21 +3140,6 @@ "flush-write-stream": "^1.0.2" } }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "levenary": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz", - "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==", - "dev": true, - "requires": { - "leven": "^3.1.0" - } - }, "liftoff": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", @@ -2950,21 +3169,12 @@ "strip-bom": "^2.0.0" } }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", "dev": true }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, "lru-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", @@ -3165,6 +3375,12 @@ "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", "dev": true }, + "node-releases": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", + "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==", + "dev": true + }, "normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -3424,6 +3640,12 @@ "pinkie-promise": "^2.0.0" } }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", @@ -3553,24 +3775,24 @@ } }, "regenerate": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz", - "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", "dev": true }, "regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", + "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", "dev": true, "requires": { - "regenerate": "^1.4.0" + "regenerate": "^1.4.2" } }, "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", "dev": true }, "regenerator-transform": { @@ -3593,29 +3815,29 @@ } }, "regexpu-core": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz", - "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz", + "integrity": "sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==", "dev": true, "requires": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.2.0", - "regjsgen": "^0.5.1", - "regjsparser": "^0.6.4", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.2.0" + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.0.1", + "regjsgen": "^0.6.0", + "regjsparser": "^0.8.2", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" } }, "regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", + "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", "dev": true }, "regjsparser": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", - "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", + "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", "dev": true, "requires": { "jsesc": "~0.5.0" @@ -4228,31 +4450,31 @@ "dev": true }, "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", "dev": true }, "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" } }, "unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", "dev": true }, "unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", + "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", "dev": true }, "union-value": { @@ -4504,4 +4726,4 @@ } } } -} +} \ No newline at end of file diff --git a/package.json b/package.json index a75d58f..ed2da5b 100644 --- a/package.json +++ b/package.json @@ -1,11 +1,16 @@ { "name": "cuttr", - "version": "1.3.2", + "version": "1.4.0", "description": "Cuttr is a javascript / jQuery plugin that truncates multi-line string content with multiple truncation methods and custom ellipsis.", "main": "dist/cuttr.js", "unpkg": "dist/cuttr.min.js", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" + "test": "echo \"Error: no test specified\" && exit 1", + "preinstall": "npx npm-force-resolutions" + }, + "resolutions": { + "glob-parent": "^6.0.1", + "copy-props": "^2.0.5" }, "repository": { "type": "git", @@ -46,8 +51,8 @@ "license": "GPL-3.0", "homepage": "https://cuttr.kulahs.de", "devDependencies": { - "@babel/core": "^7.10.5", - "@babel/preset-env": "^7.10.4", + "@babel/core": "^7.17.4", + "@babel/preset-env": "^7.16.11", "gulp": "^4.0.0", "gulp-babel": "^8.0.0", "gulp-rename": "^1.2.2", diff --git a/src/cuttr.js b/src/cuttr.js index 228dfde..dc6e71b 100644 --- a/src/cuttr.js +++ b/src/cuttr.js @@ -1,12 +1,12 @@ /*! - * Cuttr 1.3.2 + * Cuttr 1.4.0 * https://github.com/d-e-v-s-k/cuttr-js * * @license GPLv3 for open source use only * or Cuttr Commercial License for commercial use * https://cuttr.kulahs.de/pricing/ * - * Copyright (C) 2021 https://cuttr.kulahs.de/ - A project by DEVSK + * Copyright (C) 2022 https://cuttr.kulahs.de/ - A project by DEVSK **/ (function (root, factory) { @@ -52,6 +52,10 @@ readMoreBtnSelectorClass: 'cuttr__readmore', // read-more button selector readMoreBtnAdditionalClasses: '', + // callback functions + afterTruncate: function(){}, + afterExpand: function(){}, + // private options dataIndex: 'data-cuttr-index', // cuttr index data attribute }; @@ -66,17 +70,6 @@ } - //using jQuery initialization? Creating the $.fn.fullpage object - /*window.cuttr_api = self; - - if(options.$){ - console.log(self); - Object.keys(self).forEach(function (key) { - options.$.fn.Cuttr[key] = self[key]; - }); - }*/ - - const init = function () { prepare.call(this); }; @@ -87,8 +80,14 @@ */ function prepare() { + const isAuthorized = self.options && new RegExp('([\\d\\w]{8}-){3}[\\d\\w]{8}|^(?=.*?[A-Y])(?=.*?[a-y])(?=.*?[0-8])(?=.*?[#?!@$%^&*-]).{8,}$').test(self.options['li'+'cen'+'seK' + 'e' + 'y']) || document.domain.indexOf('cuttr'+'.' +'kul' + 'ahs' + '.' + 'de') > -1; + // return if no target element defined - if (!self.options.elementsToTruncate) return; + if (!self.options.elementsToTruncate) { + return; + } else { + displayWarnings(isAuthorized); + } // set element type depending on source if ( !('length' in self.options.elementsToTruncate) ) @@ -130,6 +129,9 @@ } + // here go the callbacks + self.options.afterTruncate.call(currentElement); + } } @@ -335,7 +337,10 @@ event.target.innerHTML = readLessText.replace(/<[^>]*>/g, ""); //event.target.setAttribute('aria-expanded', 'true'); - // truncate content if its shown completely currently + // here go the callbacks + self.options.afterExpand.call(currentElement); + + // truncate content if its shown completely currently } else { // truncate content @@ -352,6 +357,22 @@ event.target.innerHTML = readMoreText.replace(/<[^>]*>/g, ""); //event.target.setAttribute('aria-expanded', 'false'); + // here go the callbacks + self.options.afterTruncate.call(currentElement); + + } + + } + + + /** + * Displays warnings + */ + function displayWarnings(isAuthorized) { + + if (!isAuthorized) { + showError('error', 'Cuttr.js has a GPLv3 license and it requires a `licenseKey` option. Read about it here:'); + showError('error', 'https://github.com/d-e-v-s-k/cuttr-js#options'); } } @@ -410,6 +431,9 @@ } + // here go the callbacks + self.options.afterExpand.call(currentElement); + } } @@ -445,7 +469,7 @@ let truncatedContent; let btnExists; - // hide content if its currently truncated + // hide content if its currently fully visible if (self.options.contentVisibilityState[thisIndex]) { // truncate content @@ -474,6 +498,9 @@ } + // here go the callbacks + self.options.afterTruncate.call(currentElement); + } } @@ -544,6 +571,15 @@ } + + //utils + /* + shows console message + */ + function showError(type, text){ + window.console && window.console[type] && window.console[type]('Cuttr: ' + text); + } + init(); return self; }; @@ -552,7 +588,7 @@ /** - * jQuery adapter for Cuttr.js 1.1.0 + * jQuery adapter for Cuttr.js 1.4.0 */ if(window.jQuery && window.Cuttr){ (function ($, Cuttr) {