├── LICENSE ├── README.md ├── _config.yml ├── google7521b4b8a878888b.html ├── node_modules ├── .package-lock.json ├── @kwsites │ ├── file-exists │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── dist │ │ │ ├── index.d.ts │ │ │ ├── index.js │ │ │ ├── index.js.map │ │ │ ├── src │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ └── index.js.map │ │ │ └── test │ │ │ │ ├── __mocks__ │ │ │ │ ├── fs.d.ts │ │ │ │ ├── fs.js │ │ │ │ └── fs.js.map │ │ │ │ ├── exists.spec.d.ts │ │ │ │ ├── exists.spec.js │ │ │ │ └── exists.spec.js.map │ │ ├── package.json │ │ └── readme.md │ └── promise-deferred │ │ ├── LICENSE │ │ ├── dist │ │ ├── index.d.ts │ │ ├── index.js │ │ └── index.js.map │ │ └── package.json ├── debug │ ├── LICENSE │ ├── README.md │ ├── package.json │ └── src │ │ ├── browser.js │ │ ├── common.js │ │ ├── index.js │ │ └── node.js ├── ms │ ├── index.js │ ├── license.md │ ├── package.json │ └── readme.md └── simple-git │ ├── dist │ ├── cjs │ │ ├── index.js │ │ └── index.js.map │ ├── esm │ │ ├── index.js │ │ ├── index.js.map │ │ └── package.json │ ├── src │ │ └── lib │ │ │ ├── api.d.ts │ │ │ ├── args │ │ │ ├── log-format.d.ts │ │ │ └── pathspec.d.ts │ │ │ ├── errors │ │ │ ├── git-construct-error.d.ts │ │ │ ├── git-error.d.ts │ │ │ ├── git-plugin-error.d.ts │ │ │ ├── git-response-error.d.ts │ │ │ └── task-configuration-error.d.ts │ │ │ ├── git-factory.d.ts │ │ │ ├── git-logger.d.ts │ │ │ ├── parsers │ │ │ ├── parse-branch-delete.d.ts │ │ │ ├── parse-branch.d.ts │ │ │ ├── parse-commit.d.ts │ │ │ ├── parse-diff-summary.d.ts │ │ │ ├── parse-fetch.d.ts │ │ │ ├── parse-list-log-summary.d.ts │ │ │ ├── parse-merge.d.ts │ │ │ ├── parse-move.d.ts │ │ │ ├── parse-pull.d.ts │ │ │ ├── parse-push.d.ts │ │ │ ├── parse-remote-messages.d.ts │ │ │ └── parse-remote-objects.d.ts │ │ │ ├── plugins │ │ │ ├── abort-plugin.d.ts │ │ │ ├── block-unsafe-operations-plugin.d.ts │ │ │ ├── command-config-prefixing-plugin.d.ts │ │ │ ├── completion-detection.plugin.d.ts │ │ │ ├── custom-binary.plugin.d.ts │ │ │ ├── error-detection.plugin.d.ts │ │ │ ├── index.d.ts │ │ │ ├── plugin-store.d.ts │ │ │ ├── progress-monitor-plugin.d.ts │ │ │ ├── simple-git-plugin.d.ts │ │ │ ├── spawn-options-plugin.d.ts │ │ │ ├── suffix-paths.plugin.d.ts │ │ │ └── timout-plugin.d.ts │ │ │ ├── responses │ │ │ ├── BranchDeleteSummary.d.ts │ │ │ ├── BranchSummary.d.ts │ │ │ ├── CheckIgnore.d.ts │ │ │ ├── CleanSummary.d.ts │ │ │ ├── ConfigList.d.ts │ │ │ ├── DiffSummary.d.ts │ │ │ ├── FileStatusSummary.d.ts │ │ │ ├── GetRemoteSummary.d.ts │ │ │ ├── InitSummary.d.ts │ │ │ ├── MergeSummary.d.ts │ │ │ ├── PullSummary.d.ts │ │ │ ├── StatusSummary.d.ts │ │ │ └── TagList.d.ts │ │ │ ├── runners │ │ │ ├── git-executor-chain.d.ts │ │ │ ├── git-executor.d.ts │ │ │ ├── promise-wrapped.d.ts │ │ │ ├── scheduler.d.ts │ │ │ └── tasks-pending-queue.d.ts │ │ │ ├── simple-git-api.d.ts │ │ │ ├── task-callback.d.ts │ │ │ ├── tasks │ │ │ ├── apply-patch.d.ts │ │ │ ├── branch.d.ts │ │ │ ├── change-working-directory.d.ts │ │ │ ├── check-ignore.d.ts │ │ │ ├── check-is-repo.d.ts │ │ │ ├── checkout.d.ts │ │ │ ├── clean.d.ts │ │ │ ├── clone.d.ts │ │ │ ├── commit.d.ts │ │ │ ├── config.d.ts │ │ │ ├── count-objects.d.ts │ │ │ ├── diff-name-status.d.ts │ │ │ ├── diff.d.ts │ │ │ ├── fetch.d.ts │ │ │ ├── first-commit.d.ts │ │ │ ├── grep.d.ts │ │ │ ├── hash-object.d.ts │ │ │ ├── init.d.ts │ │ │ ├── log.d.ts │ │ │ ├── merge.d.ts │ │ │ ├── move.d.ts │ │ │ ├── pull.d.ts │ │ │ ├── push.d.ts │ │ │ ├── remote.d.ts │ │ │ ├── reset.d.ts │ │ │ ├── show.d.ts │ │ │ ├── stash-list.d.ts │ │ │ ├── status.d.ts │ │ │ ├── sub-module.d.ts │ │ │ ├── tag.d.ts │ │ │ ├── task.d.ts │ │ │ └── version.d.ts │ │ │ ├── types │ │ │ ├── handlers.d.ts │ │ │ ├── index.d.ts │ │ │ └── tasks.d.ts │ │ │ └── utils │ │ │ ├── argument-filters.d.ts │ │ │ ├── exit-codes.d.ts │ │ │ ├── git-output-streams.d.ts │ │ │ ├── index.d.ts │ │ │ ├── line-parser.d.ts │ │ │ ├── simple-git-options.d.ts │ │ │ ├── task-options.d.ts │ │ │ ├── task-parser.d.ts │ │ │ └── util.d.ts │ └── typings │ │ ├── errors.d.ts │ │ ├── index.d.ts │ │ ├── response.d.ts │ │ ├── simple-git.d.ts │ │ └── types.d.ts │ ├── package.json │ ├── promise.js │ └── readme.md ├── package-lock.json ├── package.json ├── project-10_404_error_page ├── css │ └── index.css ├── img │ └── error.png ├── index.html └── js │ └── index.js ├── project-11_analog_clock ├── css │ └── index.css ├── index.html └── js │ └── index.js ├── project-12_contact_form ├── css │ └── index.css ├── index.html └── js │ └── index.js ├── project-13_profile_card ├── css │ └── index.css ├── img │ └── profile.jpg ├── index.html └── js │ └── index.js ├── project-14_music_loader ├── css │ └── index.css ├── index.html └── js │ └── index.js ├── project-15_currrency_convertor ├── css │ └── index.css ├── index.html └── js │ ├── country.js │ └── index.js ├── project-16_pricing_component ├── app.js ├── images │ ├── bg-bottom.svg │ ├── bg-top.svg │ ├── favicon-32x32.png │ └── project-preview.png ├── index.html └── styles.css ├── project-17_remove_Signature_bg ├── favicon.png ├── images │ └── remove_bg.png ├── index.html ├── script.js └── styles.css ├── project-18_toggle_dark_light_mode ├── index.html ├── script.js └── style.css ├── project-19_weather_app ├── img │ ├── clear.png │ ├── clouds.png │ ├── demo.png │ ├── drizzle.png │ ├── haze.png │ ├── humidity.png │ ├── mist.png │ ├── rain.png │ ├── search.png │ ├── snow.png │ └── wind.png ├── index.html ├── script.js └── style.css ├── project-1_landing-page ├── css │ └── index.css ├── img │ ├── features.png │ └── hero-bg.svg ├── index.html ├── js │ └── index.js └── scss │ └── index.scss ├── project-20_bubble_game ├── index.html ├── index.js └── style.css ├── project-2_calculator ├── css │ └── index.css ├── index.html └── js │ └── index.js ├── project-3_wavy_login_form ├── css │ └── index.css ├── index.html └── js │ └── index.js ├── project-4_random_quote_generator ├── css │ └── index.css ├── index.html └── js │ └── index.js ├── project-5_random_color_changer ├── css │ └── index.css ├── index.html └── js │ └── index.js ├── project-6_qr_code_generator ├── css │ ├── index.css │ └── index.scss ├── index.html └── js │ └── index.js ├── project-7_stopwatch_timer ├── css │ └── index.css ├── index.html └── js │ └── index.js ├── project-8_password_generator ├── css │ └── index.css ├── index.html └── js │ └── index.js ├── project-9_responsive_navbar ├── css │ └── index.css ├── index.html └── js │ └── index.js └── sitemap.xml /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Arman Idrisi 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Frontend Projects 🌐 2 | 3 | [![GitHub contributors](https://img.shields.io/github/contributors/ArmanIdrisi/frontend-projects)](https://github.com/ArmanIdrisi/frontend-projects/graphs/contributors) 4 | [![GitHub last commit](https://img.shields.io/github/last-commit/ArmanIdrisi/frontend-projects)](https://github.com/ArmanIdrisi/frontend-projects/commits/main) 5 | 6 | This repository contains a collection of frontend projects.Each project is built using HTML, CSS, and JavaScript. 7 | 8 | ## Projects 📂 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 |
#Project NameLink
01Landing PageClick Here
02CalculatorClick Here
03Wavy Login FormClick Here
04Random Quote GeneratorClick Here
05Random Background ChangerClick Here
06Qr Code GeneratorClick Here
07Stopwatch TimerClick Here
08Password GeneratorClick Here
09Responsive NavbarClick Here
10404 Error PageClick Here
11Analog ClockClick Here
12Contact FormClick Here
13Profile CardClick Here
14Music PreloaderClick Here
15Currency ConverterClick Here
16Pricing cardClick Here
17Background Remover AppClick Here
18Toggle Dark & Light ModeClick Here
19Weather AppClick Here
20Bubble GameClick Here
117 | 118 | 119 | ## Installation 🚀 120 | 121 | To run any of the projects locally, simply clone this repository using the following command: 122 | 123 | ```bash 124 | git clone https://github.com/ArmanIdrisi/frontend-projects.git 125 | ``` 126 | 127 | ## Usage 💻 128 | 129 | Each project is contained in its own directory, and can be opened and run directly in a web browser. 130 | 131 | ## Contributing 🤝 132 | 133 | Contributions to this repository are welcome! If you have a project you'd like to add, simply create a new branch, add your project, and create a pull request. 134 | 135 | ## License 📝 136 | 137 | This repository is licensed under the MIT license. See [LICENSE](/LICENSE) for more information. 138 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-cayman 2 | 3 | title: Explore Engaging HTML, CSS, and JavaScript Frontend Projects for Your Next Web Development Adventure 4 | 5 | show_downloads: false 6 | 7 | include: [README.md] 8 | 9 | plugins: 10 | 11 | - jemoji -------------------------------------------------------------------------------- /google7521b4b8a878888b.html: -------------------------------------------------------------------------------- 1 | google-site-verification: google7521b4b8a878888b.html -------------------------------------------------------------------------------- /node_modules/.package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "frontend-project", 3 | "version": "1.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "node_modules/@kwsites/file-exists": { 8 | "version": "1.1.1", 9 | "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", 10 | "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", 11 | "license": "MIT", 12 | "dependencies": { 13 | "debug": "^4.1.1" 14 | } 15 | }, 16 | "node_modules/@kwsites/promise-deferred": { 17 | "version": "1.1.1", 18 | "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", 19 | "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", 20 | "license": "MIT" 21 | }, 22 | "node_modules/debug": { 23 | "version": "4.3.6", 24 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", 25 | "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", 26 | "license": "MIT", 27 | "dependencies": { 28 | "ms": "2.1.2" 29 | }, 30 | "engines": { 31 | "node": ">=6.0" 32 | }, 33 | "peerDependenciesMeta": { 34 | "supports-color": { 35 | "optional": true 36 | } 37 | } 38 | }, 39 | "node_modules/ms": { 40 | "version": "2.1.2", 41 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 42 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 43 | "license": "MIT" 44 | }, 45 | "node_modules/simple-git": { 46 | "version": "3.25.0", 47 | "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.25.0.tgz", 48 | "integrity": "sha512-KIY5sBnzc4yEcJXW7Tdv4viEz8KyG+nU0hay+DWZasvdFOYKeUZ6Xc25LUHHjw0tinPT7O1eY6pzX7pRT1K8rw==", 49 | "license": "MIT", 50 | "dependencies": { 51 | "@kwsites/file-exists": "^1.1.1", 52 | "@kwsites/promise-deferred": "^1.1.1", 53 | "debug": "^4.3.5" 54 | }, 55 | "funding": { 56 | "type": "github", 57 | "url": "https://github.com/steveukx/git-js?sponsor=1" 58 | } 59 | } 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /node_modules/@kwsites/file-exists/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | 2 | # Release History 3 | 4 | ## 1.1.1 5 | 6 | - Add dependency on `debug` to log results of the file system checks 7 | - Add `jest` tests 8 | 9 | # 1.0.0 10 | 11 | - First public release, a simple typescript library for checking whether a path exists 12 | on the file system and optionally whether it points to a file or folder. 13 | -------------------------------------------------------------------------------- /node_modules/@kwsites/file-exists/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Steve King 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /node_modules/@kwsites/file-exists/dist/index.d.ts: -------------------------------------------------------------------------------- 1 | export * from './src'; 2 | -------------------------------------------------------------------------------- /node_modules/@kwsites/file-exists/dist/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | function __export(m) { 3 | for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; 4 | } 5 | Object.defineProperty(exports, "__esModule", { value: true }); 6 | __export(require("./src")); 7 | //# sourceMappingURL=index.js.map -------------------------------------------------------------------------------- /node_modules/@kwsites/file-exists/dist/index.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;;;AACA,2BAAsB"} -------------------------------------------------------------------------------- /node_modules/@kwsites/file-exists/dist/src/index.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Synchronous validation of a path existing either as a file or as a directory. 3 | * 4 | * @param {string} path The path to check 5 | * @param {number} type One or both of the exported numeric constants 6 | */ 7 | export declare function exists(path: string, type?: number): boolean; 8 | /** 9 | * Constant representing a file 10 | */ 11 | export declare const FILE = 1; 12 | /** 13 | * Constant representing a folder 14 | */ 15 | export declare const FOLDER = 2; 16 | /** 17 | * Constant representing either a file or a folder 18 | */ 19 | export declare const READABLE: number; 20 | -------------------------------------------------------------------------------- /node_modules/@kwsites/file-exists/dist/src/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __importDefault = (this && this.__importDefault) || function (mod) { 3 | return (mod && mod.__esModule) ? mod : { "default": mod }; 4 | }; 5 | Object.defineProperty(exports, "__esModule", { value: true }); 6 | const fs_1 = require("fs"); 7 | const debug_1 = __importDefault(require("debug")); 8 | const log = debug_1.default('@kwsites/file-exists'); 9 | function check(path, isFile, isDirectory) { 10 | log(`checking %s`, path); 11 | try { 12 | const stat = fs_1.statSync(path); 13 | if (stat.isFile() && isFile) { 14 | log(`[OK] path represents a file`); 15 | return true; 16 | } 17 | if (stat.isDirectory() && isDirectory) { 18 | log(`[OK] path represents a directory`); 19 | return true; 20 | } 21 | log(`[FAIL] path represents something other than a file or directory`); 22 | return false; 23 | } 24 | catch (e) { 25 | if (e.code === 'ENOENT') { 26 | log(`[FAIL] path is not accessible: %o`, e); 27 | return false; 28 | } 29 | log(`[FATAL] %o`, e); 30 | throw e; 31 | } 32 | } 33 | /** 34 | * Synchronous validation of a path existing either as a file or as a directory. 35 | * 36 | * @param {string} path The path to check 37 | * @param {number} type One or both of the exported numeric constants 38 | */ 39 | function exists(path, type = exports.READABLE) { 40 | return check(path, (type & exports.FILE) > 0, (type & exports.FOLDER) > 0); 41 | } 42 | exports.exists = exists; 43 | /** 44 | * Constant representing a file 45 | */ 46 | exports.FILE = 1; 47 | /** 48 | * Constant representing a folder 49 | */ 50 | exports.FOLDER = 2; 51 | /** 52 | * Constant representing either a file or a folder 53 | */ 54 | exports.READABLE = exports.FILE + exports.FOLDER; 55 | //# sourceMappingURL=index.js.map -------------------------------------------------------------------------------- /node_modules/@kwsites/file-exists/dist/src/index.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;AAAA,2BAA8B;AAC9B,kDAA0B;AAE1B,MAAM,GAAG,GAAG,eAAK,CAAC,sBAAsB,CAAC,CAAC;AAE1C,SAAS,KAAK,CAAC,IAAY,EAAE,MAAe,EAAE,WAAoB;IAC/D,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;IAEzB,IAAI;QACD,MAAM,IAAI,GAAG,aAAQ,CAAC,IAAI,CAAC,CAAC;QAE5B,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,MAAM,EAAE;YAC1B,GAAG,CAAC,6BAA6B,CAAC,CAAC;YACnC,OAAO,IAAI,CAAC;SACd;QAED,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,WAAW,EAAE;YACpC,GAAG,CAAC,kCAAkC,CAAC,CAAC;YACxC,OAAO,IAAI,CAAC;SACd;QAED,GAAG,CAAC,iEAAiE,CAAC,CAAC;QACvE,OAAO,KAAK,CAAC;KACf;IAAC,OAAO,CAAC,EAAE;QACT,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE;YACtB,GAAG,CAAC,mCAAmC,EAAE,CAAC,CAAC,CAAC;YAC5C,OAAO,KAAK,CAAC;SACf;QAED,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;QACrB,MAAM,CAAC,CAAC;KACV;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAgB,MAAM,CAAC,IAAY,EAAE,OAAe,gBAAQ;IACzD,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,GAAG,YAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,cAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9D,CAAC;AAFD,wBAEC;AAED;;GAEG;AACU,QAAA,IAAI,GAAG,CAAC,CAAC;AAEtB;;GAEG;AACU,QAAA,MAAM,GAAG,CAAC,CAAC;AAExB;;GAEG;AACU,QAAA,QAAQ,GAAG,YAAI,GAAG,cAAM,CAAC"} -------------------------------------------------------------------------------- /node_modules/@kwsites/file-exists/dist/test/__mocks__/fs.d.ts: -------------------------------------------------------------------------------- 1 | export declare function statSync(...args: any[]): any; 2 | export declare function addStatSyncMock(fn: any): void; 3 | export declare function assertMocksUsed(): void; 4 | declare const mockFs: { 5 | statSync: typeof statSync; 6 | }; 7 | export default mockFs; 8 | -------------------------------------------------------------------------------- /node_modules/@kwsites/file-exists/dist/test/__mocks__/fs.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | let statSyncMocks = []; 4 | function statSync(...args) { 5 | const mock = statSyncMocks.shift(); 6 | if (typeof mock !== 'function') { 7 | throw new Error(`fs.statSync called without configuring a mock`); 8 | } 9 | return mock(...args); 10 | } 11 | exports.statSync = statSync; 12 | function addStatSyncMock(fn) { 13 | statSyncMocks.push(fn); 14 | } 15 | exports.addStatSyncMock = addStatSyncMock; 16 | function assertMocksUsed() { 17 | if (statSyncMocks.length) { 18 | throw new Error(`fs.afterEach: statSync has ${statSyncMocks.length} unused mocks`); 19 | } 20 | } 21 | exports.assertMocksUsed = assertMocksUsed; 22 | const mockFs = { 23 | statSync, 24 | }; 25 | exports.default = mockFs; 26 | //# sourceMappingURL=fs.js.map -------------------------------------------------------------------------------- /node_modules/@kwsites/file-exists/dist/test/__mocks__/fs.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"fs.js","sourceRoot":"","sources":["../../../test/__mocks__/fs.ts"],"names":[],"mappings":";;AACA,IAAI,aAAa,GAAU,EAAE,CAAC;AAE9B,SAAgB,QAAQ,CAAC,GAAG,IAAW;IACpC,MAAO,IAAI,GAAG,aAAa,CAAC,KAAK,EAAE,CAAC;IACpC,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;QAC7B,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;KACnE;IAED,OAAO,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AACxB,CAAC;AAPD,4BAOC;AAED,SAAgB,eAAe,CAAC,EAAO;IACpC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC1B,CAAC;AAFD,0CAEC;AAED,SAAgB,eAAe;IAC5B,IAAI,aAAa,CAAC,MAAM,EAAE;QACvB,MAAM,IAAI,KAAK,CAAC,8BAA8B,aAAa,CAAC,MAAM,eAAe,CAAC,CAAC;KACrF;AACJ,CAAC;AAJD,0CAIC;AAED,MAAM,MAAM,GAAG;IACZ,QAAQ;CACV,CAAA;AAED,kBAAe,MAAM,CAAC"} -------------------------------------------------------------------------------- /node_modules/@kwsites/file-exists/dist/test/exists.spec.d.ts: -------------------------------------------------------------------------------- 1 | export {}; 2 | -------------------------------------------------------------------------------- /node_modules/@kwsites/file-exists/dist/test/exists.spec.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | jest.mock('fs'); 4 | //@ts-ignore 5 | const fs_1 = require("fs"); 6 | const src_1 = require("../src"); 7 | describe(`exists`, () => { 8 | let statSync; 9 | let statSyncMock; 10 | let path; 11 | beforeEach(() => { 12 | path = `./path/${Math.random()}`; 13 | fs_1.addStatSyncMock(statSyncMock = jest.fn(() => statSync())); 14 | }); 15 | afterEach(() => { 16 | fs_1.assertMocksUsed(); 17 | statSync = statSyncMock = undefined; 18 | }); 19 | describe('known errors', () => { 20 | beforeEach(() => givenStatSyncThrows({ code: 'ENOENT' })); 21 | it('with type', () => { 22 | expect(src_1.exists(path, src_1.READABLE)).toBe(false); 23 | }); 24 | it('with type omitted', () => { 25 | expect(src_1.exists(path)).toBe(false); 26 | }); 27 | }); 28 | describe('unknown errors', () => { 29 | let err; 30 | beforeEach(() => err = givenStatSyncThrows(new Error('something'))); 31 | it('with type', () => { 32 | expect(() => src_1.exists(path, src_1.READABLE)).toThrow(err); 33 | }); 34 | it('with type omitted', () => { 35 | expect(() => src_1.exists(path)).toThrow(err); 36 | }); 37 | }); 38 | describe('path is a file', () => { 39 | beforeEach(() => givenStatSyncIsA('file')); 40 | existsReturns(true, false, true); 41 | }); 42 | describe('path is a folder', () => { 43 | beforeEach(() => givenStatSyncIsA('folder')); 44 | existsReturns(false, true, true); 45 | }); 46 | describe('path is unknown', () => { 47 | beforeEach(() => givenStatSyncIsA('unknown')); 48 | existsReturns(false, false, false); 49 | }); 50 | function existsReturns(file, folder, readable) { 51 | it('when searching for a file', () => { 52 | expect(src_1.exists(path, src_1.FILE)).toBe(file); 53 | }); 54 | it('when searching for a folder', () => { 55 | expect(src_1.exists(path, src_1.FOLDER)).toBe(folder); 56 | }); 57 | it('when searching for either', () => { 58 | expect(src_1.exists(path, src_1.READABLE)).toBe(readable); 59 | }); 60 | it('when searching without a type', () => { 61 | expect(src_1.exists(path)).toBe(readable); 62 | }); 63 | } 64 | function givenStatSyncThrows(err) { 65 | statSync = () => { throw err; }; 66 | return err; 67 | } 68 | function givenStatSyncIsA(type) { 69 | const mockStat = { 70 | isFile() { return type === 'file'; }, 71 | isDirectory() { return type === 'folder'; }, 72 | }; 73 | statSync = () => mockStat; 74 | return mockStat; 75 | } 76 | }); 77 | //# sourceMappingURL=exists.spec.js.map -------------------------------------------------------------------------------- /node_modules/@kwsites/file-exists/dist/test/exists.spec.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"exists.spec.js","sourceRoot":"","sources":["../../test/exists.spec.ts"],"names":[],"mappings":";;AACA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEhB,YAAY;AACZ,2BAAsD;AACtD,gCAAwD;AAExD,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IAErB,IAAI,QAAa,CAAC;IAClB,IAAI,YAAiB,CAAC;IACtB,IAAI,IAAY,CAAC;IAEjB,UAAU,CAAC,GAAG,EAAE;QACb,IAAI,GAAG,UAAU,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;QACjC,oBAAe,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACZ,oBAAe,EAAE,CAAC;QAClB,QAAQ,GAAG,YAAY,GAAG,SAAS,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC3B,UAAU,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,EAAC,IAAI,EAAE,QAAQ,EAAC,CAAC,CAAC,CAAC;QAExD,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE;YAClB,MAAM,CAAC,YAAM,CAAC,IAAI,EAAE,cAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;YAC1B,MAAM,CAAC,YAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC,CAAC,CAAA;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC7B,IAAI,GAAU,CAAC;QACf,UAAU,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,mBAAmB,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAEpE,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE;YAClB,MAAM,CAAC,GAAG,EAAE,CAAC,YAAM,CAAC,IAAI,EAAE,cAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;YAC1B,MAAM,CAAC,GAAG,EAAE,CAAC,YAAM,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAA;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC7B,UAAU,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;QAC3C,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAC/B,UAAU,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC7C,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;QAC9B,UAAU,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC;QAC9C,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,SAAS,aAAa,CAAE,IAAa,EAAE,MAAe,EAAE,QAAiB;QACtE,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;YAClC,MAAM,CAAC,YAAM,CAAC,IAAI,EAAE,UAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;YACpC,MAAM,CAAC,YAAM,CAAC,IAAI,EAAE,YAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;YAClC,MAAM,CAAC,YAAM,CAAC,IAAI,EAAE,cAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;YACtC,MAAM,CAAC,YAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACN,CAAC;IAED,SAAS,mBAAmB,CAAE,GAAQ;QACnC,QAAQ,GAAG,GAAG,EAAE,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QAChC,OAAO,GAAG,CAAC;IACd,CAAC;IAED,SAAS,gBAAgB,CAAE,IAAmC;QAC3D,MAAM,QAAQ,GAAG;YACd,MAAM,KAAM,OAAO,IAAI,KAAK,MAAM,CAAA,CAAC,CAAC;YACpC,WAAW,KAAM,OAAO,IAAI,KAAK,QAAQ,CAAA,CAAC,CAAC;SAC7C,CAAC;QACF,QAAQ,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC;QAC1B,OAAO,QAAQ,CAAC;IACnB,CAAC;AAEJ,CAAC,CAAC,CAAC"} -------------------------------------------------------------------------------- /node_modules/@kwsites/file-exists/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@kwsites/file-exists", 3 | "version": "1.1.1", 4 | "main": "./dist/index.js", 5 | "types": "./dist/index.d.ts", 6 | "license": "MIT", 7 | "repository": "git@github.com:kwsites/file-exists.git", 8 | "author": "Steve King ", 9 | "contributors": [ 10 | { 11 | "name": "Steve King", 12 | "email": "steve@mydev.co" 13 | } 14 | ], 15 | "files": [ 16 | "dist/**/*.*" 17 | ], 18 | "scripts": { 19 | "clean": "rimraf ./dist", 20 | "build": "yarn run clean && tsc", 21 | "preversion": "yarn run clean && yarn run build && yarn test", 22 | "postversion": "npm publish --access=public && git push && git push --tags", 23 | "test": "jest --coverage", 24 | "tsc": "tsc" 25 | }, 26 | "devDependencies": { 27 | "@babel/core": "^7.10.1", 28 | "@babel/preset-env": "^7.10.1", 29 | "@babel/preset-typescript": "^7.10.1", 30 | "@types/debug": "^4.1.5", 31 | "@types/jest": "^26.0.0", 32 | "@types/node": "^10.12.0", 33 | "babel-jest": "^26.0.1", 34 | "jest": "^25.3.0", 35 | "rimraf": "^2.6.2", 36 | "ts-node": "^8.10.2", 37 | "typescript": "^3.1.3" 38 | }, 39 | "dependencies": { 40 | "debug": "^4.1.1" 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /node_modules/@kwsites/file-exists/readme.md: -------------------------------------------------------------------------------- 1 | # @kwsites/file-exists 2 | 3 | Synchronous validation of a path existing either as a file or as a directory. 4 | 5 | ``` 6 | const { exists, FILE, FOLDER, READABLE } = require('@kwsites/file-exists'); 7 | 8 | // check for a folder existing 9 | assert(exists(__dirname, FOLDER)); 10 | assert(!exists(__filename, FOLDER)); 11 | 12 | // check for a file existing 13 | assert(!exists(__filename, FILE)); 14 | assert(exists(__filename, FILE)); 15 | 16 | // when no type is specified, both folders and files are allowed 17 | assert(exists(__dirname)); 18 | assert(exists(__filename)); 19 | 20 | // alternatively specify both files and folders 21 | assert(exists(__dirname, FILE + FOLDER)); 22 | 23 | // or just that the path is readable (can be either a file or folder) 24 | assert(exists(__filename, READABLE)); 25 | ``` 26 | 27 | ## Troubleshooting 28 | 29 | This library uses [debug](https://www.npmjs.com/package/debug) to handle logging, 30 | to enable logging, use either the environment variable: 31 | 32 | ``` 33 | "DEBUG=@kwsites/file-exists" node ./your-app.js 34 | ``` 35 | 36 | Or explicitly enable logging using the `debug` library itself: 37 | 38 | ```javascript 39 | require('debug').enable('@kwsites/file-exists'); 40 | ``` 41 | 42 | -------------------------------------------------------------------------------- /node_modules/@kwsites/promise-deferred/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 kwsites 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /node_modules/@kwsites/promise-deferred/dist/index.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * The `DeferredPromise` has a `promise` property in an initially pending state, 3 | * that will be resolved when the `done` method is called or rejected when the 4 | * `fail` method is called. 5 | */ 6 | export interface DeferredPromise { 7 | done(result: RESOLVES): void; 8 | fail(error: REJECTS): void; 9 | readonly status: DeferredPromiseStatus; 10 | readonly fulfilled: boolean; 11 | promise: Promise; 12 | } 13 | /** 14 | * The three states the DeferredPromise can be in - initially pending then either 15 | * resolved or rejected when it is fulfilled. 16 | * 17 | * ```typescript 18 | import {createDeferred, DeferredPromiseStatus} from '@kwsites/promise-deferred`; 19 | 20 | const pending: DeferredPromiseStatus = 'pending'; 21 | expect(createDeferred()).toHaveProperty('status', pending); 22 | ``` 23 | */ 24 | export declare type DeferredPromiseStatus = 'pending' | 'resolved' | 'rejected'; 25 | /** 26 | * Creates a new `DeferredPromise` 27 | * 28 | * ```typescript 29 | import {deferred} from '@kwsites/promise-deferred`; 30 | ``` 31 | */ 32 | export declare function deferred(): DeferredPromise; 33 | /** 34 | * Alias of the exported `deferred` function, to help consumers wanting to use `deferred` as the 35 | * local variable name rather than the factory import name, without needing to rename on import. 36 | * 37 | * ```typescript 38 | import {createDeferred} from '@kwsites/promise-deferred`; 39 | ``` 40 | */ 41 | export declare const createDeferred: typeof deferred; 42 | /** 43 | * Default export allows use as: 44 | * 45 | * ```typescript 46 | import deferred from '@kwsites/promise-deferred`; 47 | ``` 48 | */ 49 | export default deferred; 50 | -------------------------------------------------------------------------------- /node_modules/@kwsites/promise-deferred/dist/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.createDeferred = exports.deferred = void 0; 4 | /** 5 | * Creates a new `DeferredPromise` 6 | * 7 | * ```typescript 8 | import {deferred} from '@kwsites/promise-deferred`; 9 | ``` 10 | */ 11 | function deferred() { 12 | let done; 13 | let fail; 14 | let status = 'pending'; 15 | const promise = new Promise((_done, _fail) => { 16 | done = _done; 17 | fail = _fail; 18 | }); 19 | return { 20 | promise, 21 | done(result) { 22 | if (status === 'pending') { 23 | status = 'resolved'; 24 | done(result); 25 | } 26 | }, 27 | fail(error) { 28 | if (status === 'pending') { 29 | status = 'rejected'; 30 | fail(error); 31 | } 32 | }, 33 | get fulfilled() { 34 | return status !== 'pending'; 35 | }, 36 | get status() { 37 | return status; 38 | }, 39 | }; 40 | } 41 | exports.deferred = deferred; 42 | /** 43 | * Alias of the exported `deferred` function, to help consumers wanting to use `deferred` as the 44 | * local variable name rather than the factory import name, without needing to rename on import. 45 | * 46 | * ```typescript 47 | import {createDeferred} from '@kwsites/promise-deferred`; 48 | ``` 49 | */ 50 | exports.createDeferred = deferred; 51 | /** 52 | * Default export allows use as: 53 | * 54 | * ```typescript 55 | import deferred from '@kwsites/promise-deferred`; 56 | ``` 57 | */ 58 | exports.default = deferred; 59 | //# sourceMappingURL=index.js.map -------------------------------------------------------------------------------- /node_modules/@kwsites/promise-deferred/dist/index.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AA0BA;;;;;;GAMG;AACH,SAAgB,QAAQ;IACrB,IAAI,IAAyB,CAAC;IAC9B,IAAI,IAAwB,CAAC;IAC7B,IAAI,MAAM,GAA0B,SAAS,CAAC;IAE9C,MAAM,OAAO,GAAe,IAAI,OAAO,CAAI,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACzD,IAAI,GAAG,KAAK,CAAC;QACb,IAAI,GAAG,KAAK,CAAC;IAChB,CAAC,CAAC,CAAC;IAEH,OAAO;QACJ,OAAO;QACP,IAAI,CAAE,MAAM;YACT,IAAI,MAAM,KAAK,SAAS,EAAE;gBACvB,MAAM,GAAG,UAAU,CAAC;gBACpB,IAAI,CAAC,MAAM,CAAC,CAAC;aACf;QACJ,CAAC;QACD,IAAI,CAAE,KAAK;YACR,IAAI,MAAM,KAAK,SAAS,EAAE;gBACvB,MAAM,GAAG,UAAU,CAAC;gBACpB,IAAI,CAAC,KAAK,CAAC,CAAC;aACd;QACJ,CAAC;QACD,IAAI,SAAS;YACV,OAAO,MAAM,KAAK,SAAS,CAAC;QAC/B,CAAC;QACD,IAAI,MAAM;YACP,OAAO,MAAM,CAAC;QACjB,CAAC;KACH,CAAC;AACL,CAAC;AA/BD,4BA+BC;AAED;;;;;;;GAOG;AACU,QAAA,cAAc,GAAG,QAAQ,CAAC;AAEvC;;;;;;GAMG;AACH,kBAAe,QAAQ,CAAC"} -------------------------------------------------------------------------------- /node_modules/@kwsites/promise-deferred/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@kwsites/promise-deferred", 3 | "description": "Minimalist creation of promise wrappers, exposing the ability to resolve or reject the inner promise", 4 | "version": "1.1.1", 5 | "private": false, 6 | "author": "Steve King ", 7 | "contributors": [ 8 | { 9 | "name": "Steve King", 10 | "email": "steve@mydev.co" 11 | } 12 | ], 13 | "main": "./dist/index", 14 | "types": "./dist/index", 15 | "license": "MIT", 16 | "repository": "git://github.com/kwsites/promise-deferred.git", 17 | "devDependencies": { 18 | "@babel/core": "^7.10.3", 19 | "@babel/preset-env": "^7.10.3", 20 | "@babel/preset-typescript": "^7.10.1", 21 | "@types/jest": "^26.0.0", 22 | "@types/node": "^14.0.13", 23 | "babel-jest": "^26.1.0", 24 | "babel-preset-env": "^1.7.0", 25 | "jest": "^26.1.0", 26 | "ts-node": "^8.10.2", 27 | "typescript": "^3.9.5" 28 | }, 29 | "files": [ 30 | "LICENSE", 31 | "dist/**/*.*" 32 | ], 33 | "scripts": { 34 | "clean": "git clean -fxd -e .idea -e node_modules", 35 | "clean:modules": "git clean -fxd node_modules", 36 | "build": "tsc --build", 37 | "build:clean": "yarn run clean && tsc", 38 | "preversion": "yarn run build:clean && yarn test", 39 | "postversion": "npm publish --access=public && git push && git push --tags", 40 | "test": "jest --coverage", 41 | "tsc": "tsc" 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /node_modules/debug/LICENSE: -------------------------------------------------------------------------------- 1 | (The MIT License) 2 | 3 | Copyright (c) 2014-2017 TJ Holowaychuk 4 | Copyright (c) 2018-2021 Josh Junon 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software 7 | and associated documentation files (the 'Software'), to deal in the Software without restriction, 8 | including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, 9 | and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all copies or substantial 13 | portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT 16 | LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 17 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 18 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 19 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 20 | 21 | -------------------------------------------------------------------------------- /node_modules/debug/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "debug", 3 | "version": "4.3.6", 4 | "repository": { 5 | "type": "git", 6 | "url": "git://github.com/debug-js/debug.git" 7 | }, 8 | "description": "Lightweight debugging utility for Node.js and the browser", 9 | "keywords": [ 10 | "debug", 11 | "log", 12 | "debugger" 13 | ], 14 | "files": [ 15 | "src", 16 | "LICENSE", 17 | "README.md" 18 | ], 19 | "author": "Josh Junon (https://github.com/qix-)", 20 | "contributors": [ 21 | "TJ Holowaychuk ", 22 | "Nathan Rajlich (http://n8.io)", 23 | "Andrew Rhyne " 24 | ], 25 | "license": "MIT", 26 | "scripts": { 27 | "lint": "xo", 28 | "test": "npm run test:node && npm run test:browser && npm run lint", 29 | "test:node": "istanbul cover _mocha -- test.js test.node.js", 30 | "test:browser": "karma start --single-run", 31 | "test:coverage": "cat ./coverage/lcov.info | coveralls" 32 | }, 33 | "dependencies": { 34 | "ms": "2.1.2" 35 | }, 36 | "devDependencies": { 37 | "brfs": "^2.0.1", 38 | "browserify": "^16.2.3", 39 | "coveralls": "^3.0.2", 40 | "istanbul": "^0.4.5", 41 | "karma": "^3.1.4", 42 | "karma-browserify": "^6.0.0", 43 | "karma-chrome-launcher": "^2.2.0", 44 | "karma-mocha": "^1.3.0", 45 | "mocha": "^5.2.0", 46 | "mocha-lcov-reporter": "^1.2.0", 47 | "sinon": "^14.0.0", 48 | "xo": "^0.23.0" 49 | }, 50 | "peerDependenciesMeta": { 51 | "supports-color": { 52 | "optional": true 53 | } 54 | }, 55 | "main": "./src/index.js", 56 | "browser": "./src/browser.js", 57 | "engines": { 58 | "node": ">=6.0" 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /node_modules/debug/src/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Detect Electron renderer / nwjs process, which is node, but we should 3 | * treat as a browser. 4 | */ 5 | 6 | if (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) { 7 | module.exports = require('./browser.js'); 8 | } else { 9 | module.exports = require('./node.js'); 10 | } 11 | -------------------------------------------------------------------------------- /node_modules/debug/src/node.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Module dependencies. 3 | */ 4 | 5 | const tty = require('tty'); 6 | const util = require('util'); 7 | 8 | /** 9 | * This is the Node.js implementation of `debug()`. 10 | */ 11 | 12 | exports.init = init; 13 | exports.log = log; 14 | exports.formatArgs = formatArgs; 15 | exports.save = save; 16 | exports.load = load; 17 | exports.useColors = useColors; 18 | exports.destroy = util.deprecate( 19 | () => {}, 20 | 'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.' 21 | ); 22 | 23 | /** 24 | * Colors. 25 | */ 26 | 27 | exports.colors = [6, 2, 3, 4, 5, 1]; 28 | 29 | try { 30 | // Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json) 31 | // eslint-disable-next-line import/no-extraneous-dependencies 32 | const supportsColor = require('supports-color'); 33 | 34 | if (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) { 35 | exports.colors = [ 36 | 20, 37 | 21, 38 | 26, 39 | 27, 40 | 32, 41 | 33, 42 | 38, 43 | 39, 44 | 40, 45 | 41, 46 | 42, 47 | 43, 48 | 44, 49 | 45, 50 | 56, 51 | 57, 52 | 62, 53 | 63, 54 | 68, 55 | 69, 56 | 74, 57 | 75, 58 | 76, 59 | 77, 60 | 78, 61 | 79, 62 | 80, 63 | 81, 64 | 92, 65 | 93, 66 | 98, 67 | 99, 68 | 112, 69 | 113, 70 | 128, 71 | 129, 72 | 134, 73 | 135, 74 | 148, 75 | 149, 76 | 160, 77 | 161, 78 | 162, 79 | 163, 80 | 164, 81 | 165, 82 | 166, 83 | 167, 84 | 168, 85 | 169, 86 | 170, 87 | 171, 88 | 172, 89 | 173, 90 | 178, 91 | 179, 92 | 184, 93 | 185, 94 | 196, 95 | 197, 96 | 198, 97 | 199, 98 | 200, 99 | 201, 100 | 202, 101 | 203, 102 | 204, 103 | 205, 104 | 206, 105 | 207, 106 | 208, 107 | 209, 108 | 214, 109 | 215, 110 | 220, 111 | 221 112 | ]; 113 | } 114 | } catch (error) { 115 | // Swallow - we only care if `supports-color` is available; it doesn't have to be. 116 | } 117 | 118 | /** 119 | * Build up the default `inspectOpts` object from the environment variables. 120 | * 121 | * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js 122 | */ 123 | 124 | exports.inspectOpts = Object.keys(process.env).filter(key => { 125 | return /^debug_/i.test(key); 126 | }).reduce((obj, key) => { 127 | // Camel-case 128 | const prop = key 129 | .substring(6) 130 | .toLowerCase() 131 | .replace(/_([a-z])/g, (_, k) => { 132 | return k.toUpperCase(); 133 | }); 134 | 135 | // Coerce string value into JS value 136 | let val = process.env[key]; 137 | if (/^(yes|on|true|enabled)$/i.test(val)) { 138 | val = true; 139 | } else if (/^(no|off|false|disabled)$/i.test(val)) { 140 | val = false; 141 | } else if (val === 'null') { 142 | val = null; 143 | } else { 144 | val = Number(val); 145 | } 146 | 147 | obj[prop] = val; 148 | return obj; 149 | }, {}); 150 | 151 | /** 152 | * Is stdout a TTY? Colored output is enabled when `true`. 153 | */ 154 | 155 | function useColors() { 156 | return 'colors' in exports.inspectOpts ? 157 | Boolean(exports.inspectOpts.colors) : 158 | tty.isatty(process.stderr.fd); 159 | } 160 | 161 | /** 162 | * Adds ANSI color escape codes if enabled. 163 | * 164 | * @api public 165 | */ 166 | 167 | function formatArgs(args) { 168 | const {namespace: name, useColors} = this; 169 | 170 | if (useColors) { 171 | const c = this.color; 172 | const colorCode = '\u001B[3' + (c < 8 ? c : '8;5;' + c); 173 | const prefix = ` ${colorCode};1m${name} \u001B[0m`; 174 | 175 | args[0] = prefix + args[0].split('\n').join('\n' + prefix); 176 | args.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\u001B[0m'); 177 | } else { 178 | args[0] = getDate() + name + ' ' + args[0]; 179 | } 180 | } 181 | 182 | function getDate() { 183 | if (exports.inspectOpts.hideDate) { 184 | return ''; 185 | } 186 | return new Date().toISOString() + ' '; 187 | } 188 | 189 | /** 190 | * Invokes `util.formatWithOptions()` with the specified arguments and writes to stderr. 191 | */ 192 | 193 | function log(...args) { 194 | return process.stderr.write(util.formatWithOptions(exports.inspectOpts, ...args) + '\n'); 195 | } 196 | 197 | /** 198 | * Save `namespaces`. 199 | * 200 | * @param {String} namespaces 201 | * @api private 202 | */ 203 | function save(namespaces) { 204 | if (namespaces) { 205 | process.env.DEBUG = namespaces; 206 | } else { 207 | // If you set a process.env field to null or undefined, it gets cast to the 208 | // string 'null' or 'undefined'. Just delete instead. 209 | delete process.env.DEBUG; 210 | } 211 | } 212 | 213 | /** 214 | * Load `namespaces`. 215 | * 216 | * @return {String} returns the previously persisted debug modes 217 | * @api private 218 | */ 219 | 220 | function load() { 221 | return process.env.DEBUG; 222 | } 223 | 224 | /** 225 | * Init logic for `debug` instances. 226 | * 227 | * Create a new `inspectOpts` object in case `useColors` is set 228 | * differently for a particular `debug` instance. 229 | */ 230 | 231 | function init(debug) { 232 | debug.inspectOpts = {}; 233 | 234 | const keys = Object.keys(exports.inspectOpts); 235 | for (let i = 0; i < keys.length; i++) { 236 | debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]]; 237 | } 238 | } 239 | 240 | module.exports = require('./common')(exports); 241 | 242 | const {formatters} = module.exports; 243 | 244 | /** 245 | * Map %o to `util.inspect()`, all on a single line. 246 | */ 247 | 248 | formatters.o = function (v) { 249 | this.inspectOpts.colors = this.useColors; 250 | return util.inspect(v, this.inspectOpts) 251 | .split('\n') 252 | .map(str => str.trim()) 253 | .join(' '); 254 | }; 255 | 256 | /** 257 | * Map %O to `util.inspect()`, allowing multiple lines if needed. 258 | */ 259 | 260 | formatters.O = function (v) { 261 | this.inspectOpts.colors = this.useColors; 262 | return util.inspect(v, this.inspectOpts); 263 | }; 264 | -------------------------------------------------------------------------------- /node_modules/ms/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Helpers. 3 | */ 4 | 5 | var s = 1000; 6 | var m = s * 60; 7 | var h = m * 60; 8 | var d = h * 24; 9 | var w = d * 7; 10 | var y = d * 365.25; 11 | 12 | /** 13 | * Parse or format the given `val`. 14 | * 15 | * Options: 16 | * 17 | * - `long` verbose formatting [false] 18 | * 19 | * @param {String|Number} val 20 | * @param {Object} [options] 21 | * @throws {Error} throw an error if val is not a non-empty string or a number 22 | * @return {String|Number} 23 | * @api public 24 | */ 25 | 26 | module.exports = function(val, options) { 27 | options = options || {}; 28 | var type = typeof val; 29 | if (type === 'string' && val.length > 0) { 30 | return parse(val); 31 | } else if (type === 'number' && isFinite(val)) { 32 | return options.long ? fmtLong(val) : fmtShort(val); 33 | } 34 | throw new Error( 35 | 'val is not a non-empty string or a valid number. val=' + 36 | JSON.stringify(val) 37 | ); 38 | }; 39 | 40 | /** 41 | * Parse the given `str` and return milliseconds. 42 | * 43 | * @param {String} str 44 | * @return {Number} 45 | * @api private 46 | */ 47 | 48 | function parse(str) { 49 | str = String(str); 50 | if (str.length > 100) { 51 | return; 52 | } 53 | var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec( 54 | str 55 | ); 56 | if (!match) { 57 | return; 58 | } 59 | var n = parseFloat(match[1]); 60 | var type = (match[2] || 'ms').toLowerCase(); 61 | switch (type) { 62 | case 'years': 63 | case 'year': 64 | case 'yrs': 65 | case 'yr': 66 | case 'y': 67 | return n * y; 68 | case 'weeks': 69 | case 'week': 70 | case 'w': 71 | return n * w; 72 | case 'days': 73 | case 'day': 74 | case 'd': 75 | return n * d; 76 | case 'hours': 77 | case 'hour': 78 | case 'hrs': 79 | case 'hr': 80 | case 'h': 81 | return n * h; 82 | case 'minutes': 83 | case 'minute': 84 | case 'mins': 85 | case 'min': 86 | case 'm': 87 | return n * m; 88 | case 'seconds': 89 | case 'second': 90 | case 'secs': 91 | case 'sec': 92 | case 's': 93 | return n * s; 94 | case 'milliseconds': 95 | case 'millisecond': 96 | case 'msecs': 97 | case 'msec': 98 | case 'ms': 99 | return n; 100 | default: 101 | return undefined; 102 | } 103 | } 104 | 105 | /** 106 | * Short format for `ms`. 107 | * 108 | * @param {Number} ms 109 | * @return {String} 110 | * @api private 111 | */ 112 | 113 | function fmtShort(ms) { 114 | var msAbs = Math.abs(ms); 115 | if (msAbs >= d) { 116 | return Math.round(ms / d) + 'd'; 117 | } 118 | if (msAbs >= h) { 119 | return Math.round(ms / h) + 'h'; 120 | } 121 | if (msAbs >= m) { 122 | return Math.round(ms / m) + 'm'; 123 | } 124 | if (msAbs >= s) { 125 | return Math.round(ms / s) + 's'; 126 | } 127 | return ms + 'ms'; 128 | } 129 | 130 | /** 131 | * Long format for `ms`. 132 | * 133 | * @param {Number} ms 134 | * @return {String} 135 | * @api private 136 | */ 137 | 138 | function fmtLong(ms) { 139 | var msAbs = Math.abs(ms); 140 | if (msAbs >= d) { 141 | return plural(ms, msAbs, d, 'day'); 142 | } 143 | if (msAbs >= h) { 144 | return plural(ms, msAbs, h, 'hour'); 145 | } 146 | if (msAbs >= m) { 147 | return plural(ms, msAbs, m, 'minute'); 148 | } 149 | if (msAbs >= s) { 150 | return plural(ms, msAbs, s, 'second'); 151 | } 152 | return ms + ' ms'; 153 | } 154 | 155 | /** 156 | * Pluralization helper. 157 | */ 158 | 159 | function plural(ms, msAbs, n, name) { 160 | var isPlural = msAbs >= n * 1.5; 161 | return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : ''); 162 | } 163 | -------------------------------------------------------------------------------- /node_modules/ms/license.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 Zeit, Inc. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /node_modules/ms/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ms", 3 | "version": "2.1.2", 4 | "description": "Tiny millisecond conversion utility", 5 | "repository": "zeit/ms", 6 | "main": "./index", 7 | "files": [ 8 | "index.js" 9 | ], 10 | "scripts": { 11 | "precommit": "lint-staged", 12 | "lint": "eslint lib/* bin/*", 13 | "test": "mocha tests.js" 14 | }, 15 | "eslintConfig": { 16 | "extends": "eslint:recommended", 17 | "env": { 18 | "node": true, 19 | "es6": true 20 | } 21 | }, 22 | "lint-staged": { 23 | "*.js": [ 24 | "npm run lint", 25 | "prettier --single-quote --write", 26 | "git add" 27 | ] 28 | }, 29 | "license": "MIT", 30 | "devDependencies": { 31 | "eslint": "4.12.1", 32 | "expect.js": "0.3.1", 33 | "husky": "0.14.3", 34 | "lint-staged": "5.0.0", 35 | "mocha": "4.0.1" 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /node_modules/ms/readme.md: -------------------------------------------------------------------------------- 1 | # ms 2 | 3 | [![Build Status](https://travis-ci.org/zeit/ms.svg?branch=master)](https://travis-ci.org/zeit/ms) 4 | [![Join the community on Spectrum](https://withspectrum.github.io/badge/badge.svg)](https://spectrum.chat/zeit) 5 | 6 | Use this package to easily convert various time formats to milliseconds. 7 | 8 | ## Examples 9 | 10 | ```js 11 | ms('2 days') // 172800000 12 | ms('1d') // 86400000 13 | ms('10h') // 36000000 14 | ms('2.5 hrs') // 9000000 15 | ms('2h') // 7200000 16 | ms('1m') // 60000 17 | ms('5s') // 5000 18 | ms('1y') // 31557600000 19 | ms('100') // 100 20 | ms('-3 days') // -259200000 21 | ms('-1h') // -3600000 22 | ms('-200') // -200 23 | ``` 24 | 25 | ### Convert from Milliseconds 26 | 27 | ```js 28 | ms(60000) // "1m" 29 | ms(2 * 60000) // "2m" 30 | ms(-3 * 60000) // "-3m" 31 | ms(ms('10 hours')) // "10h" 32 | ``` 33 | 34 | ### Time Format Written-Out 35 | 36 | ```js 37 | ms(60000, { long: true }) // "1 minute" 38 | ms(2 * 60000, { long: true }) // "2 minutes" 39 | ms(-3 * 60000, { long: true }) // "-3 minutes" 40 | ms(ms('10 hours'), { long: true }) // "10 hours" 41 | ``` 42 | 43 | ## Features 44 | 45 | - Works both in [Node.js](https://nodejs.org) and in the browser 46 | - If a number is supplied to `ms`, a string with a unit is returned 47 | - If a string that contains the number is supplied, it returns it as a number (e.g.: it returns `100` for `'100'`) 48 | - If you pass a string with a number and a valid unit, the number of equivalent milliseconds is returned 49 | 50 | ## Related Packages 51 | 52 | - [ms.macro](https://github.com/knpwrs/ms.macro) - Run `ms` as a macro at build-time. 53 | 54 | ## Caught a Bug? 55 | 56 | 1. [Fork](https://help.github.com/articles/fork-a-repo/) this repository to your own GitHub account and then [clone](https://help.github.com/articles/cloning-a-repository/) it to your local device 57 | 2. Link the package to the global module directory: `npm link` 58 | 3. Within the module you want to test your local development instance of ms, just link it to the dependencies: `npm link ms`. Instead of the default one from npm, Node.js will now use your clone of ms! 59 | 60 | As always, you can run the tests using: `npm test` 61 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/esm/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "module" 3 | } -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/api.d.ts: -------------------------------------------------------------------------------- 1 | import { pathspec } from './args/pathspec'; 2 | import { GitConstructError } from './errors/git-construct-error'; 3 | import { GitError } from './errors/git-error'; 4 | import { GitPluginError } from './errors/git-plugin-error'; 5 | import { GitResponseError } from './errors/git-response-error'; 6 | import { TaskConfigurationError } from './errors/task-configuration-error'; 7 | import { CheckRepoActions } from './tasks/check-is-repo'; 8 | import { CleanOptions } from './tasks/clean'; 9 | import { GitConfigScope } from './tasks/config'; 10 | import { DiffNameStatus } from './tasks/diff-name-status'; 11 | import { grepQueryBuilder } from './tasks/grep'; 12 | import { ResetMode } from './tasks/reset'; 13 | export { CheckRepoActions, CleanOptions, DiffNameStatus, GitConfigScope, GitConstructError, GitError, GitPluginError, GitResponseError, ResetMode, TaskConfigurationError, grepQueryBuilder, pathspec, }; 14 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/args/log-format.d.ts: -------------------------------------------------------------------------------- 1 | export declare enum LogFormat { 2 | NONE = "", 3 | STAT = "--stat", 4 | NUM_STAT = "--numstat", 5 | NAME_ONLY = "--name-only", 6 | NAME_STATUS = "--name-status" 7 | } 8 | export declare function logFormatFromCommand(customArgs: string[]): LogFormat; 9 | export declare function isLogFormat(customArg: string | unknown): boolean; 10 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/args/pathspec.d.ts: -------------------------------------------------------------------------------- 1 | export declare function pathspec(...paths: string[]): string; 2 | export declare function isPathSpec(path: string | unknown): path is string; 3 | export declare function toPaths(pathSpec: string): string[]; 4 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/errors/git-construct-error.d.ts: -------------------------------------------------------------------------------- 1 | import { GitError } from './git-error'; 2 | import { SimpleGitOptions } from '../types'; 3 | /** 4 | * The `GitConstructError` is thrown when an error occurs in the constructor 5 | * of the `simple-git` instance itself. Most commonly as a result of using 6 | * a `baseDir` option that points to a folder that either does not exist, 7 | * or cannot be read by the user the node script is running as. 8 | * 9 | * Check the `.message` property for more detail including the properties 10 | * passed to the constructor. 11 | */ 12 | export declare class GitConstructError extends GitError { 13 | readonly config: SimpleGitOptions; 14 | constructor(config: SimpleGitOptions, message: string); 15 | } 16 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/errors/git-error.d.ts: -------------------------------------------------------------------------------- 1 | import type { SimpleGitTask } from '../types'; 2 | /** 3 | * The `GitError` is thrown when the underlying `git` process throws a 4 | * fatal exception (eg an `ENOENT` exception when attempting to use a 5 | * non-writable directory as the root for your repo), and acts as the 6 | * base class for more specific errors thrown by the parsing of the 7 | * git response or errors in the configuration of the task about to 8 | * be run. 9 | * 10 | * When an exception is thrown, pending tasks in the same instance will 11 | * not be executed. The recommended way to run a series of tasks that 12 | * can independently fail without needing to prevent future tasks from 13 | * running is to catch them individually: 14 | * 15 | * ```typescript 16 | import { gitP, SimpleGit, GitError, PullResult } from 'simple-git'; 17 | 18 | function catchTask (e: GitError) { 19 | return e. 20 | } 21 | 22 | const git = gitP(repoWorkingDir); 23 | const pulled: PullResult | GitError = await git.pull().catch(catchTask); 24 | const pushed: string | GitError = await git.pushTags().catch(catchTask); 25 | ``` 26 | */ 27 | export declare class GitError extends Error { 28 | task?: SimpleGitTask | undefined; 29 | constructor(task?: SimpleGitTask | undefined, message?: string); 30 | } 31 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/errors/git-plugin-error.d.ts: -------------------------------------------------------------------------------- 1 | import { SimpleGitOptions, SimpleGitTask } from '../types'; 2 | import { GitError } from './git-error'; 3 | export declare class GitPluginError extends GitError { 4 | task?: SimpleGitTask | undefined; 5 | readonly plugin?: keyof SimpleGitOptions | undefined; 6 | constructor(task?: SimpleGitTask | undefined, plugin?: keyof SimpleGitOptions | undefined, message?: string); 7 | } 8 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/errors/git-response-error.d.ts: -------------------------------------------------------------------------------- 1 | import { GitError } from './git-error'; 2 | /** 3 | * The `GitResponseError` is the wrapper for a parsed response that is treated as 4 | * a fatal error, for example attempting a `merge` can leave the repo in a corrupted 5 | * state when there are conflicts so the task will reject rather than resolve. 6 | * 7 | * For example, catching the merge conflict exception: 8 | * 9 | * ```typescript 10 | import { gitP, SimpleGit, GitResponseError, MergeSummary } from 'simple-git'; 11 | 12 | const git = gitP(repoRoot); 13 | const mergeOptions: string[] = ['--no-ff', 'other-branch']; 14 | const mergeSummary: MergeSummary = await git.merge(mergeOptions) 15 | .catch((e: GitResponseError) => e.git); 16 | 17 | if (mergeSummary.failed) { 18 | // deal with the error 19 | } 20 | ``` 21 | */ 22 | export declare class GitResponseError extends GitError { 23 | /** 24 | * `.git` access the parsed response that is treated as being an error 25 | */ 26 | readonly git: T; 27 | constructor( 28 | /** 29 | * `.git` access the parsed response that is treated as being an error 30 | */ 31 | git: T, message?: string); 32 | } 33 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/errors/task-configuration-error.d.ts: -------------------------------------------------------------------------------- 1 | import { GitError } from './git-error'; 2 | /** 3 | * The `TaskConfigurationError` is thrown when a command was incorrectly 4 | * configured. An error of this kind means that no attempt was made to 5 | * run your command through the underlying `git` binary. 6 | * 7 | * Check the `.message` property for more detail on why your configuration 8 | * resulted in an error. 9 | */ 10 | export declare class TaskConfigurationError extends GitError { 11 | constructor(message?: string); 12 | } 13 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/git-factory.d.ts: -------------------------------------------------------------------------------- 1 | import { SimpleGitFactory } from '../../typings'; 2 | import * as api from './api'; 3 | import { SimpleGitOptions } from './types'; 4 | /** 5 | * Adds the necessary properties to the supplied object to enable it for use as 6 | * the default export of a module. 7 | * 8 | * Eg: `module.exports = esModuleFactory({ something () {} })` 9 | */ 10 | export declare function esModuleFactory(defaultExport: T): T & { 11 | __esModule: true; 12 | default: T; 13 | }; 14 | export declare function gitExportFactory(factory: SimpleGitFactory): SimpleGitFactory & typeof api; 15 | export declare function gitInstanceFactory(baseDir?: string | Partial, options?: Partial): any; 16 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/git-logger.d.ts: -------------------------------------------------------------------------------- 1 | import { Debugger } from 'debug'; 2 | declare type OutputLoggingHandler = (message: string, ...args: any[]) => void; 3 | export interface OutputLogger extends OutputLoggingHandler { 4 | readonly label: string; 5 | info: OutputLoggingHandler; 6 | step(nextStep?: string): OutputLogger; 7 | sibling(name: string): OutputLogger; 8 | } 9 | export declare function createLogger(label: string, verbose?: string | Debugger, initialStep?: string, infoDebugger?: Debugger): OutputLogger; 10 | /** 11 | * The `GitLogger` is used by the main `SimpleGit` runner to handle logging 12 | * any warnings or errors. 13 | */ 14 | export declare class GitLogger { 15 | private _out; 16 | error: OutputLoggingHandler; 17 | warn: OutputLoggingHandler; 18 | constructor(_out?: Debugger); 19 | silent(silence?: boolean): void; 20 | } 21 | export {}; 22 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/parsers/parse-branch-delete.d.ts: -------------------------------------------------------------------------------- 1 | import { BranchMultiDeleteResult } from '../../../typings'; 2 | import { TaskParser } from '../types'; 3 | import { ExitCodes } from '../utils'; 4 | export declare const parseBranchDeletions: TaskParser; 5 | export declare function hasBranchDeletionError(data: string, processExitCode: ExitCodes): boolean; 6 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/parsers/parse-branch.d.ts: -------------------------------------------------------------------------------- 1 | import type { BranchSummary } from '../../../typings'; 2 | export declare function parseBranchSummary(stdOut: string): BranchSummary; 3 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/parsers/parse-commit.d.ts: -------------------------------------------------------------------------------- 1 | import { CommitResult } from '../../../typings'; 2 | export declare function parseCommitResult(stdOut: string): CommitResult; 3 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/parsers/parse-diff-summary.d.ts: -------------------------------------------------------------------------------- 1 | import { LogFormat } from '../args/log-format'; 2 | import { DiffSummary } from '../responses/DiffSummary'; 3 | export declare function getDiffParser(format?: LogFormat): (stdOut: string) => DiffSummary; 4 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/parsers/parse-fetch.d.ts: -------------------------------------------------------------------------------- 1 | import { FetchResult } from '../../../typings'; 2 | export declare function parseFetchResult(stdOut: string, stdErr: string): FetchResult; 3 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/parsers/parse-list-log-summary.d.ts: -------------------------------------------------------------------------------- 1 | import { LogResult } from '../../../typings'; 2 | import { LogFormat } from '../args/log-format'; 3 | export declare const START_BOUNDARY = "\u00F2\u00F2\u00F2\u00F2\u00F2\u00F2 "; 4 | export declare const COMMIT_BOUNDARY = " \u00F2\u00F2"; 5 | export declare const SPLITTER = " \u00F2 "; 6 | export declare function createListLogSummaryParser(splitter?: string, fields?: string[], logFormat?: LogFormat): (stdOut: string) => LogResult; 7 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/parsers/parse-merge.d.ts: -------------------------------------------------------------------------------- 1 | import { MergeDetail, MergeResult } from '../../../typings'; 2 | import { TaskParser } from '../types'; 3 | /** 4 | * Parse the complete response from `git.merge` 5 | */ 6 | export declare const parseMergeResult: TaskParser; 7 | /** 8 | * Parse the merge specific detail (ie: not the content also available in the pull detail) from `git.mnerge` 9 | * @param stdOut 10 | */ 11 | export declare const parseMergeDetail: TaskParser; 12 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/parsers/parse-move.d.ts: -------------------------------------------------------------------------------- 1 | import { MoveResult } from '../../../typings'; 2 | export declare function parseMoveResult(stdOut: string): MoveResult; 3 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/parsers/parse-pull.d.ts: -------------------------------------------------------------------------------- 1 | import { PullDetail, PullResult } from '../../../typings'; 2 | import { PullFailedSummary } from '../responses/PullSummary'; 3 | import { TaskParser } from '../types'; 4 | export declare const parsePullDetail: TaskParser; 5 | export declare const parsePullResult: TaskParser; 6 | export declare function parsePullErrorResult(stdOut: string, stdErr: string): "" | PullFailedSummary; 7 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/parsers/parse-push.d.ts: -------------------------------------------------------------------------------- 1 | import { PushDetail, PushResult } from '../../../typings'; 2 | import { TaskParser } from '../types'; 3 | export declare const parsePushResult: TaskParser; 4 | export declare const parsePushDetail: TaskParser; 5 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/parsers/parse-remote-messages.d.ts: -------------------------------------------------------------------------------- 1 | import { RemoteMessageResult, RemoteMessages } from '../../../typings'; 2 | export declare function parseRemoteMessages(_stdOut: string, stdErr: string): RemoteMessageResult; 3 | export declare class RemoteMessageSummary implements RemoteMessages { 4 | readonly all: string[]; 5 | } 6 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/parsers/parse-remote-objects.d.ts: -------------------------------------------------------------------------------- 1 | import { RemoteMessageResult, RemoteMessages } from '../../../typings'; 2 | import { RemoteLineParser } from '../utils'; 3 | export declare const remoteMessagesObjectParsers: RemoteLineParser>[]; 4 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/plugins/abort-plugin.d.ts: -------------------------------------------------------------------------------- 1 | import { SimpleGitOptions } from '../types'; 2 | import { SimpleGitPlugin } from './simple-git-plugin'; 3 | export declare function abortPlugin(signal: SimpleGitOptions['abort']): (SimpleGitPlugin<"spawn.before"> | SimpleGitPlugin<"spawn.after">)[] | undefined; 4 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/plugins/block-unsafe-operations-plugin.d.ts: -------------------------------------------------------------------------------- 1 | import type { SimpleGitPlugin } from './simple-git-plugin'; 2 | import type { SimpleGitPluginConfig } from '../types'; 3 | export declare function blockUnsafeOperationsPlugin({ allowUnsafeProtocolOverride, allowUnsafePack, }?: SimpleGitPluginConfig['unsafe']): SimpleGitPlugin<'spawn.args'>; 4 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/plugins/command-config-prefixing-plugin.d.ts: -------------------------------------------------------------------------------- 1 | import { SimpleGitPlugin } from './simple-git-plugin'; 2 | export declare function commandConfigPrefixingPlugin(configuration: string[]): SimpleGitPlugin<'spawn.args'>; 3 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/plugins/completion-detection.plugin.d.ts: -------------------------------------------------------------------------------- 1 | import { SimpleGitPluginConfig } from '../types'; 2 | import { SimpleGitPlugin } from './simple-git-plugin'; 3 | export declare function completionDetectionPlugin({ onClose, onExit, }?: SimpleGitPluginConfig['completion']): SimpleGitPlugin<'spawn.after'>; 4 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/plugins/custom-binary.plugin.d.ts: -------------------------------------------------------------------------------- 1 | import type { SimpleGitOptions } from '../types'; 2 | import { PluginStore } from './plugin-store'; 3 | export declare function customBinaryPlugin(plugins: PluginStore, input?: SimpleGitOptions['binary'], allowUnsafe?: boolean): void; 4 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/plugins/error-detection.plugin.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | import { GitExecutorResult, SimpleGitPluginConfig } from '../types'; 3 | import { SimpleGitPlugin } from './simple-git-plugin'; 4 | declare type TaskResult = Omit; 5 | declare function isTaskError(result: TaskResult): boolean; 6 | export declare function errorDetectionHandler(overwrite?: boolean, isError?: typeof isTaskError, errorMessage?: (result: TaskResult) => Buffer | Error): (error: Buffer | Error | undefined, result: TaskResult) => Error | Buffer | undefined; 7 | export declare function errorDetectionPlugin(config: SimpleGitPluginConfig['errors']): SimpleGitPlugin<'task.error'>; 8 | export {}; 9 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/plugins/index.d.ts: -------------------------------------------------------------------------------- 1 | export * from './abort-plugin'; 2 | export * from './block-unsafe-operations-plugin'; 3 | export * from './command-config-prefixing-plugin'; 4 | export * from './completion-detection.plugin'; 5 | export * from './custom-binary.plugin'; 6 | export * from './error-detection.plugin'; 7 | export * from './plugin-store'; 8 | export * from './progress-monitor-plugin'; 9 | export * from './simple-git-plugin'; 10 | export * from './spawn-options-plugin'; 11 | export * from './timout-plugin'; 12 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/plugins/plugin-store.d.ts: -------------------------------------------------------------------------------- 1 | import type { SimpleGitPlugin, SimpleGitPluginType, SimpleGitPluginTypes } from './simple-git-plugin'; 2 | import type { SimpleGitPluginConfig } from '../types'; 3 | export declare class PluginStore { 4 | private plugins; 5 | private events; 6 | on(type: K, listener: (data: SimpleGitPluginConfig[K]) => void): void; 7 | reconfigure(type: K, data: SimpleGitPluginConfig[K]): void; 8 | append(type: T, action: SimpleGitPlugin['action']): () => boolean; 9 | add(plugin: void | SimpleGitPlugin | SimpleGitPlugin[]): () => void; 10 | exec(type: T, data: SimpleGitPluginTypes[T]['data'], context: SimpleGitPluginTypes[T]['context']): typeof data; 11 | } 12 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/plugins/progress-monitor-plugin.d.ts: -------------------------------------------------------------------------------- 1 | import { SimpleGitOptions } from '../types'; 2 | import { SimpleGitPlugin } from './simple-git-plugin'; 3 | export declare function progressMonitorPlugin(progress: Exclude): (SimpleGitPlugin<"spawn.after"> | SimpleGitPlugin<"spawn.args">)[]; 4 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/plugins/simple-git-plugin.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | import { ChildProcess, SpawnOptions } from 'child_process'; 3 | import { GitExecutorResult } from '../types'; 4 | declare type SimpleGitTaskPluginContext = { 5 | readonly method: string; 6 | readonly commands: string[]; 7 | }; 8 | export interface SimpleGitPluginTypes { 9 | 'spawn.args': { 10 | data: string[]; 11 | context: SimpleGitTaskPluginContext & {}; 12 | }; 13 | 'spawn.binary': { 14 | data: string; 15 | context: SimpleGitTaskPluginContext & {}; 16 | }; 17 | 'spawn.options': { 18 | data: Partial; 19 | context: SimpleGitTaskPluginContext & {}; 20 | }; 21 | 'spawn.before': { 22 | data: void; 23 | context: SimpleGitTaskPluginContext & { 24 | kill(reason: Error): void; 25 | }; 26 | }; 27 | 'spawn.after': { 28 | data: void; 29 | context: SimpleGitTaskPluginContext & { 30 | spawned: ChildProcess; 31 | close(exitCode: number, reason?: Error): void; 32 | kill(reason: Error): void; 33 | }; 34 | }; 35 | 'task.error': { 36 | data: { 37 | error?: Error; 38 | }; 39 | context: SimpleGitTaskPluginContext & GitExecutorResult; 40 | }; 41 | } 42 | export declare type SimpleGitPluginType = keyof SimpleGitPluginTypes; 43 | export interface SimpleGitPlugin { 44 | action(data: SimpleGitPluginTypes[T]['data'], context: SimpleGitPluginTypes[T]['context']): typeof data; 45 | type: T; 46 | } 47 | export {}; 48 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/plugins/spawn-options-plugin.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | import { SpawnOptions } from 'child_process'; 3 | import { SimpleGitPlugin } from './simple-git-plugin'; 4 | export declare function spawnOptionsPlugin(spawnOptions: Partial): SimpleGitPlugin<'spawn.options'>; 5 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/plugins/suffix-paths.plugin.d.ts: -------------------------------------------------------------------------------- 1 | import { SimpleGitPlugin } from './simple-git-plugin'; 2 | export declare function suffixPathsPlugin(): SimpleGitPlugin<'spawn.args'>; 3 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/plugins/timout-plugin.d.ts: -------------------------------------------------------------------------------- 1 | import type { SimpleGitPlugin } from './simple-git-plugin'; 2 | import type { SimpleGitOptions } from '../types'; 3 | export declare function timeoutPlugin({ block, stdErr, stdOut, }: Exclude): SimpleGitPlugin<'spawn.after'> | void; 4 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/responses/BranchDeleteSummary.d.ts: -------------------------------------------------------------------------------- 1 | import { BranchMultiDeleteResult, BranchSingleDeleteFailure, BranchSingleDeleteResult, BranchSingleDeleteSuccess } from '../../../typings'; 2 | export declare class BranchDeletionBatch implements BranchMultiDeleteResult { 3 | all: BranchSingleDeleteResult[]; 4 | branches: { 5 | [branchName: string]: BranchSingleDeleteResult; 6 | }; 7 | errors: BranchSingleDeleteResult[]; 8 | get success(): boolean; 9 | } 10 | export declare function branchDeletionSuccess(branch: string, hash: string): BranchSingleDeleteSuccess; 11 | export declare function branchDeletionFailure(branch: string): BranchSingleDeleteFailure; 12 | export declare function isSingleBranchDeleteFailure(test: BranchSingleDeleteResult): test is BranchSingleDeleteSuccess; 13 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/responses/BranchSummary.d.ts: -------------------------------------------------------------------------------- 1 | import type { BranchSummary, BranchSummaryBranch } from '../../../typings'; 2 | export declare enum BranchStatusIdentifier { 3 | CURRENT = "*", 4 | LINKED = "+" 5 | } 6 | export declare class BranchSummaryResult implements BranchSummary { 7 | all: string[]; 8 | branches: { 9 | [p: string]: BranchSummaryBranch; 10 | }; 11 | current: string; 12 | detached: boolean; 13 | push(status: BranchStatusIdentifier | unknown, detached: boolean, name: string, commit: string, label: string): void; 14 | } 15 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/responses/CheckIgnore.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Parser for the `check-ignore` command - returns each file as a string array 3 | */ 4 | export declare const parseCheckIgnore: (text: string) => string[]; 5 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/responses/CleanSummary.d.ts: -------------------------------------------------------------------------------- 1 | import { CleanSummary } from '../../../typings'; 2 | export declare class CleanResponse implements CleanSummary { 3 | readonly dryRun: boolean; 4 | paths: string[]; 5 | files: string[]; 6 | folders: string[]; 7 | constructor(dryRun: boolean); 8 | } 9 | export declare function cleanSummaryParser(dryRun: boolean, text: string): CleanSummary; 10 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/responses/ConfigList.d.ts: -------------------------------------------------------------------------------- 1 | import { ConfigGetResult, ConfigListSummary, ConfigValues } from '../../../typings'; 2 | export declare class ConfigList implements ConfigListSummary { 3 | files: string[]; 4 | values: { 5 | [fileName: string]: ConfigValues; 6 | }; 7 | private _all; 8 | get all(): ConfigValues; 9 | addFile(file: string): ConfigValues; 10 | addValue(file: string, key: string, value: string): void; 11 | } 12 | export declare function configListParser(text: string): ConfigList; 13 | export declare function configGetParser(text: string, key: string): ConfigGetResult; 14 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/responses/DiffSummary.d.ts: -------------------------------------------------------------------------------- 1 | import { DiffResult, DiffResultBinaryFile, DiffResultTextFile } from '../../../typings'; 2 | /*** 3 | * The DiffSummary is returned as a response to getting `git().status()` 4 | */ 5 | export declare class DiffSummary implements DiffResult { 6 | changed: number; 7 | deletions: number; 8 | insertions: number; 9 | files: Array; 10 | } 11 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/responses/FileStatusSummary.d.ts: -------------------------------------------------------------------------------- 1 | import { FileStatusResult } from '../../../typings'; 2 | export declare const fromPathRegex: RegExp; 3 | export declare class FileStatusSummary implements FileStatusResult { 4 | path: string; 5 | index: string; 6 | working_dir: string; 7 | readonly from: string | undefined; 8 | constructor(path: string, index: string, working_dir: string); 9 | } 10 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/responses/GetRemoteSummary.d.ts: -------------------------------------------------------------------------------- 1 | export interface RemoteWithoutRefs { 2 | name: string; 3 | } 4 | export interface RemoteWithRefs extends RemoteWithoutRefs { 5 | refs: { 6 | fetch: string; 7 | push: string; 8 | }; 9 | } 10 | export declare function parseGetRemotes(text: string): RemoteWithoutRefs[]; 11 | export declare function parseGetRemotesVerbose(text: string): RemoteWithRefs[]; 12 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/responses/InitSummary.d.ts: -------------------------------------------------------------------------------- 1 | import { InitResult } from '../../../typings'; 2 | export declare class InitSummary implements InitResult { 3 | readonly bare: boolean; 4 | readonly path: string; 5 | readonly existing: boolean; 6 | readonly gitDir: string; 7 | constructor(bare: boolean, path: string, existing: boolean, gitDir: string); 8 | } 9 | export declare function parseInit(bare: boolean, path: string, text: string): InitSummary; 10 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/responses/MergeSummary.d.ts: -------------------------------------------------------------------------------- 1 | import { MergeConflict, MergeConflictDeletion, MergeDetail, MergeResultStatus } from '../../../typings'; 2 | export declare class MergeSummaryConflict implements MergeConflict { 3 | readonly reason: string; 4 | readonly file: string | null; 5 | readonly meta?: MergeConflictDeletion | undefined; 6 | constructor(reason: string, file?: string | null, meta?: MergeConflictDeletion | undefined); 7 | toString(): string; 8 | } 9 | export declare class MergeSummaryDetail implements MergeDetail { 10 | conflicts: MergeConflict[]; 11 | merges: string[]; 12 | result: MergeResultStatus; 13 | get failed(): boolean; 14 | get reason(): string; 15 | toString(): string; 16 | } 17 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/responses/PullSummary.d.ts: -------------------------------------------------------------------------------- 1 | import { PullDetailFileChanges, PullDetailSummary, PullFailedResult, PullResult } from '../../../typings'; 2 | export declare class PullSummary implements PullResult { 3 | remoteMessages: { 4 | all: never[]; 5 | }; 6 | created: never[]; 7 | deleted: string[]; 8 | files: string[]; 9 | deletions: PullDetailFileChanges; 10 | insertions: PullDetailFileChanges; 11 | summary: PullDetailSummary; 12 | } 13 | export declare class PullFailedSummary implements PullFailedResult { 14 | remote: string; 15 | hash: { 16 | local: string; 17 | remote: string; 18 | }; 19 | branch: { 20 | local: string; 21 | remote: string; 22 | }; 23 | message: string; 24 | toString(): string; 25 | } 26 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/responses/StatusSummary.d.ts: -------------------------------------------------------------------------------- 1 | import { StatusResult } from '../../../typings'; 2 | export declare class StatusSummary implements StatusResult { 3 | not_added: never[]; 4 | conflicted: never[]; 5 | created: never[]; 6 | deleted: never[]; 7 | ignored: undefined; 8 | modified: never[]; 9 | renamed: never[]; 10 | files: never[]; 11 | staged: never[]; 12 | ahead: number; 13 | behind: number; 14 | current: null; 15 | tracking: null; 16 | detached: boolean; 17 | isClean: () => boolean; 18 | } 19 | export declare const parseStatusSummary: (text: string) => StatusResult; 20 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/responses/TagList.d.ts: -------------------------------------------------------------------------------- 1 | import { TagResult } from '../../../typings'; 2 | export declare class TagList implements TagResult { 3 | readonly all: string[]; 4 | readonly latest: string | undefined; 5 | constructor(all: string[], latest: string | undefined); 6 | } 7 | export declare const parseTagList: (data: string, customSort?: boolean) => TagList; 8 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/runners/git-executor-chain.d.ts: -------------------------------------------------------------------------------- 1 | import { PluginStore } from '../plugins'; 2 | import { outputHandler, SimpleGitExecutor, SimpleGitTask } from '../types'; 3 | import { Scheduler } from './scheduler'; 4 | export declare class GitExecutorChain implements SimpleGitExecutor { 5 | private _executor; 6 | private _scheduler; 7 | private _plugins; 8 | private _chain; 9 | private _queue; 10 | private _cwd; 11 | get cwd(): string; 12 | set cwd(cwd: string); 13 | get env(): import("../types").GitExecutorEnv; 14 | get outputHandler(): outputHandler | undefined; 15 | constructor(_executor: SimpleGitExecutor, _scheduler: Scheduler, _plugins: PluginStore); 16 | chain(): this; 17 | push(task: SimpleGitTask): Promise; 18 | private attemptTask; 19 | private onFatalException; 20 | private attemptRemoteTask; 21 | private attemptEmptyTask; 22 | private handleTaskData; 23 | private gitResponse; 24 | private _beforeSpawn; 25 | } 26 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/runners/git-executor.d.ts: -------------------------------------------------------------------------------- 1 | import type { PluginStore } from '../plugins'; 2 | import type { GitExecutorEnv, outputHandler, SimpleGitExecutor, SimpleGitTask } from '../types'; 3 | import { Scheduler } from './scheduler'; 4 | export declare class GitExecutor implements SimpleGitExecutor { 5 | cwd: string; 6 | private _scheduler; 7 | private _plugins; 8 | private _chain; 9 | env: GitExecutorEnv; 10 | outputHandler?: outputHandler; 11 | constructor(cwd: string, _scheduler: Scheduler, _plugins: PluginStore); 12 | chain(): SimpleGitExecutor; 13 | push(task: SimpleGitTask): Promise; 14 | } 15 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/runners/promise-wrapped.d.ts: -------------------------------------------------------------------------------- 1 | import { SimpleGit, SimpleGitOptions } from '../../../typings'; 2 | export declare function gitP(...args: [] | [string] | [Partial] | [string, Partial]): SimpleGit; 3 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/runners/scheduler.d.ts: -------------------------------------------------------------------------------- 1 | declare type ScheduleCompleteCallback = () => void; 2 | export declare class Scheduler { 3 | private concurrency; 4 | private logger; 5 | private pending; 6 | private running; 7 | constructor(concurrency?: number); 8 | private schedule; 9 | next(): Promise; 10 | } 11 | export {}; 12 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/runners/tasks-pending-queue.d.ts: -------------------------------------------------------------------------------- 1 | import { SimpleGitTask } from '../types'; 2 | import { GitError } from '../errors/git-error'; 3 | import { OutputLogger } from '../git-logger'; 4 | declare type AnySimpleGitTask = SimpleGitTask; 5 | declare type TaskInProgress = { 6 | name: string; 7 | logger: OutputLogger; 8 | task: AnySimpleGitTask; 9 | }; 10 | export declare class TasksPendingQueue { 11 | private logLabel; 12 | private _queue; 13 | constructor(logLabel?: string); 14 | private withProgress; 15 | private createProgress; 16 | push(task: AnySimpleGitTask): TaskInProgress; 17 | fatal(err: GitError): void; 18 | complete(task: AnySimpleGitTask): void; 19 | attempt(task: AnySimpleGitTask): TaskInProgress; 20 | static getName(name?: string): string; 21 | private static counter; 22 | } 23 | export {}; 24 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/simple-git-api.d.ts: -------------------------------------------------------------------------------- 1 | import { SimpleGitBase } from '../../typings'; 2 | import { outputHandler, SimpleGitExecutor, SimpleGitTask, SimpleGitTaskCallback } from './types'; 3 | export declare class SimpleGitApi implements SimpleGitBase { 4 | private _executor; 5 | constructor(_executor: SimpleGitExecutor); 6 | protected _runTask(task: SimpleGitTask, then?: SimpleGitTaskCallback): any; 7 | add(files: string | string[]): any; 8 | cwd(directory: string | { 9 | path: string; 10 | root?: boolean; 11 | }): any; 12 | hashObject(path: string, write: boolean | unknown): any; 13 | init(bare?: boolean | unknown): any; 14 | merge(): any; 15 | mergeFromTo(remote: string, branch: string): any; 16 | outputHandler(handler: outputHandler): this; 17 | push(): any; 18 | stash(): any; 19 | status(): any; 20 | } 21 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/task-callback.d.ts: -------------------------------------------------------------------------------- 1 | import { SimpleGitTask, SimpleGitTaskCallback } from './types'; 2 | export declare function taskCallback(task: SimpleGitTask, response: Promise, callback?: SimpleGitTaskCallback): void; 3 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/tasks/apply-patch.d.ts: -------------------------------------------------------------------------------- 1 | import { OptionFlags, Options, StringTask } from '../types'; 2 | export declare type ApplyOptions = Options & OptionFlags<'--stat' | '--numstat' | '--summary' | '--check' | '--index' | '--intent-to-add' | '--3way' | '--apply' | '--no-add' | '-R' | '--reverse' | '--allow-binary-replacement' | '--binary' | '--reject' | '-z' | '--inaccurate-eof' | '--recount' | '--cached' | '--ignore-space-change' | '--ignore-whitespace' | '--verbose' | '--unsafe-paths'> & OptionFlags<'--whitespace', 'nowarn' | 'warn' | 'fix' | 'error' | 'error-all'> & OptionFlags<'--build-fake-ancestor' | '--exclude' | '--include' | '--directory', string> & OptionFlags<'-p' | '-C', number>; 3 | export declare function applyPatchTask(patches: string[], customArgs: string[]): StringTask; 4 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/tasks/branch.d.ts: -------------------------------------------------------------------------------- 1 | import { BranchMultiDeleteResult, BranchSingleDeleteResult, BranchSummary } from '../../../typings'; 2 | import { StringTask } from '../types'; 3 | export declare function containsDeleteBranchCommand(commands: string[]): boolean; 4 | export declare function branchTask(customArgs: string[]): StringTask; 5 | export declare function branchLocalTask(): StringTask; 6 | export declare function deleteBranchesTask(branches: string[], forceDelete?: boolean): StringTask; 7 | export declare function deleteBranchTask(branch: string, forceDelete?: boolean): StringTask; 8 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/tasks/change-working-directory.d.ts: -------------------------------------------------------------------------------- 1 | import { SimpleGitExecutor } from '../types'; 2 | export declare function changeWorkingDirectoryTask(directory: string, root?: SimpleGitExecutor): import("./task").EmptyTask; 3 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/tasks/check-ignore.d.ts: -------------------------------------------------------------------------------- 1 | import { StringTask } from '../types'; 2 | export declare function checkIgnoreTask(paths: string[]): StringTask; 3 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/tasks/check-is-repo.d.ts: -------------------------------------------------------------------------------- 1 | import { Maybe, StringTask } from '../types'; 2 | export declare enum CheckRepoActions { 3 | BARE = "bare", 4 | IN_TREE = "tree", 5 | IS_REPO_ROOT = "root" 6 | } 7 | export declare function checkIsRepoTask(action: Maybe): StringTask; 8 | export declare function checkIsRepoRootTask(): StringTask; 9 | export declare function checkIsBareRepoTask(): StringTask; 10 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/tasks/checkout.d.ts: -------------------------------------------------------------------------------- 1 | import type { SimpleGit } from '../../../typings'; 2 | export default function (): Pick; 3 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/tasks/clean.d.ts: -------------------------------------------------------------------------------- 1 | import { CleanSummary } from '../../../typings'; 2 | import { StringTask } from '../types'; 3 | export declare const CONFIG_ERROR_INTERACTIVE_MODE = "Git clean interactive mode is not supported"; 4 | export declare const CONFIG_ERROR_MODE_REQUIRED = "Git clean mode parameter (\"n\" or \"f\") is required"; 5 | export declare const CONFIG_ERROR_UNKNOWN_OPTION = "Git clean unknown option found in: "; 6 | /** 7 | * All supported option switches available for use in a `git.clean` operation 8 | */ 9 | export declare enum CleanOptions { 10 | DRY_RUN = "n", 11 | FORCE = "f", 12 | IGNORED_INCLUDED = "x", 13 | IGNORED_ONLY = "X", 14 | EXCLUDING = "e", 15 | QUIET = "q", 16 | RECURSIVE = "d" 17 | } 18 | /** 19 | * The two modes `git.clean` can run in - one of these must be supplied in order 20 | * for the command to not throw a `TaskConfigurationError` 21 | */ 22 | export declare type CleanMode = CleanOptions.FORCE | CleanOptions.DRY_RUN; 23 | export declare function cleanWithOptionsTask(mode: CleanMode | string, customArgs: string[]): import("./task").EmptyTask | StringTask; 24 | export declare function cleanTask(mode: CleanMode, customArgs: string[]): StringTask; 25 | export declare function isCleanOptionsArray(input: string[]): input is CleanOptions[]; 26 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/tasks/clone.d.ts: -------------------------------------------------------------------------------- 1 | import { EmptyTask } from './task'; 2 | import { OptionFlags, Options, StringTask } from '../types'; 3 | export declare type CloneOptions = Options & OptionFlags<'--bare' | '--dissociate' | '--mirror' | '--no-checkout' | '--no-remote-submodules' | '--no-shallow-submodules' | '--no-single-branch' | '--no-tags' | '--remote-submodules' | '--single-branch' | '--shallow-submodules' | '--verbose'> & OptionFlags<'--depth' | '-j' | '--jobs', number> & OptionFlags<'--branch' | '--origin' | '--recurse-submodules' | '--separate-git-dir' | '--shallow-exclude' | '--shallow-since' | '--template', string>; 4 | export declare function cloneTask(repo: string | undefined, directory: string | undefined, customArgs: string[]): StringTask | EmptyTask; 5 | export declare function cloneMirrorTask(repo: string | undefined, directory: string | undefined, customArgs: string[]): EmptyTask | StringTask; 6 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/tasks/commit.d.ts: -------------------------------------------------------------------------------- 1 | import type { CommitResult, SimpleGit } from '../../../typings'; 2 | import type { StringTask } from '../types'; 3 | export declare function commitTask(message: string[], files: string[], customArgs: string[]): StringTask; 4 | export default function (): Pick; 5 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/tasks/config.d.ts: -------------------------------------------------------------------------------- 1 | import type { SimpleGit } from '../../../typings'; 2 | export declare enum GitConfigScope { 3 | system = "system", 4 | global = "global", 5 | local = "local", 6 | worktree = "worktree" 7 | } 8 | export default function (): Pick; 9 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/tasks/count-objects.d.ts: -------------------------------------------------------------------------------- 1 | import type { SimpleGit } from '../../../typings'; 2 | export interface CountObjectsResult { 3 | count: number; 4 | size: number; 5 | inPack: number; 6 | packs: number; 7 | sizePack: number; 8 | prunePackable: number; 9 | garbage: number; 10 | sizeGarbage: number; 11 | } 12 | export default function (): Pick; 13 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/tasks/diff-name-status.d.ts: -------------------------------------------------------------------------------- 1 | export declare enum DiffNameStatus { 2 | ADDED = "A", 3 | COPIED = "C", 4 | DELETED = "D", 5 | MODIFIED = "M", 6 | RENAMED = "R", 7 | CHANGED = "T", 8 | UNMERGED = "U", 9 | UNKNOWN = "X", 10 | BROKEN = "B" 11 | } 12 | export declare function isDiffNameStatus(input: string): input is DiffNameStatus; 13 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/tasks/diff.d.ts: -------------------------------------------------------------------------------- 1 | import { StringTask } from '../types'; 2 | import { DiffResult } from '../../../typings'; 3 | import { EmptyTask } from './task'; 4 | export declare function diffSummaryTask(customArgs: string[]): StringTask | EmptyTask; 5 | export declare function validateLogFormatConfig(customArgs: unknown[]): EmptyTask | void; 6 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/tasks/fetch.d.ts: -------------------------------------------------------------------------------- 1 | import { FetchResult } from '../../../typings'; 2 | import { StringTask } from '../types'; 3 | import { EmptyTask } from './task'; 4 | export declare function fetchTask(remote: string, branch: string, customArgs: string[]): StringTask | EmptyTask; 5 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/tasks/first-commit.d.ts: -------------------------------------------------------------------------------- 1 | import { SimpleGit } from '../../../typings'; 2 | export default function (): Pick; 3 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/tasks/grep.d.ts: -------------------------------------------------------------------------------- 1 | import { SimpleGit } from '../../../typings'; 2 | export interface GitGrepQuery extends Iterable { 3 | /** Adds one or more terms to be grouped as an "and" to any other terms */ 4 | and(...and: string[]): this; 5 | /** Adds one or more search terms - git.grep will "or" this to other terms */ 6 | param(...param: string[]): this; 7 | } 8 | /** 9 | * Creates a new builder for a `git.grep` query with optional params 10 | */ 11 | export declare function grepQueryBuilder(...params: string[]): GitGrepQuery; 12 | export default function (): Pick; 13 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/tasks/hash-object.d.ts: -------------------------------------------------------------------------------- 1 | import { StringTask } from '../types'; 2 | /** 3 | * Task used by `git.hashObject` 4 | */ 5 | export declare function hashObjectTask(filePath: string, write: boolean): StringTask; 6 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/tasks/init.d.ts: -------------------------------------------------------------------------------- 1 | import { InitResult } from '../../../typings'; 2 | import { StringTask } from '../types'; 3 | export declare function initTask(bare: boolean | undefined, path: string, customArgs: string[]): StringTask; 4 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/tasks/log.d.ts: -------------------------------------------------------------------------------- 1 | import type { Options, StringTask } from '../types'; 2 | import type { LogResult, SimpleGit } from '../../../typings'; 3 | export interface DefaultLogFields { 4 | hash: string; 5 | date: string; 6 | message: string; 7 | refs: string; 8 | body: string; 9 | author_name: string; 10 | author_email: string; 11 | } 12 | export declare type LogOptions = { 13 | file?: string; 14 | format?: T; 15 | from?: string; 16 | mailMap?: boolean; 17 | maxCount?: number; 18 | multiLine?: boolean; 19 | splitter?: string; 20 | strictDate?: boolean; 21 | symmetric?: boolean; 22 | to?: string; 23 | }; 24 | interface ParsedLogOptions { 25 | fields: string[]; 26 | splitter: string; 27 | commands: string[]; 28 | } 29 | export declare function parseLogOptions(opt?: Options | LogOptions, customArgs?: string[]): ParsedLogOptions; 30 | export declare function logTask(splitter: string, fields: string[], customArgs: string[]): StringTask>; 31 | export default function (): Pick; 32 | export {}; 33 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/tasks/merge.d.ts: -------------------------------------------------------------------------------- 1 | import { MergeResult } from '../../../typings'; 2 | import { StringTask } from '../types'; 3 | import { EmptyTask } from './task'; 4 | export declare function mergeTask(customArgs: string[]): EmptyTask | StringTask; 5 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/tasks/move.d.ts: -------------------------------------------------------------------------------- 1 | import { MoveResult } from '../../../typings'; 2 | import { StringTask } from '../types'; 3 | export declare function moveTask(from: string | string[], to: string): StringTask; 4 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/tasks/pull.d.ts: -------------------------------------------------------------------------------- 1 | import { PullResult } from '../../../typings'; 2 | import { Maybe, StringTask } from '../types'; 3 | export declare function pullTask(remote: Maybe, branch: Maybe, customArgs: string[]): StringTask; 4 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/tasks/push.d.ts: -------------------------------------------------------------------------------- 1 | import { PushResult } from '../../../typings'; 2 | import { StringTask } from '../types'; 3 | declare type PushRef = { 4 | remote?: string; 5 | branch?: string; 6 | }; 7 | export declare function pushTagsTask(ref: PushRef | undefined, customArgs: string[]): StringTask; 8 | export declare function pushTask(ref: PushRef | undefined, customArgs: string[]): StringTask; 9 | export {}; 10 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/tasks/remote.d.ts: -------------------------------------------------------------------------------- 1 | import { StringTask } from '../types'; 2 | export declare function addRemoteTask(remoteName: string, remoteRepo: string, customArgs: string[]): StringTask; 3 | export declare function getRemotesTask(verbose: boolean): StringTask; 4 | export declare function listRemotesTask(customArgs: string[]): StringTask; 5 | export declare function remoteTask(customArgs: string[]): StringTask; 6 | export declare function removeRemoteTask(remoteName: string): StringTask; 7 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/tasks/reset.d.ts: -------------------------------------------------------------------------------- 1 | import { Maybe, OptionFlags, Options } from '../types'; 2 | export declare enum ResetMode { 3 | MIXED = "mixed", 4 | SOFT = "soft", 5 | HARD = "hard", 6 | MERGE = "merge", 7 | KEEP = "keep" 8 | } 9 | export declare type ResetOptions = Options & OptionFlags<'-q' | '--quiet' | '--no-quiet' | '--pathspec-from-nul'> & OptionFlags<'--pathspec-from-file', string>; 10 | export declare function resetTask(mode: Maybe, customArgs: string[]): import("../types").StringTask; 11 | export declare function getResetMode(mode: ResetMode | any): Maybe; 12 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/tasks/show.d.ts: -------------------------------------------------------------------------------- 1 | import { SimpleGit } from '../../../typings'; 2 | export default function (): Pick; 3 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/tasks/stash-list.d.ts: -------------------------------------------------------------------------------- 1 | import { LogOptions, LogResult } from '../../../typings'; 2 | import type { StringTask } from '../types'; 3 | import type { EmptyTask } from './task'; 4 | export declare function stashListTask(opt: LogOptions | undefined, customArgs: string[]): EmptyTask | StringTask; 5 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/tasks/status.d.ts: -------------------------------------------------------------------------------- 1 | import { StatusResult } from '../../../typings'; 2 | import { StringTask } from '../types'; 3 | export declare function statusTask(customArgs: string[]): StringTask; 4 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/tasks/sub-module.d.ts: -------------------------------------------------------------------------------- 1 | import { StringTask } from '../types'; 2 | export declare function addSubModuleTask(repo: string, path: string): StringTask; 3 | export declare function initSubModuleTask(customArgs: string[]): StringTask; 4 | export declare function subModuleTask(customArgs: string[]): StringTask; 5 | export declare function updateSubModuleTask(customArgs: string[]): StringTask; 6 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/tasks/tag.d.ts: -------------------------------------------------------------------------------- 1 | import { TagResult } from '../../../typings'; 2 | import { StringTask } from '../types'; 3 | /** 4 | * Task used by `git.tags` 5 | */ 6 | export declare function tagListTask(customArgs?: string[]): StringTask; 7 | /** 8 | * Task used by `git.addTag` 9 | */ 10 | export declare function addTagTask(name: string): StringTask<{ 11 | name: string; 12 | }>; 13 | /** 14 | * Task used by `git.addTag` 15 | */ 16 | export declare function addAnnotatedTagTask(name: string, tagMessage: string): StringTask<{ 17 | name: string; 18 | }>; 19 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/tasks/task.d.ts: -------------------------------------------------------------------------------- 1 | import type { BufferTask, EmptyTaskParser, SimpleGitTask, StringTask } from '../types'; 2 | export declare const EMPTY_COMMANDS: []; 3 | export declare type EmptyTask = { 4 | commands: typeof EMPTY_COMMANDS; 5 | format: 'empty'; 6 | parser: EmptyTaskParser; 7 | onError?: undefined; 8 | }; 9 | export declare function adhocExecTask(parser: EmptyTaskParser): EmptyTask; 10 | export declare function configurationErrorTask(error: Error | string): EmptyTask; 11 | export declare function straightThroughStringTask(commands: string[], trimmed?: boolean): StringTask; 12 | export declare function straightThroughBufferTask(commands: string[]): BufferTask; 13 | export declare function isBufferTask(task: SimpleGitTask): task is BufferTask; 14 | export declare function isEmptyTask(task: SimpleGitTask): task is EmptyTask; 15 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/tasks/version.d.ts: -------------------------------------------------------------------------------- 1 | import type { SimpleGit } from '../../../typings'; 2 | export interface VersionResult { 3 | major: number; 4 | minor: number; 5 | patch: number | string; 6 | agent: string; 7 | installed: boolean; 8 | } 9 | export default function (): Pick; 10 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/types/handlers.d.ts: -------------------------------------------------------------------------------- 1 | import { GitError } from '../errors/git-error'; 2 | /** 3 | * The node-style callback to a task accepts either two arguments with the first as a null 4 | * and the second as the data, or just one argument which is an error. 5 | */ 6 | export declare type SimpleGitTaskCallback = (err: E | null, data: T) => void; 7 | /** 8 | * The event data emitted to the progress handler whenever progress detail is received. 9 | */ 10 | export interface SimpleGitProgressEvent { 11 | /** The underlying method called - push, pull etc */ 12 | method: string; 13 | /** The type of progress being reported, note that any one task may emit many stages - for example `git clone` emits both `receiving` and `resolving` */ 14 | stage: 'compressing' | 'counting' | 'receiving' | 'resolving' | 'unknown' | 'writing' | string; 15 | /** The percent progressed as a number 0 - 100 */ 16 | progress: number; 17 | /** The number of items processed so far */ 18 | processed: number; 19 | /** The total number of items to be processed */ 20 | total: number; 21 | } 22 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/types/tasks.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | import { GitExecutorResult, SimpleGitExecutor } from './index'; 3 | import { EmptyTask } from '../tasks/task'; 4 | export declare type TaskResponseFormat = Buffer | string; 5 | export interface TaskParser { 6 | (stdOut: INPUT, stdErr: INPUT): RESPONSE; 7 | } 8 | export interface EmptyTaskParser { 9 | (executor: SimpleGitExecutor): void; 10 | } 11 | export interface SimpleGitTaskConfiguration { 12 | commands: string[]; 13 | format: FORMAT; 14 | parser: TaskParser; 15 | onError?: (result: GitExecutorResult, error: Error, done: (result: Buffer | Buffer[]) => void, fail: (error: string | Error) => void) => void; 16 | } 17 | export declare type StringTask = SimpleGitTaskConfiguration; 18 | export declare type BufferTask = SimpleGitTaskConfiguration; 19 | export declare type RunnableTask = StringTask | BufferTask; 20 | export declare type SimpleGitTask = RunnableTask | EmptyTask; 21 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/utils/argument-filters.d.ts: -------------------------------------------------------------------------------- 1 | import { Options, Primitives } from '../types'; 2 | export interface ArgumentFilterPredicate { 3 | (input: any): input is T; 4 | } 5 | export declare function filterType(input: K, filter: ArgumentFilterPredicate): K extends T ? T : undefined; 6 | export declare function filterType(input: K, filter: ArgumentFilterPredicate, def: T): T; 7 | export declare const filterArray: ArgumentFilterPredicate>; 8 | export declare function filterPrimitives(input: unknown, omit?: Array<'boolean' | 'string' | 'number'>): input is Primitives; 9 | export declare const filterString: ArgumentFilterPredicate; 10 | export declare const filterStringArray: ArgumentFilterPredicate; 11 | export declare const filterStringOrStringArray: ArgumentFilterPredicate; 12 | export declare function filterPlainObject(input: T | unknown): input is T; 13 | export declare function filterFunction(input: unknown): input is Function; 14 | export declare const filterHasLength: ArgumentFilterPredicate<{ 15 | length: number; 16 | }>; 17 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/utils/exit-codes.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Known process exit codes used by the task parsers to determine whether an error 3 | * was one they can automatically handle 4 | */ 5 | export declare enum ExitCodes { 6 | SUCCESS = 0, 7 | ERROR = 1, 8 | NOT_FOUND = -2, 9 | UNCLEAN = 128 10 | } 11 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/utils/git-output-streams.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | import { TaskResponseFormat } from '../types'; 3 | export declare class GitOutputStreams { 4 | readonly stdOut: T; 5 | readonly stdErr: T; 6 | constructor(stdOut: T, stdErr: T); 7 | asStrings(): GitOutputStreams; 8 | } 9 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/utils/index.d.ts: -------------------------------------------------------------------------------- 1 | export * from './argument-filters'; 2 | export * from './exit-codes'; 3 | export * from './git-output-streams'; 4 | export * from './line-parser'; 5 | export * from './simple-git-options'; 6 | export * from './task-options'; 7 | export * from './task-parser'; 8 | export * from './util'; 9 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/utils/line-parser.d.ts: -------------------------------------------------------------------------------- 1 | export declare class LineParser { 2 | protected matches: string[]; 3 | private _regExp; 4 | constructor(regExp: RegExp | RegExp[], useMatches?: (target: T, match: string[]) => boolean | void); 5 | parse: (line: (offset: number) => string | undefined, target: T) => boolean; 6 | protected useMatches(target: T, match: string[]): boolean | void; 7 | protected resetMatches(): void; 8 | protected prepareMatches(): string[]; 9 | protected addMatch(reg: RegExp, index: number, line?: string): boolean; 10 | protected pushMatch(_index: number, matched: string[]): void; 11 | } 12 | export declare class RemoteLineParser extends LineParser { 13 | protected addMatch(reg: RegExp, index: number, line?: string): boolean; 14 | protected pushMatch(index: number, matched: string[]): void; 15 | } 16 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/utils/simple-git-options.d.ts: -------------------------------------------------------------------------------- 1 | import { SimpleGitOptions } from '../types'; 2 | export declare function createInstanceConfig(...options: Array | undefined>): SimpleGitOptions; 3 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/utils/task-options.d.ts: -------------------------------------------------------------------------------- 1 | import { Maybe, Options } from '../types'; 2 | export declare function appendTaskOptions(options: Maybe, commands?: string[]): string[]; 3 | export declare function getTrailingOptions(args: IArguments, initialPrimitive?: number, objectOnly?: boolean): string[]; 4 | /** 5 | * Given any number of arguments, returns the trailing options argument, ignoring a trailing function argument 6 | * if there is one. When not found, the return value is null. 7 | */ 8 | export declare function trailingOptionsArgument(args: IArguments): Maybe; 9 | /** 10 | * Returns either the source argument when it is a `Function`, or the default 11 | * `NOOP` function constant 12 | */ 13 | export declare function trailingFunctionArgument(args: unknown[] | IArguments | unknown, includeNoop?: boolean): Maybe<(...args: any[]) => unknown>; 14 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/utils/task-parser.d.ts: -------------------------------------------------------------------------------- 1 | import type { MaybeArray, TaskParser, TaskResponseFormat } from '../types'; 2 | import { GitOutputStreams } from './git-output-streams'; 3 | import { LineParser } from './line-parser'; 4 | export declare function callTaskParser(parser: TaskParser, streams: GitOutputStreams): RESPONSE; 5 | export declare function parseStringResponse(result: T, parsers: LineParser[], texts: MaybeArray, trim?: boolean): T; 6 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/src/lib/utils/util.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | import { Maybe } from '../types'; 3 | export declare const NULL = "\0"; 4 | export declare const NOOP: (...args: any[]) => void; 5 | /** 6 | * Returns either the source argument when it is a `Function`, or the default 7 | * `NOOP` function constant 8 | */ 9 | export declare function asFunction any>(source: T | any): T; 10 | /** 11 | * Determines whether the supplied argument is both a function, and is not 12 | * the `NOOP` function. 13 | */ 14 | export declare function isUserFunction(source: T | any): source is T; 15 | export declare function splitOn(input: string, char: string): [string, string]; 16 | export declare function first(input: T, offset?: number): Maybe; 17 | export declare function first(input: T, offset?: number): Maybe; 18 | export declare function last(input: T, offset?: number): Maybe; 19 | export declare function last(input: T, offset?: number): Maybe; 20 | export declare function last(input: T, offset?: number): Maybe; 21 | export declare function toLinesWithContent(input?: string, trimmed?: boolean, separator?: string): string[]; 22 | declare type LineWithContentCallback = (line: string) => T; 23 | export declare function forEachLineWithContent(input: string, callback: LineWithContentCallback): T[]; 24 | export declare function folderExists(path: string): boolean; 25 | /** 26 | * Adds `item` into the `target` `Array` or `Set` when it is not already present and returns the `item`. 27 | */ 28 | export declare function append(target: T[] | Set, item: T): typeof item; 29 | /** 30 | * Adds `item` into the `target` `Array` when it is not already present and returns the `target`. 31 | */ 32 | export declare function including(target: T[], item: T): typeof target; 33 | export declare function remove(target: Set | T[], item: T): T; 34 | export declare const objectToString: (input: any) => string; 35 | export declare function asArray(source: T | T[]): T[]; 36 | export declare function asCamelCase(str: string): string; 37 | export declare function asStringArray(source: T | T[]): string[]; 38 | export declare function asNumber(source: string | null | undefined, onNaN?: number): number; 39 | export declare function prefixedArray(input: T[], prefix: T): T[]; 40 | export declare function bufferToString(input: Buffer | Buffer[]): string; 41 | /** 42 | * Get a new object from a source object with only the listed properties. 43 | */ 44 | export declare function pick(source: Record, properties: string[]): any; 45 | export declare function delay(duration?: number): Promise; 46 | export declare function orVoid(input: T | false): T | undefined; 47 | export {}; 48 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/typings/errors.d.ts: -------------------------------------------------------------------------------- 1 | export * from '../src/lib/errors/git-error'; 2 | export * from '../src/lib/errors/git-construct-error'; 3 | export * from '../src/lib/errors/git-plugin-error'; 4 | export * from '../src/lib/errors/git-response-error'; 5 | export * from '../src/lib/errors/task-configuration-error'; 6 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/typings/index.d.ts: -------------------------------------------------------------------------------- 1 | import { SimpleGitFactory } from './simple-git'; 2 | 3 | export * from './simple-git'; 4 | export * from './errors'; 5 | export * from './response'; 6 | export * from './types'; 7 | 8 | export declare const gitP: SimpleGitFactory; 9 | 10 | export declare const simpleGit: SimpleGitFactory; 11 | 12 | export default simpleGit; 13 | -------------------------------------------------------------------------------- /node_modules/simple-git/dist/typings/types.d.ts: -------------------------------------------------------------------------------- 1 | export type { RemoteWithoutRefs, RemoteWithRefs } from '../src/lib/responses/GetRemoteSummary'; 2 | export type { LogOptions, DefaultLogFields } from '../src/lib/tasks/log'; 3 | 4 | export type { 5 | outputHandler, 6 | Options, 7 | TaskOptions, 8 | SimpleGitOptions, 9 | SimpleGitProgressEvent, 10 | SimpleGitTaskCallback, 11 | } from '../src/lib/types'; 12 | 13 | export { pathspec } from '../src/lib/args/pathspec'; 14 | export type { ApplyOptions } from '../src/lib/tasks/apply-patch'; 15 | export { CheckRepoActions } from '../src/lib/tasks/check-is-repo'; 16 | export { CleanOptions, CleanMode } from '../src/lib/tasks/clean'; 17 | export type { CloneOptions } from '../src/lib/tasks/clone'; 18 | export { GitConfigScope } from '../src/lib/tasks/config'; 19 | export type { CountObjectsResult } from '../src/lib/tasks/count-objects'; 20 | export { DiffNameStatus } from '../src/lib/tasks/diff-name-status'; 21 | export { GitGrepQuery, grepQueryBuilder } from '../src/lib/tasks/grep'; 22 | export { ResetOptions, ResetMode } from '../src/lib/tasks/reset'; 23 | export type { VersionResult } from '../src/lib/tasks/version'; 24 | -------------------------------------------------------------------------------- /node_modules/simple-git/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "simple-git", 3 | "description": "Simple GIT interface for node.js", 4 | "version": "3.25.0", 5 | "author": "Steve King ", 6 | "contributors": [ 7 | { 8 | "name": "Steve King", 9 | "email": "steve@mydev.co" 10 | } 11 | ], 12 | "funding": { 13 | "type": "github", 14 | "url": "https://github.com/steveukx/git-js?sponsor=1" 15 | }, 16 | "dependencies": { 17 | "@kwsites/file-exists": "^1.1.1", 18 | "@kwsites/promise-deferred": "^1.1.1", 19 | "debug": "^4.3.5" 20 | }, 21 | "devDependencies": { 22 | "@kwsites/promise-result": "^1.1.0", 23 | "@simple-git/babel-config": "^1.0.0", 24 | "@types/debug": "^4.1.12", 25 | "@types/jest": "^29.2.2", 26 | "@types/node": "^16", 27 | "esbuild": "^0.14.10", 28 | "esbuild-node-externals": "^1.4.1", 29 | "jest": "^29.3.1", 30 | "ts-node": "^9.0.0", 31 | "typescript": "^4.1.2" 32 | }, 33 | "keywords": [ 34 | "git", 35 | "source control", 36 | "vcs" 37 | ], 38 | "license": "MIT", 39 | "repository": { 40 | "type": "git", 41 | "url": "https://github.com/steveukx/git-js.git", 42 | "directory": "simple-git" 43 | }, 44 | "main": "dist/cjs/index.js", 45 | "module": "dist/esm/index.js", 46 | "exports": { 47 | ".": { 48 | "types": "./dist/typings/index.d.ts", 49 | "import": "./dist/esm/index.js", 50 | "require": "./dist/cjs/index.js" 51 | }, 52 | "./promise": { 53 | "require": "./promise.js" 54 | } 55 | }, 56 | "types": "./dist/typings/index.d.ts", 57 | "files": [ 58 | "promise.*", 59 | "dist" 60 | ] 61 | } -------------------------------------------------------------------------------- /node_modules/simple-git/promise.js: -------------------------------------------------------------------------------- 1 | console.error(`============================================= 2 | simple-git has supported promises / async await since version 2.6.0. 3 | Importing from 'simple-git/promise' has been deprecated and will 4 | report this error until the next major release of version 4. 5 | 6 | To upgrade, change all 'simple-git/promise' imports to just 'simple-git' 7 | =============================================`); 8 | 9 | const simpleGit = require('.'); 10 | 11 | module.exports = Object.assign( 12 | function () { 13 | return simpleGit.gitP.apply(null, arguments); 14 | }, 15 | simpleGit, 16 | { default: simpleGit.gitP } 17 | ); 18 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "frontend-project", 3 | "version": "1.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "frontend-project", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "dependencies": { 12 | "simple-git": "^3.25.0" 13 | } 14 | }, 15 | "node_modules/@kwsites/file-exists": { 16 | "version": "1.1.1", 17 | "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", 18 | "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", 19 | "license": "MIT", 20 | "dependencies": { 21 | "debug": "^4.1.1" 22 | } 23 | }, 24 | "node_modules/@kwsites/promise-deferred": { 25 | "version": "1.1.1", 26 | "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", 27 | "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", 28 | "license": "MIT" 29 | }, 30 | "node_modules/debug": { 31 | "version": "4.3.6", 32 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", 33 | "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", 34 | "license": "MIT", 35 | "dependencies": { 36 | "ms": "2.1.2" 37 | }, 38 | "engines": { 39 | "node": ">=6.0" 40 | }, 41 | "peerDependenciesMeta": { 42 | "supports-color": { 43 | "optional": true 44 | } 45 | } 46 | }, 47 | "node_modules/ms": { 48 | "version": "2.1.2", 49 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 50 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 51 | "license": "MIT" 52 | }, 53 | "node_modules/simple-git": { 54 | "version": "3.25.0", 55 | "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.25.0.tgz", 56 | "integrity": "sha512-KIY5sBnzc4yEcJXW7Tdv4viEz8KyG+nU0hay+DWZasvdFOYKeUZ6Xc25LUHHjw0tinPT7O1eY6pzX7pRT1K8rw==", 57 | "license": "MIT", 58 | "dependencies": { 59 | "@kwsites/file-exists": "^1.1.1", 60 | "@kwsites/promise-deferred": "^1.1.1", 61 | "debug": "^4.3.5" 62 | }, 63 | "funding": { 64 | "type": "github", 65 | "url": "https://github.com/steveukx/git-js?sponsor=1" 66 | } 67 | } 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "frontend-project", 3 | "version": "1.0.0", 4 | "description": "[![GitHub contributors](https://img.shields.io/github/contributors/ArmanIdrisi/frontend-projects)](https://github.com/ArmanIdrisi/frontend-projects/graphs/contributors)\r [![GitHub last commit](https://img.shields.io/github/last-commit/ArmanIdrisi/frontend-projects)](https://github.com/ArmanIdrisi/frontend-projects/commits/main)", 5 | "main": "commit-history.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "simple-git": "^3.25.0" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /project-10_404_error_page/css/index.css: -------------------------------------------------------------------------------- 1 | @import url("https://fonts.googleapis.com/css?family=Open+Sans:400,700,800|Roboto"); 2 | 3 | * { 4 | margin: 0; 5 | padding: 0; 6 | box-sizing: border-box; 7 | font-family: "Open Sans", sans-serif; 8 | font-weight: 400; 9 | } 10 | body { 11 | height: 100vh; 12 | display: flex; 13 | justify-content: center; 14 | align-items: center; 15 | background-color: #e8e8e8; 16 | } 17 | .container { 18 | text-align: center; 19 | } 20 | .container img { 21 | width: 550px; 22 | } 23 | .container h1 { 24 | font-size: 45px; 25 | } 26 | .container p { 27 | font-size: 25px; 28 | margin: 20px 0; 29 | color: #004273; 30 | } 31 | .container button { 32 | padding: 5px; 33 | width: 30%; 34 | height: 40px; 35 | border: none; 36 | outline: none; 37 | border-radius: 3px; 38 | background: #004273; 39 | color: white; 40 | margin: 10px 0 0 0; 41 | } 42 | 43 | /*For Responsiveness*/ 44 | @media (max-width: 760px) { 45 | .container img { 46 | width: 100%; 47 | } 48 | .container h1 { 49 | font-size: 33px; 50 | } 51 | .container p { 52 | font-size: 15px; 53 | padding: 0 10px; 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /project-10_404_error_page/img/error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webcat882/frontend-project/fdc2e47000234c3732c7826d13d817bc69b660b2/project-10_404_error_page/img/error.png -------------------------------------------------------------------------------- /project-10_404_error_page/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 404 Error Occurred 8 | 9 | 10 |
11 | 404 Error 12 |

Didn’t find anything here!

13 |

Sorry! The Request Url Not Found On The Server

14 | 15 |
16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /project-10_404_error_page/js/index.js: -------------------------------------------------------------------------------- 1 | //For Go Back Button : (It's Optional You Can Also Use Anchor Tag Of Html) 2 | let btn = document.getElementById("btn"); 3 | btn.addEventListener("click", () => { 4 | window.location.href="/" 5 | }); 6 | -------------------------------------------------------------------------------- /project-11_analog_clock/css/index.css: -------------------------------------------------------------------------------- 1 | * { 2 | margin: 0; 3 | padding: 0; 4 | box-sizing: border-box; 5 | } 6 | 7 | body { 8 | height: 100vh; 9 | display: flex; 10 | justify-content: center; 11 | align-items: center; 12 | } 13 | 14 | #clockContainer { 15 | position: relative; 16 | height: 40vw; 17 | width: 40vw; 18 | background: url(https://i.ibb.co/K7wS7TF/imgonlinecomua-Compress-To-Size-Om-NATj-UMFKw-300x300.jpg) no-repeat; 19 | background-size: 100%; 20 | } 21 | 22 | #clockContainer #hour, 23 | #clockContainer #minute, 24 | #clockContainer #second { 25 | position: absolute; 26 | background: black; 27 | border-radius: 10px; 28 | transform-origin: bottom; 29 | } 30 | 31 | #clockContainer #hour { 32 | width: 1.8%; 33 | height: 25%; 34 | top: 25%; 35 | left: 48.85%; 36 | opacity: 0.8; 37 | } 38 | 39 | #clockContainer #minute { 40 | width: 1.6%; 41 | height: 30%; 42 | top: 19%; 43 | left: 48.9%; 44 | opacity: 0.8; 45 | } 46 | 47 | #clockContainer #second { 48 | width: 1%; 49 | height: 40%; 50 | top: 9%; 51 | left: 49.25%; 52 | opacity: 0.8; 53 | } 54 | -------------------------------------------------------------------------------- /project-11_analog_clock/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | project-11_analog_clock 8 | 9 | 10 |
11 |
12 |
13 |
14 |
15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /project-11_analog_clock/js/index.js: -------------------------------------------------------------------------------- 1 | // Selecting the hour, minute, and second elements by their IDs 2 | const hour = document.getElementById("hour"); 3 | const minute = document.getElementById("minute"); 4 | const second = document.getElementById("second"); 5 | 6 | // Setting up an interval to update the clock every second 7 | setInterval(() => { 8 | // Creating a new Date object to get the current time 9 | const now = new Date(); 10 | 11 | // Extracting the hours, minutes, and seconds from the Date object 12 | const hours = now.getHours(); 13 | const minutes = now.getMinutes(); 14 | const seconds = now.getSeconds(); 15 | 16 | // Calculating the rotation angles for the hour, minute, and second hands 17 | const hourRotation = 30 * hours + minutes / 2; 18 | const minuteRotation = 6 * minutes; 19 | const secondRotation = 6 * seconds; 20 | 21 | // Setting the transform property of the hour, minute, and second elements to rotate them to their respective angles 22 | hour.style.transform = `rotate(${hourRotation}deg)`; 23 | minute.style.transform = `rotate(${minuteRotation}deg)`; 24 | second.style.transform = `rotate(${secondRotation}deg)`; 25 | }, 1000); 26 | -------------------------------------------------------------------------------- /project-12_contact_form/css/index.css: -------------------------------------------------------------------------------- 1 | @import url("https://fonts.googleapis.com/css2?family=Poppins:wght@300&display=swap"); 2 | * { 3 | margin: 0px; 4 | padding: 0px; 5 | font-family: "Poppins", sans-serif; 6 | } 7 | 8 | body { 9 | height: 100vh; 10 | display: flex; 11 | justify-content: center; 12 | align-items: center; 13 | background-color: #142457; 14 | } 15 | .container { 16 | background: white; 17 | height: 550px; 18 | width: 100%; 19 | max-width: 430px; 20 | padding: 20px; 21 | text-align: center; 22 | border-radius: 8px; 23 | } 24 | .container input, 25 | textarea { 26 | width: 100%; 27 | outline: none; 28 | margin: 15px 0; 29 | border-radius: 8px; 30 | border: 1px solid #ccc; 31 | padding: 10px 5px; 32 | } 33 | .container button { 34 | width: 100%; 35 | outline: none; 36 | border-radius: 8px; 37 | border: 2px solid #142457; 38 | padding: 10px 5px; 39 | color: black; 40 | background: transparent; 41 | transition: 0.5s ease-in-out; 42 | } 43 | .container input:focus,textarea:focus { 44 | border: 2px solid #142457; 45 | } 46 | .container button:hover { 47 | background: #142457; 48 | color: white; 49 | } 50 | -------------------------------------------------------------------------------- /project-12_contact_form/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Contact Us - <Site Title> 9 | 10 | 11 |
12 |
13 |

Get In Touch

14 | 15 | 16 | 17 | 18 | 19 |
20 |
21 | 22 | 23 | -------------------------------------------------------------------------------- /project-12_contact_form/js/index.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webcat882/frontend-project/fdc2e47000234c3732c7826d13d817bc69b660b2/project-12_contact_form/js/index.js -------------------------------------------------------------------------------- /project-13_profile_card/css/index.css: -------------------------------------------------------------------------------- 1 | /* Google Fonts - Poppins */ 2 | @import url("https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap"); 3 | 4 | * { 5 | margin: 0; 6 | padding: 0; 7 | box-sizing: border-box; 8 | font-family: "Poppins", sans-serif; 9 | } 10 | body { 11 | height: 100vh; 12 | display: flex; 13 | align-items: center; 14 | justify-content: center; 15 | background-color: #f4f4f4; 16 | } 17 | .profile-card { 18 | display: flex; 19 | flex-direction: column; 20 | align-items: center; 21 | max-width: 350px; 22 | width: 100%; 23 | background: #fff; 24 | padding: 25px; 25 | box-shadow: 0 5px 10px rgba(0, 0, 0, 0.1); 26 | position: relative; 27 | } 28 | .profile-card::before { 29 | content: ""; 30 | position: absolute; 31 | top: 0; 32 | left: 0; 33 | height: 36%; 34 | width: 100%; 35 | background-color: #4070f4; 36 | } 37 | .profile-card .image { 38 | position: relative; 39 | height: 150px; 40 | width: 150px; 41 | border-radius: 50%; 42 | background-color: #4070f4; 43 | padding: 3px; 44 | margin-bottom: 10px; 45 | } 46 | .profile-card .image .profile-img { 47 | height: 100%; 48 | width: 100%; 49 | object-fit: cover; 50 | border-radius: 50%; 51 | border: 3px solid #fff; 52 | } 53 | .profile-card .text-data { 54 | display: flex; 55 | flex-direction: column; 56 | align-items: center; 57 | color: #333; 58 | margin-bottom: 20px; 59 | } 60 | .profile-card .text-data .name { 61 | font-size: 22px; 62 | font-weight: 500; 63 | } 64 | .profile-card ul { 65 | list-style: none; 66 | } 67 | .profile-card ul li { 68 | margin-bottom: 10px; 69 | } 70 | .profile-card .media-buttons { 71 | display: flex; 72 | align-items: center; 73 | margin-top: 15px; 74 | } 75 | .profile-card .media-buttons .link { 76 | display: flex; 77 | align-items: center; 78 | justify-content: center; 79 | color: #fff; 80 | font-size: 18px; 81 | height: 34px; 82 | width: 34px; 83 | border-radius: 50%; 84 | margin: 0 8px; 85 | background-color: #4070f4; 86 | text-decoration: none; 87 | } 88 | -------------------------------------------------------------------------------- /project-13_profile_card/img/profile.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webcat882/frontend-project/fdc2e47000234c3732c7826d13d817bc69b660b2/project-13_profile_card/img/profile.jpg -------------------------------------------------------------------------------- /project-13_profile_card/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | User Profile 8 | 12 | 13 | 14 |
15 |
16 | 17 |
18 | 19 |
20 | John Doe 21 |
22 |
23 |
    24 |
  • john.doe@example.com
  • 25 |
  • +1 555-555-5555
  • 26 |
  • www.johndoe.com
  • 27 |
  • 123 Main Street, Anytown, USA
  • 28 |
29 |
30 | 44 |
45 | 46 | 47 | -------------------------------------------------------------------------------- /project-13_profile_card/js/index.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webcat882/frontend-project/fdc2e47000234c3732c7826d13d817bc69b660b2/project-13_profile_card/js/index.js -------------------------------------------------------------------------------- /project-14_music_loader/css/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | display: flex; 3 | justify-content: center; 4 | align-items: center; 5 | height: 100vh; 6 | } 7 | .loader { 8 | display: flex; 9 | } 10 | 11 | .bar { 12 | width: 6px; 13 | height: 20px; 14 | margin: 0 4px; 15 | background-color: #000; 16 | border-radius: 4px; 17 | animation: loader 1s ease-in-out infinite; 18 | } 19 | .bar:nth-child(1) { 20 | animation-delay: 0s; 21 | } 22 | 23 | .bar:nth-child(2) { 24 | animation-delay: 0.1s; 25 | } 26 | 27 | .bar:nth-child(3) { 28 | animation-delay: 0.2s; 29 | } 30 | 31 | .bar:nth-child(4) { 32 | animation-delay: 0.3s; 33 | } 34 | 35 | .bar:nth-child(5) { 36 | animation-delay: 0.4s; 37 | } 38 | @keyframes loader { 39 | 0% { 40 | transform: scale(1); 41 | } 42 | 20% { 43 | transform: scale(1, 2); 44 | } 45 | 40% { 46 | transform: scale(1); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /project-14_music_loader/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | CSS Music Loader 9 | 10 | 11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 | 19 | 20 | -------------------------------------------------------------------------------- /project-14_music_loader/js/index.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webcat882/frontend-project/fdc2e47000234c3732c7826d13d817bc69b660b2/project-14_music_loader/js/index.js -------------------------------------------------------------------------------- /project-15_currrency_convertor/css/index.css: -------------------------------------------------------------------------------- 1 | /* Global styles */ 2 | body { 3 | height: 100vh; 4 | display: flex; 5 | justify-content: center; 6 | align-items: center; 7 | background-color: steelblue; 8 | } 9 | 10 | /* Container for the entire form */ 11 | .wrapper { 12 | text-align: center; 13 | background: rgba(0, 0, 0, 0.3); 14 | padding: 30px 0; 15 | max-width: 430px; 16 | width: 100%; 17 | border-radius: 8px; 18 | } 19 | 20 | /* Header style */ 21 | h2 { 22 | font-weight: 500; 23 | color: white; 24 | } 25 | 26 | /* Styles for currency input section */ 27 | .currency-input { 28 | display: flex; 29 | flex-direction: column; 30 | align-items: center; 31 | margin-top: 20px; 32 | } 33 | 34 | .currency-input label { 35 | color: white; 36 | font-weight: 400; 37 | font-size: 18px; 38 | text-transform: uppercase; 39 | margin-bottom: 5px; 40 | } 41 | 42 | .currency-input input { 43 | width: 50%; 44 | padding: 10px; 45 | margin-top: 3px; 46 | outline: none; 47 | border: 1px solid #ccc; 48 | border-radius: 5px; 49 | font-size: 16px; 50 | } 51 | 52 | /* Styles for currency select boxes */ 53 | .select-box { 54 | display: flex; 55 | gap: 10px; 56 | flex-direction: row; 57 | justify-content: center; 58 | padding: 10px; 59 | margin: 10px 0; 60 | } 61 | 62 | .select { 63 | display: flex; 64 | flex-direction: column; 65 | align-items: center; 66 | width: 50%; 67 | } 68 | 69 | .select label { 70 | color: white; 71 | font-weight: 400; 72 | font-size: 18px; 73 | text-transform: uppercase; 74 | } 75 | 76 | .select select { 77 | width: 100%; 78 | margin-top: 3px; 79 | padding: 10px; 80 | outline: none; 81 | } 82 | 83 | /* Button styles */ 84 | button { 85 | cursor: pointer; 86 | display: inline-block; 87 | margin: 0 10px; 88 | background: lightblue; 89 | padding: 15px; 90 | font-family: inherit; 91 | font-size: 16px; 92 | border: 0; 93 | border-radius: 5px; 94 | } 95 | 96 | /* Output paragraph style */ 97 | p.output { 98 | font-weight: 300; 99 | color: white; 100 | display: none; 101 | } 102 | -------------------------------------------------------------------------------- /project-15_currrency_convertor/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Stopwatch Timer 8 | 9 | 10 |
11 |

Currency converter

12 |
13 | 14 | 15 |
16 |
17 |
18 | 19 | 20 |
21 |
22 | 23 | 24 |
25 |
26 | 27 |

₹99

28 |
29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /project-15_currrency_convertor/js/country.js: -------------------------------------------------------------------------------- 1 | const currencyCodes = [ 2 | "AED", 3 | "AFN", 4 | "XCD", 5 | "ALL", 6 | "AMD", 7 | "ANG", 8 | "AOA", 9 | "AQD", 10 | "ARS", 11 | "AUD", 12 | "AZN", 13 | "BAM", 14 | "BBD", 15 | "BDT", 16 | "XOF", 17 | "BGN", 18 | "BHD", 19 | "BIF", 20 | "BMD", 21 | "BND", 22 | "BOB", 23 | "BRL", 24 | "BSD", 25 | "NOK", 26 | "BWP", 27 | "BYR", 28 | "BZD", 29 | "CAD", 30 | "CDF", 31 | "XAF", 32 | "CHF", 33 | "CLP", 34 | "CNY", 35 | "COP", 36 | "CRC", 37 | "CUP", 38 | "CVE", 39 | "CYP", 40 | "CZK", 41 | "DJF", 42 | "DKK", 43 | "DOP", 44 | "DZD", 45 | "ECS", 46 | "EEK", 47 | "EGP", 48 | "ETB", 49 | "EUR", 50 | "FJD", 51 | "FKP", 52 | "GBP", 53 | "GEL", 54 | "GGP", 55 | "GHS", 56 | "GIP", 57 | "GMD", 58 | "GNF", 59 | "GTQ", 60 | "GYD", 61 | "HKD", 62 | "HNL", 63 | "HRK", 64 | "HTG", 65 | "HUF", 66 | "IDR", 67 | "ILS", 68 | "INR", 69 | "IQD", 70 | "IRR", 71 | "ISK", 72 | "JMD", 73 | "JOD", 74 | "JPY", 75 | "KES", 76 | "KGS", 77 | "KHR", 78 | "KMF", 79 | "KPW", 80 | "KRW", 81 | "KWD", 82 | "KYD", 83 | "KZT", 84 | "LAK", 85 | "LBP", 86 | "LKR", 87 | "LRD", 88 | "LSL", 89 | "LTL", 90 | "LVL", 91 | "LYD", 92 | "MAD", 93 | "MDL", 94 | "MGA", 95 | "MKD", 96 | "MMK", 97 | "MNT", 98 | "MOP", 99 | "MRO", 100 | "MTL", 101 | "MUR", 102 | "MVR", 103 | "MWK", 104 | "MXN", 105 | "MYR", 106 | "MZN", 107 | "NAD", 108 | "XPF", 109 | "NGN", 110 | "NIO", 111 | "NPR", 112 | "NZD", 113 | "OMR", 114 | "PAB", 115 | "PEN", 116 | "PGK", 117 | "PHP", 118 | "PKR", 119 | "PLN", 120 | "PYG", 121 | "QAR", 122 | "RON", 123 | "RSD", 124 | "RUB", 125 | "RWF", 126 | "SAR", 127 | "SBD", 128 | "SCR", 129 | "SDG", 130 | "SEK", 131 | "SGD", 132 | "SKK", 133 | "SLL", 134 | "SOS", 135 | "SRD", 136 | "STD", 137 | "SVC", 138 | "SYP", 139 | "SZL", 140 | "THB", 141 | "TJS", 142 | "TMT", 143 | "TND", 144 | "TOP", 145 | "TRY", 146 | "TTD", 147 | "TWD", 148 | "TZS", 149 | "UAH", 150 | "UGX", 151 | "USD", 152 | "UYU", 153 | "UZS", 154 | "VEF", 155 | "VND", 156 | "VUV", 157 | "YER", 158 | "ZAR", 159 | "ZMK", 160 | "ZWD", 161 | ]; 162 | 163 | // Get a NodeList of all select inputs on the page 164 | let selectInputs = document.querySelectorAll("select"); 165 | console.log(selectInputs); 166 | // Loop through each select input 167 | selectInputs.forEach((selectInput) => { 168 | for (let i=0;i { 8 | const amount = amountInput.value; 9 | const from = fromCurrencySelect.value; 10 | const to = toCurrencySelect.value; 11 | 12 | if (amount < 1) { 13 | alert("Invalid amount"); 14 | return; 15 | } 16 | 17 | fetch(`https://v6.exchangerate-api.com/v6/814385ebe55498d47ded4e4f/latest/${from}`) 18 | .then((res) => res.json()) 19 | .then((response) => { 20 | const conversionRate = response.conversion_rates[to]; 21 | if (conversionRate !== undefined) { 22 | const result = amount * conversionRate; 23 | outputElement.textContent = `${amount} ${from} = ${result} ${to}`; 24 | outputElement.style.display = "block"; 25 | } else { 26 | alert("Invalid currency selection"); 27 | } 28 | }) 29 | .catch((e) => { 30 | alert("Something went wrong"); 31 | }); 32 | }); -------------------------------------------------------------------------------- /project-16_pricing_component/app.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | const toggleBtn = document.querySelector(".toggle-btn"); 4 | const toggleArea = document.querySelector(".toggle-area"); 5 | const basicPrice = document.querySelector(".price-1"); 6 | const profPrice = document.querySelector(".price-2"); 7 | const masterPrice = document.querySelector(".price-3"); 8 | 9 | toggleArea.addEventListener("click", function (e) { 10 | e.preventDefault(); 11 | if (toggleArea.classList.contains("monthly")) { 12 | toggleArea.classList.remove("monthly"); 13 | toggleArea.classList.add("anually"); 14 | basicPrice.innerHTML = `

$199.99

`; 15 | profPrice.innerHTML = `

$249.99

`; 16 | masterPrice.innerHTML = `

$399.99

`; 17 | } else { 18 | toggleArea.classList.add("monthly"); 19 | toggleArea.classList.remove("anually"); 20 | basicPrice.innerHTML = `

$19.99

`; 21 | profPrice.innerHTML = `

$24.99

`; 22 | masterPrice.innerHTML = `

$39.99

`; 23 | } 24 | }); 25 | -------------------------------------------------------------------------------- /project-16_pricing_component/images/bg-bottom.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /project-16_pricing_component/images/bg-top.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /project-16_pricing_component/images/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webcat882/frontend-project/fdc2e47000234c3732c7826d13d817bc69b660b2/project-16_pricing_component/images/favicon-32x32.png -------------------------------------------------------------------------------- /project-16_pricing_component/images/project-preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webcat882/frontend-project/fdc2e47000234c3732c7826d13d817bc69b660b2/project-16_pricing_component/images/project-preview.png -------------------------------------------------------------------------------- /project-16_pricing_component/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | Pricing Component With Toggle 12 | 13 | 14 | 15 | 16 |
17 |

Our Pricing

18 | 25 |
26 |
27 |
28 | 29 |
30 |

Basic

31 |

$19.99

32 |
    33 |
    34 |
  • 500 GB Storage
  • 35 |
    36 |
  • 2 Users Allowed
  • 37 |
    38 |
  • Send up to 3 GB
  • 39 |
    40 |
41 | 42 |
43 | 44 |
45 |

Professional

46 |

$24.99

47 |
    48 |
    49 |
  • 1 TB Storage
  • 50 |
    51 |
  • 5 Users Allowed
  • 52 |
    53 |
  • Send up to 10 GB
  • 54 |
    55 |
56 | 57 |
58 | 59 |
60 |

Master

61 |

$39.99

62 |
    63 |
    64 |
  • 2 TB Storage
  • 65 |
    66 |
  • 10 Users Allowed
  • 67 |
    68 |
  • Send up to 20 GB
  • 69 |
    70 |
71 | 72 |
73 |
74 |
75 | 76 | 77 | 78 | 79 | 80 | -------------------------------------------------------------------------------- /project-17_remove_Signature_bg/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webcat882/frontend-project/fdc2e47000234c3732c7826d13d817bc69b660b2/project-17_remove_Signature_bg/favicon.png -------------------------------------------------------------------------------- /project-17_remove_Signature_bg/images/remove_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webcat882/frontend-project/fdc2e47000234c3732c7826d13d817bc69b660b2/project-17_remove_Signature_bg/images/remove_bg.png -------------------------------------------------------------------------------- /project-17_remove_Signature_bg/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | remove_bg 9 | 10 | 11 |
12 |

Remove Background From Your Image

13 |

Upload your image here

14 | 15 |
16 |
17 | image 18 |
19 |
20 | 26 | 29 | 30 | 38 | 39 |
40 | 47 | 54 |
55 |
56 |
57 |
58 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /project-17_remove_Signature_bg/script.js: -------------------------------------------------------------------------------- 1 | let imageURL; 2 | 3 | const fileInput = document.getElementById("fileInput"); 4 | const file = document.getElementById("file"); 5 | const uploadedImage = document.getElementById("uploadedImage"); 6 | const removeBgButton = document.getElementById("removeBgButton"); 7 | const downloadButton = document.getElementById("downloadBtn"); 8 | const reloadButton = document.getElementById("reloadBtn"); 9 | 10 | // Hide the download button initially 11 | reloadButton.style.display = "none"; 12 | downloadButton.style.display = "none"; 13 | 14 | fileInput.addEventListener("change", function (event) { 15 | if (event.target.files && event.target.files[0]) { 16 | const reader = new FileReader(); 17 | 18 | reader.onload = function (e) { 19 | uploadedImage.src = e.target.result; 20 | }; 21 | reader.readAsDataURL(event.target.files[0]); 22 | } 23 | }); 24 | 25 | function submitHandler() { 26 | removeBgButton.classList.toggle("btn_loading"); 27 | const fileInput = document.getElementById("fileInput"); 28 | console.log(fileInput.files); 29 | const image = fileInput.files[0]; 30 | 31 | if (!fileInput.files || fileInput.files.length === 0) { 32 | alert("Please select an image before submitting."); 33 | return; 34 | } 35 | 36 | // Multipart file 37 | const formData = new FormData(); 38 | formData.append("image_file", image); 39 | formData.append("size", "auto"); 40 | 41 | const apiKey = "5V4yNGbdJ9Dr83u6GAbxD8Vw"; 42 | 43 | fetch("https://api.remove.bg/v1.0/removebg", { 44 | method: "POST", 45 | headers: { 46 | "X-Api-Key": apiKey, 47 | }, 48 | body: formData, 49 | }) 50 | .then(function (response) { 51 | return response.blob(); 52 | }) 53 | .then(function (blob) { 54 | console.log(blob); 55 | const url = URL.createObjectURL(blob); 56 | imageURL = url; 57 | uploadedImage.src = url; 58 | reloadButton.style.display = "block"; 59 | file.style.display = "none"; 60 | 61 | downloadButton.style.display = "block"; 62 | removeBgButton.style.display = "none"; 63 | }) 64 | .catch(); 65 | } 66 | 67 | function downloadFile() { 68 | var anchorElement = document.createElement("a"); 69 | anchorElement.href = imageURL; 70 | anchorElement.download = "removed_bg.png"; 71 | document.body.appendChild(anchorElement); 72 | 73 | anchorElement.click(); 74 | 75 | document.body.removeChild(anchorElement); 76 | } 77 | 78 | function reset() { 79 | window.location.reload(); 80 | } 81 | -------------------------------------------------------------------------------- /project-17_remove_Signature_bg/styles.css: -------------------------------------------------------------------------------- 1 | * { 2 | margin: 0; 3 | padding: 0; 4 | } 5 | 6 | body { 7 | height: 100vh; 8 | font-size: 62.5%; 9 | display: flex; 10 | align-items: center; 11 | justify-content: center; 12 | text-align: center; 13 | box-sizing: border-box; 14 | background: #f8edfa; 15 | } 16 | 17 | h1 { 18 | font: 2rem "Cambria", "Cochin", Georgia, Times, "Times New Roman", serif; 19 | color: #38464c; 20 | letter-spacing: 0.2rem; 21 | padding: 0.3rem; 22 | } 23 | 24 | h4 { 25 | font: 1rem "Lucida Sans", "Lucida Sans Regular", "Lucida Grande", 26 | "Lucida Sans Unicode", Geneva, Verdana, sans-serif; 27 | color: #455a64; 28 | text-align: center; 29 | padding: 0.5rem; 30 | margin: 1rem; 31 | } 32 | 33 | .img { 34 | height: 300px; 35 | /* width: auto; */ 36 | padding: 0.8rem 1.6rem; 37 | border-radius: 1.5rem; 38 | display: flex; 39 | align-items: center; 40 | justify-content: center; 41 | overflow: hidden; 42 | box-shadow: rgba(0, 0, 0, 0.16) 0px 3px 6px, rgba(0, 0, 0, 0.23) 0px 3px 6px; 43 | } 44 | 45 | img { 46 | object-fit: contain; 47 | width: 90%; 48 | height: 90%; 49 | } 50 | 51 | .custom-file-input { 52 | display: inline-block; 53 | padding: 0.8rem 1.5rem; 54 | color: #ffffff; 55 | background-color: #f5af09; 56 | cursor: pointer; 57 | border-radius: 0.4rem; 58 | font: bold 15px "Quicksand", sans-serif; 59 | transition: all 0.3s ease; 60 | } 61 | 62 | .custom-file-input:hover { 63 | background-color: #e09707; 64 | } 65 | 66 | .btn { 67 | padding: 1rem; 68 | text-align: center; 69 | } 70 | 71 | .btn-container { 72 | display: flex; 73 | justify-content: center; 74 | } 75 | 76 | button { 77 | position: relative; 78 | padding: 0.8rem 1.6rem; 79 | margin: 1rem; 80 | border: none; 81 | outline: none; 82 | border-radius: 0.5rem; 83 | cursor: pointer; 84 | font: bold 1.2rem "Quicksand", sans-serif; 85 | color: #ffffff; 86 | transition: all 0.2s; 87 | } 88 | 89 | .btn_loading .btn__text { 90 | visibility: hidden; 91 | opacity: 0; 92 | } 93 | 94 | .btn_loading::after { 95 | content: " "; 96 | position: absolute; 97 | width: 1.5rem; 98 | height: 1.5rem; 99 | top: 0; 100 | bottom: 0; 101 | left: 0; 102 | right: 0; 103 | margin: auto; 104 | border: 0.4rem solid transparent; 105 | border-radius: 50%; 106 | border-top-color: #ffffff; 107 | animation: loader 1s ease infinite; 108 | } 109 | 110 | #removeBgButton:active { 111 | background: #007a63; 112 | } 113 | 114 | @keyframes loader { 115 | from { 116 | transform: rotate(0turn); 117 | } 118 | to { 119 | transform: rotate(1turn); 120 | } 121 | } 122 | 123 | @media screen and (max-width: 760px) { 124 | body { 125 | font-size: 45%; 126 | } 127 | h1 { 128 | font-size: 1.8rem; 129 | } 130 | button { 131 | font-size: 1rem; 132 | } 133 | .img { 134 | margin: 16px; 135 | padding: 0; 136 | } 137 | } 138 | -------------------------------------------------------------------------------- /project-18_toggle_dark_light_mode/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Dark & Light Mode 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 |
14 |
15 | image not found 19 |
20 |

21 | lorem ipsum dolor sit amet consectetur adipiscing elit 22 | namaste namaste 23 |

24 |
25 |
26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /project-18_toggle_dark_light_mode/script.js: -------------------------------------------------------------------------------- 1 | document.addEventListener("DOMContentLoaded", function () { 2 | const button = document.getElementById("mode-toggle"); 3 | const body = document.body; 4 | const isDarkMode = localStorage.getItem("darkMode") === "true"; 5 | 6 | // Function to set dark mode state 7 | function setDarkMode(isDark) { 8 | if (isDark) { 9 | body.classList.add("dark"); 10 | localStorage.setItem("darkMode", "true"); 11 | } else { 12 | body.classList.remove("dark"); 13 | localStorage.setItem("darkMode", "false"); 14 | } 15 | } 16 | 17 | // Initial state based on local storage 18 | setDarkMode(isDarkMode); 19 | 20 | // Toggle dark mode when button is clicked 21 | button.addEventListener("click", () => { 22 | const newMode = !body.classList.contains("dark"); 23 | setDarkMode(newMode); 24 | }); 25 | }); 26 | 27 | -------------------------------------------------------------------------------- /project-18_toggle_dark_light_mode/style.css: -------------------------------------------------------------------------------- 1 | * { 2 | box-sizing: border-box; 3 | } 4 | 5 | body { 6 | height: 100vh; 7 | display: flex; 8 | justify-content: center; 9 | align-items: center; 10 | flex-direction: column; 11 | } 12 | body.dark { 13 | background-color: #121212; 14 | color: #ffffff; 15 | } 16 | 17 | body.dark .card { 18 | background: #1e1e1e; 19 | border: 0px; 20 | } 21 | 22 | button#mode-toggle { 23 | margin-bottom: 5px; 24 | padding: 10px 20px; 25 | background-color: #007bff; 26 | color: #fff; 27 | border: none; 28 | border-radius: 5px; 29 | cursor: pointer; 30 | transition: background-color 0.3s ease; 31 | } 32 | 33 | button#mode-toggle:hover { 34 | background-color: #0056b3; 35 | } 36 | 37 | .card { 38 | width: 250px; 39 | border: 1px solid #ccc; 40 | border-radius: 5px; 41 | padding: 20px; 42 | box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); 43 | background-color: #ececec; 44 | } 45 | 46 | .img { 47 | text-align: center; 48 | } 49 | 50 | .img img { 51 | max-width: 100%; 52 | height: auto; 53 | border-radius: 50%; 54 | } 55 | 56 | p { 57 | margin-top: 15px; 58 | font-size: 14px; 59 | line-height: 1.5; 60 | } 61 | 62 | -------------------------------------------------------------------------------- /project-19_weather_app/img/clear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webcat882/frontend-project/fdc2e47000234c3732c7826d13d817bc69b660b2/project-19_weather_app/img/clear.png -------------------------------------------------------------------------------- /project-19_weather_app/img/clouds.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webcat882/frontend-project/fdc2e47000234c3732c7826d13d817bc69b660b2/project-19_weather_app/img/clouds.png -------------------------------------------------------------------------------- /project-19_weather_app/img/demo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webcat882/frontend-project/fdc2e47000234c3732c7826d13d817bc69b660b2/project-19_weather_app/img/demo.png -------------------------------------------------------------------------------- /project-19_weather_app/img/drizzle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webcat882/frontend-project/fdc2e47000234c3732c7826d13d817bc69b660b2/project-19_weather_app/img/drizzle.png -------------------------------------------------------------------------------- /project-19_weather_app/img/haze.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webcat882/frontend-project/fdc2e47000234c3732c7826d13d817bc69b660b2/project-19_weather_app/img/haze.png -------------------------------------------------------------------------------- /project-19_weather_app/img/humidity.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webcat882/frontend-project/fdc2e47000234c3732c7826d13d817bc69b660b2/project-19_weather_app/img/humidity.png -------------------------------------------------------------------------------- /project-19_weather_app/img/mist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webcat882/frontend-project/fdc2e47000234c3732c7826d13d817bc69b660b2/project-19_weather_app/img/mist.png -------------------------------------------------------------------------------- /project-19_weather_app/img/rain.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webcat882/frontend-project/fdc2e47000234c3732c7826d13d817bc69b660b2/project-19_weather_app/img/rain.png -------------------------------------------------------------------------------- /project-19_weather_app/img/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webcat882/frontend-project/fdc2e47000234c3732c7826d13d817bc69b660b2/project-19_weather_app/img/search.png -------------------------------------------------------------------------------- /project-19_weather_app/img/snow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webcat882/frontend-project/fdc2e47000234c3732c7826d13d817bc69b660b2/project-19_weather_app/img/snow.png -------------------------------------------------------------------------------- /project-19_weather_app/img/wind.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webcat882/frontend-project/fdc2e47000234c3732c7826d13d817bc69b660b2/project-19_weather_app/img/wind.png -------------------------------------------------------------------------------- /project-19_weather_app/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Weather App 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 |
16 |

Weather App

17 |

Check Weather searching City Name

18 |
19 |
20 | 21 | 22 | 23 | 24 | 25 |
26 | 31 | 32 | 33 |
34 | 35 | 36 | 37 |

38 |

39 | 40 | 41 |
42 |
43 | 44 | 45 |
46 |

47 |

Humidity

48 |
49 | 50 |
51 | 52 |
53 | 54 | 55 |
56 |

57 |

Wind

58 |
59 | 60 |
61 | 62 | 63 |
64 |
65 | 66 | 67 | 68 |
69 | 70 | 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /project-19_weather_app/script.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | const apiURL = `https://api.openweathermap.org/data/2.5/weather?units=metric`; 4 | const appKey = `&appid=1dc02c2cda3d32eda98eede7405d0e42`; 5 | 6 | const searchField = document.querySelector(".searchArea input"); 7 | const searchBtn = document.querySelector(".searchArea button"); 8 | const weatherIcon = document.querySelector(".Weather-Icon"); 9 | 10 | 11 | function city() { 12 | const inputName = document.querySelector("#impTXT"); 13 | const city = `&q=${inputName.value}`; 14 | checkWeather(city); 15 | } 16 | 17 | // document.querySelector(".WeatherDisplay").style.display = "block"; 18 | 19 | 20 | async function checkWeather(city) { 21 | const response = await fetch(apiURL + appKey + city); 22 | var data = await response.json(); 23 | console.log(data); 24 | 25 | document.querySelector(".city").innerHTML = data.name; 26 | document.querySelector(".temperature").innerHTML = Math.round(data.main.temp) + "°C"; 27 | document.querySelector(".humidity").innerHTML = data.main.humidity + "%"; 28 | document.querySelector(".wind").innerHTML = data.wind.speed + "km/h"; 29 | 30 | if (data.weather[0].main == "Clouds") { 31 | weatherIcon.src = "img/clouds.png"; 32 | } 33 | 34 | if (data.weather[0].main == "Mist") { 35 | weatherIcon.src = "img/Mist.png"; 36 | } 37 | 38 | if (data.weather[0].main == "Rain") { 39 | weatherIcon.src = "img/rain.png"; 40 | } 41 | 42 | if (data.weather[0].main == "Drizzle") { 43 | weatherIcon.src = "img/drizzle.png"; 44 | } 45 | 46 | if (data.weather[0].main == "Clear") { 47 | weatherIcon.src = "img/clear.png"; 48 | } 49 | 50 | if (data.weather[0].main == "Snow") { 51 | weatherIcon.src = "img/snow.png"; 52 | } 53 | 54 | if (data.weather[0].main == "Haze") { 55 | weatherIcon.src = "img/haze.png"; 56 | } 57 | 58 | document.querySelector(".WeatherDisplay").style.display = "block"; 59 | }; 60 | 61 | searchBtn.addEventListener("click", city); // addEventlistener e funcion call korle () lage na 62 | 63 | 64 | // const input = document.getElementById("impTXT"); 65 | searchField.addEventListener("keypress", function (event) { 66 | if (event.key === "Enter") { 67 | event.preventDefault(); 68 | city(); 69 | } 70 | }); 71 | 72 | -------------------------------------------------------------------------------- /project-19_weather_app/style.css: -------------------------------------------------------------------------------- 1 | 2 | *{ 3 | margin: 0; 4 | padding: 0; 5 | font-family: 'Gill Sans', 'Gill Sans MT', Calibri, 'Trebuchet MS', sans-serif; 6 | box-sizing: border-box; 7 | } 8 | 9 | body{ 10 | background: #222; 11 | } 12 | .AppCard{ 13 | width: 90%; 14 | max-width: 470px; 15 | background: linear-gradient(200deg, #fe9000, #8a5469); 16 | color: #fefffe; 17 | margin: 100px auto 0; 18 | 19 | border-radius: 15px; 20 | 21 | padding: 40px 40px; 22 | 23 | text-align: center; 24 | border: 1px solid white; 25 | } 26 | 27 | .searchArea{ 28 | 29 | width: 100%; 30 | display: flex; 31 | align-items: center; 32 | justify-content: space-between; 33 | 34 | 35 | } 36 | 37 | .searchArea input{ 38 | border: 0; 39 | outline: 0; 40 | background: #35282d; 41 | color: #7a7171; 42 | 43 | padding: 15px 25px; 44 | 45 | height: 60px; 46 | 47 | border-radius: 30px; 48 | flex: 1; 49 | /* This property is used to make the input field flexible, 50 | so that it can adjust its size according to the available space. */ 51 | 52 | margin-right: 16px; 53 | font-size: large; 54 | 55 | 56 | } 57 | 58 | 59 | .Weather-Icon{ 60 | 61 | width: 170px; 62 | margin-top: 30px; 63 | } 64 | 65 | .searchArea button{ 66 | border: 0; 67 | outline: 0; 68 | background: #35282d; 69 | border-radius: 50%; 70 | width: 60px; 71 | height: 60px; 72 | cursor: pointer; 73 | } 74 | .searchArea button img{ 75 | width: 20px; 76 | padding-top: 5px; 77 | } 78 | 79 | .WeatherDisplay h1{ 80 | font-size: 80px; 81 | font-weight: 500; 82 | } 83 | .WeatherDisplay h2{ 84 | font-size: 45px; 85 | font-weight: 400; 86 | margin-top: -10px; 87 | } 88 | 89 | 90 | .detailsInfo{ 91 | display: flex; 92 | 93 | align-items: center; 94 | justify-content: space-between; 95 | padding: 0 20px; 96 | margin-top: 50px; 97 | 98 | } 99 | 100 | .column{ 101 | display: flex; 102 | align-items: center; 103 | text-align: left; 104 | } 105 | 106 | .column img{ 107 | width: 50px; 108 | margin-right: 10px; 109 | } 110 | 111 | .humidity, .wind{ 112 | font-size: larger; 113 | margin-top: -5px; 114 | } 115 | 116 | 117 | .WeatherDisplay{ 118 | display: none; 119 | } 120 | 121 | .title{ 122 | margin-top: -30px; 123 | margin-bottom: 15px; 124 | } 125 | 126 | .title p{ 127 | font-size: 18px; 128 | } 129 | 130 | .title p span{ 131 | color:#35282d; 132 | font-weight: 800; 133 | } 134 | 135 | 136 | -------------------------------------------------------------------------------- /project-1_landing-page/img/features.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webcat882/frontend-project/fdc2e47000234c3732c7826d13d817bc69b660b2/project-1_landing-page/img/features.png -------------------------------------------------------------------------------- /project-1_landing-page/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 12 | Landing - AppDev 13 | 14 | 15 |
16 | 28 |
29 |
30 |
31 |

excepteur nostrud excepteur sunt

32 |

33 | deserunt minim velit pariatur exercitation laborum ipsum cillum aliqua 34 | dolor nisi ullamco sunt deserunt qui occaecat cupidatat quis ea id 35 | aliqua exercitation adipisicing officia amet eu fugiat aliquip culpa 36 | cillum 37 |

38 | 39 |
40 |
41 | 42 |
43 |
44 |
45 |
46 |

Features

47 |

Quality Products is our promise..

48 | 49 |
50 |
51 |
52 | 53 |

Friendly Behaviour

54 |
55 |
56 | 57 |

Budget Friendly

58 |
59 |
60 | 61 |

Quality Developers

62 |
63 |
64 | 65 |

Maintenance Support

66 |
67 |
68 | 69 |

Correct time completion

70 |
71 |
72 | 73 |

Error Solving

74 |
75 |
76 |
77 |
78 |
79 |

Services

80 |

Grow your business with us

81 |
82 |
83 |
84 | 85 |

Android Apps

86 |

87 | We have a very experienced team for app development, We offer 88 | you a very attractive user interface and functions for your 89 | application. 90 |

91 |
92 |
93 |
94 |
95 | 96 |

Website

97 |

98 | Need a website for your bussiness or personal use ? why are you 99 | waiting drop a project request now! 100 |

101 |
102 |
103 |
104 |
105 | 106 |

Other

107 |

108 | We provide you any type of technical services as you need, for 109 | more details please contact us 110 |

111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |

Contact

119 |

Contact Us

120 |
121 |
122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 |
132 |
133 |
134 | 159 |
160 | 161 | 162 | -------------------------------------------------------------------------------- /project-1_landing-page/js/index.js: -------------------------------------------------------------------------------- 1 | //JavaScript code here 2 | -------------------------------------------------------------------------------- /project-20_bubble_game/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Bubble Game 8 | 9 | 10 | 11 | 12 |
13 |
14 | 28 |
29 |
30 | 31 |
32 |
33 |
34 |
35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /project-20_bubble_game/index.js: -------------------------------------------------------------------------------- 1 | var timerValue = 30; 2 | var scoreValue = 0; 3 | var hitsValue = 0; 4 | const createBubble = () => { 5 | var contentbox = ''; 6 | for (let i = 1; i < 208; i++) { 7 | contentbox += `
${Math.floor(Math.random() * 10)}
`; 8 | 9 | } 10 | document.querySelector('.content').innerHTML = contentbox; 11 | } 12 | const setTimeing = () => { 13 | var timerNode = document.querySelector('.timer'); 14 | const timeInterval = setInterval(() => { 15 | if (timerValue > 0) { 16 | timerValue--; 17 | timerNode.textContent = timerValue; 18 | } 19 | else { 20 | clearInterval(timeInterval); 21 | document.querySelector('.content').innerHTML = '

Game Over

'; 22 | } 23 | }, 1000); 24 | } 25 | const hitsgenerate = () => { 26 | hitsValue = Math.floor(Math.random() * 10); 27 | console.log(hitsValue); 28 | document.querySelector('.hitsvalue').textContent = hitsValue; 29 | 30 | } 31 | const score = () => { 32 | scoreValue += 10; 33 | document.querySelector('.scoreValue').textContent = scoreValue; 34 | 35 | } 36 | 37 | document.querySelector('.content').addEventListener('click', (e) => { 38 | if (Number(e.target.textContent) === hitsValue) { 39 | score(); 40 | createBubble(); 41 | hitsgenerate(); 42 | } 43 | // console.log(Number(e.target.textContent)); 44 | }) 45 | const restartGame = () => { 46 | scoreValue = 0; 47 | document.querySelector('.scoreValue').textContent = scoreValue; 48 | timerValue = 30; 49 | createBubble(); 50 | setTimeing(); 51 | hitsgenerate(); 52 | } 53 | const Startingfun = () => { 54 | 55 | createBubble(); 56 | setTimeing(); 57 | hitsgenerate(); 58 | } 59 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /project-20_bubble_game/style.css: -------------------------------------------------------------------------------- 1 | * { 2 | padding: 0; 3 | margin: 0; 4 | } 5 | 6 | .main { 7 | background-color: aqua; 8 | width: 100vw; 9 | height: 100vh; 10 | display: flex; 11 | align-items: center; 12 | justify-content: center; 13 | } 14 | 15 | .outer-box { 16 | border: 2px solid black; 17 | width: 70vw; 18 | height: 59%; 19 | overflow: hidden; 20 | border-radius: 10px; 21 | } 22 | 23 | .navbar { 24 | background-color: #55a555; 25 | width: 100%; 26 | height: 15%; 27 | display: flex; 28 | justify-content: space-evenly; 29 | 30 | } 31 | 32 | .value-box { 33 | background-color: white; 34 | width: 30px; 35 | text-align: center; 36 | font-weight: 700; 37 | } 38 | 39 | .mr-2 h3, 40 | p { 41 | margin-top: 20px; 42 | display: inline-block; 43 | } 44 | 45 | .content { 46 | background-color: white; 47 | width: 100%; 48 | height: 100%; 49 | display: flex; 50 | flex-wrap: wrap; 51 | 52 | 53 | } 54 | 55 | .bubble { 56 | text-align: center; 57 | display: flex; 58 | align-items: center; 59 | justify-content: center; 60 | height: 30px; 61 | width: 30px; 62 | border: 1.5px solid black; 63 | border-radius: 50%; 64 | background-color: #55a555; 65 | margin: 5px 5px; 66 | 67 | } 68 | 69 | .bubble:hover { 70 | background-color: #40a140; 71 | cursor: pointer; 72 | } 73 | 74 | .gameOver { 75 | text-align: center; 76 | /* display: flex; */ 77 | /* justify-content: center; */ 78 | /* border: 2p x solid; */ 79 | /* align-items: center; */ 80 | position: absolute; 81 | top: 50%; 82 | left: 0; 83 | width: 100%; 84 | /* height: 80%; */ 85 | } 86 | 87 | .gameOver button { 88 | width: 16%; 89 | height: 40px; 90 | } 91 | 92 | .Starting { 93 | display: flex; 94 | justify-content: center; 95 | align-items: center; 96 | 97 | width: 100%; 98 | } 99 | 100 | .starting-text { 101 | width: 16%; 102 | height: 40px; 103 | } -------------------------------------------------------------------------------- /project-2_calculator/css/index.css: -------------------------------------------------------------------------------- 1 | * { 2 | margin: 0; 3 | padding: 0; 4 | outline: none; 5 | box-sizing: border-box; 6 | } 7 | body { 8 | font-family: montserrat; 9 | display: flex; 10 | text-align: center; 11 | justify-content: center; 12 | align-items: center; 13 | min-height: 100vh; 14 | background: linear-gradient(#9cebfc, #6ae1fb); 15 | } 16 | .center { 17 | /* display: none; */ 18 | width: 350px; 19 | background: black; 20 | border-radius: 20px; 21 | } 22 | input[type="text"] { 23 | height: 60px; 24 | width: 300px; 25 | margin-top: 40px; 26 | border-radius: 1px; 27 | border: 1px solid #e1e7ea; 28 | color: black; 29 | font-size: 22px; 30 | font-weight: bold; 31 | text-align: right; 32 | padding-right: 20px; 33 | background: linear-gradient(#d1dce0, #dfe6e9); 34 | } 35 | form .buttons { 36 | width: 300px; 37 | margin: 10px 25px 0 25px; 38 | padding: 10px 0; 39 | } 40 | input[type="button"] { 41 | width: 58px; 42 | height: 55px; 43 | margin: 5px; 44 | font-size: 22px; 45 | line-height: 55px; 46 | border-radius: 3px; 47 | border: 1px solid #d9d9d9; 48 | background: linear-gradient(#d9d9d9, #bfbfbf); 49 | } 50 | input[type="button"]:hover { 51 | transition: 0.5s; 52 | background: linear-gradient(#bfbfbf, #d9d9d9); 53 | } 54 | input#clear { 55 | background: #ff1a1a; 56 | border: 1px solid #cc0000; 57 | color: white; 58 | } 59 | input#equal { 60 | width: 275px; 61 | margin: 10px 0 10px 0; 62 | font-size: 30px; 63 | color: white; 64 | background: #ff3d00; 65 | border: 1px solid #b32a00; 66 | } 67 | -------------------------------------------------------------------------------- /project-2_calculator/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Calculator 6 | 7 | 8 | 9 | 10 |
11 |
12 | 13 |
14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 |
35 | 41 |
42 |
43 |
44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /project-2_calculator/js/index.js: -------------------------------------------------------------------------------- 1 | const buttons = document.querySelectorAll("#btn"); 2 | const display = document.getElementById("display"); 3 | buttons.forEach((button) => { 4 | button.addEventListener("click", () => { 5 | display.value += button.value; 6 | }); 7 | }); -------------------------------------------------------------------------------- /project-3_wavy_login_form/css/index.css: -------------------------------------------------------------------------------- 1 | @import url("https://fonts.googleapis.com/css?family=Muli&display=swap"); 2 | 3 | * { 4 | box-sizing: border-box; 5 | } 6 | 7 | body { 8 | background-color: steelblue; 9 | color: #fff; 10 | font-family: "Muli", sans-serif; 11 | display: flex; 12 | flex-direction: column; 13 | align-items: center; 14 | justify-content: center; 15 | height: 100vh; 16 | overflow: hidden; 17 | margin: 0; 18 | } 19 | .container { 20 | background-color: rgba(0, 0, 0, 0.3); 21 | padding: 20px 40px; 22 | border-radius: 5px; 23 | } 24 | .container h1 { 25 | text-align: center; 26 | margin-bottom: 30px; 27 | } 28 | .container form .form-control { 29 | position: relative; 30 | margin: 20px 0 40px; 31 | width: 300px; 32 | } 33 | .container form .form-control label { 34 | position: absolute; 35 | top: 15px; 36 | left: 0; 37 | } 38 | .container form .form-control label span { 39 | display: inline-block; 40 | font-size: 18px; 41 | min-width: 5px; 42 | transition: 0.3s cubic-bezier(0.68, -0.55, 0.265, 1.55); 43 | } 44 | 45 | .container form .form-control input:focus + label span, 46 | .container form .form-control input:valid + label span { 47 | color: lightblue; 48 | transform: translateY(-30px); 49 | } 50 | .container form .form-control input { 51 | background-color: transparent; 52 | border: 0; 53 | border-bottom: 2px #fff solid; 54 | display: block; 55 | width: 100%; 56 | padding: 15px 0; 57 | font-size: 18px; 58 | color: #fff; 59 | outline: none; 60 | } 61 | .container form .form-control input:focus, 62 | .container form .form-control input:valid { 63 | outline: 0; 64 | border-bottom-color: lightblue; 65 | } 66 | .container form .btn { 67 | cursor: pointer; 68 | display: inline-block; 69 | width: 100%; 70 | background: lightblue; 71 | padding: 15px; 72 | font-family: inherit; 73 | font-size: 16px; 74 | border: 0; 75 | border-radius: 5px; 76 | } 77 | 78 | .container form .btn:focus { 79 | outline: 0; 80 | } 81 | 82 | .container form .btn:active { 83 | transform: scale(0.98); 84 | } 85 | .container form .text { 86 | margin-top: 30px; 87 | } 88 | .container form a { 89 | text-decoration: none; 90 | color: lightblue; 91 | } 92 | -------------------------------------------------------------------------------- /project-3_wavy_login_form/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Login Form 8 | 9 | 10 |
11 |

Login Form

12 |
13 |
14 | 15 | 16 |
17 |
18 | 19 | 20 |
21 | 22 | 23 |

Don't have an account? Register

24 |
25 |
26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /project-3_wavy_login_form/js/index.js: -------------------------------------------------------------------------------- 1 | const labels = document.querySelectorAll(".form-control label"); 2 | 3 | labels.forEach((label) => { 4 | label.innerHTML = label.innerText 5 | .split("") 6 | .map( 7 | (letter, idx) => 8 | `${letter}` 9 | 10 | ) 11 | .join(""); 12 | }); 13 | -------------------------------------------------------------------------------- /project-4_random_quote_generator/css/index.css: -------------------------------------------------------------------------------- 1 | @import url("https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap"); 2 | 3 | * { 4 | box-sizing: border-box; 5 | } 6 | body { 7 | background-color: #252525; 8 | font-family: "Roboto", sans-serif; 9 | display: flex; 10 | flex-direction: column; 11 | align-items: center; 12 | justify-content: center; 13 | height: 100vh; 14 | overflow: hidden; 15 | margin: 0; 16 | padding: 20px; 17 | } 18 | .container { 19 | background-color: #fff; 20 | border-radius: 10px; 21 | 22 | padding: 50px 20px; 23 | text-align: center; 24 | max-width: 100%; 25 | width: 800px; 26 | } 27 | h3 { 28 | margin: 0; 29 | opacity: 0.5; 30 | letter-spacing: 2px; 31 | } 32 | 33 | .quote { 34 | font-size: 30px; 35 | letter-spacing: 1px; 36 | line-height: 40px; 37 | margin: 50px auto; 38 | max-width: 600px; 39 | } 40 | 41 | .btn { 42 | background-color: #1b1b1b; 43 | color: #fff; 44 | border: 0; 45 | border-radius: 10px; 46 | box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1); 47 | padding: 14px 40px; 48 | font-size: 16px; 49 | cursor: pointer; 50 | } 51 | 52 | .btn:active { 53 | transform: scale(0.98); 54 | } 55 | 56 | .btn:focus { 57 | outline: 0; 58 | } 59 | -------------------------------------------------------------------------------- /project-4_random_quote_generator/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Random Quote Generator 8 | 9 | 10 |
11 |

Today's Quote

12 |
loading.....
13 | 14 |
15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /project-4_random_quote_generator/js/index.js: -------------------------------------------------------------------------------- 1 | // Get the button element with ID "getbtn" 2 | const btn = document.getElementById("getbtn"); 3 | 4 | // Get the quote element with ID "quote" 5 | const QuoteElem = document.getElementById("quote"); 6 | 7 | // Fetch a random quote from the Quotable API 8 | const fetchData = async () => { 9 | QuoteElem.innerHTML = `

Loading...

`; 10 | // Send a request to the Quotable API to get a random quote 11 | let data = await fetch("https://api.quotable.io/random"); 12 | 13 | // Parse the response as JSON 14 | let json = await data.json(); 15 | 16 | // Set the text of the quote element to the content of the fetched quote 17 | QuoteElem.innerHTML = `

${json.content}

`; 18 | }; 19 | 20 | // Add an event listener to the button element that triggers the fetchData function when clicked 21 | btn.addEventListener("click", fetchData); 22 | 23 | // Call the fetchData function once to initially populate the quote element with a random quote 24 | fetchData(); 25 | -------------------------------------------------------------------------------- /project-5_random_color_changer/css/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | height: 100vh; 3 | display: flex; 4 | justify-content: center; 5 | align-items: center; 6 | background-color: #81d4fa; 7 | } 8 | .btn { 9 | background: white; 10 | border-radius: 60px; 11 | outline: none; 12 | border: none; 13 | padding: 6px; 14 | height: 60px; 15 | width: 50%; 16 | font-size: 18px; 17 | font-weight: bold; 18 | } 19 | .btn:hover, 20 | .btn:active { 21 | box-shadow: 0 2px 3px rgba(0, 0, 0, 0.5); 22 | } 23 | -------------------------------------------------------------------------------- /project-5_random_color_changer/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Random Color Changer 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /project-5_random_color_changer/js/index.js: -------------------------------------------------------------------------------- 1 | // Select the button element with the ID 'btn' 2 | const btn = document.getElementById("btn"); 3 | 4 | // Define a function to change the background color 5 | const changebg = () => { 6 | // Generate a random value between 0 and 255 for each color component (red, green, blue) 7 | const red = Math.floor(Math.random() * 256); 8 | const green = Math.floor(Math.random() * 256); 9 | const blue = Math.floor(Math.random() * 256); 10 | 11 | // Construct an RGB color string using the random values 12 | const rgbColor = `rgb(${red}, ${green}, ${blue})`; 13 | 14 | // Set the background color of the body to the random RGB color 15 | document.body.style.backgroundColor = rgbColor; 16 | }; 17 | 18 | // Call the changebg function once to set the initial background color 19 | changebg(); 20 | 21 | // Add an event listener to the button that calls the changebg function when clicked 22 | btn.addEventListener("click", changebg); 23 | -------------------------------------------------------------------------------- /project-6_qr_code_generator/css/index.css: -------------------------------------------------------------------------------- 1 | @import url("https://fonts.googleapis.com/css2?family=Lato&display=swap"); 2 | * { 3 | margin: 0; 4 | padding: 0; 5 | box-sizing: border-box; 6 | font-family: "Lato", sans-serif; 7 | } 8 | 9 | body { 10 | background-color: #cad7d8; 11 | height: 100vh; 12 | display: flex; 13 | justify-content: center; 14 | align-items: center; 15 | } 16 | 17 | .container { 18 | max-width: 450px; 19 | width: 100%; 20 | padding: 20px; 21 | margin: 100px auto; 22 | background-color: #fff; 23 | border-radius: 8px; 24 | box-shadow: 0 2px 3px rgba(0, 0, 0, 0.3); 25 | } 26 | 27 | .container h1 { 28 | font-palette: 18px; 29 | background: #1b1b1b; 30 | font-weight: 300; 31 | padding: 25px 0; 32 | margin: -20px -20px 20px -20px; 33 | text-align: center; 34 | border-radius: 8px 8px 0 0; 35 | color: white; 36 | } 37 | 38 | .container form input { 39 | width: 100%; 40 | outline: none; 41 | border: 1.5px solid #ccc; 42 | height: 45px; 43 | border-radius: 3px; 44 | padding: 0 10px; 45 | background: #fff; 46 | margin-bottom: 0.7rem; 47 | font-size: 18px; 48 | } 49 | 50 | .container form button { 51 | width: 100%; 52 | outline: none; 53 | border: none; 54 | height: 45px; 55 | border-radius: 3px; 56 | padding: 0 10px; 57 | background: #1b1b1b; 58 | margin-bottom: 0.7rem; 59 | font-size: 18px; 60 | color: white; 61 | } 62 | 63 | .container form #qrcode-container { 64 | display: none; 65 | justify-content: center; 66 | } 67 | 68 | .container form .qrcode { 69 | padding: 10px; 70 | margin-bottom: 15px; 71 | } 72 | 73 | .container form .qrcode img { 74 | margin: 0 auto; 75 | box-shadow: 0 2px 3px rgba(67, 67, 68, 0.25); 76 | padding: 4px; 77 | } 78 | -------------------------------------------------------------------------------- /project-6_qr_code_generator/css/index.scss: -------------------------------------------------------------------------------- 1 | @import url("https://fonts.googleapis.com/css2?family=Lato&display=swap"); 2 | * { 3 | margin: 0; 4 | padding: 0; 5 | box-sizing: border-box; 6 | font-family: "Lato", sans-serif; 7 | } 8 | body { 9 | background-color: rgb(202, 215, 216); 10 | height: 100vh; 11 | display: flex; 12 | justify-content: center; 13 | align-items: center; 14 | } 15 | .container { 16 | max-width: 450px; 17 | width: 100%; 18 | padding: 20px; 19 | margin: 100px auto; 20 | background-color: #fff; 21 | border-radius: 8px; 22 | box-shadow: 0 2px 3px rgba(0, 0, 0, 0.3); 23 | h1 { 24 | font-palette: 18px; 25 | background: #1b1b1b; 26 | font-weight: 300; 27 | padding: 25px 0; 28 | margin: -20px -20px 20px -20px; 29 | text-align: center; 30 | border-radius: 8px 8px 0 0; 31 | color: rgb(255, 255, 255); 32 | } 33 | form { 34 | input { 35 | width: 100%; 36 | outline: none; 37 | border: 1.5px solid #ccc; 38 | height: 45px; 39 | border-radius: 3px; 40 | padding: 0 10px; 41 | background: #fff; 42 | margin-bottom: 0.7rem; 43 | font-size: 18px; 44 | } 45 | button { 46 | width: 100%; 47 | outline: none; 48 | border: none; 49 | height: 45px; 50 | border-radius: 3px; 51 | padding: 0 10px; 52 | background: #1b1b1b; 53 | margin-bottom: 0.7rem; 54 | font-size: 18px; 55 | color: white; 56 | } 57 | #qrcode-container { 58 | display: none; 59 | justify-content: center; 60 | } 61 | 62 | .qrcode { 63 | padding: 10px; 64 | margin-bottom: 15px; 65 | } 66 | .qrcode img { 67 | margin: 0 auto; 68 | box-shadow: 0 2px 3px rgba(67, 67, 68, 0.25); 69 | padding: 4px; 70 | } 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /project-6_qr_code_generator/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Qr Code Generator 9 | 10 | 11 |
12 |

Qr Code Generator

13 |
14 | 20 |
21 |
22 | qrcode 23 |
24 |
25 | 26 |
27 |
28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /project-6_qr_code_generator/js/index.js: -------------------------------------------------------------------------------- 1 | // Selecting the necessary DOM elements 2 | const input = document.getElementById("inp"); 3 | const qrcodeContainer = document.getElementById("qrcode-container"); 4 | const qrimg = document.getElementById("qrimg"); 5 | const btn = document.getElementById("btn"); 6 | 7 | // Add an event listener to the button that triggers the creation of the QR code 8 | btn.addEventListener("click", () => { 9 | // Check if the input field has a value 10 | if (input.value) { 11 | // If the input field has a value, set the source of the QR code image to a URL that will create the QR code 12 | // using the input field's value as the data for the QR code. Set the size of the QR code to 300x150 pixels. 13 | qrimg.setAttribute( 14 | "src", 15 | `https://api.qrserver.com/v1/create-qr-code/?size=300x150&data=${input.value}` 16 | ); 17 | 18 | // Show the container element that holds the QR code image by setting its display style to "flex" 19 | qrcodeContainer.style.display = "flex"; 20 | } else { 21 | // If the input field does not have a value, show an alert message asking the user to enter text 22 | alert("Please Enter Text!"); 23 | } 24 | }); 25 | -------------------------------------------------------------------------------- /project-7_stopwatch_timer/css/index.css: -------------------------------------------------------------------------------- 1 | 2 | body { 3 | height: 100vh; 4 | display: flex; 5 | justify-content: center; 6 | align-items: center; 7 | background-color: steelblue; 8 | } 9 | .stopwatch { 10 | text-align: center; 11 | background: rgba(0, 0, 0, 0.3); 12 | padding: 30px 0; 13 | max-width: 430px; 14 | width: 100%; 15 | border-radius: 8px; 16 | } 17 | h2 { 18 | font-weight: 300; 19 | color: white; 20 | } 21 | .stopwatch h1 { 22 | font-size: 50px; 23 | font-weight: 300; 24 | color: white; 25 | } 26 | 27 | button { 28 | cursor: pointer; 29 | display: inline-block; 30 | margin: 0 10px; 31 | background: lightblue; 32 | padding: 15px; 33 | font-family: inherit; 34 | font-size: 16px; 35 | border: 0; 36 | border-radius: 5px; 37 | } 38 | -------------------------------------------------------------------------------- /project-7_stopwatch_timer/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Stopwatch Timer 8 | 9 | 10 |
11 |

Stopwatch

12 |

00:00:00

13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /project-7_stopwatch_timer/js/index.js: -------------------------------------------------------------------------------- 1 | // select elements from the DOM 2 | const stopwatchEl = document.querySelector(".stopwatch"); 3 | const timerEl = stopwatchEl.querySelector(".timer"); 4 | const startBtn = document.getElementById("start"); 5 | const stopBtn = document.getElementById("stop"); 6 | const resetBtn = document.getElementById("reset"); 7 | 8 | // initialize timer variables 9 | let startTime, 10 | elapsedTime = 0, 11 | intervalId; 12 | 13 | // function to pad numbers with zeros 14 | function pad(num, places) { 15 | return String(num).padStart(places, "0"); 16 | } 17 | 18 | // function to display the timer 19 | function displayTimer() { 20 | let minutes = Math.floor(elapsedTime / 60000); 21 | let seconds = Math.floor((elapsedTime % 60000) / 1000); 22 | let milliseconds = Math.floor((elapsedTime % 1000) / 10); 23 | timerEl.textContent = `${pad(minutes, 2)}:${pad(seconds, 2)}:${pad( 24 | milliseconds, 25 | 2 26 | )}`; 27 | } 28 | 29 | // function to start the timer 30 | function startTimer() { 31 | startTime = Date.now() - elapsedTime; 32 | intervalId = setInterval(() => { 33 | elapsedTime = Date.now() - startTime; 34 | displayTimer(); 35 | }, 10); 36 | startBtn.disabled = true; 37 | stopBtn.disabled = false; 38 | resetBtn.disabled = false; 39 | } 40 | 41 | // function to stop the timer 42 | function stopTimer() { 43 | clearInterval(intervalId); 44 | startBtn.disabled = false; 45 | stopBtn.disabled = true; 46 | } 47 | 48 | // function to reset the timer 49 | function resetTimer() { 50 | clearInterval(intervalId); 51 | elapsedTime = 0; 52 | displayTimer(); 53 | startBtn.disabled = false; 54 | stopBtn.disabled = true; 55 | resetBtn.disabled = true; 56 | } 57 | 58 | // add event listeners to the buttons 59 | startBtn.addEventListener("click", startTimer); 60 | stopBtn.addEventListener("click", stopTimer); 61 | resetBtn.addEventListener("click", resetTimer); -------------------------------------------------------------------------------- /project-8_password_generator/css/index.css: -------------------------------------------------------------------------------- 1 | @import url("https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap"); 2 | * { 3 | margin: 0; 4 | padding: 0; 5 | box-sizing: border-box; 6 | } 7 | body { 8 | height: 100vh; 9 | display: flex; 10 | justify-content: center; 11 | align-items: center; 12 | background: steelblue; 13 | font-family: "Poppins", sans-serif; 14 | } 15 | .container { 16 | position: relative; 17 | max-width: 350px; 18 | width: 100%; 19 | background: #f1f1f1; 20 | border-radius: 12px; 21 | padding: 30px 25px; 22 | box-shadow: 0 5px 10px rgba(0, 0, 0, 0.1); 23 | } 24 | .container .input-box { 25 | position: relative; 26 | height: 50px; 27 | } 28 | .container .input-box input { 29 | height: 100%; 30 | width: 100%; 31 | border-radius: 8px; 32 | padding: 0 45px 0 15px; 33 | border: 1px solid #aaa; 34 | background-color: transparent; 35 | outline: none; 36 | } 37 | .container .input-box #copy-btn { 38 | position: absolute; 39 | right: 15px; 40 | top: 50%; 41 | color: #707070; 42 | font-size: 20px; 43 | cursor: pointer; 44 | transform: translateY(-50%); 45 | } 46 | .container .range-box { 47 | display: flex; 48 | align-items: center; 49 | margin-top: 20px; 50 | } 51 | .container .range-box input { 52 | width: 100%; 53 | height: 5px; 54 | accent-color: steelblue; 55 | cursor: pointer; 56 | } 57 | .container .range-box .slider-number { 58 | min-width: 30px; 59 | text-align: right; 60 | font-size: 17px; 61 | color: #707070; 62 | } 63 | .container button { 64 | width: 100%; 65 | color: #fff; 66 | padding: 12px 0; 67 | margin-top: 20px; 68 | background: steelblue; 69 | border: none; 70 | border-radius: 8px; 71 | cursor: pointer; 72 | transition: all 0.2s ease; 73 | } 74 | -------------------------------------------------------------------------------- /project-8_password_generator/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 16 | 17 | Password Generator 18 | 19 | 20 |
21 |
22 | 23 | 24 |
25 |
26 | 27 | 8 28 |
29 | 32 |
33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /project-8_password_generator/js/index.js: -------------------------------------------------------------------------------- 1 | // Selecting Element 2 | const passwordInput = document.getElementById("passwordInput"); 3 | const copyBtn = document.getElementById("copy-btn"); 4 | const rangeSlider = document.getElementById("range"); 5 | const sliderNumber = document.getElementById("slider-number"); 6 | const generatBtn = document.getElementById("generate-button"); 7 | 8 | //Generate Password Function 9 | const generatePass = () => { 10 | let newpass = ""; 11 | let all = 12 | "abcdefghijklmnopqrstubwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890()[]<>&%@#"; 13 | for (let i = 0; i < rangeSlider.value; i++) { 14 | newpass += all[Math.floor(Math.random() * all.length)]; 15 | } 16 | passwordInput.value = newpass; 17 | }; 18 | 19 | //Calling The Function On Page Load 20 | generatePass(); 21 | 22 | //Copy Button Click Event Handle 23 | copyBtn.addEventListener("click", () => { 24 | passwordInput.select(); 25 | document.execCommand("copy"); 26 | //Change The Icon After Copy 27 | copyBtn.setAttribute("class", "far fa-clipboard"); 28 | 29 | }); 30 | 31 | //Slider Slide Input Event Handle 32 | rangeSlider.addEventListener("input", () => { 33 | sliderNumber.textContent = rangeSlider.value; 34 | }); 35 | 36 | //Genearte Button Click Event Handle 37 | generatBtn.addEventListener("click", generatePass); 38 | -------------------------------------------------------------------------------- /project-9_responsive_navbar/css/index.css: -------------------------------------------------------------------------------- 1 | /* Import font */ 2 | @import url("https://fonts.googleapis.com/css2?family=Poppins&display=swap"); 3 | * { 4 | margin: 0; 5 | padding: 0; 6 | box-sizing: border-box; 7 | } 8 | body { 9 | height: 100vh; 10 | background: #047aed; 11 | font-family: "Poppins", sans-serif; 12 | } 13 | .navbar { 14 | width: 100vw; 15 | height: 74px; 16 | background-color: #1b1b1b; 17 | display: flex; 18 | justify-content: space-between; 19 | align-items: center; 20 | padding: 0 20px; 21 | } 22 | .navbar .logo { 23 | color: #fff; 24 | font-weight: 300; 25 | } 26 | .navbar .logo h1 span { 27 | color: red; 28 | } 29 | .navbar #toggler { 30 | display: none; 31 | } 32 | 33 | .navbar .burger { 34 | position: relative; 35 | width: 56px; 36 | height: 55px; 37 | border-radius: 3px; 38 | cursor: pointer; 39 | display: none; 40 | } 41 | 42 | .navbar .bun { 43 | position: absolute; 44 | width: 30px; 45 | height: 30px; 46 | top: 9px; 47 | left: 9px; 48 | transition: transform 0.18s cubic-bezier(0.04, 0.04, 0.12, 0.96) 0.15s; 49 | } 50 | 51 | .navbar .bun__crust { 52 | position: absolute; 53 | display: block; 54 | width: 17px; 55 | height: 1px; 56 | background-color: #fff; 57 | border-radius: 1px; 58 | left: 7px; 59 | transition: transform 0.1596s cubic-bezier(0.52, 0.16, 0.52, 0.84) 0.2s; 60 | } 61 | 62 | .navbar .bun__crust--top { 63 | top: 14px; 64 | 65 | transform: translateY(-3px); 66 | } 67 | 68 | .navbar .bun__crust--bottom { 69 | bottom: 14px; 70 | 71 | transform: translateY(3px); 72 | } 73 | 74 | .navbar #toggler:checked + .burger .bun--top { 75 | transform: rotate(45deg); 76 | } 77 | 78 | .navbar #toggler:checked + .burger .bun--bottom { 79 | transform: rotate(-45deg); 80 | } 81 | 82 | .navbar #toggler:checked + .burger .bun__crust--top, 83 | .navbar #toggler:checked + .burger .bun__crust--bottom { 84 | transform: none; 85 | transition: transform 0.1806s cubic-bezier(0.04, 0.04, 0.12, 0.96); 86 | } 87 | .navbar #toggler:checked ~ ul { 88 | left: 50%; 89 | } 90 | .navbar ul { 91 | display: flex; 92 | list-style-type: none; 93 | transition: 0.4s ease-in-out; 94 | } 95 | .navbar ul li { 96 | padding: 0 20px; 97 | } 98 | .navbar ul li a { 99 | text-decoration: none; 100 | color: #fff; 101 | } 102 | .navbar ul li a:hover { 103 | color: red; 104 | } 105 | 106 | /*For Responsiveness */ 107 | @media (max-width: 760px) { 108 | .navbar .burger { 109 | display: block; 110 | } 111 | .navbar ul { 112 | position: absolute; 113 | flex-direction: column; 114 | align-items: center; 115 | top: 74px; 116 | left: -100%; 117 | transform: translateX(-50%); 118 | 119 | width: 100%; 120 | background: #1b1b1b; 121 | } 122 | .navbar ul li { 123 | margin: 1.5rem 0; 124 | } 125 | } 126 | -------------------------------------------------------------------------------- /project-9_responsive_navbar/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | Responsive Navbar 10 | 11 | 12 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /project-9_responsive_navbar/js/index.js: -------------------------------------------------------------------------------- 1 | //in this project we've not used javascript 2 | -------------------------------------------------------------------------------- /sitemap.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | https://armanidrisi.github.io/frontend-projects/ 5 | 6 | 7 | https://armanidrisi.github.io/frontend-projects/project-18_toggle_dark_light_mode 8 | 9 | 10 | https://armanidrisi.github.io/frontend-projects/project-17_remove_Signature_bg 11 | 12 | 13 | https://armanidrisi.github.io/frontend-projects/project-16_pricing_component 14 | 15 | 16 | https://armanidrisi.github.io/frontend-projects/project-15_currrency_convertor 17 | 18 | 19 | https://armanidrisi.github.io/frontend-projects/project-14_music_loader 20 | 21 | 22 | https://armanidrisi.github.io/frontend-projects/project-13_profile_card 23 | 24 | 25 | https://armanidrisi.github.io/frontend-projects/project-12_contact_form 26 | 27 | 28 | https://armanidrisi.github.io/frontend-projects/project-11_analog_clock 29 | 30 | 31 | https://armanidrisi.github.io/frontend-projects/project-10_404_error_page 32 | 33 | 34 | https://armanidrisi.github.io/frontend-projects/project-9_responsive_navbar 35 | 36 | 37 | https://armanidrisi.github.io/frontend-projects/project-8_password_generator 38 | 39 | 40 | https://armanidrisi.github.io/frontend-projects/project-6_qr_code_generator 41 | 42 | 43 | https://armanidrisi.github.io/frontend-projects/project-7_stopwatch_timer 44 | 45 | 46 | https://armanidrisi.github.io/frontend-projects/project-5_random_color_changer 47 | 48 | 49 | https://armanidrisi.github.io/frontend-projects/project-4_random_quote_generator 50 | 51 | 52 | https://armanidrisi.github.io/frontend-projects/project-3_wavy_login_form 53 | 54 | 55 | https://armanidrisi.github.io/frontend-projects/project-2_calculator 56 | 57 | 58 | https://armanidrisi.github.io/frontend-projects/project-1_landing-page 59 | 60 | --------------------------------------------------------------------------------