├── .gitignore
├── .vscode
└── settings.json
├── img-1.png
├── .stylelintrc.json
├── .hintrc
├── .eslintrc
├── js
├── menu.js
└── site.js
├── README.md
├── .github
└── workflows
│ └── linters.yml
├── index.html
├── css
└── styles.css
└── package.json
/.gitignore:
--------------------------------------------------------------------------------
1 | # .gitignore
2 | node_modules/
3 | .vscode/
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "liveServer.settings.port": 5501
3 | }
--------------------------------------------------------------------------------
/img-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/miftah1991/Awesomebooks/HEAD/img-1.png
--------------------------------------------------------------------------------
/.stylelintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": ["stylelint-config-standard"],
3 | "plugins": ["stylelint-scss", "stylelint-csstree-validator"],
4 | "rules": {
5 | "at-rule-no-unknown": null,
6 | "scss/at-rule-no-unknown": true,
7 | "csstree/validator": true
8 | },
9 | "ignoreFiles": ["build/**", "dist/**", "**/reset*.css", "**/bootstrap*.css"]
10 | }
--------------------------------------------------------------------------------
/.hintrc:
--------------------------------------------------------------------------------
1 | {
2 | "connector": {
3 | "name": "local",
4 | "options": {
5 | "pattern": ["**", "!.git/**", "!node_modules/**"]
6 | }
7 | },
8 | "extends": ["development"],
9 | "formatters": ["stylish"],
10 | "hints": [
11 | "button-type",
12 | "disown-opener",
13 | "html-checker",
14 | "meta-charset-utf-8",
15 | "meta-viewport",
16 | "no-inline-styles:error"
17 | ]
18 | }
--------------------------------------------------------------------------------
/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": true,
4 | "es6": true,
5 | "jest": true
6 | },
7 | "parser": "babel-eslint",
8 | "parserOptions": {
9 | "ecmaVersion": 2018,
10 | "sourceType": "module"
11 | },
12 | "extends": ["airbnb-base"],
13 | "rules": {
14 | "no-shadow": "off",
15 | "no-param-reassign": "off",
16 | "eol-last": "off",
17 | "import/extensions": [ 1, {
18 | "js": "always", "json": "always"
19 | }]
20 | },
21 | "ignorePatterns": [
22 | "dist/",
23 | "build/"
24 | ]
25 | }
--------------------------------------------------------------------------------
/js/menu.js:
--------------------------------------------------------------------------------
1 | const listNav = document.querySelector('.nav-list');
2 | const addNewNav = document.querySelector('.nav-add');
3 | const contactNav = document.querySelector('.nav-contact');
4 |
5 | const listBox = document.querySelector('.books-section');
6 | const addBox = document.querySelector('.books-add-section');
7 | const contactBox = document.querySelector('.contact-us');
8 |
9 | listNav.addEventListener('click', () => {
10 | listBox.style.display = 'flex';
11 | contactBox.style.display = 'none';
12 | addBox.style.display = 'none';
13 | listNav.style.color = 'rgb(59, 59, 219)';
14 | addNewNav.style.color = 'black';
15 | contactNav.style.color = 'black';
16 | });
17 | addNewNav.addEventListener('click', () => {
18 | listBox.style.display = 'none';
19 | contactBox.style.display = 'none';
20 | addBox.style.display = 'flex';
21 | document.querySelector('.title').value = '';
22 | document.querySelector('.author').value = '';
23 | addNewNav.style.color = 'rgb(59, 59, 219)';
24 | listNav.style.color = 'black';
25 | contactNav.style.color = 'black';
26 | });
27 | contactNav.addEventListener('click', () => {
28 | listBox.style.display = 'none';
29 | contactBox.style.display = 'flex';
30 | addBox.style.display = 'none';
31 | contactNav.style.color = 'rgb(59, 59, 219)';
32 | listNav.style.color = 'black';
33 | addNewNav.style.color = 'black';
34 | });
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | 
2 |
3 | # Event Page
4 |
5 | > **Awesome Books.**
6 | >In this project, I built a basic website that allows users to add/remove books from a book list.
7 |
8 |
9 | 
10 |
11 |
12 | ## Built With
13 |
14 | - HTML
15 | - CSS
16 | - JavaScript
17 |
18 | ## Live Demo
19 |
20 | [Live Demo Link](https://miftah1991.github.io/Awesomebooks/)
21 |
22 |
23 | ## Author
24 |
25 | 👤 **Miftah Amin**
26 |
27 | - GitHub: [@miftah1991](https://github.com/miftah1991)
28 | - Twitter: [@miftah1991](https://twitter.com/miftah1991)
29 | - LinkedIn: [LinkedIn](https://www.linkedin.com/in/miftah1991/)
30 |
31 | 👤 **Herve**
32 |
33 | - GitHub: [@muhenge](https://github.com/muhenge)
34 | - Twitter: [@muhenge](https://twitter.com/muhenge)
35 | - LinkedIn: [LinkedIn](https://www.linkedin.com/in/muhenge/)
36 | ## 🤝 Contributing
37 |
38 | Contributions, issues, and feature requests are welcome!
39 |
40 | Feel free to check the [issues page](../../issues/).
41 |
42 | ## Show your support
43 |
44 | Give a ⭐️ if you like this project!
45 |
46 | **📝 License**
47 | ----------------------------------------------------------------------
48 | This project is MIT licensed.
49 | ## Acknowledgments
50 |
51 | - [Cindy Shin](https://github.com/microverseinc/curriculum-html-css/blob/main/capstone/html_capstone.md#:~:text=Cindy%20Shin%20in%20Behance) in Behance for her [design](https://www.behance.net/gallery/29845175/CC-Global-Summit-2015)
52 | - [microverse](http://www.microverse.org) for the config templates and original design
53 |
--------------------------------------------------------------------------------
/.github/workflows/linters.yml:
--------------------------------------------------------------------------------
1 | name: Linters
2 |
3 | on: pull_request
4 |
5 | env:
6 | FORCE_COLOR: 1
7 |
8 | jobs:
9 | eslint:
10 | name: ESLint
11 | runs-on: ubuntu-18.04
12 | steps:
13 | - uses: actions/checkout@v2
14 | - uses: actions/setup-node@v1
15 | with:
16 | node-version: "12.x"
17 | - name: Setup ESLint
18 | run: |
19 | npm install --save-dev eslint@7.x eslint-config-airbnb-base@14.x eslint-plugin-import@2.x babel-eslint@10.x
20 | [ -f .eslintrc.json ] || wget https://raw.githubusercontent.com/microverseinc/linters-config/master/javascript/.eslintrc.json
21 | - name: ESLint Report
22 | run: npx eslint .
23 | lighthouse:
24 | name: Lighthouse
25 | runs-on: ubuntu-18.04
26 | steps:
27 | - uses: actions/checkout@v2
28 | - uses: actions/setup-node@v1
29 | with:
30 | node-version: "12.x"
31 | - name: Setup Lighthouse
32 | run: npm install -g @lhci/cli@0.7.x
33 | - name: Lighthouse Report
34 | run: lhci autorun --upload.target=temporary-public-storage --collect.staticDistDir=.
35 | webhint:
36 | name: Webhint
37 | runs-on: ubuntu-18.04
38 | steps:
39 | - uses: actions/checkout@v2
40 | - uses: actions/setup-node@v1
41 | with:
42 | node-version: "12.x"
43 | - name: Setup Webhint
44 | run: |
45 | npm install --save-dev hint@6.x
46 | [ -f .hintrc ] || wget https://raw.githubusercontent.com/microverseinc/linters-config/master/html-css/.hintrc
47 | - name: Webhint Report
48 | run: npx hint .
49 | stylelint:
50 | name: Stylelint
51 | runs-on: ubuntu-18.04
52 | steps:
53 | - uses: actions/checkout@v2
54 | - uses: actions/setup-node@v1
55 | with:
56 | node-version: "12.x"
57 | - name: Setup Stylelint
58 | run: |
59 | npm install --save-dev stylelint@13.x stylelint-scss@3.x stylelint-config-standard@21.x stylelint-csstree-validator@1.x
60 | [ -f .stylelintrc.json ] || wget https://raw.githubusercontent.com/microverseinc/linters-config/master/html-css/.stylelintrc.json
61 | - name: Stylelint Report
62 | run: npx stylelint "**/*.{css,scss}"
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Awesome Books
8 |
9 |
10 |
11 |
12 |
24 |
27 |
28 |
29 |
30 | All Awesome Books
31 |
36 |
37 |
38 | Add New Book
39 |
40 |
41 |
42 |
Please add book title and author's name
43 |
44 |
45 |
46 |
55 |
58 |
59 |
60 |
61 |
62 |
--------------------------------------------------------------------------------
/css/styles.css:
--------------------------------------------------------------------------------
1 | body {
2 | margin: 0;
3 | padding: 1vw;
4 | font-family: sans-serif;
5 | height: 100vh;
6 | flex: 1;
7 | display: flex;
8 | flex-direction: column;
9 | justify-content: space-between;
10 | }
11 |
12 | nav li {
13 | list-style: none;
14 | }
15 |
16 | a {
17 | text-decoration: none;
18 | }
19 |
20 | nav li a {
21 | color: black;
22 | }
23 |
24 | .books-section h1 {
25 | text-align: center;
26 | }
27 |
28 | .elements {
29 | display: flex;
30 | flex-direction: row;
31 | justify-content: space-between;
32 | padding-left: 1vw;
33 | padding-right: 1vw;
34 | padding-top: 2vh;
35 | padding-bottom: 2vh;
36 | align-items: center;
37 | }
38 |
39 | .hrbar {
40 | width: 30vw;
41 | margin-top: 5vh;
42 | }
43 |
44 | /* section: add book */
45 | .books-add-section {
46 | display: none;
47 | flex-direction: column;
48 | align-items: center;
49 | }
50 |
51 | .title,
52 | .author {
53 | width: 60vw;
54 | height: 25px;
55 | }
56 |
57 | .Add {
58 | align-self: flex-end;
59 | }
60 |
61 | .remove-button {
62 | border: solid black;
63 | box-shadow: 2px 2px black;
64 | }
65 |
66 | .books-section {
67 | align-items: center;
68 | text-align: center;
69 | display: none;
70 | flex-direction: column;
71 | border: 3px solid black;
72 | }
73 |
74 | .grey-background {
75 | background-color: #ddd;
76 | }
77 |
78 | nav {
79 | display: flex;
80 | justify-content: space-between;
81 | border: 2px solid black;
82 | margin-bottom: 1vh;
83 | padding-right: 10px;
84 | padding-left: 10px;
85 | }
86 |
87 | .book-nav {
88 | display: flex;
89 | flex-direction: row;
90 | justify-content: space-evenly;
91 | gap: 24px;
92 | }
93 |
94 | .date-row {
95 | display: flex;
96 | justify-content: right;
97 | padding-right: 10px;
98 | }
99 |
100 | footer {
101 | border: solid black;
102 | padding: 2vh 2vw;
103 | font-weight: 700;
104 | margin-top: 10px;
105 | }
106 |
107 | .validate-error {
108 | display: none;
109 | color: red;
110 | }
111 |
112 | .main-nav {
113 | display: flex;
114 | align-items: center;
115 | }
116 |
117 | .contact-us {
118 | display: none;
119 | justify-content: center;
120 | padding-top: 15px;
121 | flex-direction: column;
122 | align-items: center;
123 | }
124 |
125 | @media screen and (min-width: 768px) {
126 | .title,
127 | .author,
128 | .elements {
129 | width: 30vw;
130 | }
131 |
132 | body {
133 | padding: 0 5vw;
134 | }
135 | }
136 |
--------------------------------------------------------------------------------
/js/site.js:
--------------------------------------------------------------------------------
1 | // eslint-disable-next-line no-undef
2 | const { DateTime } = luxon;
3 |
4 | document.getElementById('currentdate').innerText = DateTime.local().toLocaleString(DateTime.DATETIME_MED);
5 |
6 | let booksList = [];
7 |
8 | class Book {
9 | constructor(container) {
10 | this.container = container;
11 | }
12 |
13 | generateBooks() {
14 | this.container.innerHTML = '';
15 | if (localStorage.getItem('books') != null) {
16 | booksList = JSON.parse(localStorage.getItem('books'));
17 | booksList.forEach((element, index) => {
18 | const li = document.createElement('li');
19 | li.className = 'elements';
20 | const titleDiv = document.createElement('div');
21 | titleDiv.className = 'book-title';
22 | titleDiv.textContent = `"${element.title}" by ${element.author}`;
23 | li.appendChild(titleDiv);
24 | const removebtn = document.createElement('button');
25 | removebtn.className = 'remove-button';
26 | removebtn.textContent = 'Remove';
27 |
28 | removebtn.addEventListener('click', () => {
29 | this.remove(index);
30 | this.generateBooks();
31 | });
32 | li.appendChild(removebtn);
33 | this.container.append(li);
34 | if (index % 2 !== 0) {
35 | li.classList.add('grey-background');
36 | }
37 | });
38 | }
39 | }
40 |
41 | saveDataLocalStorage = (booksList) => {
42 | localStorage.setItem('books', JSON.stringify(booksList));
43 | };
44 |
45 | remove(index) {
46 | booksList = booksList.filter((book, ind) => ind !== index);
47 | this.saveDataLocalStorage(booksList);
48 | }
49 |
50 | addNewBook() {
51 | const title = document.querySelector('.title').value;
52 | const author = document.querySelector('.author').value;
53 | if (title === '' || author === '') {
54 | const errorLabel = document.querySelector('.validate-error');
55 | errorLabel.style.display = 'block';
56 | } else {
57 | const book = {
58 | title,
59 | author,
60 | };
61 | booksList.push(book);
62 | this.saveDataLocalStorage(booksList);
63 | this.generateBooks();
64 | this.showbooksection();
65 | }
66 | }
67 |
68 | showbooksection = () => {
69 | document.querySelector('.books-section').style.display = 'flex';
70 | document.querySelector('.books-add-section').style.display = 'none';
71 | document.querySelector('.contact-us').style.display = 'none';
72 | }
73 | }
74 | const book = new Book(document.getElementById('book-lis'));
75 | const addBookbtn = document.querySelector('.Add');
76 | addBookbtn.addEventListener('click', () => book.addNewBook());
77 | window.onload = book.generateBooks();
78 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "awesomebooks",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "repository": {
10 | "type": "git",
11 | "url": "git+https://github.com/miftah1991/Awesomebooks.git"
12 | },
13 | "keywords": [],
14 | "author": "",
15 | "license": "ISC",
16 | "bugs": {
17 | "url": "https://github.com/miftah1991/Awesomebooks/issues"
18 | },
19 | "homepage": "https://github.com/miftah1991/Awesomebooks#readme",
20 | "devDependencies": {
21 | "babel-eslint": "^10.1.0",
22 | "eslint": "^7.32.0",
23 | "eslint-config-airbnb-base": "^14.2.1",
24 | "eslint-plugin-import": "^2.25.4",
25 | "hint": "^6.1.9",
26 | "stylelint": "^13.13.1",
27 | "stylelint-config-standard": "^21.0.0",
28 | "stylelint-csstree-validator": "^1.9.0",
29 | "stylelint-scss": "^3.21.0"
30 | },
31 | "dependencies": {
32 | "abab": "^2.0.5",
33 | "abbrev": "^1.1.1",
34 | "acorn": "^8.7.0",
35 | "acorn-globals": "^6.0.0",
36 | "acorn-jsx": "^5.3.2",
37 | "acorn-jsx-walk": "^2.0.0",
38 | "acorn-walk": "^8.2.0",
39 | "agent-base": "^6.0.2",
40 | "agentkeepalive": "^4.2.0",
41 | "aggregate-error": "^3.1.0",
42 | "ajv": "^8.10.0",
43 | "ajv-formats": "^2.1.1",
44 | "ansi-align": "^3.0.1",
45 | "ansi-colors": "^4.1.1",
46 | "ansi-regex": "^5.0.1",
47 | "ansi-styles": "^4.3.0",
48 | "anymatch": "^3.1.2",
49 | "aproba": "^2.0.0",
50 | "are-we-there-yet": "^2.0.0",
51 | "argparse": "^1.0.10",
52 | "array-includes": "^3.1.4",
53 | "array-union": "^2.1.0",
54 | "array.prototype.flat": "^1.2.5",
55 | "arrify": "^1.0.1",
56 | "asn1": "^0.2.6",
57 | "assert-plus": "^1.0.0",
58 | "ast-types": "^0.13.4",
59 | "astral-regex": "^2.0.0",
60 | "async": "^0.9.2",
61 | "asynckit": "^0.4.0",
62 | "autoprefixer": "^9.8.8",
63 | "aws-sign2": "^0.7.0",
64 | "aws4": "^1.11.0",
65 | "axe-core": "^4.4.1",
66 | "bail": "^1.0.5",
67 | "balanced-match": "^1.0.2",
68 | "base64-js": "^1.5.1",
69 | "bcp47": "^1.1.2",
70 | "bcrypt-pbkdf": "^1.0.2",
71 | "binary-extensions": "^2.2.0",
72 | "bl": "^4.1.0",
73 | "boolbase": "^1.0.0",
74 | "boxen": "^5.1.2",
75 | "brace-expansion": "^1.1.11",
76 | "braces": "^3.0.2",
77 | "browser-process-hrtime": "^1.0.0",
78 | "browserslist": "^4.19.1",
79 | "buffer": "^5.7.1",
80 | "buffer-crc32": "^0.2.13",
81 | "builtins": "^1.0.3",
82 | "bytes": "^3.1.1",
83 | "cacache": "^15.3.0",
84 | "cacheable-lookup": "^5.0.4",
85 | "cacheable-request": "^7.0.2",
86 | "call-bind": "^1.0.2",
87 | "callsites": "^3.1.0",
88 | "camelcase": "^6.3.0",
89 | "camelcase-keys": "^6.2.2",
90 | "caniuse-lite": "^1.0.30001309",
91 | "canvas": "^2.9.0",
92 | "caseless": "^0.12.0",
93 | "chalk": "^4.1.2",
94 | "character-entities": "^1.2.4",
95 | "character-entities-legacy": "^1.1.4",
96 | "character-reference-invalid": "^1.1.4",
97 | "chokidar": "^3.5.3",
98 | "chownr": "^2.0.0",
99 | "ci-info": "^3.3.0",
100 | "clean-stack": "^2.2.0",
101 | "cli-boxes": "^2.2.1",
102 | "cli-cursor": "^3.1.0",
103 | "cli-spinners": "^2.6.1",
104 | "clone": "^1.0.4",
105 | "clone-regexp": "^2.2.0",
106 | "clone-response": "^1.0.2",
107 | "cloudinary": "^1.28.1",
108 | "cloudinary-core": "^2.12.3",
109 | "color-convert": "^2.0.1",
110 | "color-name": "^1.1.4",
111 | "color-string": "^1.9.0",
112 | "color-support": "^1.1.3",
113 | "combined-stream": "^1.0.8",
114 | "concat-map": "^0.0.1",
115 | "configstore": "^5.0.1",
116 | "confusing-browser-globals": "^1.0.11",
117 | "console-control-strings": "^1.1.0",
118 | "content-type": "^1.0.4",
119 | "convert-source-map": "^1.8.0",
120 | "core-js": "^3.6.5",
121 | "core-util-is": "^1.0.2",
122 | "cosmiconfig": "^7.0.1",
123 | "cross-spawn": "^7.0.3",
124 | "crypto-random-string": "^2.0.0",
125 | "css-select": "^4.2.1",
126 | "css-tree": "^1.1.3",
127 | "css-what": "^5.1.0",
128 | "cssesc": "^3.0.0",
129 | "cssom": "^0.4.4",
130 | "cssstyle": "^2.3.0",
131 | "dashdash": "^1.14.1",
132 | "data-uri-to-buffer": "^3.0.1",
133 | "data-urls": "^2.0.0",
134 | "debug": "^4.3.2",
135 | "decamelize": "^1.2.0",
136 | "decamelize-keys": "^1.1.0",
137 | "decimal.js": "^10.3.1",
138 | "decompress-response": "^6.0.0",
139 | "deep-extend": "^0.6.0",
140 | "deep-is": "^0.1.4",
141 | "defaults": "^1.0.3",
142 | "defer-to-connect": "^2.0.1",
143 | "define-properties": "^1.1.3",
144 | "degenerator": "^3.0.1",
145 | "delayed-stream": "^1.0.0",
146 | "delegates": "^1.0.0",
147 | "depd": "^1.1.2",
148 | "detect-libc": "^1.0.3",
149 | "devtools-protocol": "^0.0.901419",
150 | "dir-glob": "^3.0.1",
151 | "doctrine": "^3.0.0",
152 | "dom-serializer": "^1.3.2",
153 | "domelementtype": "^2.2.0",
154 | "domexception": "^2.0.1",
155 | "domhandler": "^4.3.0",
156 | "domutils": "^2.8.0",
157 | "dot-prop": "^5.3.0",
158 | "duplexer3": "^0.1.4",
159 | "ecc-jsbn": "^0.1.2",
160 | "ejs": "^3.1.6",
161 | "electron-to-chromium": "^1.4.65",
162 | "emoji-regex": "^8.0.0",
163 | "encoding": "^0.1.13",
164 | "end-of-stream": "^1.4.4",
165 | "enquirer": "^2.3.6",
166 | "entities": "^2.2.0",
167 | "err-code": "^2.0.3",
168 | "error-ex": "^1.3.2",
169 | "es-abstract": "^1.19.1",
170 | "es-to-primitive": "^1.2.1",
171 | "escalade": "^3.1.1",
172 | "escape-goat": "^2.1.1",
173 | "escape-string-regexp": "^1.0.5",
174 | "escodegen": "^2.0.0",
175 | "eslint-import-resolver-node": "^0.3.6",
176 | "eslint-module-utils": "^2.7.3",
177 | "eslint-scope": "^5.1.1",
178 | "eslint-utils": "^2.1.0",
179 | "eslint-visitor-keys": "^2.1.0",
180 | "espree": "^7.3.1",
181 | "esprima": "^4.0.1",
182 | "esquery": "^1.4.0",
183 | "esrecurse": "^4.3.0",
184 | "estraverse": "^5.3.0",
185 | "esutils": "^2.0.3",
186 | "eventemitter2": "^6.4.5",
187 | "execa": "^4.1.0",
188 | "execall": "^2.0.0",
189 | "extend": "^3.0.2",
190 | "extract-zip": "^2.0.1",
191 | "extsprintf": "^1.3.0",
192 | "fast-deep-equal": "^3.1.3",
193 | "fast-glob": "^3.2.11",
194 | "fast-json-stable-stringify": "^2.1.0",
195 | "fast-levenshtein": "^2.0.6",
196 | "fast-xml-parser": "^3.21.1",
197 | "fastest-levenshtein": "^1.0.12",
198 | "fastq": "^1.13.0",
199 | "fd-slicer": "^1.1.0",
200 | "file-entry-cache": "^6.0.1",
201 | "file-type": "^16.5.3",
202 | "file-uri-to-path": "^2.0.0",
203 | "filelist": "^1.0.2",
204 | "fill-range": "^7.0.1",
205 | "find-up": "^4.1.0",
206 | "flat-cache": "^3.0.4",
207 | "flatted": "^3.2.5",
208 | "forever-agent": "^0.6.1",
209 | "form-data": "^3.0.1",
210 | "fs-constants": "^1.0.0",
211 | "fs-extra": "^10.0.0",
212 | "fs-minipass": "^2.1.0",
213 | "fs.realpath": "^1.0.0",
214 | "ftp": "^0.3.10",
215 | "function-bind": "^1.1.1",
216 | "functional-red-black-tree": "^1.0.1",
217 | "gauge": "^3.0.2",
218 | "gensync": "^1.0.0-beta.2",
219 | "get-intrinsic": "^1.1.1",
220 | "get-stdin": "^8.0.0",
221 | "get-stream": "^5.2.0",
222 | "get-symbol-description": "^1.0.0",
223 | "get-uri": "^3.0.2",
224 | "getpass": "^0.1.7",
225 | "glob": "^7.2.0",
226 | "glob-parent": "^5.1.2",
227 | "global-dirs": "^3.0.0",
228 | "global-modules": "^2.0.0",
229 | "global-prefix": "^3.0.0",
230 | "globals": "^11.12.0",
231 | "globby": "^11.1.0",
232 | "globjoin": "^0.1.4",
233 | "gonzales-pe": "^4.3.0",
234 | "got": "^11.8.3",
235 | "graceful-fs": "^4.2.9",
236 | "har-schema": "^2.0.0",
237 | "har-validator": "^5.1.5",
238 | "hard-rejection": "^2.1.0",
239 | "has": "^1.0.3",
240 | "has-bigints": "^1.0.1",
241 | "has-flag": "^4.0.0",
242 | "has-symbols": "^1.0.2",
243 | "has-tostringtag": "^1.0.0",
244 | "has-unicode": "^2.0.1",
245 | "has-yarn": "^2.1.0",
246 | "hosted-git-info": "^4.1.0",
247 | "html-encoding-sniffer": "^2.0.1",
248 | "html-tags": "^3.1.0",
249 | "htmlparser2": "^3.10.1",
250 | "http-cache-semantics": "^4.1.0",
251 | "http-errors": "^1.8.1",
252 | "http-proxy-agent": "^4.0.1",
253 | "http-signature": "^1.2.0",
254 | "http2-wrapper": "^1.0.3",
255 | "https-proxy-agent": "^5.0.0",
256 | "human-signals": "^1.1.1",
257 | "humanize-ms": "^1.2.1",
258 | "iconv-lite": "^0.6.3",
259 | "ieee754": "^1.2.1",
260 | "ignore": "^5.2.0",
261 | "image-size": "^1.0.1",
262 | "import-fresh": "^3.3.0",
263 | "import-lazy": "^2.1.0",
264 | "imurmurhash": "^0.1.4",
265 | "indent-string": "^4.0.0",
266 | "infer-owner": "^1.0.4",
267 | "inflight": "^1.0.6",
268 | "inherits": "^2.0.4",
269 | "ini": "^2.0.0",
270 | "internal-slot": "^1.0.3",
271 | "invert-kv": "^3.0.1",
272 | "ip": "^1.1.5",
273 | "is-alphabetical": "^1.0.4",
274 | "is-alphanumerical": "^1.0.4",
275 | "is-arrayish": "^0.3.2",
276 | "is-bigint": "^1.0.4",
277 | "is-binary-path": "^2.1.0",
278 | "is-boolean-object": "^1.1.2",
279 | "is-buffer": "^2.0.5",
280 | "is-callable": "^1.2.4",
281 | "is-ci": "^3.0.1",
282 | "is-core-module": "^2.8.1",
283 | "is-date-object": "^1.0.5",
284 | "is-decimal": "^1.0.4",
285 | "is-docker": "^2.2.1",
286 | "is-extglob": "^2.1.1",
287 | "is-fullwidth-code-point": "^3.0.0",
288 | "is-glob": "^4.0.3",
289 | "is-hexadecimal": "^1.0.4",
290 | "is-installed-globally": "^0.4.0",
291 | "is-interactive": "^1.0.0",
292 | "is-lambda": "^1.0.1",
293 | "is-negative-zero": "^2.0.2",
294 | "is-npm": "^5.0.0",
295 | "is-number": "^7.0.0",
296 | "is-number-object": "^1.0.6",
297 | "is-obj": "^2.0.0",
298 | "is-path-inside": "^3.0.3",
299 | "is-plain-obj": "^1.1.0",
300 | "is-potential-custom-element-name": "^1.0.1",
301 | "is-regex": "^1.1.4",
302 | "is-regexp": "^2.1.0",
303 | "is-shared-array-buffer": "^1.0.1",
304 | "is-stream": "^2.0.1",
305 | "is-string": "^1.0.7",
306 | "is-svg": "^4.3.2",
307 | "is-symbol": "^1.0.4",
308 | "is-typedarray": "^1.0.0",
309 | "is-unicode-supported": "^0.1.0",
310 | "is-weakref": "^1.0.2",
311 | "is-wsl": "^2.2.0",
312 | "is-yarn-global": "^0.3.0",
313 | "isarray": "^0.0.1",
314 | "isexe": "^2.0.0",
315 | "isstream": "^0.1.2",
316 | "jake": "^10.8.2",
317 | "js-library-detector": "^6.4.0",
318 | "js-tokens": "^4.0.0",
319 | "js-yaml": "^3.14.1",
320 | "jsbn": "^0.1.1",
321 | "jsdom": "^16.7.0",
322 | "jsesc": "^2.5.2",
323 | "json-buffer": "^3.0.1",
324 | "json-parse-even-better-errors": "^2.3.1",
325 | "json-schema": "^0.4.0",
326 | "json-schema-traverse": "^1.0.0",
327 | "json-stable-stringify-without-jsonify": "^1.0.1",
328 | "json-stringify-safe": "^5.0.1",
329 | "json5": "^2.2.0",
330 | "jsonc-parser": "^3.0.0",
331 | "jsonfile": "^6.1.0",
332 | "jsonparse": "^1.3.1",
333 | "jsprim": "^1.4.2",
334 | "keyv": "^4.1.1",
335 | "kind-of": "^6.0.3",
336 | "known-css-properties": "^0.21.0",
337 | "latest-version": "^5.1.0",
338 | "lcid": "^3.1.1",
339 | "levn": "^0.4.1",
340 | "lines-and-columns": "^1.2.4",
341 | "locate-path": "^5.0.0",
342 | "lockfile": "^1.0.4",
343 | "lodash": "^4.17.21",
344 | "lodash.merge": "^4.6.2",
345 | "lodash.truncate": "^4.4.2",
346 | "log-symbols": "^4.1.0",
347 | "longest-streak": "^2.0.4",
348 | "lowercase-keys": "^2.0.0",
349 | "lru-cache": "^6.0.0",
350 | "make-dir": "^3.1.0",
351 | "make-fetch-happen": "^9.1.0",
352 | "map-age-cleaner": "^0.1.3",
353 | "map-obj": "^4.3.0",
354 | "mathml-tag-names": "^2.1.3",
355 | "mdast-util-from-markdown": "^0.8.5",
356 | "mdast-util-to-markdown": "^0.6.5",
357 | "mdast-util-to-string": "^2.0.0",
358 | "mdn-data": "^2.0.26",
359 | "mem": "^5.1.1",
360 | "meow": "^9.0.0",
361 | "merge-stream": "^2.0.0",
362 | "merge2": "^1.4.1",
363 | "metaviewport-parser": "^0.2.0",
364 | "micromark": "^2.11.4",
365 | "micromatch": "^4.0.4",
366 | "mime-db": "^1.51.0",
367 | "mime-types": "^2.1.34",
368 | "mimic-fn": "^2.1.0",
369 | "mimic-response": "^1.0.1",
370 | "min-indent": "^1.0.1",
371 | "minimatch": "^3.0.5",
372 | "minimist": "^1.2.5",
373 | "minimist-options": "^4.1.0",
374 | "minipass": "^3.1.6",
375 | "minipass-collect": "^1.0.2",
376 | "minipass-fetch": "^1.4.1",
377 | "minipass-flush": "^1.0.5",
378 | "minipass-json-stream": "^1.0.1",
379 | "minipass-pipeline": "^1.2.4",
380 | "minipass-sized": "^1.0.3",
381 | "minizlib": "^2.1.2",
382 | "mkdirp": "^1.0.4",
383 | "ms": "^2.1.2",
384 | "mutationobserver-shim": "^0.3.7",
385 | "nan": "^2.15.0",
386 | "nanoid": "^3.2.0",
387 | "natural-compare": "^1.4.0",
388 | "negotiator": "^0.6.3",
389 | "netmask": "^2.0.2",
390 | "node-fetch": "^2.6.7",
391 | "node-releases": "^2.0.1",
392 | "nopt": "^5.0.0",
393 | "normalize-package-data": "^3.0.3",
394 | "normalize-path": "^3.0.0",
395 | "normalize-range": "^0.1.2",
396 | "normalize-selector": "^0.2.0",
397 | "normalize-url": "^6.1.0",
398 | "npm-package-arg": "^8.1.5",
399 | "npm-registry-fetch": "^11.0.0",
400 | "npm-run-path": "^4.0.1",
401 | "npmlog": "^5.0.1",
402 | "nth-check": "^2.0.1",
403 | "num2fraction": "^1.2.2",
404 | "nwsapi": "^2.2.0",
405 | "oauth-sign": "^0.9.0",
406 | "object-assign": "^4.1.1",
407 | "object-inspect": "^1.12.0",
408 | "object-keys": "^1.1.1",
409 | "object.assign": "^4.1.2",
410 | "object.entries": "^1.1.5",
411 | "object.values": "^1.1.5",
412 | "once": "^1.4.0",
413 | "onetime": "^5.1.2",
414 | "optionator": "^0.9.1",
415 | "ora": "^5.4.1",
416 | "os-locale": "^5.0.0",
417 | "p-cancelable": "^2.1.1",
418 | "p-defer": "^1.0.0",
419 | "p-is-promise": "^2.1.0",
420 | "p-limit": "^2.3.0",
421 | "p-locate": "^4.1.0",
422 | "p-map": "^4.0.0",
423 | "p-try": "^2.2.0",
424 | "pac-proxy-agent": "^5.0.0",
425 | "pac-resolver": "^5.0.0",
426 | "package-json": "^6.5.0",
427 | "parent-module": "^1.0.1",
428 | "parse-entities": "^2.0.0",
429 | "parse-json": "^5.2.0",
430 | "parse5": "^6.0.1",
431 | "parse5-htmlparser2-tree-adapter": "^6.0.1",
432 | "path-exists": "^4.0.0",
433 | "path-is-absolute": "^1.0.1",
434 | "path-key": "^3.1.1",
435 | "path-parse": "^1.0.7",
436 | "path-type": "^4.0.0",
437 | "peek-readable": "^4.1.0",
438 | "pend": "^1.2.0",
439 | "performance-now": "^2.1.0",
440 | "picocolors": "^1.0.0",
441 | "picomatch": "^2.3.1",
442 | "pkg-dir": "^4.2.0",
443 | "postcss": "^8.4.6",
444 | "postcss-html": "^0.36.0",
445 | "postcss-less": "^5.0.0",
446 | "postcss-media-query-parser": "^0.2.3",
447 | "postcss-resolve-nested-selector": "^0.1.1",
448 | "postcss-safe-parser": "^6.0.0",
449 | "postcss-sass": "^0.5.0",
450 | "postcss-scss": "^4.0.3",
451 | "postcss-selector-parser": "^6.0.9",
452 | "postcss-syntax": "^0.36.2",
453 | "postcss-value-parser": "^4.2.0",
454 | "prelude-ls": "^1.2.1",
455 | "prepend-http": "^2.0.0",
456 | "progress": "^2.0.1",
457 | "promise-inflight": "^1.0.1",
458 | "promise-retry": "^2.0.1",
459 | "proxy-agent": "^5.0.0",
460 | "proxy-from-env": "^1.1.0",
461 | "psl": "^1.8.0",
462 | "pump": "^3.0.0",
463 | "punycode": "^2.1.1",
464 | "pupa": "^2.1.1",
465 | "puppeteer-core": "^10.4.0",
466 | "q": "^1.5.1",
467 | "qs": "^6.5.3",
468 | "queue": "^6.0.2",
469 | "queue-microtask": "^1.2.3",
470 | "quick-lru": "^5.1.1",
471 | "raw-body": "^2.4.2",
472 | "rc": "^1.2.8",
473 | "read-pkg": "^5.2.0",
474 | "read-pkg-up": "^7.0.1",
475 | "readable-stream": "^3.6.0",
476 | "readable-web-to-node-stream": "^3.0.2",
477 | "readdirp": "^3.6.0",
478 | "redent": "^3.0.0",
479 | "regexpp": "^3.2.0",
480 | "registry-auth-token": "^4.2.1",
481 | "registry-url": "^5.1.0",
482 | "remark": "^13.0.0",
483 | "remark-parse": "^9.0.0",
484 | "remark-stringify": "^9.0.1",
485 | "repeat-string": "^1.6.1",
486 | "request": "^2.88.2",
487 | "require-from-string": "^2.0.2",
488 | "resolve": "^1.22.0",
489 | "resolve-alpn": "^1.2.1",
490 | "resolve-from": "^5.0.0",
491 | "responselike": "^2.0.0",
492 | "restore-cursor": "^3.1.0",
493 | "retry": "^0.12.0",
494 | "reusify": "^1.0.4",
495 | "rimraf": "^3.0.2",
496 | "run-parallel": "^1.2.0",
497 | "safe-buffer": "^5.2.1",
498 | "safer-buffer": "^2.1.2",
499 | "saxes": "^5.0.1",
500 | "semver": "^7.3.5",
501 | "semver-diff": "^3.1.1",
502 | "set-blocking": "^2.0.0",
503 | "setimmediate": "^1.0.5",
504 | "setprototypeof": "^1.2.0",
505 | "shebang-command": "^2.0.0",
506 | "shebang-regex": "^3.0.0",
507 | "side-channel": "^1.0.4",
508 | "signal-exit": "^3.0.7",
509 | "simple-concat": "^1.0.1",
510 | "simple-get": "^3.1.1",
511 | "simple-swizzle": "^0.2.2",
512 | "slash": "^3.0.0",
513 | "slice-ansi": "^4.0.0",
514 | "smart-buffer": "^4.2.0",
515 | "socks": "^2.6.2",
516 | "socks-proxy-agent": "^6.1.1",
517 | "source-map": "^0.6.1",
518 | "source-map-js": "^1.0.2",
519 | "spdx-correct": "^3.1.1",
520 | "spdx-exceptions": "^2.3.0",
521 | "spdx-expression-parse": "^3.0.1",
522 | "spdx-license-ids": "^3.0.11",
523 | "specificity": "^0.4.1",
524 | "sprintf-js": "^1.0.3",
525 | "sshpk": "^1.17.0",
526 | "ssri": "^8.0.1",
527 | "statuses": "^1.5.0",
528 | "string_decoder": "^1.3.0",
529 | "string-width": "^4.2.3",
530 | "string.prototype.trimend": "^1.0.4",
531 | "string.prototype.trimstart": "^1.0.4",
532 | "strip-ansi": "^6.0.1",
533 | "strip-bom": "^3.0.0",
534 | "strip-final-newline": "^2.0.0",
535 | "strip-indent": "^3.0.0",
536 | "strip-json-comments": "^3.1.1",
537 | "strnum": "^1.0.5",
538 | "strtok3": "^6.3.0",
539 | "style-search": "^0.1.0",
540 | "stylelint-config-recommended": "^4.0.0",
541 | "sugarss": "^2.0.0",
542 | "supports-color": "^7.2.0",
543 | "supports-preserve-symlinks-flag": "^1.0.0",
544 | "svg-tags": "^1.0.0",
545 | "symbol-tree": "^3.2.4",
546 | "table": "^6.8.0",
547 | "tar": "^6.1.11",
548 | "tar-fs": "^2.0.0",
549 | "tar-stream": "^2.2.0",
550 | "text-table": "^0.2.0",
551 | "through": "^2.3.8",
552 | "to-fast-properties": "^2.0.0",
553 | "to-readable-stream": "^1.0.0",
554 | "to-regex-range": "^5.0.1",
555 | "toidentifier": "^1.0.1",
556 | "token-types": "^4.1.1",
557 | "tough-cookie": "^4.0.0",
558 | "tr46": "^2.1.0",
559 | "trim-newlines": "^3.0.1",
560 | "trough": "^1.0.5",
561 | "tsconfig-paths": "^3.12.0",
562 | "tslib": "^2.3.1",
563 | "tsutils": "^3.21.0",
564 | "tunnel-agent": "^0.6.0",
565 | "tweetnacl": "^0.14.5",
566 | "type-check": "^0.4.0",
567 | "type-fest": "^0.20.2",
568 | "typedarray-to-buffer": "^3.1.5",
569 | "typescript": "^4.5.5",
570 | "unbox-primitive": "^1.0.1",
571 | "unbzip2-stream": "^1.3.3",
572 | "unified": "^9.2.2",
573 | "unique-filename": "^1.1.1",
574 | "unique-slug": "^2.0.2",
575 | "unique-string": "^2.0.0",
576 | "unist-util-find-all-after": "^3.0.2",
577 | "unist-util-is": "^4.1.0",
578 | "unist-util-stringify-position": "^2.0.3",
579 | "universalify": "^2.0.0",
580 | "unpipe": "^1.0.0",
581 | "update-notifier": "^5.1.0",
582 | "uri-js": "^4.4.1",
583 | "url-parse-lax": "^3.0.0",
584 | "util-deprecate": "^1.0.2",
585 | "uuid": "^3.4.0",
586 | "v8-compile-cache": "^2.3.0",
587 | "validate-npm-package-license": "^3.0.4",
588 | "validate-npm-package-name": "^3.0.0",
589 | "verror": "^1.10.0",
590 | "vfile": "^4.2.1",
591 | "vfile-message": "^2.0.4",
592 | "vm2": "^3.9.5",
593 | "w3c-hr-time": "^1.0.2",
594 | "w3c-xmlserializer": "^2.0.0",
595 | "wcwidth": "^1.0.1",
596 | "webidl-conversions": "^6.1.0",
597 | "whatwg-encoding": "^1.0.5",
598 | "whatwg-mimetype": "^2.3.0",
599 | "whatwg-url": "^8.7.0",
600 | "which": "^2.0.2",
601 | "which-boxed-primitive": "^1.0.2",
602 | "wide-align": "^1.1.5",
603 | "widest-line": "^3.1.0",
604 | "word-wrap": "^1.2.3",
605 | "wrap-ansi": "^7.0.0",
606 | "wrappy": "^1.0.2",
607 | "write-file-atomic": "^3.0.3",
608 | "ws": "^7.5.6",
609 | "xdg-basedir": "^4.0.0",
610 | "xml-name-validator": "^3.0.0",
611 | "xmlchars": "^2.2.0",
612 | "xregexp": "^2.0.0",
613 | "yallist": "^4.0.0",
614 | "yaml": "^1.10.2",
615 | "yargs-parser": "^20.2.9",
616 | "yauzl": "^2.10.0",
617 | "zwitch": "^1.0.5"
618 | }
619 | }
620 |
--------------------------------------------------------------------------------