├── .eslintrc.js ├── .gitignore ├── .nvmrc ├── README.md ├── as-nav-for.js ├── bower.json ├── package-lock.json ├── package.json ├── sandbox ├── as-nav-for.html ├── group-cells.html └── wrap-around.html └── test ├── group-cells.js ├── group-main.js ├── index.html └── test-as-nav-for.js /.eslintrc.js: -------------------------------------------------------------------------------- 1 | /* eslint-env node */ 2 | 3 | module.exports = { 4 | plugins: [ 'metafizzy' ], 5 | extends: 'plugin:metafizzy/browser', 6 | env: { 7 | browser: true, 8 | commonjs: true, 9 | }, 10 | parserOptions: { 11 | ecmaVersion: 2018, 12 | }, 13 | globals: { 14 | Flickity: 'readonly', 15 | QUnit: 'readonly', 16 | }, 17 | rules: { 18 | 'prefer-object-spread': 'error', 19 | }, 20 | ignorePatterns: [ 'bower_components' ], 21 | }; 22 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | bower_components/ 2 | node_modules/ 3 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | 16 -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Flickity asNavFor 2 | 3 | Enables `asNavFor` option for [Flickity](https://flickity.metafizzy.co/), where one gallery is navigation or another. 4 | 5 | + Clicking the nav gallery will select the content gallery 6 | + Selecting the content gallery will sync to the nav gallery 7 | 8 | ``` html 9 | 12 | 15 | ``` 16 | 17 | ``` js 18 | // options 19 | asNavFor: '.gallery-a' 20 | // set as a selector string 21 | 22 | asNavFor: document.querySelector('.gallery-a') 23 | // set as an element 24 | ``` 25 | 26 | ## Install 27 | 28 | Add `as-nav-for.js` to your scripts, after including Flickity. 29 | 30 | ### Download 31 | 32 | + [as-nav-for.js](https://unpkg.com/flickity-as-nav-for@3/as-nav-for.js) 33 | 34 | ### CDN 35 | 36 | ``` html 37 | 38 | ``` 39 | 40 | ### Package managers 41 | 42 | npm: `npm install flickity-as-nav-for` 43 | 44 | Yarn: `yarn add flickity-as-nav-for` 45 | 46 | ## Usage 47 | 48 | ### jQuery 49 | 50 | ``` js 51 | $('.gallery-a').flickity(); 52 | $('.gallery-b').flickity({ 53 | asNavFor: '.gallery-a' 54 | }); 55 | ``` 56 | 57 | ### Vanilla JS 58 | 59 | ``` js 60 | var flktyA = new Flickity('.gallery-a'); 61 | var flktyB = new Flickity( '.gallery-b', { 62 | asNavFor: '.gallery-a' 63 | }); 64 | ``` 65 | 66 | ### HTML 67 | 68 | ``` html 69 | 72 | 76 | ``` 77 | 78 | ## Install 79 | 80 | Bower: `bower install flickity-as-nav-for --save` 81 | 82 | npm: `npm install flickity-as-nav-for` 83 | 84 | ### Webpack 85 | 86 | ``` js 87 | const Flickity = require('flickity'); 88 | require('flickity-as-nav-for'); 89 | 90 | var flktyA = new Flickity('.gallery-a'); 91 | var flktyB = new Flickity( '.gallery-b', { 92 | asNavFor: '.gallery-a' 93 | }); 94 | ``` 95 | 96 | --- 97 | 98 | MIT license 99 | 100 | By [Metafizzy](https://metafizzy.co) 101 | -------------------------------------------------------------------------------- /as-nav-for.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Flickity asNavFor v3.0.0 3 | * enable asNavFor for Flickity 4 | */ 5 | 6 | ( function( window, factory ) { 7 | // universal module definition 8 | if ( typeof module == 'object' && module.exports ) { 9 | // CommonJS 10 | module.exports = factory( 11 | require('flickity'), 12 | require('fizzy-ui-utils'), 13 | ); 14 | } else { 15 | // browser global 16 | window.Flickity = factory( 17 | window.Flickity, 18 | window.fizzyUIUtils, 19 | ); 20 | } 21 | 22 | }( window, function factory( Flickity, utils ) { 23 | 24 | // -------------------------- asNavFor prototype -------------------------- // 25 | 26 | // Flickity.defaults.asNavFor = null; 27 | 28 | Flickity.create.asNavFor = function() { 29 | this.on( 'activate', this.activateAsNavFor ); 30 | this.on( 'deactivate', this.deactivateAsNavFor ); 31 | this.on( 'destroy', this.destroyAsNavFor ); 32 | 33 | let asNavForOption = this.options.asNavFor; 34 | if ( !asNavForOption ) return; 35 | 36 | // HACK do async, give time for other flickity to be initalized 37 | setTimeout( () => { 38 | this.setNavCompanion( asNavForOption ); 39 | } ); 40 | }; 41 | 42 | let proto = Flickity.prototype; 43 | 44 | proto.setNavCompanion = function( elem ) { 45 | elem = utils.getQueryElement( elem ); 46 | let companion = Flickity.data( elem ); 47 | // stop if no companion or companion is self 48 | if ( !companion || companion === this ) return; 49 | 50 | this.navCompanion = companion; 51 | // companion select 52 | this.onNavCompanionSelect = () => { 53 | this.navCompanionSelect(); 54 | }; 55 | companion.on( 'select', this.onNavCompanionSelect ); 56 | // click 57 | this.on( 'staticClick', this.onNavStaticClick ); 58 | 59 | this.navCompanionSelect( true ); 60 | }; 61 | 62 | proto.navCompanionSelect = function( isInstant ) { 63 | // wait for companion & selectedCells first. #8 64 | let companionCells = this.navCompanion && this.navCompanion.selectedCells; 65 | if ( !companionCells ) return; 66 | 67 | // select slide that matches first cell of slide 68 | let selectedCell = companionCells[0]; 69 | let firstIndex = this.navCompanion.cells.indexOf( selectedCell ); 70 | let lastIndex = firstIndex + companionCells.length - 1; 71 | let selectIndex = Math.floor( lerp( firstIndex, lastIndex, 72 | this.navCompanion.cellAlign ) ); 73 | this.selectCell( selectIndex, false, isInstant ); 74 | // set nav selected class 75 | this.removeNavSelectedElements(); 76 | // stop if companion has more cells than this one 77 | if ( selectIndex >= this.cells.length ) return; 78 | 79 | let selectedCells = this.cells.slice( firstIndex, lastIndex + 1 ); 80 | this.navSelectedElements = selectedCells.map( ( cell ) => cell.element ); 81 | this.changeNavSelectedClass('add'); 82 | }; 83 | 84 | function lerp( a, b, t ) { 85 | return ( b - a ) * t + a; 86 | } 87 | 88 | proto.changeNavSelectedClass = function( method ) { 89 | this.navSelectedElements.forEach( function( navElem ) { 90 | navElem.classList[ method ]('is-nav-selected'); 91 | } ); 92 | }; 93 | 94 | proto.activateAsNavFor = function() { 95 | this.navCompanionSelect( true ); 96 | }; 97 | 98 | proto.removeNavSelectedElements = function() { 99 | if ( !this.navSelectedElements ) return; 100 | 101 | this.changeNavSelectedClass('remove'); 102 | delete this.navSelectedElements; 103 | }; 104 | 105 | proto.onNavStaticClick = function( event, pointer, cellElement, cellIndex ) { 106 | if ( typeof cellIndex == 'number' ) { 107 | this.navCompanion.selectCell( cellIndex ); 108 | } 109 | }; 110 | 111 | proto.deactivateAsNavFor = function() { 112 | this.removeNavSelectedElements(); 113 | }; 114 | 115 | proto.destroyAsNavFor = function() { 116 | if ( !this.navCompanion ) return; 117 | 118 | this.navCompanion.off( 'select', this.onNavCompanionSelect ); 119 | this.off( 'staticClick', this.onNavStaticClick ); 120 | delete this.navCompanion; 121 | }; 122 | 123 | // ----- ----- // 124 | 125 | return Flickity; 126 | 127 | } ) ); 128 | -------------------------------------------------------------------------------- /bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "flickity-as-nav-for", 3 | "description": "Enable asForNav for Flickity", 4 | "main": "as-nav-for.js", 5 | "dependencies": { 6 | "flickity": "^3.0.0", 7 | "fizzy-ui-utils": "^3.0.0" 8 | }, 9 | "devDependencies": { 10 | }, 11 | "authors": [ 12 | "David DeSandro" 13 | ], 14 | "keywords": [ 15 | "flickity" 16 | ], 17 | "license": "MIT", 18 | "homepage": "https://github.com/metafizzy/flickity-as-nav-for", 19 | "ignore": [ 20 | "**/.*", 21 | "node_modules", 22 | "bower_components", 23 | "test", 24 | "tests", 25 | "package.json", 26 | "sandbox" 27 | ] 28 | } 29 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "flickity-as-nav-for", 3 | "version": "3.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "flickity-as-nav-for", 9 | "version": "3.0.0", 10 | "license": "MIT", 11 | "dependencies": { 12 | "fizzy-ui-utils": "^3.0.0" 13 | }, 14 | "devDependencies": { 15 | "eslint": "^8.10.0", 16 | "eslint-plugin-metafizzy": "^2.0.1", 17 | "qunit": "^2.18.0" 18 | }, 19 | "peerDependencies": { 20 | "flickity": "^3.0.0" 21 | } 22 | }, 23 | "node_modules/@eslint/eslintrc": { 24 | "version": "1.2.0", 25 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.0.tgz", 26 | "integrity": "sha512-igm9SjJHNEJRiUnecP/1R5T3wKLEJ7pL6e2P+GUSfCd0dGjPYYZve08uzw8L2J8foVHFz+NGu12JxRcU2gGo6w==", 27 | "dev": true, 28 | "dependencies": { 29 | "ajv": "^6.12.4", 30 | "debug": "^4.3.2", 31 | "espree": "^9.3.1", 32 | "globals": "^13.9.0", 33 | "ignore": "^4.0.6", 34 | "import-fresh": "^3.2.1", 35 | "js-yaml": "^4.1.0", 36 | "minimatch": "^3.0.4", 37 | "strip-json-comments": "^3.1.1" 38 | }, 39 | "engines": { 40 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 41 | } 42 | }, 43 | "node_modules/@eslint/eslintrc/node_modules/ignore": { 44 | "version": "4.0.6", 45 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", 46 | "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", 47 | "dev": true, 48 | "engines": { 49 | "node": ">= 4" 50 | } 51 | }, 52 | "node_modules/@humanwhocodes/config-array": { 53 | "version": "0.9.5", 54 | "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", 55 | "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", 56 | "dev": true, 57 | "dependencies": { 58 | "@humanwhocodes/object-schema": "^1.2.1", 59 | "debug": "^4.1.1", 60 | "minimatch": "^3.0.4" 61 | }, 62 | "engines": { 63 | "node": ">=10.10.0" 64 | } 65 | }, 66 | "node_modules/@humanwhocodes/object-schema": { 67 | "version": "1.2.1", 68 | "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", 69 | "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", 70 | "dev": true 71 | }, 72 | "node_modules/acorn": { 73 | "version": "8.7.0", 74 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", 75 | "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", 76 | "dev": true, 77 | "bin": { 78 | "acorn": "bin/acorn" 79 | }, 80 | "engines": { 81 | "node": ">=0.4.0" 82 | } 83 | }, 84 | "node_modules/acorn-jsx": { 85 | "version": "5.3.2", 86 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 87 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 88 | "dev": true, 89 | "peerDependencies": { 90 | "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" 91 | } 92 | }, 93 | "node_modules/ajv": { 94 | "version": "6.12.6", 95 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 96 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 97 | "dev": true, 98 | "dependencies": { 99 | "fast-deep-equal": "^3.1.1", 100 | "fast-json-stable-stringify": "^2.0.0", 101 | "json-schema-traverse": "^0.4.1", 102 | "uri-js": "^4.2.2" 103 | }, 104 | "funding": { 105 | "type": "github", 106 | "url": "https://github.com/sponsors/epoberezkin" 107 | } 108 | }, 109 | "node_modules/ansi-regex": { 110 | "version": "5.0.1", 111 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 112 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 113 | "dev": true, 114 | "engines": { 115 | "node": ">=8" 116 | } 117 | }, 118 | "node_modules/ansi-styles": { 119 | "version": "4.3.0", 120 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 121 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 122 | "dev": true, 123 | "dependencies": { 124 | "color-convert": "^2.0.1" 125 | }, 126 | "engines": { 127 | "node": ">=8" 128 | }, 129 | "funding": { 130 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 131 | } 132 | }, 133 | "node_modules/argparse": { 134 | "version": "2.0.1", 135 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 136 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 137 | "dev": true 138 | }, 139 | "node_modules/balanced-match": { 140 | "version": "1.0.2", 141 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 142 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 143 | "dev": true 144 | }, 145 | "node_modules/brace-expansion": { 146 | "version": "1.1.11", 147 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 148 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 149 | "dev": true, 150 | "dependencies": { 151 | "balanced-match": "^1.0.0", 152 | "concat-map": "0.0.1" 153 | } 154 | }, 155 | "node_modules/callsites": { 156 | "version": "3.1.0", 157 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 158 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 159 | "dev": true, 160 | "engines": { 161 | "node": ">=6" 162 | } 163 | }, 164 | "node_modules/chalk": { 165 | "version": "4.1.2", 166 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 167 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 168 | "dev": true, 169 | "dependencies": { 170 | "ansi-styles": "^4.1.0", 171 | "supports-color": "^7.1.0" 172 | }, 173 | "engines": { 174 | "node": ">=10" 175 | }, 176 | "funding": { 177 | "url": "https://github.com/chalk/chalk?sponsor=1" 178 | } 179 | }, 180 | "node_modules/color-convert": { 181 | "version": "2.0.1", 182 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 183 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 184 | "dev": true, 185 | "dependencies": { 186 | "color-name": "~1.1.4" 187 | }, 188 | "engines": { 189 | "node": ">=7.0.0" 190 | } 191 | }, 192 | "node_modules/color-name": { 193 | "version": "1.1.4", 194 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 195 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 196 | "dev": true 197 | }, 198 | "node_modules/commander": { 199 | "version": "7.2.0", 200 | "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", 201 | "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", 202 | "dev": true, 203 | "engines": { 204 | "node": ">= 10" 205 | } 206 | }, 207 | "node_modules/concat-map": { 208 | "version": "0.0.1", 209 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 210 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 211 | "dev": true 212 | }, 213 | "node_modules/cross-spawn": { 214 | "version": "7.0.3", 215 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 216 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 217 | "dev": true, 218 | "dependencies": { 219 | "path-key": "^3.1.0", 220 | "shebang-command": "^2.0.0", 221 | "which": "^2.0.1" 222 | }, 223 | "engines": { 224 | "node": ">= 8" 225 | } 226 | }, 227 | "node_modules/debug": { 228 | "version": "4.3.3", 229 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", 230 | "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", 231 | "dev": true, 232 | "dependencies": { 233 | "ms": "2.1.2" 234 | }, 235 | "engines": { 236 | "node": ">=6.0" 237 | }, 238 | "peerDependenciesMeta": { 239 | "supports-color": { 240 | "optional": true 241 | } 242 | } 243 | }, 244 | "node_modules/deep-is": { 245 | "version": "0.1.4", 246 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 247 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 248 | "dev": true 249 | }, 250 | "node_modules/doctrine": { 251 | "version": "3.0.0", 252 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 253 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 254 | "dev": true, 255 | "dependencies": { 256 | "esutils": "^2.0.2" 257 | }, 258 | "engines": { 259 | "node": ">=6.0.0" 260 | } 261 | }, 262 | "node_modules/escape-string-regexp": { 263 | "version": "4.0.0", 264 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 265 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 266 | "dev": true, 267 | "engines": { 268 | "node": ">=10" 269 | }, 270 | "funding": { 271 | "url": "https://github.com/sponsors/sindresorhus" 272 | } 273 | }, 274 | "node_modules/eslint": { 275 | "version": "8.10.0", 276 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.10.0.tgz", 277 | "integrity": "sha512-tcI1D9lfVec+R4LE1mNDnzoJ/f71Kl/9Cv4nG47jOueCMBrCCKYXr4AUVS7go6mWYGFD4+EoN6+eXSrEbRzXVw==", 278 | "dev": true, 279 | "dependencies": { 280 | "@eslint/eslintrc": "^1.2.0", 281 | "@humanwhocodes/config-array": "^0.9.2", 282 | "ajv": "^6.10.0", 283 | "chalk": "^4.0.0", 284 | "cross-spawn": "^7.0.2", 285 | "debug": "^4.3.2", 286 | "doctrine": "^3.0.0", 287 | "escape-string-regexp": "^4.0.0", 288 | "eslint-scope": "^7.1.1", 289 | "eslint-utils": "^3.0.0", 290 | "eslint-visitor-keys": "^3.3.0", 291 | "espree": "^9.3.1", 292 | "esquery": "^1.4.0", 293 | "esutils": "^2.0.2", 294 | "fast-deep-equal": "^3.1.3", 295 | "file-entry-cache": "^6.0.1", 296 | "functional-red-black-tree": "^1.0.1", 297 | "glob-parent": "^6.0.1", 298 | "globals": "^13.6.0", 299 | "ignore": "^5.2.0", 300 | "import-fresh": "^3.0.0", 301 | "imurmurhash": "^0.1.4", 302 | "is-glob": "^4.0.0", 303 | "js-yaml": "^4.1.0", 304 | "json-stable-stringify-without-jsonify": "^1.0.1", 305 | "levn": "^0.4.1", 306 | "lodash.merge": "^4.6.2", 307 | "minimatch": "^3.0.4", 308 | "natural-compare": "^1.4.0", 309 | "optionator": "^0.9.1", 310 | "regexpp": "^3.2.0", 311 | "strip-ansi": "^6.0.1", 312 | "strip-json-comments": "^3.1.0", 313 | "text-table": "^0.2.0", 314 | "v8-compile-cache": "^2.0.3" 315 | }, 316 | "bin": { 317 | "eslint": "bin/eslint.js" 318 | }, 319 | "engines": { 320 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 321 | }, 322 | "funding": { 323 | "url": "https://opencollective.com/eslint" 324 | } 325 | }, 326 | "node_modules/eslint-plugin-metafizzy": { 327 | "version": "2.0.1", 328 | "resolved": "https://registry.npmjs.org/eslint-plugin-metafizzy/-/eslint-plugin-metafizzy-2.0.1.tgz", 329 | "integrity": "sha512-Xo0yL+y4WgEnn23sk6SSaizEzDmqdi2ZzWO5Bitzgzv/nY7G/qVPrffkLVZKE3RZzfLoFmlVwfctJXFojsU/5g==", 330 | "dev": true, 331 | "peerDependencies": { 332 | "eslint": ">=6.8.0 <9.0.0" 333 | } 334 | }, 335 | "node_modules/eslint-scope": { 336 | "version": "7.1.1", 337 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", 338 | "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", 339 | "dev": true, 340 | "dependencies": { 341 | "esrecurse": "^4.3.0", 342 | "estraverse": "^5.2.0" 343 | }, 344 | "engines": { 345 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 346 | } 347 | }, 348 | "node_modules/eslint-utils": { 349 | "version": "3.0.0", 350 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", 351 | "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", 352 | "dev": true, 353 | "dependencies": { 354 | "eslint-visitor-keys": "^2.0.0" 355 | }, 356 | "engines": { 357 | "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" 358 | }, 359 | "funding": { 360 | "url": "https://github.com/sponsors/mysticatea" 361 | }, 362 | "peerDependencies": { 363 | "eslint": ">=5" 364 | } 365 | }, 366 | "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { 367 | "version": "2.1.0", 368 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", 369 | "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", 370 | "dev": true, 371 | "engines": { 372 | "node": ">=10" 373 | } 374 | }, 375 | "node_modules/eslint-visitor-keys": { 376 | "version": "3.3.0", 377 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", 378 | "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", 379 | "dev": true, 380 | "engines": { 381 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 382 | } 383 | }, 384 | "node_modules/espree": { 385 | "version": "9.3.1", 386 | "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", 387 | "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==", 388 | "dev": true, 389 | "dependencies": { 390 | "acorn": "^8.7.0", 391 | "acorn-jsx": "^5.3.1", 392 | "eslint-visitor-keys": "^3.3.0" 393 | }, 394 | "engines": { 395 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 396 | } 397 | }, 398 | "node_modules/esquery": { 399 | "version": "1.4.0", 400 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", 401 | "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", 402 | "dev": true, 403 | "dependencies": { 404 | "estraverse": "^5.1.0" 405 | }, 406 | "engines": { 407 | "node": ">=0.10" 408 | } 409 | }, 410 | "node_modules/esrecurse": { 411 | "version": "4.3.0", 412 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 413 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 414 | "dev": true, 415 | "dependencies": { 416 | "estraverse": "^5.2.0" 417 | }, 418 | "engines": { 419 | "node": ">=4.0" 420 | } 421 | }, 422 | "node_modules/estraverse": { 423 | "version": "5.3.0", 424 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 425 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 426 | "dev": true, 427 | "engines": { 428 | "node": ">=4.0" 429 | } 430 | }, 431 | "node_modules/esutils": { 432 | "version": "2.0.3", 433 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 434 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 435 | "dev": true, 436 | "engines": { 437 | "node": ">=0.10.0" 438 | } 439 | }, 440 | "node_modules/ev-emitter": { 441 | "version": "2.1.2", 442 | "resolved": "https://registry.npmjs.org/ev-emitter/-/ev-emitter-2.1.2.tgz", 443 | "integrity": "sha512-jQ5Ql18hdCQ4qS+RCrbLfz1n+Pags27q5TwMKvZyhp5hh2UULUYZUy1keqj6k6SYsdqIYjnmz7xyyEY0V67B8Q==", 444 | "peer": true 445 | }, 446 | "node_modules/fast-deep-equal": { 447 | "version": "3.1.3", 448 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 449 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 450 | "dev": true 451 | }, 452 | "node_modules/fast-json-stable-stringify": { 453 | "version": "2.1.0", 454 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 455 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 456 | "dev": true 457 | }, 458 | "node_modules/fast-levenshtein": { 459 | "version": "2.0.6", 460 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 461 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 462 | "dev": true 463 | }, 464 | "node_modules/file-entry-cache": { 465 | "version": "6.0.1", 466 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", 467 | "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", 468 | "dev": true, 469 | "dependencies": { 470 | "flat-cache": "^3.0.4" 471 | }, 472 | "engines": { 473 | "node": "^10.12.0 || >=12.0.0" 474 | } 475 | }, 476 | "node_modules/fizzy-ui-utils": { 477 | "version": "3.0.0", 478 | "resolved": "https://registry.npmjs.org/fizzy-ui-utils/-/fizzy-ui-utils-3.0.0.tgz", 479 | "integrity": "sha512-uJj38QFQiJ/KCio5tiZhwAjIbTXSIgzBCKdKVbaYfLS053F6z23Nb0o1ZoO9gnxOQWN7BCc35jsvrCtAq3gY9g==" 480 | }, 481 | "node_modules/flat-cache": { 482 | "version": "3.0.4", 483 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", 484 | "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", 485 | "dev": true, 486 | "dependencies": { 487 | "flatted": "^3.1.0", 488 | "rimraf": "^3.0.2" 489 | }, 490 | "engines": { 491 | "node": "^10.12.0 || >=12.0.0" 492 | } 493 | }, 494 | "node_modules/flatted": { 495 | "version": "3.2.5", 496 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", 497 | "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", 498 | "dev": true 499 | }, 500 | "node_modules/flickity": { 501 | "version": "3.0.0", 502 | "resolved": "https://registry.npmjs.org/flickity/-/flickity-3.0.0.tgz", 503 | "integrity": "sha512-Xw4znhglA2LVSmka0yKmzb4+fLwXm13TuKmdG1HbUoZZL95J1ZMr4hAA3w69s+Z6q/c6CyBDM25JVwMqgF3rOg==", 504 | "peer": true, 505 | "dependencies": { 506 | "ev-emitter": "^2.1.2", 507 | "fizzy-ui-utils": "^3.0.0", 508 | "get-size": "^3.0.0", 509 | "imagesloaded": "^5.0.0", 510 | "unidragger": "^3.0.0" 511 | } 512 | }, 513 | "node_modules/fs.realpath": { 514 | "version": "1.0.0", 515 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 516 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 517 | "dev": true 518 | }, 519 | "node_modules/functional-red-black-tree": { 520 | "version": "1.0.1", 521 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", 522 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", 523 | "dev": true 524 | }, 525 | "node_modules/get-size": { 526 | "version": "3.0.0", 527 | "resolved": "https://registry.npmjs.org/get-size/-/get-size-3.0.0.tgz", 528 | "integrity": "sha512-Y8aiXLq4leR7807UY0yuKEwif5s3kbVp1nTv+i4jBeoUzByTLKkLWu/HorS6/pB+7gsB0o7OTogC8AoOOeT0Hw==", 529 | "peer": true 530 | }, 531 | "node_modules/glob": { 532 | "version": "7.2.0", 533 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", 534 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", 535 | "dev": true, 536 | "dependencies": { 537 | "fs.realpath": "^1.0.0", 538 | "inflight": "^1.0.4", 539 | "inherits": "2", 540 | "minimatch": "^3.0.4", 541 | "once": "^1.3.0", 542 | "path-is-absolute": "^1.0.0" 543 | }, 544 | "engines": { 545 | "node": "*" 546 | }, 547 | "funding": { 548 | "url": "https://github.com/sponsors/isaacs" 549 | } 550 | }, 551 | "node_modules/glob-parent": { 552 | "version": "6.0.2", 553 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 554 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 555 | "dev": true, 556 | "dependencies": { 557 | "is-glob": "^4.0.3" 558 | }, 559 | "engines": { 560 | "node": ">=10.13.0" 561 | } 562 | }, 563 | "node_modules/globals": { 564 | "version": "13.12.1", 565 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", 566 | "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", 567 | "dev": true, 568 | "dependencies": { 569 | "type-fest": "^0.20.2" 570 | }, 571 | "engines": { 572 | "node": ">=8" 573 | }, 574 | "funding": { 575 | "url": "https://github.com/sponsors/sindresorhus" 576 | } 577 | }, 578 | "node_modules/globalyzer": { 579 | "version": "0.1.0", 580 | "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", 581 | "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", 582 | "dev": true 583 | }, 584 | "node_modules/globrex": { 585 | "version": "0.1.2", 586 | "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", 587 | "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", 588 | "dev": true 589 | }, 590 | "node_modules/has-flag": { 591 | "version": "4.0.0", 592 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 593 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 594 | "dev": true, 595 | "engines": { 596 | "node": ">=8" 597 | } 598 | }, 599 | "node_modules/ignore": { 600 | "version": "5.2.0", 601 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", 602 | "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", 603 | "dev": true, 604 | "engines": { 605 | "node": ">= 4" 606 | } 607 | }, 608 | "node_modules/imagesloaded": { 609 | "version": "5.0.0", 610 | "resolved": "https://registry.npmjs.org/imagesloaded/-/imagesloaded-5.0.0.tgz", 611 | "integrity": "sha512-/0JGSubc1MTCoDKVmonLHgbifBWHdyLkun+R/151E1c5n79hiSxcd7cB7mPXFgojYu8xnRZv7GYxzKoxW8BetQ==", 612 | "peer": true, 613 | "dependencies": { 614 | "ev-emitter": "^2.1.2" 615 | } 616 | }, 617 | "node_modules/import-fresh": { 618 | "version": "3.3.0", 619 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 620 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 621 | "dev": true, 622 | "dependencies": { 623 | "parent-module": "^1.0.0", 624 | "resolve-from": "^4.0.0" 625 | }, 626 | "engines": { 627 | "node": ">=6" 628 | }, 629 | "funding": { 630 | "url": "https://github.com/sponsors/sindresorhus" 631 | } 632 | }, 633 | "node_modules/imurmurhash": { 634 | "version": "0.1.4", 635 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 636 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 637 | "dev": true, 638 | "engines": { 639 | "node": ">=0.8.19" 640 | } 641 | }, 642 | "node_modules/inflight": { 643 | "version": "1.0.6", 644 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 645 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 646 | "dev": true, 647 | "dependencies": { 648 | "once": "^1.3.0", 649 | "wrappy": "1" 650 | } 651 | }, 652 | "node_modules/inherits": { 653 | "version": "2.0.4", 654 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 655 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 656 | "dev": true 657 | }, 658 | "node_modules/is-extglob": { 659 | "version": "2.1.1", 660 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 661 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 662 | "dev": true, 663 | "engines": { 664 | "node": ">=0.10.0" 665 | } 666 | }, 667 | "node_modules/is-glob": { 668 | "version": "4.0.3", 669 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 670 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 671 | "dev": true, 672 | "dependencies": { 673 | "is-extglob": "^2.1.1" 674 | }, 675 | "engines": { 676 | "node": ">=0.10.0" 677 | } 678 | }, 679 | "node_modules/isexe": { 680 | "version": "2.0.0", 681 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 682 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 683 | "dev": true 684 | }, 685 | "node_modules/js-yaml": { 686 | "version": "4.1.0", 687 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 688 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 689 | "dev": true, 690 | "dependencies": { 691 | "argparse": "^2.0.1" 692 | }, 693 | "bin": { 694 | "js-yaml": "bin/js-yaml.js" 695 | } 696 | }, 697 | "node_modules/json-schema-traverse": { 698 | "version": "0.4.1", 699 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 700 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 701 | "dev": true 702 | }, 703 | "node_modules/json-stable-stringify-without-jsonify": { 704 | "version": "1.0.1", 705 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 706 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", 707 | "dev": true 708 | }, 709 | "node_modules/levn": { 710 | "version": "0.4.1", 711 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 712 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 713 | "dev": true, 714 | "dependencies": { 715 | "prelude-ls": "^1.2.1", 716 | "type-check": "~0.4.0" 717 | }, 718 | "engines": { 719 | "node": ">= 0.8.0" 720 | } 721 | }, 722 | "node_modules/lodash.merge": { 723 | "version": "4.6.2", 724 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 725 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 726 | "dev": true 727 | }, 728 | "node_modules/minimatch": { 729 | "version": "3.1.2", 730 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 731 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 732 | "dev": true, 733 | "dependencies": { 734 | "brace-expansion": "^1.1.7" 735 | }, 736 | "engines": { 737 | "node": "*" 738 | } 739 | }, 740 | "node_modules/ms": { 741 | "version": "2.1.2", 742 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 743 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 744 | "dev": true 745 | }, 746 | "node_modules/natural-compare": { 747 | "version": "1.4.0", 748 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 749 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", 750 | "dev": true 751 | }, 752 | "node_modules/node-watch": { 753 | "version": "0.7.3", 754 | "resolved": "https://registry.npmjs.org/node-watch/-/node-watch-0.7.3.tgz", 755 | "integrity": "sha512-3l4E8uMPY1HdMMryPRUAl+oIHtXtyiTlIiESNSVSNxcPfzAFzeTbXFQkZfAwBbo0B1qMSG8nUABx+Gd+YrbKrQ==", 756 | "dev": true, 757 | "engines": { 758 | "node": ">=6" 759 | } 760 | }, 761 | "node_modules/once": { 762 | "version": "1.4.0", 763 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 764 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 765 | "dev": true, 766 | "dependencies": { 767 | "wrappy": "1" 768 | } 769 | }, 770 | "node_modules/optionator": { 771 | "version": "0.9.1", 772 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", 773 | "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", 774 | "dev": true, 775 | "dependencies": { 776 | "deep-is": "^0.1.3", 777 | "fast-levenshtein": "^2.0.6", 778 | "levn": "^0.4.1", 779 | "prelude-ls": "^1.2.1", 780 | "type-check": "^0.4.0", 781 | "word-wrap": "^1.2.3" 782 | }, 783 | "engines": { 784 | "node": ">= 0.8.0" 785 | } 786 | }, 787 | "node_modules/parent-module": { 788 | "version": "1.0.1", 789 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 790 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 791 | "dev": true, 792 | "dependencies": { 793 | "callsites": "^3.0.0" 794 | }, 795 | "engines": { 796 | "node": ">=6" 797 | } 798 | }, 799 | "node_modules/path-is-absolute": { 800 | "version": "1.0.1", 801 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 802 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 803 | "dev": true, 804 | "engines": { 805 | "node": ">=0.10.0" 806 | } 807 | }, 808 | "node_modules/path-key": { 809 | "version": "3.1.1", 810 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 811 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 812 | "dev": true, 813 | "engines": { 814 | "node": ">=8" 815 | } 816 | }, 817 | "node_modules/prelude-ls": { 818 | "version": "1.2.1", 819 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 820 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 821 | "dev": true, 822 | "engines": { 823 | "node": ">= 0.8.0" 824 | } 825 | }, 826 | "node_modules/punycode": { 827 | "version": "2.1.1", 828 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 829 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 830 | "dev": true, 831 | "engines": { 832 | "node": ">=6" 833 | } 834 | }, 835 | "node_modules/qunit": { 836 | "version": "2.18.0", 837 | "resolved": "https://registry.npmjs.org/qunit/-/qunit-2.18.0.tgz", 838 | "integrity": "sha512-Xw/zUm5t1JY8SNErki/qtw4fCuaaOZL+bPloZU+0kto+fO8j1JV9MQWqXO4kATfhEyJohlsKZpfg1HF7GOkpXw==", 839 | "dev": true, 840 | "dependencies": { 841 | "commander": "7.2.0", 842 | "node-watch": "0.7.3", 843 | "tiny-glob": "0.2.9" 844 | }, 845 | "bin": { 846 | "qunit": "bin/qunit.js" 847 | }, 848 | "engines": { 849 | "node": ">=10" 850 | } 851 | }, 852 | "node_modules/regexpp": { 853 | "version": "3.2.0", 854 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", 855 | "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", 856 | "dev": true, 857 | "engines": { 858 | "node": ">=8" 859 | }, 860 | "funding": { 861 | "url": "https://github.com/sponsors/mysticatea" 862 | } 863 | }, 864 | "node_modules/resolve-from": { 865 | "version": "4.0.0", 866 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 867 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 868 | "dev": true, 869 | "engines": { 870 | "node": ">=4" 871 | } 872 | }, 873 | "node_modules/rimraf": { 874 | "version": "3.0.2", 875 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 876 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 877 | "dev": true, 878 | "dependencies": { 879 | "glob": "^7.1.3" 880 | }, 881 | "bin": { 882 | "rimraf": "bin.js" 883 | }, 884 | "funding": { 885 | "url": "https://github.com/sponsors/isaacs" 886 | } 887 | }, 888 | "node_modules/shebang-command": { 889 | "version": "2.0.0", 890 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 891 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 892 | "dev": true, 893 | "dependencies": { 894 | "shebang-regex": "^3.0.0" 895 | }, 896 | "engines": { 897 | "node": ">=8" 898 | } 899 | }, 900 | "node_modules/shebang-regex": { 901 | "version": "3.0.0", 902 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 903 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 904 | "dev": true, 905 | "engines": { 906 | "node": ">=8" 907 | } 908 | }, 909 | "node_modules/strip-ansi": { 910 | "version": "6.0.1", 911 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 912 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 913 | "dev": true, 914 | "dependencies": { 915 | "ansi-regex": "^5.0.1" 916 | }, 917 | "engines": { 918 | "node": ">=8" 919 | } 920 | }, 921 | "node_modules/strip-json-comments": { 922 | "version": "3.1.1", 923 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 924 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 925 | "dev": true, 926 | "engines": { 927 | "node": ">=8" 928 | }, 929 | "funding": { 930 | "url": "https://github.com/sponsors/sindresorhus" 931 | } 932 | }, 933 | "node_modules/supports-color": { 934 | "version": "7.2.0", 935 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 936 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 937 | "dev": true, 938 | "dependencies": { 939 | "has-flag": "^4.0.0" 940 | }, 941 | "engines": { 942 | "node": ">=8" 943 | } 944 | }, 945 | "node_modules/text-table": { 946 | "version": "0.2.0", 947 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 948 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", 949 | "dev": true 950 | }, 951 | "node_modules/tiny-glob": { 952 | "version": "0.2.9", 953 | "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", 954 | "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", 955 | "dev": true, 956 | "dependencies": { 957 | "globalyzer": "0.1.0", 958 | "globrex": "^0.1.2" 959 | } 960 | }, 961 | "node_modules/type-check": { 962 | "version": "0.4.0", 963 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 964 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 965 | "dev": true, 966 | "dependencies": { 967 | "prelude-ls": "^1.2.1" 968 | }, 969 | "engines": { 970 | "node": ">= 0.8.0" 971 | } 972 | }, 973 | "node_modules/type-fest": { 974 | "version": "0.20.2", 975 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", 976 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", 977 | "dev": true, 978 | "engines": { 979 | "node": ">=10" 980 | }, 981 | "funding": { 982 | "url": "https://github.com/sponsors/sindresorhus" 983 | } 984 | }, 985 | "node_modules/unidragger": { 986 | "version": "3.0.1", 987 | "resolved": "https://registry.npmjs.org/unidragger/-/unidragger-3.0.1.tgz", 988 | "integrity": "sha512-RngbGSwBFmqGBWjkaH+yB677uzR95blSQyxq6hYbrQCejH3Mx1nm8DVOuh3M9k2fQyTstWUG5qlgCnNqV/9jVw==", 989 | "peer": true, 990 | "dependencies": { 991 | "ev-emitter": "^2.0.0" 992 | } 993 | }, 994 | "node_modules/uri-js": { 995 | "version": "4.4.1", 996 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 997 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 998 | "dev": true, 999 | "dependencies": { 1000 | "punycode": "^2.1.0" 1001 | } 1002 | }, 1003 | "node_modules/v8-compile-cache": { 1004 | "version": "2.3.0", 1005 | "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", 1006 | "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", 1007 | "dev": true 1008 | }, 1009 | "node_modules/which": { 1010 | "version": "2.0.2", 1011 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 1012 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 1013 | "dev": true, 1014 | "dependencies": { 1015 | "isexe": "^2.0.0" 1016 | }, 1017 | "bin": { 1018 | "node-which": "bin/node-which" 1019 | }, 1020 | "engines": { 1021 | "node": ">= 8" 1022 | } 1023 | }, 1024 | "node_modules/word-wrap": { 1025 | "version": "1.2.3", 1026 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", 1027 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", 1028 | "dev": true, 1029 | "engines": { 1030 | "node": ">=0.10.0" 1031 | } 1032 | }, 1033 | "node_modules/wrappy": { 1034 | "version": "1.0.2", 1035 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1036 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 1037 | "dev": true 1038 | } 1039 | }, 1040 | "dependencies": { 1041 | "@eslint/eslintrc": { 1042 | "version": "1.2.0", 1043 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.0.tgz", 1044 | "integrity": "sha512-igm9SjJHNEJRiUnecP/1R5T3wKLEJ7pL6e2P+GUSfCd0dGjPYYZve08uzw8L2J8foVHFz+NGu12JxRcU2gGo6w==", 1045 | "dev": true, 1046 | "requires": { 1047 | "ajv": "^6.12.4", 1048 | "debug": "^4.3.2", 1049 | "espree": "^9.3.1", 1050 | "globals": "^13.9.0", 1051 | "ignore": "^4.0.6", 1052 | "import-fresh": "^3.2.1", 1053 | "js-yaml": "^4.1.0", 1054 | "minimatch": "^3.0.4", 1055 | "strip-json-comments": "^3.1.1" 1056 | }, 1057 | "dependencies": { 1058 | "ignore": { 1059 | "version": "4.0.6", 1060 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", 1061 | "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", 1062 | "dev": true 1063 | } 1064 | } 1065 | }, 1066 | "@humanwhocodes/config-array": { 1067 | "version": "0.9.5", 1068 | "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", 1069 | "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", 1070 | "dev": true, 1071 | "requires": { 1072 | "@humanwhocodes/object-schema": "^1.2.1", 1073 | "debug": "^4.1.1", 1074 | "minimatch": "^3.0.4" 1075 | } 1076 | }, 1077 | "@humanwhocodes/object-schema": { 1078 | "version": "1.2.1", 1079 | "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", 1080 | "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", 1081 | "dev": true 1082 | }, 1083 | "acorn": { 1084 | "version": "8.7.0", 1085 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", 1086 | "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", 1087 | "dev": true 1088 | }, 1089 | "acorn-jsx": { 1090 | "version": "5.3.2", 1091 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 1092 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 1093 | "dev": true, 1094 | "requires": {} 1095 | }, 1096 | "ajv": { 1097 | "version": "6.12.6", 1098 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 1099 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 1100 | "dev": true, 1101 | "requires": { 1102 | "fast-deep-equal": "^3.1.1", 1103 | "fast-json-stable-stringify": "^2.0.0", 1104 | "json-schema-traverse": "^0.4.1", 1105 | "uri-js": "^4.2.2" 1106 | } 1107 | }, 1108 | "ansi-regex": { 1109 | "version": "5.0.1", 1110 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1111 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 1112 | "dev": true 1113 | }, 1114 | "ansi-styles": { 1115 | "version": "4.3.0", 1116 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1117 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1118 | "dev": true, 1119 | "requires": { 1120 | "color-convert": "^2.0.1" 1121 | } 1122 | }, 1123 | "argparse": { 1124 | "version": "2.0.1", 1125 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 1126 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 1127 | "dev": true 1128 | }, 1129 | "balanced-match": { 1130 | "version": "1.0.2", 1131 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1132 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 1133 | "dev": true 1134 | }, 1135 | "brace-expansion": { 1136 | "version": "1.1.11", 1137 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1138 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1139 | "dev": true, 1140 | "requires": { 1141 | "balanced-match": "^1.0.0", 1142 | "concat-map": "0.0.1" 1143 | } 1144 | }, 1145 | "callsites": { 1146 | "version": "3.1.0", 1147 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 1148 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 1149 | "dev": true 1150 | }, 1151 | "chalk": { 1152 | "version": "4.1.2", 1153 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 1154 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 1155 | "dev": true, 1156 | "requires": { 1157 | "ansi-styles": "^4.1.0", 1158 | "supports-color": "^7.1.0" 1159 | } 1160 | }, 1161 | "color-convert": { 1162 | "version": "2.0.1", 1163 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1164 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1165 | "dev": true, 1166 | "requires": { 1167 | "color-name": "~1.1.4" 1168 | } 1169 | }, 1170 | "color-name": { 1171 | "version": "1.1.4", 1172 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1173 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1174 | "dev": true 1175 | }, 1176 | "commander": { 1177 | "version": "7.2.0", 1178 | "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", 1179 | "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", 1180 | "dev": true 1181 | }, 1182 | "concat-map": { 1183 | "version": "0.0.1", 1184 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1185 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 1186 | "dev": true 1187 | }, 1188 | "cross-spawn": { 1189 | "version": "7.0.3", 1190 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 1191 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 1192 | "dev": true, 1193 | "requires": { 1194 | "path-key": "^3.1.0", 1195 | "shebang-command": "^2.0.0", 1196 | "which": "^2.0.1" 1197 | } 1198 | }, 1199 | "debug": { 1200 | "version": "4.3.3", 1201 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", 1202 | "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", 1203 | "dev": true, 1204 | "requires": { 1205 | "ms": "2.1.2" 1206 | } 1207 | }, 1208 | "deep-is": { 1209 | "version": "0.1.4", 1210 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 1211 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 1212 | "dev": true 1213 | }, 1214 | "doctrine": { 1215 | "version": "3.0.0", 1216 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 1217 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 1218 | "dev": true, 1219 | "requires": { 1220 | "esutils": "^2.0.2" 1221 | } 1222 | }, 1223 | "escape-string-regexp": { 1224 | "version": "4.0.0", 1225 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 1226 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 1227 | "dev": true 1228 | }, 1229 | "eslint": { 1230 | "version": "8.10.0", 1231 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.10.0.tgz", 1232 | "integrity": "sha512-tcI1D9lfVec+R4LE1mNDnzoJ/f71Kl/9Cv4nG47jOueCMBrCCKYXr4AUVS7go6mWYGFD4+EoN6+eXSrEbRzXVw==", 1233 | "dev": true, 1234 | "requires": { 1235 | "@eslint/eslintrc": "^1.2.0", 1236 | "@humanwhocodes/config-array": "^0.9.2", 1237 | "ajv": "^6.10.0", 1238 | "chalk": "^4.0.0", 1239 | "cross-spawn": "^7.0.2", 1240 | "debug": "^4.3.2", 1241 | "doctrine": "^3.0.0", 1242 | "escape-string-regexp": "^4.0.0", 1243 | "eslint-scope": "^7.1.1", 1244 | "eslint-utils": "^3.0.0", 1245 | "eslint-visitor-keys": "^3.3.0", 1246 | "espree": "^9.3.1", 1247 | "esquery": "^1.4.0", 1248 | "esutils": "^2.0.2", 1249 | "fast-deep-equal": "^3.1.3", 1250 | "file-entry-cache": "^6.0.1", 1251 | "functional-red-black-tree": "^1.0.1", 1252 | "glob-parent": "^6.0.1", 1253 | "globals": "^13.6.0", 1254 | "ignore": "^5.2.0", 1255 | "import-fresh": "^3.0.0", 1256 | "imurmurhash": "^0.1.4", 1257 | "is-glob": "^4.0.0", 1258 | "js-yaml": "^4.1.0", 1259 | "json-stable-stringify-without-jsonify": "^1.0.1", 1260 | "levn": "^0.4.1", 1261 | "lodash.merge": "^4.6.2", 1262 | "minimatch": "^3.0.4", 1263 | "natural-compare": "^1.4.0", 1264 | "optionator": "^0.9.1", 1265 | "regexpp": "^3.2.0", 1266 | "strip-ansi": "^6.0.1", 1267 | "strip-json-comments": "^3.1.0", 1268 | "text-table": "^0.2.0", 1269 | "v8-compile-cache": "^2.0.3" 1270 | } 1271 | }, 1272 | "eslint-plugin-metafizzy": { 1273 | "version": "2.0.1", 1274 | "resolved": "https://registry.npmjs.org/eslint-plugin-metafizzy/-/eslint-plugin-metafizzy-2.0.1.tgz", 1275 | "integrity": "sha512-Xo0yL+y4WgEnn23sk6SSaizEzDmqdi2ZzWO5Bitzgzv/nY7G/qVPrffkLVZKE3RZzfLoFmlVwfctJXFojsU/5g==", 1276 | "dev": true, 1277 | "requires": {} 1278 | }, 1279 | "eslint-scope": { 1280 | "version": "7.1.1", 1281 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", 1282 | "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", 1283 | "dev": true, 1284 | "requires": { 1285 | "esrecurse": "^4.3.0", 1286 | "estraverse": "^5.2.0" 1287 | } 1288 | }, 1289 | "eslint-utils": { 1290 | "version": "3.0.0", 1291 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", 1292 | "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", 1293 | "dev": true, 1294 | "requires": { 1295 | "eslint-visitor-keys": "^2.0.0" 1296 | }, 1297 | "dependencies": { 1298 | "eslint-visitor-keys": { 1299 | "version": "2.1.0", 1300 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", 1301 | "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", 1302 | "dev": true 1303 | } 1304 | } 1305 | }, 1306 | "eslint-visitor-keys": { 1307 | "version": "3.3.0", 1308 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", 1309 | "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", 1310 | "dev": true 1311 | }, 1312 | "espree": { 1313 | "version": "9.3.1", 1314 | "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", 1315 | "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==", 1316 | "dev": true, 1317 | "requires": { 1318 | "acorn": "^8.7.0", 1319 | "acorn-jsx": "^5.3.1", 1320 | "eslint-visitor-keys": "^3.3.0" 1321 | } 1322 | }, 1323 | "esquery": { 1324 | "version": "1.4.0", 1325 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", 1326 | "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", 1327 | "dev": true, 1328 | "requires": { 1329 | "estraverse": "^5.1.0" 1330 | } 1331 | }, 1332 | "esrecurse": { 1333 | "version": "4.3.0", 1334 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 1335 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 1336 | "dev": true, 1337 | "requires": { 1338 | "estraverse": "^5.2.0" 1339 | } 1340 | }, 1341 | "estraverse": { 1342 | "version": "5.3.0", 1343 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 1344 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 1345 | "dev": true 1346 | }, 1347 | "esutils": { 1348 | "version": "2.0.3", 1349 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 1350 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 1351 | "dev": true 1352 | }, 1353 | "ev-emitter": { 1354 | "version": "2.1.2", 1355 | "resolved": "https://registry.npmjs.org/ev-emitter/-/ev-emitter-2.1.2.tgz", 1356 | "integrity": "sha512-jQ5Ql18hdCQ4qS+RCrbLfz1n+Pags27q5TwMKvZyhp5hh2UULUYZUy1keqj6k6SYsdqIYjnmz7xyyEY0V67B8Q==", 1357 | "peer": true 1358 | }, 1359 | "fast-deep-equal": { 1360 | "version": "3.1.3", 1361 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 1362 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 1363 | "dev": true 1364 | }, 1365 | "fast-json-stable-stringify": { 1366 | "version": "2.1.0", 1367 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 1368 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 1369 | "dev": true 1370 | }, 1371 | "fast-levenshtein": { 1372 | "version": "2.0.6", 1373 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 1374 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 1375 | "dev": true 1376 | }, 1377 | "file-entry-cache": { 1378 | "version": "6.0.1", 1379 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", 1380 | "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", 1381 | "dev": true, 1382 | "requires": { 1383 | "flat-cache": "^3.0.4" 1384 | } 1385 | }, 1386 | "fizzy-ui-utils": { 1387 | "version": "3.0.0", 1388 | "resolved": "https://registry.npmjs.org/fizzy-ui-utils/-/fizzy-ui-utils-3.0.0.tgz", 1389 | "integrity": "sha512-uJj38QFQiJ/KCio5tiZhwAjIbTXSIgzBCKdKVbaYfLS053F6z23Nb0o1ZoO9gnxOQWN7BCc35jsvrCtAq3gY9g==" 1390 | }, 1391 | "flat-cache": { 1392 | "version": "3.0.4", 1393 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", 1394 | "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", 1395 | "dev": true, 1396 | "requires": { 1397 | "flatted": "^3.1.0", 1398 | "rimraf": "^3.0.2" 1399 | } 1400 | }, 1401 | "flatted": { 1402 | "version": "3.2.5", 1403 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", 1404 | "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", 1405 | "dev": true 1406 | }, 1407 | "flickity": { 1408 | "version": "3.0.0", 1409 | "resolved": "https://registry.npmjs.org/flickity/-/flickity-3.0.0.tgz", 1410 | "integrity": "sha512-Xw4znhglA2LVSmka0yKmzb4+fLwXm13TuKmdG1HbUoZZL95J1ZMr4hAA3w69s+Z6q/c6CyBDM25JVwMqgF3rOg==", 1411 | "peer": true, 1412 | "requires": { 1413 | "ev-emitter": "^2.1.2", 1414 | "fizzy-ui-utils": "^3.0.0", 1415 | "get-size": "^3.0.0", 1416 | "imagesloaded": "^5.0.0", 1417 | "unidragger": "^3.0.0" 1418 | } 1419 | }, 1420 | "fs.realpath": { 1421 | "version": "1.0.0", 1422 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1423 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 1424 | "dev": true 1425 | }, 1426 | "functional-red-black-tree": { 1427 | "version": "1.0.1", 1428 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", 1429 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", 1430 | "dev": true 1431 | }, 1432 | "get-size": { 1433 | "version": "3.0.0", 1434 | "resolved": "https://registry.npmjs.org/get-size/-/get-size-3.0.0.tgz", 1435 | "integrity": "sha512-Y8aiXLq4leR7807UY0yuKEwif5s3kbVp1nTv+i4jBeoUzByTLKkLWu/HorS6/pB+7gsB0o7OTogC8AoOOeT0Hw==", 1436 | "peer": true 1437 | }, 1438 | "glob": { 1439 | "version": "7.2.0", 1440 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", 1441 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", 1442 | "dev": true, 1443 | "requires": { 1444 | "fs.realpath": "^1.0.0", 1445 | "inflight": "^1.0.4", 1446 | "inherits": "2", 1447 | "minimatch": "^3.0.4", 1448 | "once": "^1.3.0", 1449 | "path-is-absolute": "^1.0.0" 1450 | } 1451 | }, 1452 | "glob-parent": { 1453 | "version": "6.0.2", 1454 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 1455 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 1456 | "dev": true, 1457 | "requires": { 1458 | "is-glob": "^4.0.3" 1459 | } 1460 | }, 1461 | "globals": { 1462 | "version": "13.12.1", 1463 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", 1464 | "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", 1465 | "dev": true, 1466 | "requires": { 1467 | "type-fest": "^0.20.2" 1468 | } 1469 | }, 1470 | "globalyzer": { 1471 | "version": "0.1.0", 1472 | "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", 1473 | "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", 1474 | "dev": true 1475 | }, 1476 | "globrex": { 1477 | "version": "0.1.2", 1478 | "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", 1479 | "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", 1480 | "dev": true 1481 | }, 1482 | "has-flag": { 1483 | "version": "4.0.0", 1484 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1485 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1486 | "dev": true 1487 | }, 1488 | "ignore": { 1489 | "version": "5.2.0", 1490 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", 1491 | "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", 1492 | "dev": true 1493 | }, 1494 | "imagesloaded": { 1495 | "version": "5.0.0", 1496 | "resolved": "https://registry.npmjs.org/imagesloaded/-/imagesloaded-5.0.0.tgz", 1497 | "integrity": "sha512-/0JGSubc1MTCoDKVmonLHgbifBWHdyLkun+R/151E1c5n79hiSxcd7cB7mPXFgojYu8xnRZv7GYxzKoxW8BetQ==", 1498 | "peer": true, 1499 | "requires": { 1500 | "ev-emitter": "^2.1.2" 1501 | } 1502 | }, 1503 | "import-fresh": { 1504 | "version": "3.3.0", 1505 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 1506 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 1507 | "dev": true, 1508 | "requires": { 1509 | "parent-module": "^1.0.0", 1510 | "resolve-from": "^4.0.0" 1511 | } 1512 | }, 1513 | "imurmurhash": { 1514 | "version": "0.1.4", 1515 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 1516 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 1517 | "dev": true 1518 | }, 1519 | "inflight": { 1520 | "version": "1.0.6", 1521 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1522 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1523 | "dev": true, 1524 | "requires": { 1525 | "once": "^1.3.0", 1526 | "wrappy": "1" 1527 | } 1528 | }, 1529 | "inherits": { 1530 | "version": "2.0.4", 1531 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1532 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1533 | "dev": true 1534 | }, 1535 | "is-extglob": { 1536 | "version": "2.1.1", 1537 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1538 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 1539 | "dev": true 1540 | }, 1541 | "is-glob": { 1542 | "version": "4.0.3", 1543 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1544 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1545 | "dev": true, 1546 | "requires": { 1547 | "is-extglob": "^2.1.1" 1548 | } 1549 | }, 1550 | "isexe": { 1551 | "version": "2.0.0", 1552 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1553 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 1554 | "dev": true 1555 | }, 1556 | "js-yaml": { 1557 | "version": "4.1.0", 1558 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 1559 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 1560 | "dev": true, 1561 | "requires": { 1562 | "argparse": "^2.0.1" 1563 | } 1564 | }, 1565 | "json-schema-traverse": { 1566 | "version": "0.4.1", 1567 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 1568 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 1569 | "dev": true 1570 | }, 1571 | "json-stable-stringify-without-jsonify": { 1572 | "version": "1.0.1", 1573 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 1574 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", 1575 | "dev": true 1576 | }, 1577 | "levn": { 1578 | "version": "0.4.1", 1579 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 1580 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 1581 | "dev": true, 1582 | "requires": { 1583 | "prelude-ls": "^1.2.1", 1584 | "type-check": "~0.4.0" 1585 | } 1586 | }, 1587 | "lodash.merge": { 1588 | "version": "4.6.2", 1589 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 1590 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 1591 | "dev": true 1592 | }, 1593 | "minimatch": { 1594 | "version": "3.1.2", 1595 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1596 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1597 | "dev": true, 1598 | "requires": { 1599 | "brace-expansion": "^1.1.7" 1600 | } 1601 | }, 1602 | "ms": { 1603 | "version": "2.1.2", 1604 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1605 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1606 | "dev": true 1607 | }, 1608 | "natural-compare": { 1609 | "version": "1.4.0", 1610 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 1611 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", 1612 | "dev": true 1613 | }, 1614 | "node-watch": { 1615 | "version": "0.7.3", 1616 | "resolved": "https://registry.npmjs.org/node-watch/-/node-watch-0.7.3.tgz", 1617 | "integrity": "sha512-3l4E8uMPY1HdMMryPRUAl+oIHtXtyiTlIiESNSVSNxcPfzAFzeTbXFQkZfAwBbo0B1qMSG8nUABx+Gd+YrbKrQ==", 1618 | "dev": true 1619 | }, 1620 | "once": { 1621 | "version": "1.4.0", 1622 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1623 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1624 | "dev": true, 1625 | "requires": { 1626 | "wrappy": "1" 1627 | } 1628 | }, 1629 | "optionator": { 1630 | "version": "0.9.1", 1631 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", 1632 | "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", 1633 | "dev": true, 1634 | "requires": { 1635 | "deep-is": "^0.1.3", 1636 | "fast-levenshtein": "^2.0.6", 1637 | "levn": "^0.4.1", 1638 | "prelude-ls": "^1.2.1", 1639 | "type-check": "^0.4.0", 1640 | "word-wrap": "^1.2.3" 1641 | } 1642 | }, 1643 | "parent-module": { 1644 | "version": "1.0.1", 1645 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 1646 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 1647 | "dev": true, 1648 | "requires": { 1649 | "callsites": "^3.0.0" 1650 | } 1651 | }, 1652 | "path-is-absolute": { 1653 | "version": "1.0.1", 1654 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1655 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1656 | "dev": true 1657 | }, 1658 | "path-key": { 1659 | "version": "3.1.1", 1660 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 1661 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 1662 | "dev": true 1663 | }, 1664 | "prelude-ls": { 1665 | "version": "1.2.1", 1666 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 1667 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 1668 | "dev": true 1669 | }, 1670 | "punycode": { 1671 | "version": "2.1.1", 1672 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 1673 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 1674 | "dev": true 1675 | }, 1676 | "qunit": { 1677 | "version": "2.18.0", 1678 | "resolved": "https://registry.npmjs.org/qunit/-/qunit-2.18.0.tgz", 1679 | "integrity": "sha512-Xw/zUm5t1JY8SNErki/qtw4fCuaaOZL+bPloZU+0kto+fO8j1JV9MQWqXO4kATfhEyJohlsKZpfg1HF7GOkpXw==", 1680 | "dev": true, 1681 | "requires": { 1682 | "commander": "7.2.0", 1683 | "node-watch": "0.7.3", 1684 | "tiny-glob": "0.2.9" 1685 | } 1686 | }, 1687 | "regexpp": { 1688 | "version": "3.2.0", 1689 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", 1690 | "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", 1691 | "dev": true 1692 | }, 1693 | "resolve-from": { 1694 | "version": "4.0.0", 1695 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 1696 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 1697 | "dev": true 1698 | }, 1699 | "rimraf": { 1700 | "version": "3.0.2", 1701 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 1702 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 1703 | "dev": true, 1704 | "requires": { 1705 | "glob": "^7.1.3" 1706 | } 1707 | }, 1708 | "shebang-command": { 1709 | "version": "2.0.0", 1710 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 1711 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 1712 | "dev": true, 1713 | "requires": { 1714 | "shebang-regex": "^3.0.0" 1715 | } 1716 | }, 1717 | "shebang-regex": { 1718 | "version": "3.0.0", 1719 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 1720 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 1721 | "dev": true 1722 | }, 1723 | "strip-ansi": { 1724 | "version": "6.0.1", 1725 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1726 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1727 | "dev": true, 1728 | "requires": { 1729 | "ansi-regex": "^5.0.1" 1730 | } 1731 | }, 1732 | "strip-json-comments": { 1733 | "version": "3.1.1", 1734 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 1735 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 1736 | "dev": true 1737 | }, 1738 | "supports-color": { 1739 | "version": "7.2.0", 1740 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1741 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1742 | "dev": true, 1743 | "requires": { 1744 | "has-flag": "^4.0.0" 1745 | } 1746 | }, 1747 | "text-table": { 1748 | "version": "0.2.0", 1749 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 1750 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", 1751 | "dev": true 1752 | }, 1753 | "tiny-glob": { 1754 | "version": "0.2.9", 1755 | "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", 1756 | "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", 1757 | "dev": true, 1758 | "requires": { 1759 | "globalyzer": "0.1.0", 1760 | "globrex": "^0.1.2" 1761 | } 1762 | }, 1763 | "type-check": { 1764 | "version": "0.4.0", 1765 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 1766 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 1767 | "dev": true, 1768 | "requires": { 1769 | "prelude-ls": "^1.2.1" 1770 | } 1771 | }, 1772 | "type-fest": { 1773 | "version": "0.20.2", 1774 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", 1775 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", 1776 | "dev": true 1777 | }, 1778 | "unidragger": { 1779 | "version": "3.0.1", 1780 | "resolved": "https://registry.npmjs.org/unidragger/-/unidragger-3.0.1.tgz", 1781 | "integrity": "sha512-RngbGSwBFmqGBWjkaH+yB677uzR95blSQyxq6hYbrQCejH3Mx1nm8DVOuh3M9k2fQyTstWUG5qlgCnNqV/9jVw==", 1782 | "peer": true, 1783 | "requires": { 1784 | "ev-emitter": "^2.0.0" 1785 | } 1786 | }, 1787 | "uri-js": { 1788 | "version": "4.4.1", 1789 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 1790 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 1791 | "dev": true, 1792 | "requires": { 1793 | "punycode": "^2.1.0" 1794 | } 1795 | }, 1796 | "v8-compile-cache": { 1797 | "version": "2.3.0", 1798 | "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", 1799 | "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", 1800 | "dev": true 1801 | }, 1802 | "which": { 1803 | "version": "2.0.2", 1804 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 1805 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 1806 | "dev": true, 1807 | "requires": { 1808 | "isexe": "^2.0.0" 1809 | } 1810 | }, 1811 | "word-wrap": { 1812 | "version": "1.2.3", 1813 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", 1814 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", 1815 | "dev": true 1816 | }, 1817 | "wrappy": { 1818 | "version": "1.0.2", 1819 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1820 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 1821 | "dev": true 1822 | } 1823 | } 1824 | } 1825 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "flickity-as-nav-for", 3 | "version": "3.0.0", 4 | "description": "Enable asNavFor for Flickity", 5 | "main": "as-nav-for.js", 6 | "dependencies": { 7 | "fizzy-ui-utils": "^3.0.0" 8 | }, 9 | "peerDependencies": { 10 | "flickity": "^3.0.0" 11 | }, 12 | "devDependencies": { 13 | "eslint": "^8.10.0", 14 | "eslint-plugin-metafizzy": "^2.0.1", 15 | "qunit": "^2.18.0" 16 | }, 17 | "scripts": { 18 | "test": "npm run lint", 19 | "lint": "npx eslint ." 20 | }, 21 | "repository": { 22 | "type": "git", 23 | "url": "git://github.com/desandro/flickity-as-nav-for.git" 24 | }, 25 | "keywords": [ 26 | "flickity", 27 | "browser", 28 | "DOM" 29 | ], 30 | "author": "David DeSandro", 31 | "license": "MIT", 32 | "bugs": { 33 | "url": "https://github.com/desandro/flickity-as-nav-for/issues" 34 | }, 35 | "homepage": "https://github.com/desandro/flickity-as-nav-for", 36 | "directories": { 37 | "test": "test" 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /sandbox/as-nav-for.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | asNavFor 8 | 9 | 10 | 45 | 46 | 47 | 48 | 49 |

asNavFor

50 | 51 | 62 | 63 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | -------------------------------------------------------------------------------- /sandbox/group-cells.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | groupCells 8 | 9 | 10 | 42 | 43 | 44 | 45 | 46 |

groupCells

47 | 48 |

Nav grouped

49 | 50 | 62 | 63 | 75 | 76 | 77 |

main grouped

78 | 79 | 93 | 94 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | -------------------------------------------------------------------------------- /sandbox/wrap-around.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | asNavFor + wrapAround 8 | 9 | 10 | 49 | 50 | 51 | 52 | 53 | 0 54 | 55 | 66 | 67 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 109 | 110 | 111 | 112 | -------------------------------------------------------------------------------- /test/group-cells.js: -------------------------------------------------------------------------------- 1 | QUnit.test( 'groupCells', function( assert ) { 2 | 3 | let carousel = document.querySelector('.carousel--group-cells'); 4 | let flkty = new Flickity( carousel ); 5 | 6 | let navCarousel = document.querySelector('.carousel--group-cells-nav'); 7 | let navFlkty = new Flickity( navCarousel, { 8 | groupCells: true, 9 | asNavFor: '.carousel--group-cells', 10 | } ); 11 | 12 | let navCellElems = navCarousel.querySelectorAll('.cell'); 13 | 14 | // getting navCompanion is async 15 | let done = assert.async(); 16 | 17 | function checkSelectedClass( index, bool ) { 18 | let hasClass = navCellElems[ index ].classList.contains('is-nav-selected'); 19 | let message = `cell ${index} ${bool ? 'has' : 'does not have'} selected class`; 20 | assert.equal( hasClass, bool, message ); 21 | } 22 | 23 | setTimeout( function() { 24 | checkSelectedClass( 0, true ); 25 | // stay in group 26 | flkty.next(); 27 | assert.equal( navFlkty.selectedIndex, 0, 'still at 0' ); 28 | checkSelectedClass( 1, true ); 29 | checkSelectedClass( 0, false ); 30 | // new group 31 | flkty.select( 3 ); 32 | assert.equal( navFlkty.selectedIndex, 1, 'nav at 1' ); 33 | checkSelectedClass( 3, true ); 34 | checkSelectedClass( 1, false ); 35 | // click 36 | // fake trigger staticClick event 37 | navFlkty.staticClick({ 38 | target: navCellElems[7], 39 | }); 40 | assert.equal( flkty.selectedIndex, 7, 'staticClick selects carousel' ); 41 | assert.equal( navFlkty.selectedIndex, 2, 'staticClick selects nav' ); 42 | // deactivate 43 | navFlkty.deactivate(); 44 | assert.ok( !navCarousel.querySelector('.is-nav-selected'), 45 | 'no is-nav-selected after deactivate' ); 46 | // re-activate 47 | flkty.select( 4 ); 48 | navFlkty.activate(); 49 | assert.equal( navFlkty.selectedIndex, 1, 50 | 'nav carousel reactivated at correct selectedIndex' ); 51 | checkSelectedClass( 4, true ); 52 | 53 | done(); 54 | } ); 55 | 56 | } ); 57 | -------------------------------------------------------------------------------- /test/group-main.js: -------------------------------------------------------------------------------- 1 | QUnit.test( 'groupCells main', function( assert ) { 2 | 3 | let carousel = document.querySelector('.carousel--group-main'); 4 | let flkty = new Flickity( carousel, { 5 | groupCells: true, 6 | } ); 7 | 8 | let navCarousel = document.querySelector('.carousel--group-main-nav'); 9 | let navFlkty = new Flickity( navCarousel, { 10 | asNavFor: '.carousel--group-main', 11 | } ); 12 | 13 | let navCellElems = navCarousel.querySelectorAll('.cell'); 14 | 15 | // getting navCompanion is async 16 | let done = assert.async(); 17 | 18 | function checkSelectedClass( index, bool ) { 19 | let hasClass = navCellElems[ index ].classList.contains('is-nav-selected'); 20 | let message = `cell ${index} ${bool ? 'has' : 'does not have'} selected class`; 21 | assert.equal( hasClass, bool, message ); 22 | } 23 | 24 | function checkSelectedClasses( indexes, bool ) { 25 | indexes.forEach( function( index ) { 26 | checkSelectedClass( index, bool ); 27 | } ); 28 | } 29 | 30 | setTimeout( function() { 31 | assert.equal( navFlkty.selectedIndex, 1, 'init nav at 1' ); 32 | checkSelectedClasses( [ 0, 1, 2 ], true ); 33 | // new group 34 | flkty.next(); 35 | assert.equal( navFlkty.selectedIndex, 4, 'nav at 4, main at 3' ); 36 | checkSelectedClasses( [ 3, 4, 5 ], true ); 37 | checkSelectedClasses( [ 0, 1, 2 ], false ); 38 | // click 39 | // fake trigger staticClick event 40 | navFlkty.staticClick({ 41 | target: navCellElems[2], 42 | }); 43 | assert.equal( flkty.selectedIndex, 0, 'staticClick selects carousel' ); 44 | assert.equal( navFlkty.selectedIndex, 1, 'staticClick selects nav, center cell' ); 45 | // deactivate 46 | navFlkty.deactivate(); 47 | assert.ok( !navCarousel.querySelector('.is-nav-selected'), 48 | 'no is-nav-selected after deactivate' ); 49 | // re-activate 50 | flkty.select( 2 ); 51 | navFlkty.activate(); 52 | assert.equal( navFlkty.selectedIndex, 6, 53 | 'nav carousel reactivated at correct selectedIndex' ); 54 | checkSelectedClasses( [ 6, 7 ], true ); 55 | 56 | done(); 57 | } ); 58 | 59 | } ); 60 | -------------------------------------------------------------------------------- /test/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Flickity asNavFor tests 8 | 9 | 10 | 11 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 |
74 | 75 |

asNavFor

76 | 84 | 85 | 93 | 94 |

groupCells

95 | 96 | 106 | 107 | 117 | 118 |

groupCells main

119 | 120 | 130 | 131 | 141 | 142 | 143 | 144 | -------------------------------------------------------------------------------- /test/test-as-nav-for.js: -------------------------------------------------------------------------------- 1 | QUnit.test( 'asNavFor', function( assert ) { 2 | 3 | let carouselB = document.querySelector('#carousel-b'); 4 | let flktyB = new Flickity( carouselB, { 5 | asNavFor: '#carousel-a', 6 | } ); 7 | let bCellElements = carouselB.querySelectorAll('.cell'); 8 | 9 | let flktyA = new Flickity('#carousel-a'); 10 | 11 | // getting navCompanion is async 12 | let done = assert.async(); 13 | 14 | function containsNavSelectedClass( index ) { 15 | return bCellElements[ index ].classList.contains('is-nav-selected'); 16 | } 17 | 18 | setTimeout( function() { 19 | assert.ok( containsNavSelectedClass( 0 ), 20 | 'first cell element has nav selected class' ); 21 | 22 | flktyA.next(); 23 | assert.equal( flktyB.selectedIndex, 1, 'A.next() syncs to B' ); 24 | assert.ok( containsNavSelectedClass( 1 ), '2nd cell element has nav selected class' ); 25 | assert.ok( !containsNavSelectedClass( 0 ), 26 | '1st cell element does not have nav selected class' ); 27 | flktyA.previous(); 28 | assert.equal( flktyB.selectedIndex, 0, 'A.previous() syncs to B' ); 29 | flktyA.select( 3 ); 30 | assert.equal( flktyB.selectedIndex, 3, 'A.select() syncs to B' ); 31 | assert.ok( containsNavSelectedClass( 3 ), 32 | 'fourth cell element has nav selected class' ); 33 | assert.ok( !containsNavSelectedClass( 0 ), 34 | '1st cell element does not have nav selected class' ); 35 | // click 36 | // fake trigger staticClick event 37 | flktyB.staticClick({ 38 | target: bCellElements[2], 39 | }); 40 | assert.equal( flktyA.selectedIndex, 2, 'B.staticClick selects A' ); 41 | assert.equal( flktyB.selectedIndex, 2, 'B.staticClick selects B' ); 42 | assert.ok( containsNavSelectedClass( 2 ), 43 | 'third cell element has nav selected class' ); 44 | assert.ok( !containsNavSelectedClass( 3 ), 45 | '4th cell element does not have nav selected class' ); 46 | 47 | flktyB.deactivate(); 48 | assert.ok( !carouselB.querySelector('.is-nav-selected'), 49 | 'no is-nav-selected after deactivate' ); 50 | 51 | flktyB.activate(); 52 | assert.equal( flktyB.selectedIndex, 2, 'B reactivated with selectedIndex' ); 53 | assert.ok( containsNavSelectedClass( 2 ), 54 | 'third cell element has nav selected class' ); 55 | 56 | done(); 57 | } ); 58 | 59 | } ); 60 | --------------------------------------------------------------------------------