diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..496ee2c
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+.DS_Store
\ No newline at end of file
diff --git a/3d-boxes-background/index.html b/3d-boxes-background/index.html
new file mode 100644
index 0000000..94bfc1f
--- /dev/null
+++ b/3d-boxes-background/index.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+ 3D Boxes Background
+
+
+ Magic 🎩
+
+
+
+
diff --git a/3d-boxes-background/script.js b/3d-boxes-background/script.js
new file mode 100644
index 0000000..4f48d7a
--- /dev/null
+++ b/3d-boxes-background/script.js
@@ -0,0 +1,17 @@
+const boxesContainer = document.getElementById('boxes')
+const btn = document.getElementById('btn')
+
+btn.addEventListener('click', () => boxesContainer.classList.toggle('big'))
+
+function createBoxes() {
+ for (let i = 0; i < 4; i++) {
+ for (let j = 0; j < 4; j++) {
+ const box = document.createElement('div')
+ box.classList.add('box')
+ box.style.backgroundPosition = `${-j * 125}px ${-i * 125}px`
+ boxesContainer.appendChild(box)
+ }
+ }
+}
+
+createBoxes()
diff --git a/3d-boxes-background/style.css b/3d-boxes-background/style.css
new file mode 100644
index 0000000..81fd9cf
--- /dev/null
+++ b/3d-boxes-background/style.css
@@ -0,0 +1,93 @@
+@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap');
+@import url('https://fonts.googleapis.com/css2?family=Poppins&display=swap');
+
+* {
+ box-sizing: border-box;
+}
+
+body {
+ background-color: #fafafa;
+ font-family: 'Roboto', sans-serif;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ height: 100vh;
+ overflow: hidden;
+}
+
+.magic {
+ background-color: #f9ca24;
+ color: #fff;
+ font-family: 'Poppins', sans-serif;
+ border: 0;
+ border-radius: 3px;
+ font-size: 16px;
+ padding: 12px 20px;
+ cursor: pointer;
+ position: fixed;
+ top: 20px;
+ letter-spacing: 1px;
+ box-shadow: 0 3px rgba(249, 202, 36, 0.5);
+ z-index: 100;
+}
+
+.magic:focus {
+ outline: none;
+}
+
+.magic:active {
+ box-shadow: none;
+ transform: translateY(2px);
+}
+
+.boxes {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: space-around;
+ height: 500px;
+ width: 500px;
+ position: relative;
+ transition: 0.4s ease;
+}
+
+.boxes.big {
+ width: 600px;
+ height: 600px;
+}
+
+.boxes.big .box {
+ transform: rotateZ(360deg);
+}
+
+.box {
+ background-image: url('https://media.giphy.com/media/EZqwsBSPlvSda/giphy.gif');
+ background-repeat: no-repeat;
+ background-size: 500px 500px;
+ position: relative;
+ height: 125px;
+ width: 125px;
+ transition: 0.4s ease;
+}
+
+.box::after {
+ content: '';
+ background-color: #f6e58d;
+ position: absolute;
+ top: 8px;
+ right: -15px;
+ height: 100%;
+ width: 15px;
+ transform: skewY(45deg);
+}
+
+.box::before {
+ content: '';
+ background-color: #f9ca24;
+ position: absolute;
+ bottom: -15px;
+ left: 8px;
+ height: 15px;
+ width: 100%;
+ transform: skewX(45deg);
+}
diff --git a/README.md b/README.md
index 8ed4f93..e44bb0d 100644
--- a/README.md
+++ b/README.md
@@ -1,32 +1,87 @@
-# DevSpace Blog
-> Static Next.js blog that uses Markdown for posts. Includes pagination, categories and search
-This project is part of my [Next.js Udemy course](https://www.udemy.com/course/nextjs-dev-to-deployment)
-
+# 50 Projects in 50 Days - HTML/CSS and JavaScript
-[VIEW DEMO](https://devspace-blog-pearl.vercel.app)
+This is the main repository for all of the projects in the course.
-## Usage
-### Install Dependencies
-```bash
-npm install
-```
+| # | Project | Live Demo |
+| :-: | --------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- |
+| 01 | [Expanding Cards](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/expanding-cards) | [Live Demo](https://50projects50days.com/projects/expanding-cards/) |
+| 02 | [Progress Steps](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/progress-steps) | [Live Demo](https://50projects50days.com/projects/progress-steps/) |
+| 03 | [Rotating Navigation Animation](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/rotating-nav-animation) | [Live Demo](https://50projects50days.com/projects/rotating-navigation-animation/) |
+| 04 | [Hidden Search Widget](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/hidden-search) | [Live Demo](https://50projects50days.com/projects/hidden-search-widget/) |
+| 05 | [Blurry Loading](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/blurry-loading) | [Live Demo](https://50projects50days.com/projects/blurry-loading/) |
+| 06 | [Scroll Animation](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/scroll-animation) | [Live Demo](https://50projects50days.com/projects/scroll-animation/) |
+| 07 | [Split Landing Page](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/split-landing-page) | [Live Demo](https://50projects50days.com/projects/split-landing-page/) |
+| 08 | [Form Wave](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/form-input-wave) | [Live Demo](https://50projects50days.com/projects/form-wave/) |
+| 09 | [Sound Board](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/sound-board) | [Live Demo](https://50projects50days.com/projects/sound-board/) |
+| 10 | [Dad Jokes](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/dad-jokes) | [Live Demo](https://50projects50days.com/projects/dad-jokes/) |
+| 11 | [Event Keycodes](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/event-keycodes) | [Live Demo](https://50projects50days.com/projects/event-keycodes/) |
+| 12 | [Faq Collapse](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/faq-collapse) | [Live Demo](https://50projects50days.com/projects/faq-collapse/) |
+| 13 | [Random Choice Picker](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/random-choice-picker) | [Live Demo](https://50projects50days.com/projects/random-choice-picker/) |
+| 14 | [Animated Navigation](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/animated-navigation) | [Live Demo](https://50projects50days.com/projects/animated-navigation/) |
+| 15 | [Incrementing Counter](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/incrementing-counter) | [Live Demo](https://50projects50days.com/projects/incrementing-counter/) |
+| 16 | [Drink Water](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/drink-water) | [Live Demo](https://50projects50days.com/projects/drink-water/) |
+| 17 | [Movie App](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/movie-app) | [Live Demo](https://50projects50days.com/projects/movie-app/) |
+| 18 | [Background Slider](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/background-slider) | [Live Demo](https://50projects50days.com/projects/background-slider/) |
+| 19 | [Theme Clock](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/theme-clock) | [Live Demo](https://50projects50days.com/projects/theme-clock/) |
+| 20 | [Button Ripple Effect](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/button-ripple-effect) | [Live Demo](https://50projects50days.com/projects/button-ripple-effect/) |
+| 21 | [Drag N Drop](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/drag-n-drop) | [Live Demo](https://50projects50days.com/projects/drag-n-drop/) |
+| 22 | [Drawing App](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/drawing-app) | [Live Demo](https://50projects50days.com/projects/drawing-app/) |
+| 23 | [Kinetic Loader](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/kinetic-loader) | [Live Demo](https://50projects50days.com/projects/kinetic-loader/) |
+| 24 | [Content Placeholder](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/content-placeholder) | [Live Demo](https://50projects50days.com/projects/content-placeholder/) |
+| 25 | [Sticky Navbar](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/sticky-navigation) | [Live Demo](https://50projects50days.com/projects/sticky-navbar/) |
+| 26 | [Double Vertical Slider](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/double-vertical-slider) | [Live Demo](https://50projects50days.com/projects/double-vertical-slider/) |
+| 27 | [Toast Notification](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/toast-notification) | [Live Demo](https://50projects50days.com/projects/toast-notification/) |
+| 28 | [Github Profiles](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/github-profiles) | [Live Demo](https://50projects50days.com/projects/github-profiles/) |
+| 29 | [Double Click Heart](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/double-click-heart) | [Live Demo](https://50projects50days.com/projects/double-click-heart/) |
+| 30 | [Auto Text Effect](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/auto-text-effect) | [Live Demo](https://50projects50days.com/projects/auto-text-effect/) |
+| 31 | [Password Generator](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/password-generator) | [Live Demo](https://50projects50days.com/projects/password-generator/) |
+| 32 | [Good Cheap Fast](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/good-cheap-fast) | [Live Demo](https://50projects50days.com/projects/good-cheap-fast/) |
+| 33 | [Notes App](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/notes-app) | [Live Demo](https://50projects50days.com/projects/notes-app/) |
+| 34 | [Animated Countdown](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/animated-countdown) | [Live Demo](https://50projects50days.com/projects/animated-countdown/) |
+| 35 | [Image Carousel](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/image-carousel) | [Live Demo](https://50projects50days.com/projects/image-carousel/) |
+| 36 | [Hoverboard](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/hoverboard) | [Live Demo](https://50projects50days.com/projects/hoverboard/) |
+| 37 | [Pokedex](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/pokedex) | [Live Demo](https://50projects50days.com/projects/pokedex/) |
+| 38 | [Mobile Tab Navigation](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/mobile-tab-navigation) | [Live Demo](https://50projects50days.com/projects/mobile-tab-navigation/) |
+| 39 | [Password Strength Background](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/password-strength-background) | [Live Demo](https://50projects50days.com/projects/password-strength-background/) |
+| 40 | [3d Background Boxes](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/3d-boxes-background) | [Live Demo](https://50projects50days.com/projects/3d-background-boxes/) |
+| 41 | [Verify Account Ui](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/verify-account-ui) | [Live Demo](https://50projects50days.com/projects/verify-account-ui/) |
+| 42 | [Live User Filter](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/live-user-filter) | [Live Demo](https://50projects50days.com/projects/live-user-filter/) |
+| 43 | [Feedback Ui Design](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/feedback-ui-design) | [Live Demo](https://50projects50days.com/projects/feedback-ui-design/) |
+| 44 | [Custom Range Slider](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/custom-range-slider) | [Live Demo](https://50projects50days.com/projects/custom-range-slider/) |
+| 45 | [Netflix Mobile Navigation](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/netflix-mobile-navigation) | [Live Demo](https://50projects50days.com/projects/netflix-mobile-navigation/) |
+| 46 | [Quiz App](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/quiz-app) | [Live Demo](https://50projects50days.com/projects/quiz-app/) |
+| 47 | [Testimonial Box Switcher](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/testimonial-box-switcher) | [Live Demo](https://50projects50days.com/projects/testimonial-box-switcher/) |
+| 48 | [Random Image Feed](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/random-image-generator) | [Live Demo](https://50projects50days.com/projects/random-image-feed/) |
+| 49 | [Todo List](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/todo-list) | [Live Demo](https://50projects50days.com/projects/todo-list/) |
+| 50 | [Insect Catch Game](https://github.com/PacktPublishing/50-Projects-In-50-Days---HTML-CSS-JavaScript/tree/main/insect-catch-game) | [Live Demo](https://50projects50days.com/projects/insect-catch-game/) |
-### Run Dev Server (http://localhost:3000)
-```bash
-npm run dev
-```
+**NOTE ON PULL REQUESTS**: All of these projects are part of the course. While I do appreciate people trying to make some things prettier or adding new features, we are only accepting pull requests and looking at issues for bug fixes so that the code stays inline with the course
-### Creating posts
+## License
-* Create a markdown file in the "posts" folder and name it whatever you want as the slug
-* Add the frontmatter/fields at the top and then the post body. See an example in the "posts" folder of this repo
-* Add your cover image and author image in the public/images folder
-* For category color coding, edit the "Components/CategoryLabel.js" file
+The MIT License
-### Caching
+Copyright (c) 2020-2021 Traversy Media https://traversymedia.com
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
-Husky is used to run a cache script on git commit. Caching is used for the search api route/serverless function
diff --git a/_project_starter_/index.html b/_project_starter_/index.html
new file mode 100644
index 0000000..4783501
--- /dev/null
+++ b/_project_starter_/index.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+ My Project
+
+
+ Project Starter
+
+
+
diff --git a/_project_starter_/script.js b/_project_starter_/script.js
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/_project_starter_/script.js
@@ -0,0 +1 @@
+
diff --git a/_project_starter_/style.css b/_project_starter_/style.css
new file mode 100644
index 0000000..ec80c4b
--- /dev/null
+++ b/_project_starter_/style.css
@@ -0,0 +1,16 @@
+@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap');
+
+* {
+ box-sizing: border-box;
+}
+
+body {
+ font-family: 'Roboto', sans-serif;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ height: 100vh;
+ overflow: hidden;
+ margin: 0;
+}
diff --git a/animated-countdown/index.html b/animated-countdown/index.html
new file mode 100644
index 0000000..b04e91c
--- /dev/null
+++ b/animated-countdown/index.html
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+ Animated Countdown
+
+
+
+
+ 3
+ 2
+ 1
+ 0
+
+
Get Ready
+
+
+
+
GO
+
+ Replay
+
+
+
+
+
diff --git a/animated-countdown/script.js b/animated-countdown/script.js
new file mode 100644
index 0000000..3493444
--- /dev/null
+++ b/animated-countdown/script.js
@@ -0,0 +1,40 @@
+const nums = document.querySelectorAll('.nums span')
+const counter = document.querySelector('.counter')
+const finalMessage = document.querySelector('.final')
+const replay = document.querySelector('#replay')
+
+runAnimation()
+
+function resetDOM() {
+ counter.classList.remove('hide')
+ finalMessage.classList.remove('show')
+
+ nums.forEach((num) => {
+ num.classList.value = ''
+ })
+
+ nums[0].classList.add('in')
+}
+
+function runAnimation() {
+ nums.forEach((num, idx) => {
+ const nextToLast = nums.length - 1
+
+ num.addEventListener('animationend', (e) => {
+ if (e.animationName === 'goIn' && idx !== nextToLast) {
+ num.classList.remove('in')
+ num.classList.add('out')
+ } else if (e.animationName === 'goOut' && num.nextElementSibling) {
+ num.nextElementSibling.classList.add('in')
+ } else {
+ counter.classList.add('hide')
+ finalMessage.classList.add('show')
+ }
+ })
+ })
+}
+
+replay.addEventListener('click', () => {
+ resetDOM()
+ runAnimation()
+})
diff --git a/animated-countdown/style.css b/animated-countdown/style.css
new file mode 100644
index 0000000..8ea1c73
--- /dev/null
+++ b/animated-countdown/style.css
@@ -0,0 +1,163 @@
+@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap');
+
+* {
+ box-sizing: border-box;
+}
+
+body {
+ font-family: 'Roboto', sans-serif;
+ margin: 0;
+ height: 100vh;
+ overflow: hidden;
+}
+
+h4 {
+ font-size: 20px;
+ margin: 5px;
+ text-transform: uppercase;
+}
+
+.counter {
+ position: fixed;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ text-align: center;
+}
+
+.counter.hide {
+ transform: translate(-50%, -50%) scale(0);
+ animation: hide 0.2s ease-out;
+}
+
+@keyframes hide {
+ 0% {
+ transform: translate(-50%, -50%) scale(1);
+ }
+
+ 100% {
+ transform: translate(-50%, -50%) scale(0);
+ }
+}
+
+.final {
+ position: fixed;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%) scale(0);
+ text-align: center;
+}
+
+.final.show {
+ transform: translate(-50%, -50%) scale(1);
+ animation: show 0.2s ease-out;
+}
+
+@keyframes show {
+ 0% {
+ transform: translate(-50%, -50%) scale(0);
+ }
+
+ 30% {
+ transform: translate(-50%, -50%) scale(1.4);
+ }
+
+ 100% {
+ transform: translate(-50%, -50%) scale(1);
+ }
+}
+
+.nums {
+ color: #3498db;
+ font-size: 50px;
+ position: relative;
+ overflow: hidden;
+ width: 250px;
+ height: 50px;
+}
+
+.nums span {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%) rotate(120deg);
+ transform-origin: bottom center;
+}
+
+.nums span.in {
+ transform: translate(-50%, -50%) rotate(0deg);
+ animation: goIn 0.5s ease-in-out;
+}
+
+.nums span.out {
+ animation: goOut 0.5s ease-in-out;
+}
+
+@keyframes goIn {
+ 0% {
+ transform: translate(-50%, -50%) rotate(120deg);
+ }
+
+ 30% {
+ transform: translate(-50%, -50%) rotate(-20deg);
+ }
+
+ 60% {
+ transform: translate(-50%, -50%) rotate(10deg);
+ }
+
+ 100% {
+ transform: translate(-50%, -50%) rotate(0deg);
+ }
+}
+
+@keyframes goOut {
+ 0% {
+ transform: translate(-50%, -50%) rotate(0deg);
+ }
+
+ 60% {
+ transform: translate(-50%, -50%) rotate(20deg);
+ }
+
+ 100% {
+ transform: translate(-50%, -50%) rotate(-120deg);
+ }
+}
+
+#replay{
+ background-color: #3498db;
+ border-radius: 3px;
+ border: none;
+ color: aliceblue;
+ padding: 5px;
+ text-align: center;
+ display: inline-block;
+ cursor: pointer;
+ transition: all 0.3s;
+}
+
+#replay span{
+ cursor: pointer;
+ display: inline-block;
+ position: relative;
+ transition: 0.3s;
+}
+
+#replay span:after{
+ content: '\00bb';
+ position: absolute;
+ opacity: 0;
+ top: 0;
+ right: -20px;
+ transition: 0.5s;
+}
+
+#replay:hover span{
+ padding-right: 25px;
+}
+
+#replay:hover span:after{
+ opacity: 1;
+ right: 0;
+}
diff --git a/animated-navigation/index.html b/animated-navigation/index.html
new file mode 100644
index 0000000..2801213
--- /dev/null
+++ b/animated-navigation/index.html
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+ Animated Navigation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/animated-navigation/script.js b/animated-navigation/script.js
new file mode 100644
index 0000000..fd77c00
--- /dev/null
+++ b/animated-navigation/script.js
@@ -0,0 +1,4 @@
+const toggle = document.getElementById('toggle')
+const nav = document.getElementById('nav')
+
+toggle.addEventListener('click', () => nav.classList.toggle('active'))
diff --git a/animated-navigation/style.css b/animated-navigation/style.css
new file mode 100644
index 0000000..77959ef
--- /dev/null
+++ b/animated-navigation/style.css
@@ -0,0 +1,107 @@
+@import url('https://fonts.googleapis.com/css?family=Muli&display=swap');
+
+* {
+ box-sizing: border-box;
+}
+
+body {
+ background-color: #eafbff;
+ background-image: linear-gradient(
+ to bottom,
+ #eafbff 0%,
+ #eafbff 50%,
+ #5290f9 50%,
+ #5290f9 100%
+ );
+ font-family: 'Muli', sans-serif;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 100vh;
+ margin: 0;
+}
+
+nav {
+ background-color: #fff;
+ padding: 20px;
+ width: 80px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ border-radius: 3px;
+ box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3);
+ transition: width 0.6s linear;
+ overflow-x: hidden;
+}
+
+nav.active {
+ width: 350px;
+}
+
+nav ul {
+ display: flex;
+ list-style-type: none;
+ padding: 0;
+ margin: 0;
+ width: 0;
+ transition: width 0.6s linear;
+}
+
+nav.active ul {
+ width: 100%;
+}
+
+nav ul li {
+ transform: rotateY(0deg);
+ opacity: 0;
+ transition: transform 0.6s linear, opacity 0.6s linear;
+}
+
+nav.active ul li {
+ opacity: 1;
+ transform: rotateY(360deg);
+}
+
+nav ul a {
+ position: relative;
+ color: #000;
+ text-decoration: none;
+ margin: 0 10px;
+}
+
+.icon {
+ background-color: #fff;
+ border: 0;
+ cursor: pointer;
+ padding: 0;
+ position: relative;
+ height: 30px;
+ width: 30px;
+}
+
+.icon:focus {
+ outline: 0;
+}
+
+.icon .line {
+ background-color: #5290f9;
+ height: 2px;
+ width: 20px;
+ position: absolute;
+ top: 10px;
+ left: 5px;
+ transition: transform 0.6s linear;
+}
+
+.icon .line2 {
+ top: auto;
+ bottom: 10px;
+}
+
+nav.active .icon .line1 {
+ transform: rotate(-765deg) translateY(5.5px);
+}
+
+nav.active .icon .line2 {
+ transform: rotate(765deg) translateY(-5.5px);
+}
diff --git a/auto-text-effect/index.html b/auto-text-effect/index.html
new file mode 100644
index 0000000..3fb9ade
--- /dev/null
+++ b/auto-text-effect/index.html
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+ Auto Text Effect
+
+
+ Starting...
+
+
+ Speed:
+
+
+
+
+
+
diff --git a/auto-text-effect/script.js b/auto-text-effect/script.js
new file mode 100644
index 0000000..c302628
--- /dev/null
+++ b/auto-text-effect/script.js
@@ -0,0 +1,22 @@
+const textEl = document.getElementById('text')
+const speedEl = document.getElementById('speed')
+const text = 'We Love Programming!'
+let idx = 1
+let speed = 300 / speedEl.value
+
+writeText()
+
+function writeText() {
+ textEl.innerText = text.slice(0, idx)
+
+ idx++
+
+ if(idx > text.length) {
+ idx = 1
+ }
+
+ setTimeout(writeText, speed)
+}
+
+
+speedEl.addEventListener('input', (e) => speed = 300 / e.target.value)
\ No newline at end of file
diff --git a/auto-text-effect/style.css b/auto-text-effect/style.css
new file mode 100644
index 0000000..71fae02
--- /dev/null
+++ b/auto-text-effect/style.css
@@ -0,0 +1,38 @@
+@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap');
+
+* {
+ box-sizing: border-box;
+}
+
+body {
+ background-color: darksalmon;
+ font-family: 'Roboto', sans-serif;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ height: 100vh;
+ overflow: hidden;
+ margin: 0;
+}
+
+div {
+ position: absolute;
+ bottom: 20px;
+ background: rgba(0, 0, 0, 0.1);
+ padding: 10px 20px;
+ font-size: 18px;
+}
+
+input {
+ width: 50px;
+ padding: 5px;
+ font-size: 18px;
+ background-color: darksalmon;
+ border: none;
+ text-align: center;
+}
+
+input:focus {
+ outline: none;
+}
diff --git a/background-slider/index.html b/background-slider/index.html
new file mode 100644
index 0000000..1752bc7
--- /dev/null
+++ b/background-slider/index.html
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+ Background Slider
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/background-slider/script.js b/background-slider/script.js
new file mode 100644
index 0000000..a15f328
--- /dev/null
+++ b/background-slider/script.js
@@ -0,0 +1,40 @@
+const body = document.body
+const slides = document.querySelectorAll('.slide')
+const leftBtn = document.getElementById('left')
+const rightBtn = document.getElementById('right')
+
+let activeSlide = 0
+
+rightBtn.addEventListener('click', () => {
+ activeSlide++
+
+ if (activeSlide > slides.length - 1) {
+ activeSlide = 0
+ }
+
+ setBgToBody()
+ setActiveSlide()
+})
+
+leftBtn.addEventListener('click', () => {
+ activeSlide--
+
+ if (activeSlide < 0) {
+ activeSlide = slides.length - 1
+ }
+
+ setBgToBody()
+ setActiveSlide()
+})
+
+setBgToBody()
+
+function setBgToBody() {
+ body.style.backgroundImage = slides[activeSlide].style.backgroundImage
+}
+
+function setActiveSlide() {
+ slides.forEach((slide) => slide.classList.remove('active'))
+
+ slides[activeSlide].classList.add('active')
+}
diff --git a/background-slider/style.css b/background-slider/style.css
new file mode 100644
index 0000000..8e46937
--- /dev/null
+++ b/background-slider/style.css
@@ -0,0 +1,79 @@
+@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap');
+
+* {
+ box-sizing: border-box;
+}
+
+body {
+ font-family: 'Roboto', sans-serif;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ height: 100vh;
+ overflow: hidden;
+ margin: 0;
+ background-position: center center;
+ background-size: cover;
+ transition: 0.4s;
+}
+
+body::before {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100vh;
+ background-color: rgba(0, 0, 0, 0.7);
+ z-index: -1;
+}
+
+.slider-container {
+ box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23);
+ height: 70vh;
+ width: 70vw;
+ position: relative;
+ overflow: hidden;
+}
+
+.slide {
+ opacity: 0;
+ height: 100vh;
+ width: 100vw;
+ background-position: center center;
+ background-size: cover;
+ position: absolute;
+ top: -15vh;
+ left: -15vw;
+ transition: 0.4s ease;
+ z-index: 1;
+}
+
+.slide.active {
+ opacity: 1;
+}
+
+.arrow {
+ position: fixed;
+ background-color: transparent;
+ color: #fff;
+ padding: 20px;
+ font-size: 30px;
+ border: 2px solid orange;
+ top: 50%;
+ transform: translateY(-50%);
+ cursor: pointer;
+}
+
+.arrow:focus {
+ outline: 0;
+}
+
+.left-arrow {
+ left: calc(15vw - 65px);
+}
+
+.right-arrow {
+ right: calc(15vw - 65px);
+}
diff --git a/blurry-loading/index.html b/blurry-loading/index.html
new file mode 100644
index 0000000..99ff943
--- /dev/null
+++ b/blurry-loading/index.html
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+ Blurry Loading
+
+
+
+ 0%
+
+
+
+
diff --git a/blurry-loading/script.js b/blurry-loading/script.js
new file mode 100644
index 0000000..7803e01
--- /dev/null
+++ b/blurry-loading/script.js
@@ -0,0 +1,23 @@
+const loadText = document.querySelector('.loading-text')
+const bg = document.querySelector('.bg')
+
+let load = 0
+
+let int = setInterval(blurring, 30)
+
+function blurring() {
+ load++
+
+ if (load > 99) {
+ clearInterval(int)
+ }
+
+ loadText.innerText = `${load}%`
+ loadText.style.opacity = scale(load, 0, 100, 1, 0)
+ bg.style.filter = `blur(${scale(load, 0, 100, 30, 0)}px)`
+}
+
+// https://stackoverflow.com/questions/10756313/javascript-jquery-map-a-range-of-numbers-to-another-range-of-numbers
+const scale = (num, in_min, in_max, out_min, out_max) => {
+ return ((num - in_min) * (out_max - out_min)) / (in_max - in_min) + out_min
+}
diff --git a/blurry-loading/style.css b/blurry-loading/style.css
new file mode 100644
index 0000000..621ed1d
--- /dev/null
+++ b/blurry-loading/style.css
@@ -0,0 +1,32 @@
+@import url('https://fonts.googleapis.com/css?family=Ubuntu');
+
+* {
+ box-sizing: border-box;
+}
+
+body {
+ font-family: 'Ubuntu', sans-serif;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 100vh;
+ overflow: hidden;
+ margin: 0;
+}
+
+.bg {
+ background: url('https://images.unsplash.com/photo-1576161787924-01bb08dad4a4?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=2104&q=80')
+ no-repeat center center/cover;
+ position: absolute;
+ top: -30px;
+ left: -30px;
+ width: calc(100vw + 60px);
+ height: calc(100vh + 60px);
+ z-index: -1;
+ filter: blur(0px);
+}
+
+.loading-text {
+ font-size: 50px;
+ color: #fff;
+}
diff --git a/button-ripple-effect/index.html b/button-ripple-effect/index.html
new file mode 100644
index 0000000..1c5eea8
--- /dev/null
+++ b/button-ripple-effect/index.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+ Button Ripple Effect
+
+
+ Click Me
+
+
+
diff --git a/button-ripple-effect/script.js b/button-ripple-effect/script.js
new file mode 100644
index 0000000..b17ecf1
--- /dev/null
+++ b/button-ripple-effect/script.js
@@ -0,0 +1,23 @@
+const buttons = document.querySelectorAll('.ripple')
+
+buttons.forEach(button => {
+ button.addEventListener('click', function (e) {
+ const x = e.clientX
+ const y = e.clientY
+
+ const buttonTop = e.target.offsetTop
+ const buttonLeft = e.target.offsetLeft
+
+ const xInside = x - buttonLeft
+ const yInside = y - buttonTop
+
+ const circle = document.createElement('span')
+ circle.classList.add('circle')
+ circle.style.top = yInside + 'px'
+ circle.style.left = xInside + 'px'
+
+ this.appendChild(circle)
+
+ setTimeout(() => circle.remove(), 500)
+ })
+})
\ No newline at end of file
diff --git a/button-ripple-effect/style.css b/button-ripple-effect/style.css
new file mode 100644
index 0000000..758a939
--- /dev/null
+++ b/button-ripple-effect/style.css
@@ -0,0 +1,51 @@
+@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap');
+
+* {
+ box-sizing: border-box;
+}
+
+body {
+ background-color: #000;
+ font-family: 'Roboto', sans-serif;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ height: 100vh;
+ overflow: hidden;
+ margin: 0;
+}
+
+button {
+ background-color: purple;
+ color: #fff;
+ border: 1px purple solid;
+ font-size: 14px;
+ text-transform: uppercase;
+ letter-spacing: 2px;
+ padding: 20px 30px;
+ overflow: hidden;
+ margin: 10px 0;
+ position: relative;
+}
+
+button:focus {
+ outline: none;
+}
+
+button .circle {
+ position: absolute;
+ background-color: #fff;
+ width: 100px;
+ height: 100px;
+ border-radius: 50%;
+ transform: translate(-50%, -50%) scale(0);
+ animation: scale 0.5s ease-out;
+}
+
+@keyframes scale {
+ to {
+ transform: translate(-50%, -50%) scale(3);
+ opacity: 0;
+ }
+}
diff --git a/cache/data.js b/cache/data.js
deleted file mode 100644
index 16fb569..0000000
--- a/cache/data.js
+++ /dev/null
@@ -1 +0,0 @@
-export const posts = [{"slug":"django-crash-course","frontmatter":{"title":"Django Crash Course","date":"May 5, 2021","excerpt":"Django is a very powerful, high level Python framework for building web applications","cover_image":"/images/posts/img3.jpg","category":"Python","author":"Sam Smith","author_image":"https://randomuser.me/api/portraits/men/12.jpg"}},{"slug":"javascript-performance-tips","frontmatter":{"title":"JavaScript Performance Tips","date":"May 4, 2021","excerpt":"We will look at 10 simple tips and tricks to increase the speed of your code when writing JS","cover_image":"/images/posts/img1.jpg","category":"JavaScript","author":"John Doe","author_image":"https://randomuser.me/api/portraits/men/11.jpg"}},{"slug":"manage-react-state-with-xstate","frontmatter":{"title":"Manage React State With XState","date":"May 15, 2021","excerpt":"The most straightforward way of using XState with React is through local component state","cover_image":"/images/posts/img8.jpg","category":"JavaScript","author":"Sam Smith","author_image":"https://randomuser.me/api/portraits/men/18.jpg"}},{"slug":"new-in-php-8","frontmatter":{"title":"What's New In PHP 8?","date":"May 7, 2021","excerpt":"In this article we will look at some of the new features offered in version 8 of PHP","cover_image":"/images/posts/img4.jpg","category":"PHP","author":"Sara Johnson","author_image":"https://randomuser.me/api/portraits/women/12.jpg"}},{"slug":"python-book-review","frontmatter":{"title":"Python Book Review","date":"May 7, 2021","excerpt":"In this review, we will be looking at the new Python book from Oriley","cover_image":"/images/posts/img6.jpg","category":"Python","author":"Mike Richards","author_image":"https://randomuser.me/api/portraits/men/13.jpg"}},{"slug":"react-crash-course","frontmatter":{"title":"React Crash Course","date":"May 8, 2021","excerpt":"Crash course to learn the React JavaScript library. We will look at components, hooks and more","cover_image":"/images/posts/img5.jpg","category":"JavaScript","author":"Jane Doe","author_image":"https://randomuser.me/api/portraits/women/11.jpg"}},{"slug":"tailwind-vs-bootstrap","frontmatter":{"title":"Tailwind vs. Bootstrap","date":"May 5, 2021","excerpt":"Both Tailwind and Bootstrap are very popular CSS frameworks. In this article, we will compare them","cover_image":"/images/posts/img2.jpg","category":"CSS","author":"Jane Doe","author_image":"https://randomuser.me/api/portraits/women/11.jpg"}},{"slug":"writing-great-unit-tests","frontmatter":{"title":"Writing Great Unit Tests","date":"May 12, 2021","excerpt":"We will look at 10 simple tips and tricks on writing unit tests in JavaScript","cover_image":"/images/posts/img7.jpg","category":"JavaScript","author":"John Doe","author_image":"https://randomuser.me/api/portraits/men/11.jpg"}}]
\ No newline at end of file
diff --git a/components/CategoryLabel.js b/components/CategoryLabel.js
deleted file mode 100644
index be048d9..0000000
--- a/components/CategoryLabel.js
+++ /dev/null
@@ -1,19 +0,0 @@
-import Link from 'next/link'
-
-export default function CategoryLabel({ children }) {
- const colorKey = {
- JavaScript: 'yellow',
- CSS: 'blue',
- Python: 'green',
- PHP: 'purple',
- Ruby: 'red',
- }
-
- return (
-
- {children}
-
- )
-}
diff --git a/components/CategoryList.js b/components/CategoryList.js
deleted file mode 100644
index 94c8bfb..0000000
--- a/components/CategoryList.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import Link from 'next/link'
-
-export default function CategoryList({ categories }) {
- return (
-
-
- Blog Categories
-
-
- {categories.map((category, index) => (
-
- {category}
-
- ))}
-
-
- )
-}
diff --git a/components/Header.js b/components/Header.js
deleted file mode 100644
index 6177d2a..0000000
--- a/components/Header.js
+++ /dev/null
@@ -1,29 +0,0 @@
-import Link from 'next/link'
-import Image from 'next/image'
-
-export default function Header() {
- return (
-
- )
-}
diff --git a/components/Layout.js b/components/Layout.js
deleted file mode 100644
index e5b7887..0000000
--- a/components/Layout.js
+++ /dev/null
@@ -1,26 +0,0 @@
-import Head from 'next/head'
-import Header from './Header'
-import Search from './Search'
-
-export default function Layout({ title, keywords, description, children }) {
- return (
-
-
-
{title}
-
-
-
-
-
-
-
- {children}
-
- )
-}
-
-Layout.defaultProps = {
- title: 'Welcome to DevSpace',
- keywords: 'development, coding, programming',
- description: 'The best info and news in development',
-}
diff --git a/components/Pagination.js b/components/Pagination.js
deleted file mode 100644
index 8968531..0000000
--- a/components/Pagination.js
+++ /dev/null
@@ -1,39 +0,0 @@
-import Link from 'next/link'
-
-export default function Pagination({ currentPage, numPages }) {
- const isFirst = currentPage === 1
- const isLast = currentPage === numPages
- const prevPage = `/blog/page/${currentPage - 1}`
- const nextPage = `/blog/page/${currentPage + 1}`
-
- if (numPages === 1) return <>>
-
- return (
-
-
- {!isFirst && (
-
-
- Previous
-
-
- )}
- {Array.from({ length: numPages }, (_, i) => (
-
-
- {i + 1}
-
-
- ))}
-
- {!isLast && (
-
-
- Next
-
-
- )}
-
-
- )
-}
diff --git a/components/Post.js b/components/Post.js
deleted file mode 100644
index a1b1f28..0000000
--- a/components/Post.js
+++ /dev/null
@@ -1,52 +0,0 @@
-import Link from 'next/link'
-import Image from 'next/image'
-import CategoryLabel from './CategoryLabel'
-
-export default function Post({ post, compact }) {
- return (
-
- {!compact && (
-
- )}
-
-
- {post.frontmatter.date}
-
- {post.frontmatter.category}
-
-
-
-
- {!compact && (
-
-
-
Read More
-
-
-
-
- {post.frontmatter.author}
-
-
-
- )}
-
- )
-}
diff --git a/components/Search.js b/components/Search.js
deleted file mode 100644
index 51f9577..0000000
--- a/components/Search.js
+++ /dev/null
@@ -1,46 +0,0 @@
-import { useState, useEffect } from 'react'
-import { FaSearch } from 'react-icons/fa'
-import SearchResults from './SearchResults'
-
-export default function Search() {
- const [searchTerm, setSearchTerm] = useState('')
- const [searchResults, setSearchResults] = useState([])
-
- useEffect(() => {
- const getResults = async () => {
- if (searchTerm === '') {
- setSearchResults([])
- } else {
- const res = await fetch(`/api/search?q=${searchTerm}`)
- const { results } = await res.json()
- setSearchResults(results)
- }
- }
-
- getResults()
- }, [searchTerm])
-
- return (
-
- )
-}
diff --git a/components/SearchResults.js b/components/SearchResults.js
deleted file mode 100644
index 85fb660..0000000
--- a/components/SearchResults.js
+++ /dev/null
@@ -1,16 +0,0 @@
-import Post from './Post'
-
-export default function SearchResults({ results }) {
- if (results.length === 0) return <>>
-
- return (
-
-
-
{results.length} Results
- {results.map((result, index) => (
-
- ))}
-
-
- )
-}
diff --git a/config/index.js b/config/index.js
deleted file mode 100644
index 10dbe0e..0000000
--- a/config/index.js
+++ /dev/null
@@ -1 +0,0 @@
-export const POSTS_PER_PAGE = 6
diff --git a/content-placeholder/index.html b/content-placeholder/index.html
new file mode 100644
index 0000000..14a6974
--- /dev/null
+++ b/content-placeholder/index.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+ Content Placeholder
+
+
+
+
+
+
+
diff --git a/content-placeholder/script.js b/content-placeholder/script.js
new file mode 100644
index 0000000..e2f2359
--- /dev/null
+++ b/content-placeholder/script.js
@@ -0,0 +1,26 @@
+const header = document.getElementById('header')
+const title = document.getElementById('title')
+const excerpt = document.getElementById('excerpt')
+const profile_img = document.getElementById('profile_img')
+const name = document.getElementById('name')
+const date = document.getElementById('date')
+
+const animated_bgs = document.querySelectorAll('.animated-bg')
+const animated_bg_texts = document.querySelectorAll('.animated-bg-text')
+
+setTimeout(getData, 2500)
+
+function getData() {
+ header.innerHTML =
+ ' '
+ title.innerHTML = 'Lorem ipsum dolor sit amet'
+ excerpt.innerHTML =
+ 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolore perferendis'
+ profile_img.innerHTML =
+ ' '
+ name.innerHTML = 'John Doe'
+ date.innerHTML = 'Oct 08, 2020'
+
+ animated_bgs.forEach((bg) => bg.classList.remove('animated-bg'))
+ animated_bg_texts.forEach((bg) => bg.classList.remove('animated-bg-text'))
+}
diff --git a/content-placeholder/style.css b/content-placeholder/style.css
new file mode 100644
index 0000000..ab5bdd6
--- /dev/null
+++ b/content-placeholder/style.css
@@ -0,0 +1,106 @@
+@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap');
+
+* {
+ box-sizing: border-box;
+}
+
+body {
+ background-color: #ecf0f1;
+ font-family: 'Roboto', sans-serif;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 100vh;
+ overflow: hidden;
+ margin: 0;
+}
+
+img {
+ max-width: 100%;
+}
+
+.card {
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
+ border-radius: 10px;
+ overflow: hidden;
+ width: 350px;
+}
+
+.card-header {
+ height: 200px;
+}
+
+.card-header img {
+ object-fit: cover;
+ height: 100%;
+ width: 100%;
+}
+
+.card-content {
+ background-color: #fff;
+ padding: 30px;
+}
+
+.card-title {
+ height: 20px;
+ margin: 0;
+}
+
+.card-excerpt {
+ color: #777;
+ margin: 10px 0 20px;
+}
+
+.author {
+ display: flex;
+}
+
+.profile-img {
+ border-radius: 50%;
+ overflow: hidden;
+ height: 40px;
+ width: 40px;
+}
+
+.author-info {
+ display: flex;
+ flex-direction: column;
+ justify-content: space-around;
+ margin-left: 10px;
+ width: 100px;
+}
+
+.author-info small {
+ color: #aaa;
+ margin-top: 5px;
+}
+
+.animated-bg {
+ background-image: linear-gradient(
+ to right,
+ #f6f7f8 0%,
+ #edeef1 10%,
+ #f6f7f8 20%,
+ #f6f7f8 100%
+ );
+ background-size: 200% 100%;
+ animation: bgPos 1s linear infinite;
+}
+
+.animated-bg-text {
+ border-radius: 50px;
+ display: inline-block;
+ margin: 0;
+ height: 10px;
+ width: 100%;
+}
+
+@keyframes bgPos {
+ 0% {
+ background-position: 50% 0;
+ }
+
+ 100% {
+ background-position: -150% 0;
+ }
+}
diff --git a/custom-range-slider/.vscode/settings.json b/custom-range-slider/.vscode/settings.json
new file mode 100644
index 0000000..6f3a291
--- /dev/null
+++ b/custom-range-slider/.vscode/settings.json
@@ -0,0 +1,3 @@
+{
+ "liveServer.settings.port": 5501
+}
\ No newline at end of file
diff --git a/custom-range-slider/index.html b/custom-range-slider/index.html
new file mode 100644
index 0000000..ebc41e7
--- /dev/null
+++ b/custom-range-slider/index.html
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+ Custom Range Slider
+
+
+ Custom Range Slider
+
+
+ 50
+
+
+
+
+
diff --git a/custom-range-slider/script.js b/custom-range-slider/script.js
new file mode 100644
index 0000000..8fa6e72
--- /dev/null
+++ b/custom-range-slider/script.js
@@ -0,0 +1,27 @@
+const range = document.getElementById('range')
+
+range.addEventListener('input', (e) => {
+ const value = +e.target.value
+ const label = e.target.nextElementSibling
+
+ const range_width = getComputedStyle(e.target).getPropertyValue('width')
+ const label_width = getComputedStyle(label).getPropertyValue('width')
+
+ const num_width = +range_width.substring(0, range_width.length - 2)
+ const num_label_width = +label_width.substring(0, label_width.length - 2)
+
+ const max = +e.target.max
+ const min = +e.target.min
+
+ const left = value * (num_width / max) - num_label_width / 2 + scale(value, min, max, 10, -10)
+
+ label.style.left = `${left}px`
+
+
+ label.innerHTML = value
+})
+
+// https://stackoverflow.com/questions/10756313/javascript-jquery-map-a-range-of-numbers-to-another-range-of-numbers
+const scale = (num, in_min, in_max, out_min, out_max) => {
+ return (num - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
+ }
\ No newline at end of file
diff --git a/custom-range-slider/style.css b/custom-range-slider/style.css
new file mode 100644
index 0000000..b0951d3
--- /dev/null
+++ b/custom-range-slider/style.css
@@ -0,0 +1,108 @@
+@import url('https://fonts.googleapis.com/css?family=Lato&display=swap');
+
+* {
+ box-sizing: border-box;
+}
+
+body {
+ background-image: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
+ font-family: 'Lato', sans-serif;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ height: 100vh;
+ overflow: hidden;
+ margin: 0;
+}
+
+h2 {
+ position: absolute;
+ top: 10px;
+}
+
+.range-container {
+ position: relative;
+}
+
+input[type='range'] {
+ width: 300px;
+ margin: 18px 0;
+ -webkit-appearance: none;
+}
+
+input[type='range']:focus {
+ outline: none;
+}
+
+input[type='range'] + label {
+ background-color: #fff;
+ position: absolute;
+ top: -25px;
+ left: 110px;
+ width: 80px;
+ padding: 5px 0;
+ text-align: center;
+ border-radius: 4px;
+ box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
+}
+
+/* Chrome & Safari */
+input[type='range']::-webkit-slider-runnable-track {
+ background: purple;
+ border-radius: 4px;
+ width: 100%;
+ height: 10px;
+ cursor: pointer;
+}
+
+input[type='range']::-webkit-slider-thumb {
+ -webkit-appearance: none;
+ height: 24px;
+ width: 24px;
+ background: #fff;
+ border-radius: 50%;
+ border: 1px solid purple;
+ margin-top: -7px;
+ cursor: pointer;
+}
+
+/* Firefox */
+input[type='range']::-moz-range-track {
+ background: purple;
+ border-radius: 4px;
+ width: 100%;
+ height: 13px;
+ cursor: pointer;
+}
+
+input[type='range']::-moz-range-thumb {
+ -webkit-appearance: none;
+ height: 24px;
+ width: 24px;
+ background: #fff;
+ border-radius: 50%;
+ border: 1px solid purple;
+ margin-top: -7px;
+ cursor: pointer;
+}
+
+/* IE */
+input[type='range']::-ms-track {
+ background: purple;
+ border-radius: 4px;
+ width: 100%;
+ height: 13px;
+ cursor: pointer;
+}
+
+input[type='range']::-ms-thumb {
+ -webkit-appearance: none;
+ height: 24px;
+ width: 24px;
+ background: #fff;
+ border-radius: 50%;
+ border: 1px solid purple;
+ margin-top: -7px;
+ cursor: pointer;
+}
diff --git a/dad-jokes/index.html b/dad-jokes/index.html
new file mode 100644
index 0000000..555bcdc
--- /dev/null
+++ b/dad-jokes/index.html
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+ Dad Jokes
+
+
+
+
Don't Laugh Challenge
+
// Joke goes here
+
Get Another Joke
+
+
+
+
diff --git a/dad-jokes/script.js b/dad-jokes/script.js
new file mode 100644
index 0000000..e78e685
--- /dev/null
+++ b/dad-jokes/script.js
@@ -0,0 +1,36 @@
+const jokeEl = document.getElementById('joke')
+const jokeBtn = document.getElementById('jokeBtn')
+
+jokeBtn.addEventListener('click', generateJoke)
+
+generateJoke()
+
+// USING ASYNC/AWAIT
+async function generateJoke() {
+ const config = {
+ headers: {
+ Accept: 'application/json',
+ },
+ }
+
+ const res = await fetch('https://icanhazdadjoke.com', config)
+
+ const data = await res.json()
+
+ jokeEl.innerHTML = data.joke
+}
+
+// USING .then()
+// function generateJoke() {
+// const config = {
+// headers: {
+// Accept: 'application/json',
+// },
+// }
+
+// fetch('https://icanhazdadjoke.com', config)
+// .then((res) => res.json())
+// .then((data) => {
+// jokeEl.innerHTML = data.joke
+// })
+// }
diff --git a/dad-jokes/style.css b/dad-jokes/style.css
new file mode 100644
index 0000000..38cc3a7
--- /dev/null
+++ b/dad-jokes/style.css
@@ -0,0 +1,61 @@
+@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap');
+
+* {
+ box-sizing: border-box;
+}
+
+body {
+ background-color: #686de0;
+ font-family: 'Roboto', sans-serif;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ height: 100vh;
+ overflow: hidden;
+ margin: 0;
+ padding: 20px;
+}
+
+.container {
+ background-color: #fff;
+ border-radius: 10px;
+ box-shadow: 0 10px 20px rgba(0, 0, 0, 0.1), 0 6px 6px rgba(0, 0, 0, 0.1);
+ padding: 50px 20px;
+ text-align: center;
+ max-width: 100%;
+ width: 800px;
+}
+
+h3 {
+ margin: 0;
+ opacity: 0.5;
+ letter-spacing: 2px;
+}
+
+.joke {
+ font-size: 30px;
+ letter-spacing: 1px;
+ line-height: 40px;
+ margin: 50px auto;
+ max-width: 600px;
+}
+
+.btn {
+ background-color: #9f68e0;
+ color: #fff;
+ border: 0;
+ border-radius: 10px;
+ box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1), 0 6px 6px rgba(0, 0, 0, 0.1);
+ padding: 14px 40px;
+ font-size: 16px;
+ cursor: pointer;
+}
+
+.btn:active {
+ transform: scale(0.98);
+}
+
+.btn:focus {
+ outline: 0;
+}
diff --git a/double-click-heart/index.html b/double-click-heart/index.html
new file mode 100644
index 0000000..1278213
--- /dev/null
+++ b/double-click-heart/index.html
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+ Double Click Heart
+
+
+ Double click on the image to it
+ You liked it 0 times
+
+
+
+
+
+
diff --git a/double-click-heart/script.js b/double-click-heart/script.js
new file mode 100644
index 0000000..a121037
--- /dev/null
+++ b/double-click-heart/script.js
@@ -0,0 +1,42 @@
+const loveMe = document.querySelector('.loveMe')
+const times = document.querySelector('#times')
+
+let clickTime = 0
+let timesClicked = 0
+
+loveMe.addEventListener('click', (e) => {
+ if(clickTime === 0) {
+ clickTime = new Date().getTime()
+ } else {
+ if((new Date().getTime() - clickTime) < 800) {
+ createHeart(e)
+ clickTime = 0
+ } else {
+ clickTime = new Date().getTime()
+ }
+ }
+})
+
+const createHeart = (e) => {
+ const heart = document.createElement('i')
+ heart.classList.add('fas')
+ heart.classList.add('fa-heart')
+
+ const x = e.clientX
+ const y = e.clientY
+
+ const leftOffset = e.target.offsetLeft
+ const topOffset = e.target.offsetTop
+
+ const xInside = x - leftOffset
+ const yInside = y - topOffset
+
+ heart.style.top = `${yInside}px`
+ heart.style.left = `${xInside}px`
+
+ loveMe.appendChild(heart)
+
+ times.innerHTML = ++timesClicked
+
+ setTimeout(() => heart.remove(), 1000)
+}
\ No newline at end of file
diff --git a/double-click-heart/style.css b/double-click-heart/style.css
new file mode 100644
index 0000000..c578a1e
--- /dev/null
+++ b/double-click-heart/style.css
@@ -0,0 +1,53 @@
+@import url('https://fonts.googleapis.com/css?family=Oswald');
+
+* {
+ box-sizing: border-box;
+}
+
+body {
+ font-family: 'Oswald', sans-serif;
+ text-align: center;
+ overflow: hidden;
+ margin: 0;
+}
+
+h3 {
+ margin-bottom: 0;
+ text-align: center;
+}
+
+small {
+ display: block;
+ margin-bottom: 20px;
+ text-align: center;
+}
+
+.fa-heart {
+ color: red;
+}
+
+.loveMe {
+ height: 440px;
+ width: 300px;
+ background: url('https://images.unsplash.com/photo-1504215680853-026ed2a45def?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=334&q=80')
+ no-repeat center center/cover;
+ margin: auto;
+ cursor: pointer;
+ max-width: 100%;
+ position: relative;
+ box-shadow: 0 14px 28px rgba(0, 0, 0, 0.25), 0 10px 10px rgba(0, 0, 0, 0.22);
+ overflow: hidden;
+}
+
+.loveMe .fa-heart {
+ position: absolute;
+ animation: grow 0.6s linear;
+ transform: translate(-50%, -50%) scale(0);
+}
+
+@keyframes grow {
+ to {
+ transform: translate(-50%, -50%) scale(10);
+ opacity: 0;
+ }
+}
diff --git a/double-vertical-slider/index.html b/double-vertical-slider/index.html
new file mode 100644
index 0000000..f7a229b
--- /dev/null
+++ b/double-vertical-slider/index.html
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+ Vertical Slider
+
+
+
+
+
+
Nature flower
+
all in pink
+
+
+
Bluuue Sky
+
with it's mountains
+
+
+
Lonely castle
+
in the wilderness
+
+
+
Flying eagle
+
in the sunset
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/double-vertical-slider/script.js b/double-vertical-slider/script.js
new file mode 100644
index 0000000..996730f
--- /dev/null
+++ b/double-vertical-slider/script.js
@@ -0,0 +1,31 @@
+const sliderContainer = document.querySelector('.slider-container')
+const slideRight = document.querySelector('.right-slide')
+const slideLeft = document.querySelector('.left-slide')
+const upButton = document.querySelector('.up-button')
+const downButton = document.querySelector('.down-button')
+const slidesLength = slideRight.querySelectorAll('div').length
+
+let activeSlideIndex = 0
+
+slideLeft.style.top = `-${(slidesLength - 1) * 100}vh`
+
+upButton.addEventListener('click', () => changeSlide('up'))
+downButton.addEventListener('click', () => changeSlide('down'))
+
+const changeSlide = (direction) => {
+ const sliderHeight = sliderContainer.clientHeight
+ if(direction === 'up') {
+ activeSlideIndex++
+ if(activeSlideIndex > slidesLength - 1) {
+ activeSlideIndex = 0
+ }
+ } else if(direction === 'down') {
+ activeSlideIndex--
+ if(activeSlideIndex < 0) {
+ activeSlideIndex = slidesLength - 1
+ }
+ }
+
+ slideRight.style.transform = `translateY(-${activeSlideIndex * sliderHeight}px)`
+ slideLeft.style.transform = `translateY(${activeSlideIndex * sliderHeight}px)`
+}
\ No newline at end of file
diff --git a/double-vertical-slider/style.css b/double-vertical-slider/style.css
new file mode 100644
index 0000000..709c11d
--- /dev/null
+++ b/double-vertical-slider/style.css
@@ -0,0 +1,97 @@
+@import url('https://fonts.googleapis.com/css?family=Open+Sans');
+
+* {
+ box-sizing: border-box;
+ margin: 0;
+ padding: 0;
+}
+
+body {
+ font-family: 'Open Sans', sans-serif;
+ height: 100vh;
+}
+
+.slider-container {
+ position: relative;
+ overflow: hidden;
+ width: 100vw;
+ height: 100vh;
+}
+
+.left-slide {
+ height: 100%;
+ width: 35%;
+ position: absolute;
+ top: 0;
+ left: 0;
+ transition: transform 0.5s ease-in-out;
+}
+
+.left-slide > div {
+ height: 100%;
+ width: 100%;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ color: #fff;
+}
+
+.left-slide h1 {
+ font-size: 40px;
+ margin-bottom: 10px;
+ margin-top: -30px;
+}
+
+.right-slide {
+ height: 100%;
+ position: absolute;
+ top: 0;
+ left: 35%;
+ width: 65%;
+ transition: transform 0.5s ease-in-out;
+}
+
+.right-slide > div {
+ background-repeat: no-repeat;
+ background-size: cover;
+ background-position: center center;
+ height: 100%;
+ width: 100%;
+}
+
+button {
+ background-color: #fff;
+ border: none;
+ color: #aaa;
+ cursor: pointer;
+ font-size: 16px;
+ padding: 15px;
+}
+
+button:hover {
+ color: #222;
+}
+
+button:focus {
+ outline: none;
+}
+
+.slider-container .action-buttons button {
+ position: absolute;
+ left: 35%;
+ top: 50%;
+ z-index: 100;
+}
+
+.slider-container .action-buttons .down-button {
+ transform: translateX(-100%);
+ border-top-left-radius: 5px;
+ border-bottom-left-radius: 5px;
+}
+
+.slider-container .action-buttons .up-button {
+ transform: translateY(-100%);
+ border-top-right-radius: 5px;
+ border-bottom-right-radius: 5px;
+}
diff --git a/drag-n-drop/index.html b/drag-n-drop/index.html
new file mode 100644
index 0000000..a04cdc4
--- /dev/null
+++ b/drag-n-drop/index.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+ Drag N Drop
+
+
+
+
+
+
+
+
+
+
+
diff --git a/drag-n-drop/script.js b/drag-n-drop/script.js
new file mode 100644
index 0000000..abc8a6e
--- /dev/null
+++ b/drag-n-drop/script.js
@@ -0,0 +1,39 @@
+const fill = document.querySelector('.fill')
+const empties = document.querySelectorAll('.empty')
+
+fill.addEventListener('dragstart', dragStart)
+fill.addEventListener('dragend', dragEnd)
+
+for(const empty of empties) {
+ empty.addEventListener('dragover', dragOver)
+ empty.addEventListener('dragenter', dragEnter)
+ empty.addEventListener('dragleave', dragLeave)
+ empty.addEventListener('drop', dragDrop)
+}
+
+function dragStart() {
+ this.className += ' hold'
+ setTimeout(() => this.className = 'invisible', 0)
+}
+
+function dragEnd() {
+ this.className = 'fill'
+}
+
+function dragOver(e) {
+ e.preventDefault()
+}
+
+function dragEnter(e) {
+ e.preventDefault()
+ this.className += ' hovered'
+}
+
+function dragLeave() {
+ this.className = 'empty'
+}
+
+function dragDrop() {
+ this.className = 'empty'
+ this.append(fill)
+}
\ No newline at end of file
diff --git a/drag-n-drop/style.css b/drag-n-drop/style.css
new file mode 100644
index 0000000..c5036ab
--- /dev/null
+++ b/drag-n-drop/style.css
@@ -0,0 +1,44 @@
+* {
+ box-sizing: border-box;
+}
+
+body {
+ background-color: steelblue;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 100vh;
+ overflow: hidden;
+ margin: 0;
+}
+
+.empty {
+ height: 150px;
+ width: 150px;
+ margin: 10px;
+ border: solid 3px black;
+ background: white;
+}
+
+.fill {
+ background-image: url('https://source.unsplash.com/random/150x150');
+ height: 145px;
+ width: 145px;
+ cursor: pointer;
+}
+
+.hold {
+ border: solid 5px #ccc;
+}
+
+.hovered {
+ background-color: #333;
+ border-color: white;
+ border-style: dashed;
+}
+
+@media (max-width: 800px) {
+ body {
+ flex-direction: column;
+ }
+}
diff --git a/drawing-app/index.html b/drawing-app/index.html
new file mode 100644
index 0000000..8edb4e2
--- /dev/null
+++ b/drawing-app/index.html
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+ Drawing App
+
+
+
+
+ -
+ 10
+ +
+
+ X
+
+
+
+
+
diff --git a/drawing-app/script.js b/drawing-app/script.js
new file mode 100644
index 0000000..833a43f
--- /dev/null
+++ b/drawing-app/script.js
@@ -0,0 +1,86 @@
+const canvas = document.getElementById('canvas');
+const increaseBtn = document.getElementById('increase');
+const decreaseBtn = document.getElementById('decrease');
+const sizeEL = document.getElementById('size');
+const colorEl = document.getElementById('color');
+const clearEl = document.getElementById('clear');
+
+const ctx = canvas.getContext('2d');
+
+let size = 10
+let isPressed = false
+colorEl.value = 'black'
+let color = colorEl.value
+let x
+let y
+
+canvas.addEventListener('mousedown', (e) => {
+ isPressed = true
+
+ x = e.offsetX
+ y = e.offsetY
+})
+
+document.addEventListener('mouseup', (e) => {
+ isPressed = false
+
+ x = undefined
+ y = undefined
+})
+
+canvas.addEventListener('mousemove', (e) => {
+ if(isPressed) {
+ const x2 = e.offsetX
+ const y2 = e.offsetY
+
+ drawCircle(x2, y2)
+ drawLine(x, y, x2, y2)
+
+ x = x2
+ y = y2
+ }
+})
+
+function drawCircle(x, y) {
+ ctx.beginPath();
+ ctx.arc(x, y, size, 0, Math.PI * 2)
+ ctx.fillStyle = color
+ ctx.fill()
+}
+
+function drawLine(x1, y1, x2, y2) {
+ ctx.beginPath()
+ ctx.moveTo(x1, y1)
+ ctx.lineTo(x2, y2)
+ ctx.strokeStyle = color
+ ctx.lineWidth = size * 2
+ ctx.stroke()
+}
+
+function updateSizeOnScreen() {
+ sizeEL.innerText = size
+}
+
+increaseBtn.addEventListener('click', () => {
+ size += 5
+
+ if(size > 50) {
+ size = 50
+ }
+
+ updateSizeOnScreen()
+})
+
+decreaseBtn.addEventListener('click', () => {
+ size -= 5
+
+ if(size < 5) {
+ size = 5
+ }
+
+ updateSizeOnScreen()
+})
+
+colorEl.addEventListener('change', (e) => color = e.target.value)
+
+clearEl.addEventListener('click', () => ctx.clearRect(0,0, canvas.width, canvas.height))
diff --git a/drawing-app/style.css b/drawing-app/style.css
new file mode 100644
index 0000000..8c45752
--- /dev/null
+++ b/drawing-app/style.css
@@ -0,0 +1,46 @@
+@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap');
+
+* {
+ box-sizing: border-box;
+}
+
+body {
+ background-color: #f5f5f5;
+ font-family: 'Roboto', sans-serif;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ height: 100vh;
+ margin: 0;
+}
+
+canvas {
+ border: 2px solid steelblue;
+}
+
+.toolbox {
+ background-color: steelblue;
+ border: 1px solid slateblue;
+ display: flex;
+ width: 804px;
+ padding: 1rem;
+}
+
+.toolbox > * {
+ background-color: #fff;
+ border: none;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 2rem;
+ height: 50px;
+ width: 50px;
+ margin: 0.25rem;
+ padding: 0.25rem;
+ cursor: pointer;
+}
+
+.toolbox > *:last-child {
+ margin-left: auto;
+}
diff --git a/drink-water/index.html b/drink-water/index.html
new file mode 100644
index 0000000..ca934e1
--- /dev/null
+++ b/drink-water/index.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+ Drink Water
+
+
+ Drink Water
+ Goal: 2 Liters
+
+
+
+ Select how many glasses of water that you have drank
+
+
+
250 ml
+
250 ml
+
250 ml
+
250 ml
+
250 ml
+
250 ml
+
250 ml
+
250 ml
+
+
+
+
+
diff --git a/drink-water/script.js b/drink-water/script.js
new file mode 100644
index 0000000..12143ae
--- /dev/null
+++ b/drink-water/script.js
@@ -0,0 +1,49 @@
+const smallCups = document.querySelectorAll('.cup-small')
+const liters = document.getElementById('liters')
+const percentage = document.getElementById('percentage')
+const remained = document.getElementById('remained')
+
+updateBigCup()
+
+smallCups.forEach((cup, idx) => {
+ cup.addEventListener('click', () => highlightCups(idx))
+})
+
+function highlightCups(idx) {
+ if (idx===7 && smallCups[idx].classList.contains("full")) idx--;
+ else if(smallCups[idx].classList.contains('full') && !smallCups[idx].nextElementSibling.classList.contains('full')) {
+ idx--
+ }
+
+ smallCups.forEach((cup, idx2) => {
+ if(idx2 <= idx) {
+ cup.classList.add('full')
+ } else {
+ cup.classList.remove('full')
+ }
+ })
+
+ updateBigCup()
+}
+
+function updateBigCup() {
+ const fullCups = document.querySelectorAll('.cup-small.full').length
+ const totalCups = smallCups.length
+
+ if(fullCups === 0) {
+ percentage.style.visibility = 'hidden'
+ percentage.style.height = 0
+ } else {
+ percentage.style.visibility = 'visible'
+ percentage.style.height = `${fullCups / totalCups * 330}px`
+ percentage.innerText = `${fullCups / totalCups * 100}%`
+ }
+
+ if(fullCups === totalCups) {
+ remained.style.visibility = 'hidden'
+ remained.style.height = 0
+ } else {
+ remained.style.visibility = 'visible'
+ liters.innerText = `${2 - (250 * fullCups / 1000)}L`
+ }
+}
diff --git a/drink-water/style.css b/drink-water/style.css
new file mode 100644
index 0000000..f4580ab
--- /dev/null
+++ b/drink-water/style.css
@@ -0,0 +1,104 @@
+@import url('https://fonts.googleapis.com/css?family=Montserrat:400,600&display=swap');
+
+:root {
+ --border-color: #144fc6;
+ --fill-color: #6ab3f8;
+}
+
+* {
+ box-sizing: border-box;
+}
+
+body {
+ background-color: #3494e4;
+ color: #fff;
+ font-family: 'Montserrat', sans-serif;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ margin-bottom: 40px;
+}
+
+h1 {
+ margin: 10px 0 0;
+}
+
+h3 {
+ font-weight: 400;
+ margin: 10px 0;
+}
+
+.cup {
+ background-color: #fff;
+ border: 4px solid var(--border-color);
+ color: var(--border-color);
+ border-radius: 0 0 40px 40px;
+ height: 330px;
+ width: 150px;
+ margin: 30px 0;
+ display: flex;
+ flex-direction: column;
+ overflow: hidden;
+}
+
+.cup.cup-small {
+ height: 95px;
+ width: 50px;
+ border-radius: 0 0 15px 15px;
+ background-color: rgba(255, 255, 255, 0.9);
+ cursor: pointer;
+ font-size: 14px;
+ align-items: center;
+ justify-content: center;
+ text-align: center;
+ margin: 5px;
+ transition: 0.3s ease;
+}
+
+.cup.cup-small.full {
+ background-color: var(--fill-color);
+ color: #fff;
+}
+
+.cups {
+ display: flex;
+ flex-wrap: wrap;
+ align-items: center;
+ justify-content: center;
+ width: 280px;
+}
+
+.remained {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ text-align: center;
+ flex: 1;
+ transition: 0.3s ease;
+}
+
+.remained span {
+ font-size: 20px;
+ font-weight: bold;
+}
+
+.remained small {
+ font-size: 12px;
+}
+
+.percentage {
+ background-color: var(--fill-color);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-weight: bold;
+ font-size: 30px;
+ height: 0;
+ transition: 0.3s ease;
+}
+
+.text {
+ text-align: center;
+ margin: 0 0 5px;
+}
diff --git a/event-keycodes/index.html b/event-keycodes/index.html
new file mode 100644
index 0000000..a6b9ad0
--- /dev/null
+++ b/event-keycodes/index.html
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+ Event KeyCodes
+
+
+
+
+ Press any key to get the keyCode
+
+
+
+
+
diff --git a/event-keycodes/script.js b/event-keycodes/script.js
new file mode 100644
index 0000000..68dab4d
--- /dev/null
+++ b/event-keycodes/script.js
@@ -0,0 +1,20 @@
+const insert = document.getElementById('insert')
+
+window.addEventListener('keydown', (event) => {
+ insert.innerHTML = `
+
+ ${event.key === ' ' ? 'Space' : event.key}
+ event.key
+
+
+
+ ${event.keyCode}
+ event.keyCode
+
+
+
+ ${event.code}
+ event.code
+
+ `
+})
\ No newline at end of file
diff --git a/event-keycodes/style.css b/event-keycodes/style.css
new file mode 100644
index 0000000..e597872
--- /dev/null
+++ b/event-keycodes/style.css
@@ -0,0 +1,48 @@
+@import url('https://fonts.googleapis.com/css?family=Muli&display=swap');
+
+* {
+ box-sizing: border-box;
+}
+
+body {
+ background-color: #e1e1e1;
+ font-family: 'Muli', sans-serif;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ text-align: center;
+ height: 100vh;
+ overflow: hidden;
+ margin: 0;
+}
+
+.key {
+ border: 1px solid #999;
+ background-color: #eee;
+ box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.1);
+ display: inline-flex;
+ align-items: center;
+ font-size: 20px;
+ font-weight: bold;
+ padding: 20px;
+ flex-direction: column;
+ margin: 10px;
+ min-width: 150px;
+ position: relative;
+}
+
+.key small {
+ position: absolute;
+ top: -24px;
+ left: 0;
+ text-align: center;
+ width: 100%;
+ color: #555;
+ font-size: 14px;
+}
+
+@media(max-width:768px){
+ .key{
+ margin: 10px 0px;
+ }
+}
diff --git a/expanding-cards/index.html b/expanding-cards/index.html
new file mode 100644
index 0000000..164951d
--- /dev/null
+++ b/expanding-cards/index.html
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+ Expanding Cards
+
+
+
+
+
Explore The World
+
+
+
Wild Forest
+
+
+
Sunny Beach
+
+
+
City on Winter
+
+
+
Mountains - Clouds
+
+
+
+
+
+
+
diff --git a/expanding-cards/script.js b/expanding-cards/script.js
new file mode 100644
index 0000000..68d6b5c
--- /dev/null
+++ b/expanding-cards/script.js
@@ -0,0 +1,14 @@
+const panels = document.querySelectorAll('.panel')
+
+panels.forEach(panel => {
+ panel.addEventListener('click', () => {
+ removeActiveClasses()
+ panel.classList.add('active')
+ })
+})
+
+function removeActiveClasses() {
+ panels.forEach(panel => {
+ panel.classList.remove('active')
+ })
+}
\ No newline at end of file
diff --git a/expanding-cards/style.css b/expanding-cards/style.css
new file mode 100644
index 0000000..a6fe024
--- /dev/null
+++ b/expanding-cards/style.css
@@ -0,0 +1,63 @@
+@import url('https://fonts.googleapis.com/css?family=Muli&display=swap');
+
+* {
+ box-sizing: border-box;
+}
+
+body {
+ font-family: 'Muli', sans-serif;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 100vh;
+ overflow: hidden;
+ margin: 0;
+}
+
+.container {
+ display: flex;
+ width: 90vw;
+}
+
+.panel {
+ background-size: cover;
+ background-position: center;
+ background-repeat: no-repeat;
+ height: 80vh;
+ border-radius: 50px;
+ color: #fff;
+ cursor: pointer;
+ flex: 0.5;
+ margin: 10px;
+ position: relative;
+ -webkit-transition: all 700ms ease-in;
+}
+
+.panel h3 {
+ font-size: 24px;
+ position: absolute;
+ bottom: 20px;
+ left: 20px;
+ margin: 0;
+ opacity: 0;
+}
+
+.panel.active {
+ flex: 5;
+}
+
+.panel.active h3 {
+ opacity: 1;
+ transition: opacity 0.3s ease-in 0.4s;
+}
+
+@media (max-width: 480px) {
+ .container {
+ width: 100vw;
+ }
+
+ .panel:nth-of-type(4),
+ .panel:nth-of-type(5) {
+ display: none;
+ }
+}
diff --git a/faq-collapse/index.html b/faq-collapse/index.html
new file mode 100644
index 0000000..a690091
--- /dev/null
+++ b/faq-collapse/index.html
@@ -0,0 +1,82 @@
+
+
+
+
+
+
+
+ FAQ
+
+
+ Frequently Asked Questions
+
+
+
+ Why shouldn't we trust atoms?
+
+
+
+ They make up everything
+
+
+
+
+
+
+
+
+
+
+ What do you call someone with no body and no nose?
+
+
+ Nobody knows.
+
+
+
+
+
+
+
+
+
+ What's the object-oriented way to become wealthy?
+
+
+ Inheritance.
+
+
+
+
+
+
+
+
+
+ How many tickles does it take to tickle an octopus?
+
+
+ Ten-tickles!
+
+
+
+
+
+
+
+
+
+ What is: 1 + 1?
+
+
+ Depends on who are you asking.
+
+
+
+
+
+
+
+
+
+
diff --git a/faq-collapse/script.js b/faq-collapse/script.js
new file mode 100644
index 0000000..f1d63bb
--- /dev/null
+++ b/faq-collapse/script.js
@@ -0,0 +1,7 @@
+const toggles = document.querySelectorAll('.faq-toggle')
+
+toggles.forEach(toggle => {
+ toggle.addEventListener('click', () => {
+ toggle.parentNode.classList.toggle('active')
+ })
+})
\ No newline at end of file
diff --git a/faq-collapse/style.css b/faq-collapse/style.css
new file mode 100644
index 0000000..cc2db22
--- /dev/null
+++ b/faq-collapse/style.css
@@ -0,0 +1,107 @@
+@import url('https://fonts.googleapis.com/css?family=Muli&display=swap');
+
+* {
+ box-sizing: border-box;
+}
+
+body {
+ font-family: 'Muli', sans-serif;
+ background-color: #f0f0f0;
+}
+
+h1 {
+ margin: 50px 0 30px;
+ text-align: center;
+}
+
+.faq-container {
+ max-width: 600px;
+ margin: 0 auto;
+}
+
+.faq {
+ background-color: transparent;
+ border: 1px solid #9fa4a8;
+ border-radius: 10px;
+ margin: 20px 0;
+ padding: 30px;
+ position: relative;
+ overflow: hidden;
+ transition: 0.3s ease;
+}
+
+.faq.active {
+ background-color: #fff;
+ box-shadow: 0 3px 6px rgba(0, 0, 0, 0.1), 0 3px 6px rgba(0, 0, 0, 0.1);
+}
+
+.faq.active::before,
+.faq.active::after {
+ content: '\f075';
+ font-family: 'Font Awesome 5 Free';
+ color: #2ecc71;
+ font-size: 7rem;
+ position: absolute;
+ opacity: 0.2;
+ top: 20px;
+ left: 20px;
+ z-index: 0;
+}
+
+.faq.active::before {
+ color: #3498db;
+ top: -10px;
+ left: -30px;
+ transform: rotateY(180deg);
+}
+
+.faq-title {
+ margin: 0 35px 0 0;
+}
+
+.faq-text {
+ display: none;
+ margin: 30px 0 0;
+}
+
+.faq.active .faq-text {
+ display: block;
+}
+
+.faq-toggle {
+ background-color: transparent;
+ border: 0;
+ border-radius: 50%;
+ cursor: pointer;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 16px;
+ padding: 0;
+ position: absolute;
+ top: 30px;
+ right: 30px;
+ height: 30px;
+ width: 30px;
+}
+
+.faq-toggle:focus {
+ outline: 0;
+}
+
+.faq-toggle .fa-times {
+ display: none;
+}
+
+.faq.active .faq-toggle .fa-times {
+ color: #fff;
+ display: block;
+}
+
+.faq.active .faq-toggle .fa-chevron-down {
+ display: none;
+}
+
+.faq.active .faq-toggle {
+ background-color: #9fa4a8;
+}
diff --git a/feedback-ui-design/index.html b/feedback-ui-design/index.html
new file mode 100644
index 0000000..1a64c49
--- /dev/null
+++ b/feedback-ui-design/index.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ Let Us Know Your Feedback
+
+
+
+
How satisfied are you with our customer support performance?
+
+
+
+
Unhappy
+
+
+
+
+
Neutral
+
+
+
+
+
Satisfied
+
+
+
Send Review
+
+
+
+
diff --git a/feedback-ui-design/script.js b/feedback-ui-design/script.js
new file mode 100644
index 0000000..b3eb3fd
--- /dev/null
+++ b/feedback-ui-design/script.js
@@ -0,0 +1,35 @@
+const ratings = document.querySelectorAll('.rating')
+const ratingsContainer = document.querySelector('.ratings-container')
+const sendBtn = document.querySelector('#send')
+const panel = document.querySelector('#panel')
+let selectedRating = 'Satisfied'
+
+ratingsContainer.addEventListener('click', (e) => {
+ if(e.target.parentNode.classList.contains('rating')) {
+ removeActive()
+ e.target.parentNode.classList.add('active')
+ selectedRating = e.target.nextElementSibling.innerHTML
+ }
+ if(e.target.classList.contains('rating')) {
+ removeActive()
+ e.target.classList.add('active')
+ selectedRating = e.target.nextElementSibling.innerHTML
+ }
+
+})
+
+sendBtn.addEventListener('click', (e) => {
+ panel.innerHTML = `
+
+ Thank You!
+
+ Feedback: ${selectedRating}
+ We'll use your feedback to improve our customer support
+ `
+})
+
+function removeActive() {
+ for(let i = 0; i < ratings.length; i++) {
+ ratings[i].classList.remove('active')
+ }
+}
\ No newline at end of file
diff --git a/feedback-ui-design/style.css b/feedback-ui-design/style.css
new file mode 100644
index 0000000..5b4ad46
--- /dev/null
+++ b/feedback-ui-design/style.css
@@ -0,0 +1,90 @@
+@import url('https://fonts.googleapis.com/css?family=Montserrat&display=swap');
+
+* {
+ box-sizing: border-box;
+}
+
+body {
+ background-color: #fef9f2;
+ font-family: 'Montserrat', sans-serif;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 100vh;
+ overflow: hidden;
+ margin: 0;
+}
+
+.panel-container {
+ background-color: #fff;
+ box-shadow: 0 0 10px rgba(0, 0, 0, 0.3);
+ border-radius: 4px;
+ font-size: 90%;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ text-align: center;
+ padding: 30px;
+ max-width: 400px;
+}
+
+.panel-container strong {
+ line-height: 20px;
+}
+
+.ratings-container {
+ display: flex;
+ margin: 20px 0;
+}
+
+.rating {
+ flex: 1;
+ cursor: pointer;
+ padding: 20px;
+ margin: 10px 5px;
+}
+
+.rating:hover,
+.rating.active {
+ border-radius: 4px;
+ box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
+}
+
+.rating img {
+ width: 40px;
+}
+
+.rating small {
+ color: #555;
+ display: inline-block;
+ margin: 10px 0 0;
+}
+
+.rating:hover small,
+.rating.active small {
+ color: #111;
+}
+
+.btn {
+ background-color: #302d2b;
+ color: #fff;
+ border: 0;
+ border-radius: 4px;
+ padding: 12px 30px;
+ cursor: pointer;
+}
+
+.btn:focus {
+ outline: 0;
+}
+
+.btn:active {
+ transform: scale(0.98);
+}
+
+.fa-heart {
+ color: red;
+ font-size: 30px;
+ margin-bottom: 10px;
+}
diff --git a/form-input-wave/index.html b/form-input-wave/index.html
new file mode 100644
index 0000000..77ddc08
--- /dev/null
+++ b/form-input-wave/index.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+ Form Input Wave
+
+
+
+
+
+
diff --git a/form-input-wave/script.js b/form-input-wave/script.js
new file mode 100644
index 0000000..b740afd
--- /dev/null
+++ b/form-input-wave/script.js
@@ -0,0 +1,8 @@
+const labels = document.querySelectorAll('.form-control label')
+
+labels.forEach(label => {
+ label.innerHTML = label.innerText
+ .split('')
+ .map((letter, idx) => `${letter} `)
+ .join('')
+})
\ No newline at end of file
diff --git a/form-input-wave/style.css b/form-input-wave/style.css
new file mode 100644
index 0000000..2269f7b
--- /dev/null
+++ b/form-input-wave/style.css
@@ -0,0 +1,101 @@
+@import url('https://fonts.googleapis.com/css?family=Muli&display=swap');
+
+* {
+ box-sizing: border-box;
+}
+
+body {
+ background-color: steelblue;
+ color: #fff;
+ font-family: 'Muli', sans-serif;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ height: 100vh;
+ overflow: hidden;
+ margin: 0;
+}
+
+.container {
+ background-color: rgba(0, 0, 0, 0.4);
+ padding: 20px 40px;
+ border-radius: 5px;
+}
+
+.container h1 {
+ text-align: center;
+ margin-bottom: 30px;
+}
+
+.container a {
+ text-decoration: none;
+ color: lightblue;
+}
+
+.btn {
+ cursor: pointer;
+ display: inline-block;
+ width: 100%;
+ background: lightblue;
+ padding: 15px;
+ font-family: inherit;
+ font-size: 16px;
+ border: 0;
+ border-radius: 5px;
+}
+
+.btn:focus {
+ outline: 0;
+}
+
+.btn:active {
+ transform: scale(0.98);
+}
+
+.text {
+ margin-top: 30px;
+}
+
+.form-control {
+ position: relative;
+ margin: 20px 0 40px;
+ width: 300px;
+}
+
+.form-control input {
+ background-color: transparent;
+ border: 0;
+ border-bottom: 2px #fff solid;
+ display: block;
+ width: 100%;
+ padding: 15px 0;
+ font-size: 18px;
+ color: #fff;
+}
+
+.form-control input:focus,
+.form-control input:valid {
+ outline: 0;
+ border-bottom-color: lightblue;
+}
+
+.form-control label {
+ position: absolute;
+ top: 15px;
+ left: 0;
+ pointer-events: none;
+}
+
+.form-control label span {
+ display: inline-block;
+ font-size: 18px;
+ min-width: 5px;
+ transition: 0.3s cubic-bezier(0.68, -0.55, 0.265, 1.55);
+}
+
+.form-control input:focus + label span,
+.form-control input:valid + label span {
+ color: lightblue;
+ transform: translateY(-30px);
+}
diff --git a/github-profiles/index.html b/github-profiles/index.html
new file mode 100644
index 0000000..5157144
--- /dev/null
+++ b/github-profiles/index.html
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+ Github Profiles
+
+
+
+
+
+
+
+
+
+
diff --git a/github-profiles/script.js b/github-profiles/script.js
new file mode 100644
index 0000000..6ac589d
--- /dev/null
+++ b/github-profiles/script.js
@@ -0,0 +1,92 @@
+const APIURL = 'https://api.github.com/users/'
+
+const main = document.getElementById('main')
+const form = document.getElementById('form')
+const search = document.getElementById('search')
+
+async function getUser(username) {
+ try {
+ const { data } = await axios(APIURL + username)
+
+ createUserCard(data)
+ getRepos(username)
+ } catch(err) {
+ if(err.response.status == 404) {
+ createErrorCard('No profile with this username')
+ }
+ }
+}
+
+async function getRepos(username) {
+ try {
+ const { data } = await axios(APIURL + username + '/repos?sort=created')
+
+ addReposToCard(data)
+ } catch(err) {
+ createErrorCard('Problem fetching repos')
+ }
+}
+
+function createUserCard(user) {
+ const userID = user.name || user.login
+ const userBio = user.bio ? `${user.bio}
` : ''
+ const cardHTML = `
+
+
+
+
+
+
${userID}
+ ${userBio}
+
+ ${user.followers} Followers
+ ${user.following} Following
+ ${user.public_repos} Repos
+
+
+
+
+
+ `
+ main.innerHTML = cardHTML
+
+}
+
+function createErrorCard(msg) {
+ const cardHTML = `
+
+
${msg}
+
+ `
+
+ main.innerHTML = cardHTML
+}
+
+function addReposToCard(repos) {
+ const reposEl = document.getElementById('repos')
+
+ repos
+ .slice(0, 5)
+ .forEach(repo => {
+ const repoEl = document.createElement('a')
+ repoEl.classList.add('repo')
+ repoEl.href = repo.html_url
+ repoEl.target = '_blank'
+ repoEl.innerText = repo.name
+
+ reposEl.appendChild(repoEl)
+ })
+}
+
+form.addEventListener('submit', (e) => {
+ e.preventDefault()
+
+ const user = search.value
+
+ if(user) {
+ getUser(user)
+
+ search.value = ''
+ }
+})
+
diff --git a/github-profiles/style.css b/github-profiles/style.css
new file mode 100644
index 0000000..b648f88
--- /dev/null
+++ b/github-profiles/style.css
@@ -0,0 +1,113 @@
+@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@200;400&display=swap');
+
+* {
+ box-sizing: border-box;
+}
+
+body {
+ background-color: #2a2a72;
+ color: #fff;
+ font-family: 'Poppins', sans-serif;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ height: 100vh;
+ overflow: hidden;
+ margin: 0;
+}
+
+.user-form {
+ width: 100%;
+ max-width: 700px;
+}
+
+.user-form input {
+ width: 100%;
+ display: block;
+ background-color: #4c2885;
+ border: none;
+ border-radius: 10px;
+ color: #fff;
+ padding: 1rem;
+ margin-bottom: 2rem;
+ font-family: inherit;
+ font-size: 1rem;
+ box-shadow: 0 5px 10px rgba(154, 160, 185, 0.05),
+ 0 15px 40px rgba(0, 0, 0, 0.1);
+}
+
+.user-form input::placeholder {
+ color: #bbb;
+}
+
+.user-form input:focus {
+ outline: none;
+}
+
+.card {
+ max-width: 800px;
+ background-color: #4c2885;
+ border-radius: 20px;
+ box-shadow: 0 5px 10px rgba(154, 160, 185, 0.05),
+ 0 15px 40px rgba(0, 0, 0, 0.1);
+ display: flex;
+ padding: 3rem;
+ margin: 0 1.5rem;
+}
+
+.avatar {
+ border-radius: 50%;
+ border: 10px solid #2a2a72;
+ height: 150px;
+ width: 150px;
+}
+
+.user-info {
+ color: #eee;
+ margin-left: 2rem;
+}
+
+.user-info h2 {
+ margin-top: 0;
+}
+
+.user-info ul {
+ list-style-type: none;
+ display: flex;
+ justify-content: space-between;
+ padding: 0;
+ max-width: 400px;
+}
+
+.user-info ul li {
+ display: flex;
+ align-items: center;
+}
+
+.user-info ul li strong {
+ font-size: 0.9rem;
+ margin-left: 0.5rem;
+}
+
+.repo {
+ text-decoration: none;
+ color: #fff;
+ background-color: #212a72;
+ font-size: 0.7rem;
+ padding: 0.25rem 0.5rem;
+ margin-right: 0.5rem;
+ margin-bottom: 0.5rem;
+ display: inline-block;
+}
+
+@media (max-width: 500px) {
+ .card {
+ flex-direction: column;
+ align-items: center;
+ }
+
+ .user-form {
+ max-width: 400px;
+ }
+}
diff --git a/good-cheap-fast/index.html b/good-cheap-fast/index.html
new file mode 100644
index 0000000..2be481c
--- /dev/null
+++ b/good-cheap-fast/index.html
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+ Good, Cheap, Fast
+
+
+ How do you want your project to be?
+
+
+
+
+
+
+
+
diff --git a/good-cheap-fast/script.js b/good-cheap-fast/script.js
new file mode 100644
index 0000000..622600e
--- /dev/null
+++ b/good-cheap-fast/script.js
@@ -0,0 +1,22 @@
+const toggles = document.querySelectorAll('.toggle')
+const good = document.querySelector('#good')
+const cheap = document.querySelector('#cheap')
+const fast = document.querySelector('#fast')
+
+toggles.forEach(toggle => toggle.addEventListener('change', (e) => doTheTrick(e.target)))
+
+function doTheTrick(theClickedOne) {
+ if(good.checked && cheap.checked && fast.checked) {
+ if(good === theClickedOne) {
+ fast.checked = false
+ }
+
+ if(cheap === theClickedOne) {
+ good.checked = false
+ }
+
+ if(fast === theClickedOne) {
+ cheap.checked = false
+ }
+ }
+}
\ No newline at end of file
diff --git a/good-cheap-fast/style.css b/good-cheap-fast/style.css
new file mode 100644
index 0000000..32ced37
--- /dev/null
+++ b/good-cheap-fast/style.css
@@ -0,0 +1,83 @@
+@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap');
+
+* {
+ box-sizing: border-box;
+}
+
+body {
+ font-family: 'Roboto', sans-serif;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ height: 100vh;
+ overflow: hidden;
+ margin: 0;
+}
+
+.toggle-container {
+ display: flex;
+ align-items: center;
+ margin: 10px 0;
+ width: 200px;
+}
+
+.toggle {
+ visibility: hidden;
+}
+
+.label {
+ position: relative;
+ background-color: #d0d0d0;
+ border-radius: 50px;
+ cursor: pointer;
+ display: inline-block;
+ margin: 0 15px 0;
+ width: 80px;
+ height: 40px;
+}
+
+.toggle:checked + .label {
+ background-color: #8e44ad;
+}
+
+.ball {
+ background: #fff;
+ height: 34px;
+ width: 34px;
+ border-radius: 50%;
+ position: absolute;
+ top: 3px;
+ left: 3px;
+ align-items: center;
+ justify-content: center;
+ animation: slideOff 0.3s linear forwards;
+}
+
+.toggle:checked + .label .ball {
+ animation: slideOn 0.3s linear forwards;
+}
+
+@keyframes slideOn {
+ 0% {
+ transform: translateX(0) scale(1);
+ }
+ 50% {
+ transform: translateX(20px) scale(1.2);
+ }
+ 100% {
+ transform: translateX(40px) scale(1);
+ }
+}
+
+@keyframes slideOff {
+ 0% {
+ transform: translateX(40px) scale(1);
+ }
+ 50% {
+ transform: translateX(20px) scale(1.2);
+ }
+ 100% {
+ transform: translateX(0) scale(1);
+ }
+}
diff --git a/hidden-search/index.html b/hidden-search/index.html
new file mode 100644
index 0000000..54f45b9
--- /dev/null
+++ b/hidden-search/index.html
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+ Hidden Search
+
+
+
+
+
+
+
+
+
+
+
diff --git a/hidden-search/script.js b/hidden-search/script.js
new file mode 100644
index 0000000..e8eb0d0
--- /dev/null
+++ b/hidden-search/script.js
@@ -0,0 +1,8 @@
+const search = document.querySelector('.search')
+const btn = document.querySelector('.btn')
+const input = document.querySelector('.input')
+
+btn.addEventListener('click', () => {
+ search.classList.toggle('active')
+ input.focus()
+})
\ No newline at end of file
diff --git a/hidden-search/style.css b/hidden-search/style.css
new file mode 100644
index 0000000..4dadd30
--- /dev/null
+++ b/hidden-search/style.css
@@ -0,0 +1,57 @@
+@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap');
+
+* {
+ box-sizing: border-box;
+}
+
+body {
+ background-image: linear-gradient(90deg, #7d5fff, #7158e2);
+ font-family: 'Roboto', sans-serif;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 100vh;
+ overflow: hidden;
+ margin: 0;
+}
+
+.search {
+ position: relative;
+ height: 50px;
+}
+
+.search .input {
+ background-color: #fff;
+ border: 0;
+ font-size: 18px;
+ padding: 15px;
+ height: 50px;
+ width: 50px;
+ transition: width 0.3s ease;
+}
+
+.btn {
+ background-color: #fff;
+ border: 0;
+ cursor: pointer;
+ font-size: 24px;
+ position: absolute;
+ top: 0;
+ left: 0;
+ height: 50px;
+ width: 50px;
+ transition: transform 0.3s ease;
+}
+
+.btn:focus,
+.input:focus {
+ outline: none;
+}
+
+.search.active .input {
+ width: 200px;
+}
+
+.search.active .btn {
+ transform: translateX(198px);
+}
diff --git a/hoverboard/index.html b/hoverboard/index.html
new file mode 100644
index 0000000..efe9a9e
--- /dev/null
+++ b/hoverboard/index.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+ Hoverboard
+
+
+
+
+
+
diff --git a/hoverboard/script.js b/hoverboard/script.js
new file mode 100644
index 0000000..d888c8b
--- /dev/null
+++ b/hoverboard/script.js
@@ -0,0 +1,29 @@
+const container = document.getElementById('container')
+const colors = ['#e74c3c', '#8e44ad', '#3498db', '#e67e22', '#2ecc71']
+const SQUARES = 500
+
+for(let i = 0; i < SQUARES; i++) {
+ const square = document.createElement('div')
+ square.classList.add('square')
+
+ square.addEventListener('mouseover', () => setColor(square))
+
+ square.addEventListener('mouseout', () => removeColor(square))
+
+ container.appendChild(square)
+}
+
+function setColor(element) {
+ const color = getRandomColor()
+ element.style.background = color
+ element.style.boxShadow = `0 0 2px ${color}, 0 0 10px ${color}`
+}
+
+function removeColor(element) {
+ element.style.background = '#1d1d1d'
+ element.style.boxShadow = '0 0 2px #000'
+}
+
+function getRandomColor() {
+ return colors[Math.floor(Math.random() * colors.length)]
+}
\ No newline at end of file
diff --git a/hoverboard/style.css b/hoverboard/style.css
new file mode 100644
index 0000000..1283d2e
--- /dev/null
+++ b/hoverboard/style.css
@@ -0,0 +1,34 @@
+* {
+ box-sizing: border-box;
+}
+
+body {
+ background-color: #111;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 100vh;
+ overflow: hidden;
+ margin: 0;
+}
+
+.container {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ flex-wrap: wrap;
+ max-width: 400px;
+}
+
+.square {
+ background-color: #1d1d1d;
+ box-shadow: 0 0 2px #000;
+ height: 16px;
+ width: 16px;
+ margin: 2px;
+ transition: 2s ease;
+}
+
+.square:hover {
+ transition-duration: 0s;
+}
diff --git a/image-carousel/index.html b/image-carousel/index.html
new file mode 100644
index 0000000..a3386f9
--- /dev/null
+++ b/image-carousel/index.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+ Image Carousel
+
+
+
+
+
+
+
diff --git a/image-carousel/script.js b/image-carousel/script.js
new file mode 100644
index 0000000..2d0532c
--- /dev/null
+++ b/image-carousel/script.js
@@ -0,0 +1,41 @@
+const imgs = document.getElementById('imgs')
+const leftBtn = document.getElementById('left')
+const rightBtn = document.getElementById('right')
+
+const img = document.querySelectorAll('#imgs img')
+
+let idx = 0
+
+let interval = setInterval(run, 2000)
+
+function run() {
+ idx++
+ changeImage()
+}
+
+function changeImage() {
+ if(idx > img.length - 1) {
+ idx = 0
+ } else if(idx < 0) {
+ idx = img.length - 1
+ }
+
+ imgs.style.transform = `translateX(${-idx * 500}px)`
+}
+
+function resetInterval() {
+ clearInterval(interval)
+ interval = setInterval(run, 2000)
+}
+
+rightBtn.addEventListener('click', () => {
+ idx++
+ changeImage()
+ resetInterval()
+})
+
+leftBtn.addEventListener('click', () => {
+ idx--
+ changeImage()
+ resetInterval()
+})
diff --git a/image-carousel/style.css b/image-carousel/style.css
new file mode 100644
index 0000000..338592c
--- /dev/null
+++ b/image-carousel/style.css
@@ -0,0 +1,55 @@
+@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap');
+
+* {
+ box-sizing: border-box;
+}
+
+body {
+ font-family: 'Roboto', sans-serif;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 100vh;
+ margin: 0;
+}
+
+img {
+ width: 500px;
+ height: 500px;
+ object-fit: cover;
+}
+
+.carousel {
+ box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.3);
+ height: 530px;
+ width: 500px;
+ overflow: hidden;
+}
+
+.image-container {
+ display: flex;
+ transform: translateX(0);
+ transition: transform 0.5s ease-in-out;
+}
+
+.buttons-container {
+ display: flex;
+ justify-content: space-between;
+}
+
+.btn {
+ background-color: rebeccapurple;
+ color: #fff;
+ border: none;
+ padding: 0.5rem;
+ cursor: pointer;
+ width: 49.5%;
+}
+
+.btn:hover {
+ opacity: 0.9;
+}
+
+.btn:focus {
+ outline: none;
+}
diff --git a/incrementing-counter/index.html b/incrementing-counter/index.html
new file mode 100644
index 0000000..8bab33f
--- /dev/null
+++ b/incrementing-counter/index.html
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+ Increment Counter
+
+
+
+
+
+
Twitter Followers
+
+
+
+
+
+
YouTube Subscribers
+
+
+
+
+
+
diff --git a/incrementing-counter/script.js b/incrementing-counter/script.js
new file mode 100644
index 0000000..1bb0837
--- /dev/null
+++ b/incrementing-counter/script.js
@@ -0,0 +1,21 @@
+const counters = document.querySelectorAll('.counter')
+
+counters.forEach(counter => {
+ counter.innerText = '0'
+
+ const updateCounter = () => {
+ const target = +counter.getAttribute('data-target')
+ const c = +counter.innerText
+
+ const increment = target / 200
+
+ if(c < target) {
+ counter.innerText = `${Math.ceil(c + increment)}`
+ setTimeout(updateCounter, 1)
+ } else {
+ counter.innerText = target
+ }
+ }
+
+ updateCounter()
+})
\ No newline at end of file
diff --git a/incrementing-counter/style.css b/incrementing-counter/style.css
new file mode 100644
index 0000000..082d1fd
--- /dev/null
+++ b/incrementing-counter/style.css
@@ -0,0 +1,36 @@
+@import url('https://fonts.googleapis.com/css?family=Roboto+Mono&display=swap');
+
+* {
+ box-sizing: border-box;
+}
+
+body {
+ background-color: #8e44ad;
+ color: #fff;
+ font-family: 'Roboto Mono', sans-serif;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 100vh;
+ overflow: hidden;
+ margin: 0;
+}
+
+.counter-container {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ text-align: center;
+ margin: 30px 50px;
+}
+
+.counter {
+ font-size: 60px;
+ margin-top: 10px;
+}
+
+@media (max-width: 580px) {
+ body {
+ flex-direction: column;
+ }
+}
diff --git a/insect-catch-game/index.html b/insect-catch-game/index.html
new file mode 100644
index 0000000..4999b14
--- /dev/null
+++ b/insect-catch-game/index.html
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+ Catch The Insect
+
+
+
+
Catch The Insect
+ Play Game
+
+
+
+
What is your "favorite" insect?
+
+
+
+ Fly
+
+
+
+
+
+ Mosquito
+
+
+
+
+
+ Spider
+
+
+
+
+
+ Roach
+
+
+
+
+
+
+
+
Time: 00:00
+ Score: 0
+
+ Are you annnoyed yet?
+ You are playing an impossible game!!
+
+
+
+
+
+
diff --git a/insect-catch-game/script.js b/insect-catch-game/script.js
new file mode 100644
index 0000000..f9963e7
--- /dev/null
+++ b/insect-catch-game/script.js
@@ -0,0 +1,78 @@
+const screens = document.querySelectorAll('.screen');
+const choose_insect_btns = document.querySelectorAll('.choose-insect-btn');
+const start_btn = document.getElementById('start-btn')
+const game_container = document.getElementById('game-container')
+const timeEl = document.getElementById('time')
+const scoreEl = document.getElementById('score')
+const message = document.getElementById('message')
+let seconds = 0
+let score = 0
+let selected_insect = {}
+
+start_btn.addEventListener('click', () => screens[0].classList.add('up'))
+
+choose_insect_btns.forEach(btn => {
+ btn.addEventListener('click', () => {
+ const img = btn.querySelector('img')
+ const src = img.getAttribute('src')
+ const alt = img.getAttribute('alt')
+ selected_insect = { src, alt }
+ screens[1].classList.add('up')
+ setTimeout(createInsect, 1000)
+ startGame()
+ })
+})
+
+function startGame() {
+ setInterval(increaseTime, 1000)
+}
+
+function increaseTime() {
+ let m = Math.floor(seconds / 60)
+ let s = seconds % 60
+ m = m < 10 ? `0${m}` : m
+ s = s < 10 ? `0${s}` : s
+ timeEl.innerHTML = `Time: ${m}:${s}`
+ seconds++
+}
+
+function createInsect() {
+ const insect = document.createElement('div')
+ insect.classList.add('insect')
+ const { x, y } = getRandomLocation()
+ insect.style.top = `${y}px`
+ insect.style.left = `${x}px`
+ insect.innerHTML = ` `
+
+ insect.addEventListener('click', catchInsect)
+
+ game_container.appendChild(insect)
+}
+
+function getRandomLocation() {
+ const width = window.innerWidth
+ const height = window.innerHeight
+ const x = Math.random() * (width - 200) + 100
+ const y = Math.random() * (height - 200) + 100
+ return { x, y }
+}
+
+function catchInsect() {
+ increaseScore()
+ this.classList.add('caught')
+ setTimeout(() => this.remove(), 2000)
+ addInsects()
+}
+
+function addInsects() {
+ setTimeout(createInsect, 1000)
+ setTimeout(createInsect, 1500)
+}
+
+function increaseScore() {
+ score++
+ if(score > 19) {
+ message.classList.add('visible')
+ }
+ scoreEl.innerHTML = `Score: ${score}`
+}
\ No newline at end of file
diff --git a/insect-catch-game/style.css b/insect-catch-game/style.css
new file mode 100644
index 0000000..9808e9c
--- /dev/null
+++ b/insect-catch-game/style.css
@@ -0,0 +1,150 @@
+@import url('https://fonts.googleapis.com/css?family=Press+Start+2P&display=swap');
+
+* {
+ box-sizing: border-box;
+}
+
+body {
+ background-color: #516dff;
+ color: #fff;
+ font-family: 'Press Start 2P', sans-serif;
+ height: 100vh;
+ overflow: hidden;
+ margin: 0;
+ text-align: center;
+}
+
+a {
+ color: #fff;
+}
+
+h1 {
+ line-height: 1.4;
+}
+
+.btn {
+ border: 0;
+ background-color: #fff;
+ color: #516dff;
+ padding: 15px 20px;
+ font-family: inherit;
+ cursor: pointer;
+}
+
+.btn:hover {
+ opacity: 0.9;
+}
+
+.btn:focus {
+ outline: 0;
+}
+
+.screen {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ height: 100vh;
+ width: 100vw;
+ transition: margin 0.5s ease-out;
+}
+
+.screen.up {
+ margin-top: -100vh;
+}
+
+.insects-list {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: center;
+ list-style-type: none;
+ padding: 0;
+}
+
+.insects-list li {
+ margin: 10px;
+}
+
+.choose-insect-btn {
+ background-color: transparent;
+ border: 2px solid #fff;
+ color: #fff;
+ cursor: pointer;
+ font-family: inherit;
+ width: 150px;
+ height: 150px;
+}
+
+.choose-insect-btn:hover {
+ background-color: #fff;
+ color: #516dff;
+}
+
+.choose-insect-btn:active {
+ background-color: rgba(255, 255, 255, 0.7);
+}
+
+.choose-insect-btn img {
+ width: 100px;
+ height: 100px;
+ object-fit: contain;
+}
+
+.game-container {
+ position: relative;
+}
+
+.time,
+.score {
+ position: absolute;
+ top: 20px;
+}
+
+.time {
+ left: 20px;
+}
+
+.score {
+ right: 20px;
+}
+
+.message {
+ line-height: 1.7;
+ background-color: rgba(0, 0, 0, 0.5);
+ width: 100%;
+ padding: 20px;
+ z-index: 100;
+ text-align: center;
+ opacity: 0;
+ position: absolute;
+ top: 0;
+ left: 50%;
+ transform: translate(-50%, -150%);
+ transition: transform 0.4s ease-in;
+}
+
+.message.visible {
+ transform: translate(-50%, 150%);
+ opacity: 1;
+}
+
+.insect {
+ cursor: pointer;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 100px;
+ height: 100px;
+ position: absolute;
+ transform: translate(-50%, -50%) scale(1);
+ transition: transform 0.3s ease-in-out;
+}
+
+.insect.caught {
+ transform: translate(-50%, -50%) scale(0);
+}
+
+.insect img {
+ width: 100px;
+ height: 100px;
+}
diff --git a/jsconfig.json b/jsconfig.json
deleted file mode 100644
index 5f06303..0000000
--- a/jsconfig.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "compilerOptions": {
- "baseUrl": ".",
- "paths": {
- "@/components/*": ["components/*"],
- "@/config/*": ["config/*"],
- "@/utils/*": ["utils/*"],
- "@/lib/*": ["lib/*"]
- }
- }
-}
diff --git a/kinetic-loader/index.html b/kinetic-loader/index.html
new file mode 100644
index 0000000..1ebaee5
--- /dev/null
+++ b/kinetic-loader/index.html
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+ Kinetic Loader
+
+
+
+
+
+
+
diff --git a/kinetic-loader/style.css b/kinetic-loader/style.css
new file mode 100644
index 0000000..f783c59
--- /dev/null
+++ b/kinetic-loader/style.css
@@ -0,0 +1,69 @@
+* {
+ box-sizing: border-box;
+}
+
+body {
+ background-color: #2c3e50;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 100vh;
+ overflow: hidden;
+ margin: 0;
+}
+
+.kinetic {
+ position: relative;
+ height: 80px;
+ width: 80px;
+}
+
+.kinetic::after,
+.kinetic::before {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 0;
+ height: 0;
+ border: 50px solid transparent;
+ border-bottom-color: #fff;
+ animation: rotateA 2s linear infinite 0.5s;
+}
+
+.kinetic::before {
+ transform: rotate(90deg);
+ animation: rotateB 2s linear infinite;
+}
+
+@keyframes rotateA {
+ 0%,
+ 25% {
+ transform: rotate(0deg);
+ }
+
+ 50%,
+ 75% {
+ transform: rotate(180deg);
+ }
+
+ 100% {
+ transform: rotate(360deg);
+ }
+}
+
+@keyframes rotateB {
+ 0%,
+ 25% {
+ transform: rotate(90deg);
+ }
+
+ 50%,
+ 75% {
+ transform: rotate(270deg);
+ }
+
+ 100% {
+ transform: rotate(450deg);
+ }
+}
diff --git a/lib/posts.js b/lib/posts.js
deleted file mode 100644
index 00b480c..0000000
--- a/lib/posts.js
+++ /dev/null
@@ -1,26 +0,0 @@
-import fs from 'fs'
-import path from 'path'
-import matter from 'gray-matter'
-import { sortByDate } from '@/utils/index'
-
-const files = fs.readdirSync(path.join('posts'))
-
-export function getPosts() {
- const posts = files.map((filename) => {
- const slug = filename.replace('.md', '')
-
- const markdownWithMeta = fs.readFileSync(
- path.join('posts', filename),
- 'utf-8'
- )
-
- const { data: frontmatter } = matter(markdownWithMeta)
-
- return {
- slug,
- frontmatter,
- }
- })
-
- return posts.sort(sortByDate)
-}
diff --git a/live-user-filter/index.html b/live-user-filter/index.html
new file mode 100644
index 0000000..3387842
--- /dev/null
+++ b/live-user-filter/index.html
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+ Live User Filter
+
+
+
+
+
+
diff --git a/live-user-filter/script.js b/live-user-filter/script.js
new file mode 100644
index 0000000..a4a6dab
--- /dev/null
+++ b/live-user-filter/script.js
@@ -0,0 +1,42 @@
+const result = document.getElementById('result')
+const filter = document.getElementById('filter')
+const listItems = []
+
+getData()
+
+filter.addEventListener('input', (e) => filterData(e.target.value))
+
+async function getData() {
+ const res = await fetch('https://randomuser.me/api?results=50')
+
+ const { results } = await res.json()
+
+ // Clear result
+ result.innerHTML = ''
+
+ results.forEach(user => {
+ const li = document.createElement('li')
+
+ listItems.push(li)
+
+ li.innerHTML = `
+
+
+
${user.name.first} ${user.name.last}
+
${user.location.city}, ${user.location.country}
+
+ `
+
+ result.appendChild(li)
+ })
+}
+
+function filterData(searchTerm) {
+ listItems.forEach(item => {
+ if(item.innerText.toLowerCase().includes(searchTerm.toLowerCase())) {
+ item.classList.remove('hide')
+ } else {
+ item.classList.add('hide')
+ }
+ })
+}
\ No newline at end of file
diff --git a/live-user-filter/style.css b/live-user-filter/style.css
new file mode 100644
index 0000000..bae1199
--- /dev/null
+++ b/live-user-filter/style.css
@@ -0,0 +1,94 @@
+@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap');
+
+* {
+ box-sizing: border-box;
+}
+
+body {
+ background-color: #f8f9fd;
+ font-family: 'Roboto', sans-serif;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 100vh;
+ overflow: hidden;
+ margin: 0;
+}
+
+.container {
+ border-radius: 5px;
+ box-shadow: 3px 3px 10px rgba(0, 0, 0, 0.2);
+ overflow: hidden;
+ width: 300px;
+}
+
+.title {
+ margin: 0;
+}
+
+.subtitle {
+ display: inline-block;
+ margin: 5px 0 20px;
+ opacity: 0.8;
+}
+
+.header {
+ background-color: #3e57db;
+ color: #fff;
+ padding: 30px 20px;
+}
+
+.header input {
+ background-color: rgba(0, 0, 0, 0.3);
+ border: 0;
+ border-radius: 50px;
+ color: #fff;
+ font-size: 14px;
+ padding: 10px 15px;
+ width: 100%;
+}
+
+.header input:focus {
+ outline: none;
+}
+
+.user-list {
+ background-color: #fff;
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+ max-height: 400px;
+ overflow-y: auto;
+}
+
+.user-list li {
+ display: flex;
+ padding: 20px;
+}
+
+.user-list img {
+ border-radius: 50%;
+ object-fit: cover;
+ height: 50px;
+ width: 50px;
+}
+
+.user-list .user-info {
+ margin-left: 10px;
+}
+
+.user-list .user-info h4 {
+ margin: 0 0 10px;
+}
+
+.user-list .user-info p {
+ font-size: 12px;
+}
+
+.user-list li:not(:last-of-type) {
+ border-bottom: 1px solid #eee;
+}
+
+.user-list li.hide {
+ display: none;
+}
diff --git a/mobile-tab-navigation/index.html b/mobile-tab-navigation/index.html
new file mode 100644
index 0000000..0c47430
--- /dev/null
+++ b/mobile-tab-navigation/index.html
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+ Mobile Tab Navigation
+
+
+
+
+
+
+
+
+
+
+
+ Home
+
+
+
+ Work
+
+
+
+ Blog
+
+
+
+ About Us
+
+
+
+
+
+
+
diff --git a/mobile-tab-navigation/script.js b/mobile-tab-navigation/script.js
new file mode 100644
index 0000000..8ae9fcf
--- /dev/null
+++ b/mobile-tab-navigation/script.js
@@ -0,0 +1,21 @@
+const contents = document.querySelectorAll('.content')
+const listItems = document.querySelectorAll('nav ul li')
+
+listItems.forEach((item, idx) => {
+ item.addEventListener('click', () => {
+ hideAllContents()
+ hideAllItems()
+
+ item.classList.add('active')
+ contents[idx].classList.add('show')
+ })
+})
+
+function hideAllContents() {
+ contents.forEach(content => content.classList.remove('show'))
+}
+
+
+function hideAllItems() {
+ listItems.forEach(item => item.classList.remove('active'))
+}
\ No newline at end of file
diff --git a/mobile-tab-navigation/style.css b/mobile-tab-navigation/style.css
new file mode 100644
index 0000000..56b48b9
--- /dev/null
+++ b/mobile-tab-navigation/style.css
@@ -0,0 +1,74 @@
+@import url('https://fonts.googleapis.com/css?family=Open+Sans&display=swap');
+
+* {
+ box-sizing: border-box;
+}
+
+body {
+ background-color: rgba(155, 89, 182, 0.7);
+ font-family: 'Open Sans', sans-serif;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 100vh;
+ margin: 0;
+}
+
+.phone {
+ position: relative;
+ overflow: hidden;
+ border: 3px solid #eee;
+ border-radius: 15px;
+ height: 600px;
+ width: 340px;
+}
+
+.phone .content {
+ opacity: 0;
+ object-fit: cover;
+ position: absolute;
+ top: 0;
+ left: 0;
+ height: calc(100% - 60px);
+ width: 100%;
+ transition: opacity 0.4s ease;
+}
+
+.phone .content.show {
+ opacity: 1;
+}
+
+nav {
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ margin-top: -5px;
+ width: 100%;
+}
+
+nav ul {
+ background-color: #fff;
+ display: flex;
+ list-style-type: none;
+ padding: 0;
+ margin: 0;
+ height: 60px;
+}
+
+nav li {
+ color: #777;
+ cursor: pointer;
+ flex: 1;
+ padding: 10px;
+ text-align: center;
+}
+
+nav ul li p {
+ font-size: 12px;
+ margin: 2px 0;
+}
+
+nav ul li:hover,
+nav ul li.active {
+ color: #8e44ad;
+}
diff --git a/movie-app/index.html b/movie-app/index.html
new file mode 100644
index 0000000..b607834
--- /dev/null
+++ b/movie-app/index.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+ Movie App
+
+
+
+
+
+
+
+
+
diff --git a/movie-app/script.js b/movie-app/script.js
new file mode 100644
index 0000000..469f141
--- /dev/null
+++ b/movie-app/script.js
@@ -0,0 +1,65 @@
+const API_URL = 'https://api.themoviedb.org/3/discover/movie?sort_by=popularity.desc&api_key=3fd2be6f0c70a2a598f084ddfb75487c&page=1'
+const IMG_PATH = 'https://image.tmdb.org/t/p/w1280'
+const SEARCH_API = 'https://api.themoviedb.org/3/search/movie?api_key=3fd2be6f0c70a2a598f084ddfb75487c&query="'
+
+const main = document.getElementById('main')
+const form = document.getElementById('form')
+const search = document.getElementById('search')
+
+// Get initial movies
+getMovies(API_URL)
+
+async function getMovies(url) {
+ const res = await fetch(url)
+ const data = await res.json()
+
+ showMovies(data.results)
+}
+
+function showMovies(movies) {
+ main.innerHTML = ''
+
+ movies.forEach((movie) => {
+ const { title, poster_path, vote_average, overview } = movie
+
+ const movieEl = document.createElement('div')
+ movieEl.classList.add('movie')
+
+ movieEl.innerHTML = `
+
+
+
${title}
+ ${vote_average}
+
+
+
Overview
+ ${overview}
+
+ `
+ main.appendChild(movieEl)
+ })
+}
+
+function getClassByRate(vote) {
+ if(vote >= 8) {
+ return 'green'
+ } else if(vote >= 5) {
+ return 'orange'
+ } else {
+ return 'red'
+ }
+}
+
+form.addEventListener('submit', (e) => {
+ e.preventDefault()
+
+ const searchTerm = search.value
+
+ if(searchTerm && searchTerm !== '') {
+ getMovies(SEARCH_API + searchTerm)
+
+ search.value = ''
+ } else {
+ window.location.reload()
+ }
+})
\ No newline at end of file
diff --git a/movie-app/style.css b/movie-app/style.css
new file mode 100644
index 0000000..4821341
--- /dev/null
+++ b/movie-app/style.css
@@ -0,0 +1,112 @@
+@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@200;400&display=swap');
+
+:root {
+ --primary-color: #22254b;
+ --secondary-color: #373b69;
+}
+
+* {
+ box-sizing: border-box;
+}
+
+body {
+ background-color: var(--primary-color);
+ font-family: 'Poppins', sans-serif;
+ margin: 0;
+}
+
+header {
+ padding: 1rem;
+ display: flex;
+ justify-content: flex-end;
+ background-color: var(--secondary-color);
+}
+
+.search {
+ background-color: transparent;
+ border: 2px solid var(--primary-color);
+ border-radius: 50px;
+ font-family: inherit;
+ font-size: 1rem;
+ padding: 0.5rem 1rem;
+ color: #fff;
+}
+
+.search::placeholder {
+ color: #7378c5;
+}
+
+.search:focus {
+ outline: none;
+ background-color: var(--primary-color);
+}
+
+main {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: center;
+}
+
+.movie {
+ width: 300px;
+ margin: 1rem;
+ background-color: var(--secondary-color);
+ box-shadow: 0 4px 5px rgba(0, 0, 0, 0.2);
+ position: relative;
+ overflow: hidden;
+ border-radius: 3px;
+}
+
+.movie img {
+ width: 100%;
+}
+
+.movie-info {
+ color: #eee;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ gap:0.2rem;
+ padding: 0.5rem 1rem 1rem;
+ letter-spacing: 0.5px;
+}
+
+.movie-info h3 {
+ margin-top: 0;
+}
+
+.movie-info span {
+ background-color: var(--primary-color);
+ padding: 0.25rem 0.5rem;
+ border-radius: 3px;
+ font-weight: bold;
+}
+
+.movie-info span.green {
+ color: lightgreen;
+}
+
+.movie-info span.orange {
+ color: orange;
+}
+
+.movie-info span.red {
+ color: red;
+}
+
+.overview {
+ background-color: #fff;
+ padding: 2rem;
+ position: absolute;
+ left: 0;
+ bottom: 0;
+ right: 0;
+ max-height: 100%;
+ transform: translateY(101%);
+ overflow-y: auto;
+ transition: transform 0.3s ease-in;
+}
+
+.movie:hover .overview {
+ transform: translateY(0);
+}
diff --git a/netflix-mobile-navigation/index.html b/netflix-mobile-navigation/index.html
new file mode 100644
index 0000000..5a178b3
--- /dev/null
+++ b/netflix-mobile-navigation/index.html
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+ Netflix Mobile Navigation
+
+
+
+
+
+
+
+
+ Mobile Navigation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/netflix-mobile-navigation/script.js b/netflix-mobile-navigation/script.js
new file mode 100644
index 0000000..3bc1f9a
--- /dev/null
+++ b/netflix-mobile-navigation/script.js
@@ -0,0 +1,11 @@
+const open_btn = document.querySelector('.open-btn')
+const close_btn = document.querySelector('.close-btn')
+const nav = document.querySelectorAll('.nav')
+
+open_btn.addEventListener('click', () => {
+ nav.forEach(nav_el => nav_el.classList.add('visible'))
+})
+
+close_btn.addEventListener('click', () => {
+ nav.forEach(nav_el => nav_el.classList.remove('visible'))
+})
\ No newline at end of file
diff --git a/netflix-mobile-navigation/style.css b/netflix-mobile-navigation/style.css
new file mode 100644
index 0000000..c5d723a
--- /dev/null
+++ b/netflix-mobile-navigation/style.css
@@ -0,0 +1,110 @@
+@import url('https://fonts.googleapis.com/css?family=Muli&display=swap');
+
+* {
+ box-sizing: border-box;
+}
+
+body {
+ font-family: 'Muli', sans-serif;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ height: 100vh;
+}
+
+.text {
+ text-transform: uppercase;
+}
+
+.logo {
+ width: 150px;
+}
+
+.nav-btn {
+ border: none;
+ background-color: transparent;
+ cursor: pointer;
+ font-size: 20px;
+}
+
+.open-btn {
+ position: fixed;
+ top: 10px;
+ left: 10px;
+}
+
+.nav {
+ position: fixed;
+ top: 0;
+ left: 0;
+ height: 100vh;
+ transform: translateX(-100%);
+ transition: transform 0.3s ease-in-out;
+}
+
+.nav.visible {
+ transform: translateX(0);
+}
+
+.nav-black {
+ background-color: rgb(34, 31, 31);
+ width: 60%;
+ max-width: 480px;
+ min-width: 320px;
+ transition-delay: 0.4s;
+}
+
+.nav-black.visible {
+ transition-delay: 0s;
+}
+
+.nav-red {
+ background-color: rgb(229, 9, 20);
+ width: 95%;
+ transition-delay: 0.2s;
+}
+
+.nav-red.visible {
+ transition-delay: 0.2s;
+}
+
+.nav-white {
+ background-color: #fff;
+ width: 95%;
+ padding: 40px;
+ position: relative;
+ transition-delay: 0s;
+}
+
+.nav-white.visible {
+ transition-delay: 0.4s;
+}
+
+.close-btn {
+ opacity: 0.3;
+ position: absolute;
+ top: 40px;
+ right: 30px;
+}
+
+.list {
+ list-style-type: none;
+ padding: 0;
+}
+
+.list li {
+ margin: 20px 0;
+}
+
+.list li a {
+ color: rgb(34, 31, 31);
+ font-size: 14px;
+ text-decoration: none;
+ text-transform: uppercase;
+}
+
+.list ul {
+ list-style-type: none;
+ padding-left: 20px;
+}
diff --git a/notes-app/index.html b/notes-app/index.html
new file mode 100644
index 0000000..c2054c0
--- /dev/null
+++ b/notes-app/index.html
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+ Notes App
+
+
+
+ Add note
+
+
+
+
+
+
diff --git a/notes-app/script.js b/notes-app/script.js
new file mode 100644
index 0000000..399ab0f
--- /dev/null
+++ b/notes-app/script.js
@@ -0,0 +1,63 @@
+const addBtn = document.getElementById('add')
+
+const notes = JSON.parse(localStorage.getItem('notes'))
+
+if(notes) {
+ notes.forEach(note => addNewNote(note))
+}
+
+addBtn.addEventListener('click', () => addNewNote())
+
+function addNewNote(text = '') {
+ const note = document.createElement('div')
+ note.classList.add('note')
+
+ note.innerHTML = `
+
+
+
+
+
+
+
+ `
+
+ const editBtn = note.querySelector('.edit')
+ const deleteBtn = note.querySelector('.delete')
+ const main = note.querySelector('.main')
+ const textArea = note.querySelector('textarea')
+
+ textArea.value = text
+ main.innerHTML = marked(text)
+
+ deleteBtn.addEventListener('click', () => {
+ note.remove()
+
+ updateLS()
+ })
+
+ editBtn.addEventListener('click', () => {
+ main.classList.toggle('hidden')
+ textArea.classList.toggle('hidden')
+ })
+
+ textArea.addEventListener('input', (e) => {
+ const { value } = e.target
+
+ main.innerHTML = marked(value)
+
+ updateLS()
+ })
+
+ document.body.appendChild(note)
+}
+
+function updateLS() {
+ const notesText = document.querySelectorAll('textarea')
+
+ const notes = []
+
+ notesText.forEach(note => notes.push(note.value))
+
+ localStorage.setItem('notes', JSON.stringify(notes))
+}
\ No newline at end of file
diff --git a/notes-app/style.css b/notes-app/style.css
new file mode 100644
index 0000000..8188439
--- /dev/null
+++ b/notes-app/style.css
@@ -0,0 +1,74 @@
+@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@200;400&display=swap');
+
+* {
+ box-sizing: border-box;
+ outline: none;
+}
+
+body {
+ background-color: #7bdaf3;
+ font-family: 'Poppins', sans-serif;
+ display: flex;
+ flex-wrap: wrap;
+ margin: 0;
+ padding-top: 3rem;
+}
+
+.add {
+ position: fixed;
+ top: 1rem;
+ right: 1rem;
+ background-color: #9ec862;
+ color: #fff;
+ border: none;
+ border-radius: 3px;
+ padding: 0.5rem 1rem;
+ cursor: pointer;
+}
+
+.add:active {
+ transform: scale(0.98);
+}
+
+.note {
+ background-color: #fff;
+ box-shadow: 0 0 10px 4px rgba(0, 0, 0, 0.1);
+ margin: 30px 20px;
+ height: 400px;
+ width: 400px;
+ overflow-y: scroll;
+}
+
+.note .tools {
+ background-color: #9ec862;
+ display: flex;
+ justify-content: flex-end;
+ padding: 0.5rem;
+}
+
+.note .tools button {
+ background-color: transparent;
+ border: none;
+ color: #fff;
+ cursor: pointer;
+ font-size: 1rem;
+ margin-left: 0.5rem;
+}
+
+.note textarea {
+ outline: none;
+ font-family: inherit;
+ font-size: 1.2rem;
+ border: none;
+ height: 400px;
+ width: 100%;
+ padding: 20px;
+}
+
+.main {
+ padding: 20px;
+}
+
+.hidden {
+ display: none;
+}
diff --git a/package-lock.json b/package-lock.json
deleted file mode 100644
index f26f9e7..0000000
--- a/package-lock.json
+++ /dev/null
@@ -1,6588 +0,0 @@
-{
- "name": "devspace-blog",
- "version": "0.1.0",
- "lockfileVersion": 2,
- "requires": true,
- "packages": {
- "": {
- "version": "0.1.0",
- "dependencies": {
- "gray-matter": "^4.0.3",
- "marked": "^2.0.4",
- "next": "10.2.0",
- "react": "17.0.2",
- "react-dom": "17.0.2",
- "react-icons": "^4.2.0"
- },
- "devDependencies": {
- "autoprefixer": "^10.2.5",
- "husky": "^6.0.0",
- "postcss": "^8.2.15",
- "tailwindcss": "^2.1.2"
- }
- },
- "node_modules/@babel/code-frame": {
- "version": "7.12.11",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz",
- "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==",
- "dependencies": {
- "@babel/highlight": "^7.10.4"
- }
- },
- "node_modules/@babel/helper-validator-identifier": {
- "version": "7.14.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz",
- "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A=="
- },
- "node_modules/@babel/highlight": {
- "version": "7.14.0",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz",
- "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==",
- "dependencies": {
- "@babel/helper-validator-identifier": "^7.14.0",
- "chalk": "^2.0.0",
- "js-tokens": "^4.0.0"
- }
- },
- "node_modules/@babel/runtime": {
- "version": "7.12.5",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz",
- "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==",
- "dependencies": {
- "regenerator-runtime": "^0.13.4"
- }
- },
- "node_modules/@babel/types": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz",
- "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==",
- "dependencies": {
- "esutils": "^2.0.2",
- "lodash": "^4.17.13",
- "to-fast-properties": "^2.0.0"
- }
- },
- "node_modules/@fullhuman/postcss-purgecss": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/@fullhuman/postcss-purgecss/-/postcss-purgecss-3.1.3.tgz",
- "integrity": "sha512-kwOXw8fZ0Lt1QmeOOrd+o4Ibvp4UTEBFQbzvWldjlKv5n+G9sXfIPn1hh63IQIL8K8vbvv1oYMJiIUbuy9bGaA==",
- "dev": true,
- "dependencies": {
- "purgecss": "^3.1.3"
- }
- },
- "node_modules/@hapi/accept": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/@hapi/accept/-/accept-5.0.1.tgz",
- "integrity": "sha512-fMr4d7zLzsAXo28PRRQPXR1o2Wmu+6z+VY1UzDp0iFo13Twj8WePakwXBiqn3E1aAlTpSNzCXdnnQXFhst8h8Q==",
- "dependencies": {
- "@hapi/boom": "9.x.x",
- "@hapi/hoek": "9.x.x"
- }
- },
- "node_modules/@hapi/boom": {
- "version": "9.1.2",
- "resolved": "https://registry.npmjs.org/@hapi/boom/-/boom-9.1.2.tgz",
- "integrity": "sha512-uJEJtiNHzKw80JpngDGBCGAmWjBtzxDCz17A9NO2zCi8LLBlb5Frpq4pXwyN+2JQMod4pKz5BALwyneCgDg89Q==",
- "dependencies": {
- "@hapi/hoek": "9.x.x"
- }
- },
- "node_modules/@hapi/hoek": {
- "version": "9.2.0",
- "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.0.tgz",
- "integrity": "sha512-sqKVVVOe5ivCaXDWivIJYVSaEgdQK9ul7a4Kity5Iw7u9+wBAPbX1RMSnLLmp7O4Vzj0WOWwMAJsTL00xwaNug=="
- },
- "node_modules/@next/env": {
- "version": "10.2.0",
- "resolved": "https://registry.npmjs.org/@next/env/-/env-10.2.0.tgz",
- "integrity": "sha512-tsWBsn1Rb6hXRaHc/pWMCpZ4Ipkf3OCbZ54ef5ukgIyEvzzGdGFXQshPP2AF7yb+8yMpunWs7vOMZW3e8oPF6A=="
- },
- "node_modules/@next/polyfill-module": {
- "version": "10.2.0",
- "resolved": "https://registry.npmjs.org/@next/polyfill-module/-/polyfill-module-10.2.0.tgz",
- "integrity": "sha512-Nl3GexIUXsmuggkUqrRFyE/2k7UI44JaVzSywtXEyHzxpZm2a5bdMaWuC89pgLiFDDOqmbqyLAbtwm5lNxa7Eg=="
- },
- "node_modules/@next/react-dev-overlay": {
- "version": "10.2.0",
- "resolved": "https://registry.npmjs.org/@next/react-dev-overlay/-/react-dev-overlay-10.2.0.tgz",
- "integrity": "sha512-PRIAoWog41hLN4iJ8dChKp4ysOX0Q8yiNQ/cwzyqEd3EjugkDV5OiKl3mumGKaApJaIra1MX6j1wgQRuLhuWMA==",
- "dependencies": {
- "@babel/code-frame": "7.12.11",
- "anser": "1.4.9",
- "chalk": "4.0.0",
- "classnames": "2.2.6",
- "css.escape": "1.5.1",
- "data-uri-to-buffer": "3.0.1",
- "platform": "1.3.6",
- "shell-quote": "1.7.2",
- "source-map": "0.8.0-beta.0",
- "stacktrace-parser": "0.1.10",
- "strip-ansi": "6.0.0"
- },
- "peerDependencies": {
- "react": "^16.9.0 || ^17",
- "react-dom": "^16.9.0 || ^17"
- }
- },
- "node_modules/@next/react-dev-overlay/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/@next/react-dev-overlay/node_modules/chalk": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.0.0.tgz",
- "integrity": "sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==",
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/@next/react-dev-overlay/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/@next/react-dev-overlay/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
- },
- "node_modules/@next/react-dev-overlay/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@next/react-dev-overlay/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@next/react-refresh-utils": {
- "version": "10.2.0",
- "resolved": "https://registry.npmjs.org/@next/react-refresh-utils/-/react-refresh-utils-10.2.0.tgz",
- "integrity": "sha512-3I31K9B4hEQRl7yQ44Umyz+szHtuMJrNdwsgJGhoEnUCXSBRHp5wv5Zv8eDa2NewSbe53b2C0oOpivrzmdBakw==",
- "peerDependencies": {
- "react-refresh": "0.8.3",
- "webpack": "^4 || ^5"
- },
- "peerDependenciesMeta": {
- "webpack": {
- "optional": true
- }
- }
- },
- "node_modules/@nodelib/fs.scandir": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz",
- "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==",
- "dev": true,
- "dependencies": {
- "@nodelib/fs.stat": "2.0.4",
- "run-parallel": "^1.1.9"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.stat": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz",
- "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==",
- "dev": true,
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.walk": {
- "version": "1.2.6",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz",
- "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==",
- "dev": true,
- "dependencies": {
- "@nodelib/fs.scandir": "2.1.4",
- "fastq": "^1.6.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@opentelemetry/api": {
- "version": "0.14.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-0.14.0.tgz",
- "integrity": "sha512-L7RMuZr5LzMmZiQSQDy9O1jo0q+DaLy6XpYJfIGfYSfoJA5qzYwUP3sP1uMIQ549DvxAgM3ng85EaPTM/hUHwQ==",
- "dependencies": {
- "@opentelemetry/context-base": "^0.14.0"
- },
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/@opentelemetry/context-base": {
- "version": "0.14.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/context-base/-/context-base-0.14.0.tgz",
- "integrity": "sha512-sDOAZcYwynHFTbLo6n8kIbLiVF3a3BLkrmehJUyEbT9F+Smbi47kLGS2gG2g0fjBLR/Lr1InPD7kXL7FaTqEkw==",
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/@types/node": {
- "version": "15.0.2",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-15.0.2.tgz",
- "integrity": "sha512-p68+a+KoxpoB47015IeYZYRrdqMUcpbK8re/zpFB8Ld46LHC1lPEbp3EXgkEhAYEcPvjJF6ZO+869SQ0aH1dcA=="
- },
- "node_modules/acorn": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
- "dev": true,
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/acorn-node": {
- "version": "1.8.2",
- "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz",
- "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==",
- "dev": true,
- "dependencies": {
- "acorn": "^7.0.0",
- "acorn-walk": "^7.0.0",
- "xtend": "^4.0.2"
- }
- },
- "node_modules/acorn-walk": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
- "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
- "dev": true,
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/anser": {
- "version": "1.4.9",
- "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.9.tgz",
- "integrity": "sha512-AI+BjTeGt2+WFk4eWcqbQ7snZpDBt8SaLlj0RT2h5xfdWaiy51OjYvqwMrNzJLGy8iOAL6nKDITWO+rd4MkYEA=="
- },
- "node_modules/ansi-regex": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
- "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/anymatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
- "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
- "dependencies": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
- "dependencies": {
- "sprintf-js": "~1.0.2"
- }
- },
- "node_modules/array-filter": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz",
- "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM="
- },
- "node_modules/asn1.js": {
- "version": "5.4.1",
- "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz",
- "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==",
- "dependencies": {
- "bn.js": "^4.0.0",
- "inherits": "^2.0.1",
- "minimalistic-assert": "^1.0.0",
- "safer-buffer": "^2.1.0"
- }
- },
- "node_modules/asn1.js/node_modules/bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
- },
- "node_modules/assert": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz",
- "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==",
- "dependencies": {
- "es6-object-assign": "^1.1.0",
- "is-nan": "^1.2.1",
- "object-is": "^1.0.1",
- "util": "^0.12.0"
- }
- },
- "node_modules/ast-types": {
- "version": "0.13.2",
- "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.2.tgz",
- "integrity": "sha512-uWMHxJxtfj/1oZClOxDEV1sQ1HCDkA4MG8Gr69KKeBjEVH0R84WlejZ0y2DcwyBlpAEMltmVYkVgqfLFb2oyiA==",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/at-least-node": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
- "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
- "dev": true,
- "engines": {
- "node": ">= 4.0.0"
- }
- },
- "node_modules/autoprefixer": {
- "version": "10.2.5",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.2.5.tgz",
- "integrity": "sha512-7H4AJZXvSsn62SqZyJCP+1AWwOuoYpUfK6ot9vm0e87XD6mT8lDywc9D9OTJPMULyGcvmIxzTAMeG2Cc+YX+fA==",
- "dev": true,
- "dependencies": {
- "browserslist": "^4.16.3",
- "caniuse-lite": "^1.0.30001196",
- "colorette": "^1.2.2",
- "fraction.js": "^4.0.13",
- "normalize-range": "^0.1.2",
- "postcss-value-parser": "^4.1.0"
- },
- "bin": {
- "autoprefixer": "bin/autoprefixer"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- "peerDependencies": {
- "postcss": "^8.1.0"
- }
- },
- "node_modules/autoprefixer/node_modules/browserslist": {
- "version": "4.16.6",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz",
- "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==",
- "dev": true,
- "dependencies": {
- "caniuse-lite": "^1.0.30001219",
- "colorette": "^1.2.2",
- "electron-to-chromium": "^1.3.723",
- "escalade": "^3.1.1",
- "node-releases": "^1.1.71"
- },
- "bin": {
- "browserslist": "cli.js"
- },
- "engines": {
- "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- }
- },
- "node_modules/available-typed-arrays": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz",
- "integrity": "sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ==",
- "dependencies": {
- "array-filter": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/babel-plugin-syntax-jsx": {
- "version": "6.18.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz",
- "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY="
- },
- "node_modules/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true
- },
- "node_modules/base64-js": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/big.js": {
- "version": "5.2.2",
- "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
- "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/binary-extensions": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
- "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/bn.js": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz",
- "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw=="
- },
- "node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "dependencies": {
- "fill-range": "^7.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/brorand": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
- "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8="
- },
- "node_modules/browserify-aes": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
- "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
- "dependencies": {
- "buffer-xor": "^1.0.3",
- "cipher-base": "^1.0.0",
- "create-hash": "^1.1.0",
- "evp_bytestokey": "^1.0.3",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/browserify-cipher": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
- "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
- "dependencies": {
- "browserify-aes": "^1.0.4",
- "browserify-des": "^1.0.0",
- "evp_bytestokey": "^1.0.0"
- }
- },
- "node_modules/browserify-des": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
- "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
- "dependencies": {
- "cipher-base": "^1.0.1",
- "des.js": "^1.0.0",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.1.2"
- }
- },
- "node_modules/browserify-rsa": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz",
- "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==",
- "dependencies": {
- "bn.js": "^5.0.0",
- "randombytes": "^2.0.1"
- }
- },
- "node_modules/browserify-sign": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz",
- "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==",
- "dependencies": {
- "bn.js": "^5.1.1",
- "browserify-rsa": "^4.0.1",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "elliptic": "^6.5.3",
- "inherits": "^2.0.4",
- "parse-asn1": "^5.1.5",
- "readable-stream": "^3.6.0",
- "safe-buffer": "^5.2.0"
- }
- },
- "node_modules/browserify-zlib": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
- "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
- "dependencies": {
- "pako": "~1.0.5"
- }
- },
- "node_modules/browserslist": {
- "version": "4.16.1",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.1.tgz",
- "integrity": "sha512-UXhDrwqsNcpTYJBTZsbGATDxZbiVDsx6UjpmRUmtnP10pr8wAYr5LgFoEFw9ixriQH2mv/NX2SfGzE/o8GndLA==",
- "dependencies": {
- "caniuse-lite": "^1.0.30001173",
- "colorette": "^1.2.1",
- "electron-to-chromium": "^1.3.634",
- "escalade": "^3.1.1",
- "node-releases": "^1.1.69"
- },
- "bin": {
- "browserslist": "cli.js"
- },
- "engines": {
- "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- }
- },
- "node_modules/buffer": {
- "version": "5.6.0",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz",
- "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==",
- "dependencies": {
- "base64-js": "^1.0.2",
- "ieee754": "^1.1.4"
- }
- },
- "node_modules/buffer-xor": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
- "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk="
- },
- "node_modules/builtin-status-codes": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
- "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug="
- },
- "node_modules/bytes": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
- "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/call-bind": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
- "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
- "dependencies": {
- "function-bind": "^1.1.1",
- "get-intrinsic": "^1.0.2"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/camelcase-css": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
- "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
- "dev": true,
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/caniuse-lite": {
- "version": "1.0.30001228",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001228.tgz",
- "integrity": "sha512-QQmLOGJ3DEgokHbMSA8cj2a+geXqmnpyOFT0lhQV6P3/YOJvGDEwoedcwxEQ30gJIwIIunHIicunJ2rzK5gB2A==",
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- }
- },
- "node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/chokidar": {
- "version": "3.5.1",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz",
- "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==",
- "dependencies": {
- "anymatch": "~3.1.1",
- "braces": "~3.0.2",
- "glob-parent": "~5.1.0",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.5.0"
- },
- "engines": {
- "node": ">= 8.10.0"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.1"
- }
- },
- "node_modules/cipher-base": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
- "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
- "dependencies": {
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/classnames": {
- "version": "2.2.6",
- "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz",
- "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q=="
- },
- "node_modules/color": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz",
- "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==",
- "dev": true,
- "dependencies": {
- "color-convert": "^1.9.1",
- "color-string": "^1.5.4"
- }
- },
- "node_modules/color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dependencies": {
- "color-name": "1.1.3"
- }
- },
- "node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
- },
- "node_modules/color-string": {
- "version": "1.5.5",
- "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz",
- "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==",
- "dev": true,
- "dependencies": {
- "color-name": "^1.0.0",
- "simple-swizzle": "^0.2.2"
- }
- },
- "node_modules/colorette": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz",
- "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w=="
- },
- "node_modules/commander": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
- "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==",
- "dev": true,
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/commondir": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
- "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs="
- },
- "node_modules/concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
- "dev": true
- },
- "node_modules/console-browserify": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz",
- "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA=="
- },
- "node_modules/constants-browserify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
- "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U="
- },
- "node_modules/convert-source-map": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
- "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
- "dependencies": {
- "safe-buffer": "~5.1.1"
- }
- },
- "node_modules/convert-source-map/node_modules/safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
- },
- "node_modules/core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
- },
- "node_modules/create-ecdh": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz",
- "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==",
- "dependencies": {
- "bn.js": "^4.1.0",
- "elliptic": "^6.5.3"
- }
- },
- "node_modules/create-ecdh/node_modules/bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
- },
- "node_modules/create-hash": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
- "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
- "dependencies": {
- "cipher-base": "^1.0.1",
- "inherits": "^2.0.1",
- "md5.js": "^1.3.4",
- "ripemd160": "^2.0.1",
- "sha.js": "^2.4.0"
- }
- },
- "node_modules/create-hmac": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
- "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
- "dependencies": {
- "cipher-base": "^1.0.3",
- "create-hash": "^1.1.0",
- "inherits": "^2.0.1",
- "ripemd160": "^2.0.0",
- "safe-buffer": "^5.0.1",
- "sha.js": "^2.4.8"
- }
- },
- "node_modules/crypto-browserify": {
- "version": "3.12.0",
- "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
- "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
- "dependencies": {
- "browserify-cipher": "^1.0.0",
- "browserify-sign": "^4.0.0",
- "create-ecdh": "^4.0.0",
- "create-hash": "^1.1.0",
- "create-hmac": "^1.1.0",
- "diffie-hellman": "^5.0.0",
- "inherits": "^2.0.1",
- "pbkdf2": "^3.0.3",
- "public-encrypt": "^4.0.0",
- "randombytes": "^2.0.0",
- "randomfill": "^1.0.3"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/css-unit-converter": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.2.tgz",
- "integrity": "sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==",
- "dev": true
- },
- "node_modules/css.escape": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz",
- "integrity": "sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s="
- },
- "node_modules/cssesc": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
- "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
- "dev": true,
- "bin": {
- "cssesc": "bin/cssesc"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/cssnano-preset-simple": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/cssnano-preset-simple/-/cssnano-preset-simple-2.0.0.tgz",
- "integrity": "sha512-HkufSLkaBJbKBFx/7aj5HmCK9Ni/JedRQm0mT2qBzMG/dEuJOLnMt2lK6K1rwOOyV4j9aSY+knbW9WoS7BYpzg==",
- "dependencies": {
- "caniuse-lite": "^1.0.30001202"
- },
- "peerDependencies": {
- "postcss": "^8.2.1"
- }
- },
- "node_modules/cssnano-simple": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/cssnano-simple/-/cssnano-simple-2.0.0.tgz",
- "integrity": "sha512-0G3TXaFxlh/szPEG/o3VcmCwl0N3E60XNb9YZZijew5eIs6fLjJuOPxQd9yEBaX2p/YfJtt49i4vYi38iH6/6w==",
- "dependencies": {
- "cssnano-preset-simple": "^2.0.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.2"
- }
- },
- "node_modules/data-uri-to-buffer": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz",
- "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==",
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/define-properties": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
- "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
- "dependencies": {
- "object-keys": "^1.0.12"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/defined": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
- "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
- "dev": true
- },
- "node_modules/depd": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/des.js": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz",
- "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==",
- "dependencies": {
- "inherits": "^2.0.1",
- "minimalistic-assert": "^1.0.0"
- }
- },
- "node_modules/detective": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz",
- "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==",
- "dev": true,
- "dependencies": {
- "acorn-node": "^1.6.1",
- "defined": "^1.0.0",
- "minimist": "^1.1.1"
- },
- "bin": {
- "detective": "bin/detective.js"
- },
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/didyoumean": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.1.tgz",
- "integrity": "sha1-6S7f2tplN9SE1zwBcv0eugxJdv8=",
- "dev": true
- },
- "node_modules/diffie-hellman": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
- "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
- "dependencies": {
- "bn.js": "^4.1.0",
- "miller-rabin": "^4.0.0",
- "randombytes": "^2.0.0"
- }
- },
- "node_modules/diffie-hellman/node_modules/bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
- },
- "node_modules/dlv": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
- "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
- "dev": true
- },
- "node_modules/domain-browser": {
- "version": "4.19.0",
- "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-4.19.0.tgz",
- "integrity": "sha512-fRA+BaAWOR/yr/t7T9E9GJztHPeFjj8U35ajyAjCDtAAnTn1Rc1f6W6VGPJrO1tkQv9zWu+JRof7z6oQtiYVFQ==",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://bevry.me/fund"
- }
- },
- "node_modules/electron-to-chromium": {
- "version": "1.3.727",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.727.tgz",
- "integrity": "sha512-Mfz4FIB4FSvEwBpDfdipRIrwd6uo8gUDoRDF4QEYb4h4tSuI3ov594OrjU6on042UlFHouIJpClDODGkPcBSbg=="
- },
- "node_modules/elliptic": {
- "version": "6.5.4",
- "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz",
- "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==",
- "dependencies": {
- "bn.js": "^4.11.9",
- "brorand": "^1.1.0",
- "hash.js": "^1.0.0",
- "hmac-drbg": "^1.0.1",
- "inherits": "^2.0.4",
- "minimalistic-assert": "^1.0.1",
- "minimalistic-crypto-utils": "^1.0.1"
- }
- },
- "node_modules/elliptic/node_modules/bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
- },
- "node_modules/emojis-list": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
- "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/encoding": {
- "version": "0.1.13",
- "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
- "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
- "dependencies": {
- "iconv-lite": "^0.6.2"
- }
- },
- "node_modules/es-abstract": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz",
- "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==",
- "dependencies": {
- "call-bind": "^1.0.2",
- "es-to-primitive": "^1.2.1",
- "function-bind": "^1.1.1",
- "get-intrinsic": "^1.1.1",
- "has": "^1.0.3",
- "has-symbols": "^1.0.2",
- "is-callable": "^1.2.3",
- "is-negative-zero": "^2.0.1",
- "is-regex": "^1.1.2",
- "is-string": "^1.0.5",
- "object-inspect": "^1.9.0",
- "object-keys": "^1.1.1",
- "object.assign": "^4.1.2",
- "string.prototype.trimend": "^1.0.4",
- "string.prototype.trimstart": "^1.0.4",
- "unbox-primitive": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/es-to-primitive": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
- "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
- "dependencies": {
- "is-callable": "^1.1.4",
- "is-date-object": "^1.0.1",
- "is-symbol": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/es6-object-assign": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz",
- "integrity": "sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw="
- },
- "node_modules/escalade": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "bin": {
- "esparse": "bin/esparse.js",
- "esvalidate": "bin/esvalidate.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/etag": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
- "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/events": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
- "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
- "engines": {
- "node": ">=0.8.x"
- }
- },
- "node_modules/evp_bytestokey": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
- "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
- "dependencies": {
- "md5.js": "^1.3.4",
- "safe-buffer": "^5.1.1"
- }
- },
- "node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/fast-glob": {
- "version": "3.2.5",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz",
- "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==",
- "dev": true,
- "dependencies": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.0",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.2",
- "picomatch": "^2.2.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/fastq": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz",
- "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==",
- "dev": true,
- "dependencies": {
- "reusify": "^1.0.4"
- }
- },
- "node_modules/fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "dependencies": {
- "to-regex-range": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/find-cache-dir": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz",
- "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==",
- "dependencies": {
- "commondir": "^1.0.1",
- "make-dir": "^3.0.2",
- "pkg-dir": "^4.1.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/avajs/find-cache-dir?sponsor=1"
- }
- },
- "node_modules/find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dependencies": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/foreach": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",
- "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k="
- },
- "node_modules/fraction.js": {
- "version": "4.0.13",
- "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.0.13.tgz",
- "integrity": "sha512-E1fz2Xs9ltlUp+qbiyx9wmt2n9dRzPsS11Jtdb8D2o+cC7wr9xkkKsVKJuBX0ST+LVS+LhLO+SbLJNtfWcJvXA==",
- "dev": true,
- "engines": {
- "node": "*"
- }
- },
- "node_modules/fs-extra": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
- "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
- "dev": true,
- "dependencies": {
- "at-least-node": "^1.0.0",
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
- "dev": true
- },
- "node_modules/fsevents": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
- "hasInstallScript": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
- "node_modules/function-bind": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
- },
- "node_modules/get-intrinsic": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
- "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
- "dependencies": {
- "function-bind": "^1.1.1",
- "has": "^1.0.3",
- "has-symbols": "^1.0.1"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/get-orientation": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/get-orientation/-/get-orientation-1.1.2.tgz",
- "integrity": "sha512-/pViTfifW+gBbh/RnlFYHINvELT9Znt+SYyDKAUL6uV6By019AK/s+i9XP4jSwq7lwP38Fd8HVeTxym3+hkwmQ==",
- "dependencies": {
- "stream-parser": "^0.3.1"
- }
- },
- "node_modules/glob": {
- "version": "7.1.7",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
- "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
- "dev": true,
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/glob-base": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
- "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
- "dev": true,
- "dependencies": {
- "glob-parent": "^2.0.0",
- "is-glob": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/glob-base/node_modules/glob-parent": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
- "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
- "dev": true,
- "dependencies": {
- "is-glob": "^2.0.0"
- }
- },
- "node_modules/glob-base/node_modules/is-extglob": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
- "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/glob-base/node_modules/is-glob": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
- "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
- "dev": true,
- "dependencies": {
- "is-extglob": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/glob-to-regexp": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
- "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw=="
- },
- "node_modules/graceful-fs": {
- "version": "4.2.6",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz",
- "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ=="
- },
- "node_modules/gray-matter": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz",
- "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==",
- "dependencies": {
- "js-yaml": "^3.13.1",
- "kind-of": "^6.0.2",
- "section-matter": "^1.0.0",
- "strip-bom-string": "^1.0.0"
- },
- "engines": {
- "node": ">=6.0"
- }
- },
- "node_modules/has": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
- "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
- "dependencies": {
- "function-bind": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4.0"
- }
- },
- "node_modules/has-bigints": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz",
- "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/has-symbols": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz",
- "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/hash-base": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz",
- "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==",
- "dependencies": {
- "inherits": "^2.0.4",
- "readable-stream": "^3.6.0",
- "safe-buffer": "^5.2.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/hash.js": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
- "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
- "dependencies": {
- "inherits": "^2.0.3",
- "minimalistic-assert": "^1.0.1"
- }
- },
- "node_modules/he": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
- "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
- "bin": {
- "he": "bin/he"
- }
- },
- "node_modules/hmac-drbg": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
- "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
- "dependencies": {
- "hash.js": "^1.0.3",
- "minimalistic-assert": "^1.0.0",
- "minimalistic-crypto-utils": "^1.0.1"
- }
- },
- "node_modules/html-tags": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz",
- "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/http-errors": {
- "version": "1.7.3",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz",
- "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==",
- "dependencies": {
- "depd": "~1.1.2",
- "inherits": "2.0.4",
- "setprototypeof": "1.1.1",
- "statuses": ">= 1.5.0 < 2",
- "toidentifier": "1.0.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/https-browserify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
- "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM="
- },
- "node_modules/husky": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/husky/-/husky-6.0.0.tgz",
- "integrity": "sha512-SQS2gDTB7tBN486QSoKPKQItZw97BMOd+Kdb6ghfpBc0yXyzrddI0oDV5MkDAbuB4X2mO3/nj60TRMcYxwzZeQ==",
- "dev": true,
- "bin": {
- "husky": "lib/bin.js"
- },
- "funding": {
- "url": "https://github.com/sponsors/typicode"
- }
- },
- "node_modules/iconv-lite": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz",
- "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==",
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ieee754": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
- "dev": true,
- "dependencies": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "node_modules/inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
- },
- "node_modules/is-arguments": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz",
- "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==",
- "dependencies": {
- "call-bind": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-arrayish": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
- "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
- "dev": true
- },
- "node_modules/is-bigint": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz",
- "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-binary-path": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
- "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "dependencies": {
- "binary-extensions": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-boolean-object": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz",
- "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==",
- "dependencies": {
- "call-bind": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-callable": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz",
- "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-core-module": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz",
- "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==",
- "dev": true,
- "dependencies": {
- "has": "^1.0.3"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-date-object": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz",
- "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-dotfile": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
- "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-generator-function": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.9.tgz",
- "integrity": "sha512-ZJ34p1uvIfptHCN7sFTjGibB9/oBg17sHqzDLfuwhvmN/qLVvIQXRQ8licZQ35WJ8KuEQt/etnnzQFI9C9Ue/A==",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-glob": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
- "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
- "dependencies": {
- "is-extglob": "^2.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-nan": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz",
- "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==",
- "dependencies": {
- "call-bind": "^1.0.0",
- "define-properties": "^1.1.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-negative-zero": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz",
- "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "engines": {
- "node": ">=0.12.0"
- }
- },
- "node_modules/is-number-object": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz",
- "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-regex": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz",
- "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==",
- "dependencies": {
- "call-bind": "^1.0.2",
- "has-symbols": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-string": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz",
- "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-symbol": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
- "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
- "dependencies": {
- "has-symbols": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-typed-array": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.5.tgz",
- "integrity": "sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug==",
- "dependencies": {
- "available-typed-arrays": "^1.0.2",
- "call-bind": "^1.0.2",
- "es-abstract": "^1.18.0-next.2",
- "foreach": "^2.0.5",
- "has-symbols": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
- },
- "node_modules/jest-worker": {
- "version": "27.0.0-next.5",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.0-next.5.tgz",
- "integrity": "sha512-mk0umAQ5lT+CaOJ+Qp01N6kz48sJG2kr2n1rX0koqKf6FIygQV0qLOdN9SCYID4IVeSigDOcPeGLozdMLYfb5g==",
- "dependencies": {
- "@types/node": "*",
- "merge-stream": "^2.0.0",
- "supports-color": "^8.0.0"
- },
- "engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
- }
- },
- "node_modules/jest-worker/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/jest-worker/node_modules/supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/supports-color?sponsor=1"
- }
- },
- "node_modules/js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
- },
- "node_modules/js-yaml": {
- "version": "3.14.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
- "dependencies": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/json5": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
- "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
- "dependencies": {
- "minimist": "^1.2.0"
- },
- "bin": {
- "json5": "lib/cli.js"
- }
- },
- "node_modules/jsonfile": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
- "dev": true,
- "dependencies": {
- "universalify": "^2.0.0"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/loader-utils": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
- "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
- "dependencies": {
- "big.js": "^5.2.2",
- "emojis-list": "^2.0.0",
- "json5": "^1.0.1"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dependencies": {
- "p-locate": "^4.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
- },
- "node_modules/lodash.sortby": {
- "version": "4.7.0",
- "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
- "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg="
- },
- "node_modules/lodash.toarray": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz",
- "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=",
- "dev": true
- },
- "node_modules/lodash.topath": {
- "version": "4.5.2",
- "resolved": "https://registry.npmjs.org/lodash.topath/-/lodash.topath-4.5.2.tgz",
- "integrity": "sha1-NhY1Hzu6YZlKCTGYlmC9AyVP0Ak=",
- "dev": true
- },
- "node_modules/loose-envify": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
- "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
- "dependencies": {
- "js-tokens": "^3.0.0 || ^4.0.0"
- },
- "bin": {
- "loose-envify": "cli.js"
- }
- },
- "node_modules/make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
- "dependencies": {
- "semver": "^6.0.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/marked": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/marked/-/marked-2.0.4.tgz",
- "integrity": "sha512-MIL0xKRDQM3DE7dJr/wa6JV0EmK9yZ3cwuTc2bu66FNm/tmEMm9cJCgJZpt9R+K1T+pB2iBNV55wvnwSd345zg==",
- "bin": {
- "marked": "bin/marked"
- },
- "engines": {
- "node": ">= 8.16.2"
- }
- },
- "node_modules/md5.js": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
- "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
- "dependencies": {
- "hash-base": "^3.0.0",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.1.2"
- }
- },
- "node_modules/merge-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
- "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="
- },
- "node_modules/merge2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "dev": true,
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/micromatch": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
- "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
- "dev": true,
- "dependencies": {
- "braces": "^3.0.1",
- "picomatch": "^2.2.3"
- },
- "engines": {
- "node": ">=8.6"
- }
- },
- "node_modules/miller-rabin": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
- "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
- "dependencies": {
- "bn.js": "^4.0.0",
- "brorand": "^1.0.1"
- },
- "bin": {
- "miller-rabin": "bin/miller-rabin"
- }
- },
- "node_modules/miller-rabin/node_modules/bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
- },
- "node_modules/minimalistic-assert": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
- "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A=="
- },
- "node_modules/minimalistic-crypto-utils": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
- "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo="
- },
- "node_modules/minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/minimist": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
- "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
- },
- "node_modules/modern-normalize": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/modern-normalize/-/modern-normalize-1.1.0.tgz",
- "integrity": "sha512-2lMlY1Yc1+CUy0gw4H95uNN7vjbpoED7NNRSBHE25nWfLBdmMzFCsPshlzbxHz+gYMcBEUN8V4pU16prcdPSgA==",
- "dev": true,
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- },
- "node_modules/nanoid": {
- "version": "3.1.23",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz",
- "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==",
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
- "engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
- }
- },
- "node_modules/native-url": {
- "version": "0.3.4",
- "resolved": "https://registry.npmjs.org/native-url/-/native-url-0.3.4.tgz",
- "integrity": "sha512-6iM8R99ze45ivyH8vybJ7X0yekIcPf5GgLV5K0ENCbmRcaRIDoj37BC8iLEmaaBfqqb8enuZ5p0uhY+lVAbAcA==",
- "dependencies": {
- "querystring": "^0.2.0"
- }
- },
- "node_modules/next": {
- "version": "10.2.0",
- "resolved": "https://registry.npmjs.org/next/-/next-10.2.0.tgz",
- "integrity": "sha512-PKDKCSF7s82xudu3kQhOEaokxggpbLEWouEUtzP6OqV0YqKYHF+Ff+BFLycEem8ixtTM2M6ElN0VRJcskJfxPQ==",
- "dependencies": {
- "@babel/runtime": "7.12.5",
- "@hapi/accept": "5.0.1",
- "@next/env": "10.2.0",
- "@next/polyfill-module": "10.2.0",
- "@next/react-dev-overlay": "10.2.0",
- "@next/react-refresh-utils": "10.2.0",
- "@opentelemetry/api": "0.14.0",
- "assert": "2.0.0",
- "ast-types": "0.13.2",
- "browserify-zlib": "0.2.0",
- "browserslist": "4.16.1",
- "buffer": "5.6.0",
- "caniuse-lite": "^1.0.30001179",
- "chalk": "2.4.2",
- "chokidar": "3.5.1",
- "constants-browserify": "1.0.0",
- "crypto-browserify": "3.12.0",
- "cssnano-simple": "2.0.0",
- "domain-browser": "4.19.0",
- "encoding": "0.1.13",
- "etag": "1.8.1",
- "find-cache-dir": "3.3.1",
- "get-orientation": "1.1.2",
- "https-browserify": "1.0.0",
- "jest-worker": "27.0.0-next.5",
- "native-url": "0.3.4",
- "node-fetch": "2.6.1",
- "node-html-parser": "1.4.9",
- "node-libs-browser": "^2.2.1",
- "os-browserify": "0.3.0",
- "p-limit": "3.1.0",
- "path-browserify": "1.0.1",
- "pnp-webpack-plugin": "1.6.4",
- "postcss": "8.2.13",
- "process": "0.11.10",
- "prop-types": "15.7.2",
- "querystring-es3": "0.2.1",
- "raw-body": "2.4.1",
- "react-is": "16.13.1",
- "react-refresh": "0.8.3",
- "stream-browserify": "3.0.0",
- "stream-http": "3.1.1",
- "string_decoder": "1.3.0",
- "styled-jsx": "3.3.2",
- "timers-browserify": "2.0.12",
- "tty-browserify": "0.0.1",
- "use-subscription": "1.5.1",
- "util": "0.12.3",
- "vm-browserify": "1.1.2",
- "watchpack": "2.1.1"
- },
- "bin": {
- "next": "dist/bin/next"
- },
- "engines": {
- "node": ">=10.13.0"
- },
- "peerDependencies": {
- "fibers": ">= 3.1.0",
- "node-sass": "^4.0.0 || ^5.0.0",
- "react": "^16.6.0 || ^17",
- "react-dom": "^16.6.0 || ^17",
- "sass": "^1.3.0"
- },
- "peerDependenciesMeta": {
- "fibers": {
- "optional": true
- },
- "node-sass": {
- "optional": true
- },
- "sass": {
- "optional": true
- }
- }
- },
- "node_modules/next/node_modules/postcss": {
- "version": "8.2.13",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.13.tgz",
- "integrity": "sha512-FCE5xLH+hjbzRdpbRb1IMCvPv9yZx2QnDarBEYSN0N0HYk+TcXsEhwdFcFb+SRWOKzKGErhIEbBK2ogyLdTtfQ==",
- "dependencies": {
- "colorette": "^1.2.2",
- "nanoid": "^3.1.22",
- "source-map": "^0.6.1"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/next/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/node-emoji": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz",
- "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==",
- "dev": true,
- "dependencies": {
- "lodash.toarray": "^4.4.0"
- }
- },
- "node_modules/node-fetch": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
- "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==",
- "engines": {
- "node": "4.x || >=6.0.0"
- }
- },
- "node_modules/node-html-parser": {
- "version": "1.4.9",
- "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-1.4.9.tgz",
- "integrity": "sha512-UVcirFD1Bn0O+TSmloHeHqZZCxHjvtIeGdVdGMhyZ8/PWlEiZaZ5iJzR189yKZr8p0FXN58BUeC7RHRkf/KYGw==",
- "dependencies": {
- "he": "1.2.0"
- }
- },
- "node_modules/node-libs-browser": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz",
- "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==",
- "dependencies": {
- "assert": "^1.1.1",
- "browserify-zlib": "^0.2.0",
- "buffer": "^4.3.0",
- "console-browserify": "^1.1.0",
- "constants-browserify": "^1.0.0",
- "crypto-browserify": "^3.11.0",
- "domain-browser": "^1.1.1",
- "events": "^3.0.0",
- "https-browserify": "^1.0.0",
- "os-browserify": "^0.3.0",
- "path-browserify": "0.0.1",
- "process": "^0.11.10",
- "punycode": "^1.2.4",
- "querystring-es3": "^0.2.0",
- "readable-stream": "^2.3.3",
- "stream-browserify": "^2.0.1",
- "stream-http": "^2.7.2",
- "string_decoder": "^1.0.0",
- "timers-browserify": "^2.0.4",
- "tty-browserify": "0.0.0",
- "url": "^0.11.0",
- "util": "^0.11.0",
- "vm-browserify": "^1.0.1"
- }
- },
- "node_modules/node-libs-browser/node_modules/assert": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
- "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
- "dependencies": {
- "object-assign": "^4.1.1",
- "util": "0.10.3"
- }
- },
- "node_modules/node-libs-browser/node_modules/assert/node_modules/inherits": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
- "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE="
- },
- "node_modules/node-libs-browser/node_modules/assert/node_modules/util": {
- "version": "0.10.3",
- "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
- "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
- "dependencies": {
- "inherits": "2.0.1"
- }
- },
- "node_modules/node-libs-browser/node_modules/buffer": {
- "version": "4.9.2",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
- "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
- "dependencies": {
- "base64-js": "^1.0.2",
- "ieee754": "^1.1.4",
- "isarray": "^1.0.0"
- }
- },
- "node_modules/node-libs-browser/node_modules/domain-browser": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
- "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
- "engines": {
- "node": ">=0.4",
- "npm": ">=1.2"
- }
- },
- "node_modules/node-libs-browser/node_modules/inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
- },
- "node_modules/node-libs-browser/node_modules/path-browserify": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
- "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ=="
- },
- "node_modules/node-libs-browser/node_modules/readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dependencies": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "node_modules/node-libs-browser/node_modules/safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
- },
- "node_modules/node-libs-browser/node_modules/stream-browserify": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
- "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
- "dependencies": {
- "inherits": "~2.0.1",
- "readable-stream": "^2.0.2"
- }
- },
- "node_modules/node-libs-browser/node_modules/stream-http": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
- "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
- "dependencies": {
- "builtin-status-codes": "^3.0.0",
- "inherits": "^2.0.1",
- "readable-stream": "^2.3.6",
- "to-arraybuffer": "^1.0.0",
- "xtend": "^4.0.0"
- }
- },
- "node_modules/node-libs-browser/node_modules/string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
- },
- "node_modules/node-libs-browser/node_modules/tty-browserify": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
- "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY="
- },
- "node_modules/node-libs-browser/node_modules/util": {
- "version": "0.11.1",
- "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
- "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
- "dependencies": {
- "inherits": "2.0.3"
- }
- },
- "node_modules/node-releases": {
- "version": "1.1.71",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz",
- "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg=="
- },
- "node_modules/normalize-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/normalize-range": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
- "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-hash": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.1.1.tgz",
- "integrity": "sha512-VOJmgmS+7wvXf8CjbQmimtCnEx3IAoLxI3fp2fbWehxrWBcAQFbk+vcwb6vzR0VZv/eNCJ/27j151ZTwqW/JeQ==",
- "dev": true,
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/object-inspect": {
- "version": "1.10.3",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz",
- "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/object-is": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz",
- "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==",
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/object-keys": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
- "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/object.assign": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
- "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
- "dependencies": {
- "call-bind": "^1.0.0",
- "define-properties": "^1.1.3",
- "has-symbols": "^1.0.1",
- "object-keys": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
- "dev": true,
- "dependencies": {
- "wrappy": "1"
- }
- },
- "node_modules/os-browserify": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
- "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc="
- },
- "node_modules/p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "dependencies": {
- "yocto-queue": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dependencies": {
- "p-limit": "^2.2.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/p-locate/node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/pako": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
- "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
- },
- "node_modules/parse-asn1": {
- "version": "5.1.6",
- "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz",
- "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==",
- "dependencies": {
- "asn1.js": "^5.2.0",
- "browserify-aes": "^1.0.0",
- "evp_bytestokey": "^1.0.0",
- "pbkdf2": "^3.0.3",
- "safe-buffer": "^5.1.1"
- }
- },
- "node_modules/parse-glob": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
- "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
- "dev": true,
- "dependencies": {
- "glob-base": "^0.3.0",
- "is-dotfile": "^1.0.0",
- "is-extglob": "^1.0.0",
- "is-glob": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/parse-glob/node_modules/is-extglob": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
- "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/parse-glob/node_modules/is-glob": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
- "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
- "dev": true,
- "dependencies": {
- "is-extglob": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/path-browserify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
- "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="
- },
- "node_modules/path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/path-parse": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
- "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
- "dev": true
- },
- "node_modules/pbkdf2": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz",
- "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==",
- "dependencies": {
- "create-hash": "^1.1.2",
- "create-hmac": "^1.1.4",
- "ripemd160": "^2.0.1",
- "safe-buffer": "^5.0.1",
- "sha.js": "^2.4.8"
- },
- "engines": {
- "node": ">=0.12"
- }
- },
- "node_modules/picomatch": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz",
- "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==",
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/pkg-dir": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
- "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
- "dependencies": {
- "find-up": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/platform": {
- "version": "1.3.6",
- "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz",
- "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg=="
- },
- "node_modules/pnp-webpack-plugin": {
- "version": "1.6.4",
- "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz",
- "integrity": "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==",
- "dependencies": {
- "ts-pnp": "^1.1.6"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/postcss": {
- "version": "8.2.15",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.15.tgz",
- "integrity": "sha512-2zO3b26eJD/8rb106Qu2o7Qgg52ND5HPjcyQiK2B98O388h43A448LCslC0dI2P97wCAQRJsFvwTRcXxTKds+Q==",
- "dependencies": {
- "colorette": "^1.2.2",
- "nanoid": "^3.1.23",
- "source-map": "^0.6.1"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-functions": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/postcss-functions/-/postcss-functions-3.0.0.tgz",
- "integrity": "sha1-DpTQFERwCkgd4g3k1V+yZAVkJQ4=",
- "dev": true,
- "dependencies": {
- "glob": "^7.1.2",
- "object-assign": "^4.1.1",
- "postcss": "^6.0.9",
- "postcss-value-parser": "^3.3.0"
- }
- },
- "node_modules/postcss-functions/node_modules/postcss": {
- "version": "6.0.23",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
- "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.1",
- "source-map": "^0.6.1",
- "supports-color": "^5.4.0"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/postcss-functions/node_modules/postcss-value-parser": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
- "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
- "dev": true
- },
- "node_modules/postcss-functions/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-js": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-3.0.3.tgz",
- "integrity": "sha512-gWnoWQXKFw65Hk/mi2+WTQTHdPD5UJdDXZmX073EY/B3BWnYjO4F4t0VneTCnCGQ5E5GsCdMkzPaTXwl3r5dJw==",
- "dev": true,
- "dependencies": {
- "camelcase-css": "^2.0.1",
- "postcss": "^8.1.6"
- },
- "engines": {
- "node": ">=10.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-nested": {
- "version": "5.0.5",
- "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.5.tgz",
- "integrity": "sha512-GSRXYz5bccobpTzLQZXOnSOfKl6TwVr5CyAQJUPub4nuRJSOECK5AqurxVgmtxP48p0Kc/ndY/YyS1yqldX0Ew==",
- "dev": true,
- "dependencies": {
- "postcss-selector-parser": "^6.0.4"
- },
- "engines": {
- "node": ">=10.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- "peerDependencies": {
- "postcss": "^8.1.13"
- }
- },
- "node_modules/postcss-selector-parser": {
- "version": "6.0.6",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz",
- "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==",
- "dev": true,
- "dependencies": {
- "cssesc": "^3.0.0",
- "util-deprecate": "^1.0.2"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/postcss-value-parser": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
- "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==",
- "dev": true
- },
- "node_modules/postcss/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/pretty-hrtime": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
- "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=",
- "dev": true,
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/process": {
- "version": "0.11.10",
- "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
- "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
- "engines": {
- "node": ">= 0.6.0"
- }
- },
- "node_modules/process-nextick-args": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
- "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
- },
- "node_modules/prop-types": {
- "version": "15.7.2",
- "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
- "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
- "dependencies": {
- "loose-envify": "^1.4.0",
- "object-assign": "^4.1.1",
- "react-is": "^16.8.1"
- }
- },
- "node_modules/public-encrypt": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
- "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
- "dependencies": {
- "bn.js": "^4.1.0",
- "browserify-rsa": "^4.0.0",
- "create-hash": "^1.1.0",
- "parse-asn1": "^5.0.0",
- "randombytes": "^2.0.1",
- "safe-buffer": "^5.1.2"
- }
- },
- "node_modules/public-encrypt/node_modules/bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
- },
- "node_modules/punycode": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
- "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
- },
- "node_modules/purgecss": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-3.1.3.tgz",
- "integrity": "sha512-hRSLN9mguJ2lzlIQtW4qmPS2kh6oMnA9RxdIYK8sz18QYqd6ePp4GNDl18oWHA1f2v2NEQIh51CO8s/E3YGckQ==",
- "dev": true,
- "dependencies": {
- "commander": "^6.0.0",
- "glob": "^7.0.0",
- "postcss": "^8.2.1",
- "postcss-selector-parser": "^6.0.2"
- },
- "bin": {
- "purgecss": "bin/purgecss.js"
- }
- },
- "node_modules/querystring": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz",
- "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==",
- "engines": {
- "node": ">=0.4.x"
- }
- },
- "node_modules/querystring-es3": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
- "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
- "engines": {
- "node": ">=0.4.x"
- }
- },
- "node_modules/queue-microtask": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/quick-lru": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
- "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/randombytes": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
- "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
- "dependencies": {
- "safe-buffer": "^5.1.0"
- }
- },
- "node_modules/randomfill": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
- "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
- "dependencies": {
- "randombytes": "^2.0.5",
- "safe-buffer": "^5.1.0"
- }
- },
- "node_modules/raw-body": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz",
- "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==",
- "dependencies": {
- "bytes": "3.1.0",
- "http-errors": "1.7.3",
- "iconv-lite": "0.4.24",
- "unpipe": "1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/raw-body/node_modules/iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/react": {
- "version": "17.0.2",
- "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz",
- "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==",
- "dependencies": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/react-dom": {
- "version": "17.0.2",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz",
- "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==",
- "dependencies": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1",
- "scheduler": "^0.20.2"
- },
- "peerDependencies": {
- "react": "17.0.2"
- }
- },
- "node_modules/react-icons": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.2.0.tgz",
- "integrity": "sha512-rmzEDFt+AVXRzD7zDE21gcxyBizD/3NqjbX6cmViAgdqfJ2UiLer8927/QhhrXQV7dEj/1EGuOTPp7JnLYVJKQ==",
- "peerDependencies": {
- "react": "*"
- }
- },
- "node_modules/react-is": {
- "version": "16.13.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
- "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
- },
- "node_modules/react-refresh": {
- "version": "0.8.3",
- "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.8.3.tgz",
- "integrity": "sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/readdirp": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz",
- "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==",
- "dependencies": {
- "picomatch": "^2.2.1"
- },
- "engines": {
- "node": ">=8.10.0"
- }
- },
- "node_modules/reduce-css-calc": {
- "version": "2.1.8",
- "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz",
- "integrity": "sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==",
- "dev": true,
- "dependencies": {
- "css-unit-converter": "^1.1.1",
- "postcss-value-parser": "^3.3.0"
- }
- },
- "node_modules/reduce-css-calc/node_modules/postcss-value-parser": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
- "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
- "dev": true
- },
- "node_modules/regenerator-runtime": {
- "version": "0.13.7",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz",
- "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew=="
- },
- "node_modules/resolve": {
- "version": "1.20.0",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
- "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
- "dev": true,
- "dependencies": {
- "is-core-module": "^2.2.0",
- "path-parse": "^1.0.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/reusify": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
- "dev": true,
- "engines": {
- "iojs": ">=1.0.0",
- "node": ">=0.10.0"
- }
- },
- "node_modules/ripemd160": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
- "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
- "dependencies": {
- "hash-base": "^3.0.0",
- "inherits": "^2.0.1"
- }
- },
- "node_modules/run-parallel": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
- "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "dependencies": {
- "queue-microtask": "^1.2.2"
- }
- },
- "node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
- },
- "node_modules/scheduler": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz",
- "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==",
- "dependencies": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1"
- }
- },
- "node_modules/section-matter": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz",
- "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==",
- "dependencies": {
- "extend-shallow": "^2.0.1",
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/setimmediate": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
- "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
- },
- "node_modules/setprototypeof": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
- "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
- },
- "node_modules/sha.js": {
- "version": "2.4.11",
- "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
- "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
- "dependencies": {
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- },
- "bin": {
- "sha.js": "bin.js"
- }
- },
- "node_modules/shell-quote": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz",
- "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg=="
- },
- "node_modules/simple-swizzle": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
- "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=",
- "dev": true,
- "dependencies": {
- "is-arrayish": "^0.3.1"
- }
- },
- "node_modules/source-map": {
- "version": "0.8.0-beta.0",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz",
- "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==",
- "dependencies": {
- "whatwg-url": "^7.0.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
- },
- "node_modules/stacktrace-parser": {
- "version": "0.1.10",
- "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz",
- "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==",
- "dependencies": {
- "type-fest": "^0.7.1"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/statuses": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/stream-browserify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz",
- "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==",
- "dependencies": {
- "inherits": "~2.0.4",
- "readable-stream": "^3.5.0"
- }
- },
- "node_modules/stream-http": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.1.1.tgz",
- "integrity": "sha512-S7OqaYu0EkFpgeGFb/NPOoPLxFko7TPqtEeFg5DXPB4v/KETHG0Ln6fRFrNezoelpaDKmycEmmZ81cC9DAwgYg==",
- "dependencies": {
- "builtin-status-codes": "^3.0.0",
- "inherits": "^2.0.4",
- "readable-stream": "^3.6.0",
- "xtend": "^4.0.2"
- }
- },
- "node_modules/stream-parser": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz",
- "integrity": "sha1-FhhUhpRCACGhGC/wrxkRwSl2F3M=",
- "dependencies": {
- "debug": "2"
- }
- },
- "node_modules/string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "dependencies": {
- "safe-buffer": "~5.2.0"
- }
- },
- "node_modules/string-hash": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz",
- "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs="
- },
- "node_modules/string.prototype.trimend": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz",
- "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==",
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/string.prototype.trimstart": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz",
- "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==",
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
- "dependencies": {
- "ansi-regex": "^5.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-bom-string": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz",
- "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/styled-jsx": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-3.3.2.tgz",
- "integrity": "sha512-daAkGd5mqhbBhLd6jYAjYBa9LpxYCzsgo/f6qzPdFxVB8yoGbhxvzQgkC0pfmCVvW3JuAEBn0UzFLBfkHVZG1g==",
- "dependencies": {
- "@babel/types": "7.8.3",
- "babel-plugin-syntax-jsx": "6.18.0",
- "convert-source-map": "1.7.0",
- "loader-utils": "1.2.3",
- "source-map": "0.7.3",
- "string-hash": "1.1.3",
- "stylis": "3.5.4",
- "stylis-rule-sheet": "0.0.10"
- },
- "peerDependencies": {
- "react": "15.x.x || 16.x.x || 17.x.x"
- }
- },
- "node_modules/styled-jsx/node_modules/source-map": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
- "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/stylis": {
- "version": "3.5.4",
- "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.5.4.tgz",
- "integrity": "sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q=="
- },
- "node_modules/stylis-rule-sheet": {
- "version": "0.0.10",
- "resolved": "https://registry.npmjs.org/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz",
- "integrity": "sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw==",
- "peerDependencies": {
- "stylis": "^3.5.0"
- }
- },
- "node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/tailwindcss": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-2.1.2.tgz",
- "integrity": "sha512-T5t+wwd+/hsOyRw2HJuFuv0LTUm3MUdHm2DJ94GPVgzqwPPFa9XxX0KlwLWupUuiOUj6uiKURCzYPHFcuPch/w==",
- "dev": true,
- "dependencies": {
- "@fullhuman/postcss-purgecss": "^3.1.3",
- "bytes": "^3.0.0",
- "chalk": "^4.1.0",
- "chokidar": "^3.5.1",
- "color": "^3.1.3",
- "detective": "^5.2.0",
- "didyoumean": "^1.2.1",
- "dlv": "^1.1.3",
- "fast-glob": "^3.2.5",
- "fs-extra": "^9.1.0",
- "html-tags": "^3.1.0",
- "lodash": "^4.17.21",
- "lodash.topath": "^4.5.2",
- "modern-normalize": "^1.0.0",
- "node-emoji": "^1.8.1",
- "normalize-path": "^3.0.0",
- "object-hash": "^2.1.1",
- "parse-glob": "^3.0.4",
- "postcss-functions": "^3",
- "postcss-js": "^3.0.3",
- "postcss-nested": "5.0.5",
- "postcss-selector-parser": "^6.0.4",
- "postcss-value-parser": "^4.1.0",
- "pretty-hrtime": "^1.0.3",
- "quick-lru": "^5.1.1",
- "reduce-css-calc": "^2.1.8",
- "resolve": "^1.20.0"
- },
- "bin": {
- "tailwind": "lib/cli.js",
- "tailwindcss": "lib/cli.js"
- },
- "engines": {
- "node": ">=12.13.0"
- },
- "peerDependencies": {
- "autoprefixer": "^10.0.2",
- "postcss": "^8.0.9"
- }
- },
- "node_modules/tailwindcss/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/tailwindcss/node_modules/chalk": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
- "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/tailwindcss/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/tailwindcss/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/tailwindcss/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/tailwindcss/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/timers-browserify": {
- "version": "2.0.12",
- "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz",
- "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==",
- "dependencies": {
- "setimmediate": "^1.0.4"
- },
- "engines": {
- "node": ">=0.6.0"
- }
- },
- "node_modules/to-arraybuffer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
- "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M="
- },
- "node_modules/to-fast-properties": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
- "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dependencies": {
- "is-number": "^7.0.0"
- },
- "engines": {
- "node": ">=8.0"
- }
- },
- "node_modules/toidentifier": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
- "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
- "engines": {
- "node": ">=0.6"
- }
- },
- "node_modules/tr46": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
- "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
- "dependencies": {
- "punycode": "^2.1.0"
- }
- },
- "node_modules/tr46/node_modules/punycode": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ts-pnp": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz",
- "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==",
- "engines": {
- "node": ">=6"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/tty-browserify": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz",
- "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw=="
- },
- "node_modules/type-fest": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz",
- "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/unbox-primitive": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz",
- "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==",
- "dependencies": {
- "function-bind": "^1.1.1",
- "has-bigints": "^1.0.1",
- "has-symbols": "^1.0.2",
- "which-boxed-primitive": "^1.0.2"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/universalify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
- "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
- "dev": true,
- "engines": {
- "node": ">= 10.0.0"
- }
- },
- "node_modules/unpipe": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
- "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/url": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
- "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
- "dependencies": {
- "punycode": "1.3.2",
- "querystring": "0.2.0"
- }
- },
- "node_modules/url/node_modules/punycode": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
- "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0="
- },
- "node_modules/url/node_modules/querystring": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
- "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
- "engines": {
- "node": ">=0.4.x"
- }
- },
- "node_modules/use-subscription": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/use-subscription/-/use-subscription-1.5.1.tgz",
- "integrity": "sha512-Xv2a1P/yReAjAbhylMfFplFKj9GssgTwN7RlcTxBujFQcloStWNDQdc4g4NRWH9xS4i/FDk04vQBptAXoF3VcA==",
- "dependencies": {
- "object-assign": "^4.1.1"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0"
- }
- },
- "node_modules/util": {
- "version": "0.12.3",
- "resolved": "https://registry.npmjs.org/util/-/util-0.12.3.tgz",
- "integrity": "sha512-I8XkoQwE+fPQEhy9v012V+TSdH2kp9ts29i20TaaDUXsg7x/onePbhFJUExBfv/2ay1ZOp/Vsm3nDlmnFGSAog==",
- "dependencies": {
- "inherits": "^2.0.3",
- "is-arguments": "^1.0.4",
- "is-generator-function": "^1.0.7",
- "is-typed-array": "^1.1.3",
- "safe-buffer": "^5.1.2",
- "which-typed-array": "^1.1.2"
- }
- },
- "node_modules/util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
- },
- "node_modules/vm-browserify": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz",
- "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ=="
- },
- "node_modules/watchpack": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.1.1.tgz",
- "integrity": "sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw==",
- "dependencies": {
- "glob-to-regexp": "^0.4.1",
- "graceful-fs": "^4.1.2"
- },
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/webidl-conversions": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
- "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg=="
- },
- "node_modules/whatwg-url": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz",
- "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==",
- "dependencies": {
- "lodash.sortby": "^4.7.0",
- "tr46": "^1.0.1",
- "webidl-conversions": "^4.0.2"
- }
- },
- "node_modules/which-boxed-primitive": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
- "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
- "dependencies": {
- "is-bigint": "^1.0.1",
- "is-boolean-object": "^1.1.0",
- "is-number-object": "^1.0.4",
- "is-string": "^1.0.5",
- "is-symbol": "^1.0.3"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/which-typed-array": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.4.tgz",
- "integrity": "sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA==",
- "dependencies": {
- "available-typed-arrays": "^1.0.2",
- "call-bind": "^1.0.0",
- "es-abstract": "^1.18.0-next.1",
- "foreach": "^2.0.5",
- "function-bind": "^1.1.1",
- "has-symbols": "^1.0.1",
- "is-typed-array": "^1.1.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
- "dev": true
- },
- "node_modules/xtend": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
- "engines": {
- "node": ">=0.4"
- }
- },
- "node_modules/yocto-queue": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- }
- },
- "dependencies": {
- "@babel/code-frame": {
- "version": "7.12.11",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz",
- "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==",
- "requires": {
- "@babel/highlight": "^7.10.4"
- }
- },
- "@babel/helper-validator-identifier": {
- "version": "7.14.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz",
- "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A=="
- },
- "@babel/highlight": {
- "version": "7.14.0",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz",
- "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==",
- "requires": {
- "@babel/helper-validator-identifier": "^7.14.0",
- "chalk": "^2.0.0",
- "js-tokens": "^4.0.0"
- }
- },
- "@babel/runtime": {
- "version": "7.12.5",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz",
- "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==",
- "requires": {
- "regenerator-runtime": "^0.13.4"
- }
- },
- "@babel/types": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz",
- "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==",
- "requires": {
- "esutils": "^2.0.2",
- "lodash": "^4.17.13",
- "to-fast-properties": "^2.0.0"
- }
- },
- "@fullhuman/postcss-purgecss": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/@fullhuman/postcss-purgecss/-/postcss-purgecss-3.1.3.tgz",
- "integrity": "sha512-kwOXw8fZ0Lt1QmeOOrd+o4Ibvp4UTEBFQbzvWldjlKv5n+G9sXfIPn1hh63IQIL8K8vbvv1oYMJiIUbuy9bGaA==",
- "dev": true,
- "requires": {
- "purgecss": "^3.1.3"
- }
- },
- "@hapi/accept": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/@hapi/accept/-/accept-5.0.1.tgz",
- "integrity": "sha512-fMr4d7zLzsAXo28PRRQPXR1o2Wmu+6z+VY1UzDp0iFo13Twj8WePakwXBiqn3E1aAlTpSNzCXdnnQXFhst8h8Q==",
- "requires": {
- "@hapi/boom": "9.x.x",
- "@hapi/hoek": "9.x.x"
- }
- },
- "@hapi/boom": {
- "version": "9.1.2",
- "resolved": "https://registry.npmjs.org/@hapi/boom/-/boom-9.1.2.tgz",
- "integrity": "sha512-uJEJtiNHzKw80JpngDGBCGAmWjBtzxDCz17A9NO2zCi8LLBlb5Frpq4pXwyN+2JQMod4pKz5BALwyneCgDg89Q==",
- "requires": {
- "@hapi/hoek": "9.x.x"
- }
- },
- "@hapi/hoek": {
- "version": "9.2.0",
- "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.0.tgz",
- "integrity": "sha512-sqKVVVOe5ivCaXDWivIJYVSaEgdQK9ul7a4Kity5Iw7u9+wBAPbX1RMSnLLmp7O4Vzj0WOWwMAJsTL00xwaNug=="
- },
- "@next/env": {
- "version": "10.2.0",
- "resolved": "https://registry.npmjs.org/@next/env/-/env-10.2.0.tgz",
- "integrity": "sha512-tsWBsn1Rb6hXRaHc/pWMCpZ4Ipkf3OCbZ54ef5ukgIyEvzzGdGFXQshPP2AF7yb+8yMpunWs7vOMZW3e8oPF6A=="
- },
- "@next/polyfill-module": {
- "version": "10.2.0",
- "resolved": "https://registry.npmjs.org/@next/polyfill-module/-/polyfill-module-10.2.0.tgz",
- "integrity": "sha512-Nl3GexIUXsmuggkUqrRFyE/2k7UI44JaVzSywtXEyHzxpZm2a5bdMaWuC89pgLiFDDOqmbqyLAbtwm5lNxa7Eg=="
- },
- "@next/react-dev-overlay": {
- "version": "10.2.0",
- "resolved": "https://registry.npmjs.org/@next/react-dev-overlay/-/react-dev-overlay-10.2.0.tgz",
- "integrity": "sha512-PRIAoWog41hLN4iJ8dChKp4ysOX0Q8yiNQ/cwzyqEd3EjugkDV5OiKl3mumGKaApJaIra1MX6j1wgQRuLhuWMA==",
- "requires": {
- "@babel/code-frame": "7.12.11",
- "anser": "1.4.9",
- "chalk": "4.0.0",
- "classnames": "2.2.6",
- "css.escape": "1.5.1",
- "data-uri-to-buffer": "3.0.1",
- "platform": "1.3.6",
- "shell-quote": "1.7.2",
- "source-map": "0.8.0-beta.0",
- "stacktrace-parser": "0.1.10",
- "strip-ansi": "6.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.0.0.tgz",
- "integrity": "sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==",
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "@next/react-refresh-utils": {
- "version": "10.2.0",
- "resolved": "https://registry.npmjs.org/@next/react-refresh-utils/-/react-refresh-utils-10.2.0.tgz",
- "integrity": "sha512-3I31K9B4hEQRl7yQ44Umyz+szHtuMJrNdwsgJGhoEnUCXSBRHp5wv5Zv8eDa2NewSbe53b2C0oOpivrzmdBakw==",
- "requires": {}
- },
- "@nodelib/fs.scandir": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz",
- "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==",
- "dev": true,
- "requires": {
- "@nodelib/fs.stat": "2.0.4",
- "run-parallel": "^1.1.9"
- }
- },
- "@nodelib/fs.stat": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz",
- "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==",
- "dev": true
- },
- "@nodelib/fs.walk": {
- "version": "1.2.6",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz",
- "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==",
- "dev": true,
- "requires": {
- "@nodelib/fs.scandir": "2.1.4",
- "fastq": "^1.6.0"
- }
- },
- "@opentelemetry/api": {
- "version": "0.14.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-0.14.0.tgz",
- "integrity": "sha512-L7RMuZr5LzMmZiQSQDy9O1jo0q+DaLy6XpYJfIGfYSfoJA5qzYwUP3sP1uMIQ549DvxAgM3ng85EaPTM/hUHwQ==",
- "requires": {
- "@opentelemetry/context-base": "^0.14.0"
- }
- },
- "@opentelemetry/context-base": {
- "version": "0.14.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/context-base/-/context-base-0.14.0.tgz",
- "integrity": "sha512-sDOAZcYwynHFTbLo6n8kIbLiVF3a3BLkrmehJUyEbT9F+Smbi47kLGS2gG2g0fjBLR/Lr1InPD7kXL7FaTqEkw=="
- },
- "@types/node": {
- "version": "15.0.2",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-15.0.2.tgz",
- "integrity": "sha512-p68+a+KoxpoB47015IeYZYRrdqMUcpbK8re/zpFB8Ld46LHC1lPEbp3EXgkEhAYEcPvjJF6ZO+869SQ0aH1dcA=="
- },
- "acorn": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
- "dev": true
- },
- "acorn-node": {
- "version": "1.8.2",
- "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz",
- "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==",
- "dev": true,
- "requires": {
- "acorn": "^7.0.0",
- "acorn-walk": "^7.0.0",
- "xtend": "^4.0.2"
- }
- },
- "acorn-walk": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
- "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
- "dev": true
- },
- "anser": {
- "version": "1.4.9",
- "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.9.tgz",
- "integrity": "sha512-AI+BjTeGt2+WFk4eWcqbQ7snZpDBt8SaLlj0RT2h5xfdWaiy51OjYvqwMrNzJLGy8iOAL6nKDITWO+rd4MkYEA=="
- },
- "ansi-regex": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
- "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg=="
- },
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "anymatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
- "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
- "requires": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- }
- },
- "argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
- "requires": {
- "sprintf-js": "~1.0.2"
- }
- },
- "array-filter": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz",
- "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM="
- },
- "asn1.js": {
- "version": "5.4.1",
- "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz",
- "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==",
- "requires": {
- "bn.js": "^4.0.0",
- "inherits": "^2.0.1",
- "minimalistic-assert": "^1.0.0",
- "safer-buffer": "^2.1.0"
- },
- "dependencies": {
- "bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
- }
- }
- },
- "assert": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz",
- "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==",
- "requires": {
- "es6-object-assign": "^1.1.0",
- "is-nan": "^1.2.1",
- "object-is": "^1.0.1",
- "util": "^0.12.0"
- }
- },
- "ast-types": {
- "version": "0.13.2",
- "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.2.tgz",
- "integrity": "sha512-uWMHxJxtfj/1oZClOxDEV1sQ1HCDkA4MG8Gr69KKeBjEVH0R84WlejZ0y2DcwyBlpAEMltmVYkVgqfLFb2oyiA=="
- },
- "at-least-node": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
- "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
- "dev": true
- },
- "autoprefixer": {
- "version": "10.2.5",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.2.5.tgz",
- "integrity": "sha512-7H4AJZXvSsn62SqZyJCP+1AWwOuoYpUfK6ot9vm0e87XD6mT8lDywc9D9OTJPMULyGcvmIxzTAMeG2Cc+YX+fA==",
- "dev": true,
- "requires": {
- "browserslist": "^4.16.3",
- "caniuse-lite": "^1.0.30001196",
- "colorette": "^1.2.2",
- "fraction.js": "^4.0.13",
- "normalize-range": "^0.1.2",
- "postcss-value-parser": "^4.1.0"
- },
- "dependencies": {
- "browserslist": {
- "version": "4.16.6",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz",
- "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==",
- "dev": true,
- "requires": {
- "caniuse-lite": "^1.0.30001219",
- "colorette": "^1.2.2",
- "electron-to-chromium": "^1.3.723",
- "escalade": "^3.1.1",
- "node-releases": "^1.1.71"
- }
- }
- }
- },
- "available-typed-arrays": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz",
- "integrity": "sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ==",
- "requires": {
- "array-filter": "^1.0.0"
- }
- },
- "babel-plugin-syntax-jsx": {
- "version": "6.18.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz",
- "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY="
- },
- "balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true
- },
- "base64-js": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
- },
- "big.js": {
- "version": "5.2.2",
- "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
- "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ=="
- },
- "binary-extensions": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
- "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA=="
- },
- "bn.js": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz",
- "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw=="
- },
- "brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "requires": {
- "fill-range": "^7.0.1"
- }
- },
- "brorand": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
- "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8="
- },
- "browserify-aes": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
- "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
- "requires": {
- "buffer-xor": "^1.0.3",
- "cipher-base": "^1.0.0",
- "create-hash": "^1.1.0",
- "evp_bytestokey": "^1.0.3",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "browserify-cipher": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
- "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
- "requires": {
- "browserify-aes": "^1.0.4",
- "browserify-des": "^1.0.0",
- "evp_bytestokey": "^1.0.0"
- }
- },
- "browserify-des": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
- "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
- "requires": {
- "cipher-base": "^1.0.1",
- "des.js": "^1.0.0",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.1.2"
- }
- },
- "browserify-rsa": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz",
- "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==",
- "requires": {
- "bn.js": "^5.0.0",
- "randombytes": "^2.0.1"
- }
- },
- "browserify-sign": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz",
- "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==",
- "requires": {
- "bn.js": "^5.1.1",
- "browserify-rsa": "^4.0.1",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "elliptic": "^6.5.3",
- "inherits": "^2.0.4",
- "parse-asn1": "^5.1.5",
- "readable-stream": "^3.6.0",
- "safe-buffer": "^5.2.0"
- }
- },
- "browserify-zlib": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
- "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
- "requires": {
- "pako": "~1.0.5"
- }
- },
- "browserslist": {
- "version": "4.16.1",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.1.tgz",
- "integrity": "sha512-UXhDrwqsNcpTYJBTZsbGATDxZbiVDsx6UjpmRUmtnP10pr8wAYr5LgFoEFw9ixriQH2mv/NX2SfGzE/o8GndLA==",
- "requires": {
- "caniuse-lite": "^1.0.30001173",
- "colorette": "^1.2.1",
- "electron-to-chromium": "^1.3.634",
- "escalade": "^3.1.1",
- "node-releases": "^1.1.69"
- }
- },
- "buffer": {
- "version": "5.6.0",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz",
- "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==",
- "requires": {
- "base64-js": "^1.0.2",
- "ieee754": "^1.1.4"
- }
- },
- "buffer-xor": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
- "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk="
- },
- "builtin-status-codes": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
- "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug="
- },
- "bytes": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
- "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
- },
- "call-bind": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
- "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
- "requires": {
- "function-bind": "^1.1.1",
- "get-intrinsic": "^1.0.2"
- }
- },
- "camelcase-css": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
- "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
- "dev": true
- },
- "caniuse-lite": {
- "version": "1.0.30001228",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001228.tgz",
- "integrity": "sha512-QQmLOGJ3DEgokHbMSA8cj2a+geXqmnpyOFT0lhQV6P3/YOJvGDEwoedcwxEQ30gJIwIIunHIicunJ2rzK5gB2A=="
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "chokidar": {
- "version": "3.5.1",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz",
- "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==",
- "requires": {
- "anymatch": "~3.1.1",
- "braces": "~3.0.2",
- "fsevents": "~2.3.1",
- "glob-parent": "~5.1.0",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.5.0"
- }
- },
- "cipher-base": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
- "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
- "requires": {
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "classnames": {
- "version": "2.2.6",
- "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz",
- "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q=="
- },
- "color": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz",
- "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.1",
- "color-string": "^1.5.4"
- }
- },
- "color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
- },
- "color-string": {
- "version": "1.5.5",
- "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz",
- "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==",
- "dev": true,
- "requires": {
- "color-name": "^1.0.0",
- "simple-swizzle": "^0.2.2"
- }
- },
- "colorette": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz",
- "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w=="
- },
- "commander": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
- "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==",
- "dev": true
- },
- "commondir": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
- "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs="
- },
- "concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
- "dev": true
- },
- "console-browserify": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz",
- "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA=="
- },
- "constants-browserify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
- "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U="
- },
- "convert-source-map": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
- "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
- "requires": {
- "safe-buffer": "~5.1.1"
- },
- "dependencies": {
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
- }
- }
- },
- "core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
- },
- "create-ecdh": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz",
- "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==",
- "requires": {
- "bn.js": "^4.1.0",
- "elliptic": "^6.5.3"
- },
- "dependencies": {
- "bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
- }
- }
- },
- "create-hash": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
- "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
- "requires": {
- "cipher-base": "^1.0.1",
- "inherits": "^2.0.1",
- "md5.js": "^1.3.4",
- "ripemd160": "^2.0.1",
- "sha.js": "^2.4.0"
- }
- },
- "create-hmac": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
- "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
- "requires": {
- "cipher-base": "^1.0.3",
- "create-hash": "^1.1.0",
- "inherits": "^2.0.1",
- "ripemd160": "^2.0.0",
- "safe-buffer": "^5.0.1",
- "sha.js": "^2.4.8"
- }
- },
- "crypto-browserify": {
- "version": "3.12.0",
- "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
- "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
- "requires": {
- "browserify-cipher": "^1.0.0",
- "browserify-sign": "^4.0.0",
- "create-ecdh": "^4.0.0",
- "create-hash": "^1.1.0",
- "create-hmac": "^1.1.0",
- "diffie-hellman": "^5.0.0",
- "inherits": "^2.0.1",
- "pbkdf2": "^3.0.3",
- "public-encrypt": "^4.0.0",
- "randombytes": "^2.0.0",
- "randomfill": "^1.0.3"
- }
- },
- "css-unit-converter": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.2.tgz",
- "integrity": "sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==",
- "dev": true
- },
- "css.escape": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz",
- "integrity": "sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s="
- },
- "cssesc": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
- "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
- "dev": true
- },
- "cssnano-preset-simple": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/cssnano-preset-simple/-/cssnano-preset-simple-2.0.0.tgz",
- "integrity": "sha512-HkufSLkaBJbKBFx/7aj5HmCK9Ni/JedRQm0mT2qBzMG/dEuJOLnMt2lK6K1rwOOyV4j9aSY+knbW9WoS7BYpzg==",
- "requires": {
- "caniuse-lite": "^1.0.30001202"
- }
- },
- "cssnano-simple": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/cssnano-simple/-/cssnano-simple-2.0.0.tgz",
- "integrity": "sha512-0G3TXaFxlh/szPEG/o3VcmCwl0N3E60XNb9YZZijew5eIs6fLjJuOPxQd9yEBaX2p/YfJtt49i4vYi38iH6/6w==",
- "requires": {
- "cssnano-preset-simple": "^2.0.0"
- }
- },
- "data-uri-to-buffer": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz",
- "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og=="
- },
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "define-properties": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
- "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
- "requires": {
- "object-keys": "^1.0.12"
- }
- },
- "defined": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
- "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
- "dev": true
- },
- "depd": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
- },
- "des.js": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz",
- "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==",
- "requires": {
- "inherits": "^2.0.1",
- "minimalistic-assert": "^1.0.0"
- }
- },
- "detective": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz",
- "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==",
- "dev": true,
- "requires": {
- "acorn-node": "^1.6.1",
- "defined": "^1.0.0",
- "minimist": "^1.1.1"
- }
- },
- "didyoumean": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.1.tgz",
- "integrity": "sha1-6S7f2tplN9SE1zwBcv0eugxJdv8=",
- "dev": true
- },
- "diffie-hellman": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
- "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
- "requires": {
- "bn.js": "^4.1.0",
- "miller-rabin": "^4.0.0",
- "randombytes": "^2.0.0"
- },
- "dependencies": {
- "bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
- }
- }
- },
- "dlv": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
- "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
- "dev": true
- },
- "domain-browser": {
- "version": "4.19.0",
- "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-4.19.0.tgz",
- "integrity": "sha512-fRA+BaAWOR/yr/t7T9E9GJztHPeFjj8U35ajyAjCDtAAnTn1Rc1f6W6VGPJrO1tkQv9zWu+JRof7z6oQtiYVFQ=="
- },
- "electron-to-chromium": {
- "version": "1.3.727",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.727.tgz",
- "integrity": "sha512-Mfz4FIB4FSvEwBpDfdipRIrwd6uo8gUDoRDF4QEYb4h4tSuI3ov594OrjU6on042UlFHouIJpClDODGkPcBSbg=="
- },
- "elliptic": {
- "version": "6.5.4",
- "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz",
- "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==",
- "requires": {
- "bn.js": "^4.11.9",
- "brorand": "^1.1.0",
- "hash.js": "^1.0.0",
- "hmac-drbg": "^1.0.1",
- "inherits": "^2.0.4",
- "minimalistic-assert": "^1.0.1",
- "minimalistic-crypto-utils": "^1.0.1"
- },
- "dependencies": {
- "bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
- }
- }
- },
- "emojis-list": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
- "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k="
- },
- "encoding": {
- "version": "0.1.13",
- "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
- "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
- "requires": {
- "iconv-lite": "^0.6.2"
- }
- },
- "es-abstract": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz",
- "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==",
- "requires": {
- "call-bind": "^1.0.2",
- "es-to-primitive": "^1.2.1",
- "function-bind": "^1.1.1",
- "get-intrinsic": "^1.1.1",
- "has": "^1.0.3",
- "has-symbols": "^1.0.2",
- "is-callable": "^1.2.3",
- "is-negative-zero": "^2.0.1",
- "is-regex": "^1.1.2",
- "is-string": "^1.0.5",
- "object-inspect": "^1.9.0",
- "object-keys": "^1.1.1",
- "object.assign": "^4.1.2",
- "string.prototype.trimend": "^1.0.4",
- "string.prototype.trimstart": "^1.0.4",
- "unbox-primitive": "^1.0.0"
- }
- },
- "es-to-primitive": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
- "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
- "requires": {
- "is-callable": "^1.1.4",
- "is-date-object": "^1.0.1",
- "is-symbol": "^1.0.2"
- }
- },
- "es6-object-assign": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz",
- "integrity": "sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw="
- },
- "escalade": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw=="
- },
- "escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
- },
- "esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
- },
- "esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="
- },
- "etag": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
- "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
- },
- "events": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
- "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="
- },
- "evp_bytestokey": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
- "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
- "requires": {
- "md5.js": "^1.3.4",
- "safe-buffer": "^5.1.1"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "fast-glob": {
- "version": "3.2.5",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz",
- "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==",
- "dev": true,
- "requires": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.0",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.2",
- "picomatch": "^2.2.1"
- }
- },
- "fastq": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz",
- "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==",
- "dev": true,
- "requires": {
- "reusify": "^1.0.4"
- }
- },
- "fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "requires": {
- "to-regex-range": "^5.0.1"
- }
- },
- "find-cache-dir": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz",
- "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==",
- "requires": {
- "commondir": "^1.0.1",
- "make-dir": "^3.0.2",
- "pkg-dir": "^4.1.0"
- }
- },
- "find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "requires": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "foreach": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",
- "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k="
- },
- "fraction.js": {
- "version": "4.0.13",
- "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.0.13.tgz",
- "integrity": "sha512-E1fz2Xs9ltlUp+qbiyx9wmt2n9dRzPsS11Jtdb8D2o+cC7wr9xkkKsVKJuBX0ST+LVS+LhLO+SbLJNtfWcJvXA==",
- "dev": true
- },
- "fs-extra": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
- "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
- "dev": true,
- "requires": {
- "at-least-node": "^1.0.0",
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
- "dev": true
- },
- "fsevents": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
- "optional": true
- },
- "function-bind": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
- },
- "get-intrinsic": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
- "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
- "requires": {
- "function-bind": "^1.1.1",
- "has": "^1.0.3",
- "has-symbols": "^1.0.1"
- }
- },
- "get-orientation": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/get-orientation/-/get-orientation-1.1.2.tgz",
- "integrity": "sha512-/pViTfifW+gBbh/RnlFYHINvELT9Znt+SYyDKAUL6uV6By019AK/s+i9XP4jSwq7lwP38Fd8HVeTxym3+hkwmQ==",
- "requires": {
- "stream-parser": "^0.3.1"
- }
- },
- "glob": {
- "version": "7.1.7",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
- "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "glob-base": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
- "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
- "dev": true,
- "requires": {
- "glob-parent": "^2.0.0",
- "is-glob": "^2.0.0"
- },
- "dependencies": {
- "glob-parent": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
- "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
- "dev": true,
- "requires": {
- "is-glob": "^2.0.0"
- }
- },
- "is-extglob": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
- "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
- "dev": true
- },
- "is-glob": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
- "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
- "dev": true,
- "requires": {
- "is-extglob": "^1.0.0"
- }
- }
- }
- },
- "glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "requires": {
- "is-glob": "^4.0.1"
- }
- },
- "glob-to-regexp": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
- "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw=="
- },
- "graceful-fs": {
- "version": "4.2.6",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz",
- "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ=="
- },
- "gray-matter": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz",
- "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==",
- "requires": {
- "js-yaml": "^3.13.1",
- "kind-of": "^6.0.2",
- "section-matter": "^1.0.0",
- "strip-bom-string": "^1.0.0"
- }
- },
- "has": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
- "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
- "requires": {
- "function-bind": "^1.1.1"
- }
- },
- "has-bigints": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz",
- "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA=="
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
- },
- "has-symbols": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz",
- "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw=="
- },
- "hash-base": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz",
- "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==",
- "requires": {
- "inherits": "^2.0.4",
- "readable-stream": "^3.6.0",
- "safe-buffer": "^5.2.0"
- }
- },
- "hash.js": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
- "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
- "requires": {
- "inherits": "^2.0.3",
- "minimalistic-assert": "^1.0.1"
- }
- },
- "he": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
- "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="
- },
- "hmac-drbg": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
- "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
- "requires": {
- "hash.js": "^1.0.3",
- "minimalistic-assert": "^1.0.0",
- "minimalistic-crypto-utils": "^1.0.1"
- }
- },
- "html-tags": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz",
- "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==",
- "dev": true
- },
- "http-errors": {
- "version": "1.7.3",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz",
- "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==",
- "requires": {
- "depd": "~1.1.2",
- "inherits": "2.0.4",
- "setprototypeof": "1.1.1",
- "statuses": ">= 1.5.0 < 2",
- "toidentifier": "1.0.0"
- }
- },
- "https-browserify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
- "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM="
- },
- "husky": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/husky/-/husky-6.0.0.tgz",
- "integrity": "sha512-SQS2gDTB7tBN486QSoKPKQItZw97BMOd+Kdb6ghfpBc0yXyzrddI0oDV5MkDAbuB4X2mO3/nj60TRMcYxwzZeQ==",
- "dev": true
- },
- "iconv-lite": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz",
- "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==",
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3.0.0"
- }
- },
- "ieee754": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
- },
- "inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
- "dev": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
- },
- "is-arguments": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz",
- "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==",
- "requires": {
- "call-bind": "^1.0.0"
- }
- },
- "is-arrayish": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
- "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
- "dev": true
- },
- "is-bigint": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz",
- "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA=="
- },
- "is-binary-path": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
- "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "requires": {
- "binary-extensions": "^2.0.0"
- }
- },
- "is-boolean-object": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz",
- "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==",
- "requires": {
- "call-bind": "^1.0.2"
- }
- },
- "is-callable": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz",
- "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ=="
- },
- "is-core-module": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz",
- "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==",
- "dev": true,
- "requires": {
- "has": "^1.0.3"
- }
- },
- "is-date-object": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz",
- "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A=="
- },
- "is-dotfile": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
- "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
- "dev": true
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik="
- },
- "is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
- },
- "is-generator-function": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.9.tgz",
- "integrity": "sha512-ZJ34p1uvIfptHCN7sFTjGibB9/oBg17sHqzDLfuwhvmN/qLVvIQXRQ8licZQ35WJ8KuEQt/etnnzQFI9C9Ue/A=="
- },
- "is-glob": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
- "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
- "requires": {
- "is-extglob": "^2.1.1"
- }
- },
- "is-nan": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz",
- "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==",
- "requires": {
- "call-bind": "^1.0.0",
- "define-properties": "^1.1.3"
- }
- },
- "is-negative-zero": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz",
- "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w=="
- },
- "is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
- },
- "is-number-object": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz",
- "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw=="
- },
- "is-regex": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz",
- "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==",
- "requires": {
- "call-bind": "^1.0.2",
- "has-symbols": "^1.0.2"
- }
- },
- "is-string": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz",
- "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w=="
- },
- "is-symbol": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
- "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
- "requires": {
- "has-symbols": "^1.0.2"
- }
- },
- "is-typed-array": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.5.tgz",
- "integrity": "sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug==",
- "requires": {
- "available-typed-arrays": "^1.0.2",
- "call-bind": "^1.0.2",
- "es-abstract": "^1.18.0-next.2",
- "foreach": "^2.0.5",
- "has-symbols": "^1.0.1"
- }
- },
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
- },
- "jest-worker": {
- "version": "27.0.0-next.5",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.0-next.5.tgz",
- "integrity": "sha512-mk0umAQ5lT+CaOJ+Qp01N6kz48sJG2kr2n1rX0koqKf6FIygQV0qLOdN9SCYID4IVeSigDOcPeGLozdMLYfb5g==",
- "requires": {
- "@types/node": "*",
- "merge-stream": "^2.0.0",
- "supports-color": "^8.0.0"
- },
- "dependencies": {
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
- },
- "supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
- },
- "js-yaml": {
- "version": "3.14.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
- "requires": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- }
- },
- "json5": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
- "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
- "requires": {
- "minimist": "^1.2.0"
- }
- },
- "jsonfile": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.6",
- "universalify": "^2.0.0"
- }
- },
- "kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
- },
- "loader-utils": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
- "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
- "requires": {
- "big.js": "^5.2.2",
- "emojis-list": "^2.0.0",
- "json5": "^1.0.1"
- }
- },
- "locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "requires": {
- "p-locate": "^4.1.0"
- }
- },
- "lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
- },
- "lodash.sortby": {
- "version": "4.7.0",
- "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
- "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg="
- },
- "lodash.toarray": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz",
- "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=",
- "dev": true
- },
- "lodash.topath": {
- "version": "4.5.2",
- "resolved": "https://registry.npmjs.org/lodash.topath/-/lodash.topath-4.5.2.tgz",
- "integrity": "sha1-NhY1Hzu6YZlKCTGYlmC9AyVP0Ak=",
- "dev": true
- },
- "loose-envify": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
- "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
- "requires": {
- "js-tokens": "^3.0.0 || ^4.0.0"
- }
- },
- "make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
- "requires": {
- "semver": "^6.0.0"
- }
- },
- "marked": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/marked/-/marked-2.0.4.tgz",
- "integrity": "sha512-MIL0xKRDQM3DE7dJr/wa6JV0EmK9yZ3cwuTc2bu66FNm/tmEMm9cJCgJZpt9R+K1T+pB2iBNV55wvnwSd345zg=="
- },
- "md5.js": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
- "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
- "requires": {
- "hash-base": "^3.0.0",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.1.2"
- }
- },
- "merge-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
- "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="
- },
- "merge2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "dev": true
- },
- "micromatch": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
- "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
- "dev": true,
- "requires": {
- "braces": "^3.0.1",
- "picomatch": "^2.2.3"
- }
- },
- "miller-rabin": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
- "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
- "requires": {
- "bn.js": "^4.0.0",
- "brorand": "^1.0.1"
- },
- "dependencies": {
- "bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
- }
- }
- },
- "minimalistic-assert": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
- "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A=="
- },
- "minimalistic-crypto-utils": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
- "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo="
- },
- "minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minimist": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
- "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
- },
- "modern-normalize": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/modern-normalize/-/modern-normalize-1.1.0.tgz",
- "integrity": "sha512-2lMlY1Yc1+CUy0gw4H95uNN7vjbpoED7NNRSBHE25nWfLBdmMzFCsPshlzbxHz+gYMcBEUN8V4pU16prcdPSgA==",
- "dev": true
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- },
- "nanoid": {
- "version": "3.1.23",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz",
- "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw=="
- },
- "native-url": {
- "version": "0.3.4",
- "resolved": "https://registry.npmjs.org/native-url/-/native-url-0.3.4.tgz",
- "integrity": "sha512-6iM8R99ze45ivyH8vybJ7X0yekIcPf5GgLV5K0ENCbmRcaRIDoj37BC8iLEmaaBfqqb8enuZ5p0uhY+lVAbAcA==",
- "requires": {
- "querystring": "^0.2.0"
- }
- },
- "next": {
- "version": "10.2.0",
- "resolved": "https://registry.npmjs.org/next/-/next-10.2.0.tgz",
- "integrity": "sha512-PKDKCSF7s82xudu3kQhOEaokxggpbLEWouEUtzP6OqV0YqKYHF+Ff+BFLycEem8ixtTM2M6ElN0VRJcskJfxPQ==",
- "requires": {
- "@babel/runtime": "7.12.5",
- "@hapi/accept": "5.0.1",
- "@next/env": "10.2.0",
- "@next/polyfill-module": "10.2.0",
- "@next/react-dev-overlay": "10.2.0",
- "@next/react-refresh-utils": "10.2.0",
- "@opentelemetry/api": "0.14.0",
- "assert": "2.0.0",
- "ast-types": "0.13.2",
- "browserify-zlib": "0.2.0",
- "browserslist": "4.16.1",
- "buffer": "5.6.0",
- "caniuse-lite": "^1.0.30001179",
- "chalk": "2.4.2",
- "chokidar": "3.5.1",
- "constants-browserify": "1.0.0",
- "crypto-browserify": "3.12.0",
- "cssnano-simple": "2.0.0",
- "domain-browser": "4.19.0",
- "encoding": "0.1.13",
- "etag": "1.8.1",
- "find-cache-dir": "3.3.1",
- "get-orientation": "1.1.2",
- "https-browserify": "1.0.0",
- "jest-worker": "27.0.0-next.5",
- "native-url": "0.3.4",
- "node-fetch": "2.6.1",
- "node-html-parser": "1.4.9",
- "node-libs-browser": "^2.2.1",
- "os-browserify": "0.3.0",
- "p-limit": "3.1.0",
- "path-browserify": "1.0.1",
- "pnp-webpack-plugin": "1.6.4",
- "postcss": "8.2.13",
- "process": "0.11.10",
- "prop-types": "15.7.2",
- "querystring-es3": "0.2.1",
- "raw-body": "2.4.1",
- "react-is": "16.13.1",
- "react-refresh": "0.8.3",
- "stream-browserify": "3.0.0",
- "stream-http": "3.1.1",
- "string_decoder": "1.3.0",
- "styled-jsx": "3.3.2",
- "timers-browserify": "2.0.12",
- "tty-browserify": "0.0.1",
- "use-subscription": "1.5.1",
- "util": "0.12.3",
- "vm-browserify": "1.1.2",
- "watchpack": "2.1.1"
- },
- "dependencies": {
- "postcss": {
- "version": "8.2.13",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.13.tgz",
- "integrity": "sha512-FCE5xLH+hjbzRdpbRb1IMCvPv9yZx2QnDarBEYSN0N0HYk+TcXsEhwdFcFb+SRWOKzKGErhIEbBK2ogyLdTtfQ==",
- "requires": {
- "colorette": "^1.2.2",
- "nanoid": "^3.1.22",
- "source-map": "^0.6.1"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
- }
- }
- },
- "node-emoji": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz",
- "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==",
- "dev": true,
- "requires": {
- "lodash.toarray": "^4.4.0"
- }
- },
- "node-fetch": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
- "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw=="
- },
- "node-html-parser": {
- "version": "1.4.9",
- "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-1.4.9.tgz",
- "integrity": "sha512-UVcirFD1Bn0O+TSmloHeHqZZCxHjvtIeGdVdGMhyZ8/PWlEiZaZ5iJzR189yKZr8p0FXN58BUeC7RHRkf/KYGw==",
- "requires": {
- "he": "1.2.0"
- }
- },
- "node-libs-browser": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz",
- "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==",
- "requires": {
- "assert": "^1.1.1",
- "browserify-zlib": "^0.2.0",
- "buffer": "^4.3.0",
- "console-browserify": "^1.1.0",
- "constants-browserify": "^1.0.0",
- "crypto-browserify": "^3.11.0",
- "domain-browser": "^1.1.1",
- "events": "^3.0.0",
- "https-browserify": "^1.0.0",
- "os-browserify": "^0.3.0",
- "path-browserify": "0.0.1",
- "process": "^0.11.10",
- "punycode": "^1.2.4",
- "querystring-es3": "^0.2.0",
- "readable-stream": "^2.3.3",
- "stream-browserify": "^2.0.1",
- "stream-http": "^2.7.2",
- "string_decoder": "^1.0.0",
- "timers-browserify": "^2.0.4",
- "tty-browserify": "0.0.0",
- "url": "^0.11.0",
- "util": "^0.11.0",
- "vm-browserify": "^1.0.1"
- },
- "dependencies": {
- "assert": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
- "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
- "requires": {
- "object-assign": "^4.1.1",
- "util": "0.10.3"
- },
- "dependencies": {
- "inherits": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
- "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE="
- },
- "util": {
- "version": "0.10.3",
- "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
- "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
- "requires": {
- "inherits": "2.0.1"
- }
- }
- }
- },
- "buffer": {
- "version": "4.9.2",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
- "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
- "requires": {
- "base64-js": "^1.0.2",
- "ieee754": "^1.1.4",
- "isarray": "^1.0.0"
- }
- },
- "domain-browser": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
- "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA=="
- },
- "inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
- },
- "path-browserify": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
- "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ=="
- },
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
- },
- "stream-browserify": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
- "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
- "requires": {
- "inherits": "~2.0.1",
- "readable-stream": "^2.0.2"
- }
- },
- "stream-http": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
- "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
- "requires": {
- "builtin-status-codes": "^3.0.0",
- "inherits": "^2.0.1",
- "readable-stream": "^2.3.6",
- "to-arraybuffer": "^1.0.0",
- "xtend": "^4.0.0"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- },
- "tty-browserify": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
- "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY="
- },
- "util": {
- "version": "0.11.1",
- "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
- "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
- "requires": {
- "inherits": "2.0.3"
- }
- }
- }
- },
- "node-releases": {
- "version": "1.1.71",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz",
- "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg=="
- },
- "normalize-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
- },
- "normalize-range": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
- "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
- "dev": true
- },
- "object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
- },
- "object-hash": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.1.1.tgz",
- "integrity": "sha512-VOJmgmS+7wvXf8CjbQmimtCnEx3IAoLxI3fp2fbWehxrWBcAQFbk+vcwb6vzR0VZv/eNCJ/27j151ZTwqW/JeQ==",
- "dev": true
- },
- "object-inspect": {
- "version": "1.10.3",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz",
- "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw=="
- },
- "object-is": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz",
- "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==",
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3"
- }
- },
- "object-keys": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
- "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
- },
- "object.assign": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
- "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
- "requires": {
- "call-bind": "^1.0.0",
- "define-properties": "^1.1.3",
- "has-symbols": "^1.0.1",
- "object-keys": "^1.1.1"
- }
- },
- "once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
- "dev": true,
- "requires": {
- "wrappy": "1"
- }
- },
- "os-browserify": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
- "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc="
- },
- "p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "requires": {
- "yocto-queue": "^0.1.0"
- }
- },
- "p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "requires": {
- "p-limit": "^2.2.0"
- },
- "dependencies": {
- "p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "requires": {
- "p-try": "^2.0.0"
- }
- }
- }
- },
- "p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
- },
- "pako": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
- "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
- },
- "parse-asn1": {
- "version": "5.1.6",
- "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz",
- "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==",
- "requires": {
- "asn1.js": "^5.2.0",
- "browserify-aes": "^1.0.0",
- "evp_bytestokey": "^1.0.0",
- "pbkdf2": "^3.0.3",
- "safe-buffer": "^5.1.1"
- }
- },
- "parse-glob": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
- "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
- "dev": true,
- "requires": {
- "glob-base": "^0.3.0",
- "is-dotfile": "^1.0.0",
- "is-extglob": "^1.0.0",
- "is-glob": "^2.0.0"
- },
- "dependencies": {
- "is-extglob": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
- "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
- "dev": true
- },
- "is-glob": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
- "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
- "dev": true,
- "requires": {
- "is-extglob": "^1.0.0"
- }
- }
- }
- },
- "path-browserify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
- "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="
- },
- "path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
- "dev": true
- },
- "path-parse": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
- "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
- "dev": true
- },
- "pbkdf2": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz",
- "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==",
- "requires": {
- "create-hash": "^1.1.2",
- "create-hmac": "^1.1.4",
- "ripemd160": "^2.0.1",
- "safe-buffer": "^5.0.1",
- "sha.js": "^2.4.8"
- }
- },
- "picomatch": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz",
- "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg=="
- },
- "pkg-dir": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
- "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
- "requires": {
- "find-up": "^4.0.0"
- }
- },
- "platform": {
- "version": "1.3.6",
- "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz",
- "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg=="
- },
- "pnp-webpack-plugin": {
- "version": "1.6.4",
- "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz",
- "integrity": "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==",
- "requires": {
- "ts-pnp": "^1.1.6"
- }
- },
- "postcss": {
- "version": "8.2.15",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.15.tgz",
- "integrity": "sha512-2zO3b26eJD/8rb106Qu2o7Qgg52ND5HPjcyQiK2B98O388h43A448LCslC0dI2P97wCAQRJsFvwTRcXxTKds+Q==",
- "requires": {
- "colorette": "^1.2.2",
- "nanoid": "^3.1.23",
- "source-map": "^0.6.1"
- },
- "dependencies": {
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
- }
- }
- },
- "postcss-functions": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/postcss-functions/-/postcss-functions-3.0.0.tgz",
- "integrity": "sha1-DpTQFERwCkgd4g3k1V+yZAVkJQ4=",
- "dev": true,
- "requires": {
- "glob": "^7.1.2",
- "object-assign": "^4.1.1",
- "postcss": "^6.0.9",
- "postcss-value-parser": "^3.3.0"
- },
- "dependencies": {
- "postcss": {
- "version": "6.0.23",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
- "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.1",
- "source-map": "^0.6.1",
- "supports-color": "^5.4.0"
- }
- },
- "postcss-value-parser": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
- "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
- "dev": true
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- }
- }
- },
- "postcss-js": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-3.0.3.tgz",
- "integrity": "sha512-gWnoWQXKFw65Hk/mi2+WTQTHdPD5UJdDXZmX073EY/B3BWnYjO4F4t0VneTCnCGQ5E5GsCdMkzPaTXwl3r5dJw==",
- "dev": true,
- "requires": {
- "camelcase-css": "^2.0.1",
- "postcss": "^8.1.6"
- }
- },
- "postcss-nested": {
- "version": "5.0.5",
- "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.5.tgz",
- "integrity": "sha512-GSRXYz5bccobpTzLQZXOnSOfKl6TwVr5CyAQJUPub4nuRJSOECK5AqurxVgmtxP48p0Kc/ndY/YyS1yqldX0Ew==",
- "dev": true,
- "requires": {
- "postcss-selector-parser": "^6.0.4"
- }
- },
- "postcss-selector-parser": {
- "version": "6.0.6",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz",
- "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==",
- "dev": true,
- "requires": {
- "cssesc": "^3.0.0",
- "util-deprecate": "^1.0.2"
- }
- },
- "postcss-value-parser": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
- "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==",
- "dev": true
- },
- "pretty-hrtime": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
- "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=",
- "dev": true
- },
- "process": {
- "version": "0.11.10",
- "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
- "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI="
- },
- "process-nextick-args": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
- "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
- },
- "prop-types": {
- "version": "15.7.2",
- "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
- "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
- "requires": {
- "loose-envify": "^1.4.0",
- "object-assign": "^4.1.1",
- "react-is": "^16.8.1"
- }
- },
- "public-encrypt": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
- "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
- "requires": {
- "bn.js": "^4.1.0",
- "browserify-rsa": "^4.0.0",
- "create-hash": "^1.1.0",
- "parse-asn1": "^5.0.0",
- "randombytes": "^2.0.1",
- "safe-buffer": "^5.1.2"
- },
- "dependencies": {
- "bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
- }
- }
- },
- "punycode": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
- "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
- },
- "purgecss": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-3.1.3.tgz",
- "integrity": "sha512-hRSLN9mguJ2lzlIQtW4qmPS2kh6oMnA9RxdIYK8sz18QYqd6ePp4GNDl18oWHA1f2v2NEQIh51CO8s/E3YGckQ==",
- "dev": true,
- "requires": {
- "commander": "^6.0.0",
- "glob": "^7.0.0",
- "postcss": "^8.2.1",
- "postcss-selector-parser": "^6.0.2"
- }
- },
- "querystring": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz",
- "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg=="
- },
- "querystring-es3": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
- "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM="
- },
- "queue-microtask": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "dev": true
- },
- "quick-lru": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
- "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
- "dev": true
- },
- "randombytes": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
- "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
- "requires": {
- "safe-buffer": "^5.1.0"
- }
- },
- "randomfill": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
- "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
- "requires": {
- "randombytes": "^2.0.5",
- "safe-buffer": "^5.1.0"
- }
- },
- "raw-body": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz",
- "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==",
- "requires": {
- "bytes": "3.1.0",
- "http-errors": "1.7.3",
- "iconv-lite": "0.4.24",
- "unpipe": "1.0.0"
- },
- "dependencies": {
- "iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3"
- }
- }
- }
- },
- "react": {
- "version": "17.0.2",
- "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz",
- "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==",
- "requires": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1"
- }
- },
- "react-dom": {
- "version": "17.0.2",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz",
- "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==",
- "requires": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1",
- "scheduler": "^0.20.2"
- }
- },
- "react-icons": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.2.0.tgz",
- "integrity": "sha512-rmzEDFt+AVXRzD7zDE21gcxyBizD/3NqjbX6cmViAgdqfJ2UiLer8927/QhhrXQV7dEj/1EGuOTPp7JnLYVJKQ==",
- "requires": {}
- },
- "react-is": {
- "version": "16.13.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
- "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
- },
- "react-refresh": {
- "version": "0.8.3",
- "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.8.3.tgz",
- "integrity": "sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg=="
- },
- "readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- },
- "readdirp": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz",
- "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==",
- "requires": {
- "picomatch": "^2.2.1"
- }
- },
- "reduce-css-calc": {
- "version": "2.1.8",
- "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz",
- "integrity": "sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==",
- "dev": true,
- "requires": {
- "css-unit-converter": "^1.1.1",
- "postcss-value-parser": "^3.3.0"
- },
- "dependencies": {
- "postcss-value-parser": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
- "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
- "dev": true
- }
- }
- },
- "regenerator-runtime": {
- "version": "0.13.7",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz",
- "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew=="
- },
- "resolve": {
- "version": "1.20.0",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
- "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
- "dev": true,
- "requires": {
- "is-core-module": "^2.2.0",
- "path-parse": "^1.0.6"
- }
- },
- "reusify": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
- "dev": true
- },
- "ripemd160": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
- "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
- "requires": {
- "hash-base": "^3.0.0",
- "inherits": "^2.0.1"
- }
- },
- "run-parallel": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
- "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "dev": true,
- "requires": {
- "queue-microtask": "^1.2.2"
- }
- },
- "safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
- },
- "safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
- },
- "scheduler": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz",
- "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==",
- "requires": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1"
- }
- },
- "section-matter": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz",
- "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==",
- "requires": {
- "extend-shallow": "^2.0.1",
- "kind-of": "^6.0.0"
- }
- },
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
- },
- "setimmediate": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
- "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
- },
- "setprototypeof": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
- "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
- },
- "sha.js": {
- "version": "2.4.11",
- "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
- "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
- "requires": {
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "shell-quote": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz",
- "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg=="
- },
- "simple-swizzle": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
- "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=",
- "dev": true,
- "requires": {
- "is-arrayish": "^0.3.1"
- }
- },
- "source-map": {
- "version": "0.8.0-beta.0",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz",
- "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==",
- "requires": {
- "whatwg-url": "^7.0.0"
- }
- },
- "sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
- },
- "stacktrace-parser": {
- "version": "0.1.10",
- "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz",
- "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==",
- "requires": {
- "type-fest": "^0.7.1"
- }
- },
- "statuses": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
- },
- "stream-browserify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz",
- "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==",
- "requires": {
- "inherits": "~2.0.4",
- "readable-stream": "^3.5.0"
- }
- },
- "stream-http": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.1.1.tgz",
- "integrity": "sha512-S7OqaYu0EkFpgeGFb/NPOoPLxFko7TPqtEeFg5DXPB4v/KETHG0Ln6fRFrNezoelpaDKmycEmmZ81cC9DAwgYg==",
- "requires": {
- "builtin-status-codes": "^3.0.0",
- "inherits": "^2.0.4",
- "readable-stream": "^3.6.0",
- "xtend": "^4.0.2"
- }
- },
- "stream-parser": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz",
- "integrity": "sha1-FhhUhpRCACGhGC/wrxkRwSl2F3M=",
- "requires": {
- "debug": "2"
- }
- },
- "string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "requires": {
- "safe-buffer": "~5.2.0"
- }
- },
- "string-hash": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz",
- "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs="
- },
- "string.prototype.trimend": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz",
- "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==",
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3"
- }
- },
- "string.prototype.trimstart": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz",
- "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==",
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3"
- }
- },
- "strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
- "requires": {
- "ansi-regex": "^5.0.0"
- }
- },
- "strip-bom-string": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz",
- "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI="
- },
- "styled-jsx": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-3.3.2.tgz",
- "integrity": "sha512-daAkGd5mqhbBhLd6jYAjYBa9LpxYCzsgo/f6qzPdFxVB8yoGbhxvzQgkC0pfmCVvW3JuAEBn0UzFLBfkHVZG1g==",
- "requires": {
- "@babel/types": "7.8.3",
- "babel-plugin-syntax-jsx": "6.18.0",
- "convert-source-map": "1.7.0",
- "loader-utils": "1.2.3",
- "source-map": "0.7.3",
- "string-hash": "1.1.3",
- "stylis": "3.5.4",
- "stylis-rule-sheet": "0.0.10"
- },
- "dependencies": {
- "source-map": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
- "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ=="
- }
- }
- },
- "stylis": {
- "version": "3.5.4",
- "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.5.4.tgz",
- "integrity": "sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q=="
- },
- "stylis-rule-sheet": {
- "version": "0.0.10",
- "resolved": "https://registry.npmjs.org/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz",
- "integrity": "sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw==",
- "requires": {}
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "requires": {
- "has-flag": "^3.0.0"
- }
- },
- "tailwindcss": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-2.1.2.tgz",
- "integrity": "sha512-T5t+wwd+/hsOyRw2HJuFuv0LTUm3MUdHm2DJ94GPVgzqwPPFa9XxX0KlwLWupUuiOUj6uiKURCzYPHFcuPch/w==",
- "dev": true,
- "requires": {
- "@fullhuman/postcss-purgecss": "^3.1.3",
- "bytes": "^3.0.0",
- "chalk": "^4.1.0",
- "chokidar": "^3.5.1",
- "color": "^3.1.3",
- "detective": "^5.2.0",
- "didyoumean": "^1.2.1",
- "dlv": "^1.1.3",
- "fast-glob": "^3.2.5",
- "fs-extra": "^9.1.0",
- "html-tags": "^3.1.0",
- "lodash": "^4.17.21",
- "lodash.topath": "^4.5.2",
- "modern-normalize": "^1.0.0",
- "node-emoji": "^1.8.1",
- "normalize-path": "^3.0.0",
- "object-hash": "^2.1.1",
- "parse-glob": "^3.0.4",
- "postcss-functions": "^3",
- "postcss-js": "^3.0.3",
- "postcss-nested": "5.0.5",
- "postcss-selector-parser": "^6.0.4",
- "postcss-value-parser": "^4.1.0",
- "pretty-hrtime": "^1.0.3",
- "quick-lru": "^5.1.1",
- "reduce-css-calc": "^2.1.8",
- "resolve": "^1.20.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
- "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "timers-browserify": {
- "version": "2.0.12",
- "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz",
- "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==",
- "requires": {
- "setimmediate": "^1.0.4"
- }
- },
- "to-arraybuffer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
- "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M="
- },
- "to-fast-properties": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
- "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4="
- },
- "to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "requires": {
- "is-number": "^7.0.0"
- }
- },
- "toidentifier": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
- "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
- },
- "tr46": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
- "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
- "requires": {
- "punycode": "^2.1.0"
- },
- "dependencies": {
- "punycode": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
- }
- }
- },
- "ts-pnp": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz",
- "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw=="
- },
- "tty-browserify": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz",
- "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw=="
- },
- "type-fest": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz",
- "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg=="
- },
- "unbox-primitive": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz",
- "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==",
- "requires": {
- "function-bind": "^1.1.1",
- "has-bigints": "^1.0.1",
- "has-symbols": "^1.0.2",
- "which-boxed-primitive": "^1.0.2"
- }
- },
- "universalify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
- "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
- "dev": true
- },
- "unpipe": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
- "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
- },
- "url": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
- "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
- "requires": {
- "punycode": "1.3.2",
- "querystring": "0.2.0"
- },
- "dependencies": {
- "punycode": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
- "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0="
- },
- "querystring": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
- "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA="
- }
- }
- },
- "use-subscription": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/use-subscription/-/use-subscription-1.5.1.tgz",
- "integrity": "sha512-Xv2a1P/yReAjAbhylMfFplFKj9GssgTwN7RlcTxBujFQcloStWNDQdc4g4NRWH9xS4i/FDk04vQBptAXoF3VcA==",
- "requires": {
- "object-assign": "^4.1.1"
- }
- },
- "util": {
- "version": "0.12.3",
- "resolved": "https://registry.npmjs.org/util/-/util-0.12.3.tgz",
- "integrity": "sha512-I8XkoQwE+fPQEhy9v012V+TSdH2kp9ts29i20TaaDUXsg7x/onePbhFJUExBfv/2ay1ZOp/Vsm3nDlmnFGSAog==",
- "requires": {
- "inherits": "^2.0.3",
- "is-arguments": "^1.0.4",
- "is-generator-function": "^1.0.7",
- "is-typed-array": "^1.1.3",
- "safe-buffer": "^5.1.2",
- "which-typed-array": "^1.1.2"
- }
- },
- "util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
- },
- "vm-browserify": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz",
- "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ=="
- },
- "watchpack": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.1.1.tgz",
- "integrity": "sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw==",
- "requires": {
- "glob-to-regexp": "^0.4.1",
- "graceful-fs": "^4.1.2"
- }
- },
- "webidl-conversions": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
- "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg=="
- },
- "whatwg-url": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz",
- "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==",
- "requires": {
- "lodash.sortby": "^4.7.0",
- "tr46": "^1.0.1",
- "webidl-conversions": "^4.0.2"
- }
- },
- "which-boxed-primitive": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
- "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
- "requires": {
- "is-bigint": "^1.0.1",
- "is-boolean-object": "^1.1.0",
- "is-number-object": "^1.0.4",
- "is-string": "^1.0.5",
- "is-symbol": "^1.0.3"
- }
- },
- "which-typed-array": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.4.tgz",
- "integrity": "sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA==",
- "requires": {
- "available-typed-arrays": "^1.0.2",
- "call-bind": "^1.0.0",
- "es-abstract": "^1.18.0-next.1",
- "foreach": "^2.0.5",
- "function-bind": "^1.1.1",
- "has-symbols": "^1.0.1",
- "is-typed-array": "^1.1.3"
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
- "dev": true
- },
- "xtend": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
- },
- "yocto-queue": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="
- }
- }
-}
diff --git a/package.json b/package.json
deleted file mode 100644
index 36fb8e4..0000000
--- a/package.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "name": "devspace-blog",
- "version": "0.1.0",
- "private": true,
- "scripts": {
- "dev": "next dev",
- "build": "next build",
- "start": "next start",
- "cache-posts": "node scripts/cache.js",
- "prepare": "husky install"
- },
- "dependencies": {
- "gray-matter": "^4.0.3",
- "marked": "^2.0.4",
- "next": "10.2.0",
- "react": "17.0.2",
- "react-dom": "17.0.2",
- "react-icons": "^4.2.0"
- },
- "devDependencies": {
- "autoprefixer": "^10.2.5",
- "husky": "^6.0.0",
- "postcss": "^8.2.15",
- "tailwindcss": "^2.1.2"
- }
-}
diff --git a/pages/404.js b/pages/404.js
deleted file mode 100644
index 0096690..0000000
--- a/pages/404.js
+++ /dev/null
@@ -1,24 +0,0 @@
-import Link from 'next/link'
-import Image from 'next/image'
-import Layout from '@/components/Layout'
-
-export default function NotFoundPage() {
- return (
-
-
-
-
-
Whoops!
-
-
- This page does not exist
-
-
-
- )
-}
diff --git a/pages/_app.js b/pages/_app.js
deleted file mode 100644
index 1e1cec9..0000000
--- a/pages/_app.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import '../styles/globals.css'
-
-function MyApp({ Component, pageProps }) {
- return
-}
-
-export default MyApp
diff --git a/pages/about.js b/pages/about.js
deleted file mode 100644
index e74b812..0000000
--- a/pages/about.js
+++ /dev/null
@@ -1,19 +0,0 @@
-import Layout from '@/components/Layout'
-
-export default function AboutPage() {
- return (
-
- About
-
-
-
DevSpace Blog
-
-
This is a blog built with Next.js and Markdown
-
-
- Version 1.0.0
-
-
-
- )
-}
diff --git a/pages/api/search.js b/pages/api/search.js
deleted file mode 100644
index 60e7457..0000000
--- a/pages/api/search.js
+++ /dev/null
@@ -1,39 +0,0 @@
-import fs from 'fs'
-import path from 'path'
-import matter from 'gray-matter'
-
-export default (req, res) => {
- let posts
-
- if (process.env.NODE_ENV === 'production') {
- // Fetch from cache
- posts = require('../../cache/data').posts
- } else {
- const files = fs.readdirSync(path.join('posts'))
-
- posts = files.map((filename) => {
- const slug = filename.replace('.md', '')
-
- const markdownWithMeta = fs.readFileSync(
- path.join('posts', filename),
- 'utf-8'
- )
-
- const { data: frontmatter } = matter(markdownWithMeta)
-
- return {
- slug,
- frontmatter,
- }
- })
- }
-
- const results = posts.filter(
- ({ frontmatter: { title, excerpt, category } }) =>
- title.toLowerCase().indexOf(req.query.q) != -1 ||
- excerpt.toLowerCase().indexOf(req.query.q) != -1 ||
- category.toLowerCase().indexOf(req.query.q) != -1
- )
-
- res.status(200).json(JSON.stringify({ results }))
-}
diff --git a/pages/blog/[slug].js b/pages/blog/[slug].js
deleted file mode 100644
index 4ea967a..0000000
--- a/pages/blog/[slug].js
+++ /dev/null
@@ -1,73 +0,0 @@
-import fs from 'fs'
-import path from 'path'
-import matter from 'gray-matter'
-import marked from 'marked'
-import Link from 'next/link'
-import Layout from '@/components/Layout'
-import CategoryLabel from '@/components/CategoryLabel'
-
-export default function PostPage({
- frontmatter: { title, category, date, cover_image, author, author_image },
- content,
- slug,
-}) {
- return (
-
- Go Back
-
-
-
{title}
- {category}
-
-
-
-
-
-
-
{author}
-
-
{date}
-
-
-
-
-
- )
-}
-
-export async function getStaticPaths() {
- const files = fs.readdirSync(path.join('posts'))
-
- const paths = files.map((filename) => ({
- params: {
- slug: filename.replace('.md', ''),
- },
- }))
-
- return {
- paths,
- fallback: false,
- }
-}
-
-export async function getStaticProps({ params: { slug } }) {
- const markdownWithMeta = fs.readFileSync(
- path.join('posts', slug + '.md'),
- 'utf-8'
- )
-
- const { data: frontmatter, content } = matter(markdownWithMeta)
- return {
- props: {
- frontmatter,
- content,
- slug,
- },
- }
-}
diff --git a/pages/blog/category/[category_name].js b/pages/blog/category/[category_name].js
deleted file mode 100644
index fa04d4b..0000000
--- a/pages/blog/category/[category_name].js
+++ /dev/null
@@ -1,79 +0,0 @@
-import fs from 'fs'
-import path from 'path'
-import Link from 'next/link'
-import Layout from '@/components/Layout'
-import Post from '@/components/Post'
-import CategoryList from '@/components/CategoryList'
-import matter from 'gray-matter'
-import { getPosts } from '@/lib/posts'
-
-export default function CategoryBlogPage({ posts, categoryName, categories }) {
- return (
-
-
-
-
- Posts in {categoryName}
-
-
-
- {posts.map((post, index) => (
-
- ))}
-
-
-
-
-
-
-
-
- )
-}
-
-export async function getStaticPaths() {
- const files = fs.readdirSync(path.join('posts'))
-
- const categories = files.map((filename) => {
- const markdownWithMeta = fs.readFileSync(
- path.join('posts', filename),
- 'utf-8'
- )
-
- const { data: frontmatter } = matter(markdownWithMeta)
-
- return frontmatter.category.toLowerCase()
- })
-
- const paths = categories.map((category) => ({
- params: { category_name: category },
- }))
-
- return {
- paths,
- fallback: false,
- }
-}
-
-export async function getStaticProps({ params: { category_name } }) {
- const files = fs.readdirSync(path.join('posts'))
-
- const posts = getPosts()
-
- // Get categories for sidebar
- const categories = posts.map((post) => post.frontmatter.category)
- const uniqueCategories = [...new Set(categories)]
-
- // Filter posts by category
- const categoryPosts = posts.filter(
- (post) => post.frontmatter.category.toLowerCase() === category_name
- )
-
- return {
- props: {
- posts: categoryPosts,
- categoryName: category_name,
- categories: uniqueCategories,
- },
- }
-}
diff --git a/pages/blog/index.js b/pages/blog/index.js
deleted file mode 100644
index 036faa1..0000000
--- a/pages/blog/index.js
+++ /dev/null
@@ -1,5 +0,0 @@
-import { getStaticProps } from './page/[page_index]'
-import BlogPage from './page/[page_index]'
-
-export { getStaticProps }
-export default BlogPage
diff --git a/pages/blog/page/[page_index].js b/pages/blog/page/[page_index].js
deleted file mode 100644
index 26d7da2..0000000
--- a/pages/blog/page/[page_index].js
+++ /dev/null
@@ -1,79 +0,0 @@
-import fs from 'fs'
-import path from 'path'
-import Layout from '@/components/Layout'
-import Post from '@/components/Post'
-import Pagination from '@/components/Pagination'
-import CategoryList from '@/components/CategoryList'
-import { POSTS_PER_PAGE } from '@/config/index'
-import { getPosts } from '@/lib/posts'
-
-export default function BlogPage({ posts, numPages, currentPage, categories }) {
- return (
-
-
-
-
Blog
-
-
- {posts.map((post, index) => (
-
- ))}
-
-
-
-
-
-
-
-
-
-
- )
-}
-
-export async function getStaticPaths() {
- const files = fs.readdirSync(path.join('posts'))
-
- const numPages = Math.ceil(files.length / POSTS_PER_PAGE)
-
- let paths = []
-
- for (let i = 1; i <= numPages; i++) {
- paths.push({
- params: { page_index: i.toString() },
- })
- }
-
- return {
- paths,
- fallback: false,
- }
-}
-
-export async function getStaticProps({ params }) {
- const page = parseInt((params && params.page_index) || 1)
-
- const files = fs.readdirSync(path.join('posts'))
-
- const posts = getPosts()
-
- // Get categories for sidebar
- const categories = posts.map((post) => post.frontmatter.category)
- const uniqueCategories = [...new Set(categories)]
-
- const numPages = Math.ceil(files.length / POSTS_PER_PAGE)
- const pageIndex = page - 1
- const orderedPosts = posts.slice(
- pageIndex * POSTS_PER_PAGE,
- (pageIndex + 1) * POSTS_PER_PAGE
- )
-
- return {
- props: {
- posts: orderedPosts,
- numPages,
- currentPage: page,
- categories: uniqueCategories,
- },
- }
-}
diff --git a/pages/index.js b/pages/index.js
deleted file mode 100644
index 6a562e3..0000000
--- a/pages/index.js
+++ /dev/null
@@ -1,32 +0,0 @@
-import Link from 'next/link'
-import Layout from '@/components/Layout'
-import Post from '@/components/Post'
-import { getPosts } from '@/lib/posts'
-
-export default function HomePage({ posts }) {
- return (
-
- Latest Posts
-
-
- {posts.map((post, index) => (
-
- ))}
-
-
-
-
- All Posts
-
-
-
- )
-}
-
-export async function getStaticProps() {
- return {
- props: {
- posts: getPosts().slice(0, 6),
- },
- }
-}
diff --git a/password-generator/index.html b/password-generator/index.html
new file mode 100644
index 0000000..d28270e
--- /dev/null
+++ b/password-generator/index.html
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+ Password Generator
+
+
+
+
Password Generator
+
+
+
+
+
+
+
+
+
+ Generate Password
+
+
+
+
+
diff --git a/password-generator/script.js b/password-generator/script.js
new file mode 100644
index 0000000..ee4fe2b
--- /dev/null
+++ b/password-generator/script.js
@@ -0,0 +1,77 @@
+const resultEl = document.getElementById('result')
+const lengthEl = document.getElementById('length')
+const uppercaseEl = document.getElementById('uppercase')
+const lowercaseEl = document.getElementById('lowercase')
+const numbersEl = document.getElementById('numbers')
+const symbolsEl = document.getElementById('symbols')
+const generateEl = document.getElementById('generate')
+const clipboardEl = document.getElementById('clipboard')
+
+const randomFunc = {
+ lower: getRandomLower,
+ upper: getRandomUpper,
+ number: getRandomNumber,
+ symbol: getRandomSymbol
+}
+
+clipboardEl.addEventListener('click', () => {
+ const textarea = document.createElement('textarea')
+ const password = resultEl.innerText
+
+ if(!password) { return }
+
+ textarea.value = password
+ document.body.appendChild(textarea)
+ textarea.select()
+ document.execCommand('copy')
+ textarea.remove()
+ alert('Password copied to clipboard!')
+})
+
+generateEl.addEventListener('click', () => {
+ const length = +lengthEl.value
+ const hasLower = lowercaseEl.checked
+ const hasUpper = uppercaseEl.checked
+ const hasNumber = numbersEl.checked
+ const hasSymbol = symbolsEl.checked
+
+ resultEl.innerText = generatePassword(hasLower, hasUpper, hasNumber, hasSymbol, length)
+})
+
+function generatePassword(lower, upper, number, symbol, length) {
+ let generatedPassword = ''
+ const typesCount = lower + upper + number + symbol
+ const typesArr = [{lower}, {upper}, {number}, {symbol}].filter(item => Object.values(item)[0])
+
+ if(typesCount === 0) {
+ return ''
+ }
+
+ for(let i = 0; i < length; i += typesCount) {
+ typesArr.forEach(type => {
+ const funcName = Object.keys(type)[0]
+ generatedPassword += randomFunc[funcName]()
+ })
+ }
+
+ const finalPassword = generatedPassword.slice(0, length)
+
+ return finalPassword
+}
+
+function getRandomLower() {
+ return String.fromCharCode(Math.floor(Math.random() * 26) + 97)
+}
+
+function getRandomUpper() {
+ return String.fromCharCode(Math.floor(Math.random() * 26) + 65)
+}
+
+function getRandomNumber() {
+ return String.fromCharCode(Math.floor(Math.random() * 10) + 48)
+}
+
+function getRandomSymbol() {
+ const symbols = '!@#$%^&*(){}[]=<>/,.'
+ return symbols[Math.floor(Math.random() * symbols.length)]
+}
\ No newline at end of file
diff --git a/password-generator/style.css b/password-generator/style.css
new file mode 100644
index 0000000..1e017e0
--- /dev/null
+++ b/password-generator/style.css
@@ -0,0 +1,86 @@
+@import url('https://fonts.googleapis.com/css?family=Muli&display=swap');
+
+* {
+ box-sizing: border-box;
+}
+
+body {
+ background-color: #3b3b98;
+ color: #fff;
+ font-family: 'Muli', sans-serif;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ height: 100vh;
+ overflow: hidden;
+ padding: 10px;
+ margin: 0;
+}
+
+h2 {
+ margin: 10px 0 20px;
+ text-align: center;
+}
+
+.container {
+ background-color: #23235b;
+ box-shadow: 0px 2px 10px rgba(255, 255, 255, 0.2);
+ padding: 20px;
+ width: 350px;
+ max-width: 100%;
+}
+
+.result-container {
+ background-color: rgba(0, 0, 0, 0.4);
+ display: flex;
+ justify-content: flex-start;
+ align-items: center;
+ position: relative;
+ font-size: 18px;
+ letter-spacing: 1px;
+ padding: 12px 10px;
+ height: 50px;
+ width: 100%;
+}
+
+.result-container #result {
+ word-wrap: break-word;
+ max-width: calc(100% - 40px);
+ overflow-y: scroll;
+ height: 100%;
+}
+
+#result::-webkit-scrollbar {
+ width: 1rem;
+}
+
+.result-container .btn {
+ position: absolute;
+ top: 5px;
+ right: 5px;
+ width: 40px;
+ height: 40px;
+ font-size: 20px;
+}
+
+.btn {
+ border: none;
+ background-color: #3b3b98;
+ color: #fff;
+ font-size: 16px;
+ padding: 8px 12px;
+ cursor: pointer;
+}
+
+.btn-large {
+ display: block;
+ width: 100%;
+}
+
+.setting {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin: 15px 0;
+}
diff --git a/password-strength-background/index.html b/password-strength-background/index.html
new file mode 100644
index 0000000..fd14e7f
--- /dev/null
+++ b/password-strength-background/index.html
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+ Password Strength Backround
+
+
+
+
+
Image Password Strength
+
Change the password to see the effect
+
+ Email:
+
+
+
+
+ Password:
+
+
+
+
+ Submit
+
+
+
+
+
diff --git a/password-strength-background/script.js b/password-strength-background/script.js
new file mode 100644
index 0000000..82737e0
--- /dev/null
+++ b/password-strength-background/script.js
@@ -0,0 +1,9 @@
+const password = document.getElementById('password')
+const background = document.getElementById('background')
+
+password.addEventListener('input', (e) => {
+ const input = e.target.value
+ const length = input.length
+ const blurValue = 20 - length * 2
+ background.style.filter = `blur(${blurValue}px)`
+})
diff --git a/password-strength-background/style.css b/password-strength-background/style.css
new file mode 100644
index 0000000..e8d7ade
--- /dev/null
+++ b/password-strength-background/style.css
@@ -0,0 +1,25 @@
+* {
+ box-sizing: border-box;
+}
+
+body {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ height: 100vh;
+ overflow: hidden;
+ margin: 0;
+}
+
+.background {
+ background: url('https://images.unsplash.com/photo-1556745757-8d76bdb6984b')
+ no-repeat center center/cover;
+ position: absolute;
+ top: -20px;
+ bottom: -20px;
+ left: -20px;
+ right: -20px;
+ z-index: -1;
+ filter: blur(20px);
+}
diff --git a/pokedex/index.html b/pokedex/index.html
new file mode 100644
index 0000000..4fb798c
--- /dev/null
+++ b/pokedex/index.html
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+ Pokedex
+
+
+ Pokedex
+
+
+
+
+
+
diff --git a/pokedex/script.js b/pokedex/script.js
new file mode 100644
index 0000000..6b824d9
--- /dev/null
+++ b/pokedex/script.js
@@ -0,0 +1,64 @@
+const poke_container = document.getElementById('poke-container')
+const pokemon_count = 150
+const colors = {
+ fire: '#FDDFDF',
+ grass: '#DEFDE0',
+ electric: '#FCF7DE',
+ water: '#DEF3FD',
+ ground: '#f4e7da',
+ rock: '#d5d5d4',
+ fairy: '#fceaff',
+ poison: '#98d7a5',
+ bug: '#f8d5a3',
+ dragon: '#97b3e6',
+ psychic: '#eaeda1',
+ flying: '#F5F5F5',
+ fighting: '#E6E0D4',
+ normal: '#F5F5F5'
+}
+
+const main_types = Object.keys(colors)
+
+const fetchPokemons = async () => {
+ for(let i = 1; i <= pokemon_count; i++) {
+ await getPokemon(i)
+ }
+}
+
+const getPokemon = async (id) => {
+ const url = `https://pokeapi.co/api/v2/pokemon/${id}`
+ const res = await fetch(url)
+ const data = await res.json()
+ createPokemonCard(data)
+}
+
+const createPokemonCard = (pokemon) => {
+ const pokemonEl = document.createElement('div')
+ pokemonEl.classList.add('pokemon')
+
+ const name = pokemon.name[0].toUpperCase() + pokemon.name.slice(1)
+ const id = pokemon.id.toString().padStart(3, '0')
+
+ const poke_types = pokemon.types.map(type => type.type.name)
+ const type = main_types.find(type => poke_types.indexOf(type) > -1)
+ const color = colors[type]
+
+ pokemonEl.style.backgroundColor = color
+
+ const pokemonInnerHTML = `
+
+
+
+
+ #${id}
+
${name}
+ Type: ${type}
+
+ `
+
+ pokemonEl.innerHTML = pokemonInnerHTML
+
+ poke_container.appendChild(pokemonEl)
+}
+
+fetchPokemons()
diff --git a/pokedex/style.css b/pokedex/style.css
new file mode 100644
index 0000000..fc5ca34
--- /dev/null
+++ b/pokedex/style.css
@@ -0,0 +1,67 @@
+@import url('https://fonts.googleapis.com/css?family=Lato:300,400&display=swap');
+
+* {
+ box-sizing: border-box;
+}
+
+body {
+ background: #efefbb;
+ background: linear-gradient(to right, #d4d3dd, #efefbb);
+ font-family: 'Lato', sans-serif;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ margin: 0;
+}
+
+h1 {
+ letter-spacing: 3px;
+}
+
+.poke-container {
+ display: flex;
+ flex-wrap: wrap;
+ align-items: space-between;
+ justify-content: center;
+ margin: 0 auto;
+ max-width: 1200px;
+}
+
+.pokemon {
+ background-color: #eee;
+ border-radius: 10px;
+ box-shadow: 0 3px 15px rgba(100, 100, 100, 0.5);
+ margin: 10px;
+ padding: 20px;
+ text-align: center;
+}
+
+.pokemon .img-container {
+ background-color: rgba(255, 255, 255, 0.6);
+ border-radius: 50%;
+ width: 120px;
+ height: 120px;
+ text-align: center;
+}
+
+.pokemon .img-container img {
+ max-width: 90%;
+ margin-top: 20px;
+}
+
+.pokemon .info {
+ margin-top: 20px;
+}
+
+.pokemon .info .number {
+ background-color: rgba(0, 0, 0, 0.1);
+ padding: 5px 10px;
+ border-radius: 10px;
+ font-size: 0.8em;
+}
+
+.pokemon .info .name {
+ margin: 15px 0 7px;
+ letter-spacing: 1px;
+}
diff --git a/postcss.config.js b/postcss.config.js
deleted file mode 100644
index 33ad091..0000000
--- a/postcss.config.js
+++ /dev/null
@@ -1,6 +0,0 @@
-module.exports = {
- plugins: {
- tailwindcss: {},
- autoprefixer: {},
- },
-}
diff --git a/posts/django-crash-course.md b/posts/django-crash-course.md
deleted file mode 100644
index 7051747..0000000
--- a/posts/django-crash-course.md
+++ /dev/null
@@ -1,62 +0,0 @@
----
-title: 'Django Crash Course'
-date: 'May 5, 2021'
-excerpt: 'Django is a very powerful, high level Python framework for building web applications'
-cover_image: '/images/posts/img3.jpg'
-category: 'Python'
-author: 'Sam Smith'
-author_image: 'https://randomuser.me/api/portraits/men/12.jpg'
----
-
-
-
-Lorem markdownum fine incustoditam unda factura versum occuluere Aeneas, iuvat
-haec praepes [partes epulae](http://cui.com/), in egisse de. Caecisque ter
-manus. Munere in exhalat, ferre sed [habe quaeque saepe](http://ne.org/fretum)
-verba caput ferarum _nubila_? Patriam Cyparisse tamen, **saxum** fide postponere
-pavida ne omnes etiam, atque. Sonuit omina sed sine haerebat illic fit a mora
-in.
-
-1. Serrae enim Etruscam aquis
-2. Et premis et flumine frontem minatur oppressos
-3. Inquam rector Icarus possum vim tumulo propiusque
-4. Vulnus se Latreus
-5. Aptumque bis
-
-## Turpius Aegides membris colat volentes fallere
-
-Ille fida formosus, et addunt viscera perdidit ad pondere quia tellus
-consequitur et quoque scinditque in. Ratis laborum instabat quaedam partem
-Phoebus, manus _partibus poenas_. Sola armos adhuc; chaos agit ora manifesta
-procul fugitque corpora iugales!
-
- var ethics_font_drive = cycleSystemProgram + deprecatedTransferIp.ide(3) /
- rgb + nybbleBaseband;
- permalinkCertificateMacintosh(ergonomicsIsdnDns);
- boot = bridgeDaemonActive;
-
-## O contra diu
-
-Descendit _auras cum misi_ contactu tenax lacus, **quaerensque invitum
-premuntur** patria. Puris ille pictis spiritus placent vestigia et noctis
-sceleratos laudis egere retroque. Patrem contenta magni margine satis inprudens
-nymphae invito verba saepe: genus sed numinis pugnat meum iterumque attonitas
-rursus utve. Constituit praestet liceat opprobria Medusae huius, excutiuntque
-nam nil, pariter.
-
-Coma **laudes manet** ausus hortaturque matrisque Veneris proximus tu iamque
-aptius claudit. Tmolus tetigere iussos animumque quid poplite Hippotaden? Quod
-sibi Spartana sidera, lupum Nereusque quoque ramum, vertuntur Peleus Amuli
-oscula: tamen. Surgere Epidaurius movit crede soceri Euboicam quoque.
-
-Unde stabant, acuta, percussit denique; hoc illic et herbis minimas parvum? Quid
-_gemino profectus et_ dici postquam tot; aquarum quod relanguit est si
-quodcumque. Ossaque protinus, quod somno est, repetit, hoc passu est. Qui devia;
-respice humum vobis oscula, in Lotis nymphae.
-
-Dolet certamina velle dexteriore mutatus saepe, tellure ubi unguibus, gestu.
-Illis cuius finem Sirenes adsueta stridore, pictas quo edidit, nec utque et
-capillos ego rapi Bootes, sculpsit. Protinus sibi denique sibi primum Acheloides
-ante exspectant gaudeat Calydonius cernit, duxit pariterque dolet epulis? Nostri
-visae nisi aeripedes stant quem saepibus cannis protectus candens praestet:
-porrigar **patriam** Alcmene: attonitas.
diff --git a/posts/javascript-performance-tips.md b/posts/javascript-performance-tips.md
deleted file mode 100644
index 01e93c2..0000000
--- a/posts/javascript-performance-tips.md
+++ /dev/null
@@ -1,59 +0,0 @@
----
-title: 'JavaScript Performance Tips'
-date: 'May 4, 2021'
-excerpt: 'We will look at 10 simple tips and tricks to increase the speed of your code when writing JS'
-cover_image: '/images/posts/img1.jpg'
-category: 'JavaScript'
-author: 'John Doe'
-author_image: 'https://randomuser.me/api/portraits/men/11.jpg'
----
-
-
-
-Lorem [markdownum](http://insunt.org/inpositaque), et sanguine rutilos dixit
-nigro cornu genus duris linguae. Super hic deus ego adveniens nullumque Venerem
-equis aurem aliisque celare densis dextramque similis **post**: mihi rexerat;
-bis.
-
-1. Scinditur annos
-2. Talia verba
-3. Habet delata villis domui
-4. Geminum viscere deum et utque
-
-## Magnorum nulla avertit pedem neque monimenta terram
-
-Quo numquam, nunc [concussaque](http://mox-cunctos.net/), hora effugit mihi,
-pectore. Hinc fausto, circumspicit cadas; virilibus rapui, timidum rorat cuique
-animorum ac! Quem sit. Venit qui, rex sibi tota, peto _fortis ira suis_ dolusque
-simulatque [incipit crudelesque
-pavens](http://www.corpora.com/terrae-oscula.html) spatiosa conlegit oscula
-equam.
-
-## Mensis idem
-
-Caelestia Ganymedes gentis. Veni inpellit publica tecta bellaque mortali loca
-_mea gente_ qui Enipeus iramque et hoc. _Altera Rex vetitum_; hoc magis dolores
-precor nec. Ubi verba, et aras regia, cognoscere vites tempusque expers, heros?
-
-## Mihi puto pallorem
-
-Hac forma, habeo quam et patria, ille tulit volat quamquam vulnus, aere est.
-Ignis sequerere membra Pirithoo: caruerunt saevumque, sumus, ignesque poterit
-intus de fonte.
-
-## Quondam montibus tua spes consilioque nata consilioque
-
-Abigitque limite. Ipsa levis extulit munera, litora, ira pavet in morte, **te
-in** quas [vix](http://auxiliumquefando.net/vocibus-cum). Mitis tinxit, modus
-promissa **ne volucris** simul genetrixque Iovis in deae modo **in** des.
-_Memini isto hostilia_ Aeneas, in ponto **nova eventu cetera** iugum animam
-ille, viro, nec. Loquendi aves insisto saecula premente nec, at ego poscit ubi
-sub!
-
-- Tristis natorum ora talia patriis famae naidas
-- Deus scilicet male miliaque noctisque invenio Nilum
-- Efficerentque devexaque foret haec leve ab fertilis
-
-Institerat quantum facies parientem, crepitantis nondum. Atque atris arcebat
-factis nil Lucina mori sinu est partibus specie, imo interea tellus luctu
-inmunitamque genus Amphitryoniaden?
diff --git a/posts/manage-react-state-with-xstate.md b/posts/manage-react-state-with-xstate.md
deleted file mode 100644
index 760ed93..0000000
--- a/posts/manage-react-state-with-xstate.md
+++ /dev/null
@@ -1,63 +0,0 @@
----
-title: 'Manage React State With XState'
-date: 'May 15, 2021'
-excerpt: 'The most straightforward way of using XState with React is through local component state'
-cover_image: '/images/posts/img8.jpg'
-category: 'JavaScript'
-author: 'Sam Smith'
-author_image: 'https://randomuser.me/api/portraits/men/18.jpg'
----
-
-
-
-
-Lorem markdownum fine incustoditam unda factura versum occuluere Aeneas, iuvat
-haec praepes [partes epulae](http://cui.com/), in egisse de. Caecisque ter
-manus. Munere in exhalat, ferre sed [habe quaeque saepe](http://ne.org/fretum)
-verba caput ferarum _nubila_? Patriam Cyparisse tamen, **saxum** fide postponere
-pavida ne omnes etiam, atque. Sonuit omina sed sine haerebat illic fit a mora
-in.
-
-1. Serrae enim Etruscam aquis
-2. Et premis et flumine frontem minatur oppressos
-3. Inquam rector Icarus possum vim tumulo propiusque
-4. Vulnus se Latreus
-5. Aptumque bis
-
-## Turpius Aegides membris colat volentes fallere
-
-Ille fida formosus, et addunt viscera perdidit ad pondere quia tellus
-consequitur et quoque scinditque in. Ratis laborum instabat quaedam partem
-Phoebus, manus _partibus poenas_. Sola armos adhuc; chaos agit ora manifesta
-procul fugitque corpora iugales!
-
- var ethics_font_drive = cycleSystemProgram + deprecatedTransferIp.ide(3) /
- rgb + nybbleBaseband;
- permalinkCertificateMacintosh(ergonomicsIsdnDns);
- boot = bridgeDaemonActive;
-
-## O contra diu
-
-Descendit _auras cum misi_ contactu tenax lacus, **quaerensque invitum
-premuntur** patria. Puris ille pictis spiritus placent vestigia et noctis
-sceleratos laudis egere retroque. Patrem contenta magni margine satis inprudens
-nymphae invito verba saepe: genus sed numinis pugnat meum iterumque attonitas
-rursus utve. Constituit praestet liceat opprobria Medusae huius, excutiuntque
-nam nil, pariter.
-
-Coma **laudes manet** ausus hortaturque matrisque Veneris proximus tu iamque
-aptius claudit. Tmolus tetigere iussos animumque quid poplite Hippotaden? Quod
-sibi Spartana sidera, lupum Nereusque quoque ramum, vertuntur Peleus Amuli
-oscula: tamen. Surgere Epidaurius movit crede soceri Euboicam quoque.
-
-Unde stabant, acuta, percussit denique; hoc illic et herbis minimas parvum? Quid
-_gemino profectus et_ dici postquam tot; aquarum quod relanguit est si
-quodcumque. Ossaque protinus, quod somno est, repetit, hoc passu est. Qui devia;
-respice humum vobis oscula, in Lotis nymphae.
-
-Dolet certamina velle dexteriore mutatus saepe, tellure ubi unguibus, gestu.
-Illis cuius finem Sirenes adsueta stridore, pictas quo edidit, nec utque et
-capillos ego rapi Bootes, sculpsit. Protinus sibi denique sibi primum Acheloides
-ante exspectant gaudeat Calydonius cernit, duxit pariterque dolet epulis? Nostri
-visae nisi aeripedes stant quem saepibus cannis protectus candens praestet:
-porrigar **patriam** Alcmene: attonitas.
diff --git a/posts/new-in-php-8.md b/posts/new-in-php-8.md
deleted file mode 100644
index e604acf..0000000
--- a/posts/new-in-php-8.md
+++ /dev/null
@@ -1,75 +0,0 @@
----
-title: "What's New In PHP 8?"
-date: 'May 7, 2021'
-excerpt: 'In this article we will look at some of the new features offered in version 8 of PHP'
-cover_image: '/images/posts/img4.jpg'
-category: 'PHP'
-author: 'Sara Johnson'
-author_image: 'https://randomuser.me/api/portraits/women/12.jpg'
----
-
-
-
-Lorem markdownum erat meritum instat quis! Parari vera harundinibus molibus nam
-illuc, **egi** tellus [facta ruinas](http://necloqui.com/fuit.html), iterumque!
-Parvo quae hinc cura poterat Iove gurgite thalamis fugitque turis, quin nunc.
-
- var pdf_linux_radcab = gibibyteAspUri + firewireIvr -
- jre_software_character;
- var megabit_layout = 38 + executableExpansionHdd(storage_import_runtime,
- tweenJpeg) - contextual;
- url_bing.upnp_modifier_cold(linkedin, inputTrackballRefresh.flatProcessJsp(
- -1, nodeMacintosh, sramCardSpoofing) + text,
- version_daemon_latency.localhost_compact_boot.dosSpool(
- memory_controller_blu(jpegServer, maximizeAsciiType), status));
-
-Iungunt cuspis rarissima tendentem domus natis tamen ultima domino invidiosa
-cautum nec falcatus viridi omnes, soror. Ire tacita. Dissidet eat voce et
-Pactolides illa sed [hunc](http://passim.com/) longi illa arborea, dum securi;
-vidit.
-
-## Dant testa animalia sequendi paterni manus parte
-
-_Venus_ dissimulare perii _iaculatur dedere multumque_ sitim, cur tela
-temeraria, per? Meum eque deae tu vidisse Frigus triennia, equo
-[trahit](http://in.net/ignarusfuit.html), enim verti commota prima cornibus
-pectora!
-
- tiffWord(snippetAnimatedCd);
- wrap_exbibyte = cropStation;
- if (page(mailDvCybersquatter, error, ip)) {
- xsltMacintosh += ip;
- } else {
- social += traceroute_redundancy_voip;
- box_isp.lion = wepSuffix;
- }
-
-Tam Pomona _fixis cera vidisse_ Sperchios ista _concordes_ parte comes animalia
-ira miserae magna iaculatur sententia abest. [Est](http://puer-nec.io/squalidus)
-illam esse hasta? Iamque Argolico spumam quondam, Sirenes dolor longus arbor
-perque.
-
-## Iamque illa numquam dictis
-
-Verberat arma parte mariti, tempora mugit glomerataque illa epulis: Troiam. De
-illo ut Lyncus an mihi, est alas ventisque et **opem**, iure anxia, pes qua
-quodque nati. Morti est tertia tutissimus prope, **herbas** hoc cecidere
-videres. Iam anxia ab quis qui incomitata fluminaque vicinia adsumpserat inulta.
-Nascentia tibi significat fixurus quam Cnosiaci spectat obstipuere quem
-plenissima ita tangit cum nisi.
-
- class.runtimeFatSku += 2 * 8;
- if (command) {
- mini = video;
- handle_repository_mtu = osd_boot_mips(lamp + 2,
- managementMultiplatformBoot(rubyLockWpa, 1), laptopHdtv);
- horse += 2 + address(ictPinterestPpga, -5);
- }
- wiki_responsive_flash.ddr_disk -= c_cd +
- andCopy.intellectual_so_iteration.cross(moduleReadme, programming +
- broadband);
-
-Mirantia deique sacerdos, opus, at [generis eandem
-planamque](http://www.potentia.net/lapis). Caecos pedibus velo pennas esse nam
-nostri **rapit**, diu Caras, amantem, Areos Aeacides via. Ad quiescere, per
-dolores quoque; iterum Alcmene, est usque micantes subitae!
diff --git a/posts/python-book-review.md b/posts/python-book-review.md
deleted file mode 100644
index 41b0c78..0000000
--- a/posts/python-book-review.md
+++ /dev/null
@@ -1,62 +0,0 @@
----
-title: 'Python Book Review'
-date: 'May 7, 2021'
-excerpt: 'In this review, we will be looking at the new Python book from Oriley'
-cover_image: '/images/posts/img6.jpg'
-category: 'Python'
-author: 'Mike Richards'
-author_image: 'https://randomuser.me/api/portraits/men/13.jpg'
----
-
-
-
-Lorem markdownum fine incustoditam unda factura versum occuluere Aeneas, iuvat
-haec praepes [partes epulae](http://cui.com/), in egisse de. Caecisque ter
-manus. Munere in exhalat, ferre sed [habe quaeque saepe](http://ne.org/fretum)
-verba caput ferarum _nubila_? Patriam Cyparisse tamen, **saxum** fide postponere
-pavida ne omnes etiam, atque. Sonuit omina sed sine haerebat illic fit a mora
-in.
-
-1. Serrae enim Etruscam aquis
-2. Et premis et flumine frontem minatur oppressos
-3. Inquam rector Icarus possum vim tumulo propiusque
-4. Vulnus se Latreus
-5. Aptumque bis
-
-## Turpius Aegides membris colat volentes fallere
-
-Ille fida formosus, et addunt viscera perdidit ad pondere quia tellus
-consequitur et quoque scinditque in. Ratis laborum instabat quaedam partem
-Phoebus, manus _partibus poenas_. Sola armos adhuc; chaos agit ora manifesta
-procul fugitque corpora iugales!
-
- var ethics_font_drive = cycleSystemProgram + deprecatedTransferIp.ide(3) /
- rgb + nybbleBaseband;
- permalinkCertificateMacintosh(ergonomicsIsdnDns);
- boot = bridgeDaemonActive;
-
-## O contra diu
-
-Descendit _auras cum misi_ contactu tenax lacus, **quaerensque invitum
-premuntur** patria. Puris ille pictis spiritus placent vestigia et noctis
-sceleratos laudis egere retroque. Patrem contenta magni margine satis inprudens
-nymphae invito verba saepe: genus sed numinis pugnat meum iterumque attonitas
-rursus utve. Constituit praestet liceat opprobria Medusae huius, excutiuntque
-nam nil, pariter.
-
-Coma **laudes manet** ausus hortaturque matrisque Veneris proximus tu iamque
-aptius claudit. Tmolus tetigere iussos animumque quid poplite Hippotaden? Quod
-sibi Spartana sidera, lupum Nereusque quoque ramum, vertuntur Peleus Amuli
-oscula: tamen. Surgere Epidaurius movit crede soceri Euboicam quoque.
-
-Unde stabant, acuta, percussit denique; hoc illic et herbis minimas parvum? Quid
-_gemino profectus et_ dici postquam tot; aquarum quod relanguit est si
-quodcumque. Ossaque protinus, quod somno est, repetit, hoc passu est. Qui devia;
-respice humum vobis oscula, in Lotis nymphae.
-
-Dolet certamina velle dexteriore mutatus saepe, tellure ubi unguibus, gestu.
-Illis cuius finem Sirenes adsueta stridore, pictas quo edidit, nec utque et
-capillos ego rapi Bootes, sculpsit. Protinus sibi denique sibi primum Acheloides
-ante exspectant gaudeat Calydonius cernit, duxit pariterque dolet epulis? Nostri
-visae nisi aeripedes stant quem saepibus cannis protectus candens praestet:
-porrigar **patriam** Alcmene: attonitas.
diff --git a/posts/react-crash-course.md b/posts/react-crash-course.md
deleted file mode 100644
index 6f75030..0000000
--- a/posts/react-crash-course.md
+++ /dev/null
@@ -1,62 +0,0 @@
----
-title: 'React Crash Course'
-date: 'May 8, 2021'
-excerpt: 'Crash course to learn the React JavaScript library. We will look at components, hooks and more'
-cover_image: '/images/posts/img5.jpg'
-category: 'JavaScript'
-author: 'Jane Doe'
-author_image: 'https://randomuser.me/api/portraits/women/11.jpg'
----
-
-
-
-Lorem markdownum fine incustoditam unda factura versum occuluere Aeneas, iuvat
-haec praepes [partes epulae](http://cui.com/), in egisse de. Caecisque ter
-manus. Munere in exhalat, ferre sed [habe quaeque saepe](http://ne.org/fretum)
-verba caput ferarum _nubila_? Patriam Cyparisse tamen, **saxum** fide postponere
-pavida ne omnes etiam, atque. Sonuit omina sed sine haerebat illic fit a mora
-in.
-
-1. Serrae enim Etruscam aquis
-2. Et premis et flumine frontem minatur oppressos
-3. Inquam rector Icarus possum vim tumulo propiusque
-4. Vulnus se Latreus
-5. Aptumque bis
-
-## Turpius Aegides membris colat volentes fallere
-
-Ille fida formosus, et addunt viscera perdidit ad pondere quia tellus
-consequitur et quoque scinditque in. Ratis laborum instabat quaedam partem
-Phoebus, manus _partibus poenas_. Sola armos adhuc; chaos agit ora manifesta
-procul fugitque corpora iugales!
-
- var ethics_font_drive = cycleSystemProgram + deprecatedTransferIp.ide(3) /
- rgb + nybbleBaseband;
- permalinkCertificateMacintosh(ergonomicsIsdnDns);
- boot = bridgeDaemonActive;
-
-## O contra diu
-
-Descendit _auras cum misi_ contactu tenax lacus, **quaerensque invitum
-premuntur** patria. Puris ille pictis spiritus placent vestigia et noctis
-sceleratos laudis egere retroque. Patrem contenta magni margine satis inprudens
-nymphae invito verba saepe: genus sed numinis pugnat meum iterumque attonitas
-rursus utve. Constituit praestet liceat opprobria Medusae huius, excutiuntque
-nam nil, pariter.
-
-Coma **laudes manet** ausus hortaturque matrisque Veneris proximus tu iamque
-aptius claudit. Tmolus tetigere iussos animumque quid poplite Hippotaden? Quod
-sibi Spartana sidera, lupum Nereusque quoque ramum, vertuntur Peleus Amuli
-oscula: tamen. Surgere Epidaurius movit crede soceri Euboicam quoque.
-
-Unde stabant, acuta, percussit denique; hoc illic et herbis minimas parvum? Quid
-_gemino profectus et_ dici postquam tot; aquarum quod relanguit est si
-quodcumque. Ossaque protinus, quod somno est, repetit, hoc passu est. Qui devia;
-respice humum vobis oscula, in Lotis nymphae.
-
-Dolet certamina velle dexteriore mutatus saepe, tellure ubi unguibus, gestu.
-Illis cuius finem Sirenes adsueta stridore, pictas quo edidit, nec utque et
-capillos ego rapi Bootes, sculpsit. Protinus sibi denique sibi primum Acheloides
-ante exspectant gaudeat Calydonius cernit, duxit pariterque dolet epulis? Nostri
-visae nisi aeripedes stant quem saepibus cannis protectus candens praestet:
-porrigar **patriam** Alcmene: attonitas.
diff --git a/posts/tailwind-vs-bootstrap.md b/posts/tailwind-vs-bootstrap.md
deleted file mode 100644
index 9b6ce2f..0000000
--- a/posts/tailwind-vs-bootstrap.md
+++ /dev/null
@@ -1,62 +0,0 @@
----
-title: 'Tailwind vs. Bootstrap'
-date: 'May 5, 2021'
-excerpt: 'Both Tailwind and Bootstrap are very popular CSS frameworks. In this article, we will compare them'
-cover_image: '/images/posts/img2.jpg'
-category: 'CSS'
-author: 'Jane Doe'
-author_image: 'https://randomuser.me/api/portraits/women/11.jpg'
----
-
-
-
-Lorem markdownum fine incustoditam unda factura versum occuluere Aeneas, iuvat
-haec praepes [partes epulae](http://cui.com/), in egisse de. Caecisque ter
-manus. Munere in exhalat, ferre sed [habe quaeque saepe](http://ne.org/fretum)
-verba caput ferarum _nubila_? Patriam Cyparisse tamen, **saxum** fide postponere
-pavida ne omnes etiam, atque. Sonuit omina sed sine haerebat illic fit a mora
-in.
-
-1. Serrae enim Etruscam aquis
-2. Et premis et flumine frontem minatur oppressos
-3. Inquam rector Icarus possum vim tumulo propiusque
-4. Vulnus se Latreus
-5. Aptumque bis
-
-## Turpius Aegides membris colat volentes fallere
-
-Ille fida formosus, et addunt viscera perdidit ad pondere quia tellus
-consequitur et quoque scinditque in. Ratis laborum instabat quaedam partem
-Phoebus, manus _partibus poenas_. Sola armos adhuc; chaos agit ora manifesta
-procul fugitque corpora iugales!
-
- var ethics_font_drive = cycleSystemProgram + deprecatedTransferIp.ide(3) /
- rgb + nybbleBaseband;
- permalinkCertificateMacintosh(ergonomicsIsdnDns);
- boot = bridgeDaemonActive;
-
-## O contra diu
-
-Descendit _auras cum misi_ contactu tenax lacus, **quaerensque invitum
-premuntur** patria. Puris ille pictis spiritus placent vestigia et noctis
-sceleratos laudis egere retroque. Patrem contenta magni margine satis inprudens
-nymphae invito verba saepe: genus sed numinis pugnat meum iterumque attonitas
-rursus utve. Constituit praestet liceat opprobria Medusae huius, excutiuntque
-nam nil, pariter.
-
-Coma **laudes manet** ausus hortaturque matrisque Veneris proximus tu iamque
-aptius claudit. Tmolus tetigere iussos animumque quid poplite Hippotaden? Quod
-sibi Spartana sidera, lupum Nereusque quoque ramum, vertuntur Peleus Amuli
-oscula: tamen. Surgere Epidaurius movit crede soceri Euboicam quoque.
-
-Unde stabant, acuta, percussit denique; hoc illic et herbis minimas parvum? Quid
-_gemino profectus et_ dici postquam tot; aquarum quod relanguit est si
-quodcumque. Ossaque protinus, quod somno est, repetit, hoc passu est. Qui devia;
-respice humum vobis oscula, in Lotis nymphae.
-
-Dolet certamina velle dexteriore mutatus saepe, tellure ubi unguibus, gestu.
-Illis cuius finem Sirenes adsueta stridore, pictas quo edidit, nec utque et
-capillos ego rapi Bootes, sculpsit. Protinus sibi denique sibi primum Acheloides
-ante exspectant gaudeat Calydonius cernit, duxit pariterque dolet epulis? Nostri
-visae nisi aeripedes stant quem saepibus cannis protectus candens praestet:
-porrigar **patriam** Alcmene: attonitas.
diff --git a/posts/writing-great-unit-tests.md b/posts/writing-great-unit-tests.md
deleted file mode 100644
index bef39ee..0000000
--- a/posts/writing-great-unit-tests.md
+++ /dev/null
@@ -1,60 +0,0 @@
----
-title: 'Writing Great Unit Tests'
-date: 'May 12, 2021'
-excerpt: 'We will look at 10 simple tips and tricks on writing unit tests in JavaScript'
-cover_image: '/images/posts/img7.jpg'
-category: 'JavaScript'
-author: 'John Doe'
-author_image: 'https://randomuser.me/api/portraits/men/11.jpg'
----
-
-
-
-
-Lorem [markdownum](http://insunt.org/inpositaque), et sanguine rutilos dixit
-nigro cornu genus duris linguae. Super hic deus ego adveniens nullumque Venerem
-equis aurem aliisque celare densis dextramque similis **post**: mihi rexerat;
-bis.
-
-1. Scinditur annos
-2. Talia verba
-3. Habet delata villis domui
-4. Geminum viscere deum et utque
-
-## Magnorum nulla avertit pedem neque monimenta terram
-
-Quo numquam, nunc [concussaque](http://mox-cunctos.net/), hora effugit mihi,
-pectore. Hinc fausto, circumspicit cadas; virilibus rapui, timidum rorat cuique
-animorum ac! Quem sit. Venit qui, rex sibi tota, peto _fortis ira suis_ dolusque
-simulatque [incipit crudelesque
-pavens](http://www.corpora.com/terrae-oscula.html) spatiosa conlegit oscula
-equam.
-
-## Mensis idem
-
-Caelestia Ganymedes gentis. Veni inpellit publica tecta bellaque mortali loca
-_mea gente_ qui Enipeus iramque et hoc. _Altera Rex vetitum_; hoc magis dolores
-precor nec. Ubi verba, et aras regia, cognoscere vites tempusque expers, heros?
-
-## Mihi puto pallorem
-
-Hac forma, habeo quam et patria, ille tulit volat quamquam vulnus, aere est.
-Ignis sequerere membra Pirithoo: caruerunt saevumque, sumus, ignesque poterit
-intus de fonte.
-
-## Quondam montibus tua spes consilioque nata consilioque
-
-Abigitque limite. Ipsa levis extulit munera, litora, ira pavet in morte, **te
-in** quas [vix](http://auxiliumquefando.net/vocibus-cum). Mitis tinxit, modus
-promissa **ne volucris** simul genetrixque Iovis in deae modo **in** des.
-_Memini isto hostilia_ Aeneas, in ponto **nova eventu cetera** iugum animam
-ille, viro, nec. Loquendi aves insisto saecula premente nec, at ego poscit ubi
-sub!
-
-- Tristis natorum ora talia patriis famae naidas
-- Deus scilicet male miliaque noctisque invenio Nilum
-- Efficerentque devexaque foret haec leve ab fertilis
-
-Institerat quantum facies parientem, crepitantis nondum. Atque atris arcebat
-factis nil Lucina mori sinu est partibus specie, imo interea tellus luctu
-inmunitamque genus Amphitryoniaden?
diff --git a/progress-steps/index.html b/progress-steps/index.html
new file mode 100644
index 0000000..8672c0c
--- /dev/null
+++ b/progress-steps/index.html
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+ Progress Steps
+
+
+
+
+
+
diff --git a/progress-steps/script.js b/progress-steps/script.js
new file mode 100644
index 0000000..58067d4
--- /dev/null
+++ b/progress-steps/script.js
@@ -0,0 +1,49 @@
+const progress = document.getElementById('progress')
+const prev = document.getElementById('prev')
+const next = document.getElementById('next')
+const circles = document.querySelectorAll('.circle')
+
+let currentActive = 1
+
+next.addEventListener('click', () => {
+ currentActive++
+
+ if(currentActive > circles.length) {
+ currentActive = circles.length
+ }
+
+ update()
+})
+
+prev.addEventListener('click', () => {
+ currentActive--
+
+ if(currentActive < 1) {
+ currentActive = 1
+ }
+
+ update()
+})
+
+function update() {
+ circles.forEach((circle, idx) => {
+ if(idx < currentActive) {
+ circle.classList.add('active')
+ } else {
+ circle.classList.remove('active')
+ }
+ })
+
+ const actives = document.querySelectorAll('.active')
+
+ progress.style.width = (actives.length - 1) / (circles.length - 1) * 100 + '%'
+
+ if(currentActive === 1) {
+ prev.disabled = true
+ } else if(currentActive === circles.length) {
+ next.disabled = true
+ } else {
+ prev.disabled = false
+ next.disabled = false
+ }
+}
\ No newline at end of file
diff --git a/progress-steps/style.css b/progress-steps/style.css
new file mode 100644
index 0000000..d8462f6
--- /dev/null
+++ b/progress-steps/style.css
@@ -0,0 +1,100 @@
+@import url('https://fonts.googleapis.com/css?family=Muli&display=swap');
+
+:root {
+ --line-border-fill: #3498db;
+ --line-border-empty: #e0e0e0;
+}
+
+* {
+ box-sizing: border-box;
+}
+
+body {
+ background-color: #f6f7fb;
+ font-family: 'Muli', sans-serif;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 100vh;
+ overflow: hidden;
+ margin: 0;
+}
+
+.container {
+ text-align: center;
+}
+
+.progress-container {
+ display: flex;
+ justify-content: space-between;
+ position: relative;
+ margin-bottom: 30px;
+ max-width: 100%;
+ width: 350px;
+}
+
+.progress-container::before {
+ content: '';
+ background-color: var(--line-border-empty);
+ position: absolute;
+ top: 50%;
+ left: 0;
+ transform: translateY(-50%);
+ height: 4px;
+ width: 100%;
+ z-index: -1;
+}
+
+.progress {
+ background-color: var(--line-border-fill);
+ position: absolute;
+ top: 50%;
+ left: 0;
+ transform: translateY(-50%);
+ height: 4px;
+ width: 0%;
+ z-index: -1;
+ transition: 0.4s ease;
+}
+
+.circle {
+ background-color: #fff;
+ color: #999;
+ border-radius: 50%;
+ height: 30px;
+ width: 30px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ border: 3px solid var(--line-border-empty);
+ transition: 0.4s ease;
+}
+
+.circle.active {
+ border-color: var(--line-border-fill);
+}
+
+.btn {
+ background-color: var(--line-border-fill);
+ color: #fff;
+ border: 0;
+ border-radius: 6px;
+ cursor: pointer;
+ font-family: inherit;
+ padding: 8px 30px;
+ margin: 5px;
+ font-size: 14px;
+}
+
+.btn:active {
+ transform: scale(0.98);
+}
+
+.btn:focus {
+ outline: 0;
+}
+
+.btn:disabled {
+ background-color: var(--line-border-empty);
+ cursor: not-allowed;
+}
diff --git a/public/favicon.ico b/public/favicon.ico
deleted file mode 100644
index 12365b8..0000000
Binary files a/public/favicon.ico and /dev/null differ
diff --git a/public/images/logo.png b/public/images/logo.png
deleted file mode 100644
index 413ce36..0000000
Binary files a/public/images/logo.png and /dev/null differ
diff --git a/public/images/posts/img1.jpg b/public/images/posts/img1.jpg
deleted file mode 100644
index fdf0e68..0000000
Binary files a/public/images/posts/img1.jpg and /dev/null differ
diff --git a/public/images/posts/img2.jpg b/public/images/posts/img2.jpg
deleted file mode 100644
index 369fc27..0000000
Binary files a/public/images/posts/img2.jpg and /dev/null differ
diff --git a/public/images/posts/img3.jpg b/public/images/posts/img3.jpg
deleted file mode 100644
index cc84715..0000000
Binary files a/public/images/posts/img3.jpg and /dev/null differ
diff --git a/public/images/posts/img4.jpg b/public/images/posts/img4.jpg
deleted file mode 100644
index 0ade4e0..0000000
Binary files a/public/images/posts/img4.jpg and /dev/null differ
diff --git a/public/images/posts/img5.jpg b/public/images/posts/img5.jpg
deleted file mode 100644
index 4d3eb9a..0000000
Binary files a/public/images/posts/img5.jpg and /dev/null differ
diff --git a/public/images/posts/img6.jpg b/public/images/posts/img6.jpg
deleted file mode 100644
index bb80ca7..0000000
Binary files a/public/images/posts/img6.jpg and /dev/null differ
diff --git a/public/images/posts/img7.jpg b/public/images/posts/img7.jpg
deleted file mode 100644
index f8e859d..0000000
Binary files a/public/images/posts/img7.jpg and /dev/null differ
diff --git a/public/images/posts/img8.jpg b/public/images/posts/img8.jpg
deleted file mode 100644
index 7af1046..0000000
Binary files a/public/images/posts/img8.jpg and /dev/null differ
diff --git a/public/images/screen.png b/public/images/screen.png
deleted file mode 100644
index 9be8b00..0000000
Binary files a/public/images/screen.png and /dev/null differ
diff --git a/public/images/search.svg b/public/images/search.svg
deleted file mode 100644
index 977230f..0000000
--- a/public/images/search.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/public/vercel.svg b/public/vercel.svg
deleted file mode 100644
index fbf0e25..0000000
--- a/public/vercel.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/quiz-app/index.html b/quiz-app/index.html
new file mode 100644
index 0000000..688716a
--- /dev/null
+++ b/quiz-app/index.html
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+ Quiz App
+
+
+
+
+ Submit
+
+
+
+
diff --git a/quiz-app/script.js b/quiz-app/script.js
new file mode 100644
index 0000000..543ee19
--- /dev/null
+++ b/quiz-app/script.js
@@ -0,0 +1,98 @@
+const quizData = [
+ {
+ question: "Which language runs in a web browser?",
+ a: "Java",
+ b: "C",
+ c: "Python",
+ d: "JavaScript",
+ correct: "d",
+ },
+ {
+ question: "What does CSS stand for?",
+ a: "Central Style Sheets",
+ b: "Cascading Style Sheets",
+ c: "Cascading Simple Sheets",
+ d: "Cars SUVs Sailboats",
+ correct: "b",
+ },
+ {
+ question: "What does HTML stand for?",
+ a: "Hypertext Markup Language",
+ b: "Hypertext Markdown Language",
+ c: "Hyperloop Machine Language",
+ d: "Helicopters Terminals Motorboats Lamborginis",
+ correct: "a",
+ },
+ {
+ question: "What year was JavaScript launched?",
+ a: "1996",
+ b: "1995",
+ c: "1994",
+ d: "none of the above",
+ correct: "b",
+ },
+];
+
+const quiz = document.getElementById('quiz')
+const answerEls = document.querySelectorAll('.answer')
+const questionEl = document.getElementById('question')
+const a_text = document.getElementById('a_text')
+const b_text = document.getElementById('b_text')
+const c_text = document.getElementById('c_text')
+const d_text = document.getElementById('d_text')
+const submitBtn = document.getElementById('submit')
+
+let currentQuiz = 0
+let score = 0
+
+loadQuiz()
+
+function loadQuiz() {
+ deselectAnswers()
+
+ const currentQuizData = quizData[currentQuiz]
+
+ questionEl.innerText = currentQuizData.question
+ a_text.innerText = currentQuizData.a
+ b_text.innerText = currentQuizData.b
+ c_text.innerText = currentQuizData.c
+ d_text.innerText = currentQuizData.d
+}
+
+function deselectAnswers() {
+ answerEls.forEach(answerEl => answerEl.checked = false)
+}
+
+function getSelected() {
+ let answer
+
+ answerEls.forEach(answerEl => {
+ if(answerEl.checked) {
+ answer = answerEl.id
+ }
+ })
+
+ return answer
+}
+
+submitBtn.addEventListener('click', () => {
+ const answer = getSelected()
+
+ if(answer) {
+ if(answer === quizData[currentQuiz].correct) {
+ score++
+ }
+
+ currentQuiz++
+
+ if(currentQuiz < quizData.length) {
+ loadQuiz()
+ } else {
+ quiz.innerHTML = `
+ You answered ${score}/${quizData.length} questions correctly
+
+ Reload
+ `
+ }
+ }
+})
\ No newline at end of file
diff --git a/quiz-app/style.css b/quiz-app/style.css
new file mode 100644
index 0000000..2db24b0
--- /dev/null
+++ b/quiz-app/style.css
@@ -0,0 +1,70 @@
+@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@200;400&display=swap');
+
+* {
+ box-sizing: border-box;
+}
+
+body {
+ background-color: #b8c6db;
+ background-image: linear-gradient(315deg, #b8c6db 0%, #f5f7fa 100%);
+ font-family: 'Poppins', sans-serif;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 100vh;
+ overflow: hidden;
+ margin: 0;
+}
+
+.quiz-container {
+ background-color: #fff;
+ border-radius: 10px;
+ box-shadow: 0 0 10px 2px rgba(100, 100, 100, 0.1);
+ width: 600px;
+ overflow: hidden;
+}
+
+.quiz-header {
+ padding: 4rem;
+}
+
+h2 {
+ padding: 1rem;
+ text-align: center;
+ margin: 0;
+}
+
+ul {
+ list-style-type: none;
+ padding: 0;
+}
+
+ul li {
+ font-size: 1.2rem;
+ margin: 1rem 0;
+}
+
+ul li label {
+ cursor: pointer;
+}
+
+button {
+ background-color: #8e44ad;
+ color: #fff;
+ border: none;
+ display: block;
+ width: 100%;
+ cursor: pointer;
+ font-size: 1.1rem;
+ font-family: inherit;
+ padding: 1.3rem;
+}
+
+button:hover {
+ background-color: #732d91;
+}
+
+button:focus {
+ outline: none;
+ background-color: #5e3370;
+}
diff --git a/random-choice-picker/index.html b/random-choice-picker/index.html
new file mode 100644
index 0000000..830f22a
--- /dev/null
+++ b/random-choice-picker/index.html
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+ Random Choice Picker
+
+
+
+
Enter all of the choices divided by a comma (','). Press enter when you're done
+
+
+
+
+
+
+
+
diff --git a/random-choice-picker/script.js b/random-choice-picker/script.js
new file mode 100644
index 0000000..3fddcc6
--- /dev/null
+++ b/random-choice-picker/script.js
@@ -0,0 +1,69 @@
+const tagsEl = document.getElementById('tags')
+const textarea = document.getElementById('textarea')
+
+textarea.focus()
+
+textarea.addEventListener('keyup', (e) => {
+ createTags(e.target.value)
+
+ if(e.key === 'Enter') {
+ setTimeout(() => {
+ e.target.value = ''
+ }, 10)
+
+ randomSelect()
+ }
+})
+
+function createTags(input) {
+ const tags = input.split(',').filter(tag => tag.trim() !== '').map(tag => tag.trim())
+
+ tagsEl.innerHTML = ''
+
+ tags.forEach(tag => {
+ const tagEl = document.createElement('span')
+ tagEl.classList.add('tag')
+ tagEl.innerText = tag
+ tagsEl.appendChild(tagEl)
+ })
+}
+
+function randomSelect() {
+ const times = 30
+
+ const interval = setInterval(() => {
+ const randomTag = pickRandomTag()
+
+ if (randomTag !== undefined) {
+ highlightTag(randomTag)
+
+ setTimeout(() => {
+ unHighlightTag(randomTag)
+ }, 100)
+ }
+ }, 100);
+
+ setTimeout(() => {
+ clearInterval(interval)
+
+ setTimeout(() => {
+ const randomTag = pickRandomTag()
+
+ highlightTag(randomTag)
+ }, 100)
+
+ }, times * 100)
+}
+
+function pickRandomTag() {
+ const tags = document.querySelectorAll('.tag')
+ return tags[Math.floor(Math.random() * tags.length)]
+}
+
+function highlightTag(tag) {
+ tag.classList.add('highlight')
+}
+
+function unHighlightTag(tag) {
+ tag.classList.remove('highlight')
+}
diff --git a/random-choice-picker/style.css b/random-choice-picker/style.css
new file mode 100644
index 0000000..c4fab60
--- /dev/null
+++ b/random-choice-picker/style.css
@@ -0,0 +1,56 @@
+@import url('https://fonts.googleapis.com/css?family=Muli&display=swap');
+
+* {
+ box-sizing: border-box;
+}
+
+body {
+ background-color: #2b88f0;
+ font-family: 'Muli', sans-serif;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ height: 100vh;
+ overflow: hidden;
+ margin: 0;
+}
+
+h3 {
+ color: #fff;
+ margin: 10px 0 20px;
+ text-align: center;
+}
+
+.container {
+ width: 500px;
+}
+
+textarea {
+ border: none;
+ display: block;
+ width: 100%;
+ height: 100px;
+ font-family: inherit;
+ padding: 10px;
+ margin: 0 0 20px;
+ font-size: 16px;
+}
+
+textarea:focus {
+ outline: none;
+}
+
+.tag {
+ background-color: #f0932b;
+ color: #fff;
+ border-radius: 50px;
+ padding: 10px 20px;
+ margin: 0 5px 10px 0;
+ font-size: 14px;
+ display: inline-block;
+}
+
+.tag.highlight {
+ background-color: #273c75;
+}
diff --git a/random-image-generator/index.html b/random-image-generator/index.html
new file mode 100644
index 0000000..9e826f7
--- /dev/null
+++ b/random-image-generator/index.html
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+ Random Image Feed
+
+
+ Random Image Feed
+
+
+
+
+
diff --git a/random-image-generator/script.js b/random-image-generator/script.js
new file mode 100644
index 0000000..0f9b658
--- /dev/null
+++ b/random-image-generator/script.js
@@ -0,0 +1,17 @@
+const container = document.querySelector('.container')
+const unsplashURL = 'https://source.unsplash.com/random/'
+const rows = 5
+
+for(let i = 0; i < rows * 3; i++) {
+ const img = document.createElement('img')
+ img.src = `${unsplashURL}${getRandomSize()}`
+ container.appendChild(img)
+}
+
+function getRandomSize() {
+ return `${getRandomNr()}x${getRandomNr()}`
+}
+
+function getRandomNr() {
+ return Math.floor(Math.random() * 10) + 300
+}
\ No newline at end of file
diff --git a/random-image-generator/style.css b/random-image-generator/style.css
new file mode 100644
index 0000000..dddbe9d
--- /dev/null
+++ b/random-image-generator/style.css
@@ -0,0 +1,36 @@
+@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap');
+
+* {
+ box-sizing: border-box;
+}
+
+body {
+ font-family: 'Roboto', sans-serif;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ min-height: 100vh;
+ margin: 0;
+}
+
+.title {
+ margin: 10px 0 0;
+ text-align: center;
+}
+
+.container {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ flex-wrap: wrap;
+ max-width: 1000px;
+}
+
+.container img {
+ object-fit: cover;
+ margin: 10px;
+ height: 300px;
+ width: 300px;
+ max-width: 100%;
+}
diff --git a/rotating-nav-animation/index.html b/rotating-nav-animation/index.html
new file mode 100644
index 0000000..98d8215
--- /dev/null
+++ b/rotating-nav-animation/index.html
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+ Rotating Navigation
+
+
+
+
+
+
+
Amazing Article
+
Florin Pop
+
Lorem ipsum dolor sit amet consectetur adipisicing elit. Accusantium quia in ratione dolores cupiditate, maxime aliquid impedit dolorem nam dolor omnis atque fuga labore modi veritatis porro laborum minus, illo, maiores recusandae cumque ipsa quos. Tenetur, consequuntur mollitia labore pariatur sunt quia harum aut. Eum maxime dolorem provident natus veritatis molestiae cumque quod voluptates ab non, tempore cupiditate? Voluptatem, molestias culpa. Corrupti, laudantium iure aliquam rerum sint nam quas dolor dignissimos in error placeat quae temporibus minus optio eum soluta cupiditate! Cupiditate saepe voluptates laudantium. Ducimus consequuntur perferendis consequatur nobis exercitationem molestias fugiat commodi omnis. Asperiores quia tenetur nemo ipsa.
+
+
My Dog
+
+
Lorem, ipsum dolor sit amet consectetur adipisicing elit. Sit libero deleniti rerum quo, incidunt vel consequatur culpa ullam. Magnam facere earum unde harum. Ea culpa veritatis magnam at aliquid. Perferendis totam placeat molestias illo laudantium? Minus id minima doloribus dolorum fugit deserunt qui vero voluptas, ut quia cum amet temporibus veniam ad ea ab perspiciatis, enim accusamus asperiores explicabo provident. Voluptates sint, neque fuga cum illum, tempore autem maxime similique laborum odio, magnam esse. Aperiam?
+
+
+
+
+
+
+
+
+
diff --git a/rotating-nav-animation/script.js b/rotating-nav-animation/script.js
new file mode 100644
index 0000000..1521dcd
--- /dev/null
+++ b/rotating-nav-animation/script.js
@@ -0,0 +1,7 @@
+const open = document.getElementById('open')
+const close = document.getElementById('close')
+const container = document.querySelector('.container')
+
+open.addEventListener('click', () => container.classList.add('show-nav'))
+
+close.addEventListener('click', () => container.classList.remove('show-nav'))
\ No newline at end of file
diff --git a/rotating-nav-animation/style.css b/rotating-nav-animation/style.css
new file mode 100644
index 0000000..c249065
--- /dev/null
+++ b/rotating-nav-animation/style.css
@@ -0,0 +1,145 @@
+@import url('https://fonts.googleapis.com/css?family=Lato&display=swap');
+
+* {
+ box-sizing: border-box;
+}
+
+body {
+ font-family: 'Lato', sans-serif;
+ background-color: #333;
+ color: #222;
+ overflow-x: hidden;
+ margin: 0;
+}
+
+.container {
+ background-color: #fafafa;
+ transform-origin: top left;
+ transition: transform 0.5s linear;
+ width: 100vw;
+ min-height: 100vh;
+ padding: 50px;
+}
+
+.container.show-nav {
+ transform: rotate(-20deg);
+}
+
+.circle-container {
+ position: fixed;
+ top: -100px;
+ left: -100px;
+}
+
+.circle {
+ background-color: #ff7979;
+ height: 200px;
+ width: 200px;
+ border-radius: 50%;
+ position: relative;
+ transition: transform 0.5s linear;
+}
+
+.container.show-nav .circle {
+ transform: rotate(-70deg);
+}
+
+.circle button {
+ cursor: pointer;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ height: 100px;
+ background: transparent;
+ border: 0;
+ font-size: 26px;
+ color: #fff;
+}
+
+.circle button:focus {
+ outline: none;
+}
+
+.circle button#open {
+ left: 60%;
+}
+
+.circle button#close {
+ top: 60%;
+ transform: rotate(90deg);
+ transform-origin: top left;
+}
+
+.container.show-nav + nav li {
+ transform: translateX(0);
+ transition-delay: 0.3s;
+}
+
+nav {
+ position: fixed;
+ bottom: 40px;
+ left: 0;
+ z-index: 100;
+}
+
+nav ul {
+ list-style-type: none;
+ padding-left: 30px;
+}
+
+nav ul li {
+ text-transform: uppercase;
+ color: #fff;
+ margin: 40px 0;
+ transform: translateX(-100%);
+ transition: transform 0.4s ease-in;
+}
+
+nav ul li i {
+ font-size: 20px;
+ margin-right: 10px;
+}
+
+nav ul li + li {
+ margin-left: 15px;
+ transform: translateX(-150%);
+}
+
+nav ul li + li + li {
+ margin-left: 30px;
+ transform: translateX(-200%);
+}
+
+nav a{
+ color: #fafafa;
+ text-decoration: none;
+ transition: all 0.5s;
+}
+
+nav a:hover {
+ color: #FF7979;
+ font-weight: bold;
+}
+
+.content img {
+ max-width: 100%;
+}
+
+.content {
+ max-width: 1000px;
+ margin: 50px auto;
+}
+
+.content h1 {
+ margin: 0;
+}
+
+.content small {
+ color: #555;
+ font-style: italic;
+}
+
+.content p {
+ color: #333;
+ line-height: 1.5;
+}
diff --git a/scripts/cache.js b/scripts/cache.js
deleted file mode 100644
index 73191fd..0000000
--- a/scripts/cache.js
+++ /dev/null
@@ -1,36 +0,0 @@
-const fs = require('fs')
-const path = require('path')
-const matter = require('gray-matter')
-
-function postData() {
- const files = fs.readdirSync(path.join('posts'))
-
- const posts = files.map((filename) => {
- const slug = filename.replace('.md', '')
-
- const markdownWithMeta = fs.readFileSync(
- path.join('posts', filename),
- 'utf-8'
- )
-
- const { data: frontmatter } = matter(markdownWithMeta)
-
- return {
- slug,
- frontmatter,
- }
- })
-
- return `export const posts = ${JSON.stringify(posts)}`
-}
-
-try {
- fs.readdirSync('cache')
-} catch (error) {
- fs.mkdirSync('cache')
-}
-
-fs.writeFile('cache/data.js', postData(), function (err) {
- if (err) return console.log(err)
- console.log('Posts Cached...')
-})
diff --git a/scroll-animation/index.html b/scroll-animation/index.html
new file mode 100644
index 0000000..7f2e1d0
--- /dev/null
+++ b/scroll-animation/index.html
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+ Scroll Animation
+
+
+ Scroll to see the animation
+
Content
+
Content
+
Content
+
Content
+
Content
+
Content
+
Content
+
Content
+
Content
+
Content
+
Content
+
Content
+
Content
+
+
+
diff --git a/scroll-animation/script.js b/scroll-animation/script.js
new file mode 100644
index 0000000..f021563
--- /dev/null
+++ b/scroll-animation/script.js
@@ -0,0 +1,19 @@
+const boxes = document.querySelectorAll('.box')
+
+window.addEventListener('scroll', checkBoxes)
+
+checkBoxes()
+
+function checkBoxes() {
+ const triggerBottom = window.innerHeight / 5 * 4
+
+ boxes.forEach(box => {
+ const boxTop = box.getBoundingClientRect().top
+
+ if(boxTop < triggerBottom) {
+ box.classList.add('show')
+ } else {
+ box.classList.remove('show')
+ }
+ })
+}
\ No newline at end of file
diff --git a/scroll-animation/style.css b/scroll-animation/style.css
new file mode 100644
index 0000000..a0e7490
--- /dev/null
+++ b/scroll-animation/style.css
@@ -0,0 +1,47 @@
+@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap');
+
+* {
+ box-sizing: border-box;
+}
+
+body {
+ background-color: #efedd6;
+ font-family: 'Roboto', sans-serif;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ margin: 0;
+ overflow-x: hidden;
+}
+
+h1 {
+ margin: 10px;
+}
+
+.box {
+ background-color: steelblue;
+ color: #fff;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 400px;
+ height: 200px;
+ margin: 10px;
+ border-radius: 10px;
+ box-shadow: 2px 4px 5px rgba(0, 0, 0, 0.3);
+ transform: translateX(400%);
+ transition: transform 0.4s ease;
+}
+
+.box:nth-of-type(even) {
+ transform: translateX(-400%);
+}
+
+.box.show {
+ transform: translateX(0);
+}
+
+.box h2 {
+ font-size: 45px;
+}
diff --git a/sound-board/index.html b/sound-board/index.html
new file mode 100644
index 0000000..e3d4e94
--- /dev/null
+++ b/sound-board/index.html
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+ Sound Board
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sound-board/script.js b/sound-board/script.js
new file mode 100644
index 0000000..b1c3393
--- /dev/null
+++ b/sound-board/script.js
@@ -0,0 +1,25 @@
+const sounds = ['applause', 'boo', 'gasp', 'tada', 'victory', 'wrong']
+
+sounds.forEach(sound => {
+ const btn = document.createElement('button')
+ btn.classList.add('btn')
+
+ btn.innerText = sound
+
+ btn.addEventListener('click', () => {
+ stopSongs()
+
+ document.getElementById(sound).play()
+ })
+
+ document.getElementById('buttons').appendChild(btn)
+})
+
+function stopSongs() {
+ sounds.forEach(sound => {
+ const song = document.getElementById(sound)
+
+ song.pause()
+ song.currentTime = 0;
+ })
+}
\ No newline at end of file
diff --git a/sound-board/sounds/applause.mp3 b/sound-board/sounds/applause.mp3
new file mode 100644
index 0000000..8be6dc1
Binary files /dev/null and b/sound-board/sounds/applause.mp3 differ
diff --git a/sound-board/sounds/boo.mp3 b/sound-board/sounds/boo.mp3
new file mode 100644
index 0000000..8c27241
Binary files /dev/null and b/sound-board/sounds/boo.mp3 differ
diff --git a/sound-board/sounds/gasp.mp3 b/sound-board/sounds/gasp.mp3
new file mode 100644
index 0000000..1f4c6f0
Binary files /dev/null and b/sound-board/sounds/gasp.mp3 differ
diff --git a/sound-board/sounds/tada.mp3 b/sound-board/sounds/tada.mp3
new file mode 100644
index 0000000..a284f94
Binary files /dev/null and b/sound-board/sounds/tada.mp3 differ
diff --git a/sound-board/sounds/victory.mp3 b/sound-board/sounds/victory.mp3
new file mode 100644
index 0000000..f565a5e
Binary files /dev/null and b/sound-board/sounds/victory.mp3 differ
diff --git a/sound-board/sounds/wrong.mp3 b/sound-board/sounds/wrong.mp3
new file mode 100644
index 0000000..2b4939a
Binary files /dev/null and b/sound-board/sounds/wrong.mp3 differ
diff --git a/sound-board/style.css b/sound-board/style.css
new file mode 100644
index 0000000..91ee7d1
--- /dev/null
+++ b/sound-board/style.css
@@ -0,0 +1,38 @@
+@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@200;400&display=swap');
+
+* {
+ box-sizing: border-box;
+}
+
+body {
+ background-color: rgb(161, 100, 223);
+ font-family: 'Poppins', sans-serif;
+ display: flex;
+ flex-wrap: wrap;
+ align-items: center;
+ justify-content: center;
+ text-align: center;
+ height: 100vh;
+ overflow: hidden;
+ margin: 0;
+}
+
+.btn {
+ background-color: rebeccapurple;
+ border-radius: 5px;
+ border: none;
+ color: #fff;
+ margin: 1rem;
+ padding: 1.5rem 3rem;
+ font-size: 1.2rem;
+ font-family: inherit;
+ cursor: pointer;
+}
+
+.btn:hover {
+ opacity: 0.9;
+}
+
+.btn:focus {
+ outline: none;
+}
diff --git a/split-landing-page/index.html b/split-landing-page/index.html
new file mode 100644
index 0000000..0623077
--- /dev/null
+++ b/split-landing-page/index.html
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+ Split Landing Page
+
+
+
+
+
+
+
+
diff --git a/split-landing-page/ps.jpg b/split-landing-page/ps.jpg
new file mode 100644
index 0000000..b4c5095
Binary files /dev/null and b/split-landing-page/ps.jpg differ
diff --git a/split-landing-page/script.js b/split-landing-page/script.js
new file mode 100644
index 0000000..07bf3ac
--- /dev/null
+++ b/split-landing-page/script.js
@@ -0,0 +1,9 @@
+const left = document.querySelector('.left')
+const right = document.querySelector('.right')
+const container = document.querySelector('.container')
+
+left.addEventListener('mouseenter', () => container.classList.add('hover-left'))
+left.addEventListener('mouseleave', () => container.classList.remove('hover-left'))
+
+right.addEventListener('mouseenter', () => container.classList.add('hover-right'))
+right.addEventListener('mouseleave', () => container.classList.remove('hover-right'))
\ No newline at end of file
diff --git a/split-landing-page/style.css b/split-landing-page/style.css
new file mode 100644
index 0000000..0888b68
--- /dev/null
+++ b/split-landing-page/style.css
@@ -0,0 +1,139 @@
+@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap');
+
+:root {
+ --left-bg-color: rgba(87, 84, 236, 0.7);
+ --right-bg-color: rgba(43, 43, 43, 0.8);
+ --left-btn-hover-color: rgba(87, 84, 236, 1);
+ --right-btn-hover-color: rgba(28, 122, 28, 1);
+ --hover-width: 75%;
+ --other-width: 25%;
+ --speed: 1000ms;
+}
+
+* {
+ box-sizing: border-box;
+}
+
+body {
+ font-family: 'Roboto', sans-serif;
+ height: 100vh;
+ overflow: hidden;
+ margin: 0;
+}
+
+h1 {
+ font-size: 4rem;
+ color: #fff;
+ position: absolute;
+ left: 50%;
+ top: 20%;
+ transform: translateX(-50%);
+ white-space: nowrap;
+}
+
+.btn {
+ position: absolute;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ left: 50%;
+ top: 40%;
+ transform: translateX(-50%);
+ text-decoration: none;
+ color: #fff;
+ border: #fff solid 0.2rem;
+ font-size: 1rem;
+ font-weight: bold;
+ text-transform: uppercase;
+ width: 15rem;
+ padding: 1.5rem;
+}
+
+.split.left .btn:hover {
+ background-color: var(--left-btn-hover-color);
+ border-color: var(--left-btn-hover-color);
+}
+
+.split.right .btn:hover {
+ background-color: var(--right-btn-hover-color);
+ border-color: var(--right-btn-hover-color);
+}
+
+.container {
+ position: relative;
+ width: 100%;
+ height: 100%;
+ background: #333;
+}
+
+.split {
+ position: absolute;
+ width: 50%;
+ height: 100%;
+ overflow: hidden;
+}
+
+.split.left {
+ left: 0;
+ background: url('ps.jpg');
+ background-repeat: no-repeat;
+ background-size: cover;
+}
+
+.split.left::before {
+ content: '';
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ background-color: var(--left-bg-color);
+}
+
+.split.right {
+ right: 0;
+ background: url('xbox.jpg');
+ background-repeat: no-repeat;
+ background-size: cover;
+}
+
+.split.right::before {
+ content: '';
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ background-color: var(--right-bg-color);
+}
+
+.split.right,
+.split.left,
+.split.right::before,
+.split.left::before {
+ transition: all var(--speed) ease-in-out;
+}
+
+.hover-left .left {
+ width: var(--hover-width);
+}
+
+.hover-left .right {
+ width: var(--other-width);
+}
+
+.hover-right .right {
+ width: var(--hover-width);
+}
+
+.hover-right .left {
+ width: var(--other-width);
+}
+
+@media (max-width: 800px) {
+ h1 {
+ font-size: 2rem;
+ top: 30%;
+ }
+
+ .btn {
+ padding: 1.2rem;
+ width: 12rem;
+ }
+}
diff --git a/split-landing-page/xbox.jpg b/split-landing-page/xbox.jpg
new file mode 100644
index 0000000..fe806ac
Binary files /dev/null and b/split-landing-page/xbox.jpg differ
diff --git a/sticky-navigation/index.html b/sticky-navigation/index.html
new file mode 100644
index 0000000..d793d0d
--- /dev/null
+++ b/sticky-navigation/index.html
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+ Sticky Navigation
+
+
+
+
+
+
+
+
+
Welcome To My Website
+
Lorem ipsum, dolor sit amet consectetur adipisicing elit. Maiores, consequuntur?
+
+
+
+
+ Content One
+ Lorem, ipsum dolor sit amet consectetur adipisicing elit. Ratione dolorem voluptates eveniet tempora ut cupiditate magnam, sapiente, hic quo in ipsum iste soluta eaque perferendis nihil recusandae dolore officia aperiam corporis similique. Facilis quos tempore labore totam! Consectetur molestiae iusto ducimus error reiciendis aspernatur dolor, modi dolorem sit architecto, voluptate magni sunt unde est quas? Voluptates a dolorum voluptatum quo perferendis aut sit. Aspernatur libero laboriosam ab eligendi omnis delectus earum labore, placeat officiis sint illum rem voluptas ipsum repellendus iste eius recusandae quae excepturi facere, iure rerum sequi? Illum velit delectus dicta et iste dolorum obcaecati minus odio eligendi!
+
+ Content Two
+ Lorem ipsum dolor sit amet consectetur, adipisicing elit. Pariatur provident nostrum possimus inventore nisi laboriosam consequatur modi nulla eos, commodi, omnis distinctio! Maxime distinctio impedit provident, voluptates illo odio nostrum minima beatae similique a sint sapiente voluptatum atque optio illum est! Tenetur tempora doloremque quae iste aperiam hic cumque repellat?
+
+
+
+
+
diff --git a/sticky-navigation/script.js b/sticky-navigation/script.js
new file mode 100644
index 0000000..f7d2bd9
--- /dev/null
+++ b/sticky-navigation/script.js
@@ -0,0 +1,10 @@
+const nav = document.querySelector('.nav')
+window.addEventListener('scroll', fixNav)
+
+function fixNav() {
+ if(window.scrollY > nav.offsetHeight + 150) {
+ nav.classList.add('active')
+ } else {
+ nav.classList.remove('active')
+ }
+}
\ No newline at end of file
diff --git a/sticky-navigation/style.css b/sticky-navigation/style.css
new file mode 100644
index 0000000..3fffd64
--- /dev/null
+++ b/sticky-navigation/style.css
@@ -0,0 +1,117 @@
+@import url('https://fonts.googleapis.com/css?family=Open+Sans');
+
+* {
+ box-sizing: border-box;
+ margin: 0;
+ padding: 0;
+}
+
+body {
+ font-family: 'Open Sans', sans-serif;
+ color: #222;
+ padding-bottom: 50px;
+}
+
+.container {
+ max-width: 1200px;
+ margin: 0 auto;
+}
+
+.nav {
+ position: fixed;
+ background-color: #222;
+ top: 0;
+ left: 0;
+ right: 0;
+ transition: all 0.3s ease-in-out;
+}
+
+.nav .container {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 20px 0;
+ transition: all 0.3s ease-in-out;
+}
+
+.nav ul {
+ display: flex;
+ list-style-type: none;
+ align-items: center;
+ justify-content: center;
+}
+
+.nav a {
+ color: #fff;
+ text-decoration: none;
+ padding: 7px 15px;
+ transition: all 0.3s ease-in-out;
+}
+
+.nav.active {
+ background-color: #fff;
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.3);
+}
+
+.nav.active a {
+ color: #000;
+}
+
+.nav.active .container {
+ padding: 10px 0;
+}
+
+.nav a.current,
+.nav a:hover {
+ color: #c0392b;
+ font-weight: bold;
+}
+
+.hero {
+ background-image: url('https://images.pexels.com/photos/450035/pexels-photo-450035.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=750&w=1260');
+ background-repeat: no-repeat;
+ background-size: cover;
+ background-position: bottom center;
+ height: 100vh;
+ color: #fff;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ text-align: center;
+ position: relative;
+ margin-bottom: 20px;
+ z-index: -2;
+}
+
+.hero::before {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background-color: rgba(0, 0, 0, 0.5);
+ z-index: -1;
+}
+
+.hero h1 {
+ font-size: 46px;
+ margin: -20px 0 20px;
+}
+
+.hero p {
+ font-size: 20px;
+ letter-spacing: 1px;
+}
+
+.content h2,
+.content h3 {
+ font-size: 150%;
+ margin: 20px 0;
+}
+
+.content p {
+ color: #555;
+ line-height: 30px;
+ letter-spacing: 1.2px;
+}
diff --git a/styles/globals.css b/styles/globals.css
deleted file mode 100644
index e4b3048..0000000
--- a/styles/globals.css
+++ /dev/null
@@ -1,50 +0,0 @@
-@tailwind base;
-@tailwind components;
-@tailwind utilities;
-
-p {
- margin: 15px 0;
- line-height: 1.8;
-}
-
-.blog-text ul,
-ol {
- font-size: 110%;
- line-height: 2.3;
- font-weight: bold;
- margin: 10px 0;
-}
-
-.blog-text pre {
- background: #f4f4f4;
- padding: 20px;
- margin: 20px 0;
- line-height: 2.3;
-}
-
-.blog-text h1 {
- font-size: 35px;
-}
-
-.blog-text h2,
-.blog-text h3,
-.blog-text h4 {
- font-size: 27px;
-}
-
-/* Fix category colors in production */
-.bg-yellow-600 {
- background-color: #d97705;
-}
-.bg-blue-600 {
- background: #3929eb;
-}
-.bg-green-600 {
- background-color: #049669;
-}
-.bg-purple-600 {
- background-color: #7730db;
-}
-.bg-red-600 {
- background-color: #a70b34;
-}
diff --git a/tailwind.config.js b/tailwind.config.js
deleted file mode 100644
index d7f0874..0000000
--- a/tailwind.config.js
+++ /dev/null
@@ -1,11 +0,0 @@
-module.exports = {
- purge: ['./pages/**/*.{js,ts,jsx,tsx}', './components/**/*.{js,ts,jsx,tsx}'],
- darkMode: false, // or 'media' or 'class'
- theme: {
- extend: {},
- },
- variants: {
- extend: {},
- },
- plugins: [],
-}
diff --git a/testimonial-box-switcher/index.html b/testimonial-box-switcher/index.html
new file mode 100644
index 0000000..7fa9386
--- /dev/null
+++ b/testimonial-box-switcher/index.html
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+ Testimonial Box
+
+
+
+
+
+
+
+ I've worked with literally hundreds of HTML/CSS developers and I have to
+ say the top spot goes to this guy. This guy is an amazing developer. He
+ stresses on good, clean code and pays heed to the details. I love
+ developers who respect each and every aspect of a throughly thought out
+ design and do their best to put it in code. He goes over and beyond and
+ transforms ART into PIXELS - without a glitch, every time.
+
+
+
+
+
Miyah Myles
+
Marketing
+
+
+
+
+
+
diff --git a/testimonial-box-switcher/script.js b/testimonial-box-switcher/script.js
new file mode 100644
index 0000000..23fc31d
--- /dev/null
+++ b/testimonial-box-switcher/script.js
@@ -0,0 +1,78 @@
+const testimonialsContainer = document.querySelector('.testimonials-container')
+const testimonial = document.querySelector('.testimonial')
+const userImage = document.querySelector('.user-image')
+const username = document.querySelector('.username')
+const role = document.querySelector('.role')
+
+const testimonials = [
+ {
+ name: 'Miyah Myles',
+ position: 'Marketing',
+ photo:
+ 'https://images.unsplash.com/photo-1494790108377-be9c29b29330?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max&s=707b9c33066bf8808c934c8ab394dff6',
+ text:
+ "I've worked with literally hundreds of HTML/CSS developers and I have to say the top spot goes to this guy. This guy is an amazing developer. He stresses on good, clean code and pays heed to the details. I love developers who respect each and every aspect of a throughly thought out design and do their best to put it in code. He goes over and beyond and transforms ART into PIXELS - without a glitch, every time.",
+ },
+ {
+ name: 'June Cha',
+ position: 'Software Engineer',
+ photo: 'https://randomuser.me/api/portraits/women/44.jpg',
+ text:
+ 'This guy is an amazing frontend developer that delivered the task exactly how we need it, do your self a favor and hire him, you will not be disappointed by the work delivered. He will go the extra mile to make sure that you are happy with your project. I will surely work again with him!',
+ },
+ {
+ name: 'Iida Niskanen',
+ position: 'Data Entry',
+ photo: 'https://randomuser.me/api/portraits/women/68.jpg',
+ text:
+ "This guy is a hard worker. Communication was also very good with him and he was very responsive all the time, something not easy to find in many freelancers. We'll definitely repeat with him.",
+ },
+ {
+ name: 'Renee Sims',
+ position: 'Receptionist',
+ photo: 'https://randomuser.me/api/portraits/women/65.jpg',
+ text:
+ "This guy does everything he can to get the job done and done right. This is the second time I've hired him, and I'll hire him again in the future.",
+ },
+ {
+ name: 'Jonathan Nunfiez',
+ position: 'Graphic Designer',
+ photo: 'https://randomuser.me/api/portraits/men/43.jpg',
+ text:
+ "I had my concerns that due to a tight deadline this project can't be done. But this guy proved me wrong not only he delivered an outstanding work but he managed to deliver 1 day prior to the deadline. And when I asked for some revisions he made them in MINUTES. I'm looking forward to work with him again and I totally recommend him. Thanks again!",
+ },
+ {
+ name: 'Sasha Ho',
+ position: 'Accountant',
+ photo:
+ 'https://images.pexels.com/photos/415829/pexels-photo-415829.jpeg?h=350&auto=compress&cs=tinysrgb',
+ text:
+ 'This guy is a top notch designer and front end developer. He communicates well, works fast and produces quality work. We have been lucky to work with him!',
+ },
+ {
+ name: 'Veeti Seppanen',
+ position: 'Director',
+ photo: 'https://randomuser.me/api/portraits/men/97.jpg',
+ text:
+ 'This guy is a young and talented IT professional, proactive and responsible, with a strong work ethic. He is very strong in PSD2HTML conversions and HTML/CSS technology. He is a quick learner, eager to learn new technologies. He is focused and has the good dynamics to achieve due dates and outstanding results.',
+ },
+]
+
+let idx = 1
+
+function updateTestimonial() {
+ const { name, position, photo, text } = testimonials[idx]
+
+ testimonial.innerHTML = text
+ userImage.src = photo
+ username.innerHTML = name
+ role.innerHTML = position
+
+ idx++
+
+ if (idx > testimonials.length - 1) {
+ idx = 0
+ }
+}
+
+setInterval(updateTestimonial, 10000)
diff --git a/testimonial-box-switcher/style.css b/testimonial-box-switcher/style.css
new file mode 100644
index 0000000..631a801
--- /dev/null
+++ b/testimonial-box-switcher/style.css
@@ -0,0 +1,98 @@
+@import url('https://fonts.googleapis.com/css?family=Montserrat');
+
+* {
+ box-sizing: border-box;
+}
+
+body {
+ background-color: #f4f4f4;
+ font-family: 'Montserrat', sans-serif;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ height: 100vh;
+ overflow: hidden;
+ margin: 0;
+ padding: 10px;
+}
+
+.testimonial-container {
+ background-color: #476ce4;
+ color: #fff;
+ border-radius: 15px;
+ margin: 20px auto;
+ padding: 50px 80px;
+ max-width: 768px;
+ position: relative;
+}
+
+.fa-quote {
+ color: rgba(255, 255, 255, 0.3);
+ font-size: 28px;
+ position: absolute;
+ top: 70px;
+}
+
+.fa-quote-right {
+ left: 40px;
+}
+
+.fa-quote-left {
+ right: 40px;
+}
+
+.testimonial {
+ line-height: 28px;
+ text-align: justify;
+}
+
+.user {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+.user .user-image {
+ border-radius: 50%;
+ height: 75px;
+ width: 75px;
+ object-fit: cover;
+}
+
+.user .user-details {
+ margin-left: 10px;
+}
+
+.user .username {
+ margin: 0;
+}
+
+.user .role {
+ font-weight: normal;
+ margin: 10px 0;
+}
+
+.progress-bar {
+ background-color: #fff;
+ height: 4px;
+ width: 100%;
+ animation: grow 10s linear infinite;
+ transform-origin: left;
+}
+
+@keyframes grow {
+ 0% {
+ transform: scaleX(0);
+ }
+}
+
+@media (max-width: 768px) {
+ .testimonial-container {
+ padding: 20px 30px;
+ }
+
+ .fa-quote {
+ display: none;
+ }
+}
diff --git a/theme-clock/index.html b/theme-clock/index.html
new file mode 100644
index 0000000..8b50d24
--- /dev/null
+++ b/theme-clock/index.html
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+ Theme Clock
+
+
+
+
+ Dark mode
+
+
+
+
+
+
diff --git a/theme-clock/script.js b/theme-clock/script.js
new file mode 100644
index 0000000..5f1126d
--- /dev/null
+++ b/theme-clock/script.js
@@ -0,0 +1,48 @@
+const hourEl = document.querySelector('.hour')
+const minuteEl = document.querySelector('.minute')
+const secondEl = document.querySelector('.second')
+const timeEl = document.querySelector('.time')
+const dateEl = document.querySelector('.date')
+const toggle = document.querySelector('.toggle')
+
+const days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
+const months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
+
+toggle.addEventListener('click', (e) => {
+ const html = document.querySelector('html')
+ if (html.classList.contains('dark')) {
+ html.classList.remove('dark')
+ e.target.innerHTML = 'Dark mode'
+ } else {
+ html.classList.add('dark')
+ e.target.innerHTML = 'Light mode'
+ }
+})
+
+function setTime() {
+ const time = new Date();
+ const month = time.getMonth()
+ const day = time.getDay()
+ const date = time.getDate()
+ const hours = time.getHours()
+ const hoursForClock = hours >= 13 ? hours % 12 : hours;
+ const minutes = time.getMinutes()
+ const seconds = time.getSeconds()
+ const ampm = hours >= 12 ? 'PM' : 'AM'
+
+ hourEl.style.transform = `translate(-50%, -100%) rotate(${scale(hoursForClock, 0, 12, 0, 360)}deg)`
+ minuteEl.style.transform = `translate(-50%, -100%) rotate(${scale(minutes, 0, 60, 0, 360)}deg)`
+ secondEl.style.transform = `translate(-50%, -100%) rotate(${scale(seconds, 0, 60, 0, 360)}deg)`
+
+ timeEl.innerHTML = `${hoursForClock}:${minutes < 10 ? `0${minutes}` : minutes} ${ampm}`
+ dateEl.innerHTML = `${days[day]}, ${months[month]} ${date} `
+}
+
+// StackOverflow https://stackoverflow.com/questions/10756313/javascript-jquery-map-a-range-of-numbers-to-another-range-of-numbers
+const scale = (num, in_min, in_max, out_min, out_max) => {
+ return (num - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
+}
+
+setTime()
+
+setInterval(setTime, 1000)
diff --git a/theme-clock/style.css b/theme-clock/style.css
new file mode 100644
index 0000000..2e9f941
--- /dev/null
+++ b/theme-clock/style.css
@@ -0,0 +1,136 @@
+@import url('https://fonts.googleapis.com/css?family=Heebo:300&display=swap');
+
+* {
+ box-sizing: border-box;
+}
+
+:root {
+ --primary-color: #000;
+ --secondary-color: #fff;
+}
+
+html {
+ transition: all 0.5s ease-in;
+}
+
+html.dark {
+ --primary-color: #fff;
+ --secondary-color: #333;
+}
+
+html.dark {
+ background-color: #111;
+ color: var(--primary-color);
+}
+
+body {
+ font-family: 'Heebo', sans-serif;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 100vh;
+ overflow: hidden;
+ margin: 0;
+}
+
+.toggle {
+ cursor: pointer;
+ background-color: var(--primary-color);
+ color: var(--secondary-color);
+ border: 0;
+ border-radius: 4px;
+ padding: 8px 12px;
+ position: absolute;
+ top: 100px;
+}
+
+.toggle:focus {
+ outline: none;
+}
+
+.clock-container {
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ align-items: center;
+}
+
+.clock {
+ position: relative;
+ width: 200px;
+ height: 200px;
+}
+
+.needle {
+ background-color: var(--primary-color);
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ height: 65px;
+ width: 3px;
+ transform-origin: bottom center;
+ transition: all 0.5s ease-in;
+}
+
+.needle.hour {
+ transform: translate(-50%, -100%) rotate(0deg);
+}
+
+.needle.minute {
+ transform: translate(-50%, -100%) rotate(0deg);
+ height: 100px;
+}
+
+.needle.second {
+ transform: translate(-50%, -100%) rotate(0deg);
+ height: 100px;
+ background-color: #e74c3c;
+}
+
+.center-point {
+ background-color: #e74c3c;
+ width: 10px;
+ height: 10px;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ border-radius: 50%;
+}
+
+.center-point::after {
+ content: '';
+ background-color: var(--primary-color);
+ width: 5px;
+ height: 5px;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ border-radius: 50%;
+}
+
+.time {
+ font-size: 60px;
+}
+
+.date {
+ color: #aaa;
+ font-size: 14px;
+ letter-spacing: 0.3px;
+ text-transform: uppercase;
+}
+
+.date .circle {
+ background-color: var(--primary-color);
+ color: var(--secondary-color);
+ border-radius: 50%;
+ height: 18px;
+ width: 18px;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ line-height: 18px;
+ transition: all 0.5s ease-in;
+ font-size: 12px;
+}
diff --git a/toast-notification/index.html b/toast-notification/index.html
new file mode 100644
index 0000000..4fba9c2
--- /dev/null
+++ b/toast-notification/index.html
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+ Toast Notification
+
+
+
+
+ Show Notification
+
+
+
+
diff --git a/toast-notification/script.js b/toast-notification/script.js
new file mode 100644
index 0000000..ece1e00
--- /dev/null
+++ b/toast-notification/script.js
@@ -0,0 +1,35 @@
+const button = document.getElementById('button')
+const toasts = document.getElementById('toasts')
+
+const messages = [
+ 'Message One',
+ 'Message Two',
+ 'Message Three',
+ 'Message Four',
+]
+
+const types = ['info', 'success', 'error']
+
+button.addEventListener('click', () => createNotification())
+
+function createNotification(message = null, type = null) {
+ const notif = document.createElement('div')
+ notif.classList.add('toast')
+ notif.classList.add(type ? type : getRandomType())
+
+ notif.innerText = message ? message : getRandomMessage()
+
+ toasts.appendChild(notif)
+
+ setTimeout(() => {
+ notif.remove()
+ }, 3000)
+}
+
+function getRandomMessage() {
+ return messages[Math.floor(Math.random() * messages.length)]
+}
+
+function getRandomType() {
+ return types[Math.floor(Math.random() * types.length)]
+}
\ No newline at end of file
diff --git a/toast-notification/style.css b/toast-notification/style.css
new file mode 100644
index 0000000..9ae67d4
--- /dev/null
+++ b/toast-notification/style.css
@@ -0,0 +1,64 @@
+@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@200;400&display=swap');
+
+* {
+ box-sizing: border-box;
+}
+
+body {
+ background-color: rebeccapurple;
+ font-family: 'Poppins', sans-serif;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ height: 100vh;
+ overflow: hidden;
+ margin: 0;
+}
+
+.btn {
+ background-color: #ffffff;
+ color: rebeccapurple;
+ font-family: inherit;
+ font-weight: bold;
+ padding: 1rem;
+ border-radius: 5px;
+ border: none;
+ cursor: pointer;
+}
+
+.btn:focus {
+ outline: none;
+}
+
+.btn:active {
+ transform: scale(0.98);
+}
+
+#toasts {
+ position: fixed;
+ bottom: 10px;
+ right: 10px;
+ display: flex;
+ flex-direction: column;
+ align-items: flex-end;
+}
+
+.toast {
+ background-color: #fff;
+ border-radius: 5px;
+ padding: 1rem 2rem;
+ margin: 0.5rem;
+}
+
+.toast.info {
+ color: rebeccapurple;
+}
+
+.toast.success {
+ color: green;
+}
+
+.toast.error {
+ color: red;
+}
diff --git a/todo-list/index.html b/todo-list/index.html
new file mode 100644
index 0000000..f11f16a
--- /dev/null
+++ b/todo-list/index.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+ Todo List
+
+
+ todos
+
+ Left click to toggle completed. Right click to delete todo
+
+
+
+
diff --git a/todo-list/script.js b/todo-list/script.js
new file mode 100644
index 0000000..ec2ca20
--- /dev/null
+++ b/todo-list/script.js
@@ -0,0 +1,65 @@
+const form = document.getElementById('form')
+const input = document.getElementById('input')
+const todosUL = document.getElementById('todos')
+
+const todos = JSON.parse(localStorage.getItem('todos'))
+
+if(todos) {
+ todos.forEach(todo => addTodo(todo))
+}
+
+form.addEventListener('submit', (e) => {
+ e.preventDefault()
+
+ addTodo()
+})
+
+function addTodo(todo) {
+ let todoText = input.value
+
+ if(todo) {
+ todoText = todo.text
+ }
+
+ if(todoText) {
+ const todoEl = document.createElement('li')
+ if(todo && todo.completed) {
+ todoEl.classList.add('completed')
+ }
+
+ todoEl.innerText = todoText
+
+ todoEl.addEventListener('click', () => {
+ todoEl.classList.toggle('completed')
+ updateLS()
+ })
+
+ todoEl.addEventListener('contextmenu', (e) => {
+ e.preventDefault()
+
+ todoEl.remove()
+ updateLS()
+ })
+
+ todosUL.appendChild(todoEl)
+
+ input.value = ''
+
+ updateLS()
+ }
+}
+
+function updateLS() {
+ todosEl = document.querySelectorAll('li')
+
+ const todos = []
+
+ todosEl.forEach(todoEl => {
+ todos.push({
+ text: todoEl.innerText,
+ completed: todoEl.classList.contains('completed')
+ })
+ })
+
+ localStorage.setItem('todos', JSON.stringify(todos))
+}
\ No newline at end of file
diff --git a/todo-list/style.css b/todo-list/style.css
new file mode 100644
index 0000000..866d46c
--- /dev/null
+++ b/todo-list/style.css
@@ -0,0 +1,72 @@
+@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@200;400&display=swap');
+
+* {
+ box-sizing: border-box;
+}
+
+body {
+ background-color: #f5f5f5;
+ color: #444;
+ font-family: 'Poppins', sans-serif;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ height: 100vh;
+ margin: 0;
+}
+
+h1 {
+ color: rgb(179, 131, 226);
+ font-size: 10rem;
+ text-align: center;
+ opacity: 0.4;
+}
+
+form {
+ box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1);
+ max-width: 100%;
+ width: 400px;
+}
+
+.input {
+ border: none;
+ color: #444;
+ font-size: 2rem;
+ padding: 1rem 2rem;
+ display: block;
+ width: 100%;
+}
+
+.input::placeholder {
+ color: #d5d5d5;
+}
+
+.input:focus {
+ outline-color: rgb(179, 131, 226);
+}
+
+.todos {
+ background-color: #fff;
+ padding: 0;
+ margin: 0;
+ list-style-type: none;
+}
+
+.todos li {
+ border-top: 1px solid #e5e5e5;
+ cursor: pointer;
+ font-size: 1.5rem;
+ padding: 1rem 2rem;
+}
+
+.todos li.completed {
+ color: #b6b6b6;
+ text-decoration: line-through;
+}
+
+small {
+ color: #b5b5b5;
+ margin-top: 3rem;
+ text-align: center;
+}
diff --git a/utils/index.js b/utils/index.js
deleted file mode 100644
index f0724c6..0000000
--- a/utils/index.js
+++ /dev/null
@@ -1,3 +0,0 @@
-export const sortByDate = (a, b) => {
- return new Date(b.frontmatter.date) - new Date(a.frontmatter.date)
-}
diff --git a/verify-account-ui/index.html b/verify-account-ui/index.html
new file mode 100644
index 0000000..a8a1c06
--- /dev/null
+++ b/verify-account-ui/index.html
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+ Verify Account
+
+
+
+
+
+
diff --git a/verify-account-ui/script.js b/verify-account-ui/script.js
new file mode 100644
index 0000000..6df6bf0
--- /dev/null
+++ b/verify-account-ui/script.js
@@ -0,0 +1,14 @@
+const codes = document.querySelectorAll('.code')
+
+codes[0].focus()
+
+codes.forEach((code, idx) => {
+ code.addEventListener('keydown', (e) => {
+ if(e.key >= 0 && e.key <=9) {
+ codes[idx].value = ''
+ setTimeout(() => codes[idx + 1].focus(), 10)
+ } else if(e.key === 'Backspace') {
+ setTimeout(() => codes[idx - 1].focus(), 10)
+ }
+ })
+})
\ No newline at end of file
diff --git a/verify-account-ui/style.css b/verify-account-ui/style.css
new file mode 100644
index 0000000..71308d9
--- /dev/null
+++ b/verify-account-ui/style.css
@@ -0,0 +1,78 @@
+@import url('https://fonts.googleapis.com/css?family=Muli:300,700&display=swap');
+
+* {
+ box-sizing: border-box;
+}
+
+body {
+ background-color: #fbfcfe;
+ font-family: 'Muli', sans-serif;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 100vh;
+ overflow: hidden;
+ margin: 0;
+}
+
+.container {
+ background-color: #fff;
+ border: 3px #000 solid;
+ border-radius: 10px;
+ padding: 30px;
+ max-width: 1000px;
+ text-align: center;
+}
+
+.code-container {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ margin: 40px 0;
+}
+
+.code {
+ caret-color: transparent;
+ border-radius: 5px;
+ font-size: 75px;
+ height: 120px;
+ width: 100px;
+ border: 1px solid #eee;
+ margin: 1%;
+ text-align: center;
+ font-weight: 300;
+ -moz-appearance: textfield;
+}
+
+.code::-webkit-outer-spin-button,
+.code::-webkit-inner-spin-button {
+ -webkit-appearance: none;
+ margin: 0;
+}
+
+.code:valid {
+ border-color: #3498db;
+ box-shadow: 0 10px 10px -5px rgba(0, 0, 0, 0.25);
+}
+
+.info {
+ background-color: #eaeaea;
+ display: inline-block;
+ padding: 10px;
+ line-height: 20px;
+ max-width: 400px;
+ color: #777;
+ border-radius: 5px;
+}
+
+@media (max-width: 600px) {
+ .code-container {
+ flex-wrap: wrap;
+ }
+
+ .code {
+ font-size: 60px;
+ height: 80px;
+ max-width: 70px;
+ }
+}