├── .editorconfig ├── .eslintignore ├── .eslintrc ├── .github └── FUNDING.yml ├── .gitignore ├── .prettierrc ├── .travis.yml ├── README.md ├── example ├── README.md ├── package-lock.json ├── package.json ├── public │ ├── favicon.ico │ ├── index.html │ └── manifest.json └── src │ ├── 1200px-React-icon.svg.png │ ├── App.js │ ├── App.test.js │ ├── index.css │ ├── index.js │ └── react-full-page-scroller.gif ├── package-lock.json ├── package.json └── src ├── .eslintrc ├── Page.js ├── PageIndicator.js ├── PageIndicatorButton.js ├── PageNav.js ├── PageScroller.js ├── helper.js ├── index.js └── index.test.js /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | build/ 2 | dist/ 3 | node_modules/ 4 | .snapshots/ 5 | *.min.js -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "parser": "babel-eslint", 3 | "extends": [ 4 | "standard", 5 | "standard-react", 6 | "plugin:prettier/recommended", 7 | "prettier/standard", 8 | "prettier/react" 9 | ], 10 | "env": { 11 | "node": true 12 | }, 13 | "parserOptions": { 14 | "ecmaVersion": 2020, 15 | "ecmaFeatures": { 16 | "legacyDecorators": true, 17 | "jsx": true 18 | } 19 | }, 20 | "settings": { 21 | "react": { 22 | "version": "16" 23 | } 24 | }, 25 | "rules": { 26 | "space-before-function-paren": 0, 27 | "react/prop-types": 0, 28 | "react/jsx-handler-names": 0, 29 | "react/jsx-fragments": 0, 30 | "react/no-unused-prop-types": 0, 31 | "import/export": 0 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 13 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # See https://help.github.com/ignore-files/ for more about ignoring files. 3 | 4 | # dependencies 5 | node_modules 6 | 7 | # builds 8 | build 9 | dist 10 | .rpt2_cache 11 | 12 | # misc 13 | .DS_Store 14 | .env 15 | .env.local 16 | .env.development.local 17 | .env.test.local 18 | .env.production.local 19 | 20 | npm-debug.log* 21 | yarn-debug.log* 22 | yarn-error.log* 23 | 24 | #IDE 25 | #WebStorm 26 | .idea/ 27 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "jsxSingleQuote": true, 4 | "semi": false, 5 | "tabWidth": 2, 6 | "bracketSpacing": true, 7 | "jsxBracketSameLine": false, 8 | "arrowParens": "always", 9 | "trailingComma": "none" 10 | } 11 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - 12 4 | - 10 5 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # react-full-page-scroller 2 | 3 | > A react module for full page scroll 4 | 5 | [![NPM](https://img.shields.io/npm/v/react-full-page-scroller.svg)](https://www.npmjs.com/package/react-full-page-scroller) [![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com) 6 | 7 | ## Install 8 | 9 | ```bash 10 | npm install --save react-full-page-scroller 11 | ``` 12 | 13 | ## Demo 14 | 15 | ![](https://raw.githubusercontent.com/ibrahim-ih/react-full-page-scroller/master/example/src/react-full-page-scroller.gif) 16 | 17 | ## Usage 18 | 19 | ```jsx 20 | import React, { Component } from 'react' 21 | 22 | import MyComponent from 'react-full-page-scroller' 23 | import 'react-full-page-scroller/dist/index.css' 24 | 25 | class Example extends Component { 26 | render() { 27 | return ( 28 | 29 |
30 |

1

31 |
32 |
33 |

2

34 |
35 |
36 |

3

37 |
38 |
39 | ) 40 | } 41 | } 42 | ``` 43 | 44 | ### Props 45 | 46 | | Prop Name | Type | 47 | | -------------------- | ------ | 48 | | pageNav | Object | 49 | | indicatorStyle | object | 50 | | indicatorStyleActive | object | 51 | 52 | #### Page Nav Object 53 | 54 | You can customize every button in the nav page 55 | 56 | | Name | Type | Required | Description | 57 | | --------- | ------ | -------- | --------------------------------------- | 58 | | id | number | Yes | id for the object. | 59 | | title | string | Yes | title of the nav button. | 60 | | className | string | No | the className of the page nav button. | 61 | | style | object | No | A custom style for the page nav button. | 62 | 63 | ##### Exemple 64 | 65 | ```jsx 66 | import React, { Component } from 'react' 67 | 68 | import MyComponent from 'react-full-page-scroller' 69 | import 'react-full-page-scroller/dist/index.css' 70 | 71 | const PageNavExample { 72 | 73 | const navExample={[{ 74 | id: 1, 75 | title: 'title 1', 76 | className: 'page-nav-button', 77 | style: { width: '1rem' } 78 | }, 79 | { 80 | id: 2, 81 | title: 'title 2', 82 | className: 'page-nav-button', 83 | style: { width: '1rem' } 84 | }, 85 | { 86 | id: 3, 87 | title: 'title 3', 88 | className: 'page-nav-button', 89 | style: { width: '1rem' } 90 | } 91 | ]}; 92 | 93 | return ( 94 | 95 |
96 |

1

97 |
98 |
99 |

2

100 |
101 |
102 |

3

103 |
104 |
105 | ) 106 | } 107 | ``` 108 | 109 | #### Indicator Style 110 | 111 | You can add an indicator by adding the two props indicatorStyle and indicatorStyleActive 112 | 113 | | Name | Type | Required | Description | 114 | | -------------------- | ------ | -------- | -------------------------------------------------------------- | 115 | | indicatorStyle | object | Yes | the indicator default style is required to show the indicator. | 116 | | indicatorStyleActive | object | No | the style of the active indicator. | 117 | 118 | ##### Exemple 119 | 120 | ```jsx 121 | import React, { Component } from 'react' 122 | 123 | import MyComponent from 'react-full-page-scroller' 124 | import 'react-full-page-scroller/dist/index.css' 125 | 126 | const PageNavExample { 127 | 128 | const indicatorStyle = { 129 | height: '8px', 130 | width: '8px', 131 | margin: '10px', 132 | borderRadius: '4px', 133 | backgroundColor: 'white', 134 | transition: 'width 500ms ease' 135 | } 136 | const indicatorStyleActive= { width: '20px' } 137 | 138 | return ( 139 | 140 |
141 |

1

142 |
143 |
144 |

2

145 |
146 |
147 |

3

148 |
149 |
150 | ) 151 | } 152 | ``` 153 | 154 | ## License 155 | 156 | © [Ibrahim Haouari](https://github.com/Ibrahim-ih) 157 | -------------------------------------------------------------------------------- /example/README.md: -------------------------------------------------------------------------------- 1 | This example was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). 2 | 3 | It is linked to the react-full-page-scroller package in the parent directory for development purposes. 4 | 5 | You can run `npm install` and then `npm start` to test your package. 6 | -------------------------------------------------------------------------------- /example/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-full-page-scroller-example", 3 | "version": "0.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "react-full-page-scroller-example", 9 | "version": "0.0.0", 10 | "dependencies": { 11 | "react": "file:../node_modules/react", 12 | "react-dom": "file:../node_modules/react-dom", 13 | "react-full-page-scroller": "file:..", 14 | "react-scripts": "file:../node_modules/react-scripts", 15 | "react-syntax-highlighter": "^15.4.4" 16 | }, 17 | "devDependencies": { 18 | "@babel/plugin-syntax-object-rest-spread": "^7.8.3" 19 | } 20 | }, 21 | "..": { 22 | "version": "0.1.6", 23 | "license": "MIT", 24 | "devDependencies": { 25 | "babel-eslint": "^10.0.3", 26 | "cross-env": "^7.0.2", 27 | "eslint": "^6.8.0", 28 | "eslint-config-prettier": "^6.7.0", 29 | "eslint-config-standard": "^14.1.0", 30 | "eslint-config-standard-react": "^9.2.0", 31 | "eslint-plugin-import": "^2.18.2", 32 | "eslint-plugin-node": "^11.0.0", 33 | "eslint-plugin-prettier": "^3.1.1", 34 | "eslint-plugin-promise": "^4.2.1", 35 | "eslint-plugin-react": "^7.17.0", 36 | "eslint-plugin-standard": "^4.0.1", 37 | "gh-pages": "^2.2.0", 38 | "microbundle-crl": "^0.13.10", 39 | "npm-run-all": "^4.1.5", 40 | "prettier": "^2.0.4", 41 | "prop-types": "^15.7.2", 42 | "react": "^16.13.1", 43 | "react-dom": "^16.13.1", 44 | "react-scripts": "^3.4.1" 45 | }, 46 | "engines": { 47 | "node": ">=10" 48 | }, 49 | "peerDependencies": { 50 | "react": "^16.0.0" 51 | } 52 | }, 53 | "../node_modules/react": { 54 | "version": "16.14.0", 55 | "license": "MIT", 56 | "dependencies": { 57 | "loose-envify": "^1.1.0", 58 | "object-assign": "^4.1.1", 59 | "prop-types": "^15.6.2" 60 | }, 61 | "engines": { 62 | "node": ">=0.10.0" 63 | } 64 | }, 65 | "../node_modules/react-dom": { 66 | "version": "16.14.0", 67 | "license": "MIT", 68 | "dependencies": { 69 | "loose-envify": "^1.1.0", 70 | "object-assign": "^4.1.1", 71 | "prop-types": "^15.6.2", 72 | "scheduler": "^0.19.1" 73 | }, 74 | "peerDependencies": { 75 | "react": "^16.14.0" 76 | } 77 | }, 78 | "../node_modules/react-scripts": { 79 | "version": "3.4.4", 80 | "license": "MIT", 81 | "dependencies": { 82 | "@babel/core": "7.9.0", 83 | "@svgr/webpack": "4.3.3", 84 | "@typescript-eslint/eslint-plugin": "^2.10.0", 85 | "@typescript-eslint/parser": "^2.10.0", 86 | "babel-eslint": "10.1.0", 87 | "babel-jest": "^24.9.0", 88 | "babel-loader": "8.1.0", 89 | "babel-plugin-named-asset-import": "^0.3.6", 90 | "babel-preset-react-app": "^9.1.2", 91 | "camelcase": "^5.3.1", 92 | "case-sensitive-paths-webpack-plugin": "2.3.0", 93 | "css-loader": "3.4.2", 94 | "dotenv": "8.2.0", 95 | "dotenv-expand": "5.1.0", 96 | "eslint": "^6.6.0", 97 | "eslint-config-react-app": "^5.2.1", 98 | "eslint-loader": "3.0.3", 99 | "eslint-plugin-flowtype": "4.6.0", 100 | "eslint-plugin-import": "2.20.1", 101 | "eslint-plugin-jsx-a11y": "6.2.3", 102 | "eslint-plugin-react": "7.19.0", 103 | "eslint-plugin-react-hooks": "^1.6.1", 104 | "file-loader": "4.3.0", 105 | "fs-extra": "^8.1.0", 106 | "html-webpack-plugin": "4.0.0-beta.11", 107 | "identity-obj-proxy": "3.0.0", 108 | "jest": "24.9.0", 109 | "jest-environment-jsdom-fourteen": "1.0.1", 110 | "jest-resolve": "24.9.0", 111 | "jest-watch-typeahead": "0.4.2", 112 | "mini-css-extract-plugin": "0.9.0", 113 | "optimize-css-assets-webpack-plugin": "5.0.3", 114 | "pnp-webpack-plugin": "1.6.4", 115 | "postcss-flexbugs-fixes": "4.1.0", 116 | "postcss-loader": "3.0.0", 117 | "postcss-normalize": "8.0.1", 118 | "postcss-preset-env": "6.7.0", 119 | "postcss-safe-parser": "4.0.1", 120 | "react-app-polyfill": "^1.0.6", 121 | "react-dev-utils": "^10.2.1", 122 | "resolve": "1.15.0", 123 | "resolve-url-loader": "3.1.2", 124 | "sass-loader": "8.0.2", 125 | "semver": "6.3.0", 126 | "style-loader": "0.23.1", 127 | "terser-webpack-plugin": "2.3.8", 128 | "ts-pnp": "1.1.6", 129 | "url-loader": "2.3.0", 130 | "webpack": "4.42.0", 131 | "webpack-dev-server": "3.11.0", 132 | "webpack-manifest-plugin": "2.2.0", 133 | "workbox-webpack-plugin": "4.3.1" 134 | }, 135 | "bin": { 136 | "react-scripts": "bin/react-scripts.js" 137 | }, 138 | "engines": { 139 | "node": ">=8.10" 140 | }, 141 | "optionalDependencies": { 142 | "fsevents": "2.1.2" 143 | }, 144 | "peerDependencies": { 145 | "typescript": "^3.2.1" 146 | }, 147 | "peerDependenciesMeta": { 148 | "typescript": { 149 | "optional": true 150 | } 151 | } 152 | }, 153 | "node_modules/@babel/code-frame": { 154 | "version": "7.14.5", 155 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", 156 | "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", 157 | "dev": true, 158 | "peer": true, 159 | "dependencies": { 160 | "@babel/highlight": "^7.14.5" 161 | }, 162 | "engines": { 163 | "node": ">=6.9.0" 164 | } 165 | }, 166 | "node_modules/@babel/compat-data": { 167 | "version": "7.15.0", 168 | "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz", 169 | "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==", 170 | "dev": true, 171 | "peer": true, 172 | "engines": { 173 | "node": ">=6.9.0" 174 | } 175 | }, 176 | "node_modules/@babel/core": { 177 | "version": "7.15.5", 178 | "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.5.tgz", 179 | "integrity": "sha512-pYgXxiwAgQpgM1bNkZsDEq85f0ggXMA5L7c+o3tskGMh2BunCI9QUwB9Z4jpvXUOuMdyGKiGKQiRe11VS6Jzvg==", 180 | "dev": true, 181 | "peer": true, 182 | "dependencies": { 183 | "@babel/code-frame": "^7.14.5", 184 | "@babel/generator": "^7.15.4", 185 | "@babel/helper-compilation-targets": "^7.15.4", 186 | "@babel/helper-module-transforms": "^7.15.4", 187 | "@babel/helpers": "^7.15.4", 188 | "@babel/parser": "^7.15.5", 189 | "@babel/template": "^7.15.4", 190 | "@babel/traverse": "^7.15.4", 191 | "@babel/types": "^7.15.4", 192 | "convert-source-map": "^1.7.0", 193 | "debug": "^4.1.0", 194 | "gensync": "^1.0.0-beta.2", 195 | "json5": "^2.1.2", 196 | "semver": "^6.3.0", 197 | "source-map": "^0.5.0" 198 | }, 199 | "engines": { 200 | "node": ">=6.9.0" 201 | }, 202 | "funding": { 203 | "type": "opencollective", 204 | "url": "https://opencollective.com/babel" 205 | } 206 | }, 207 | "node_modules/@babel/generator": { 208 | "version": "7.15.4", 209 | "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.4.tgz", 210 | "integrity": "sha512-d3itta0tu+UayjEORPNz6e1T3FtvWlP5N4V5M+lhp/CxT4oAA7/NcScnpRyspUMLK6tu9MNHmQHxRykuN2R7hw==", 211 | "dev": true, 212 | "peer": true, 213 | "dependencies": { 214 | "@babel/types": "^7.15.4", 215 | "jsesc": "^2.5.1", 216 | "source-map": "^0.5.0" 217 | }, 218 | "engines": { 219 | "node": ">=6.9.0" 220 | } 221 | }, 222 | "node_modules/@babel/helper-compilation-targets": { 223 | "version": "7.15.4", 224 | "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz", 225 | "integrity": "sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ==", 226 | "dev": true, 227 | "peer": true, 228 | "dependencies": { 229 | "@babel/compat-data": "^7.15.0", 230 | "@babel/helper-validator-option": "^7.14.5", 231 | "browserslist": "^4.16.6", 232 | "semver": "^6.3.0" 233 | }, 234 | "engines": { 235 | "node": ">=6.9.0" 236 | }, 237 | "peerDependencies": { 238 | "@babel/core": "^7.0.0" 239 | } 240 | }, 241 | "node_modules/@babel/helper-function-name": { 242 | "version": "7.15.4", 243 | "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz", 244 | "integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==", 245 | "dev": true, 246 | "peer": true, 247 | "dependencies": { 248 | "@babel/helper-get-function-arity": "^7.15.4", 249 | "@babel/template": "^7.15.4", 250 | "@babel/types": "^7.15.4" 251 | }, 252 | "engines": { 253 | "node": ">=6.9.0" 254 | } 255 | }, 256 | "node_modules/@babel/helper-get-function-arity": { 257 | "version": "7.15.4", 258 | "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz", 259 | "integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==", 260 | "dev": true, 261 | "peer": true, 262 | "dependencies": { 263 | "@babel/types": "^7.15.4" 264 | }, 265 | "engines": { 266 | "node": ">=6.9.0" 267 | } 268 | }, 269 | "node_modules/@babel/helper-hoist-variables": { 270 | "version": "7.15.4", 271 | "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz", 272 | "integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==", 273 | "dev": true, 274 | "peer": true, 275 | "dependencies": { 276 | "@babel/types": "^7.15.4" 277 | }, 278 | "engines": { 279 | "node": ">=6.9.0" 280 | } 281 | }, 282 | "node_modules/@babel/helper-member-expression-to-functions": { 283 | "version": "7.15.4", 284 | "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz", 285 | "integrity": "sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA==", 286 | "dev": true, 287 | "peer": true, 288 | "dependencies": { 289 | "@babel/types": "^7.15.4" 290 | }, 291 | "engines": { 292 | "node": ">=6.9.0" 293 | } 294 | }, 295 | "node_modules/@babel/helper-module-imports": { 296 | "version": "7.15.4", 297 | "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz", 298 | "integrity": "sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA==", 299 | "dev": true, 300 | "peer": true, 301 | "dependencies": { 302 | "@babel/types": "^7.15.4" 303 | }, 304 | "engines": { 305 | "node": ">=6.9.0" 306 | } 307 | }, 308 | "node_modules/@babel/helper-module-transforms": { 309 | "version": "7.15.4", 310 | "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.4.tgz", 311 | "integrity": "sha512-9fHHSGE9zTC++KuXLZcB5FKgvlV83Ox+NLUmQTawovwlJ85+QMhk1CnVk406CQVj97LaWod6KVjl2Sfgw9Aktw==", 312 | "dev": true, 313 | "peer": true, 314 | "dependencies": { 315 | "@babel/helper-module-imports": "^7.15.4", 316 | "@babel/helper-replace-supers": "^7.15.4", 317 | "@babel/helper-simple-access": "^7.15.4", 318 | "@babel/helper-split-export-declaration": "^7.15.4", 319 | "@babel/helper-validator-identifier": "^7.14.9", 320 | "@babel/template": "^7.15.4", 321 | "@babel/traverse": "^7.15.4", 322 | "@babel/types": "^7.15.4" 323 | }, 324 | "engines": { 325 | "node": ">=6.9.0" 326 | } 327 | }, 328 | "node_modules/@babel/helper-optimise-call-expression": { 329 | "version": "7.15.4", 330 | "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz", 331 | "integrity": "sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw==", 332 | "dev": true, 333 | "peer": true, 334 | "dependencies": { 335 | "@babel/types": "^7.15.4" 336 | }, 337 | "engines": { 338 | "node": ">=6.9.0" 339 | } 340 | }, 341 | "node_modules/@babel/helper-plugin-utils": { 342 | "version": "7.14.5", 343 | "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", 344 | "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", 345 | "dev": true, 346 | "engines": { 347 | "node": ">=6.9.0" 348 | } 349 | }, 350 | "node_modules/@babel/helper-replace-supers": { 351 | "version": "7.15.4", 352 | "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz", 353 | "integrity": "sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw==", 354 | "dev": true, 355 | "peer": true, 356 | "dependencies": { 357 | "@babel/helper-member-expression-to-functions": "^7.15.4", 358 | "@babel/helper-optimise-call-expression": "^7.15.4", 359 | "@babel/traverse": "^7.15.4", 360 | "@babel/types": "^7.15.4" 361 | }, 362 | "engines": { 363 | "node": ">=6.9.0" 364 | } 365 | }, 366 | "node_modules/@babel/helper-simple-access": { 367 | "version": "7.15.4", 368 | "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz", 369 | "integrity": "sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg==", 370 | "dev": true, 371 | "peer": true, 372 | "dependencies": { 373 | "@babel/types": "^7.15.4" 374 | }, 375 | "engines": { 376 | "node": ">=6.9.0" 377 | } 378 | }, 379 | "node_modules/@babel/helper-split-export-declaration": { 380 | "version": "7.15.4", 381 | "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz", 382 | "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==", 383 | "dev": true, 384 | "peer": true, 385 | "dependencies": { 386 | "@babel/types": "^7.15.4" 387 | }, 388 | "engines": { 389 | "node": ">=6.9.0" 390 | } 391 | }, 392 | "node_modules/@babel/helper-validator-identifier": { 393 | "version": "7.14.9", 394 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", 395 | "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", 396 | "dev": true, 397 | "peer": true, 398 | "engines": { 399 | "node": ">=6.9.0" 400 | } 401 | }, 402 | "node_modules/@babel/helper-validator-option": { 403 | "version": "7.14.5", 404 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", 405 | "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", 406 | "dev": true, 407 | "peer": true, 408 | "engines": { 409 | "node": ">=6.9.0" 410 | } 411 | }, 412 | "node_modules/@babel/helpers": { 413 | "version": "7.15.4", 414 | "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.4.tgz", 415 | "integrity": "sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ==", 416 | "dev": true, 417 | "peer": true, 418 | "dependencies": { 419 | "@babel/template": "^7.15.4", 420 | "@babel/traverse": "^7.15.4", 421 | "@babel/types": "^7.15.4" 422 | }, 423 | "engines": { 424 | "node": ">=6.9.0" 425 | } 426 | }, 427 | "node_modules/@babel/highlight": { 428 | "version": "7.14.5", 429 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", 430 | "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", 431 | "dev": true, 432 | "peer": true, 433 | "dependencies": { 434 | "@babel/helper-validator-identifier": "^7.14.5", 435 | "chalk": "^2.0.0", 436 | "js-tokens": "^4.0.0" 437 | }, 438 | "engines": { 439 | "node": ">=6.9.0" 440 | } 441 | }, 442 | "node_modules/@babel/parser": { 443 | "version": "7.15.6", 444 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.6.tgz", 445 | "integrity": "sha512-S/TSCcsRuCkmpUuoWijua0Snt+f3ewU/8spLo+4AXJCZfT0bVCzLD5MuOKdrx0mlAptbKzn5AdgEIIKXxXkz9Q==", 446 | "dev": true, 447 | "peer": true, 448 | "bin": { 449 | "parser": "bin/babel-parser.js" 450 | }, 451 | "engines": { 452 | "node": ">=6.0.0" 453 | } 454 | }, 455 | "node_modules/@babel/plugin-syntax-object-rest-spread": { 456 | "version": "7.8.3", 457 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", 458 | "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", 459 | "dev": true, 460 | "dependencies": { 461 | "@babel/helper-plugin-utils": "^7.8.0" 462 | }, 463 | "peerDependencies": { 464 | "@babel/core": "^7.0.0-0" 465 | } 466 | }, 467 | "node_modules/@babel/runtime": { 468 | "version": "7.15.4", 469 | "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", 470 | "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", 471 | "dependencies": { 472 | "regenerator-runtime": "^0.13.4" 473 | }, 474 | "engines": { 475 | "node": ">=6.9.0" 476 | } 477 | }, 478 | "node_modules/@babel/template": { 479 | "version": "7.15.4", 480 | "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz", 481 | "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", 482 | "dev": true, 483 | "peer": true, 484 | "dependencies": { 485 | "@babel/code-frame": "^7.14.5", 486 | "@babel/parser": "^7.15.4", 487 | "@babel/types": "^7.15.4" 488 | }, 489 | "engines": { 490 | "node": ">=6.9.0" 491 | } 492 | }, 493 | "node_modules/@babel/traverse": { 494 | "version": "7.15.4", 495 | "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.4.tgz", 496 | "integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==", 497 | "dev": true, 498 | "peer": true, 499 | "dependencies": { 500 | "@babel/code-frame": "^7.14.5", 501 | "@babel/generator": "^7.15.4", 502 | "@babel/helper-function-name": "^7.15.4", 503 | "@babel/helper-hoist-variables": "^7.15.4", 504 | "@babel/helper-split-export-declaration": "^7.15.4", 505 | "@babel/parser": "^7.15.4", 506 | "@babel/types": "^7.15.4", 507 | "debug": "^4.1.0", 508 | "globals": "^11.1.0" 509 | }, 510 | "engines": { 511 | "node": ">=6.9.0" 512 | } 513 | }, 514 | "node_modules/@babel/types": { 515 | "version": "7.15.6", 516 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", 517 | "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", 518 | "dev": true, 519 | "peer": true, 520 | "dependencies": { 521 | "@babel/helper-validator-identifier": "^7.14.9", 522 | "to-fast-properties": "^2.0.0" 523 | }, 524 | "engines": { 525 | "node": ">=6.9.0" 526 | } 527 | }, 528 | "node_modules/@types/hast": { 529 | "version": "2.3.4", 530 | "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz", 531 | "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==", 532 | "dependencies": { 533 | "@types/unist": "*" 534 | } 535 | }, 536 | "node_modules/@types/unist": { 537 | "version": "2.0.6", 538 | "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", 539 | "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" 540 | }, 541 | "node_modules/ansi-styles": { 542 | "version": "3.2.1", 543 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 544 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 545 | "dev": true, 546 | "peer": true, 547 | "dependencies": { 548 | "color-convert": "^1.9.0" 549 | }, 550 | "engines": { 551 | "node": ">=4" 552 | } 553 | }, 554 | "node_modules/browserslist": { 555 | "version": "4.17.0", 556 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.0.tgz", 557 | "integrity": "sha512-g2BJ2a0nEYvEFQC208q8mVAhfNwpZ5Mu8BwgtCdZKO3qx98HChmeg448fPdUzld8aFmfLgVh7yymqV+q1lJZ5g==", 558 | "dev": true, 559 | "peer": true, 560 | "dependencies": { 561 | "caniuse-lite": "^1.0.30001254", 562 | "colorette": "^1.3.0", 563 | "electron-to-chromium": "^1.3.830", 564 | "escalade": "^3.1.1", 565 | "node-releases": "^1.1.75" 566 | }, 567 | "bin": { 568 | "browserslist": "cli.js" 569 | }, 570 | "engines": { 571 | "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" 572 | }, 573 | "funding": { 574 | "type": "opencollective", 575 | "url": "https://opencollective.com/browserslist" 576 | } 577 | }, 578 | "node_modules/caniuse-lite": { 579 | "version": "1.0.30001257", 580 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001257.tgz", 581 | "integrity": "sha512-JN49KplOgHSXpIsVSF+LUyhD8PUp6xPpAXeRrrcBh4KBeP7W864jHn6RvzJgDlrReyeVjMFJL3PLpPvKIxlIHA==", 582 | "dev": true, 583 | "peer": true, 584 | "funding": { 585 | "type": "opencollective", 586 | "url": "https://opencollective.com/browserslist" 587 | } 588 | }, 589 | "node_modules/chalk": { 590 | "version": "2.4.2", 591 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 592 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 593 | "dev": true, 594 | "peer": true, 595 | "dependencies": { 596 | "ansi-styles": "^3.2.1", 597 | "escape-string-regexp": "^1.0.5", 598 | "supports-color": "^5.3.0" 599 | }, 600 | "engines": { 601 | "node": ">=4" 602 | } 603 | }, 604 | "node_modules/character-entities": { 605 | "version": "1.2.4", 606 | "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", 607 | "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", 608 | "funding": { 609 | "type": "github", 610 | "url": "https://github.com/sponsors/wooorm" 611 | } 612 | }, 613 | "node_modules/character-entities-legacy": { 614 | "version": "1.1.4", 615 | "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", 616 | "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", 617 | "funding": { 618 | "type": "github", 619 | "url": "https://github.com/sponsors/wooorm" 620 | } 621 | }, 622 | "node_modules/character-reference-invalid": { 623 | "version": "1.1.4", 624 | "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", 625 | "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", 626 | "funding": { 627 | "type": "github", 628 | "url": "https://github.com/sponsors/wooorm" 629 | } 630 | }, 631 | "node_modules/color-convert": { 632 | "version": "1.9.3", 633 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 634 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 635 | "dev": true, 636 | "peer": true, 637 | "dependencies": { 638 | "color-name": "1.1.3" 639 | } 640 | }, 641 | "node_modules/color-name": { 642 | "version": "1.1.3", 643 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 644 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 645 | "dev": true, 646 | "peer": true 647 | }, 648 | "node_modules/colorette": { 649 | "version": "1.4.0", 650 | "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", 651 | "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", 652 | "dev": true, 653 | "peer": true 654 | }, 655 | "node_modules/comma-separated-tokens": { 656 | "version": "1.0.8", 657 | "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", 658 | "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", 659 | "funding": { 660 | "type": "github", 661 | "url": "https://github.com/sponsors/wooorm" 662 | } 663 | }, 664 | "node_modules/convert-source-map": { 665 | "version": "1.8.0", 666 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", 667 | "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", 668 | "dev": true, 669 | "peer": true, 670 | "dependencies": { 671 | "safe-buffer": "~5.1.1" 672 | } 673 | }, 674 | "node_modules/debug": { 675 | "version": "4.3.2", 676 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", 677 | "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", 678 | "dev": true, 679 | "peer": true, 680 | "dependencies": { 681 | "ms": "2.1.2" 682 | }, 683 | "engines": { 684 | "node": ">=6.0" 685 | }, 686 | "peerDependenciesMeta": { 687 | "supports-color": { 688 | "optional": true 689 | } 690 | } 691 | }, 692 | "node_modules/electron-to-chromium": { 693 | "version": "1.3.839", 694 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.839.tgz", 695 | "integrity": "sha512-0O7uPs9LJNjQ/U5mW78qW8gXv9H6Ba3DHZ5/yt8aBsvomOWDkV3MddT7enUYvLQEUVOURjWmgJJWVZ3K98tIwQ==", 696 | "dev": true, 697 | "peer": true 698 | }, 699 | "node_modules/escalade": { 700 | "version": "3.1.1", 701 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 702 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 703 | "dev": true, 704 | "peer": true, 705 | "engines": { 706 | "node": ">=6" 707 | } 708 | }, 709 | "node_modules/escape-string-regexp": { 710 | "version": "1.0.5", 711 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 712 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 713 | "dev": true, 714 | "peer": true, 715 | "engines": { 716 | "node": ">=0.8.0" 717 | } 718 | }, 719 | "node_modules/fault": { 720 | "version": "1.0.4", 721 | "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz", 722 | "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==", 723 | "dependencies": { 724 | "format": "^0.2.0" 725 | }, 726 | "funding": { 727 | "type": "github", 728 | "url": "https://github.com/sponsors/wooorm" 729 | } 730 | }, 731 | "node_modules/format": { 732 | "version": "0.2.2", 733 | "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", 734 | "integrity": "sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=", 735 | "engines": { 736 | "node": ">=0.4.x" 737 | } 738 | }, 739 | "node_modules/gensync": { 740 | "version": "1.0.0-beta.2", 741 | "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", 742 | "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", 743 | "dev": true, 744 | "peer": true, 745 | "engines": { 746 | "node": ">=6.9.0" 747 | } 748 | }, 749 | "node_modules/globals": { 750 | "version": "11.12.0", 751 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", 752 | "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", 753 | "dev": true, 754 | "peer": true, 755 | "engines": { 756 | "node": ">=4" 757 | } 758 | }, 759 | "node_modules/has-flag": { 760 | "version": "3.0.0", 761 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 762 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 763 | "dev": true, 764 | "peer": true, 765 | "engines": { 766 | "node": ">=4" 767 | } 768 | }, 769 | "node_modules/hast-util-parse-selector": { 770 | "version": "2.2.5", 771 | "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", 772 | "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==", 773 | "funding": { 774 | "type": "opencollective", 775 | "url": "https://opencollective.com/unified" 776 | } 777 | }, 778 | "node_modules/hastscript": { 779 | "version": "6.0.0", 780 | "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", 781 | "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", 782 | "dependencies": { 783 | "@types/hast": "^2.0.0", 784 | "comma-separated-tokens": "^1.0.0", 785 | "hast-util-parse-selector": "^2.0.0", 786 | "property-information": "^5.0.0", 787 | "space-separated-tokens": "^1.0.0" 788 | }, 789 | "funding": { 790 | "type": "opencollective", 791 | "url": "https://opencollective.com/unified" 792 | } 793 | }, 794 | "node_modules/highlight.js": { 795 | "version": "10.7.3", 796 | "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", 797 | "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", 798 | "engines": { 799 | "node": "*" 800 | } 801 | }, 802 | "node_modules/is-alphabetical": { 803 | "version": "1.0.4", 804 | "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", 805 | "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", 806 | "funding": { 807 | "type": "github", 808 | "url": "https://github.com/sponsors/wooorm" 809 | } 810 | }, 811 | "node_modules/is-alphanumerical": { 812 | "version": "1.0.4", 813 | "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", 814 | "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", 815 | "dependencies": { 816 | "is-alphabetical": "^1.0.0", 817 | "is-decimal": "^1.0.0" 818 | }, 819 | "funding": { 820 | "type": "github", 821 | "url": "https://github.com/sponsors/wooorm" 822 | } 823 | }, 824 | "node_modules/is-decimal": { 825 | "version": "1.0.4", 826 | "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", 827 | "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", 828 | "funding": { 829 | "type": "github", 830 | "url": "https://github.com/sponsors/wooorm" 831 | } 832 | }, 833 | "node_modules/is-hexadecimal": { 834 | "version": "1.0.4", 835 | "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", 836 | "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", 837 | "funding": { 838 | "type": "github", 839 | "url": "https://github.com/sponsors/wooorm" 840 | } 841 | }, 842 | "node_modules/js-tokens": { 843 | "version": "4.0.0", 844 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 845 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 846 | "dev": true, 847 | "peer": true 848 | }, 849 | "node_modules/jsesc": { 850 | "version": "2.5.2", 851 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", 852 | "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", 853 | "dev": true, 854 | "peer": true, 855 | "bin": { 856 | "jsesc": "bin/jsesc" 857 | }, 858 | "engines": { 859 | "node": ">=4" 860 | } 861 | }, 862 | "node_modules/json5": { 863 | "version": "2.2.0", 864 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", 865 | "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", 866 | "dev": true, 867 | "peer": true, 868 | "dependencies": { 869 | "minimist": "^1.2.5" 870 | }, 871 | "bin": { 872 | "json5": "lib/cli.js" 873 | }, 874 | "engines": { 875 | "node": ">=6" 876 | } 877 | }, 878 | "node_modules/lowlight": { 879 | "version": "1.20.0", 880 | "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.20.0.tgz", 881 | "integrity": "sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==", 882 | "dependencies": { 883 | "fault": "^1.0.0", 884 | "highlight.js": "~10.7.0" 885 | }, 886 | "funding": { 887 | "type": "github", 888 | "url": "https://github.com/sponsors/wooorm" 889 | } 890 | }, 891 | "node_modules/minimist": { 892 | "version": "1.2.5", 893 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 894 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", 895 | "dev": true, 896 | "peer": true 897 | }, 898 | "node_modules/ms": { 899 | "version": "2.1.2", 900 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 901 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 902 | "dev": true, 903 | "peer": true 904 | }, 905 | "node_modules/node-releases": { 906 | "version": "1.1.75", 907 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.75.tgz", 908 | "integrity": "sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw==", 909 | "dev": true, 910 | "peer": true 911 | }, 912 | "node_modules/parse-entities": { 913 | "version": "2.0.0", 914 | "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", 915 | "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", 916 | "dependencies": { 917 | "character-entities": "^1.0.0", 918 | "character-entities-legacy": "^1.0.0", 919 | "character-reference-invalid": "^1.0.0", 920 | "is-alphanumerical": "^1.0.0", 921 | "is-decimal": "^1.0.0", 922 | "is-hexadecimal": "^1.0.0" 923 | }, 924 | "funding": { 925 | "type": "github", 926 | "url": "https://github.com/sponsors/wooorm" 927 | } 928 | }, 929 | "node_modules/prismjs": { 930 | "version": "1.25.0", 931 | "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.25.0.tgz", 932 | "integrity": "sha512-WCjJHl1KEWbnkQom1+SzftbtXMKQoezOCYs5rECqMN+jP+apI7ftoflyqigqzopSO3hMhTEb0mFClA8lkolgEg==" 933 | }, 934 | "node_modules/property-information": { 935 | "version": "5.6.0", 936 | "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", 937 | "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", 938 | "dependencies": { 939 | "xtend": "^4.0.0" 940 | }, 941 | "funding": { 942 | "type": "github", 943 | "url": "https://github.com/sponsors/wooorm" 944 | } 945 | }, 946 | "node_modules/react": { 947 | "resolved": "../node_modules/react", 948 | "link": true 949 | }, 950 | "node_modules/react-dom": { 951 | "resolved": "../node_modules/react-dom", 952 | "link": true 953 | }, 954 | "node_modules/react-full-page-scroller": { 955 | "resolved": "..", 956 | "link": true 957 | }, 958 | "node_modules/react-scripts": { 959 | "resolved": "../node_modules/react-scripts", 960 | "link": true 961 | }, 962 | "node_modules/react-syntax-highlighter": { 963 | "version": "15.4.4", 964 | "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-15.4.4.tgz", 965 | "integrity": "sha512-PsOFHNTzkb3OroXdoR897eKN5EZ6grht1iM+f1lJSq7/L0YVnkJaNVwC3wEUYPOAmeyl5xyer1DjL6MrumO6Zw==", 966 | "dependencies": { 967 | "@babel/runtime": "^7.3.1", 968 | "highlight.js": "^10.4.1", 969 | "lowlight": "^1.17.0", 970 | "prismjs": "^1.22.0", 971 | "refractor": "^3.2.0" 972 | }, 973 | "peerDependencies": { 974 | "react": ">= 0.14.0" 975 | } 976 | }, 977 | "node_modules/refractor": { 978 | "version": "3.4.0", 979 | "resolved": "https://registry.npmjs.org/refractor/-/refractor-3.4.0.tgz", 980 | "integrity": "sha512-dBeD02lC5eytm9Gld2Mx0cMcnR+zhSnsTfPpWqFaMgUMJfC9A6bcN3Br/NaXrnBJcuxnLFR90k1jrkaSyV8umg==", 981 | "dependencies": { 982 | "hastscript": "^6.0.0", 983 | "parse-entities": "^2.0.0", 984 | "prismjs": "~1.24.0" 985 | }, 986 | "funding": { 987 | "type": "github", 988 | "url": "https://github.com/sponsors/wooorm" 989 | } 990 | }, 991 | "node_modules/refractor/node_modules/prismjs": { 992 | "version": "1.24.1", 993 | "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.24.1.tgz", 994 | "integrity": "sha512-mNPsedLuk90RVJioIky8ANZEwYm5w9LcvCXrxHlwf4fNVSn8jEipMybMkWUyyF0JhnC+C4VcOVSBuHRKs1L5Ow==" 995 | }, 996 | "node_modules/regenerator-runtime": { 997 | "version": "0.13.9", 998 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", 999 | "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" 1000 | }, 1001 | "node_modules/safe-buffer": { 1002 | "version": "5.1.2", 1003 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1004 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 1005 | "dev": true, 1006 | "peer": true 1007 | }, 1008 | "node_modules/semver": { 1009 | "version": "6.3.0", 1010 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 1011 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 1012 | "dev": true, 1013 | "peer": true, 1014 | "bin": { 1015 | "semver": "bin/semver.js" 1016 | } 1017 | }, 1018 | "node_modules/source-map": { 1019 | "version": "0.5.7", 1020 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 1021 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", 1022 | "dev": true, 1023 | "peer": true, 1024 | "engines": { 1025 | "node": ">=0.10.0" 1026 | } 1027 | }, 1028 | "node_modules/space-separated-tokens": { 1029 | "version": "1.1.5", 1030 | "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", 1031 | "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", 1032 | "funding": { 1033 | "type": "github", 1034 | "url": "https://github.com/sponsors/wooorm" 1035 | } 1036 | }, 1037 | "node_modules/supports-color": { 1038 | "version": "5.5.0", 1039 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1040 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1041 | "dev": true, 1042 | "peer": true, 1043 | "dependencies": { 1044 | "has-flag": "^3.0.0" 1045 | }, 1046 | "engines": { 1047 | "node": ">=4" 1048 | } 1049 | }, 1050 | "node_modules/to-fast-properties": { 1051 | "version": "2.0.0", 1052 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", 1053 | "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", 1054 | "dev": true, 1055 | "peer": true, 1056 | "engines": { 1057 | "node": ">=4" 1058 | } 1059 | }, 1060 | "node_modules/xtend": { 1061 | "version": "4.0.2", 1062 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 1063 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", 1064 | "engines": { 1065 | "node": ">=0.4" 1066 | } 1067 | } 1068 | }, 1069 | "dependencies": { 1070 | "@babel/code-frame": { 1071 | "version": "7.14.5", 1072 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", 1073 | "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", 1074 | "dev": true, 1075 | "peer": true, 1076 | "requires": { 1077 | "@babel/highlight": "^7.14.5" 1078 | } 1079 | }, 1080 | "@babel/compat-data": { 1081 | "version": "7.15.0", 1082 | "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz", 1083 | "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==", 1084 | "dev": true, 1085 | "peer": true 1086 | }, 1087 | "@babel/core": { 1088 | "version": "7.15.5", 1089 | "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.5.tgz", 1090 | "integrity": "sha512-pYgXxiwAgQpgM1bNkZsDEq85f0ggXMA5L7c+o3tskGMh2BunCI9QUwB9Z4jpvXUOuMdyGKiGKQiRe11VS6Jzvg==", 1091 | "dev": true, 1092 | "peer": true, 1093 | "requires": { 1094 | "@babel/code-frame": "^7.14.5", 1095 | "@babel/generator": "^7.15.4", 1096 | "@babel/helper-compilation-targets": "^7.15.4", 1097 | "@babel/helper-module-transforms": "^7.15.4", 1098 | "@babel/helpers": "^7.15.4", 1099 | "@babel/parser": "^7.15.5", 1100 | "@babel/template": "^7.15.4", 1101 | "@babel/traverse": "^7.15.4", 1102 | "@babel/types": "^7.15.4", 1103 | "convert-source-map": "^1.7.0", 1104 | "debug": "^4.1.0", 1105 | "gensync": "^1.0.0-beta.2", 1106 | "json5": "^2.1.2", 1107 | "semver": "^6.3.0", 1108 | "source-map": "^0.5.0" 1109 | } 1110 | }, 1111 | "@babel/generator": { 1112 | "version": "7.15.4", 1113 | "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.4.tgz", 1114 | "integrity": "sha512-d3itta0tu+UayjEORPNz6e1T3FtvWlP5N4V5M+lhp/CxT4oAA7/NcScnpRyspUMLK6tu9MNHmQHxRykuN2R7hw==", 1115 | "dev": true, 1116 | "peer": true, 1117 | "requires": { 1118 | "@babel/types": "^7.15.4", 1119 | "jsesc": "^2.5.1", 1120 | "source-map": "^0.5.0" 1121 | } 1122 | }, 1123 | "@babel/helper-compilation-targets": { 1124 | "version": "7.15.4", 1125 | "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz", 1126 | "integrity": "sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ==", 1127 | "dev": true, 1128 | "peer": true, 1129 | "requires": { 1130 | "@babel/compat-data": "^7.15.0", 1131 | "@babel/helper-validator-option": "^7.14.5", 1132 | "browserslist": "^4.16.6", 1133 | "semver": "^6.3.0" 1134 | } 1135 | }, 1136 | "@babel/helper-function-name": { 1137 | "version": "7.15.4", 1138 | "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz", 1139 | "integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==", 1140 | "dev": true, 1141 | "peer": true, 1142 | "requires": { 1143 | "@babel/helper-get-function-arity": "^7.15.4", 1144 | "@babel/template": "^7.15.4", 1145 | "@babel/types": "^7.15.4" 1146 | } 1147 | }, 1148 | "@babel/helper-get-function-arity": { 1149 | "version": "7.15.4", 1150 | "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz", 1151 | "integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==", 1152 | "dev": true, 1153 | "peer": true, 1154 | "requires": { 1155 | "@babel/types": "^7.15.4" 1156 | } 1157 | }, 1158 | "@babel/helper-hoist-variables": { 1159 | "version": "7.15.4", 1160 | "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz", 1161 | "integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==", 1162 | "dev": true, 1163 | "peer": true, 1164 | "requires": { 1165 | "@babel/types": "^7.15.4" 1166 | } 1167 | }, 1168 | "@babel/helper-member-expression-to-functions": { 1169 | "version": "7.15.4", 1170 | "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz", 1171 | "integrity": "sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA==", 1172 | "dev": true, 1173 | "peer": true, 1174 | "requires": { 1175 | "@babel/types": "^7.15.4" 1176 | } 1177 | }, 1178 | "@babel/helper-module-imports": { 1179 | "version": "7.15.4", 1180 | "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz", 1181 | "integrity": "sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA==", 1182 | "dev": true, 1183 | "peer": true, 1184 | "requires": { 1185 | "@babel/types": "^7.15.4" 1186 | } 1187 | }, 1188 | "@babel/helper-module-transforms": { 1189 | "version": "7.15.4", 1190 | "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.4.tgz", 1191 | "integrity": "sha512-9fHHSGE9zTC++KuXLZcB5FKgvlV83Ox+NLUmQTawovwlJ85+QMhk1CnVk406CQVj97LaWod6KVjl2Sfgw9Aktw==", 1192 | "dev": true, 1193 | "peer": true, 1194 | "requires": { 1195 | "@babel/helper-module-imports": "^7.15.4", 1196 | "@babel/helper-replace-supers": "^7.15.4", 1197 | "@babel/helper-simple-access": "^7.15.4", 1198 | "@babel/helper-split-export-declaration": "^7.15.4", 1199 | "@babel/helper-validator-identifier": "^7.14.9", 1200 | "@babel/template": "^7.15.4", 1201 | "@babel/traverse": "^7.15.4", 1202 | "@babel/types": "^7.15.4" 1203 | } 1204 | }, 1205 | "@babel/helper-optimise-call-expression": { 1206 | "version": "7.15.4", 1207 | "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz", 1208 | "integrity": "sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw==", 1209 | "dev": true, 1210 | "peer": true, 1211 | "requires": { 1212 | "@babel/types": "^7.15.4" 1213 | } 1214 | }, 1215 | "@babel/helper-plugin-utils": { 1216 | "version": "7.14.5", 1217 | "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", 1218 | "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", 1219 | "dev": true 1220 | }, 1221 | "@babel/helper-replace-supers": { 1222 | "version": "7.15.4", 1223 | "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz", 1224 | "integrity": "sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw==", 1225 | "dev": true, 1226 | "peer": true, 1227 | "requires": { 1228 | "@babel/helper-member-expression-to-functions": "^7.15.4", 1229 | "@babel/helper-optimise-call-expression": "^7.15.4", 1230 | "@babel/traverse": "^7.15.4", 1231 | "@babel/types": "^7.15.4" 1232 | } 1233 | }, 1234 | "@babel/helper-simple-access": { 1235 | "version": "7.15.4", 1236 | "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz", 1237 | "integrity": "sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg==", 1238 | "dev": true, 1239 | "peer": true, 1240 | "requires": { 1241 | "@babel/types": "^7.15.4" 1242 | } 1243 | }, 1244 | "@babel/helper-split-export-declaration": { 1245 | "version": "7.15.4", 1246 | "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz", 1247 | "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==", 1248 | "dev": true, 1249 | "peer": true, 1250 | "requires": { 1251 | "@babel/types": "^7.15.4" 1252 | } 1253 | }, 1254 | "@babel/helper-validator-identifier": { 1255 | "version": "7.14.9", 1256 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", 1257 | "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", 1258 | "dev": true, 1259 | "peer": true 1260 | }, 1261 | "@babel/helper-validator-option": { 1262 | "version": "7.14.5", 1263 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", 1264 | "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", 1265 | "dev": true, 1266 | "peer": true 1267 | }, 1268 | "@babel/helpers": { 1269 | "version": "7.15.4", 1270 | "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.4.tgz", 1271 | "integrity": "sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ==", 1272 | "dev": true, 1273 | "peer": true, 1274 | "requires": { 1275 | "@babel/template": "^7.15.4", 1276 | "@babel/traverse": "^7.15.4", 1277 | "@babel/types": "^7.15.4" 1278 | } 1279 | }, 1280 | "@babel/highlight": { 1281 | "version": "7.14.5", 1282 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", 1283 | "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", 1284 | "dev": true, 1285 | "peer": true, 1286 | "requires": { 1287 | "@babel/helper-validator-identifier": "^7.14.5", 1288 | "chalk": "^2.0.0", 1289 | "js-tokens": "^4.0.0" 1290 | } 1291 | }, 1292 | "@babel/parser": { 1293 | "version": "7.15.6", 1294 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.6.tgz", 1295 | "integrity": "sha512-S/TSCcsRuCkmpUuoWijua0Snt+f3ewU/8spLo+4AXJCZfT0bVCzLD5MuOKdrx0mlAptbKzn5AdgEIIKXxXkz9Q==", 1296 | "dev": true, 1297 | "peer": true 1298 | }, 1299 | "@babel/plugin-syntax-object-rest-spread": { 1300 | "version": "7.8.3", 1301 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", 1302 | "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", 1303 | "dev": true, 1304 | "requires": { 1305 | "@babel/helper-plugin-utils": "^7.8.0" 1306 | } 1307 | }, 1308 | "@babel/runtime": { 1309 | "version": "7.15.4", 1310 | "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", 1311 | "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", 1312 | "requires": { 1313 | "regenerator-runtime": "^0.13.4" 1314 | } 1315 | }, 1316 | "@babel/template": { 1317 | "version": "7.15.4", 1318 | "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz", 1319 | "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", 1320 | "dev": true, 1321 | "peer": true, 1322 | "requires": { 1323 | "@babel/code-frame": "^7.14.5", 1324 | "@babel/parser": "^7.15.4", 1325 | "@babel/types": "^7.15.4" 1326 | } 1327 | }, 1328 | "@babel/traverse": { 1329 | "version": "7.15.4", 1330 | "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.4.tgz", 1331 | "integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==", 1332 | "dev": true, 1333 | "peer": true, 1334 | "requires": { 1335 | "@babel/code-frame": "^7.14.5", 1336 | "@babel/generator": "^7.15.4", 1337 | "@babel/helper-function-name": "^7.15.4", 1338 | "@babel/helper-hoist-variables": "^7.15.4", 1339 | "@babel/helper-split-export-declaration": "^7.15.4", 1340 | "@babel/parser": "^7.15.4", 1341 | "@babel/types": "^7.15.4", 1342 | "debug": "^4.1.0", 1343 | "globals": "^11.1.0" 1344 | } 1345 | }, 1346 | "@babel/types": { 1347 | "version": "7.15.6", 1348 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", 1349 | "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", 1350 | "dev": true, 1351 | "peer": true, 1352 | "requires": { 1353 | "@babel/helper-validator-identifier": "^7.14.9", 1354 | "to-fast-properties": "^2.0.0" 1355 | } 1356 | }, 1357 | "@types/hast": { 1358 | "version": "2.3.4", 1359 | "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz", 1360 | "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==", 1361 | "requires": { 1362 | "@types/unist": "*" 1363 | } 1364 | }, 1365 | "@types/unist": { 1366 | "version": "2.0.6", 1367 | "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", 1368 | "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" 1369 | }, 1370 | "ansi-styles": { 1371 | "version": "3.2.1", 1372 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 1373 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 1374 | "dev": true, 1375 | "peer": true, 1376 | "requires": { 1377 | "color-convert": "^1.9.0" 1378 | } 1379 | }, 1380 | "browserslist": { 1381 | "version": "4.17.0", 1382 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.0.tgz", 1383 | "integrity": "sha512-g2BJ2a0nEYvEFQC208q8mVAhfNwpZ5Mu8BwgtCdZKO3qx98HChmeg448fPdUzld8aFmfLgVh7yymqV+q1lJZ5g==", 1384 | "dev": true, 1385 | "peer": true, 1386 | "requires": { 1387 | "caniuse-lite": "^1.0.30001254", 1388 | "colorette": "^1.3.0", 1389 | "electron-to-chromium": "^1.3.830", 1390 | "escalade": "^3.1.1", 1391 | "node-releases": "^1.1.75" 1392 | } 1393 | }, 1394 | "caniuse-lite": { 1395 | "version": "1.0.30001257", 1396 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001257.tgz", 1397 | "integrity": "sha512-JN49KplOgHSXpIsVSF+LUyhD8PUp6xPpAXeRrrcBh4KBeP7W864jHn6RvzJgDlrReyeVjMFJL3PLpPvKIxlIHA==", 1398 | "dev": true, 1399 | "peer": true 1400 | }, 1401 | "chalk": { 1402 | "version": "2.4.2", 1403 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 1404 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 1405 | "dev": true, 1406 | "peer": true, 1407 | "requires": { 1408 | "ansi-styles": "^3.2.1", 1409 | "escape-string-regexp": "^1.0.5", 1410 | "supports-color": "^5.3.0" 1411 | } 1412 | }, 1413 | "character-entities": { 1414 | "version": "1.2.4", 1415 | "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", 1416 | "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==" 1417 | }, 1418 | "character-entities-legacy": { 1419 | "version": "1.1.4", 1420 | "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", 1421 | "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==" 1422 | }, 1423 | "character-reference-invalid": { 1424 | "version": "1.1.4", 1425 | "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", 1426 | "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==" 1427 | }, 1428 | "color-convert": { 1429 | "version": "1.9.3", 1430 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 1431 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 1432 | "dev": true, 1433 | "peer": true, 1434 | "requires": { 1435 | "color-name": "1.1.3" 1436 | } 1437 | }, 1438 | "color-name": { 1439 | "version": "1.1.3", 1440 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 1441 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 1442 | "dev": true, 1443 | "peer": true 1444 | }, 1445 | "colorette": { 1446 | "version": "1.4.0", 1447 | "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", 1448 | "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", 1449 | "dev": true, 1450 | "peer": true 1451 | }, 1452 | "comma-separated-tokens": { 1453 | "version": "1.0.8", 1454 | "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", 1455 | "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==" 1456 | }, 1457 | "convert-source-map": { 1458 | "version": "1.8.0", 1459 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", 1460 | "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", 1461 | "dev": true, 1462 | "peer": true, 1463 | "requires": { 1464 | "safe-buffer": "~5.1.1" 1465 | } 1466 | }, 1467 | "debug": { 1468 | "version": "4.3.2", 1469 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", 1470 | "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", 1471 | "dev": true, 1472 | "peer": true, 1473 | "requires": { 1474 | "ms": "2.1.2" 1475 | } 1476 | }, 1477 | "electron-to-chromium": { 1478 | "version": "1.3.839", 1479 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.839.tgz", 1480 | "integrity": "sha512-0O7uPs9LJNjQ/U5mW78qW8gXv9H6Ba3DHZ5/yt8aBsvomOWDkV3MddT7enUYvLQEUVOURjWmgJJWVZ3K98tIwQ==", 1481 | "dev": true, 1482 | "peer": true 1483 | }, 1484 | "escalade": { 1485 | "version": "3.1.1", 1486 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 1487 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 1488 | "dev": true, 1489 | "peer": true 1490 | }, 1491 | "escape-string-regexp": { 1492 | "version": "1.0.5", 1493 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 1494 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 1495 | "dev": true, 1496 | "peer": true 1497 | }, 1498 | "fault": { 1499 | "version": "1.0.4", 1500 | "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz", 1501 | "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==", 1502 | "requires": { 1503 | "format": "^0.2.0" 1504 | } 1505 | }, 1506 | "format": { 1507 | "version": "0.2.2", 1508 | "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", 1509 | "integrity": "sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=" 1510 | }, 1511 | "gensync": { 1512 | "version": "1.0.0-beta.2", 1513 | "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", 1514 | "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", 1515 | "dev": true, 1516 | "peer": true 1517 | }, 1518 | "globals": { 1519 | "version": "11.12.0", 1520 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", 1521 | "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", 1522 | "dev": true, 1523 | "peer": true 1524 | }, 1525 | "has-flag": { 1526 | "version": "3.0.0", 1527 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1528 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 1529 | "dev": true, 1530 | "peer": true 1531 | }, 1532 | "hast-util-parse-selector": { 1533 | "version": "2.2.5", 1534 | "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", 1535 | "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==" 1536 | }, 1537 | "hastscript": { 1538 | "version": "6.0.0", 1539 | "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", 1540 | "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", 1541 | "requires": { 1542 | "@types/hast": "^2.0.0", 1543 | "comma-separated-tokens": "^1.0.0", 1544 | "hast-util-parse-selector": "^2.0.0", 1545 | "property-information": "^5.0.0", 1546 | "space-separated-tokens": "^1.0.0" 1547 | } 1548 | }, 1549 | "highlight.js": { 1550 | "version": "10.7.3", 1551 | "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", 1552 | "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==" 1553 | }, 1554 | "is-alphabetical": { 1555 | "version": "1.0.4", 1556 | "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", 1557 | "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==" 1558 | }, 1559 | "is-alphanumerical": { 1560 | "version": "1.0.4", 1561 | "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", 1562 | "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", 1563 | "requires": { 1564 | "is-alphabetical": "^1.0.0", 1565 | "is-decimal": "^1.0.0" 1566 | } 1567 | }, 1568 | "is-decimal": { 1569 | "version": "1.0.4", 1570 | "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", 1571 | "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==" 1572 | }, 1573 | "is-hexadecimal": { 1574 | "version": "1.0.4", 1575 | "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", 1576 | "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==" 1577 | }, 1578 | "js-tokens": { 1579 | "version": "4.0.0", 1580 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1581 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 1582 | "dev": true, 1583 | "peer": true 1584 | }, 1585 | "jsesc": { 1586 | "version": "2.5.2", 1587 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", 1588 | "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", 1589 | "dev": true, 1590 | "peer": true 1591 | }, 1592 | "json5": { 1593 | "version": "2.2.0", 1594 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", 1595 | "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", 1596 | "dev": true, 1597 | "peer": true, 1598 | "requires": { 1599 | "minimist": "^1.2.5" 1600 | } 1601 | }, 1602 | "lowlight": { 1603 | "version": "1.20.0", 1604 | "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.20.0.tgz", 1605 | "integrity": "sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==", 1606 | "requires": { 1607 | "fault": "^1.0.0", 1608 | "highlight.js": "~10.7.0" 1609 | } 1610 | }, 1611 | "minimist": { 1612 | "version": "1.2.5", 1613 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 1614 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", 1615 | "dev": true, 1616 | "peer": true 1617 | }, 1618 | "ms": { 1619 | "version": "2.1.2", 1620 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1621 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1622 | "dev": true, 1623 | "peer": true 1624 | }, 1625 | "node-releases": { 1626 | "version": "1.1.75", 1627 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.75.tgz", 1628 | "integrity": "sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw==", 1629 | "dev": true, 1630 | "peer": true 1631 | }, 1632 | "parse-entities": { 1633 | "version": "2.0.0", 1634 | "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", 1635 | "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", 1636 | "requires": { 1637 | "character-entities": "^1.0.0", 1638 | "character-entities-legacy": "^1.0.0", 1639 | "character-reference-invalid": "^1.0.0", 1640 | "is-alphanumerical": "^1.0.0", 1641 | "is-decimal": "^1.0.0", 1642 | "is-hexadecimal": "^1.0.0" 1643 | } 1644 | }, 1645 | "prismjs": { 1646 | "version": "1.25.0", 1647 | "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.25.0.tgz", 1648 | "integrity": "sha512-WCjJHl1KEWbnkQom1+SzftbtXMKQoezOCYs5rECqMN+jP+apI7ftoflyqigqzopSO3hMhTEb0mFClA8lkolgEg==" 1649 | }, 1650 | "property-information": { 1651 | "version": "5.6.0", 1652 | "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", 1653 | "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", 1654 | "requires": { 1655 | "xtend": "^4.0.0" 1656 | } 1657 | }, 1658 | "react": { 1659 | "version": "file:../node_modules/react", 1660 | "requires": { 1661 | "loose-envify": "^1.1.0", 1662 | "object-assign": "^4.1.1", 1663 | "prop-types": "^15.6.2" 1664 | } 1665 | }, 1666 | "react-dom": { 1667 | "version": "file:../node_modules/react-dom", 1668 | "requires": { 1669 | "loose-envify": "^1.1.0", 1670 | "object-assign": "^4.1.1", 1671 | "prop-types": "^15.6.2", 1672 | "scheduler": "^0.19.1" 1673 | } 1674 | }, 1675 | "react-full-page-scroller": { 1676 | "version": "file:..", 1677 | "requires": { 1678 | "babel-eslint": "^10.0.3", 1679 | "cross-env": "^7.0.2", 1680 | "eslint": "^6.8.0", 1681 | "eslint-config-prettier": "^6.7.0", 1682 | "eslint-config-standard": "^14.1.0", 1683 | "eslint-config-standard-react": "^9.2.0", 1684 | "eslint-plugin-import": "^2.18.2", 1685 | "eslint-plugin-node": "^11.0.0", 1686 | "eslint-plugin-prettier": "^3.1.1", 1687 | "eslint-plugin-promise": "^4.2.1", 1688 | "eslint-plugin-react": "^7.17.0", 1689 | "eslint-plugin-standard": "^4.0.1", 1690 | "gh-pages": "^2.2.0", 1691 | "microbundle-crl": "^0.13.10", 1692 | "npm-run-all": "^4.1.5", 1693 | "prettier": "^2.0.4", 1694 | "prop-types": "^15.7.2", 1695 | "react": "^16.13.1", 1696 | "react-dom": "^16.13.1", 1697 | "react-scripts": "^3.4.1" 1698 | }, 1699 | "dependencies": { 1700 | "react": { 1701 | "version": "16.14.0", 1702 | "requires": { 1703 | "loose-envify": "^1.1.0", 1704 | "object-assign": "^4.1.1", 1705 | "prop-types": "^15.6.2" 1706 | } 1707 | }, 1708 | "react-dom": { 1709 | "version": "16.14.0", 1710 | "requires": { 1711 | "loose-envify": "^1.1.0", 1712 | "object-assign": "^4.1.1", 1713 | "prop-types": "^15.6.2", 1714 | "scheduler": "^0.19.1" 1715 | } 1716 | }, 1717 | "react-scripts": { 1718 | "version": "3.4.4", 1719 | "requires": { 1720 | "@babel/core": "7.9.0", 1721 | "@svgr/webpack": "4.3.3", 1722 | "@typescript-eslint/eslint-plugin": "^2.10.0", 1723 | "@typescript-eslint/parser": "^2.10.0", 1724 | "babel-eslint": "10.1.0", 1725 | "babel-jest": "^24.9.0", 1726 | "babel-loader": "8.1.0", 1727 | "babel-plugin-named-asset-import": "^0.3.6", 1728 | "babel-preset-react-app": "^9.1.2", 1729 | "camelcase": "^5.3.1", 1730 | "case-sensitive-paths-webpack-plugin": "2.3.0", 1731 | "css-loader": "3.4.2", 1732 | "dotenv": "8.2.0", 1733 | "dotenv-expand": "5.1.0", 1734 | "eslint": "^6.6.0", 1735 | "eslint-config-react-app": "^5.2.1", 1736 | "eslint-loader": "3.0.3", 1737 | "eslint-plugin-flowtype": "4.6.0", 1738 | "eslint-plugin-import": "2.20.1", 1739 | "eslint-plugin-jsx-a11y": "6.2.3", 1740 | "eslint-plugin-react": "7.19.0", 1741 | "eslint-plugin-react-hooks": "^1.6.1", 1742 | "file-loader": "4.3.0", 1743 | "fs-extra": "^8.1.0", 1744 | "fsevents": "2.1.2", 1745 | "html-webpack-plugin": "4.0.0-beta.11", 1746 | "identity-obj-proxy": "3.0.0", 1747 | "jest": "24.9.0", 1748 | "jest-environment-jsdom-fourteen": "1.0.1", 1749 | "jest-resolve": "24.9.0", 1750 | "jest-watch-typeahead": "0.4.2", 1751 | "mini-css-extract-plugin": "0.9.0", 1752 | "optimize-css-assets-webpack-plugin": "5.0.3", 1753 | "pnp-webpack-plugin": "1.6.4", 1754 | "postcss-flexbugs-fixes": "4.1.0", 1755 | "postcss-loader": "3.0.0", 1756 | "postcss-normalize": "8.0.1", 1757 | "postcss-preset-env": "6.7.0", 1758 | "postcss-safe-parser": "4.0.1", 1759 | "react-app-polyfill": "^1.0.6", 1760 | "react-dev-utils": "^10.2.1", 1761 | "resolve": "1.15.0", 1762 | "resolve-url-loader": "3.1.2", 1763 | "sass-loader": "8.0.2", 1764 | "semver": "6.3.0", 1765 | "style-loader": "0.23.1", 1766 | "terser-webpack-plugin": "2.3.8", 1767 | "ts-pnp": "1.1.6", 1768 | "url-loader": "2.3.0", 1769 | "webpack": "4.42.0", 1770 | "webpack-dev-server": "3.11.0", 1771 | "webpack-manifest-plugin": "2.2.0", 1772 | "workbox-webpack-plugin": "4.3.1" 1773 | } 1774 | } 1775 | } 1776 | }, 1777 | "react-scripts": { 1778 | "version": "file:../node_modules/react-scripts", 1779 | "requires": { 1780 | "@babel/core": "7.9.0", 1781 | "@svgr/webpack": "4.3.3", 1782 | "@typescript-eslint/eslint-plugin": "^2.10.0", 1783 | "@typescript-eslint/parser": "^2.10.0", 1784 | "babel-eslint": "10.1.0", 1785 | "babel-jest": "^24.9.0", 1786 | "babel-loader": "8.1.0", 1787 | "babel-plugin-named-asset-import": "^0.3.6", 1788 | "babel-preset-react-app": "^9.1.2", 1789 | "camelcase": "^5.3.1", 1790 | "case-sensitive-paths-webpack-plugin": "2.3.0", 1791 | "css-loader": "3.4.2", 1792 | "dotenv": "8.2.0", 1793 | "dotenv-expand": "5.1.0", 1794 | "eslint": "^6.6.0", 1795 | "eslint-config-react-app": "^5.2.1", 1796 | "eslint-loader": "3.0.3", 1797 | "eslint-plugin-flowtype": "4.6.0", 1798 | "eslint-plugin-import": "2.20.1", 1799 | "eslint-plugin-jsx-a11y": "6.2.3", 1800 | "eslint-plugin-react": "7.19.0", 1801 | "eslint-plugin-react-hooks": "^1.6.1", 1802 | "file-loader": "4.3.0", 1803 | "fs-extra": "^8.1.0", 1804 | "fsevents": "2.1.2", 1805 | "html-webpack-plugin": "4.0.0-beta.11", 1806 | "identity-obj-proxy": "3.0.0", 1807 | "jest": "24.9.0", 1808 | "jest-environment-jsdom-fourteen": "1.0.1", 1809 | "jest-resolve": "24.9.0", 1810 | "jest-watch-typeahead": "0.4.2", 1811 | "mini-css-extract-plugin": "0.9.0", 1812 | "optimize-css-assets-webpack-plugin": "5.0.3", 1813 | "pnp-webpack-plugin": "1.6.4", 1814 | "postcss-flexbugs-fixes": "4.1.0", 1815 | "postcss-loader": "3.0.0", 1816 | "postcss-normalize": "8.0.1", 1817 | "postcss-preset-env": "6.7.0", 1818 | "postcss-safe-parser": "4.0.1", 1819 | "react-app-polyfill": "^1.0.6", 1820 | "react-dev-utils": "^10.2.1", 1821 | "resolve": "1.15.0", 1822 | "resolve-url-loader": "3.1.2", 1823 | "sass-loader": "8.0.2", 1824 | "semver": "6.3.0", 1825 | "style-loader": "0.23.1", 1826 | "terser-webpack-plugin": "2.3.8", 1827 | "ts-pnp": "1.1.6", 1828 | "url-loader": "2.3.0", 1829 | "webpack": "4.42.0", 1830 | "webpack-dev-server": "3.11.0", 1831 | "webpack-manifest-plugin": "2.2.0", 1832 | "workbox-webpack-plugin": "4.3.1" 1833 | } 1834 | }, 1835 | "react-syntax-highlighter": { 1836 | "version": "15.4.4", 1837 | "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-15.4.4.tgz", 1838 | "integrity": "sha512-PsOFHNTzkb3OroXdoR897eKN5EZ6grht1iM+f1lJSq7/L0YVnkJaNVwC3wEUYPOAmeyl5xyer1DjL6MrumO6Zw==", 1839 | "requires": { 1840 | "@babel/runtime": "^7.3.1", 1841 | "highlight.js": "^10.4.1", 1842 | "lowlight": "^1.17.0", 1843 | "prismjs": "^1.22.0", 1844 | "refractor": "^3.2.0" 1845 | } 1846 | }, 1847 | "refractor": { 1848 | "version": "3.4.0", 1849 | "resolved": "https://registry.npmjs.org/refractor/-/refractor-3.4.0.tgz", 1850 | "integrity": "sha512-dBeD02lC5eytm9Gld2Mx0cMcnR+zhSnsTfPpWqFaMgUMJfC9A6bcN3Br/NaXrnBJcuxnLFR90k1jrkaSyV8umg==", 1851 | "requires": { 1852 | "hastscript": "^6.0.0", 1853 | "parse-entities": "^2.0.0", 1854 | "prismjs": "~1.24.0" 1855 | }, 1856 | "dependencies": { 1857 | "prismjs": { 1858 | "version": "1.24.1", 1859 | "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.24.1.tgz", 1860 | "integrity": "sha512-mNPsedLuk90RVJioIky8ANZEwYm5w9LcvCXrxHlwf4fNVSn8jEipMybMkWUyyF0JhnC+C4VcOVSBuHRKs1L5Ow==" 1861 | } 1862 | } 1863 | }, 1864 | "regenerator-runtime": { 1865 | "version": "0.13.9", 1866 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", 1867 | "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" 1868 | }, 1869 | "safe-buffer": { 1870 | "version": "5.1.2", 1871 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1872 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 1873 | "dev": true, 1874 | "peer": true 1875 | }, 1876 | "semver": { 1877 | "version": "6.3.0", 1878 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 1879 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 1880 | "dev": true, 1881 | "peer": true 1882 | }, 1883 | "source-map": { 1884 | "version": "0.5.7", 1885 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 1886 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", 1887 | "dev": true, 1888 | "peer": true 1889 | }, 1890 | "space-separated-tokens": { 1891 | "version": "1.1.5", 1892 | "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", 1893 | "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==" 1894 | }, 1895 | "supports-color": { 1896 | "version": "5.5.0", 1897 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1898 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1899 | "dev": true, 1900 | "peer": true, 1901 | "requires": { 1902 | "has-flag": "^3.0.0" 1903 | } 1904 | }, 1905 | "to-fast-properties": { 1906 | "version": "2.0.0", 1907 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", 1908 | "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", 1909 | "dev": true, 1910 | "peer": true 1911 | }, 1912 | "xtend": { 1913 | "version": "4.0.2", 1914 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 1915 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" 1916 | } 1917 | } 1918 | } 1919 | -------------------------------------------------------------------------------- /example/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-full-page-scroller-example", 3 | "homepage": ".", 4 | "version": "0.0.0", 5 | "private": true, 6 | "scripts": { 7 | "start": "node ../node_modules/react-scripts/bin/react-scripts.js start", 8 | "build": "node ../node_modules/react-scripts/bin/react-scripts.js build", 9 | "test": "node ../node_modules/react-scripts/bin/react-scripts.js test", 10 | "eject": "node ../node_modules/react-scripts/bin/react-scripts.js eject" 11 | }, 12 | "dependencies": { 13 | "react": "file:../node_modules/react", 14 | "react-dom": "file:../node_modules/react-dom", 15 | "react-full-page-scroller": "file:..", 16 | "react-scripts": "file:../node_modules/react-scripts", 17 | "react-syntax-highlighter": "^15.4.4" 18 | }, 19 | "devDependencies": { 20 | "@babel/plugin-syntax-object-rest-spread": "^7.8.3" 21 | }, 22 | "eslintConfig": { 23 | "extends": "react-app" 24 | }, 25 | "browserslist": [ 26 | ">0.2%", 27 | "not dead", 28 | "not ie <= 11", 29 | "not op_mini all" 30 | ] 31 | } 32 | -------------------------------------------------------------------------------- /example/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ibrahim-ih/react-full-page-scroller/4ccf918594dc8b7d268079d55f4a83a9eaa0cab4/example/public/favicon.ico -------------------------------------------------------------------------------- /example/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 10 | 11 | 12 | 16 | 17 | 18 | 27 | react-full-page-scroller 28 | 29 | 30 | 31 | 34 | 35 |
36 | 37 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /example/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "react-full-page-scroller", 3 | "name": "react-full-page-scroller", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | } 10 | ], 11 | "start_url": ".", 12 | "display": "standalone", 13 | "theme_color": "#000000", 14 | "background_color": "#ffffff" 15 | } 16 | -------------------------------------------------------------------------------- /example/src/1200px-React-icon.svg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ibrahim-ih/react-full-page-scroller/4ccf918594dc8b7d268079d55f4a83a9eaa0cab4/example/src/1200px-React-icon.svg.png -------------------------------------------------------------------------------- /example/src/App.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | import MyComponent from 'react-full-page-scroller' 4 | import logo from './1200px-React-icon.svg.png' 5 | import { dark } from 'react-syntax-highlighter/dist/esm/styles/prism'; 6 | import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter'; 7 | 8 | const App = () => { 9 | const nav = [ 10 | { 11 | id: 1, 12 | title: 'Title 1', 13 | className: 'page-nav-button', 14 | style: { width: '100%' } 15 | }, 16 | { 17 | id: 2, 18 | title: 'Title 2', 19 | className: 'page-nav-button', 20 | style: { width: '100%' } 21 | }, 22 | { 23 | id: 3, 24 | title: 'Title 3', 25 | className: 'page-nav-button', 26 | style: { width: '100%' } 27 | } 28 | ] 29 | const indicatorStyle = { 30 | height: '8px', 31 | width: '8px', 32 | margin: '10px', 33 | borderRadius: '4px', 34 | backgroundColor: 'white', 35 | transition: 'width 500ms ease' 36 | } 37 | const indicatorStyleActive = { width: '20px' } 38 | 39 | const codeString ="import React, { Component } from 'react'\n" + 40 | "\n" + 41 | "import MyComponent from 'react-full-page-scroller'\n" + 42 | "import 'react-full-page-scroller/dist/index.css'\n" + 43 | "\n" + 44 | "class Example extends Component {\n" + 45 | " render() {\n" + 46 | " return (\n" + 47 | " \n" + 48 | "
\n" + 49 | "

1

\n" + 50 | "
\n" + 51 | "
\n" + 52 | "

2

\n" + 53 | "
\n" + 54 | "
\n" + 55 | "

3

\n" + 56 | "
\n" + 57 | "
\n" + 58 | " )\n" + 59 | " }\n" + 60 | "}" 61 | 62 | return ( 63 | 68 |
76 | Logo 77 |

React Full Page Scroller

78 | 79 |
80 |
88 |

USAGE

89 |
90 | 91 | {codeString} 92 | 93 |
94 |
95 |
103 |

Section 3

104 |
105 |
106 | ) 107 | } 108 | 109 | export default App 110 | -------------------------------------------------------------------------------- /example/src/App.test.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import ReactDOM from 'react-dom' 3 | import App from './App' 4 | 5 | it('renders without crashing', () => { 6 | const div = document.createElement('div') 7 | ReactDOM.render(, div) 8 | ReactDOM.unmountComponentAtNode(div) 9 | }) 10 | -------------------------------------------------------------------------------- /example/src/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | scroll-behavior: smooth; 4 | } 5 | 6 | .page-scroller-info { 7 | position: fixed; 8 | z-index: 99; 9 | display: flex; 10 | } 11 | 12 | .info-block { 13 | display: flex; 14 | flex-direction: column; 15 | margin: 10px; 16 | } 17 | 18 | .info-block p { 19 | margin: 0; 20 | } 21 | 22 | .page { 23 | width: 50vw; 24 | display: flex; 25 | align-items: center; 26 | justify-content: center; 27 | } 28 | 29 | .page-number { 30 | font-size: 300%; 31 | color: #f5f0e1; 32 | } 33 | 34 | .page-nav { 35 | height: 50px; 36 | position: fixed; 37 | display: flex; 38 | align-self: flex-end; 39 | align-items: center; 40 | justify-content: flex-end; 41 | } 42 | 43 | .page-nav-button { 44 | padding: 10px; 45 | margin: 10px; 46 | color: white; 47 | border-bottom: 2px solid white; 48 | cursor: pointer; 49 | } 50 | .bg-blue { 51 | background-color: #1e3d59; 52 | } 53 | .bg-red { 54 | background-color: #ffc13b; 55 | } 56 | .bg-green { 57 | background-color: #ff6e40; 58 | } 59 | -------------------------------------------------------------------------------- /example/src/index.js: -------------------------------------------------------------------------------- 1 | import './index.css' 2 | 3 | import React from 'react' 4 | import ReactDOM from 'react-dom' 5 | import App from './App' 6 | 7 | ReactDOM.render(, document.getElementById('root')) 8 | -------------------------------------------------------------------------------- /example/src/react-full-page-scroller.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ibrahim-ih/react-full-page-scroller/4ccf918594dc8b7d268079d55f4a83a9eaa0cab4/example/src/react-full-page-scroller.gif -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-full-page-scroller", 3 | "version": "0.1.6", 4 | "description": "A react module for full page scroll", 5 | "author": "Ibrahim Haouari", 6 | "license": "MIT", 7 | "publishConfig": { 8 | "registry": "https://npm.pkg.github.com/ibrahim-ih" 9 | }, 10 | "repository": "git://github.com/ibrahim-ih/react-full-page-scroller.git", 11 | "main": "dist/index.js", 12 | "module": "dist/index.modern.js", 13 | "source": "src/index.js", 14 | "engines": { 15 | "node": ">=10" 16 | }, 17 | "scripts": { 18 | "build": "microbundle-crl --no-compress --format modern,cjs", 19 | "start": "microbundle-crl watch --no-compress --format modern,cjs", 20 | "prepare": "run-s build", 21 | "test": "run-s test:unit test:lint test:build", 22 | "test:build": "run-s build", 23 | "test:lint": "eslint .", 24 | "test:unit": "cross-env CI=1 react-scripts test --env=jsdom", 25 | "test:watch": "react-scripts test --env=jsdom", 26 | "predeploy": "cd example && npm install && npm run build", 27 | "deploy": "gh-pages -d example/build" 28 | }, 29 | "peerDependencies": { 30 | "react": "^16.0.0" 31 | }, 32 | "devDependencies": { 33 | "babel-eslint": "^10.0.3", 34 | "cross-env": "^7.0.2", 35 | "eslint": "^6.8.0", 36 | "eslint-config-prettier": "^6.7.0", 37 | "eslint-config-standard": "^14.1.0", 38 | "eslint-config-standard-react": "^9.2.0", 39 | "eslint-plugin-import": "^2.18.2", 40 | "eslint-plugin-node": "^11.0.0", 41 | "eslint-plugin-prettier": "^3.1.1", 42 | "eslint-plugin-promise": "^4.2.1", 43 | "eslint-plugin-react": "^7.17.0", 44 | "eslint-plugin-standard": "^4.0.1", 45 | "gh-pages": "^2.2.0", 46 | "microbundle-crl": "^0.13.10", 47 | "npm-run-all": "^4.1.5", 48 | "prettier": "^2.0.4", 49 | "prop-types": "^15.7.2", 50 | "react": "^16.13.1", 51 | "react-dom": "^16.13.1", 52 | "react-scripts": "^3.4.1" 53 | }, 54 | "files": [ 55 | "dist" 56 | ], 57 | "keywords": [ 58 | "react", 59 | "reactjs", 60 | "ssr", 61 | "javascript" 62 | ] 63 | } 64 | -------------------------------------------------------------------------------- /src/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "jest": true 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /src/Page.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const Page = (props) => { 4 | const { style, children: parent } = { ...props } 5 | const { height, width, ...cleanedStyle } = { ...style } 6 | const pageStyle = { 7 | height: '100vh', 8 | width: '100vw', 9 | ...cleanedStyle 10 | } 11 | console.log(parent.type) 12 | console.log(parent) 13 | const { 14 | props: { children } 15 | } = parent 16 | 17 | return ( 18 |
22 | {children} 23 |
24 | ) 25 | } 26 | export default Page 27 | -------------------------------------------------------------------------------- /src/PageIndicator.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import PageIndicatorButton from './PageIndicatorButton' 3 | import PropTypes from 'prop-types' 4 | 5 | const PageIndicator = (props) => { 6 | const { 7 | pageCount, 8 | activePage, 9 | goToPage, 10 | style, 11 | indicatorStyle, 12 | indicatorStyleActive 13 | } = props 14 | const renderIndicators = () => { 15 | const count = pageCount 16 | const indicators = [] 17 | for (let i = 0; i < count; i++) { 18 | const active = i === activePage 19 | indicators.push( 20 | 28 | ) 29 | } 30 | 31 | return indicators 32 | } 33 | 34 | const pageIndicatorStyle = { 35 | ...style, 36 | height: '100vh', 37 | position: 'fixed', 38 | display: 'flex', 39 | flexDirection: 'column', 40 | justifyContent: 'center' 41 | } 42 | 43 | return
{renderIndicators()}
44 | } 45 | 46 | PageIndicatorButton.propTypes = { 47 | goToPage: PropTypes.func, 48 | pageCount: PropTypes.number, 49 | activePage: PropTypes.number, 50 | style: PropTypes.object 51 | } 52 | 53 | PageIndicatorButton.defaultProps = { 54 | goToPage: () => {}, 55 | pageCount: 1, 56 | activePage: 1, 57 | style: {} 58 | } 59 | 60 | export default PageIndicator 61 | -------------------------------------------------------------------------------- /src/PageIndicatorButton.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import PropTypes from 'prop-types' 3 | 4 | const PageIndicatorButton = (props) => { 5 | const { 6 | goToPage, 7 | pageIndex, 8 | active, 9 | indicatorStyle, 10 | indicatorStyleActive 11 | } = props 12 | 13 | const [style, setStyle] = React.useState({}) 14 | 15 | React.useMemo(() => { 16 | let result = indicatorStyle 17 | if (active) { 18 | result = { ...indicatorStyle, ...indicatorStyleActive } 19 | } 20 | setStyle(result) 21 | }, [indicatorStyle, indicatorStyleActive]) 22 | 23 | return
goToPage(pageIndex)} /> 24 | } 25 | 26 | PageIndicatorButton.propTypes = { 27 | goToPage: PropTypes.func, 28 | pageIndex: PropTypes.number, 29 | active: PropTypes.bool, 30 | indicatorStyle: PropTypes.object, 31 | indicatorStyleActive: PropTypes.object 32 | } 33 | PageIndicatorButton.defaultProps = { 34 | pageIndex: 1, 35 | active: false, 36 | indicatorStyle: { 37 | height: '8px', 38 | width: '8px', 39 | margin: '10px', 40 | borderRadius: '4px', 41 | backgroundColor: 'white', 42 | transition: 'width 500ms ease' 43 | }, 44 | indicatorStyleActive: { width: '20px' } 45 | } 46 | 47 | export default PageIndicatorButton 48 | -------------------------------------------------------------------------------- /src/PageNav.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import PropTypes from 'prop-types' 3 | 4 | const PageNav = (props) => { 5 | const { goToPage, navButtons } = props 6 | const renderButtons = () => { 7 | const buttons = [] 8 | navButtons.map((buttonInfo, i) => { 9 | buttons.push( 10 |
goToPage(buttonInfo.index)} 13 | style={buttonInfo.style} 14 | key={i} 15 | > 16 | {buttonInfo.title} 17 |
18 | ) 19 | }) 20 | 21 | return buttons 22 | } 23 | return
{renderButtons()}
24 | } 25 | 26 | PageNav.propTypes = { 27 | navButtons: PropTypes.array, 28 | goToPage: PropTypes.func 29 | } 30 | 31 | PageNav.defaultProps = { 32 | navButtons: [], 33 | goToPage: () => {} 34 | } 35 | 36 | export default PageNav 37 | -------------------------------------------------------------------------------- /src/PageScroller.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import PageNav from './PageNav' 3 | import Page from './Page' 4 | import PageIndicator from './PageIndicator' 5 | import { getValidChildren } from './helper' 6 | 7 | export default class PageScroller extends React.Component { 8 | constructor(props) { 9 | super(props) 10 | 11 | this.state = { 12 | scrollPos: 0, 13 | pageIndex: 0, 14 | scrollAgain: true, 15 | children: null 16 | } 17 | 18 | this.pages = 0 19 | this.scrollLocker = () => {} 20 | } 21 | 22 | componentDidMount = () => { 23 | const { children: childrenProp } = this.props 24 | this.setState({ children: getValidChildren(childrenProp) }) 25 | window.addEventListener('scroll', this.handleScroll) 26 | } 27 | 28 | componentWillUnmount = () => { 29 | window.removeEventListener('scroll', this.handleScroll) 30 | } 31 | 32 | handleScroll = () => { 33 | const scrollPos = this.state.scrollPos 34 | const pageIndex = this.state.pageIndex 35 | const winHeight = window.innerHeight 36 | 37 | if (this.state.scrollAgain) { 38 | if (document.body.getBoundingClientRect().top > scrollPos) { 39 | // handle scroll up 40 | if (pageIndex - 1 >= 0) { 41 | // pageIndex--; 42 | this.scroll(winHeight, pageIndex - 1) 43 | } 44 | } else { 45 | // handle scroll down 46 | if (pageIndex + 1 <= this.pages - 1) { 47 | // pageIndex++; 48 | this.scroll(winHeight, pageIndex + 1) 49 | } 50 | } 51 | } else { 52 | // scroll to current position if scrolling is disabled 53 | window.scrollTo(0, pageIndex * winHeight) 54 | } 55 | } 56 | 57 | scroll = (winHeight, pageIndex) => { 58 | window.scrollTo(0, winHeight * pageIndex) 59 | 60 | this.scrollLocker = setTimeout(() => { 61 | this.setState({ scrollAgain: true }) 62 | }, 1000) 63 | 64 | this.setState({ 65 | scrollPos: document.body.getBoundingClientRect().top, 66 | pageIndex: pageIndex, 67 | scrollAgain: false 68 | }) 69 | } 70 | 71 | goToPage = (index) => { 72 | this.scroll(window.innerHeight, index) 73 | } 74 | 75 | renderChildren = () => { 76 | const childElements = [] 77 | let pageIndicator 78 | let pageNav 79 | const navButtons = [] 80 | const indicatorArray = [] 81 | let pageCount = 0 82 | 83 | const { children } = this.state 84 | if (children && children.length > 0) { 85 | React.Children.map(children, (child, i) => { 86 | if (child.type === Page) { 87 | if (child.props.pageNav && child.props.pageNav.length > 0) { 88 | const { title, className, style } = child.props.pageNav[pageCount] 89 | if (title) { 90 | navButtons.push({ 91 | index: pageCount, 92 | title: title, 93 | className: className || null, 94 | style: style || {} 95 | }) 96 | } 97 | } 98 | 99 | pageCount++ 100 | childElements.push(child) 101 | } else if (child.type === PageIndicator) { 102 | if (child.props.indicatorStyle || child.props.indicatorStyleActive) { 103 | const { indicatorStyle, indicatorStyleActive } = child.props 104 | indicatorArray.push({ 105 | indicatorStyle: indicatorStyle, 106 | indicatorStyleActive: indicatorStyleActive 107 | }) 108 | } 109 | pageIndicator = child 110 | } else if (child.type === PageNav) { 111 | pageNav = child 112 | } 113 | }) 114 | } 115 | 116 | this.pages = pageCount 117 | 118 | if (pageIndicator) { 119 | childElements.push( 120 | React.cloneElement(pageIndicator, { 121 | pageCount: this.pages, 122 | activePage: this.state.pageIndex, 123 | goToPage: this.goToPage, 124 | indicatorArray: indicatorArray 125 | }) 126 | ) 127 | } 128 | 129 | if (pageNav) { 130 | childElements.push( 131 | React.cloneElement(pageNav, { 132 | goToPage: this.goToPage, 133 | navButtons: navButtons 134 | }) 135 | ) 136 | } 137 | 138 | return childElements 139 | } 140 | 141 | render() { 142 | return
{this.renderChildren()}
143 | } 144 | } 145 | -------------------------------------------------------------------------------- /src/helper.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | export const getValidChildren = (children) => { 4 | return React.Children.toArray(children).filter((child) => 5 | React.isValidElement(child) 6 | ) 7 | } 8 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import PageNav from './PageNav' 3 | import PageScroller from './PageScroller' 4 | import PageIndicator from './PageIndicator' 5 | import Page from './Page' 6 | import PropTypes from 'prop-types' 7 | 8 | export const FullPage = (props) => { 9 | const { pageNav, indicatorStyle, indicatorStyleActive, children } = props 10 | if (typeof window !== 'undefined') { 11 | return ( 12 | 13 | {pageNav && pageNav.length > 0 && } 14 | {indicatorStyle && ( 15 | 19 | )} 20 | {React.Children.toArray(children).map((child, id) => { 21 | return ( 22 | 23 | {child} 24 | 25 | ) 26 | })} 27 | 28 | ) 29 | } else { 30 | return null 31 | } 32 | } 33 | 34 | FullPage.propTypes = { 35 | children: PropTypes.node.isRequired, 36 | indicatorStyle: PropTypes.object, 37 | pageNav: PropTypes.array 38 | } 39 | 40 | FullPage.defaultProps = { 41 | indicator: null, 42 | pageNav: null 43 | } 44 | 45 | export default FullPage 46 | -------------------------------------------------------------------------------- /src/index.test.js: -------------------------------------------------------------------------------- 1 | import { ExampleComponent } from '.' 2 | 3 | describe('ExampleComponent', () => { 4 | it('is truthy', () => { 5 | expect(ExampleComponent).toBeTruthy() 6 | }) 7 | }) 8 | --------------------------------------------------------------------------------