From 239aa2a779cfc1ef097f117867aca9403a023791 Mon Sep 17 00:00:00 2001 From: Yahya Makarim Date: Sat, 29 May 2021 14:14:07 +0430 Subject: [PATCH 01/44] cats and tags added to posts & pagination debugged --- components/Posts.js | 91 +++++++++++++++++++++++++++++++--------- pages/author/[slug].js | 21 ++++++++-- pages/category/[slug].js | 19 ++++++++- pages/index.js | 62 ++++++++++++++++++++------- pages/search/[slug].js | 15 ++++++- pages/tag/[slug].js | 22 ++++++++-- 6 files changed, 186 insertions(+), 44 deletions(-) diff --git a/components/Posts.js b/components/Posts.js index 7b7678f..5546757 100644 --- a/components/Posts.js +++ b/components/Posts.js @@ -7,7 +7,22 @@ async function getNewPostsFromApi(page, type, type_id) { const res = await fetch( `https://reporterly.net/wp-json/wp/v2/posts?${type}=${id}&_embed=true&page=${page}` ) - return await res.json() + const blogs = await res.json() + + const posts = [] + for (const post of blogs) { + const post_id = post.id + // get categories + const post_cats = await fetch(`https://reporterly.net/wp-json/wp/v2/categories?post=${post_id}`) + const cats = await post_cats.json() + // get tags + const post_tags = await fetch(`https://reporterly.net/wp-json/wp/v2/tags?post=${post_id}`) + const tags = await post_tags.json() + + posts.push({ blog: post, cats, tags }) + } + + return posts } export default function Posts({ @@ -27,8 +42,10 @@ export default function Posts({ const [page, setPage] = useState(1) const [loading, setLoading] = useState(false) const [disable, setDisable] = useState(false) + // posts + // [{blog:post, cats, tags}, {blog:post, cats, tags}, {blog:post, cats, tags}, ] const [blogs, setBlogs] = useState(posts) - // console.log(posts) + // console.log('BLOGS: POSTS.JS', blogs) const isInitialMount = useRef(true) @@ -47,10 +64,11 @@ export default function Posts({ } // trigger loadmore (update page number) - function updatePage() { + function updatePage(pageNum) { // console.log('UPDATING NUMBER...') setLoading(true) - return setPage(page + 1) + setDisable(true) + return setPage(pageNum) } // get more posts @@ -146,7 +164,7 @@ export default function Posts({ function Loadmore() { return ( - ) @@ -160,7 +178,7 @@ export default function Posts({ // first pagesArray.push(
  • -
  • @@ -168,7 +186,7 @@ export default function Posts({ // previous pagesArray.push(
  • -
  • @@ -199,7 +217,7 @@ export default function Posts({ for (let i = start; i <= last; i++) { pagesArray.push(
  • -
  • @@ -209,7 +227,7 @@ export default function Posts({ // next pagesArray.push(
  • -
  • @@ -217,7 +235,7 @@ export default function Posts({ // last pagesArray.push(
  • -
  • @@ -247,16 +265,49 @@ export default function Posts({ ) : ( '' )} -
      - {blogs.map((blog) => { - return ( -
    1. - - {blog.title.rendered} - -
    2. - ) - })} +
        + {loading && paginationStyle == 'pagination' ? ( +

        Loding...

        + ) : ( + blogs.map((blog_pack) => { + return ( +
      1. + + +
        {blog_pack.blog.title.rendered}
        +
        + +

        {blog_pack.blog.excerpt.rendered}

        +
        + +
        +

        Categories:

        +
          + {blog_pack.cats.map((cat) => { + return ( +
        • + + {cat.name} + +
        • + ) + })} +
        +
        +
      2. + ) + }) + )}

      {paginationStyle ? : ''} diff --git a/pages/author/[slug].js b/pages/author/[slug].js index 685c88c..a618873 100644 --- a/pages/author/[slug].js +++ b/pages/author/[slug].js @@ -63,16 +63,31 @@ export async function getStaticProps({ params }) { const author = await res.json() // get posts of this author - let posts = null + let posts = [] let total_pages = null let author_id = null + if (author.length > 0) { author_id = author[0].id const author_posts = await fetch( - `https://reporterly.net/wp-json/wp/v2/posts?author=${author_id}` + `https://reporterly.net/wp-json/wp/v2/posts?_embed=true&author=${author_id}` ) - posts = await author_posts.json() + const blogs = await author_posts.json() total_pages = author_posts.headers.get('X-WP-TotalPages') + + for (const post of blogs) { + const post_id = post.id + // get categories + const post_cats = await fetch( + `https://reporterly.net/wp-json/wp/v2/categories?post=${post_id}` + ) + const cats = await post_cats.json() + // get tags + const post_tags = await fetch(`https://reporterly.net/wp-json/wp/v2/tags?post=${post_id}`) + const tags = await post_tags.json() + + posts.push({ blog: post, cats, tags }) + } } // Pass post data to the page via props return { diff --git a/pages/category/[slug].js b/pages/category/[slug].js index 8352b59..04a8e9c 100644 --- a/pages/category/[slug].js +++ b/pages/category/[slug].js @@ -58,16 +58,31 @@ export async function getStaticProps({ params }) { const categories = await res.json() // get posts of this category - let posts = null let category_id = null let total_pages = null + let posts = [] + if (categories.length > 0) { category_id = categories[0].id const cat_posts = await fetch( `https://reporterly.net/wp-json/wp/v2/posts?categories=${category_id}&_embed=true` ) - posts = await cat_posts.json() + const blogs = await cat_posts.json() total_pages = cat_posts.headers.get('X-WP-TotalPages') + + for (const post of blogs) { + const post_id = post.id + // get categories + const post_cats = await fetch( + `https://reporterly.net/wp-json/wp/v2/categories?post=${post_id}` + ) + const cats = await post_cats.json() + // get tags + const post_tags = await fetch(`https://reporterly.net/wp-json/wp/v2/tags?post=${post_id}`) + const tags = await post_tags.json() + + posts.push({ blog: post, cats, tags }) + } } // Pass post data to the page via props diff --git a/pages/index.js b/pages/index.js index 0cc99a8..f045aff 100644 --- a/pages/index.js +++ b/pages/index.js @@ -21,33 +21,65 @@ export default function Blog(postsContainer) { } export async function getStaticProps() { + // { + // name: 'CATEGORY TWO', + // slug: 'blog', + // type: 'categories', + // type_id: 19, + // count: 2 + // }, + // { + // name: 'AUTHOR', + // slug: 'newsfeed', + // type: 'author', + // type_id: 7, + // count: 2 + // }, + // { + // count: 2 + // } + const sections = [ { - name: 'CATEGORY TWO', - slug: 'blog', - type: 'categories', - type_id: 19, - count: 2 - }, - { - name: 'AUTHOR', - slug: 'newsfeed', - type: 'author', - type_id: 7, count: 2 - }, - { count: 2 } + } ] let postsContainer = [] for (const section of sections) { - const args = `${section.type}=${section.type_id}&per_page=${section.count}&_embed=true` + let args = `_embed=true&per_page=${section.count}` + if (section.type && section.type_id) { + args += `&${section.type}=${section.type_id}` + } + // console.log('ARGS', args) const res = await fetch(`https://reporterly.net/wp-json/wp/v2/posts?${args}`) - const posts = await res.json() + const blogs = await res.json() + // console.log('BLOGS INDEXJS', blogs) + + let posts = [] + for (const post of blogs) { + const post_id = post.id + // get categories + const post_cats = await fetch( + `https://reporterly.net/wp-json/wp/v2/categories?post=${post_id}` + ) + const cats = await post_cats.json() + // get tags + const post_tags = await fetch(`https://reporterly.net/wp-json/wp/v2/tags?post=${post_id}`) + const tags = await post_tags.json() + + posts.push({ blog: post, cats, tags }) + } + + // console.log('BLOGS PASSED TO POSTS.JS: ', posts) + + console.log('SECTOIN', section) + postsContainer.push({ ...section, posts: posts }) + console.log('POSTS CONTAINER', postsContainer) } // console.log('POSTS CONTAINER', ...postsContainer) diff --git a/pages/search/[slug].js b/pages/search/[slug].js index abe304e..81e87cb 100644 --- a/pages/search/[slug].js +++ b/pages/search/[slug].js @@ -47,9 +47,22 @@ export async function getStaticPaths() { export async function getStaticProps({ params }) { const { slug } = params const res = await fetch(`https://reporterly.net/wp-json/wp/v2/posts?search=${slug}&_embed=true`) - const posts = await res.json() + const blogs = await res.json() const total_pages = res.headers.get('X-WP-TotalPages') + const posts = [] + for (const post of blogs) { + const post_id = post.id + // get categories + const post_cats = await fetch(`https://reporterly.net/wp-json/wp/v2/categories?post=${post_id}`) + const cats = await post_cats.json() + // get tags + const post_tags = await fetch(`https://reporterly.net/wp-json/wp/v2/tags?post=${post_id}`) + const tags = await post_tags.json() + + posts.push({ blog: post, cats, tags }) + } + // Pass post data to the page via props return { props: { posts, slug, total_pages }, diff --git a/pages/tag/[slug].js b/pages/tag/[slug].js index c34379e..a2d2ee7 100644 --- a/pages/tag/[slug].js +++ b/pages/tag/[slug].js @@ -58,14 +58,30 @@ export async function getStaticProps({ params }) { const tags = await res.json() // get posts of this tag - let posts = null + let posts = [] let tag_id = null let total_pages = null if (tags.length > 0) { tag_id = tags[0].id - const tag_posts = await fetch(`https://reporterly.net/wp-json/wp/v2/posts?tags=${tag_id}`) - posts = await tag_posts.json() + const tag_posts = await fetch( + `https://reporterly.net/wp-json/wp/v2/posts?_embed=true&tags=${tag_id}` + ) + const blogs = await tag_posts.json() total_pages = tag_posts.headers.get('X-WP-TotalPages') + + for (const post of blogs) { + const post_id = post.id + // get categories + const post_cats = await fetch( + `https://reporterly.net/wp-json/wp/v2/categories?post=${post_id}` + ) + const cats = await post_cats.json() + // get tags + const post_tags = await fetch(`https://reporterly.net/wp-json/wp/v2/tags?post=${post_id}`) + const tags = await post_tags.json() + + posts.push({ blog: post, cats, tags }) + } } // Pass post data to the page via props From 442f1725770795a04adbc6110138e83d8c61b308 Mon Sep 17 00:00:00 2001 From: Yahya Makarim Date: Sat, 29 May 2021 14:26:08 +0430 Subject: [PATCH 02/44] build time error solved (search.js to Search.js) --- components/Layout.js | 1 + 1 file changed, 1 insertion(+) diff --git a/components/Layout.js b/components/Layout.js index ce8ad77..c297c12 100644 --- a/components/Layout.js +++ b/components/Layout.js @@ -1,4 +1,5 @@ import Search from './Search' +// search name changed to upper case export default function Layout({ children }) { return ( From 23c473e7e7f420e11eb9812653b4bdf44306fdce Mon Sep 17 00:00:00 2001 From: Yahya Makarim Date: Sat, 29 May 2021 14:39:41 +0430 Subject: [PATCH 03/44] infinite scrolling bug solved --- components/Posts.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/components/Posts.js b/components/Posts.js index 5546757..3c12f59 100644 --- a/components/Posts.js +++ b/components/Posts.js @@ -94,7 +94,7 @@ export default function Posts({ useEffect(() => { console.log('ON ROUTER USE EFFECT') setBlogs(posts) - setPage(1) + updatePage(1) }, [router]) // disable loadmore @@ -129,7 +129,7 @@ export default function Posts({ // Detects when user scrolls down till the last blog if (pageOffset > lastBlogLoadedOffset) { // fetch new posts - updatePage() + updatePage(page * 1 + 1) } } } From caed404263ffabb039304523b216c6e238580d8f Mon Sep 17 00:00:00 2001 From: Yahya Makarim Date: Sat, 29 May 2021 14:44:38 +0430 Subject: [PATCH 04/44] comments added --- components/Layout.js | 1 - pages/index.js | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/components/Layout.js b/components/Layout.js index c297c12..ce8ad77 100644 --- a/components/Layout.js +++ b/components/Layout.js @@ -1,5 +1,4 @@ import Search from './Search' -// search name changed to upper case export default function Layout({ children }) { return ( diff --git a/pages/index.js b/pages/index.js index f045aff..a8fc982 100644 --- a/pages/index.js +++ b/pages/index.js @@ -73,13 +73,13 @@ export async function getStaticProps() { // console.log('BLOGS PASSED TO POSTS.JS: ', posts) - console.log('SECTOIN', section) + // console.log('SECTOIN', section) postsContainer.push({ ...section, posts: posts }) - console.log('POSTS CONTAINER', postsContainer) + // console.log('POSTS CONTAINER', postsContainer) } // console.log('POSTS CONTAINER', ...postsContainer) From 75602217b73fcd45dc64f87047515902d389417e Mon Sep 17 00:00:00 2001 From: Yahya Makarim Date: Sat, 29 May 2021 14:49:36 +0430 Subject: [PATCH 05/44] search name changed to SearchForm --- components/Layout.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/Layout.js b/components/Layout.js index ce8ad77..add2d56 100644 --- a/components/Layout.js +++ b/components/Layout.js @@ -1,4 +1,4 @@ -import Search from './Search' +import Search from './SearchForm' export default function Layout({ children }) { return ( From 679148a03f96f394371d43077f76e953627c5389 Mon Sep 17 00:00:00 2001 From: Yahya Makarim Date: Sat, 29 May 2021 14:50:18 +0430 Subject: [PATCH 06/44] search to SearchForm.js --- components/Layout.js | 4 ++-- components/{search.js => SearchForm.js} | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) rename components/{search.js => SearchForm.js} (96%) diff --git a/components/Layout.js b/components/Layout.js index add2d56..3e9e44a 100644 --- a/components/Layout.js +++ b/components/Layout.js @@ -1,9 +1,9 @@ -import Search from './SearchForm' +import SearchForm from './SearchForm' export default function Layout({ children }) { return (
      - + {children}
      ) diff --git a/components/search.js b/components/SearchForm.js similarity index 96% rename from components/search.js rename to components/SearchForm.js index a2d295a..f6063dc 100644 --- a/components/search.js +++ b/components/SearchForm.js @@ -1,7 +1,7 @@ import React, { useState, useEffect } from 'react' import { useRouter } from 'next/router' -function Search() { +function SearchForm() { const router = useRouter() const [search, setSearch] = useState('') const [loading, setLoading] = useState(false) @@ -52,4 +52,4 @@ function Search() { ) } -export default Search +export default SearchForm From e7473ff1f8e2b1e773e7c4497a635f2dc0cd0317 Mon Sep 17 00:00:00 2001 From: Yahya Makarim Date: Mon, 31 May 2021 14:48:31 +0430 Subject: [PATCH 07/44] pagination loading done --- components/Posts.js | 121 ++++++++++++++++++++++++-------------------- 1 file changed, 67 insertions(+), 54 deletions(-) diff --git a/components/Posts.js b/components/Posts.js index 3c12f59..e2d3f6c 100644 --- a/components/Posts.js +++ b/components/Posts.js @@ -3,9 +3,8 @@ import { useRouter } from 'next/router' import Link from 'next/link' async function getNewPostsFromApi(page, type, type_id) { - const id = type_id const res = await fetch( - `https://reporterly.net/wp-json/wp/v2/posts?${type}=${id}&_embed=true&page=${page}` + `https://reporterly.net/wp-json/wp/v2/posts?_embed=true&${type}=${type_id}&page=${page}` ) const blogs = await res.json() @@ -65,10 +64,10 @@ export default function Posts({ // trigger loadmore (update page number) function updatePage(pageNum) { - // console.log('UPDATING NUMBER...') - setLoading(true) - setDisable(true) - return setPage(pageNum) + console.log('UPDATING PAGE NUMBER...') + setPage(pageNum) + console.log('PAGE UPDATEPAGE: ', page) + return null } // get more posts @@ -77,6 +76,8 @@ export default function Posts({ isInitialMount.current = false console.log('CURRENT') } else { + console.log('ON PAGE UPDATE SET LOADING TRUE') + setLoading(true) const newPosts = await getNewPostsFromApi(page, type, type_id) if (newPosts.length > 0) { if (paginationStyle == 'pagination') { @@ -84,21 +85,19 @@ export default function Posts({ } else { setBlogs([...blogs, ...newPosts]) } - } else { - setDisable(true) } - setLoading(false) } }, [page]) useEffect(() => { console.log('ON ROUTER USE EFFECT') + console.log('PAGE', page) setBlogs(posts) - updatePage(1) }, [router]) // disable loadmore useEffect(() => { + console.log('ON EACH PAGE UPDATE IF PAGE === LAST PAGE SET DISABLE TRUE') if (page >= totalPages) { setDisable(true) } @@ -106,6 +105,19 @@ export default function Posts({ // console.log('Current Page', page) }, [page]) + useEffect(() => { + console.log('ON EACH BLOGS UPDATE SET LOADING FALSE: ') + setLoading(false) + }, [blogs]) + + useEffect(() => { + console.log('LOADING: ', loading) + }, [loading]) + + useEffect(() => { + console.log('DISABLE: ', disable) + }, [disable]) + // ======================================================== // INFINITE SCROLLING // ======================================================== @@ -265,50 +277,51 @@ export default function Posts({ ) : ( '' )} -
        - {loading && paginationStyle == 'pagination' ? ( -

        Loding...

        - ) : ( - blogs.map((blog_pack) => { - return ( -
      1. - - -
        {blog_pack.blog.title.rendered}
        -
        - -

        {blog_pack.blog.excerpt.rendered}

        -
        - -
        -

        Categories:

        -
          - {blog_pack.cats.map((cat) => { - return ( -
        • - - {cat.name} - -
        • - ) - })} -
        -
        -
      2. - ) - }) - )} -
      + {loading ? ( +

      Loading...

      + ) : ( +
        + {blogs && + blogs.map((blog_pack) => { + return ( +
      1. + + +
        {blog_pack.blog.title.rendered}
        +
        + +

        {blog_pack.blog.excerpt.rendered}

        +
        + +
        +

        Categories:

        +
          + {blog_pack.cats.map((cat) => { + return ( +
        • + + {cat.name} + +
        • + ) + })} +
        +
        +
      2. + ) + })} +
      + )}
      {paginationStyle ? : ''}
      From e3b5317735c234521ebd174dcf9d0f3302409fb6 Mon Sep 17 00:00:00 2001 From: Yahya Makarim Date: Mon, 31 May 2021 15:37:10 +0430 Subject: [PATCH 08/44] loading posts corrected --- components/Posts.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/Posts.js b/components/Posts.js index e2d3f6c..a5aed2f 100644 --- a/components/Posts.js +++ b/components/Posts.js @@ -277,7 +277,7 @@ export default function Posts({ ) : ( '' )} - {loading ? ( + {loading && paginationStyle == 'pagination' ? (

      Loading...

      ) : (
        From af41bf84157ea7cbafdb6cd9c5cf6552de7172cf Mon Sep 17 00:00:00 2001 From: Yahya Makarim Date: Mon, 31 May 2021 16:34:32 +0430 Subject: [PATCH 09/44] tailwind css added --- components/Layout.js | 4 +- components/Posts.js | 118 ++++++-- package-lock.json | 697 ++++++++++++++++++++++++++++++++++++++++++- package.json | 5 + postcss.config.js | 6 + styles/globals.css | 20 +- tailwind.config.js | 11 + 7 files changed, 818 insertions(+), 43 deletions(-) create mode 100644 postcss.config.js create mode 100644 tailwind.config.js diff --git a/components/Layout.js b/components/Layout.js index 3e9e44a..b5e7d22 100644 --- a/components/Layout.js +++ b/components/Layout.js @@ -2,8 +2,10 @@ import SearchForm from './SearchForm' export default function Layout({ children }) { return ( -
        +
        +
        +
        {children}
        ) diff --git a/components/Posts.js b/components/Posts.js index a5aed2f..75e6379 100644 --- a/components/Posts.js +++ b/components/Posts.js @@ -285,38 +285,104 @@ export default function Posts({ blogs.map((blog_pack) => { return (
      1. - - -
        {blog_pack.blog.title.rendered}
        -
        - -

        {blog_pack.blog.excerpt.rendered}

        -
        - -
        -

        Categories:

        -
          - {blog_pack.cats.map((cat) => { - return ( -
        • - - {cat.name} - -
        • - ) - })} -
        -
        +
      2. +

        +

        + + + + + + + + + {blog_pack.blog.date} + + + + {blog_pack.cats.map((cat) => { + return ( + + + {cat.name} + + + ) + })} + +
        +
        + ) })} diff --git a/package-lock.json b/package-lock.json index a9f902e..07d6aca 100644 --- a/package-lock.json +++ b/package-lock.json @@ -222,6 +222,15 @@ "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz", "integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==" }, + "@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.2", "resolved": "https://registry.npmjs.org/@hapi/accept/-/accept-5.0.2.tgz", @@ -322,6 +331,32 @@ "resolved": "https://registry.npmjs.org/@next/react-refresh-utils/-/react-refresh-utils-10.2.2.tgz", "integrity": "sha512-OL7r0iz+SiE9SMWcxZocUtEAHv0/TlBWxIE3KjjO1vWSU1r0gMrE2l2RxHfMLIPsl6CjAkcPxoaXlosFsJ2S5w==" }, + "@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", @@ -345,6 +380,29 @@ "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" }, + "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", @@ -452,6 +510,34 @@ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" }, + "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.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.2.6.tgz", + "integrity": "sha512-8lChSmdU6dCNMCQopIf4Pe5kipkAGj/fvTMslCsih0uHpOrXOPUEVOmYMMqmw3cekQkSD7EhIeuYl5y0BLdKqg==", + "dev": true, + "requires": { + "browserslist": "^4.16.6", + "caniuse-lite": "^1.0.30001230", + "colorette": "^1.2.2", + "fraction.js": "^4.1.1", + "normalize-range": "^0.1.2", + "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "caniuse-lite": { + "version": "1.0.30001231", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001231.tgz", + "integrity": "sha512-WAFFv31GgU4DiwNAy77qMo3nNyycEhH3ikcCVHvkQpPe/fO8Tb2aRYzss8kgyLQBm8mJ7OryW4X6Y4vsBCIqag==", + "dev": true + } + } + }, "available-typed-arrays": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.3.tgz", @@ -507,6 +593,12 @@ "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", @@ -527,6 +619,16 @@ "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", @@ -657,6 +759,12 @@ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" }, + "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", @@ -701,6 +809,16 @@ "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", @@ -714,16 +832,38 @@ "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", @@ -860,11 +1000,23 @@ "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", @@ -907,6 +1059,12 @@ "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", @@ -926,6 +1084,23 @@ "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", @@ -943,6 +1118,12 @@ } } }, + "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", @@ -1092,6 +1273,29 @@ "safe-buffer": "^5.1.1" } }, + "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", @@ -1134,6 +1338,30 @@ "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" }, + "fraction.js": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.1.tgz", + "integrity": "sha512-MHOhvvxHTfRFpF1geTK9czMIZ6xclsEor2wkIGYYq+PxcQqT7vStJqjhe6S1TenZrMZzo+wlqOufBDVepUEgPg==", + "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", @@ -1163,6 +1391,56 @@ "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", @@ -1246,6 +1524,12 @@ "react-is": "^16.7.0" } }, + "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", @@ -1285,6 +1569,16 @@ "resolve-from": "^4.0.0" } }, + "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", @@ -1350,6 +1644,12 @@ "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-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -1487,6 +1787,16 @@ "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" + } + }, "jsonify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", @@ -1525,6 +1835,18 @@ "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", @@ -1556,6 +1878,22 @@ "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", @@ -1582,11 +1920,26 @@ "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", @@ -1660,6 +2013,23 @@ "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==" + } } }, "nice-try": { @@ -1667,6 +2037,15 @@ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" }, + "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", @@ -1832,11 +2211,23 @@ "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.2.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", + "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", + "dev": true + }, "object-inspect": { "version": "1.10.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", @@ -1867,6 +2258,15 @@ "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", @@ -1928,6 +2328,35 @@ "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" + } + } + } + }, "parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -1949,6 +2378,12 @@ "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-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", @@ -2008,22 +2443,94 @@ "integrity": "sha512-4NmSD7fMFlM8roNxs7YXPv7UFRbYzb0gufR5zBxJLRzY54+zFsavxBo6zsQzP9ep6Hh3pC2pTyrpSTBEaB6IkQ==" }, "postcss": { - "version": "8.2.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.13.tgz", - "integrity": "sha512-FCE5xLH+hjbzRdpbRb1IMCvPv9yZx2QnDarBEYSN0N0HYk+TcXsEhwdFcFb+SRWOKzKGErhIEbBK2ogyLdTtfQ==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.0.tgz", + "integrity": "sha512-+ogXpdAjWGa+fdYY5BQ96V/6tAo+TdSSIMP5huJBIygdWwKtVoB5JWZ7yUd4xZ8r+8Kvvx4nyg/PQ071H4UtcQ==", + "dev": true, "requires": { "colorette": "^1.2.2", - "nanoid": "^3.1.22", - "source-map": "^0.6.1" + "nanoid": "^3.1.23", + "source-map-js": "^0.6.2" + } + }, + "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==" + "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", @@ -2069,6 +2576,18 @@ "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", @@ -2079,6 +2598,18 @@ "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", @@ -2172,6 +2703,24 @@ "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 + } + } + }, "redux": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/redux/-/redux-4.1.0.tgz", @@ -2204,6 +2753,12 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, "rheostat": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/rheostat/-/rheostat-2.2.0.tgz", @@ -2222,6 +2777,15 @@ "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", @@ -2283,6 +2847,23 @@ "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" + }, + "dependencies": { + "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 + } + } + }, "source-map": { "version": "0.8.0-beta.0", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", @@ -2291,6 +2872,12 @@ "whatwg-url": "^7.0.0" } }, + "source-map-js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", + "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", + "dev": true + }, "stacktrace-parser": { "version": "0.1.10", "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", @@ -2427,6 +3014,92 @@ "dequal": "2.0.2" } }, + "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", @@ -2499,6 +3172,12 @@ "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", @@ -2629,6 +3308,12 @@ "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 + }, "ws": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", diff --git a/package.json b/package.json index 1ac665d..9401f85 100644 --- a/package.json +++ b/package.json @@ -14,5 +14,10 @@ "react": "17.0.2", "react-dom": "17.0.2", "swr": "^0.5.6" + }, + "devDependencies": { + "autoprefixer": "^10.2.6", + "postcss": "^8.3.0", + "tailwindcss": "^2.1.2" } } diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..33ad091 --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/styles/globals.css b/styles/globals.css index e5e2dcc..b72f7ad 100644 --- a/styles/globals.css +++ b/styles/globals.css @@ -1,16 +1,16 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + html, body { - padding: 0; - margin: 0; - font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, - Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; + font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, + Fira Sans, Droid Sans, Helvetica Neue, sans-serif; } -a { - color: inherit; - text-decoration: none; +.w-900 { + width: 900px; } - -* { - box-sizing: border-box; +.h-400 { + height: 400px; } diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..bc5532a --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,11 @@ +module.exports = { + purge: ['./pages/**/*.{js,ts,jsx,tsx}', './components/**/*.{js,ts,jsx,tsx}'], + darkMode: false, // or 'media' or 'class' + theme: { + extend: {} + }, + variants: { + extend: {} + }, + plugins: [] +} From c6c4e62522cb9b4dd425978fc50cdebc6d71163b Mon Sep 17 00:00:00 2001 From: Yahya Makarim Date: Mon, 31 May 2021 16:42:08 +0430 Subject: [PATCH 10/44] image imported --- components/Posts.js | 1 + 1 file changed, 1 insertion(+) diff --git a/components/Posts.js b/components/Posts.js index 75e6379..73123b6 100644 --- a/components/Posts.js +++ b/components/Posts.js @@ -1,6 +1,7 @@ import React, { useState, useEffect, useRef } from 'react' import { useRouter } from 'next/router' import Link from 'next/link' +import Image from 'next/image' async function getNewPostsFromApi(page, type, type_id) { const res = await fetch( From c6349b09a1bef5f21f64a29183c163af397723c5 Mon Sep 17 00:00:00 2001 From: Yahya Makarim Date: Mon, 31 May 2021 16:57:39 +0430 Subject: [PATCH 11/44] errors solved in posts.js --- components/Posts.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/components/Posts.js b/components/Posts.js index 73123b6..164a051 100644 --- a/components/Posts.js +++ b/components/Posts.js @@ -321,7 +321,7 @@ export default function Posts({ -

        @@ -362,7 +362,7 @@ export default function Posts({ viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg' > - + Date: Mon, 31 May 2021 20:10:04 +0430 Subject: [PATCH 12/44] tailwind styles for components --- components/Posts.js | 106 ++++++++++++++++++-------- pages/author/[slug].js | 4 +- pages/blog/[slug].js | 158 +++++++++++++++++++++++++++++---------- pages/category/[slug].js | 4 +- pages/tag/[slug].js | 4 +- 5 files changed, 200 insertions(+), 76 deletions(-) diff --git a/components/Posts.js b/components/Posts.js index 164a051..f07aa95 100644 --- a/components/Posts.js +++ b/components/Posts.js @@ -36,7 +36,7 @@ export default function Posts({ }) { const router = useRouter() if (router.isFallback) { - return

        Loading...
        + return

        Loading...

        } const [page, setPage] = useState(1) @@ -168,7 +168,7 @@ export default function Posts({ // INFINITE LOADING COMPONENT // =================================== function InfiniteLoader() { - return loading ?

        Loading...

        : '' + return loading ?

        Loading

        : '' } // =================================== @@ -177,7 +177,12 @@ export default function Posts({ function Loadmore() { return ( - ) @@ -191,7 +196,11 @@ export default function Posts({ // first pagesArray.push(
      3. -
      4. @@ -199,7 +208,11 @@ export default function Posts({ // previous pagesArray.push(
      5. -
      6. @@ -230,7 +243,11 @@ export default function Posts({ for (let i = start; i <= last; i++) { pagesArray.push(
      7. -
      8. @@ -240,7 +257,11 @@ export default function Posts({ // next pagesArray.push(
      9. -
      10. @@ -248,14 +269,18 @@ export default function Posts({ // last pagesArray.push(
      11. -
      12. ) return ( -