diff --git a/components/product/DesktopGallery/DesktopGallery.module.css b/components/product/DesktopGallery/DesktopGallery.module.css new file mode 100644 index 00000000..5eb8cfd7 --- /dev/null +++ b/components/product/DesktopGallery/DesktopGallery.module.css @@ -0,0 +1,98 @@ +.slider { + @apply relative w-full h-full; + overflow-y: hidden; + cursor: pointer; +} + +@screen md { + .slider { + display: none; + } +} + +.leftControl, +.rightControl { + @apply absolute top-1/2 -translate-x-1/2 z-20 w-16 h-16 flex items-center justify-center bg-hover-1 rounded-full; +} + +.leftControl:hover, +.rightControl:hover { + @apply bg-hover-2; +} + +.leftControl:hover, +.rightControl:hover { + @apply outline-none shadow-outline-normal; +} + +.leftControl { + @apply bg-cover left-10; + background-image: url('public/cursor-left.png'); +} + +.rightControl { + @apply bg-cover right-10; + background-image: url('public/cursor-right.png'); +} + +@screen md { + .leftControl { + @apply left-6; + } + + .rightControl { + @apply right-6; + } +} + +.control { + @apply opacity-50 transition duration-150; +} + +.root:hover .control { + @apply opacity-100; +} + +.positionIndicatorsContainer { + /*@apply hidden;*/ + + @apply block absolute bottom-6 left-1/2; + transform: translateX(-50%); + +} + +.positionIndicator { + @apply rounded-full p-2; +} + +.dot { + @apply bg-hover-1 transition w-3 h-3 rounded-full; +} + +.positionIndicator:hover .dot { + @apply bg-hover-2; +} + +.positionIndicator:focus { + @apply outline-none; +} + +.positionIndicator:focus .dot { + @apply shadow-outline-normal; +} + +.positionIndicatorActive .dot { + @apply bg-white; +} + +.positionIndicatorActive:hover .dot { + @apply bg-white; +} + +.imageContainer > div { + @apply h-full; +} + +.img { + @apply w-full h-auto max-h-full object-cover; +} diff --git a/components/product/DesktopGallery/DesktopGallery.tsx b/components/product/DesktopGallery/DesktopGallery.tsx new file mode 100644 index 00000000..d988f0ce --- /dev/null +++ b/components/product/DesktopGallery/DesktopGallery.tsx @@ -0,0 +1,34 @@ +import React, { FC } from 'react' +import { ProductImage } from '@commerce/types' +import { Gallery, Item } from 'react-photoswipe-gallery' +import s from '@components/product/ProductSlider/ProductSlider.module.css' +import Image from 'next/image' + +interface Props { + images: ProductImage[] +} + +export const DesktopGallery: FC = ({ images }) => { + return ( + + {images.map(({ url, alt }, index) => ( + + {(props) => ( +
+ {alt +
+ )} +
+ ))} +
+ ) +} diff --git a/components/product/ProductGallery/Lightbox.tsx b/components/product/ProductGallery/Lightbox.tsx deleted file mode 100644 index bd5cdeb9..00000000 --- a/components/product/ProductGallery/Lightbox.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import React, { FC, MutableRefObject, useEffect, useState } from 'react' - -import { ProductImage } from '@commerce/types' -import 'photoswipe/dist/photoswipe.css' -import 'photoswipe/dist/default-skin/default-skin.css' - -import { Gallery, Item } from 'react-photoswipe-gallery' -import PhotoSwipe, { Options } from 'photoswipe' -import Portal from '@reach/portal' - -interface Props { - images: ProductImage[] - selectedImageIndex?: number - isOpen: boolean - onClose: () => void -} - -export const Lightbox: FC = ({ images, selectedImageIndex = 0, isOpen, onClose }) => { - const [activeImage, setActiveImage] = useState>(); - - useEffect(() => { - if (!!activeImage) { - activeImage.current.click() - } - }, [activeImage]) - - function addCloseListeners(photoswipe: PhotoSwipe) { - console.log('Opening onOpen hook') - photoswipe.listen('destroy', onClose) - photoswipe.listen('close', () => onClose) - } - - return ( - <>{isOpen && ( - - - {images.map(({ url }, index) => ( - - {({ref, open}) => { - if (index === selectedImageIndex) setActiveImage(ref) - return - }} - - )) - } - - - )} - ) -} diff --git a/components/product/ProductGallery/Lightbox.module.css b/components/product/ProductGallery/ProductGallery.module.css similarity index 100% rename from components/product/ProductGallery/Lightbox.module.css rename to components/product/ProductGallery/ProductGallery.module.css diff --git a/components/product/ProductGallery/ProductGallery.tsx b/components/product/ProductGallery/ProductGallery.tsx new file mode 100644 index 00000000..57371bb4 --- /dev/null +++ b/components/product/ProductGallery/ProductGallery.tsx @@ -0,0 +1,56 @@ +import React, { FC, MutableRefObject, useEffect, useState } from 'react' + +import { ProductImage } from '@commerce/types' +import 'photoswipe/dist/photoswipe.css' +import 'photoswipe/dist/default-skin/default-skin.css' + +import { Gallery, Item } from 'react-photoswipe-gallery' +import PhotoSwipe, { Options } from 'photoswipe' +import Portal from '@reach/portal' + +interface Props { + images: ProductImage[] + selectedImageIndex?: number + isOpen?: boolean + onClose: (idx: number) => void +} + +export const ProductGallery: FC = ({ + images, + selectedImageIndex = 0, + isOpen, + onClose, +}) => { + const [activeImage, setActiveImage] = + useState>() + + useEffect(() => { + if (!!activeImage) { + activeImage.current.click() + } + }, [activeImage]) + + function addCloseListeners(photoswipe: PhotoSwipe) { + photoswipe.listen('destroy', () => onClose(photoswipe.getCurrentIndex())) + photoswipe.listen('close', () => onClose(photoswipe.getCurrentIndex())) + } + + return ( + <> + {isOpen && ( + + + {images.map(({ url }, index) => ( + + {({ ref, open }) => { + if (index === selectedImageIndex) setActiveImage(ref) + return + }} + + ))} + + + )} + + ) +} diff --git a/components/product/ProductSlider/ProductSlider.module.css b/components/product/ProductSlider/ProductSlider.module.css index 88a44a7b..a879ea77 100644 --- a/components/product/ProductSlider/ProductSlider.module.css +++ b/components/product/ProductSlider/ProductSlider.module.css @@ -1,4 +1,4 @@ -.root { +.slider { @apply relative w-full h-full; overflow-y: hidden; cursor: pointer; @@ -22,17 +22,19 @@ .leftControl { @apply bg-cover left-10; background-image: url('public/cursor-left.png'); - - @screen md { - @apply left-6; - } } .rightControl { @apply bg-cover right-10; background-image: url('public/cursor-right.png'); +} + +@screen md { + .leftControl { + @apply left-6; + } - @screen md { + .rightControl { @apply right-6; } } @@ -81,13 +83,8 @@ @apply bg-white; } -.imageContainer { -& > div { - @apply h-full; -& > div { +.imageContainer > div { @apply h-full; - } -} } .img { diff --git a/components/product/ProductSlider/ProductSlider.tsx b/components/product/ProductSlider/ProductSlider.tsx index 5d80de1b..7659b937 100644 --- a/components/product/ProductSlider/ProductSlider.tsx +++ b/components/product/ProductSlider/ProductSlider.tsx @@ -1,16 +1,11 @@ import { useKeenSlider } from 'keen-slider/react' -import React, { - FC, - useState, - useRef, - useEffect -} from 'react' +import React, { FC, useState, useRef, useEffect } from 'react' import cn from 'classnames' import s from './ProductSlider.module.css' import Image from 'next/image' import { ProductImage } from '@commerce/types' -import { Lightbox } from '@components/product/ProductGallery/Lightbox' +import { ProductGallery } from '@components/product/ProductGallery/ProductGallery' interface Props { images: ProductImage[] @@ -30,7 +25,7 @@ const ProductSlider: FC = ({ images }) => { mounted: () => setIsMounted(true), slideChanged(s) { setCurrentSlide(s.details().relativeSlide) - } + }, }) // Stop the history navigation gesture on touch devices @@ -69,37 +64,42 @@ const ProductSlider: FC = ({ images }) => { function openGallery(i: number) { console.log('Opening gallery from image') - setSelectedImageIndex(i); + setSelectedImageIndex(i) setIsGalleryOpen(true) } - function closeGallery() { + function closeGallery(idx: number) { console.log('Closing') setIsGalleryOpen(false) + slider.moveToSlideRelative(idx) } return ( <> -
+
)}
- + ) } diff --git a/components/product/ProductView/ProductView.module.css b/components/product/ProductView/ProductView.module.scss similarity index 93% rename from components/product/ProductView/ProductView.module.css rename to components/product/ProductView/ProductView.module.scss index 8ae7426c..048c9a3f 100644 --- a/components/product/ProductView/ProductView.module.css +++ b/components/product/ProductView/ProductView.module.scss @@ -7,14 +7,14 @@ } .productDisplay { - @apply relative flex px-0 pb-0 box-border col-span-1 bg-violet; + @apply relative flex px-0 pb-0 box-border col-span-1; min-height: 600px; @screen md { min-height: 700px; } - @screen lg { + @screen lg {justify-content: space-evenly; margin-right: -2rem; margin-left: -2rem; @apply mx-0 col-span-6; diff --git a/components/product/ProductView/ProductView.tsx b/components/product/ProductView/ProductView.tsx index 064e8350..5604806e 100644 --- a/components/product/ProductView/ProductView.tsx +++ b/components/product/ProductView/ProductView.tsx @@ -1,7 +1,7 @@ import cn from 'classnames' import { NextSeo } from 'next-seo' import React, { FC, useEffect, useState } from 'react' -import s from './ProductView.module.css' +import s from './ProductView.module.scss' import { Swatch, ProductSlider } from '@components/product' import { Button, Container, Text, useUI } from '@components/ui' import type { Product } from '@commerce/types' @@ -9,6 +9,8 @@ import usePrice from '@framework/product/use-price' import { useAddItem } from '@framework/cart' import { getVariant, SelectedOptions } from '../helpers' import WishlistButton from '@components/wishlist/WishlistButton' +import { createMedia } from '@artsy/fresnel' +import { DesktopGallery } from '@components/product/DesktopGallery/DesktopGallery' interface Props { children?: any @@ -22,19 +24,22 @@ const ProductView: FC = ({ product }) => { const { price } = usePrice({ amount: product.price.value, baseAmount: product.price.retailPrice, - currencyCode: product.price.currencyCode! + currencyCode: product.price.currencyCode!, }) const { openSidebar } = useUI() const [loading, setLoading] = useState(false) const [choices, setChoices] = useState({}) - useEffect(() => - product.variants[0].options?.forEach((v) => { - setChoices((choices) => ({ - ...choices, - [v.displayName.toLowerCase()]: v.values[0].label.toLowerCase() - })) - }), []) + useEffect( + () => + product.variants[0].options?.forEach((v) => { + setChoices((choices) => ({ + ...choices, + [v.displayName.toLowerCase()]: v.values[0].label.toLowerCase(), + })) + }), + [] + ) const variant = getVariant(product, choices) @@ -48,8 +53,8 @@ const ProductView: FC = ({ product }) => { variantId: String(selectedVariant.id), pricing: { amount: selectedVariant.price, - currencyCode: product.price.currencyCode ?? 'USD' - } + currencyCode: product.price.currencyCode ?? 'USD', + }, }) openSidebar() setLoading(false) @@ -58,8 +63,17 @@ const ProductView: FC = ({ product }) => { } } + const { MediaContextProvider, Media } = createMedia({ + breakpoints: { + sm: 0, + md: 768, + lg: 1024, + xl: 1192, + }, + }) + return ( - + = ({ product }) => { url: product.images[0]?.url!, width: 800, height: 600, - alt: product.name - } - ] + alt: product.name, + }, + ], }} />
@@ -87,10 +101,16 @@ const ProductView: FC = ({ product }) => { {product.price?.currencyCode}
- -
- -
+ + +
+ +
+
+ + + +
diff --git a/components/ui/Marquee/Marquee.module.css b/components/ui/Marquee/Marquee.module.css deleted file mode 100644 index 1fabc2ca..00000000 --- a/components/ui/Marquee/Marquee.module.css +++ /dev/null @@ -1,22 +0,0 @@ -.root { - @apply w-full relative; - height: 320px; - min-width: 100%; -} - -.container { - @apply flex flex-row items-center; -} - -.container > * { - @apply relative flex-1 px-16 py-4 h-full; - min-height: 320px; -} - -.primary { - @apply bg-white; -} - -.secondary { - @apply bg-black; -} diff --git a/components/ui/Marquee/Marquee.tsx b/components/ui/Marquee/Marquee.tsx deleted file mode 100644 index 163f29a3..00000000 --- a/components/ui/Marquee/Marquee.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import cn from 'classnames' -import s from './Marquee.module.css' -import { FC, ReactNode, Component } from 'react' -import Ticker from 'react-ticker' - -interface Props { - className?: string - children?: ReactNode[] | Component[] | any[] - variant?: 'primary' | 'secondary' -} - -const Marquee: FC = ({ - className = '', - children, - variant = 'primary', -}) => { - const rootClassName = cn( - s.root, - { - [s.primary]: variant === 'primary', - [s.secondary]: variant === 'secondary', - }, - className - ) - - return ( -
- - {() =>
{children}
} -
-
- ) -} - -export default Marquee diff --git a/components/ui/Marquee/index.ts b/components/ui/Marquee/index.ts deleted file mode 100644 index b59b7556..00000000 --- a/components/ui/Marquee/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from './Marquee' diff --git a/components/ui/index.ts b/components/ui/index.ts index f2a29320..26a5ddf0 100644 --- a/components/ui/index.ts +++ b/components/ui/index.ts @@ -3,7 +3,6 @@ export { default as Logo } from './Logo' export { default as Grid } from './Grid' export { default as Button } from './Button' export { default as Sidebar } from './Sidebar' -export { default as Marquee } from './Marquee' export { default as Container } from './Container' export { default as LoadingDots } from './LoadingDots' export { default as Skeleton } from './Skeleton' diff --git a/package.json b/package.json index 25159af8..e7749ab8 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,7 @@ "node": "14.x" }, "dependencies": { + "@artsy/fresnel": "^1.7.0", "@reach/portal": "^0.11.2", "@vercel/fetch": "^6.1.0", "autoprefixer": "^10.2.4", @@ -26,9 +27,7 @@ "bowser": "^2.11.0", "classnames": "^2.2.6", "cookie": "^0.4.1", - "dot-object": "^2.1.4", "email-validator": "^2.0.4", - "immutability-helper": "^3.1.1", "js-cookie": "^2.2.1", "keen-slider": "^5.2.4", "lodash.debounce": "^4.0.8", @@ -44,9 +43,7 @@ "react-dom": "^17.0.1", "react-merge-refs": "^1.1.0", "react-photoswipe-gallery": "^1.3.6", - "react-ticker": "^1.2.2", - "shopify-buy": "^2.11.0", - "swell-js": "^4.0.0-next.0", + "sass": "^1.35.1", "swr": "^0.4.0", "tabbable": "^5.1.5", "tailwindcss": "^2.0.4" diff --git a/pages/index.tsx b/pages/index.tsx index 8f985868..e884ffc5 100644 --- a/pages/index.tsx +++ b/pages/index.tsx @@ -1,19 +1,16 @@ import { Layout } from '@components/common' -import { Grid, Hero, Marquee } from '@components/ui' +import { Grid, Hero } from '@components/ui' import { ProductCard } from '@components/product' -import HomeAllProductsGrid from '@components/common/HomeAllProductsGrid' import type { GetStaticPropsContext, InferGetStaticPropsType } from 'next' import { getConfig } from '@framework/api' import getAllProducts from '@framework/product/get-all-products' -import getSiteInfo from '@framework/common/get-site-info' -import getAllPages from '@framework/common/get-all-pages' export async function getStaticProps({ preview, locale, }: GetStaticPropsContext) { - const config = getConfig({ locale }) + const config = getConfig() const { products } = await getAllProducts({ variables: { first: 12 }, @@ -64,7 +61,6 @@ export default function Home({ Hebrew. It’s now undergone a name change, and will be referred to as ‘Natural’." /> - ) } diff --git a/yarn.lock b/yarn.lock index 44d6865f..2a948641 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9,6 +9,11 @@ dependencies: tslib "~2.0.1" +"@artsy/fresnel@^1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@artsy/fresnel/-/fresnel-1.7.0.tgz#665f803cb9561c7c5d8f4a884803c2813ba9197a" + integrity sha512-TXIFVwMXE8GHe2c6NEJ6FFhB8+6gCIfU6lwd/MeSIwYw7QzpyYrcaOjvLh33ZmuD7HWSnQ0kdK9TErj7l9BrUQ== + "@babel/code-frame@7.12.11": version "7.12.11" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" @@ -423,14 +428,7 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/runtime@7.4.5": - version "7.4.5" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.4.5.tgz#582bb531f5f9dc67d2fcb682979894f75e253f12" - integrity sha512-TuI4qpWZP6lGOGIuGWtp9sPluqYICmbk8T/1vpSysqJxRPkudh/ofFWyqdcMsDf2s7KvDL4/YHgKyvcS3g9CJQ== - dependencies: - regenerator-runtime "^0.13.2" - -"@babel/runtime@^7.0.0", "@babel/runtime@^7.12.13", "@babel/runtime@^7.14.0": +"@babel/runtime@^7.0.0": version "7.14.0" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.0.tgz#46794bc20b612c5f75e62dd071e24dfd95f1cbe6" integrity sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA== @@ -1355,7 +1353,7 @@ any-observable@^0.3.0: resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" integrity sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog== -anymatch@~3.1.1: +anymatch@~3.1.1, anymatch@~3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== @@ -1385,14 +1383,6 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -array-includes-with-glob@^3.0.6: - version "3.1.0" - resolved "https://registry.yarnpkg.com/array-includes-with-glob/-/array-includes-with-glob-3.1.0.tgz#f04e8172f231ab8261e52bfe9756b65c08b87ab9" - integrity sha512-/PZEKASyXWmUTkNhuxnmqybv1CmIdY5rp3axLy3Dv6SYfaBb+EgS7Nl991mquHT1N2u0YAnE3IOafVNRM6Y9dw== - dependencies: - "@babel/runtime" "^7.14.0" - matcher "^4.0.0" - array-union@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" @@ -1935,6 +1925,21 @@ chokidar@3.5.1, chokidar@^3.5.1: optionalDependencies: fsevents "~2.3.1" +"chokidar@>=3.0.0 <4.0.0": + version "3.5.2" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" + integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" @@ -2095,11 +2100,6 @@ commander@^2.13.0, commander@^2.16.0, commander@^2.20.3, commander@^2.8.1: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" - integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== - commander@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" @@ -2416,7 +2416,7 @@ deep-is@~0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= -deepmerge@4.2.2, deepmerge@^4.2.2: +deepmerge@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== @@ -2624,14 +2624,6 @@ dot-case@^3.0.4: no-case "^3.0.4" tslib "^2.0.3" -dot-object@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/dot-object/-/dot-object-2.1.4.tgz#c6c54e9fca510b4d0ea4d65acf33726963843b5f" - integrity sha512-7FXnyyCLFawNYJ+NhkqyP9Wd2yzuo+7n9pGiYpkmXCTYa8Ci2U0eUNDVg5OuO5Pm6aFXI2SWN8/N/w7SJWu1WA== - dependencies: - commander "^4.0.0" - glob "^7.1.5" - dotenv@^8.2.0: version "8.6.0" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b" @@ -2787,11 +2779,6 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - escodegen@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" @@ -3070,7 +3057,7 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@~2.3.1: +fsevents@~2.3.1, fsevents@~2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== @@ -3148,7 +3135,7 @@ glob-parent@^2.0.0: dependencies: is-glob "^2.0.0" -glob-parent@^5.1.0, glob-parent@~5.1.0: +glob-parent@^5.1.0, glob-parent@~5.1.0, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -3160,7 +3147,7 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.5, glob@^7.1.6: +glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.6: version "7.1.7" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== @@ -3453,11 +3440,6 @@ ignore@^5.1.4: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== -immutability-helper@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/immutability-helper/-/immutability-helper-3.1.1.tgz#2b86b2286ed3b1241c9e23b7b21e0444f52f77b7" - integrity sha512-Q0QaXjPjwIju/28TsugCHNEASwoCcJSyJV3uO1sOIQGI0jKgm9f41Lvz0DZj3n46cNCyAZTsEYoY4C2bVRUzyQ== - immutable@~3.7.6: version "3.7.6" resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.7.6.tgz#13b4d3cb12befa15482a26fe1b2ebae640071e4b" @@ -3811,7 +3793,7 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= -isomorphic-fetch@3.0.0, isomorphic-fetch@^3.0.0: +isomorphic-fetch@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz#0267b005049046d2421207215d45d6a262b8b8b4" integrity sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA== @@ -4103,16 +4085,6 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" -lodash.camelcase@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" - integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= - -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= - lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" @@ -4133,11 +4105,6 @@ lodash.isboolean@^3.0.3: resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" integrity sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY= -lodash.isdate@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.isdate/-/lodash.isdate-4.0.1.tgz#35a543673b9d76110de4114b32cc577048a7f366" - integrity sha1-NaVDZzuddhEN5BFLMsxXcEin82Y= - lodash.isinteger@^4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" @@ -4168,11 +4135,6 @@ lodash.random@^3.2.0: resolved "https://registry.yarnpkg.com/lodash.random/-/lodash.random-3.2.0.tgz#96e24e763333199130d2c9e2fd57f91703cc262d" integrity sha1-luJOdjMzGZEw0sni/Vf5FwPMJi0= -lodash.snakecase@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d" - integrity sha1-OdcUo1NXFHg3rv1ktdy7Fr7Nj40= - lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" @@ -4193,11 +4155,6 @@ lodash.topath@^4.5.2: resolved "https://registry.yarnpkg.com/lodash.topath/-/lodash.topath-4.5.2.tgz#3616351f3bba61994a0931989660bd03254fd009" integrity sha1-NhY1Hzu6YZlKCTGYlmC9AyVP0Ak= -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= - lodash@4.17.21, lodash@^4.17.13, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@~4.17.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" @@ -4345,13 +4302,6 @@ map-obj@^4.0.0: resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.2.1.tgz#e4ea399dbc979ae735c83c863dd31bdf364277b7" integrity sha512-+WA2/1sPmDj1dlvvJmB5G6JKfY9dpn7EVBUL06+y6PoljPkh+6V1QihwxNkbcGxCRjt2b0F9K0taiCuo7MbdFQ== -matcher@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/matcher/-/matcher-4.0.0.tgz#a42a05a09aaed92e2d241eb91fddac689461ea51" - integrity sha512-S6x5wmcDmsDRRU/c2dkccDwQPXoFczc5+HpQ2lON8pnvHlnvHAHj5WlLVvw6n6vNyHuVugYrFohYxbS+pvFpKQ== - dependencies: - escape-string-regexp "^4.0.0" - md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -4771,33 +4721,11 @@ object-is@^1.0.1: call-bind "^1.0.2" define-properties "^1.1.3" -object-keys-normalizer@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-keys-normalizer/-/object-keys-normalizer-1.0.1.tgz#db178dbba5e4c7b18b40837c8ef83365ee9348e7" - integrity sha1-2xeNu6Xkx7GLQIN8jvgzZe6TSOc= - dependencies: - lodash.camelcase "^4.3.0" - lodash.snakecase "^4.1.1" - object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object-merge-advanced@12.0.3: - version "12.0.3" - resolved "https://registry.yarnpkg.com/object-merge-advanced/-/object-merge-advanced-12.0.3.tgz#e03c19aa33cf88da6b32187e4907b487668808d9" - integrity sha512-xQIf2Vup1rpKiHr2tQca5jyNYgT4O0kNxOfAp3ZNonm2hS+5yaJgI0Czdk/QMy52bcRwQKX3uc3H8XtAiiYfVA== - dependencies: - "@babel/runtime" "^7.12.13" - array-includes-with-glob "^3.0.6" - lodash.clonedeep "^4.5.0" - lodash.includes "^4.3.0" - lodash.isdate "^4.0.1" - lodash.isplainobject "^4.0.6" - lodash.uniq "^4.5.0" - util-nonempty "^3.0.6" - object.assign@^4.1.0, object.assign@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" @@ -5629,11 +5557,6 @@ purgecss@^3.1.3: postcss "^8.2.1" postcss-selector-parser "^6.0.2" -qs@6.7.0: - version "6.7.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" - integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== - querystring-es3@0.2.1, querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" @@ -5728,11 +5651,6 @@ react-refresh@0.8.3: resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.8.3.tgz#721d4657672d400c5e3c75d063c4a85fb2d5d68f" integrity sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg== -react-ticker@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/react-ticker/-/react-ticker-1.2.2.tgz#12cda5ff8266c6fe90ffcd8c58e12ba1596ddf24" - integrity sha512-PXUujoPJvajxwOfosuuujlrBUrjgGp4FB4haWFOI25ujhMppW4SuLkiOdQ9AylrWN3yTHWdk2kbQWe3n9SjFGA== - react@^17.0.1: version "17.0.2" resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" @@ -5789,6 +5707,13 @@ readdirp@~3.5.0: dependencies: picomatch "^2.2.1" +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + redent@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" @@ -5805,7 +5730,7 @@ reduce-css-calc@^2.1.8: css-unit-converter "^1.1.1" postcss-value-parser "^3.3.0" -regenerator-runtime@^0.13.2, regenerator-runtime@^0.13.4: +regenerator-runtime@^0.13.4: version "0.13.7" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== @@ -6003,6 +5928,13 @@ sass-lookup@^3.0.0: dependencies: commander "^2.16.0" +sass@^1.35.1: + version "1.35.1" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.35.1.tgz#90ecf774dfe68f07b6193077e3b42fb154b9e1cd" + integrity sha512-oCisuQJstxMcacOPmxLNiLlj4cUyN2+8xJnG7VanRoh2GOLr9RqkvI4AxA4a6LHVg/rsu+PmxXeGhrdSF9jCiQ== + dependencies: + chokidar ">=3.0.0 <4.0.0" + scheduler@^0.20.2: version "0.20.2" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" @@ -6092,11 +6024,6 @@ shell-quote@1.7.2: resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== -shopify-buy@^2.11.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/shopify-buy/-/shopify-buy-2.11.0.tgz#0f7cb52741395e4ae778c336f32ddf3fe67c2f35" - integrity sha512-bGjS1b/VCPvCjazSstlKwgLtK1WBotWom06/12loja8yfo/cWkLuJsakBbQe1uEIDiOLhKaR0M0CAXZFheYDug== - signal-exit@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" @@ -6489,19 +6416,6 @@ swap-case@^2.0.2: dependencies: tslib "^2.0.3" -swell-js@^4.0.0-next.0: - version "4.0.0-next.0" - resolved "https://registry.yarnpkg.com/swell-js/-/swell-js-4.0.0-next.0.tgz#870599372e3c9eafefeafc2c63863c4032d8be6b" - integrity sha512-OQ1FLft3ruKpQw5P0TiCzs/X2Ma95+Qz+I2Xzs4KC6v+zVaFVUGNs80dQdtjfInisWoFC7iFZF2AITgellVGAg== - dependencies: - "@babel/runtime" "7.4.5" - deepmerge "4.2.2" - isomorphic-fetch "3.0.0" - lodash "4.17.21" - object-keys-normalizer "1.0.1" - object-merge-advanced "12.0.3" - qs "6.7.0" - swr@^0.4.0: version "0.4.2" resolved "https://registry.yarnpkg.com/swr/-/swr-0.4.2.tgz#4a9ed5e9948088af145c79d716d294cb99712a29" @@ -6840,14 +6754,6 @@ util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= -util-nonempty@^3.0.6: - version "3.1.0" - resolved "https://registry.yarnpkg.com/util-nonempty/-/util-nonempty-3.1.0.tgz#927a9472ead1817afca159b209e5806523b752d3" - integrity sha512-OSZlWoCL74Go83Qw/aeZgSmFZnp9d06bF77b1eAOKipkPWhvxjRYB2nmKiGspoVjkJJEJimzxAgBFUQiUV/oZQ== - dependencies: - "@babel/runtime" "^7.14.0" - lodash.isplainobject "^4.0.6" - util@0.10.3: version "0.10.3" resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"