From 305b7b87db9f338c47fbdd43128466be91cd5633 Mon Sep 17 00:00:00 2001 From: Belen Curcio Date: Wed, 14 Oct 2020 12:27:54 -0300 Subject: [PATCH 1/6] More changes --- .../product/ProductView/ProductView.tsx | 19 ++++++++++++- config.json | 18 ++++++++++++ package.json | 1 + pages/_app.tsx | 26 ++++++++++-------- public/favicon.ico | Bin 0 -> 535 bytes yarn.lock | 5 ++++ 6 files changed, 57 insertions(+), 12 deletions(-) create mode 100644 config.json create mode 100644 public/favicon.ico diff --git a/components/product/ProductView/ProductView.tsx b/components/product/ProductView/ProductView.tsx index 50e1c7e81..30ce05fb2 100644 --- a/components/product/ProductView/ProductView.tsx +++ b/components/product/ProductView/ProductView.tsx @@ -7,7 +7,7 @@ import { Colors } from '@components/ui/types' import type { Product } from '@lib/bigcommerce/api/operations/get-product' import useAddItem from '@lib/bigcommerce/cart/use-add-item' import { useUI } from '@components/ui/context' - +import { NextSeo } from 'next-seo' interface Props { className?: string children?: any @@ -44,6 +44,23 @@ const ProductView: FC = ({ product, className }) => { return ( +

diff --git a/config.json b/config.json new file mode 100644 index 000000000..6c279ee04 --- /dev/null +++ b/config.json @@ -0,0 +1,18 @@ +{ + "seo": { + "title": "ACME Storefront | Powered by Next.js Commerce", + "titleTemplate": "%s - ACME Storefront", + "description": "Next.js Commerce -> https://www.nextjs.org/commerce", + "openGraph": { + "type": "website", + "locale": "en_IE", + "url": "https://nextjs.org/commerce", + "site_name": "Next.js Commerce" + }, + "twitter": { + "handle": "@nextjs", + "site": "@nextjs", + "cardType": "summary_large_image" + } + } +} diff --git a/package.json b/package.json index 1d6a81c37..8cf8449f8 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "js-cookie": "^2.2.1", "lodash.debounce": "^4.0.8", "next": "^9.5.4", + "next-seo": "^4.11.0", "next-themes": "^0.0.4", "postcss-nesting": "^7.0.1", "react": "^16.13.1", diff --git a/pages/_app.tsx b/pages/_app.tsx index 2b362df40..419938c61 100644 --- a/pages/_app.tsx +++ b/pages/_app.tsx @@ -1,25 +1,29 @@ import { FC } from 'react' +import { DefaultSeo } from 'next-seo' import type { AppProps } from 'next/app' -import { SSRProvider, OverlayProvider } from 'react-aria' import { ThemeProvider } from 'next-themes' +import { SSRProvider, OverlayProvider } from 'react-aria' import '@assets/global.css' import '@assets/tailwind.css' import '@assets/utils.css' - +import config from '../config.json' const Noop: FC = ({ children }) => <>{children} export default function MyApp({ Component, pageProps }: AppProps) { const Layout = (Component as any).Layout || Noop return ( - - - - - - - - - + <> + + + + + + + + + + + ) } diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c4826c94780efdd7e92092dc77fd4388fd8cd7f5 GIT binary patch literal 535 zcmV+y0_gpTP)5EicMx~-}zG!tkWD18q& z91g8P9LFIBawD!nqPLNzX@~*cYeVL{xh%`8IA246xMAjtM{H0O z#XaI}uPuMcaNF4!wqQV8vbJooQpy>9U|Y%-+HJ=|!$|LFOZOE>+KwX+=nO3?LP^^V zP44%5iGi*N%eh5S6#Y9mNs=4kX7c|j&=rpEgUi)lCuam%)h zAIShV9!d>19n06sgedYM_@0(1%p7L!Tml6Dp;h<7=sJ7{a+uHanD`9SpXXo1cMyJ_ Z{{e%1|CY$w7P0^U002ovPDHLkV1nrA+7|!- literal 0 HcmV?d00001 diff --git a/yarn.lock b/yarn.lock index c5ed20203..c78227ee0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5676,6 +5676,11 @@ neo-async@^2.6.2: resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== +next-seo@^4.11.0: + version "4.11.0" + resolved "https://registry.yarnpkg.com/next-seo/-/next-seo-4.11.0.tgz#b4f160414b49e6e3dc7791df25e29b50550ebb67" + integrity sha512-JrrGA+wD20ArI5jTqbLE2jipmA5VCCcjBlb1ZI2lKktd7lCXNs/IIvwkNfJPPK0vFp/ewwylA6kO5CyX2fflig== + next-themes@^0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/next-themes/-/next-themes-0.0.4.tgz#fb06a9d03887201dd8fdd75fc1c84f406988f61e" From ced85970f8121805b334021935caa4714230e9b6 Mon Sep 17 00:00:00 2001 From: Belen Curcio Date: Wed, 14 Oct 2020 12:44:03 -0300 Subject: [PATCH 2/6] Gradient Avatar --- components/core/Avatar/Avatar.tsx | 13 +++++++------ package.json | 1 + tailwind.config.js | 1 + yarn.lock | 12 ++++++++++++ 4 files changed, 21 insertions(+), 6 deletions(-) diff --git a/components/core/Avatar/Avatar.tsx b/components/core/Avatar/Avatar.tsx index bb76544e7..1575cd1d8 100644 --- a/components/core/Avatar/Avatar.tsx +++ b/components/core/Avatar/Avatar.tsx @@ -10,12 +10,13 @@ interface Props { const Avatar: FC = ({ className }) => { const rootClassName = cn(s.root, className) return ( -
- +
+ {/* */}
) } diff --git a/package.json b/package.json index 8cf8449f8..40ce71e89 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "next": "^9.5.4", "next-seo": "^4.11.0", "next-themes": "^0.0.4", + "nextjs-progressbar": "^0.0.6", "postcss-nesting": "^7.0.1", "react": "^16.13.1", "react-aria": "^3.0.0", diff --git a/tailwind.config.js b/tailwind.config.js index 4f605d5fa..8cbc245b8 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -17,6 +17,7 @@ module.exports = { 'accent-1': '#FAFAFA', 'accent-2': '#F1F3F5', 'accent-4': '#888', + 'accent-6': '#E5E5E5', 'accent-8': '#111111', violet: '#7928CA', pink: '#FF0080', diff --git a/yarn.lock b/yarn.lock index c78227ee0..d50dd2fa5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5756,6 +5756,13 @@ next@^9.5.4: webpack "4.44.1" webpack-sources "1.4.3" +nextjs-progressbar@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/nextjs-progressbar/-/nextjs-progressbar-0.0.6.tgz#d1841df42f2342807dc6f7ad1034ddb8ec8541d4" + integrity sha512-9sxNpUSHOnmRV8/3yEZ9NV5c/ip2CpQ7jim3EOOZp49qIHrgNxmy/kzoulNjt50AlA7pAu/8rwgC2WpzmSMrdg== + dependencies: + nprogress "^0.2.0" + no-case@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.3.tgz#c21b434c1ffe48b39087e86cfb4d2582e9df18f8" @@ -5843,6 +5850,11 @@ normalize.css@^8.0.1: resolved "https://registry.yarnpkg.com/normalize.css/-/normalize.css-8.0.1.tgz#9b98a208738b9cc2634caacbc42d131c97487bf3" integrity sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg== +nprogress@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1" + integrity sha1-y480xTIT2JVyP8urkH6UIq28r7E= + nullthrows@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1" From 45b191c6bbc7e3d6e4511a3e87ef1e30abf16f65 Mon Sep 17 00:00:00 2001 From: Belen Curcio Date: Wed, 14 Oct 2020 13:13:46 -0300 Subject: [PATCH 3/6] Avatar --- components/core/Avatar/Avatar.module.css | 2 -- components/core/Avatar/Avatar.tsx | 29 +++++++++++++++++++----- 2 files changed, 23 insertions(+), 8 deletions(-) delete mode 100644 components/core/Avatar/Avatar.module.css diff --git a/components/core/Avatar/Avatar.module.css b/components/core/Avatar/Avatar.module.css deleted file mode 100644 index c3a2af639..000000000 --- a/components/core/Avatar/Avatar.module.css +++ /dev/null @@ -1,2 +0,0 @@ -.root { -} diff --git a/components/core/Avatar/Avatar.tsx b/components/core/Avatar/Avatar.tsx index 1575cd1d8..025a92068 100644 --- a/components/core/Avatar/Avatar.tsx +++ b/components/core/Avatar/Avatar.tsx @@ -1,22 +1,39 @@ import cn from 'classnames' import { FC } from 'react' -import s from './Avatar.module.css' - +import { random } from 'lodash' +import { useState } from 'react' interface Props { className?: string children?: any } -const Avatar: FC = ({ className }) => { - const rootClassName = cn(s.root, className) +function getRandomPairOfColors() { + const colors = ['#f33', '#7928ca', '#50e3c2', '#7928ca', '#7928CA'] + const getRandomIdx = () => random(0, colors.length - 1) + let idx = getRandomIdx() + let idx2 = getRandomIdx() + + // Has to be a different color + while (idx2 === idx) { + idx2 = getRandomIdx() + } + + // Returns a pair of colors + return [colors[idx], colors[idx2]] +} + +const Avatar: FC = ({}) => { + const [bg] = useState(getRandomPairOfColors) + return (
- {/* */} + {/* Add an image - We're generating a gradient as placeholder + */}
) } From 745adb1b0250ba1acd4bf39607054380073b22a6 Mon Sep 17 00:00:00 2001 From: Belen Curcio Date: Wed, 14 Oct 2020 14:38:21 -0300 Subject: [PATCH 4/6] Adding a clear manifest --- components/core/Avatar/Avatar.tsx | 2 +- pages/_app.tsx | 10 ++++++++++ public/icon-144x144.png | Bin 0 -> 4150 bytes public/icon-192x192.png | Bin 0 -> 6030 bytes public/icon-512x512.png | Bin 0 -> 10832 bytes public/icon.png | Bin 0 -> 1058 bytes public/site.webmanifest | 22 ++++++++++++++++++++++ 7 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 public/icon-144x144.png create mode 100644 public/icon-192x192.png create mode 100644 public/icon-512x512.png create mode 100644 public/icon.png create mode 100644 public/site.webmanifest diff --git a/components/core/Avatar/Avatar.tsx b/components/core/Avatar/Avatar.tsx index 025a92068..20ec7454c 100644 --- a/components/core/Avatar/Avatar.tsx +++ b/components/core/Avatar/Avatar.tsx @@ -27,7 +27,7 @@ const Avatar: FC = ({}) => { return (
<>{children} export default function MyApp({ Component, pageProps }: AppProps) { @@ -14,6 +16,14 @@ export default function MyApp({ Component, pageProps }: AppProps) { return ( <> + + + diff --git a/public/icon-144x144.png b/public/icon-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..aeeaabd3fd8feda5ed7235cbb2af2d4236d921c0 GIT binary patch literal 4150 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 IM6N<$f_ogddjJ3c literal 0 HcmV?d00001 diff --git a/public/icon-512x512.png b/public/icon-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..754628cb727cddf70313ca21335dfa1fa5a79f14 GIT binary patch literal 10832 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 BhExCm literal 0 HcmV?d00001 diff --git a/public/icon.png b/public/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..c4df8c7d16cc6e36a20c5f16a8c19075070f21e0 GIT binary patch literal 1058 zcmV+-1l{|IP)UyPQlH9LMtkC=`3f}zQNQdX!{18C$M>gaWyW4*3~SX0T&~P zMnx1|wElp_zs&cAwj?nzH%>ip(dORV?>oOaCnO{#kw_@*?d@wXFE8;>C=|mZ6-%ja zSFv=%Fn&iOk@CaC!)Cc$uFBjS@;i`BCe_Es$ISEdbL#f?R=K>q6qQOv)M_>H^z>w& zX=`f}U0q$Gv$Iq5^z?}S{(b>6MG($!ZEflAB0!CCaTXw%lamv{)d2L9j*bp7G&Cdz z2M0wo8ZB&ZZ?6X;K&_#1>G=3qJv=;=26iJdK0Ypnhlh2zX35PO5$A)|)zuix_j7-L z-vo!x#e0Rsudc2HT&VQ+_O4A#Ozhy!3r_;noZx$Vd+OQQnP`>V+}w!!`+Ehkk(`>E z+B`TosJh z1>=fXwhfwoVPU~Q&=~kBwE%1!9UU2^Qc3z9E`S@bwn5CM1z?)o`T4n-+p>~MrA+N{ znYmXj+=svIMf(Y!jS7PED=*%<~`wd|e=ucGTQTFo+9w z84zzBE*6Wvmpe&jGMP8;WZ)BKAxc(>n#kJnx;Gn=_V|ms4gbW?6KL1DUk*6SuTPn`Q=}+4iw} z1rrV5=x^+RoRZJy&A+gO&BV@qFQE&a@3B_|w_>w%1{0O3BU_OEXHomb#YJkb+E~E~ z1++^aPGDwchQ2Q}aGMsH7PxI@(pfHiV-Z;v9Yn8fq{V}4l38z*P<0d&8MfQ3H}A(f3172g9!r!gG32!n#$-$OD*0b z9N9RS(6x2Vb?2Fg+lzHeXx-i2QS|bkd69J%lmTXioSmIzHT(|nuK>SrJL@}~)~%7l z%#dR1#_kD2s=2JgDbmXvO#Ax!IH*?fjt1a@o7RB{ScoX$aCi+w5?G&v$9Rr2JLq_S c$d2d#0GmL(q2Sp)bN~PV07*qoM6N<$g4{9hg8%>k literal 0 HcmV?d00001 diff --git a/public/site.webmanifest b/public/site.webmanifest new file mode 100644 index 000000000..bb792da42 --- /dev/null +++ b/public/site.webmanifest @@ -0,0 +1,22 @@ +{ + "name": "Next.js Commerce", + "short_name": "Next.js Commerce", + "description": "Next.js Commerce -> https://www.nextjs.org/commerce", + "display": "standalone", + "start_url": "/", + "theme_color": "#fff", + "background_color": "#000000", + "orientation": "portrait", + "icons": [ + { + "src": "/icon-192x192.png", + "type": "image/png", + "sizes": "192x192" + }, + { + "src": "/icon-512x512.png", + "type": "image/png", + "sizes": "512x512" + } + ] +} \ No newline at end of file From cec45b3ab83771757a925c4b5c9e08039b86e318 Mon Sep 17 00:00:00 2001 From: Belen Curcio Date: Wed, 14 Oct 2020 15:17:39 -0300 Subject: [PATCH 5/6] Image Slider --- .../product/ProductSlider/ProductSlider.tsx | 34 +++++++ components/product/ProductSlider/index.ts | 1 + .../product/ProductView/ProductView.tsx | 27 ++--- components/product/index.ts | 1 + package.json | 2 + pages/_app.tsx | 8 +- public/slider-arrows.png | Bin 0 -> 1739 bytes yarn.lock | 93 +++++++++++++++++- 8 files changed, 147 insertions(+), 19 deletions(-) create mode 100644 components/product/ProductSlider/ProductSlider.tsx create mode 100644 components/product/ProductSlider/index.ts create mode 100644 public/slider-arrows.png diff --git a/components/product/ProductSlider/ProductSlider.tsx b/components/product/ProductSlider/ProductSlider.tsx new file mode 100644 index 000000000..c255b5038 --- /dev/null +++ b/components/product/ProductSlider/ProductSlider.tsx @@ -0,0 +1,34 @@ +import { FC, useState } from 'react' +import React from 'react' +import SwipeableViews from 'react-swipeable-views' + +interface Props { + children?: any +} + +const ProductSlider: FC = ({ children }) => { + const [idx, setIdx] = useState(0) + const count = React.Children.count(children) + + const goBack = () => { + idx !== 0 ? setIdx(idx - 1) : setIdx(count - 1) + } + + const goNext = () => { + idx + 1 === count ? setIdx(0) : setIdx(idx + 1) + } + + return ( +
+
+
+
+
+ + {children} + +
+ ) +} + +export default ProductSlider diff --git a/components/product/ProductSlider/index.ts b/components/product/ProductSlider/index.ts new file mode 100644 index 000000000..504440410 --- /dev/null +++ b/components/product/ProductSlider/index.ts @@ -0,0 +1 @@ +export { default } from './ProductSlider' diff --git a/components/product/ProductView/ProductView.tsx b/components/product/ProductView/ProductView.tsx index 30ce05fb2..2eb132355 100644 --- a/components/product/ProductView/ProductView.tsx +++ b/components/product/ProductView/ProductView.tsx @@ -1,13 +1,13 @@ import cn from 'classnames' +import { NextSeo } from 'next-seo' import { FC, useState } from 'react' import s from './ProductView.module.css' -import { Button, Container } from '@components/ui' -import { Swatch } from '@components/product' import { Colors } from '@components/ui/types' -import type { Product } from '@lib/bigcommerce/api/operations/get-product' -import useAddItem from '@lib/bigcommerce/cart/use-add-item' import { useUI } from '@components/ui/context' -import { NextSeo } from 'next-seo' +import { Button, Container } from '@components/ui' +import { Swatch, ProductSlider } from '@components/product' +import useAddItem from '@lib/bigcommerce/cart/use-add-item' +import type { Product } from '@lib/bigcommerce/api/operations/get-product' interface Props { className?: string children?: any @@ -61,7 +61,7 @@ const ProductView: FC = ({ product, className }) => { ], }} /> -
+

{product.name} @@ -72,13 +72,18 @@ const ProductView: FC = ({ product, className }) => { {product.prices?.price.currencyCode}

-
+
- + + {product.images.edges?.map((image) => ( + + ))} +
+
+ +
+
diff --git a/components/product/index.ts b/components/product/index.ts index c9459e858..82ac6c548 100644 --- a/components/product/index.ts +++ b/components/product/index.ts @@ -1,3 +1,4 @@ export { default as Swatch } from './Swatch' export { default as ProductView } from './ProductView' export { default as ProductCard } from './ProductCard' +export { default as ProductSlider } from './ProductSlider' diff --git a/package.json b/package.json index 40ce71e89..b36149081 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,8 @@ "react-dom": "^16.13.1", "react-icons": "^3.11.0", "react-merge-refs": "^1.1.0", + "react-swipeable-views": "^0.13.9", + "react-swipeable-views-utils": "^0.14.0-alpha.0", "react-ticker": "^1.2.2", "swr": "^0.3.3" }, diff --git a/pages/_app.tsx b/pages/_app.tsx index 1de2656de..51f376b77 100644 --- a/pages/_app.tsx +++ b/pages/_app.tsx @@ -17,12 +17,8 @@ export default function MyApp({ Component, pageProps }: AppProps) { return ( <> - + + diff --git a/public/slider-arrows.png b/public/slider-arrows.png new file mode 100644 index 0000000000000000000000000000000000000000..0740919c974cb8e6c1f9cd87f29a9e4995d6c9a1 GIT binary patch literal 1739 zcmV;+1~mDJP)91?`spsdh>C8sq^mx&va+(XvT|Y=mzS62xw*OO>+5SJm&<)XDdWe>DCLo= zXDF>+ugB{*lqUYBxxT)BCK-nB{N%&{Zf|d^-EQ~qd_MmXAD7YT20GTj{Ub^fziW+l zj6~s5#@~>f3a)=D()jBJt_Q2Ds}0Ej(!@_<0&;qKx?C(4cW}Fl&Nfkw(dffcsnnDy zaC380!DSQQw@WfWOs(B+AE!;Tq?Mnk1w?lo4cx}Z2BiN0jcbSjkPH%`M&5p>)7kS~ zP#p482R{c+`MJNp-+{V(xVpNklL)Z{s@v=9>wOS%dUtpCNjyas_?bw9D8uRt?=d3& zaV4cg?I@!iTfS(Mp!wmbpk!iH?20E~TQFk0Xj9PqKwbXN2Puo%D=4*kiZ=cyju13I z7!_Yoj%?1Qaq;l*u*^2HtzsEL^Mfxuq0u8Lfiloe#1c}<&ygenN?V#buc1gVu1SLC zhx1iplI8$xJM987grNDMHBO_(=Q(v8IOm$O-h<|c7B81-K3d~(p{@5M`w~1qzOCb@ z1^bfZR1h>jsJNZxdG$T8Pf7e!gXSkos&f>oZx7Sh3?cH9AO27%6!<#2k;Nb#)u)5S z#l?xWNYMOf3CiN=(9l-%kd;yBzS%}x2ou*OamIA zN=+a!5i~#iAytb60_8!hMy($*Km92tpU-didc8df1dIn|&~ViHA@kE0kX$ae2@)C- z2-@xTp^Dp#grND+u2yjXNGgMQop>apu1GxK$4LN`<_Ch3XC(ADu?*Gmy1Z=?vJUP= zQ7e<*!WBOXj2W)E5E9K#0r%W|Gu7UVxKJIgp?t=(YvKT$XSwkxLRIVhXyCbZw37pf zLc-6V#S%0>1@6$ogZIS}d=L%=uKCO3D%s{|6y%7)A@+r&&rco?Eu%b&1$ZPJ^78W1 z#6SPTxOz7Ec@K&!3Wl}mM)SidX1UYpoQYxhBpd|hSB{V<_Ky{Q#=*8G8Sn#ZwI_x_ z;pn}gCLSS5-)-;{2joz3X}RBxVwCUMjJ$uux^ZLySKOmY=?WK#d+UtWLtg4inEttvusL-a^dcM0%$c zaiC#Ec(F zE*p<8&a2+&%=i&|DXo)+trXcae%`+9C`}~jlNZDin9M(`{6yOJP%4$S;6Tawe%ytc zQ;*nIwplCz&-!b|kMz}P&DT7kItrWT!-*rz_z}O3|I+a37_hAIGx4E@@Y^3T;@gu$ z`HE%a}YkqM1m{xugJDOdovnoUNc|riXQNgO@S7zM^+ z;3M;e?L9v~*EcpcqU?(E25IFdF##C{6VEcYC~h}N2G6R;Jwxc3wWh^{ETi+GB9KeO z3a)>k4!?thwlEqPG<<04NORjr6F)`-WEjd|qgt(SGY(Ta$y?fj@<`P)l$J8=&QZ6? hJt Date: Wed, 14 Oct 2020 15:21:47 -0300 Subject: [PATCH 6/6] Adding Types --- package.json | 1 + yarn.lock | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/package.json b/package.json index b36149081..c452c1dd6 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "@headlessui/react": "^0.2.0", "@tailwindcss/ui": "^0.6.2", "@types/classnames": "^2.2.10", + "@types/react-swipeable-views": "^0.13.0", "classnames": "^2.2.6", "cookie": "^0.4.1", "js-cookie": "^2.2.1", diff --git a/yarn.lock b/yarn.lock index 7a0f870e3..592959eb7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2182,6 +2182,21 @@ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== +"@types/react-swipeable-views@^0.13.0": + version "0.13.0" + resolved "https://registry.yarnpkg.com/@types/react-swipeable-views/-/react-swipeable-views-0.13.0.tgz#9e5f2efa51380886f3f73014ac8b15546d337210" + integrity sha512-orrreCcXev6IUXDuHf07RDDCAoIZRMSr95eyWmYNRfjic7w/O+68iPu0NCysVls+UygRNvoqZMuXI72N/58E1w== + dependencies: + "@types/react" "*" + +"@types/react@*": + version "16.9.52" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.52.tgz#c46c72d1a1d8d9d666f4dd2066c0e22600ccfde1" + integrity sha512-EHRjmnxiNivwhGdMh9sz1Yw9AUxTSZFxKqdBWAAzyZx3sufWwx6ogqHYh/WB1m/I4ZpjkoZLExF5QTy2ekVi/Q== + dependencies: + "@types/prop-types" "*" + csstype "^3.0.2" + "@types/react@^16.9.49": version "16.9.50" resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.50.tgz#cb5f2c22d42de33ca1f5efc6a0959feb784a3a2d"