Improve bookcard UI responsiveness (#231)

* Improve bookcard responsive UI

* Hamburger menu

* Resolved conflict, mergin to upstream

* fix missing bookmark button
This commit is contained in:
Irsyad Rahman
2020-10-18 13:09:57 +07:00
committed by GitHub
parent d656841cb3
commit 97522a0332
12 changed files with 8691 additions and 5500 deletions

View File

@@ -42,6 +42,7 @@ exports.createPages = async function ({ actions, graphql }) {
context: {
categoryName: category.name,
data: data.data,
image: category.emoji,
limit: null,
},
})

13850
app/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -33,7 +33,7 @@
"eslint-plugin-jsx-a11y": "^6.3.1",
"eslint-plugin-react": "^7.20.6",
"eslint-plugin-react-hooks": "^4.1.0",
"husky": ">=4",
"husky": "^4.3.0",
"lint-staged": ">=10",
"prettier": "1.19.1",
"tailwindcss": "^1.1.2"

View File

@@ -1,5 +1,5 @@
import PropTypes from "prop-types"
import React,{useState} from "react"
import React, { useState } from "react"
import StarRatings from "react-star-ratings"
import { Card, Row, Col } from "react-bootstrap"
@@ -7,38 +7,43 @@ import AmazonURL from "../components/amazonurl"
import Bookmark from "../components/bookmark"
import GoodReadsImage from "../components/goodreadsimage"
const truncateContent = (content) => {
const truncateContent = content => {
if (!content) {
return ""
}
return content.length > 350 ? content.substring(0, 350) + "..." : content
};
}
const showFullText = (content) =>{
const showFullText = content => {
if (!content) {
return ""
}
return content
}
const BookCard = ({book}) =>{
const [show,toggleShow] = useState(false)
return(
<Card className="ml-5 mb-2">
<Row>
<Col className="col-3 align-self-center">
<Card.Img
style={{ width: "9rem", paddingLeft: "25px", paddingRight: "-15px", paddingTop: "30px" }}
src={book.image_url}
alt={book.title}
/>
</Col>
<Col>
<Card.Body style={{ marginLeft: "-30px"}}>
<Card.Title>{book.title}</Card.Title>
<Card.Subtitle className="mb-2 text-muted">
<div>{book.author} <b>{book.year ? book.year: null}</b></div>
<div>
const BookCard = ({ book }) => {
const [show, toggleShow] = useState(false)
return (
<Card style={{ marginBottom: "15px" }}>
<Row>
<Col xs={12} md={4} xl={2}>
<Card.Img
style={{
paddingLeft: "15px",
paddingRight: "15px",
paddingTop: "30px",
}}
src={book.image_url}
resizeMode="contain"
/>
</Col>
<Col xs={12} md={8} xl={10}>
<Card.Body>
<Card.Title>{book.title}</Card.Title>
<Card.Subtitle className="text-muted">
<Card.Text style={{ paddingTop: "2px"}}>
{book.author} <b>{book.year ? book.year : null}</b>
</Card.Text>
<StarRatings
rating={parseFloat(book.rating)}
numberOfStars={5}
@@ -46,29 +51,45 @@ return(
starSpacing="1px"
starRatedColor="#fa604a"
/>
</div>
<div style={{ display: "flex", alignItems: "center", paddingTop: ".75rem" }}>
<div style= {{ width: "30px", height: "30px", marginRight: "5px" }}>
{book.amazon_url ? <AmazonURL book={book} />: null}
<div style={{display: "flex",alignItems: "center",paddingTop: ".75rem",}} >
<div style={{ width: "30px", height: "30px", marginRight: "5px" }}>
{book.amazon_url ? <AmazonURL book={book} /> : null}
</div>
<div style={{ width: "30px", height: "30px" }}>
<a href={book.url}>
<GoodReadsImage />
</a>
</div>
<Bookmark book={book} />
</div>
<div style= {{ width: "30px", height: "30px" }}>
<a href={book.url} ><GoodReadsImage /></a>
</div>
<Bookmark book={book} />
</div>
</Card.Subtitle>
<p style={{ color: "gray", fontSize: "0.8rem", paddingTop: "1rem" }}>
{!show && truncateContent(book.description)}
{show && showFullText(book.description)}
</p>
{!show && <button className="btn btn-primary" onClick={() => toggleShow(true)}>Show More</button>}
{show && <button className="btn btn-primary" onClick={() => toggleShow(false)}>Show Less</button>}
</Card.Body>
</Col>
</Row>
</Card>
)
</Card.Subtitle>
<p
style={{ color: "gray", fontSize: "0.8rem", paddingTop: "1rem" }}
>
{!show && truncateContent(book.description)}
{show && showFullText(book.description)}
</p>
{!show && (
<button
className="btn btn-sm btn-primary "
onClick={() => toggleShow(true)}
>
Show More
</button>
)}
{show && (
<button
className="btn btn-sm btn-primary "
onClick={() => toggleShow(false)}
>
Show Less
</button>
)}
</Card.Body>
</Col>
</Row>
</Card>
)
}
BookCard.propTypes = {

View File

@@ -1,12 +1,12 @@
import React from "react";
export default ({categoryName}) => {
export default ({categoryName, categoryImage}) => {
return (
<div aria-labelledby="category-description">
<h2 id="category-description">
{categoryName}
</h2>
<div className="my-2 mx-2" aria-labelledby="category-description">
<h4 id="category-description">
{categoryImage} {categoryName}
</h4>
</div>
)
}

View File

@@ -3,17 +3,17 @@ import PropTypes from "prop-types"
import React from "react"
const Header = ({ siteTitle }) => (
<header className="my-1 bg-red custom-header" aria-labelledby='main-title'>
<h1 id="main-title" style={{ margin: 0 }}>
<header className="mx-2 bg-red d-none d-lg-block custom-header" aria-labelledby='main-title'>
<h4 className="d-flex justify-content-end" id="main-title" style={{ margin: 16 }}>
<Link
to="/"
style={{
textDecoration: `none`,
textDecorationColor: `none`,
}}
>
{siteTitle}
</Link>
</h1>
</h4>
</header>
)

View File

@@ -12,6 +12,7 @@ import { useStaticQuery, graphql } from "gatsby"
import Header from "./header"
import "./layout.css"
import "bootstrap/dist/css/bootstrap.min.css"
import { Container } from "react-bootstrap"
const Layout = ({ children }) => {
const data = useStaticQuery(graphql`
@@ -27,10 +28,14 @@ const Layout = ({ children }) => {
return (
<>
<Header siteTitle={data.site.siteMetadata.title} />
<div className="container mx-auto px-10">
<Container fluid>
<main>{children}</main>
</div>
<footer>
© {new Date().getFullYear()}, Built with
{` `}
<a href="https://www.gatsbyjs.org">Gatsby</a>
</footer>
</Container>
</>
)
}

View File

@@ -1,5 +1,5 @@
import React, { useContext } from "react"
import { Nav } from "react-bootstrap"
import { Navbar, Nav } from "react-bootstrap"
import { StaticQuery, graphql, Link } from "gatsby"
import "../styles/sidebar.css"
import { BookmarkContext } from '../context/globalState'
@@ -24,25 +24,25 @@ export default () => {
}
`}
render={data => (
<Nav
className="col-md-2 d-none d-md-block bg-light sidebar"
activeKey="/home"
>
<div className="sidebar-sticky" role="navigation" aria-label="Sidebar">
<div style={{position: "relative", left: "0.9rem", paddingBottom: "0.2rem"}}>
<Navbar className="sidebar-sticky" collapseOnSelect expand="lg" bg="ligt" variant="light">
<Navbar.Toggle aria-controls="responsive-navbar-nav" />
<Navbar.Collapse>
<div>
<div style={{position: "relative", left: "0.9rem", paddingBottom: "0.2rem"}}>
<Link to="/readingList">🔖 Reading List ({readingList.bookIds.length})</Link>
</div>
{data.allCategoriesJson.edges.map(function(x, index) {
return (
<Nav.Item key={x.node.name}>
<Nav.Link href={slugify(x.node.name)} role="button">
<Nav.Item>
<Nav.Link href={slugify(x.node.name)}>
{x.node.emoji} {x.node.name}
</Nav.Link>
</Nav.Item>
)
})}
</div>
</Nav>
</Navbar.Collapse>
</Navbar>
)}
/>
)

View File

@@ -4,7 +4,7 @@ import { graphql } from "gatsby"
import Layout from "../components/layout"
import SEO from "../components/seo"
import SideBar from "../components/sidebar"
import { Container, Row, Col } from "react-bootstrap"
import { Container, Row, Col, Navbar } from "react-bootstrap"
import BookFeed from "../components/feed"
function myFunction(setMaximumBooksToShow, maximumBooksToShow) {
@@ -28,12 +28,12 @@ export default ({ data }) => {
return (
<Layout>
<SEO title="Home" />
<Container fluid>
<Container fluid>
<Row>
<Col xs={2}>
<Col lg={2}>
<SideBar />
</Col>
<Col>
<Col lg={10}>
<BookFeed data={data} limit={maximumBooksToShow} />
</Col>
</Row>

View File

@@ -8,6 +8,11 @@
box-shadow: inset -1px 0 0 rgba(0, 0, 0, 0.1);
width: max-content;
}
.nav-link {
font-size: .900rem;
}
#sidebar-wrapper {
min-height: 100vh !important;
width: 100vw;
@@ -25,3 +30,6 @@
min-width: 0;
width: 100%;
}

View File

@@ -1,31 +1,32 @@
import React, { useState, useEffect } from 'react';
import { graphql } from 'gatsby';
import React, { useState, useEffect } from "react"
import { graphql } from "gatsby"
import { Container, Row, Col } from 'react-bootstrap';
import Layout from '../components/layout';
import SEO from '../components/seo';
import SideBar from '../components/sidebar';
import CategoryDescription from '../components/categorydescription';
import BookFeed from '../components/feed';
import Layout from "../components/layout"
import SEO from "../components/seo"
import SideBar from "../components/sidebar"
import CategoryDescription from "../components/categorydescription"
import { Container, Row, Col } from "react-bootstrap"
import BookFeed from "../components/feed"
const basicTemplate = props => {
const { pageContext } = props
const { categoryName, data, image } = pageContext
const basicTemplate = (props) => {
const { pageContext } = props;
const { categoryName, data } = pageContext;
return (
<Layout>
<SEO title="Home" />
<Container fluid>
<Row>
<Col xs={2}>
<Col lg={2}>
<SideBar />
</Col>
<Col>
<CategoryDescription categoryName={categoryName} />
<Col lg={10}>
<CategoryDescription categoryName={categoryName} categoryImage={image} />
<BookFeed data={data} categoryName={categoryName} />
</Col>
</Row>
</Container>
</Layout>
);
};
export default basicTemplate;
)
}
export default basicTemplate

View File

@@ -988,7 +988,7 @@
dependencies:
regenerator-runtime "^0.13.2"
"@babel/runtime@^7.10.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7":
"@babel/runtime@^7.10.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.11.2", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7":
version "7.11.2"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736"
integrity sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==
@@ -4270,6 +4270,17 @@ cosmiconfig@^6.0.0:
path-type "^4.0.0"
yaml "^1.7.2"
cosmiconfig@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3"
integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==
dependencies:
"@types/parse-json" "^4.0.0"
import-fresh "^3.2.1"
parse-json "^5.0.0"
path-type "^4.0.0"
yaml "^1.10.0"
create-ecdh@^4.0.0:
version "4.0.3"
resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff"
@@ -5389,6 +5400,24 @@ es-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstrac
string.prototype.trimend "^1.0.1"
string.prototype.trimstart "^1.0.1"
es-abstract@^1.18.0-next.0:
version "1.18.0-next.1"
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.1.tgz#6e3a0a4bda717e5023ab3b8e90bec36108d22c68"
integrity sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==
dependencies:
es-to-primitive "^1.2.1"
function-bind "^1.1.1"
has "^1.0.3"
has-symbols "^1.0.1"
is-callable "^1.2.2"
is-negative-zero "^2.0.0"
is-regex "^1.1.1"
object-inspect "^1.8.0"
object-keys "^1.1.1"
object.assign "^4.1.1"
string.prototype.trimend "^1.0.1"
string.prototype.trimstart "^1.0.1"
es-to-primitive@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377"
@@ -5427,6 +5456,24 @@ escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
eslint-config-airbnb-base@^14.2.0:
version "14.2.0"
resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.0.tgz#fe89c24b3f9dc8008c9c0d0d88c28f95ed65e9c4"
integrity sha512-Snswd5oC6nJaevs3nZoLSTvGJBvzTfnBqOIArkf3cbyTyq9UD79wOk8s+RiL6bhca0p/eRO6veczhf6A/7Jy8Q==
dependencies:
confusing-browser-globals "^1.0.9"
object.assign "^4.1.0"
object.entries "^1.1.2"
eslint-config-airbnb@^18.2.0:
version "18.2.0"
resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-18.2.0.tgz#8a82168713effce8fc08e10896a63f1235499dcd"
integrity sha512-Fz4JIUKkrhO0du2cg5opdyPKQXOI2MvF8KUvN2710nJMT6jaRUpRE2swrJftAjVGL7T1otLM5ieo5RqS1v9Udg==
dependencies:
eslint-config-airbnb-base "^14.2.0"
object.assign "^4.1.0"
object.entries "^1.1.2"
eslint-config-react-app@^5.2.1:
version "5.2.1"
resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-5.2.1.tgz#698bf7aeee27f0cea0139eaef261c7bf7dd623df"
@@ -5517,6 +5564,11 @@ eslint-plugin-react-hooks@^1.7.0:
resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-1.7.0.tgz#6210b6d5a37205f0b92858f895a4e827020a7d04"
integrity sha512-iXTCFcOmlWvw4+TOE8CLWj6yX1GwzT0Y6cUfHHZqWnSk144VmVIRcVGtUAzrLES7C798lmvnt02C7rxaOX1HNA==
eslint-plugin-react-hooks@^4.1.0:
version "4.1.2"
resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.1.2.tgz#2eb53731d11c95826ef7a7272303eabb5c9a271e"
integrity sha512-ykUeqkGyUGgwTtk78C0o8UG2fzwmgJ0qxBGPp2WqRKsTwcLuVf01kTDRAtOsd4u6whX2XOC8749n2vPydP82fg==
eslint-plugin-react@^7.20.2:
version "7.20.6"
resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.20.6.tgz#4d7845311a93c463493ccfa0a19c9c5d0fd69f60"
@@ -5534,6 +5586,23 @@ eslint-plugin-react@^7.20.2:
resolve "^1.17.0"
string.prototype.matchall "^4.0.2"
eslint-plugin-react@^7.20.6:
version "7.21.4"
resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.21.4.tgz#31060b2e5ff82b12e24a3cc33edb7d12f904775c"
integrity sha512-uHeQ8A0hg0ltNDXFu3qSfFqTNPXm1XithH6/SY318UX76CMj7Q599qWpgmMhVQyvhq36pm7qvoN3pb6/3jsTFg==
dependencies:
array-includes "^3.1.1"
array.prototype.flatmap "^1.2.3"
doctrine "^2.1.0"
has "^1.0.3"
jsx-ast-utils "^2.4.1 || ^3.0.0"
object.entries "^1.1.2"
object.fromentries "^2.0.2"
object.values "^1.1.1"
prop-types "^15.7.2"
resolve "^1.17.0"
string.prototype.matchall "^4.0.2"
eslint-scope@^4.0.3:
version "4.0.3"
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848"
@@ -6645,6 +6714,14 @@ gatsby-page-utils@^0.2.20:
lodash "^4.17.15"
micromatch "^3.1.10"
gatsby-plugin-google-analytics@^2.3.14:
version "2.3.17"
resolved "https://registry.yarnpkg.com/gatsby-plugin-google-analytics/-/gatsby-plugin-google-analytics-2.3.17.tgz#61207d253b69e8ab606ebff75e074c1774d108bb"
integrity sha512-0s8m2BPBBsccCIFE2rUl98Ir/JE273cyPwfFB1PrtNz6rVmbRrm8AWKJvGXlZiPAfMUuBhT39vCgTvrCDp4phw==
dependencies:
"@babel/runtime" "^7.11.2"
minimatch "3.0.4"
gatsby-plugin-manifest@^2.2.21:
version "2.2.21"
resolved "https://registry.yarnpkg.com/gatsby-plugin-manifest/-/gatsby-plugin-manifest-2.2.21.tgz#3be76247d2f652fd17a8706fd040955201c21e70"
@@ -7893,15 +7970,15 @@ human-signals@^1.1.1:
resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3"
integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==
husky@>=4:
version "4.2.5"
resolved "https://registry.yarnpkg.com/husky/-/husky-4.2.5.tgz#2b4f7622673a71579f901d9885ed448394b5fa36"
integrity sha512-SYZ95AjKcX7goYVZtVZF2i6XiZcHknw50iXvY7b0MiGoj5RwdgRQNEHdb+gPDPCXKlzwrybjFjkL6FOj8uRhZQ==
husky@^4.3.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/husky/-/husky-4.3.0.tgz#0b2ec1d66424e9219d359e26a51c58ec5278f0de"
integrity sha512-tTMeLCLqSBqnflBZnlVDhpaIMucSGaYyX6855jM4AguGeWCeSzNdb1mfyWduTZ3pe3SJVvVWGL0jO1iKZVPfTA==
dependencies:
chalk "^4.0.0"
ci-info "^2.0.0"
compare-versions "^3.6.0"
cosmiconfig "^6.0.0"
cosmiconfig "^7.0.0"
find-versions "^3.2.0"
opencollective-postinstall "^2.0.2"
pkg-dir "^4.2.0"
@@ -8033,7 +8110,7 @@ import-fresh@^3.0.0:
parent-module "^1.0.0"
resolve-from "^4.0.0"
import-fresh@^3.1.0:
import-fresh@^3.1.0, import-fresh@^3.2.1:
version "3.2.1"
resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66"
integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==
@@ -8355,6 +8432,11 @@ is-callable@^1.2.0:
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb"
integrity sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==
is-callable@^1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9"
integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==
is-ci@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c"
@@ -8540,6 +8622,11 @@ is-natural-number@^4.0.1:
resolved "https://registry.yarnpkg.com/is-natural-number/-/is-natural-number-4.0.1.tgz#ab9d76e1db4ced51e35de0c72ebecf09f734cde8"
integrity sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=
is-negative-zero@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.0.tgz#9553b121b0fac28869da9ed459e20c7543788461"
integrity sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=
is-npm@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d"
@@ -8630,7 +8717,7 @@ is-regex@^1.0.4:
dependencies:
has "^1.0.1"
is-regex@^1.1.0:
is-regex@^1.1.0, is-regex@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9"
integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==
@@ -8992,6 +9079,14 @@ jsx-ast-utils@^2.4.1:
array-includes "^3.1.1"
object.assign "^4.1.0"
"jsx-ast-utils@^2.4.1 || ^3.0.0":
version "3.0.0"
resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.0.0.tgz#0f49d5093bafa4b45d3fe02147d8b40ffc6c7438"
integrity sha512-sPuicm6EPKYI/UnWpOatvg4pI50qaBo4dSOMGUPutmJ26ttedFKXr0It0XXPk4HKnQ/1X0st4eSS2w2jhFk9Ow==
dependencies:
array-includes "^3.1.1"
object.assign "^4.1.1"
keyv@3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.0.0.tgz#44923ba39e68b12a7cec7df6c3268c031f2ef373"
@@ -9787,7 +9882,7 @@ minimatch@3.0.3:
dependencies:
brace-expansion "^1.0.0"
minimatch@^3.0.3, minimatch@^3.0.4:
minimatch@3.0.4, minimatch@^3.0.3, minimatch@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
@@ -10337,7 +10432,7 @@ object-inspect@^1.6.0:
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b"
integrity sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==
object-inspect@^1.7.0:
object-inspect@^1.7.0, object-inspect@^1.8.0:
version "1.8.0"
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0"
integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==
@@ -10374,6 +10469,16 @@ object.assign@^4.1.0:
has-symbols "^1.0.0"
object-keys "^1.0.11"
object.assign@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.1.tgz#303867a666cdd41936ecdedfb1f8f3e32a478cdd"
integrity sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA==
dependencies:
define-properties "^1.1.3"
es-abstract "^1.18.0-next.0"
has-symbols "^1.0.1"
object-keys "^1.1.1"
object.entries@^1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.2.tgz#bc73f00acb6b6bb16c203434b10f9a7e797d3add"
@@ -13212,7 +13317,7 @@ slice-ansi@^4.0.0:
astral-regex "^2.0.0"
is-fullwidth-code-point "^3.0.0"
slugify@^1.4.4:
slugify@^1.4.4, slugify@^1.4.5:
version "1.4.5"
resolved "https://registry.yarnpkg.com/slugify/-/slugify-1.4.5.tgz#a7517acf5f4c02a4df41e735354b660a4ed1efcf"
integrity sha512-WpECLAgYaxHoEAJ8Q1Lo8HOs1ngn7LN7QjXgOLbmmfkcWvosyk4ZTXkTzKyhngK640USTZUlgoQJfED1kz5fnQ==
@@ -15468,7 +15573,7 @@ yaml-loader@^0.6.0:
loader-utils "^1.4.0"
yaml "^1.8.3"
yaml@^1.7.2, yaml@^1.8.3:
yaml@^1.10.0, yaml@^1.7.2, yaml@^1.8.3:
version "1.10.0"
resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e"
integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==