diff --git a/next.config.js b/next.config.js index 27bddfae6..3a0fee27b 100644 --- a/next.config.js +++ b/next.config.js @@ -26,6 +26,7 @@ module.exports = withCommerceConfig({ images: { // todo: replace domains for images domains: ['user-images.githubusercontent.com'], + minimumCacheTTL: 60, }, i18n: { locales: ['en-US', 'es'], @@ -46,10 +47,10 @@ module.exports = withCommerceConfig({ // For Vendure, rewrite the local api url to the remote (external) api url. This is required // to make the session cookies work. isVendure && - process.env.NEXT_PUBLIC_VENDURE_LOCAL_URL && { - source: `${process.env.NEXT_PUBLIC_VENDURE_LOCAL_URL}/:path*`, - destination: `${process.env.NEXT_PUBLIC_VENDURE_SHOP_API_URL}/:path*`, - }, + process.env.NEXT_PUBLIC_VENDURE_LOCAL_URL && { + source: `${process.env.NEXT_PUBLIC_VENDURE_LOCAL_URL}/:path*`, + destination: `${process.env.NEXT_PUBLIC_VENDURE_SHOP_API_URL}/:path*`, + }, ].filter(Boolean) }, }) diff --git a/pages/_app.tsx b/pages/_app.tsx index bd7f0f066..ff8845072 100644 --- a/pages/_app.tsx +++ b/pages/_app.tsx @@ -1,8 +1,8 @@ import { ThemeProvider } from 'next-themes'; import type { AppProps } from 'next/app'; import React, { FC, useEffect } from 'react'; -import { Head } from 'src/components/common'; -import 'keen-slider/keen-slider.min.css'; +import { CustomShapeSvg, Head } from 'src/components/common'; +import 'keen-slider/keen-slider.min.css'; import '../src/styles/main.scss'; @@ -19,6 +19,7 @@ export default function MyApp({ Component, pageProps }: AppProps) { <> + diff --git a/pages/_error.tsx b/pages/_error.tsx new file mode 100644 index 000000000..545d7e7ed --- /dev/null +++ b/pages/_error.tsx @@ -0,0 +1,9 @@ +import { Layout } from 'src/components/common' +import { ErrorContent } from 'src/components/modules/error-page' + +export default function NotFound() { + return ( + + ) +} +NotFound.Layout = Layout diff --git a/pages/account-not-login.tsx b/pages/account-not-login.tsx new file mode 100644 index 000000000..cbda16486 --- /dev/null +++ b/pages/account-not-login.tsx @@ -0,0 +1,15 @@ +import React from 'react'; +import { Layout } from 'src/components/common'; +import { AccountSignIn } from 'src/components/modules/account'; + +const AccountNotLogin = () => { + return ( + <> + + + ); +}; + +AccountNotLogin.Layout = Layout + +export default AccountNotLogin; \ No newline at end of file diff --git a/pages/demo.tsx b/pages/demo.tsx index 38f91037c..47fb1eea1 100644 --- a/pages/demo.tsx +++ b/pages/demo.tsx @@ -1,13 +1,13 @@ import { Layout } from 'src/components/common'; - - - +import { NotificationEmptyPage, NotificationHeading, NotificationBreadcrumb } from 'src/components/modules/Notification'; export default function Demo() { - return <> - Lorem ipsum dolor sit amet consectetur adipisicing elit. Molestias possimus tempore, nulla voluptate sed iste unde qui. Natus, amet minus, fugiat unde optio iste perferendis ea quae iusto asperiores voluptates enim sunt ducimus? Perferendis velit maxime sint pariatur beatae, veniam nulla sed, impedit, consectetur minus est libero enim? Quia reiciendis dolor, porro nisi harum fuga ullam pariatur facilis quas, praesentium quae, eveniet officiis officia animi aspernatur ut sunt commodi vero totam! Rerum, placeat perferendis laborum itaque blanditiis natus aperiam, eum delectus enim architecto eos, et voluptates! Illo at sed, pariatur ullam suscipit rerum recusandae doloremque natus nihil. Et temporibus quae necessitatibus quam alias, repellat laudantium a perspiciatis dolorum accusamus officiis pariatur ipsum facilis, nobis magni molestiae accusantium assumenda tempora consequuntur natus nostrum? Id, mollitia alias quidem hic aperiam error, blanditiis vero distinctio sit neque assumenda odio praesentium, perspiciatis aspernatur exercitationem. Eveniet nostrum tempore saepe cupiditate totam fuga doloremque placeat natus beatae quibusdam labore tempora delectus alias architecto vel, recusandae facilis nam rerum dolores magni? Eaque fugiat ut dicta. Aperiam, excepturi ad molestias non corrupti, officia dolore sequi, provident laborum officiis praesentium beatae quos? Totam et consequatur atque fugit voluptate. Aliquam neque, ab hic suscipit obcaecati ut aut quos. Expedita, ipsam. - Lorem ipsum dolor sit amet consectetur adipisicing elit. Molestias possimus tempore, nulla voluptate sed iste unde qui. Natus, amet minus, fugiat unde optio iste perferendis ea quae iusto asperiores voluptates enim sunt ducimus? Perferendis velit maxime sint pariatur beatae, veniam nulla sed, impedit, consectetur minus est libero enim? Quia reiciendis dolor, porro nisi harum fuga ullam pariatur facilis quas, praesentium quae, eveniet officiis officia animi aspernatur ut sunt commodi vero totam! Rerum, placeat perferendis laborum itaque blanditiis natus aperiam, eum delectus enim architecto eos, et voluptates! Illo at sed, pariatur ullam suscipit rerum recusandae doloremque natus nihil. Et temporibus quae necessitatibus quam alias, repellat laudantium a perspiciatis dolorum accusamus officiis pariatur ipsum facilis, nobis magni molestiae accusantium assumenda tempora consequuntur natus nostrum? Id, mollitia alias quidem hic aperiam error, blanditiis vero distinctio sit neque assumenda odio praesentium, perspiciatis aspernatur exercitationem. Eveniet nostrum tempore saepe cupiditate totam fuga doloremque placeat natus beatae quibusdam labore tempora delectus alias architecto vel, recusandae facilis nam rerum dolores magni? Eaque fugiat ut dicta. Aperiam, excepturi ad molestias non corrupti, officia dolore sequi, provident laborum officiis praesentium beatae quos? Totam et consequatur atque fugit voluptate. Aliquam neque, ab hic suscipit obcaecati ut aut quos. Expedita, ipsam. - Lorem ipsum dolor sit amet consectetur adipisicing elit. Molestias possimus tempore, nulla voluptate sed iste unde qui. Natus, amet minus, fugiat unde optio iste perferendis ea quae iusto asperiores voluptates enim sunt ducimus? Perferendis velit maxime sint pariatur beatae, veniam nulla sed, impedit, consectetur minus est libero enim? Quia reiciendis dolor, porro nisi harum fuga ullam pariatur facilis quas, praesentium quae, eveniet officiis officia animi aspernatur ut sunt commodi vero totam! Rerum, placeat perferendis laborum itaque blanditiis natus aperiam, eum delectus enim architecto eos, et voluptates! Illo at sed, pariatur ullam suscipit rerum recusandae doloremque natus nihil. Et temporibus quae necessitatibus quam alias, repellat laudantium a perspiciatis dolorum accusamus officiis pariatur ipsum facilis, nobis magni molestiae accusantium assumenda tempora consequuntur natus nostrum? Id, mollitia alias quidem hic aperiam error, blanditiis vero distinctio sit neque assumenda odio praesentium, perspiciatis aspernatur exercitationem. Eveniet nostrum tempore saepe cupiditate totam fuga doloremque placeat natus beatae quibusdam labore tempora delectus alias architecto vel, recusandae facilis nam rerum dolores magni? Eaque fugiat ut dicta. Aperiam, excepturi ad molestias non corrupti, officia dolore sequi, provident laborum officiis praesentium beatae quos? Totam et consequatur atque fugit voluptate. Aliquam neque, ab hic suscipit obcaecati ut aut quos. Expedita, ipsam. + return ( + <> + + + + ) } Demo.Layout = Layout diff --git a/pages/index.tsx b/pages/index.tsx index c30e24488..90b759ea3 100644 --- a/pages/index.tsx +++ b/pages/index.tsx @@ -1,5 +1,6 @@ import { Layout } from 'src/components/common'; import { FeaturedProductsCarousel, HomeBanner, HomeCategories, HomeCollection, HomeCTA, HomeFeature, HomeRecipe, HomeSubscribe, HomeVideo } from 'src/components/modules/home'; +import HomeSpice from 'src/components/modules/home/HomeSpice/HomeSpice'; export default function Home() { return ( @@ -10,8 +11,9 @@ export default function Home() { + - + {/* // todo: uncomment diff --git a/pages/notifications.tsx b/pages/notifications.tsx new file mode 100644 index 000000000..f124519f9 --- /dev/null +++ b/pages/notifications.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import { Layout } from 'src/components/common'; +import { NotificationBreadcrumb, NotificationHeading, NotificationPage } from 'src/components/modules/Notification'; + +const Notification = () => { + return ( + <> + + + + + ) +} + +Notification.Layout = Layout + +export default Notification; \ No newline at end of file diff --git a/pages/product/[slug].tsx b/pages/product/[slug].tsx index c34394af5..ab9a1c17c 100644 --- a/pages/product/[slug].tsx +++ b/pages/product/[slug].tsx @@ -1,7 +1,7 @@ -import { Layout, RecipeDetail } from 'src/components/common' -import { ProductInfoDetail, RecommendedRecipes, ReleventProducts, ViewedProducts } from 'src/components/modules/product-detail' -import { INGREDIENT_DATA_TEST, RECIPE_DATA_TEST } from 'src/utils/demo-data' +import { Layout, RecipeDetail, RecommendedRecipes, RelevantBlogPosts } from 'src/components/common' +import { ProductInfoDetail, ReleventProducts, ViewedProducts } from 'src/components/modules/product-detail' +import { BLOGS_DATA_TEST, INGREDIENT_DATA_TEST, RECIPE_DATA_TEST } from 'src/utils/demo-data' export default function Slug() { return <> @@ -10,6 +10,7 @@ export default function Slug() { + } diff --git a/pages/products.tsx b/pages/products.tsx index ebc42d063..4f9c4eb66 100644 --- a/pages/products.tsx +++ b/pages/products.tsx @@ -1,4 +1,5 @@ import { Layout } from 'src/components/common'; +import { ViewedProducts } from 'src/components/modules/product-detail'; import ProductListFilter from 'src/components/modules/product-list/ProductListFilter/ProductListFilter'; import RecipeListBanner from 'src/components/modules/recipes-list/RecipeListBanner/RecipeListBanner'; import RecipesList from 'src/components/modules/recipes-list/RecipesList/RecipesList'; @@ -10,6 +11,7 @@ export default function Products() { <> + ) } diff --git a/pages/recipe/[slug].tsx b/pages/recipe/[slug].tsx new file mode 100644 index 000000000..1f71ba5be --- /dev/null +++ b/pages/recipe/[slug].tsx @@ -0,0 +1,12 @@ + +import { Layout, RecipeDetail, RecommendedRecipes } from 'src/components/common' +import { INGREDIENT_DATA_TEST, RECIPE_DATA_TEST } from 'src/utils/demo-data' + +export default function Slug() { + return
+ + +
+} + +Slug.Layout = Layout diff --git a/public/assets/images/accountsignin.png b/public/assets/images/accountsignin.png new file mode 100644 index 000000000..89fcdd851 Binary files /dev/null and b/public/assets/images/accountsignin.png differ diff --git a/public/fonts/Norquay-bold.otf b/public/fonts/Norquay-bold.otf new file mode 100644 index 000000000..37212fd9f Binary files /dev/null and b/public/fonts/Norquay-bold.otf differ diff --git a/public/fonts/Norquay-bold.woff b/public/fonts/Norquay-bold.woff new file mode 100644 index 000000000..28564d5d4 Binary files /dev/null and b/public/fonts/Norquay-bold.woff differ diff --git a/public/fonts/style.css b/public/fonts/style.css new file mode 100644 index 000000000..53f6af31e --- /dev/null +++ b/public/fonts/style.css @@ -0,0 +1,4 @@ +@font-face { + font-family: "Norquay-bold"; + src: url("./Norquay-bold.otf") format("opentype"), url("./Norquay-bold.woff") format("woff"); +} diff --git a/report.20210914.152506.13752.0.001.json b/report.20210914.152506.13752.0.001.json new file mode 100644 index 000000000..33f018f17 --- /dev/null +++ b/report.20210914.152506.13752.0.001.json @@ -0,0 +1,634 @@ + +{ + "header": { + "reportVersion": 1, + "event": "Allocation failed - JavaScript heap out of memory", + "trigger": "FatalError", + "filename": "report.20210914.152506.13752.0.001.json", + "dumpEventTime": "2021-09-14T15:25:06Z", + "dumpEventTimeStamp": "1631607906529", + "processId": 13752, + "cwd": "G:\\hoc-fpt-2\\làm việc\\kie\\work\\grocery-vercel-commerce", + "commandLine": [ + "node", + "G:\\hoc-fpt-2\\làm việc\\kie\\work\\grocery-vercel-commerce\\node_modules\\.bin\\\\..\\next\\dist\\bin\\next", + "dev" + ], + "nodejsVersion": "v12.15.0", + "wordSize": 64, + "arch": "x64", + "platform": "win32", + "componentVersions": { + "node": "12.15.0", + "v8": "7.7.299.13-node.16", + "uv": "1.33.1", + "zlib": "1.2.11", + "brotli": "1.0.7", + "ares": "1.15.0", + "modules": "72", + "nghttp2": "1.40.0", + "napi": "5", + "llhttp": "2.0.4", + "http_parser": "2.9.3", + "openssl": "1.1.1d", + "cldr": "35.1", + "icu": "64.2", + "tz": "2019c", + "unicode": "12.1" + }, + "release": { + "name": "node", + "lts": "Erbium", + "headersUrl": "https://nodejs.org/download/release/v12.15.0/node-v12.15.0-headers.tar.gz", + "sourceUrl": "https://nodejs.org/download/release/v12.15.0/node-v12.15.0.tar.gz", + "libUrl": "https://nodejs.org/download/release/v12.15.0/win-x64/node.lib" + }, + "osName": "Windows_NT", + "osRelease": "10.0.19043", + "osVersion": "Windows 10 Pro", + "osMachine": "x86_64", + "cpus": [ + { + "model": "Intel(R) Core(TM) i3-3110M CPU @ 2.40GHz", + "speed": 2395, + "user": 121689328, + "nice": 0, + "sys": 59562031, + "idle": 448265421, + "irq": 6192437 + }, + { + "model": "Intel(R) Core(TM) i3-3110M CPU @ 2.40GHz", + "speed": 2395, + "user": 124353031, + "nice": 0, + "sys": 45453531, + "idle": 459710031, + "irq": 1005640 + }, + { + "model": "Intel(R) Core(TM) i3-3110M CPU @ 2.40GHz", + "speed": 2395, + "user": 137889625, + "nice": 0, + "sys": 46363593, + "idle": 445263359, + "irq": 561437 + }, + { + "model": "Intel(R) Core(TM) i3-3110M CPU @ 2.40GHz", + "speed": 2395, + "user": 139168734, + "nice": 0, + "sys": 43450859, + "idle": 446897000, + "irq": 467531 + } + ], + "networkInterfaces": [ + { + "name": "Wi-Fi", + "internal": false, + "mac": "a4:17:31:1d:cc:e5", + "address": "2402:800:6318:9d24:f937:34a5:8214:a074", + "netmask": "ffff:ffff:ffff:ffff::", + "family": "IPv6", + "scopeid": 0 + }, + { + "name": "Wi-Fi", + "internal": false, + "mac": "a4:17:31:1d:cc:e5", + "address": "2402:800:6318:9d24:d442:f151:35d4:8126", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", + "family": "IPv6", + "scopeid": 0 + }, + { + "name": "Wi-Fi", + "internal": false, + "mac": "a4:17:31:1d:cc:e5", + "address": "fe80::f937:34a5:8214:a074", + "netmask": "ffff:ffff:ffff:ffff::", + "family": "IPv6", + "scopeid": 21 + }, + { + "name": "Wi-Fi", + "internal": false, + "mac": "a4:17:31:1d:cc:e5", + "address": "192.168.1.13", + "netmask": "255.255.255.0", + "family": "IPv4" + }, + { + "name": "Loopback Pseudo-Interface 1", + "internal": true, + "mac": "00:00:00:00:00:00", + "address": "::1", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", + "family": "IPv6", + "scopeid": 0 + }, + { + "name": "Loopback Pseudo-Interface 1", + "internal": true, + "mac": "00:00:00:00:00:00", + "address": "127.0.0.1", + "netmask": "255.0.0.0", + "family": "IPv4" + } + ], + "host": "DESKTOP-TILU55O" + }, + "javascriptStack": { + "message": "No stack.", + "stack": [ + "Unavailable." + ] + }, + "nativeStack": [ + { + "pc": "0x00007ff794f61759", + "symbol": "std::basic_ostream >::operator<<+10873" + }, + { + "pc": "0x00007ff794f65b7c", + "symbol": "std::basic_ostream >::operator<<+28316" + }, + { + "pc": "0x00007ff794f64b38", + "symbol": "std::basic_ostream >::operator<<+24152" + }, + { + "pc": "0x00007ff79505446b", + "symbol": "v8::base::CPU::has_sse+37723" + }, + { + "pc": "0x00007ff795858d9e", + "symbol": "v8::Isolate::ReportExternalAllocationLimitReached+94" + }, + { + "pc": "0x00007ff795840de1", + "symbol": "v8::SharedArrayBuffer::Externalize+833" + }, + { + "pc": "0x00007ff79570e6ac", + "symbol": "v8::internal::Heap::EphemeronKeyWriteBarrierFromCode+1436" + }, + { + "pc": "0x00007ff795719a50", + "symbol": "v8::internal::Heap::ProtectUnprotectedMemoryChunks+1312" + }, + { + "pc": "0x00007ff795716584", + "symbol": "v8::internal::Heap::PageFlagsAreConsistent+3204" + }, + { + "pc": "0x00007ff79570be13", + "symbol": "v8::internal::Heap::CollectGarbage+1283" + }, + { + "pc": "0x00007ff79570a5e4", + "symbol": "v8::internal::Heap::AddRetainedMap+2356" + }, + { + "pc": "0x00007ff79572b8b5", + "symbol": "v8::internal::Factory::NewFillerObject+53" + }, + { + "pc": "0x00007ff795497a17", + "symbol": "v8::internal::interpreter::JumpTableTargetOffsets::iterator::operator=+3687" + }, + { + "pc": "0x00007ff795c84d3d", + "symbol": "v8::internal::SetupIsolateDelegate::SetupHeap+567949" + }, + { + "pc": "0x000003ffcfc4917f", + "symbol": "" + } + ], + "javascriptHeap": { + "totalMemory": 2191572992, + "totalCommittedMemory": 2191572992, + "usedMemory": 2084024144, + "availableMemory": 44664008, + "memoryLimit": 2197815296, + "heapSpaces": { + "read_only_space": { + "memorySize": 262144, + "committedMemory": 262144, + "capacity": 261872, + "used": 32296, + "available": 229576 + }, + "new_space": { + "memorySize": 33554432, + "committedMemory": 33554432, + "capacity": 16759808, + "used": 5279488, + "available": 11480320 + }, + "old_space": { + "memorySize": 1724231680, + "committedMemory": 1724231680, + "capacity": 1661472712, + "used": 1651520712, + "available": 9952000 + }, + "code_space": { + "memorySize": 4620288, + "committedMemory": 4620288, + "capacity": 3800032, + "used": 3800032, + "available": 0 + }, + "map_space": { + "memorySize": 9179136, + "committedMemory": 9179136, + "capacity": 4157280, + "used": 4157280, + "available": 0 + }, + "large_object_space": { + "memorySize": 418529280, + "committedMemory": 418529280, + "capacity": 418137088, + "used": 418137088, + "available": 0 + }, + "code_large_object_space": { + "memorySize": 1196032, + "committedMemory": 1196032, + "capacity": 1097248, + "used": 1097248, + "available": 0 + }, + "new_large_object_space": { + "memorySize": 0, + "committedMemory": 0, + "capacity": 16759808, + "used": 0, + "available": 16759808 + } + } + }, + "resourceUsage": { + "userCpuSeconds": 2176.56, + "kernelCpuSeconds": 163.562, + "cpuConsumptionPercent": 12.5503, + "maxRss": 3128586240, + "pageFaults": { + "IORequired": 15608643, + "IONotRequired": 0 + }, + "fsActivity": { + "reads": 46277, + "writes": 785844 + } + }, + "libuv": [ + ], + "environmentVariables": { + "=G:": "G:\\hoc-fpt-2\\làm việc\\kie\\work\\grocery-vercel-commerce", + "ALLUSERSPROFILE": "C:\\ProgramData", + "ANDROID_HOME": "G:\\ASDK", + "ANDROID_SDK_ROOT": "G:\\ASDK", + "APPDATA": "C:\\Users\\nhan\\AppData\\Roaming", + "ChocolateyInstall": "C:\\ProgramData\\chocolatey", + "ChocolateyLastPathUpdate": "132608575831335062", + "CHROME_CRASHPAD_PIPE_NAME": "\\\\.\\pipe\\crashpad_11504_LVARTKDVZJSQMMYN", + "CLASSPATH": "C:\\Program Files\\Java\\jdk1.8.0_231\\bin", + "COLORTERM": "truecolor", + "COMMERCE_CUSTOMERAUTH_ENABLED": "true", + "COMMERCE_PROVIDER": "vendure", + "CommonProgramFiles": "C:\\Program Files\\Common Files", + "CommonProgramFiles(x86)": "C:\\Program Files (x86)\\Common Files", + "CommonProgramW6432": "C:\\Program Files\\Common Files", + "COMPUTERNAME": "DESKTOP-TILU55O", + "ComSpec": "C:\\WINDOWS\\system32\\cmd.exe", + "dp0": "G:\\hoc-fpt-2\\làm việc\\kie\\work\\grocery-vercel-commerce\\node_modules\\.bin\\", + "DriverData": "C:\\Windows\\System32\\Drivers\\DriverData", + "FPS_BROWSER_APP_PROFILE_STRING": "Internet Explorer", + "FPS_BROWSER_USER_PROFILE_STRING": "Default", + "GIT_ASKPASS": "c:\\Users\\nhan\\AppData\\Local\\Programs\\Microsoft VS Code\\resources\\app\\extensions\\git\\dist\\askpass.sh", + "GIT_LFS_PATH": "C:\\Program Files\\Git LFS", + "HOME": "C:\\Users\\nhan", + "HOMEDRIVE": "C:", + "HOMEPATH": "\\Users\\nhan", + "INIT_CWD": "G:\\hoc-fpt-2\\làm việc\\kie\\work\\grocery-vercel-commerce", + "JAVA_HOME": "C:\\Program Files\\Java\\jdk1.8.0_281", + "LANG": "en_US.UTF-8", + "LOCALAPPDATA": "C:\\Users\\nhan\\AppData\\Local", + "LOGONSERVER": "\\\\DESKTOP-TILU55O", + "NEXT_PUBLIC_VENDURE_LOCAL_URL": "/vendure-shop-api", + "NEXT_PUBLIC_VENDURE_SHOP_API_URL": "https://demo.vendure.io/shop-api", + "NODE": "C:\\Program Files\\nodejs\\node.exe", + "NODE_ENV": "development", + "NODE_EXE": "C:\\Program Files\\nodejs\\\\node.exe", + "NODE_OPTIONS": "'--inspect' ", + "NPM_CLI_JS": "C:\\Program Files\\nodejs\\\\node_modules\\npm\\bin\\npm-cli.js", + "npm_config_access": "", + "npm_config_allow_same_version": "", + "npm_config_also": "", + "npm_config_always_auth": "", + "npm_config_argv": "{\"remain\":[],\"cooked\":[\"run\",\"dev-windows\"],\"original\":[\"run\",\"dev-windows\"]}", + "npm_config_audit": "true", + "npm_config_audit_level": "low", + "npm_config_auth_type": "legacy", + "npm_config_before": "", + "npm_config_bin_links": "true", + "npm_config_browser": "", + "npm_config_ca": "", + "npm_config_cache": "C:\\Users\\nhan\\AppData\\Roaming\\npm-cache", + "npm_config_cache_lock_retries": "10", + "npm_config_cache_lock_stale": "60000", + "npm_config_cache_lock_wait": "10000", + "npm_config_cache_max": "Infinity", + "npm_config_cache_min": "10", + "npm_config_cafile": "", + "npm_config_cert": "", + "npm_config_cidr": "", + "npm_config_color": "true", + "npm_config_commit_hooks": "true", + "npm_config_depth": "Infinity", + "npm_config_description": "true", + "npm_config_dev": "", + "npm_config_dry_run": "", + "npm_config_editor": "notepad.exe", + "npm_config_engine_strict": "", + "npm_config_fetch_retries": "2", + "npm_config_fetch_retry_factor": "10", + "npm_config_fetch_retry_maxtimeout": "60000", + "npm_config_fetch_retry_mintimeout": "10000", + "npm_config_force": "", + "npm_config_format_package_lock": "true", + "npm_config_fund": "true", + "npm_config_git": "git", + "npm_config_git_tag_version": "true", + "npm_config_global": "", + "npm_config_globalconfig": "C:\\Users\\nhan\\AppData\\Roaming\\npm\\etc\\npmrc", + "npm_config_globalignorefile": "C:\\Users\\nhan\\AppData\\Roaming\\npm\\etc\\npmignore", + "npm_config_global_style": "", + "npm_config_group": "", + "npm_config_ham_it_up": "", + "npm_config_heading": "npm", + "npm_config_https_proxy": "", + "npm_config_if_present": "", + "npm_config_ignore_prepublish": "", + "npm_config_ignore_scripts": "", + "npm_config_init_author_email": "", + "npm_config_init_author_name": "", + "npm_config_init_author_url": "", + "npm_config_init_license": "ISC", + "npm_config_init_module": "C:\\Users\\nhan\\.npm-init.js", + "npm_config_init_version": "1.0.0", + "npm_config_json": "", + "npm_config_key": "", + "npm_config_legacy_bundling": "", + "npm_config_link": "", + "npm_config_local_address": "", + "npm_config_loglevel": "notice", + "npm_config_logs_max": "10", + "npm_config_long": "", + "npm_config_maxsockets": "50", + "npm_config_message": "%s", + "npm_config_metrics_registry": "https://registry.npmjs.org/", + "npm_config_node_gyp": "C:\\Program Files\\nodejs\\node_modules\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js", + "npm_config_node_options": "", + "npm_config_node_version": "12.15.0", + "npm_config_noproxy": "", + "npm_config_offline": "", + "npm_config_onload_script": "", + "npm_config_only": "", + "npm_config_optional": "true", + "npm_config_otp": "", + "npm_config_package_lock": "true", + "npm_config_package_lock_only": "", + "npm_config_parseable": "", + "npm_config_prefer_offline": "", + "npm_config_prefer_online": "", + "npm_config_prefix": "C:\\Users\\nhan\\AppData\\Roaming\\npm", + "npm_config_preid": "", + "npm_config_production": "", + "npm_config_progress": "true", + "npm_config_proxy": "", + "npm_config_read_only": "", + "npm_config_rebuild_bundle": "true", + "npm_config_registry": "https://registry.npmjs.org/", + "npm_config_rollback": "true", + "npm_config_save": "true", + "npm_config_save_bundle": "", + "npm_config_save_dev": "", + "npm_config_save_exact": "", + "npm_config_save_optional": "", + "npm_config_save_prefix": "^", + "npm_config_save_prod": "", + "npm_config_scope": "", + "npm_config_scripts_prepend_node_path": "warn-only", + "npm_config_script_shell": "", + "npm_config_searchexclude": "", + "npm_config_searchlimit": "20", + "npm_config_searchopts": "", + "npm_config_searchstaleness": "900", + "npm_config_send_metrics": "", + "npm_config_shell": "C:\\WINDOWS\\system32\\cmd.exe", + "npm_config_shrinkwrap": "true", + "npm_config_sign_git_commit": "", + "npm_config_sign_git_tag": "", + "npm_config_sso_poll_frequency": "500", + "npm_config_sso_type": "oauth", + "npm_config_strict_ssl": "true", + "npm_config_tag": "latest", + "npm_config_tag_version_prefix": "v", + "npm_config_timing": "", + "npm_config_tmp": "C:\\Users\\nhan\\AppData\\Local\\Temp", + "npm_config_umask": "0000", + "npm_config_unicode": "", + "npm_config_unsafe_perm": "true", + "npm_config_update_notifier": "true", + "npm_config_usage": "", + "npm_config_user": "", + "npm_config_userconfig": "C:\\Users\\nhan\\.npmrc", + "npm_config_user_agent": "npm/6.13.4 node/v12.15.0 win32 x64", + "npm_config_version": "", + "npm_config_versions": "", + "npm_config_viewer": "browser", + "npm_execpath": "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js", + "npm_lifecycle_event": "dev-windows", + "npm_lifecycle_script": "set NODE_OPTIONS='--inspect' && set PORT=3005 && next dev", + "npm_node_execpath": "C:\\Program Files\\nodejs\\node.exe", + "npm_package_dependencies_autoprefixer": "^10.2.6", + "npm_package_dependencies_body_scroll_lock": "^3.1.5", + "npm_package_dependencies_classnames": "^2.3.1", + "npm_package_dependencies_cookie": "^0.4.1", + "npm_package_dependencies_email_validator": "^2.0.4", + "npm_package_dependencies_eslint": "^7.32.0", + "npm_package_dependencies_eslint_config_next": "^11.1.2", + "npm_package_dependencies_immutability_helper": "^3.1.1", + "npm_package_dependencies_js_cookie": "^2.2.1", + "npm_package_dependencies_keen_slider": "^5.5.1", + "npm_package_dependencies_lodash_debounce": "^4.0.8", + "npm_package_dependencies_lodash_random": "^3.2.0", + "npm_package_dependencies_lodash_throttle": "^4.1.1", + "npm_package_dependencies_next": "^11.0.0", + "npm_package_dependencies_next_seo": "^4.26.0", + "npm_package_dependencies_next_themes": "^0.0.14", + "npm_package_dependencies_postcss": "^8.3.5", + "npm_package_dependencies_postcss_nesting": "^8.0.1", + "npm_package_dependencies_react": "^17.0.2", + "npm_package_dependencies_react_dom": "^17.0.2", + "npm_package_dependencies_react_fast_marquee": "^1.1.4", + "npm_package_dependencies_react_merge_refs": "^1.1.0", + "npm_package_dependencies_react_player": "^2.9.0", + "npm_package_dependencies_react_use_measure": "^2.0.4", + "npm_package_dependencies_sass": "^1.38.0", + "npm_package_dependencies_swell_js": "^4.0.0-next.0", + "npm_package_dependencies_swr": "^0.5.6", + "npm_package_dependencies_tabbable": "^5.2.0", + "npm_package_dependencies_tailwindcss": "^2.2.2", + "npm_package_dependencies_uuidv4": "^6.2.10", + "npm_package_dependencies__react_spring_web": "^9.2.1", + "npm_package_dependencies__vercel_fetch": "^6.1.0", + "npm_package_description": "[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/git/external?repository-url=https%3A%2F%2Fgithub.com%2Fvercel%2Fcommerce&project-name=commerce&repo-name=commerce&demo-title=Next.js%20Commerce&demo-description=An%20all-in-one%20starter%20kit%20for%20high-performance%20e-commerce%20sites.&demo-url=https%3A%2F%2Fdemo.vercel.store&demo-image=https%3A%2F%2Fbigcommerce-demo-asset-ksvtgfvnd.vercel.app%2Fbigcommerce.png&integration-ids=oac_MuWZiE4jtmQ2ejZQaQ7ncuDT)", + "npm_package_devDependencies_deepmerge": "^4.2.2", + "npm_package_devDependencies_eslint_config_prettier": "^8.3.0", + "npm_package_devDependencies_graphql": "^15.5.1", + "npm_package_devDependencies_husky": "^6.0.0", + "npm_package_devDependencies_lint_staged": "^11.0.0", + "npm_package_devDependencies_postcss_flexbugs_fixes": "^5.0.2", + "npm_package_devDependencies_postcss_import": "^14.0.2", + "npm_package_devDependencies_postcss_preset_env": "^6.7.0", + "npm_package_devDependencies_prettier": "^2.3.0", + "npm_package_devDependencies_typescript": "4.3.4", + "npm_package_devDependencies__graphql_codegen_cli": "^1.21.5", + "npm_package_devDependencies__graphql_codegen_schema_ast": "^1.18.3", + "npm_package_devDependencies__graphql_codegen_typescript": "^1.22.2", + "npm_package_devDependencies__graphql_codegen_typescript_operations": "^1.18.1", + "npm_package_devDependencies__next_bundle_analyzer": "^10.2.3", + "npm_package_devDependencies__types_body_scroll_lock": "^2.6.1", + "npm_package_devDependencies__types_cookie": "^0.4.0", + "npm_package_devDependencies__types_js_cookie": "^2.2.6", + "npm_package_devDependencies__types_lodash_debounce": "^4.0.6", + "npm_package_devDependencies__types_lodash_random": "^3.2.6", + "npm_package_devDependencies__types_lodash_throttle": "^4.1.6", + "npm_package_devDependencies__types_node": "^15.12.4", + "npm_package_devDependencies__types_react": "^17.0.8", + "npm_package_engines_node": ">=14.x", + "npm_package_gitHead": "6cad0d89cac27109ededf5d8cbaf23280a95fea9", + "npm_package_license": "MIT", + "npm_package_lint_staged_______js_jsx_ts_tsx__0": "prettier --write", + "npm_package_lint_staged_______js_jsx_ts_tsx__1": "git add", + "npm_package_lint_staged_______md_mdx_json__0": "prettier --write", + "npm_package_lint_staged_______md_mdx_json__1": "git add", + "npm_package_name": "nextjs-commerce", + "npm_package_next_unused_alias__assets___0": "assets/*", + "npm_package_next_unused_alias__components___0": "components/*", + "npm_package_next_unused_alias__config___0": "config/*", + "npm_package_next_unused_alias__lib___0": "lib/*", + "npm_package_next_unused_alias__utils___0": "utils/*", + "npm_package_next_unused_debug": "true", + "npm_package_next_unused_entrypoints_0": "pages", + "npm_package_next_unused_include_0": "components", + "npm_package_next_unused_include_1": "lib", + "npm_package_next_unused_include_2": "pages", + "npm_package_readmeFilename": "README.md", + "npm_package_scripts_analyze": "BUNDLE_ANALYZE=both yarn build", + "npm_package_scripts_build": "next build", + "npm_package_scripts_dev": "NODE_OPTIONS='--inspect' PORT=3005 next dev", + "npm_package_scripts_dev_windows": "set NODE_OPTIONS='--inspect' && set PORT=3005 && next dev", + "npm_package_scripts_find_unused": "npx next-unused", + "npm_package_scripts_generate": "graphql-codegen", + "npm_package_scripts_generate_definitions": "node framework/bigcommerce/scripts/generate-definitions.js", + "npm_package_scripts_generate_shopify": "DOTENV_CONFIG_PATH=./.env.local graphql-codegen -r dotenv/config --config framework/shopify/codegen.json", + "npm_package_scripts_generate_vendure": "graphql-codegen --config framework/vendure/codegen.json", + "npm_package_scripts_prettier_fix": "prettier --write .", + "npm_package_scripts_start": "PORT=3005 next start", + "npm_package_sideEffects": "false", + "npm_package_version": "1.0.0", + "NPM_PREFIX_NPM_CLI_JS": "C:\\Users\\nhan\\AppData\\Roaming\\npm\\node_modules\\npm\\bin\\npm-cli.js", + "NUMBER_OF_PROCESSORS": "4", + "OneDrive": "C:\\Users\\nhan\\OneDrive", + "OneDriveConsumer": "C:\\Users\\nhan\\OneDrive", + "OPENSSL_CONF": "C:\\Program Files\\PostgreSQL\\psqlODBC\\etc\\openssl.cnf", + "ORIGINAL_XDG_CURRENT_DESKTOP": "undefined", + "OS": "Windows_NT", + "Path": "C:\\Program Files\\nodejs\\node_modules\\npm\\node_modules\\npm-lifecycle\\node-gyp-bin;G:\\hoc-fpt-2\\làm việc\\kie\\work\\grocery-vercel-commerce\\node_modules\\.bin;C:\\Program Files (x86)\\Common Files\\Oracle\\Java\\javapath;C:\\WINDOWS\\system32;C:\\WINDOWS;C:\\WINDOWS\\System32\\Wbem;C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\;C:\\WINDOWS\\System32\\OpenSSH\\;C:\\Program Files\\Java\\jdk1.8.0_231\\bin;C:\\Program Files\\nodejs\\;C:\\Program Files\\MySQL\\MySQL Server 8.0\\bin;C:\\Program Files\\Git\\cmd;C:\\Program Files\\MongoDB\\Server\\4.2\\bin;;C:\\Program Files\\Git LFS;D:\\hoc-fpt\\code-tren-lop\\php\\xampp3\\php;C:\\ProgramData\\ComposerSetup\\bin;C:\\ProgramData\\chocolatey\\bin;C:\\Program Files\\AdoptOpenJDK\\jdk8u192-b12\\bin;C:\\Program Files\\Java\\jdk1.8.0_211\\bin;C:\\Android\\android-sdk\\tools;C:\\Android\\android-sdk\\platform-tools;C:\\Android\\android-sdk\\tools\\bin;C:\\Program Files\\MySQL\\MySQL Shell 8.0\\bin\\;C:\\Program Files\\Java\\jdk1.8.0_231\\bin;C:\\Users\\nhan\\AppData\\Local\\Programs\\Microsoft VS Code\\bin;C:\\Users\\nhan\\AppData\\Roaming\\npm;C:\\Program Files\\MySQL\\MySQL Server 8.0\\bin;C:\\Program Files\\heroku\\bin;C:\\Users\\nhan\\AppData\\Local\\Microsoft\\WindowsApps;C:\\Users\\nhan\\AppData\\Roaming\\Composer\\vendor\\bin", + "PATHEXT": ".COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JSE;.WSF;.WSH;.MSC;.CPL", + "PORT": "3005 ", + "PROCESSOR_ARCHITECTURE": "AMD64", + "PROCESSOR_IDENTIFIER": "Intel64 Family 6 Model 58 Stepping 9, GenuineIntel", + "PROCESSOR_LEVEL": "6", + "PROCESSOR_REVISION": "3a09", + "ProgramData": "C:\\ProgramData", + "ProgramFiles": "C:\\Program Files", + "ProgramFiles(x86)": "C:\\Program Files (x86)", + "ProgramW6432": "C:\\Program Files", + "PROMPT": "$P$G", + "PSModulePath": "C:\\Users\\nhan\\Documents\\WindowsPowerShell\\Modules;C:\\Program Files\\WindowsPowerShell\\Modules;C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\Modules", + "PUBLIC": "C:\\Users\\Public", + "SESSIONNAME": "Console", + "SystemDrive": "C:", + "SystemRoot": "C:\\WINDOWS", + "TEMP": "C:\\Users\\nhan\\AppData\\Local\\Temp", + "TERM_PROGRAM": "vscode", + "TERM_PROGRAM_VERSION": "1.60.0", + "TMP": "C:\\Users\\nhan\\AppData\\Local\\Temp", + "TRACE_ID": "c2ff45063f82658e", + "USERDOMAIN": "DESKTOP-TILU55O", + "USERDOMAIN_ROAMINGPROFILE": "DESKTOP-TILU55O", + "USERNAME": "nhan", + "USERPROFILE": "C:\\Users\\nhan", + "VSCODE_GIT_ASKPASS_MAIN": "c:\\Users\\nhan\\AppData\\Local\\Programs\\Microsoft VS Code\\resources\\app\\extensions\\git\\dist\\askpass-main.js", + "VSCODE_GIT_ASKPASS_NODE": "C:\\Users\\nhan\\AppData\\Local\\Programs\\Microsoft VS Code\\Code.exe", + "VSCODE_GIT_IPC_HANDLE": "\\\\.\\pipe\\vscode-git-d5d8071aa9-sock", + "windir": "C:\\WINDOWS", + "_prog": "node", + "__NEXT_PROCESSED_ENV": "true" + }, + "sharedObjects": [ + "C:\\Program Files\\nodejs\\node.exe", + "C:\\WINDOWS\\SYSTEM32\\ntdll.dll", + "C:\\WINDOWS\\System32\\KERNEL32.DLL", + "C:\\WINDOWS\\System32\\KERNELBASE.dll", + "C:\\WINDOWS\\System32\\WS2_32.dll", + "C:\\WINDOWS\\System32\\RPCRT4.dll", + "C:\\WINDOWS\\System32\\ADVAPI32.dll", + "C:\\WINDOWS\\System32\\msvcrt.dll", + "C:\\WINDOWS\\System32\\sechost.dll", + "C:\\WINDOWS\\System32\\USER32.dll", + "C:\\WINDOWS\\System32\\win32u.dll", + "C:\\WINDOWS\\System32\\GDI32.dll", + "C:\\WINDOWS\\System32\\gdi32full.dll", + "C:\\WINDOWS\\System32\\msvcp_win.dll", + "C:\\WINDOWS\\System32\\ucrtbase.dll", + "C:\\WINDOWS\\System32\\PSAPI.DLL", + "C:\\WINDOWS\\System32\\CRYPT32.dll", + "C:\\WINDOWS\\System32\\bcrypt.dll", + "C:\\WINDOWS\\SYSTEM32\\dbghelp.dll", + "C:\\WINDOWS\\SYSTEM32\\IPHLPAPI.DLL", + "C:\\WINDOWS\\SYSTEM32\\USERENV.dll", + "C:\\WINDOWS\\SYSTEM32\\WINMM.dll", + "C:\\WINDOWS\\System32\\IMM32.DLL", + "C:\\WINDOWS\\SYSTEM32\\powrprof.dll", + "C:\\WINDOWS\\SYSTEM32\\UMPDC.dll", + "C:\\WINDOWS\\SYSTEM32\\CRYPTBASE.DLL", + "C:\\WINDOWS\\system32\\uxtheme.dll", + "C:\\WINDOWS\\System32\\combase.dll", + "C:\\WINDOWS\\system32\\mswsock.dll", + "C:\\WINDOWS\\SYSTEM32\\kernel.appcore.dll", + "C:\\WINDOWS\\System32\\bcryptprimitives.dll", + "C:\\WINDOWS\\System32\\NSI.dll", + "C:\\WINDOWS\\SYSTEM32\\dhcpcsvc6.DLL", + "C:\\WINDOWS\\SYSTEM32\\dhcpcsvc.DLL", + "C:\\WINDOWS\\SYSTEM32\\DNSAPI.dll", + "C:\\WINDOWS\\system32\\napinsp.dll", + "C:\\WINDOWS\\system32\\pnrpnsp.dll", + "C:\\WINDOWS\\system32\\wshbth.dll", + "C:\\WINDOWS\\system32\\NLAapi.dll", + "C:\\WINDOWS\\System32\\winrnr.dll", + "C:\\Windows\\System32\\rasadhlp.dll", + "C:\\WINDOWS\\System32\\fwpuclnt.dll" + ] +} \ No newline at end of file diff --git a/report.20210914.155439.6404.0.001.json b/report.20210914.155439.6404.0.001.json new file mode 100644 index 000000000..e729af963 --- /dev/null +++ b/report.20210914.155439.6404.0.001.json @@ -0,0 +1,634 @@ + +{ + "header": { + "reportVersion": 1, + "event": "Allocation failed - JavaScript heap out of memory", + "trigger": "FatalError", + "filename": "report.20210914.155439.6404.0.001.json", + "dumpEventTime": "2021-09-14T15:54:39Z", + "dumpEventTimeStamp": "1631609679847", + "processId": 6404, + "cwd": "G:\\hoc-fpt-2\\làm việc\\kie\\work\\grocery-vercel-commerce", + "commandLine": [ + "node", + "G:\\hoc-fpt-2\\làm việc\\kie\\work\\grocery-vercel-commerce\\node_modules\\.bin\\\\..\\next\\dist\\bin\\next", + "dev" + ], + "nodejsVersion": "v12.15.0", + "wordSize": 64, + "arch": "x64", + "platform": "win32", + "componentVersions": { + "node": "12.15.0", + "v8": "7.7.299.13-node.16", + "uv": "1.33.1", + "zlib": "1.2.11", + "brotli": "1.0.7", + "ares": "1.15.0", + "modules": "72", + "nghttp2": "1.40.0", + "napi": "5", + "llhttp": "2.0.4", + "http_parser": "2.9.3", + "openssl": "1.1.1d", + "cldr": "35.1", + "icu": "64.2", + "tz": "2019c", + "unicode": "12.1" + }, + "release": { + "name": "node", + "lts": "Erbium", + "headersUrl": "https://nodejs.org/download/release/v12.15.0/node-v12.15.0-headers.tar.gz", + "sourceUrl": "https://nodejs.org/download/release/v12.15.0/node-v12.15.0.tar.gz", + "libUrl": "https://nodejs.org/download/release/v12.15.0/win-x64/node.lib" + }, + "osName": "Windows_NT", + "osRelease": "10.0.19043", + "osVersion": "Windows 10 Pro", + "osMachine": "x86_64", + "cpus": [ + { + "model": "Intel(R) Core(TM) i3-3110M CPU @ 2.40GHz", + "speed": 2395, + "user": 122321031, + "nice": 0, + "sys": 59816781, + "idle": 449152296, + "irq": 6214000 + }, + { + "model": "Intel(R) Core(TM) i3-3110M CPU @ 2.40GHz", + "speed": 2395, + "user": 125016468, + "nice": 0, + "sys": 45652765, + "idle": 460620687, + "irq": 1009312 + }, + { + "model": "Intel(R) Core(TM) i3-3110M CPU @ 2.40GHz", + "speed": 2395, + "user": 138604812, + "nice": 0, + "sys": 46560562, + "idle": 446124531, + "irq": 563593 + }, + { + "model": "Intel(R) Core(TM) i3-3110M CPU @ 2.40GHz", + "speed": 2395, + "user": 139890312, + "nice": 0, + "sys": 43625859, + "idle": 447773750, + "irq": 469156 + } + ], + "networkInterfaces": [ + { + "name": "Wi-Fi", + "internal": false, + "mac": "a4:17:31:1d:cc:e5", + "address": "2402:800:6318:9d24:f937:34a5:8214:a074", + "netmask": "ffff:ffff:ffff:ffff::", + "family": "IPv6", + "scopeid": 0 + }, + { + "name": "Wi-Fi", + "internal": false, + "mac": "a4:17:31:1d:cc:e5", + "address": "2402:800:6318:9d24:d442:f151:35d4:8126", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", + "family": "IPv6", + "scopeid": 0 + }, + { + "name": "Wi-Fi", + "internal": false, + "mac": "a4:17:31:1d:cc:e5", + "address": "fe80::f937:34a5:8214:a074", + "netmask": "ffff:ffff:ffff:ffff::", + "family": "IPv6", + "scopeid": 21 + }, + { + "name": "Wi-Fi", + "internal": false, + "mac": "a4:17:31:1d:cc:e5", + "address": "192.168.1.13", + "netmask": "255.255.255.0", + "family": "IPv4" + }, + { + "name": "Loopback Pseudo-Interface 1", + "internal": true, + "mac": "00:00:00:00:00:00", + "address": "::1", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", + "family": "IPv6", + "scopeid": 0 + }, + { + "name": "Loopback Pseudo-Interface 1", + "internal": true, + "mac": "00:00:00:00:00:00", + "address": "127.0.0.1", + "netmask": "255.0.0.0", + "family": "IPv4" + } + ], + "host": "DESKTOP-TILU55O" + }, + "javascriptStack": { + "message": "No stack.", + "stack": [ + "Unavailable." + ] + }, + "nativeStack": [ + { + "pc": "0x00007ff794f61759", + "symbol": "std::basic_ostream >::operator<<+10873" + }, + { + "pc": "0x00007ff794f65b7c", + "symbol": "std::basic_ostream >::operator<<+28316" + }, + { + "pc": "0x00007ff794f64b38", + "symbol": "std::basic_ostream >::operator<<+24152" + }, + { + "pc": "0x00007ff79505446b", + "symbol": "v8::base::CPU::has_sse+37723" + }, + { + "pc": "0x00007ff795858d9e", + "symbol": "v8::Isolate::ReportExternalAllocationLimitReached+94" + }, + { + "pc": "0x00007ff795840de1", + "symbol": "v8::SharedArrayBuffer::Externalize+833" + }, + { + "pc": "0x00007ff79570e6ac", + "symbol": "v8::internal::Heap::EphemeronKeyWriteBarrierFromCode+1436" + }, + { + "pc": "0x00007ff795719a50", + "symbol": "v8::internal::Heap::ProtectUnprotectedMemoryChunks+1312" + }, + { + "pc": "0x00007ff795716584", + "symbol": "v8::internal::Heap::PageFlagsAreConsistent+3204" + }, + { + "pc": "0x00007ff79570be13", + "symbol": "v8::internal::Heap::CollectGarbage+1283" + }, + { + "pc": "0x00007ff79570a5e4", + "symbol": "v8::internal::Heap::AddRetainedMap+2356" + }, + { + "pc": "0x00007ff79572b8b5", + "symbol": "v8::internal::Factory::NewFillerObject+53" + }, + { + "pc": "0x00007ff795497b89", + "symbol": "v8::internal::interpreter::JumpTableTargetOffsets::iterator::operator=+4057" + }, + { + "pc": "0x00007ff795c84d3d", + "symbol": "v8::internal::SetupIsolateDelegate::SetupHeap+567949" + }, + { + "pc": "0x0000004893120f89", + "symbol": "" + } + ], + "javascriptHeap": { + "totalMemory": 2180952064, + "totalCommittedMemory": 2180952064, + "usedMemory": 2077263400, + "availableMemory": 46925016, + "memoryLimit": 2197815296, + "heapSpaces": { + "read_only_space": { + "memorySize": 262144, + "committedMemory": 262144, + "capacity": 261872, + "used": 32296, + "available": 229576 + }, + "new_space": { + "memorySize": 33554432, + "committedMemory": 33554432, + "capacity": 16759808, + "used": 3774664, + "available": 12985144 + }, + "old_space": { + "memorySize": 1710075904, + "committedMemory": 1710075904, + "capacity": 1639289184, + "used": 1639201928, + "available": 87256 + }, + "code_space": { + "memorySize": 3571712, + "committedMemory": 3571712, + "capacity": 2926848, + "used": 2926848, + "available": 0 + }, + "map_space": { + "memorySize": 5771264, + "committedMemory": 5771264, + "capacity": 3972960, + "used": 3972960, + "available": 0 + }, + "large_object_space": { + "memorySize": 426520576, + "committedMemory": 426520576, + "capacity": 426257456, + "used": 426257456, + "available": 0 + }, + "code_large_object_space": { + "memorySize": 1196032, + "committedMemory": 1196032, + "capacity": 1097248, + "used": 1097248, + "available": 0 + }, + "new_large_object_space": { + "memorySize": 0, + "committedMemory": 0, + "capacity": 16759808, + "used": 0, + "available": 16759808 + } + } + }, + "resourceUsage": { + "userCpuSeconds": 939.421, + "kernelCpuSeconds": 35.375, + "cpuConsumptionPercent": 103.702, + "maxRss": 3224653824, + "pageFaults": { + "IORequired": 3779383, + "IONotRequired": 0 + }, + "fsActivity": { + "reads": 14745, + "writes": 85913 + } + }, + "libuv": [ + ], + "environmentVariables": { + "=G:": "G:\\hoc-fpt-2\\làm việc\\kie\\work\\grocery-vercel-commerce", + "ALLUSERSPROFILE": "C:\\ProgramData", + "ANDROID_HOME": "G:\\ASDK", + "ANDROID_SDK_ROOT": "G:\\ASDK", + "APPDATA": "C:\\Users\\nhan\\AppData\\Roaming", + "ChocolateyInstall": "C:\\ProgramData\\chocolatey", + "ChocolateyLastPathUpdate": "132608575831335062", + "CHROME_CRASHPAD_PIPE_NAME": "\\\\.\\pipe\\crashpad_11504_LVARTKDVZJSQMMYN", + "CLASSPATH": "C:\\Program Files\\Java\\jdk1.8.0_231\\bin", + "COLORTERM": "truecolor", + "COMMERCE_CUSTOMERAUTH_ENABLED": "true", + "COMMERCE_PROVIDER": "vendure", + "CommonProgramFiles": "C:\\Program Files\\Common Files", + "CommonProgramFiles(x86)": "C:\\Program Files (x86)\\Common Files", + "CommonProgramW6432": "C:\\Program Files\\Common Files", + "COMPUTERNAME": "DESKTOP-TILU55O", + "ComSpec": "C:\\WINDOWS\\system32\\cmd.exe", + "dp0": "G:\\hoc-fpt-2\\làm việc\\kie\\work\\grocery-vercel-commerce\\node_modules\\.bin\\", + "DriverData": "C:\\Windows\\System32\\Drivers\\DriverData", + "FPS_BROWSER_APP_PROFILE_STRING": "Internet Explorer", + "FPS_BROWSER_USER_PROFILE_STRING": "Default", + "GIT_ASKPASS": "c:\\Users\\nhan\\AppData\\Local\\Programs\\Microsoft VS Code\\resources\\app\\extensions\\git\\dist\\askpass.sh", + "GIT_LFS_PATH": "C:\\Program Files\\Git LFS", + "HOME": "C:\\Users\\nhan", + "HOMEDRIVE": "C:", + "HOMEPATH": "\\Users\\nhan", + "INIT_CWD": "G:\\hoc-fpt-2\\làm việc\\kie\\work\\grocery-vercel-commerce", + "JAVA_HOME": "C:\\Program Files\\Java\\jdk1.8.0_281", + "LANG": "en_US.UTF-8", + "LOCALAPPDATA": "C:\\Users\\nhan\\AppData\\Local", + "LOGONSERVER": "\\\\DESKTOP-TILU55O", + "NEXT_PUBLIC_VENDURE_LOCAL_URL": "/vendure-shop-api", + "NEXT_PUBLIC_VENDURE_SHOP_API_URL": "https://demo.vendure.io/shop-api", + "NODE": "C:\\Program Files\\nodejs\\node.exe", + "NODE_ENV": "development", + "NODE_EXE": "C:\\Program Files\\nodejs\\\\node.exe", + "NODE_OPTIONS": "'--inspect' ", + "NPM_CLI_JS": "C:\\Program Files\\nodejs\\\\node_modules\\npm\\bin\\npm-cli.js", + "npm_config_access": "", + "npm_config_allow_same_version": "", + "npm_config_also": "", + "npm_config_always_auth": "", + "npm_config_argv": "{\"remain\":[],\"cooked\":[\"run\",\"dev-windows\"],\"original\":[\"run\",\"dev-windows\"]}", + "npm_config_audit": "true", + "npm_config_audit_level": "low", + "npm_config_auth_type": "legacy", + "npm_config_before": "", + "npm_config_bin_links": "true", + "npm_config_browser": "", + "npm_config_ca": "", + "npm_config_cache": "C:\\Users\\nhan\\AppData\\Roaming\\npm-cache", + "npm_config_cache_lock_retries": "10", + "npm_config_cache_lock_stale": "60000", + "npm_config_cache_lock_wait": "10000", + "npm_config_cache_max": "Infinity", + "npm_config_cache_min": "10", + "npm_config_cafile": "", + "npm_config_cert": "", + "npm_config_cidr": "", + "npm_config_color": "true", + "npm_config_commit_hooks": "true", + "npm_config_depth": "Infinity", + "npm_config_description": "true", + "npm_config_dev": "", + "npm_config_dry_run": "", + "npm_config_editor": "notepad.exe", + "npm_config_engine_strict": "", + "npm_config_fetch_retries": "2", + "npm_config_fetch_retry_factor": "10", + "npm_config_fetch_retry_maxtimeout": "60000", + "npm_config_fetch_retry_mintimeout": "10000", + "npm_config_force": "", + "npm_config_format_package_lock": "true", + "npm_config_fund": "true", + "npm_config_git": "git", + "npm_config_git_tag_version": "true", + "npm_config_global": "", + "npm_config_globalconfig": "C:\\Users\\nhan\\AppData\\Roaming\\npm\\etc\\npmrc", + "npm_config_globalignorefile": "C:\\Users\\nhan\\AppData\\Roaming\\npm\\etc\\npmignore", + "npm_config_global_style": "", + "npm_config_group": "", + "npm_config_ham_it_up": "", + "npm_config_heading": "npm", + "npm_config_https_proxy": "", + "npm_config_if_present": "", + "npm_config_ignore_prepublish": "", + "npm_config_ignore_scripts": "", + "npm_config_init_author_email": "", + "npm_config_init_author_name": "", + "npm_config_init_author_url": "", + "npm_config_init_license": "ISC", + "npm_config_init_module": "C:\\Users\\nhan\\.npm-init.js", + "npm_config_init_version": "1.0.0", + "npm_config_json": "", + "npm_config_key": "", + "npm_config_legacy_bundling": "", + "npm_config_link": "", + "npm_config_local_address": "", + "npm_config_loglevel": "notice", + "npm_config_logs_max": "10", + "npm_config_long": "", + "npm_config_maxsockets": "50", + "npm_config_message": "%s", + "npm_config_metrics_registry": "https://registry.npmjs.org/", + "npm_config_node_gyp": "C:\\Program Files\\nodejs\\node_modules\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js", + "npm_config_node_options": "", + "npm_config_node_version": "12.15.0", + "npm_config_noproxy": "", + "npm_config_offline": "", + "npm_config_onload_script": "", + "npm_config_only": "", + "npm_config_optional": "true", + "npm_config_otp": "", + "npm_config_package_lock": "true", + "npm_config_package_lock_only": "", + "npm_config_parseable": "", + "npm_config_prefer_offline": "", + "npm_config_prefer_online": "", + "npm_config_prefix": "C:\\Users\\nhan\\AppData\\Roaming\\npm", + "npm_config_preid": "", + "npm_config_production": "", + "npm_config_progress": "true", + "npm_config_proxy": "", + "npm_config_read_only": "", + "npm_config_rebuild_bundle": "true", + "npm_config_registry": "https://registry.npmjs.org/", + "npm_config_rollback": "true", + "npm_config_save": "true", + "npm_config_save_bundle": "", + "npm_config_save_dev": "", + "npm_config_save_exact": "", + "npm_config_save_optional": "", + "npm_config_save_prefix": "^", + "npm_config_save_prod": "", + "npm_config_scope": "", + "npm_config_scripts_prepend_node_path": "warn-only", + "npm_config_script_shell": "", + "npm_config_searchexclude": "", + "npm_config_searchlimit": "20", + "npm_config_searchopts": "", + "npm_config_searchstaleness": "900", + "npm_config_send_metrics": "", + "npm_config_shell": "C:\\WINDOWS\\system32\\cmd.exe", + "npm_config_shrinkwrap": "true", + "npm_config_sign_git_commit": "", + "npm_config_sign_git_tag": "", + "npm_config_sso_poll_frequency": "500", + "npm_config_sso_type": "oauth", + "npm_config_strict_ssl": "true", + "npm_config_tag": "latest", + "npm_config_tag_version_prefix": "v", + "npm_config_timing": "", + "npm_config_tmp": "C:\\Users\\nhan\\AppData\\Local\\Temp", + "npm_config_umask": "0000", + "npm_config_unicode": "", + "npm_config_unsafe_perm": "true", + "npm_config_update_notifier": "true", + "npm_config_usage": "", + "npm_config_user": "", + "npm_config_userconfig": "C:\\Users\\nhan\\.npmrc", + "npm_config_user_agent": "npm/6.13.4 node/v12.15.0 win32 x64", + "npm_config_version": "", + "npm_config_versions": "", + "npm_config_viewer": "browser", + "npm_execpath": "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js", + "npm_lifecycle_event": "dev-windows", + "npm_lifecycle_script": "set NODE_OPTIONS='--inspect' && set PORT=3005 && next dev", + "npm_node_execpath": "C:\\Program Files\\nodejs\\node.exe", + "npm_package_dependencies_autoprefixer": "^10.2.6", + "npm_package_dependencies_body_scroll_lock": "^3.1.5", + "npm_package_dependencies_classnames": "^2.3.1", + "npm_package_dependencies_cookie": "^0.4.1", + "npm_package_dependencies_email_validator": "^2.0.4", + "npm_package_dependencies_eslint": "^7.32.0", + "npm_package_dependencies_eslint_config_next": "^11.1.2", + "npm_package_dependencies_immutability_helper": "^3.1.1", + "npm_package_dependencies_js_cookie": "^2.2.1", + "npm_package_dependencies_keen_slider": "^5.5.1", + "npm_package_dependencies_lodash_debounce": "^4.0.8", + "npm_package_dependencies_lodash_random": "^3.2.0", + "npm_package_dependencies_lodash_throttle": "^4.1.1", + "npm_package_dependencies_next": "^11.0.0", + "npm_package_dependencies_next_seo": "^4.26.0", + "npm_package_dependencies_next_themes": "^0.0.14", + "npm_package_dependencies_postcss": "^8.3.5", + "npm_package_dependencies_postcss_nesting": "^8.0.1", + "npm_package_dependencies_react": "^17.0.2", + "npm_package_dependencies_react_dom": "^17.0.2", + "npm_package_dependencies_react_fast_marquee": "^1.1.4", + "npm_package_dependencies_react_merge_refs": "^1.1.0", + "npm_package_dependencies_react_player": "^2.9.0", + "npm_package_dependencies_react_use_measure": "^2.0.4", + "npm_package_dependencies_sass": "^1.38.0", + "npm_package_dependencies_swell_js": "^4.0.0-next.0", + "npm_package_dependencies_swr": "^0.5.6", + "npm_package_dependencies_tabbable": "^5.2.0", + "npm_package_dependencies_tailwindcss": "^2.2.2", + "npm_package_dependencies_uuidv4": "^6.2.10", + "npm_package_dependencies__react_spring_web": "^9.2.1", + "npm_package_dependencies__vercel_fetch": "^6.1.0", + "npm_package_description": "[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/git/external?repository-url=https%3A%2F%2Fgithub.com%2Fvercel%2Fcommerce&project-name=commerce&repo-name=commerce&demo-title=Next.js%20Commerce&demo-description=An%20all-in-one%20starter%20kit%20for%20high-performance%20e-commerce%20sites.&demo-url=https%3A%2F%2Fdemo.vercel.store&demo-image=https%3A%2F%2Fbigcommerce-demo-asset-ksvtgfvnd.vercel.app%2Fbigcommerce.png&integration-ids=oac_MuWZiE4jtmQ2ejZQaQ7ncuDT)", + "npm_package_devDependencies_deepmerge": "^4.2.2", + "npm_package_devDependencies_eslint_config_prettier": "^8.3.0", + "npm_package_devDependencies_graphql": "^15.5.1", + "npm_package_devDependencies_husky": "^6.0.0", + "npm_package_devDependencies_lint_staged": "^11.0.0", + "npm_package_devDependencies_postcss_flexbugs_fixes": "^5.0.2", + "npm_package_devDependencies_postcss_import": "^14.0.2", + "npm_package_devDependencies_postcss_preset_env": "^6.7.0", + "npm_package_devDependencies_prettier": "^2.3.0", + "npm_package_devDependencies_typescript": "4.3.4", + "npm_package_devDependencies__graphql_codegen_cli": "^1.21.5", + "npm_package_devDependencies__graphql_codegen_schema_ast": "^1.18.3", + "npm_package_devDependencies__graphql_codegen_typescript": "^1.22.2", + "npm_package_devDependencies__graphql_codegen_typescript_operations": "^1.18.1", + "npm_package_devDependencies__next_bundle_analyzer": "^10.2.3", + "npm_package_devDependencies__types_body_scroll_lock": "^2.6.1", + "npm_package_devDependencies__types_cookie": "^0.4.0", + "npm_package_devDependencies__types_js_cookie": "^2.2.6", + "npm_package_devDependencies__types_lodash_debounce": "^4.0.6", + "npm_package_devDependencies__types_lodash_random": "^3.2.6", + "npm_package_devDependencies__types_lodash_throttle": "^4.1.6", + "npm_package_devDependencies__types_node": "^15.12.4", + "npm_package_devDependencies__types_react": "^17.0.8", + "npm_package_engines_node": ">=14.x", + "npm_package_gitHead": "571bfe44ac1837b6c07951d9d711508d380a5ef2", + "npm_package_license": "MIT", + "npm_package_lint_staged_______js_jsx_ts_tsx__0": "prettier --write", + "npm_package_lint_staged_______js_jsx_ts_tsx__1": "git add", + "npm_package_lint_staged_______md_mdx_json__0": "prettier --write", + "npm_package_lint_staged_______md_mdx_json__1": "git add", + "npm_package_name": "nextjs-commerce", + "npm_package_next_unused_alias__assets___0": "assets/*", + "npm_package_next_unused_alias__components___0": "components/*", + "npm_package_next_unused_alias__config___0": "config/*", + "npm_package_next_unused_alias__lib___0": "lib/*", + "npm_package_next_unused_alias__utils___0": "utils/*", + "npm_package_next_unused_debug": "true", + "npm_package_next_unused_entrypoints_0": "pages", + "npm_package_next_unused_include_0": "components", + "npm_package_next_unused_include_1": "lib", + "npm_package_next_unused_include_2": "pages", + "npm_package_readmeFilename": "README.md", + "npm_package_scripts_analyze": "BUNDLE_ANALYZE=both yarn build", + "npm_package_scripts_build": "next build", + "npm_package_scripts_dev": "NODE_OPTIONS='--inspect' PORT=3005 next dev", + "npm_package_scripts_dev_windows": "set NODE_OPTIONS='--inspect' && set PORT=3005 && next dev", + "npm_package_scripts_find_unused": "npx next-unused", + "npm_package_scripts_generate": "graphql-codegen", + "npm_package_scripts_generate_definitions": "node framework/bigcommerce/scripts/generate-definitions.js", + "npm_package_scripts_generate_shopify": "DOTENV_CONFIG_PATH=./.env.local graphql-codegen -r dotenv/config --config framework/shopify/codegen.json", + "npm_package_scripts_generate_vendure": "graphql-codegen --config framework/vendure/codegen.json", + "npm_package_scripts_prettier_fix": "prettier --write .", + "npm_package_scripts_start": "PORT=3005 next start", + "npm_package_sideEffects": "false", + "npm_package_version": "1.0.0", + "NPM_PREFIX_NPM_CLI_JS": "C:\\Users\\nhan\\AppData\\Roaming\\npm\\node_modules\\npm\\bin\\npm-cli.js", + "NUMBER_OF_PROCESSORS": "4", + "OneDrive": "C:\\Users\\nhan\\OneDrive", + "OneDriveConsumer": "C:\\Users\\nhan\\OneDrive", + "OPENSSL_CONF": "C:\\Program Files\\PostgreSQL\\psqlODBC\\etc\\openssl.cnf", + "ORIGINAL_XDG_CURRENT_DESKTOP": "undefined", + "OS": "Windows_NT", + "Path": "C:\\Program Files\\nodejs\\node_modules\\npm\\node_modules\\npm-lifecycle\\node-gyp-bin;G:\\hoc-fpt-2\\làm việc\\kie\\work\\grocery-vercel-commerce\\node_modules\\.bin;C:\\Program Files (x86)\\Common Files\\Oracle\\Java\\javapath;C:\\WINDOWS\\system32;C:\\WINDOWS;C:\\WINDOWS\\System32\\Wbem;C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\;C:\\WINDOWS\\System32\\OpenSSH\\;C:\\Program Files\\Java\\jdk1.8.0_231\\bin;C:\\Program Files\\nodejs\\;C:\\Program Files\\MySQL\\MySQL Server 8.0\\bin;C:\\Program Files\\Git\\cmd;C:\\Program Files\\MongoDB\\Server\\4.2\\bin;;C:\\Program Files\\Git LFS;D:\\hoc-fpt\\code-tren-lop\\php\\xampp3\\php;C:\\ProgramData\\ComposerSetup\\bin;C:\\ProgramData\\chocolatey\\bin;C:\\Program Files\\AdoptOpenJDK\\jdk8u192-b12\\bin;C:\\Program Files\\Java\\jdk1.8.0_211\\bin;C:\\Android\\android-sdk\\tools;C:\\Android\\android-sdk\\platform-tools;C:\\Android\\android-sdk\\tools\\bin;C:\\Program Files\\MySQL\\MySQL Shell 8.0\\bin\\;C:\\Program Files\\Java\\jdk1.8.0_231\\bin;C:\\Users\\nhan\\AppData\\Local\\Programs\\Microsoft VS Code\\bin;C:\\Users\\nhan\\AppData\\Roaming\\npm;C:\\Program Files\\MySQL\\MySQL Server 8.0\\bin;C:\\Program Files\\heroku\\bin;C:\\Users\\nhan\\AppData\\Local\\Microsoft\\WindowsApps;C:\\Users\\nhan\\AppData\\Roaming\\Composer\\vendor\\bin", + "PATHEXT": ".COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JSE;.WSF;.WSH;.MSC;.CPL", + "PORT": "3005 ", + "PROCESSOR_ARCHITECTURE": "AMD64", + "PROCESSOR_IDENTIFIER": "Intel64 Family 6 Model 58 Stepping 9, GenuineIntel", + "PROCESSOR_LEVEL": "6", + "PROCESSOR_REVISION": "3a09", + "ProgramData": "C:\\ProgramData", + "ProgramFiles": "C:\\Program Files", + "ProgramFiles(x86)": "C:\\Program Files (x86)", + "ProgramW6432": "C:\\Program Files", + "PROMPT": "$P$G", + "PSModulePath": "C:\\Users\\nhan\\Documents\\WindowsPowerShell\\Modules;C:\\Program Files\\WindowsPowerShell\\Modules;C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\Modules", + "PUBLIC": "C:\\Users\\Public", + "SESSIONNAME": "Console", + "SystemDrive": "C:", + "SystemRoot": "C:\\WINDOWS", + "TEMP": "C:\\Users\\nhan\\AppData\\Local\\Temp", + "TERM_PROGRAM": "vscode", + "TERM_PROGRAM_VERSION": "1.60.0", + "TMP": "C:\\Users\\nhan\\AppData\\Local\\Temp", + "TRACE_ID": "cbd3025f1135a5fa", + "USERDOMAIN": "DESKTOP-TILU55O", + "USERDOMAIN_ROAMINGPROFILE": "DESKTOP-TILU55O", + "USERNAME": "nhan", + "USERPROFILE": "C:\\Users\\nhan", + "VSCODE_GIT_ASKPASS_MAIN": "c:\\Users\\nhan\\AppData\\Local\\Programs\\Microsoft VS Code\\resources\\app\\extensions\\git\\dist\\askpass-main.js", + "VSCODE_GIT_ASKPASS_NODE": "C:\\Users\\nhan\\AppData\\Local\\Programs\\Microsoft VS Code\\Code.exe", + "VSCODE_GIT_IPC_HANDLE": "\\\\.\\pipe\\vscode-git-d5d8071aa9-sock", + "windir": "C:\\WINDOWS", + "_prog": "node", + "__NEXT_PROCESSED_ENV": "true" + }, + "sharedObjects": [ + "C:\\Program Files\\nodejs\\node.exe", + "C:\\WINDOWS\\SYSTEM32\\ntdll.dll", + "C:\\WINDOWS\\System32\\KERNEL32.DLL", + "C:\\WINDOWS\\System32\\KERNELBASE.dll", + "C:\\WINDOWS\\System32\\WS2_32.dll", + "C:\\WINDOWS\\System32\\RPCRT4.dll", + "C:\\WINDOWS\\System32\\ADVAPI32.dll", + "C:\\WINDOWS\\SYSTEM32\\dbghelp.dll", + "C:\\WINDOWS\\System32\\msvcrt.dll", + "C:\\WINDOWS\\System32\\ucrtbase.dll", + "C:\\WINDOWS\\System32\\sechost.dll", + "C:\\WINDOWS\\System32\\USER32.dll", + "C:\\WINDOWS\\System32\\win32u.dll", + "C:\\WINDOWS\\System32\\GDI32.dll", + "C:\\WINDOWS\\System32\\gdi32full.dll", + "C:\\WINDOWS\\System32\\msvcp_win.dll", + "C:\\WINDOWS\\System32\\PSAPI.DLL", + "C:\\WINDOWS\\System32\\CRYPT32.dll", + "C:\\WINDOWS\\System32\\bcrypt.dll", + "C:\\WINDOWS\\SYSTEM32\\IPHLPAPI.DLL", + "C:\\WINDOWS\\SYSTEM32\\USERENV.dll", + "C:\\WINDOWS\\SYSTEM32\\WINMM.dll", + "C:\\WINDOWS\\System32\\IMM32.DLL", + "C:\\WINDOWS\\SYSTEM32\\powrprof.dll", + "C:\\WINDOWS\\SYSTEM32\\UMPDC.dll", + "C:\\WINDOWS\\SYSTEM32\\CRYPTBASE.DLL", + "C:\\WINDOWS\\system32\\uxtheme.dll", + "C:\\WINDOWS\\System32\\combase.dll", + "C:\\WINDOWS\\system32\\mswsock.dll", + "C:\\WINDOWS\\SYSTEM32\\kernel.appcore.dll", + "C:\\WINDOWS\\System32\\bcryptprimitives.dll", + "C:\\WINDOWS\\System32\\NSI.dll", + "C:\\WINDOWS\\SYSTEM32\\dhcpcsvc6.DLL", + "C:\\WINDOWS\\SYSTEM32\\dhcpcsvc.DLL", + "C:\\WINDOWS\\SYSTEM32\\DNSAPI.dll", + "C:\\WINDOWS\\system32\\napinsp.dll", + "C:\\WINDOWS\\system32\\pnrpnsp.dll", + "C:\\WINDOWS\\system32\\wshbth.dll", + "C:\\WINDOWS\\system32\\NLAapi.dll", + "C:\\WINDOWS\\System32\\winrnr.dll", + "C:\\Windows\\System32\\rasadhlp.dll", + "C:\\WINDOWS\\System32\\fwpuclnt.dll" + ] +} \ No newline at end of file diff --git a/src/components/common/Author/Author.module.scss b/src/components/common/Author/Author.module.scss index 8d903546f..5a2dad969 100644 --- a/src/components/common/Author/Author.module.scss +++ b/src/components/common/Author/Author.module.scss @@ -2,11 +2,15 @@ .authorWarper{ @apply flex flex-row items-center; - .authorImage{ + .authorImage { width:3.2rem; height:3.2rem; border-radius:3.2rem; + div{ + min-width:3.2rem !important; + } } + .authorName{ margin-left:1rem; color:var(--text-label); diff --git a/src/components/common/Author/Author.tsx b/src/components/common/Author/Author.tsx index 1cf8e52af..6ec347b2c 100644 --- a/src/components/common/Author/Author.tsx +++ b/src/components/common/Author/Author.tsx @@ -1,6 +1,7 @@ import React from 'react'; import s from './Author.module.scss'; import classNames from 'classnames'; +import ImgWithLink from "../ImgWithLink/ImgWithLink"; interface Props { image:string, @@ -11,7 +12,9 @@ const Author = ({image,name}:Props) =>{ return (
- +
+ +
{name}
) diff --git a/src/components/common/Banner/Banner.tsx b/src/components/common/Banner/Banner.tsx index 1dbc04d9f..3b0c0fe85 100644 --- a/src/components/common/Banner/Banner.tsx +++ b/src/components/common/Banner/Banner.tsx @@ -1,3 +1,4 @@ +import { TOptionsEvents } from 'keen-slider' import React, { memo } from 'react' import CarouselCommon from '../CarouselCommon/CarouselCommon' import BannerItem, { BannerItemProps } from './BannerItem/BannerItem' @@ -6,18 +7,29 @@ interface Props { data: BannerItemProps[], } -const option = { +const option: TOptionsEvents = { slidesPerView: 1, - breakpoints: {} + mode: 'free', } const Banner = memo(({ data }: Props) => { + if (data.length === 1) { + const item = data[0] + return + } return ( data={data} itemKey="banner" Component={BannerItem} option={option} - isDot = {true} + isDot={true} /> ) }) diff --git a/src/components/common/Banner/BannerItem/BannerItem.module.scss b/src/components/common/Banner/BannerItem/BannerItem.module.scss index 72690f92d..5a37e252a 100644 --- a/src/components/common/Banner/BannerItem/BannerItem.module.scss +++ b/src/components/common/Banner/BannerItem/BannerItem.module.scss @@ -1,16 +1,18 @@ @import "../../../../styles/utilities"; .bannerItem { - @apply bg-primary-light custom-border-radius-lg overflow-hidden; - @screen md { - border: 1px solid var(--primary); - } + @apply bg-primary-light shape-common-lg overflow-hidden; + padding: 0; &.large { margin-bottom: 2.8rem; + background-image: url("./pattern.svg"); + background-repeat: repeat; + background-size: auto; .inner { + background-size: cover; + background-position: center bottom; @screen xl { - @apply bg-right-bottom; - background-size: unset; + background-position: right bottom; } } } @@ -19,13 +21,10 @@ background-size: 90%; background-position: right -500% bottom 0%; .content { - background-image: linear-gradient( - to right, - rgb(227, 242, 233, 0.9), - rgb(227, 242, 233, 0.5) 80%, - rgb(227, 242, 233, 0) - ); - padding: 1.6rem; + background-image: linear-gradient(to right, rgb(227, 242, 233) 63%, rgb(227, 242, 233, 0)); + + padding: 2rem; + padding-bottom: 4rem; max-width: 37rem; @screen md { max-width: 49.6rem; @@ -38,9 +37,6 @@ } .subHeading { @apply sub-headline; - @screen md { - @apply caption; - } } } diff --git a/src/components/common/Banner/BannerItem/pattern.svg b/src/components/common/Banner/BannerItem/pattern.svg new file mode 100644 index 000000000..fab63f17f --- /dev/null +++ b/src/components/common/Banner/BannerItem/pattern.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/common/ButtonCommon/ButtonCommon.module.scss b/src/components/common/ButtonCommon/ButtonCommon.module.scss index c7b9f1ffa..a0c33947d 100644 --- a/src/components/common/ButtonCommon/ButtonCommon.module.scss +++ b/src/components/common/ButtonCommon/ButtonCommon.module.scss @@ -1,102 +1,127 @@ @import "../../../styles/utilities"; .buttonCommon { - @apply custom-border-radius bg-primary transition-all duration-200 text-white font-bold; - display: flex; - justify-content: center; - align-items: center; - padding: 1rem 2rem; - @screen md { - padding: 0.8rem 1.6rem; - } - @screen lg { - padding: 0.8rem 3.2rem; - } - &:disabled { - filter: brightness(0.9); - cursor: not-allowed; - color: var(--disabled); - } - &:hover { - @apply shadow-md; - &:not(:disabled) { + @apply shape-common; + .inner { + padding: 1rem 2rem; + @apply bg-primary transition-all duration-200 text-white font-bold; + display: flex; + justify-content: center; + align-items: center; + @screen md { + padding: 1.6rem 1.6rem; + } + @screen lg { + padding: 1.6rem 3.2rem; + } + &:disabled { + filter: brightness(0.9); + cursor: not-allowed; + color: var(--disabled); + } + &:hover { + @apply shadow-md; + &:not(:disabled) { + filter: brightness(1.05); + } + } + &:focus { + outline: none; filter: brightness(1.05); } + &:focus-visible { + outline: 2px solid var(--text-active); + } } - &:focus { - outline: none; - filter: brightness(1.05); - } - &:focus-visible { - outline: 2px solid var(--text-active); - } - &.loading { - &::before { - content: ""; - border-radius: 50%; - width: 1.6rem; - height: 1.6rem; - border: 3px solid rgba(170, 170, 170, 0.5); - border-top: 3px solid var(--white); - -webkit-animation: spin 2s linear infinite; - animation: spin 2s linear infinite; - margin-right: 0.8rem; + .inner { + &::after { + content: ""; + border-radius: 50%; + width: 1.6rem; + height: 1.6rem; + border: 3px solid rgba(170, 170, 170, 0.5); + border-top: 3px solid var(--white); + -webkit-animation: spin 2s linear infinite; + animation: spin 2s linear infinite; + margin-right: 0.8rem; + } } } &.light { - @apply text-base bg-white; - border: 1px solid var(--text-active); + @apply shape-common-border; + &::before { + background-color: var(--text-active); + } + .inner { + @apply text-base bg-white; + } &.loading { - &::before { - border-top-color: var(--primary); + .inner { + &::after { + border-top-color: var(--primary); + } } } } &.lightBorderNone { - @apply bg-white text-primary; + .inner { + @apply bg-white text-primary; + } &.loading { - &::before { + .inner::after { border-top-color: var(--primary); } } } &.ghost { - @apply bg-white text-primary; - border: 1px solid var(--primary); + @apply shape-common-border; + .inner { + @apply bg-white text-primary; + } + &::before { + background-color: var(--primary); + } &.loading { - &::before { + .inner::after { border-top-color: var(--text-active); } } } &.onlyIcon { - padding: 0.8rem; - .icon { - margin: 0; + .inner { + padding: 1rem; + @screen md { + padding: 1.6rem; + } + .icon { + margin: 0; + } } } &.large { - padding: 1rem 1.5rem; - &.onlyIcon { - padding: 1rem; - } - @screen md { - padding: 1.6rem 3.2rem; + .inner { + padding: 1rem 1.6rem; &.onlyIcon { - padding: 1.6rem; + padding: 1rem; + } + @screen md { + padding: 1.6rem 3.2rem; + &.onlyIcon { + padding: 1.6rem; + } + } + @screen lg { + padding: 1.6rem 4.8rem; } } - @screen lg { - padding: 1.6rem 4.8rem; - } &.loading { - &::before { + .inner::before { width: 2.4rem; height: 2.4rem; } @@ -104,16 +129,21 @@ } &.preserve { - flex-direction: row-reverse; - .icon { - margin: 0 0 0 1.6rem; + .inner { + flex-direction: row-reverse; + .icon { + margin: 0 0 0 1.6rem; + } } } .icon { margin: 0 1.6rem 0 0; - svg path { - fill: currentColor; + svg { + height: 2rem; + path { + fill: currentColor; + } } } } diff --git a/src/components/common/ButtonCommon/ButtonCommon.tsx b/src/components/common/ButtonCommon/ButtonCommon.tsx index 5b943f65b..965e9519e 100644 --- a/src/components/common/ButtonCommon/ButtonCommon.tsx +++ b/src/components/common/ButtonCommon/ButtonCommon.tsx @@ -27,10 +27,12 @@ const ButtonCommon = memo(({ type = 'primary', size = 'default', loading = false disabled={disabled} onClick={onClick} > - { - icon && {icon} - } - {children} +
+ { + icon && {icon} + } + {children} +
) }) diff --git a/src/components/common/CardBlog/CardBlog.module.scss b/src/components/common/CardBlog/CardBlog.module.scss index 6e62ed5ff..f9d1b58e5 100644 --- a/src/components/common/CardBlog/CardBlog.module.scss +++ b/src/components/common/CardBlog/CardBlog.module.scss @@ -4,8 +4,6 @@ @apply inline-flex flex-col justify-start; max-width: 39.2rem; .image { - width: 100%; - max-height: 22rem; border-radius: 2.4rem; &:hover { cursor: pointer; @@ -13,6 +11,9 @@ img{ border-radius: 2.4rem; } + > div{ + min-height: 22rem; + } } .title { padding: 1.6rem 0.8rem 0.4rem 0.8rem; diff --git a/src/components/common/CardBlog/CardBlog.tsx b/src/components/common/CardBlog/CardBlog.tsx index 314a6a1fd..a44f45494 100644 --- a/src/components/common/CardBlog/CardBlog.tsx +++ b/src/components/common/CardBlog/CardBlog.tsx @@ -2,7 +2,9 @@ import Link from 'next/link' import React from 'react' import { ROUTE } from 'src/utils/constanst.utils' import { BlogProps } from 'src/utils/types.utils' +import { ImgWithLink } from '..' import s from './CardBlog.module.scss' + export interface BlogCardProps extends BlogProps { // todo: edit when intergrate API @@ -14,7 +16,7 @@ const CardBlog = ({ imageSrc, title, description, slug }: BlogCardProps) => {
- image cardblog +
diff --git a/src/components/common/CarouselCommon/CarouselCommon.module.scss b/src/components/common/CarouselCommon/CarouselCommon.module.scss index ef2671947..4b3c7d537 100644 --- a/src/components/common/CarouselCommon/CarouselCommon.module.scss +++ b/src/components/common/CarouselCommon/CarouselCommon.module.scss @@ -9,6 +9,7 @@ width: 64px; height: 64px; border-radius: .8rem; + backdrop-filter: saturate(180%) blur(10px); &:focus { outline: none; } diff --git a/src/components/common/CarouselCommon/CarouselCommon.tsx b/src/components/common/CarouselCommon/CarouselCommon.tsx index 8762192cd..84b0f8cfb 100644 --- a/src/components/common/CarouselCommon/CarouselCommon.tsx +++ b/src/components/common/CarouselCommon/CarouselCommon.tsx @@ -15,6 +15,7 @@ export interface CarouselCommonProps { option: TOptionsEvents keenClassname?: string isPadding?: boolean + defaultComponentProps?: object } const CarouselCommon = ({ @@ -25,7 +26,8 @@ const CarouselCommon = ({ isPadding = false, isArrow = true, isDot = false, - option: { slideChanged,slidesPerView=1, ...sliderOption }, + defaultComponentProps, + option: { slideChanged,slidesPerView, ...sliderOption }, }: CarouselCommonProps) => { const [currentSlide, setCurrentSlide] = React.useState(0) const [dotArr, setDotArr] = React.useState([]) @@ -68,11 +70,14 @@ const CarouselCommon = ({ [s.isPadding]: isPadding, })} > - {data.map((props, index) => ( -
- -
- ))} + {data?.map((props, index) => { + const allProps = defaultComponentProps ? { ...props, ...defaultComponentProps } : props + return ( +
+ +
+ ) + })} {slider && isArrow && ( <> diff --git a/src/components/common/CartDrawer/CartDrawer.module.scss b/src/components/common/CartDrawer/CartDrawer.module.scss index 126028d3c..8d97f971e 100644 --- a/src/components/common/CartDrawer/CartDrawer.module.scss +++ b/src/components/common/CartDrawer/CartDrawer.module.scss @@ -4,9 +4,6 @@ .cartDrawer { @apply flex flex-col h-full; .body { - @apply overflow-y-auto overflow-x-hidden h-full custom-scroll; - } - .bottom { - padding-top: 1.6rem; + @apply flex flex-col overflow-y-auto overflow-x-hidden h-full custom-scroll; } } \ No newline at end of file diff --git a/src/components/common/CartDrawer/CartDrawer.tsx b/src/components/common/CartDrawer/CartDrawer.tsx index 0a432bb65..9410cfd9c 100644 --- a/src/components/common/CartDrawer/CartDrawer.tsx +++ b/src/components/common/CartDrawer/CartDrawer.tsx @@ -23,9 +23,9 @@ const CartDrawer = ({ visible, onClose }: Props) => { -
+
- +
diff --git a/src/components/common/CartDrawer/components/CartCheckoutButton/CartCheckoutButton.module.scss b/src/components/common/CartDrawer/components/CartCheckoutButton/CartCheckoutButton.module.scss index 3f90bffbd..e4fceb2d1 100644 --- a/src/components/common/CartDrawer/components/CartCheckoutButton/CartCheckoutButton.module.scss +++ b/src/components/common/CartDrawer/components/CartCheckoutButton/CartCheckoutButton.module.scss @@ -1,5 +1,7 @@ .cartCheckoutButton { + display: block; padding: 1.6rem; + width: 100%; button { width: 100%; } diff --git a/src/components/common/CartDrawer/components/CartCheckoutButton/CartCheckoutButton.tsx b/src/components/common/CartDrawer/components/CartCheckoutButton/CartCheckoutButton.tsx index 0cd7d00a2..97cb3e0eb 100644 --- a/src/components/common/CartDrawer/components/CartCheckoutButton/CartCheckoutButton.tsx +++ b/src/components/common/CartDrawer/components/CartCheckoutButton/CartCheckoutButton.tsx @@ -1,12 +1,21 @@ import React, { memo } from 'react'; import { ButtonCommon } from 'src/components/common'; import s from './CartCheckoutButton.module.scss'; +import Link from 'next/link' +import { ROUTE } from 'src/utils/constanst.utils'; -const CartCheckoutButton = memo(() => { +interface Props { + onClose: () => void +} + + +const CartCheckoutButton = memo(({ onClose }: Props) => { return ( -
- Check out - Rp 120.500 -
+ + + Check out - Rp 120.500 + + ) }) diff --git a/src/components/common/CartDrawer/components/CartRecommendation/CartRecommendation.module.scss b/src/components/common/CartDrawer/components/CartRecommendation/CartRecommendation.module.scss index 88664460c..9095aadc1 100644 --- a/src/components/common/CartDrawer/components/CartRecommendation/CartRecommendation.module.scss +++ b/src/components/common/CartDrawer/components/CartRecommendation/CartRecommendation.module.scss @@ -1,7 +1,8 @@ -@import '../../../../../styles/utilities'; +@import "../../../../../styles/utilities"; .cartRecommendation { @apply w-full bg-background-gray; + padding-bottom: 5.4rem; .top { @apply flex justify-between items-center; padding: 1.6rem; @@ -12,14 +13,10 @@ .productCardWarpper { padding-left: 1.6rem; :global(.customArrow) { - @apply bg-line; - @screen lg { - &:global(.leftArrow) { - left: calc(-6.4rem - 2rem); - } - &:global(.rightArrow) { - right: calc(-6.4rem - 2rem); - } + @apply bg-line shadow-md; + opacity: 0.8; + &:global(.rightArrow) { + right: 1rem; } } } diff --git a/src/components/common/CartDrawer/components/CartRecommendation/CartRecommendation.tsx b/src/components/common/CartDrawer/components/CartRecommendation/CartRecommendation.tsx index bbc40647e..b275ceda5 100644 --- a/src/components/common/CartDrawer/components/CartRecommendation/CartRecommendation.tsx +++ b/src/components/common/CartDrawer/components/CartRecommendation/CartRecommendation.tsx @@ -7,14 +7,20 @@ import { PRODUCT_DATA_TEST } from 'src/utils/demo-data'; import s from './CartRecommendation.module.scss'; const option: TOptionsEvents = { - slidesPerView: 2, + slidesPerView: 1.5, mode: 'free', breakpoints: { '(min-width: 640px)': { - slidesPerView: 1, + slidesPerView: 1.5, }, '(min-width: 768px)': { slidesPerView: 2.5, + }, + '(min-width: 1008px)': { + slidesPerView: 2.2, + }, + '(min-width: 1440px)': { + slidesPerView: 2.5, } }, } @@ -34,6 +40,7 @@ const CartRecommendation = () => { Component={ProductCard} itemKey="cart-recommendation" option={option} + defaultComponentProps={{ isSingleButton: true }} /> diff --git a/src/components/common/DrawerCommon/DrawerCommon.module.scss b/src/components/common/DrawerCommon/DrawerCommon.module.scss index d118d45e8..0fc8b5b35 100644 --- a/src/components/common/DrawerCommon/DrawerCommon.module.scss +++ b/src/components/common/DrawerCommon/DrawerCommon.module.scss @@ -1,21 +1,40 @@ @import "../../../styles/utilities"; .drawerCommon { - @apply fixed flex justify-end transition-all duration-200; + @apply fixed flex justify-end transition-all duration-500; overflow: hidden; top: 0; right: 0; height: 100vh; - width: 90%; - box-shadow: -3px 0 10px rgba(0, 0, 0, 0.15); + width: 100%; z-index: 20000; + transform: none; + &.hide { + .innerWrap { + background: none; + } + transform: translateX(110%); + } + &.show { + .innerWrap { + background: rgba(0, 0, 0, 0.2); + animation: animateBackground 0.8s; + } + } + + .innerWrap { + @apply w-full; + } .inner { @apply flex flex-col bg-white; width: fit-content; height: 100vh; width: 100%; - margin-right: 0; + margin-left: auto; + box-shadow: -3px 0 10px rgba(0, 0, 0, 0.15); + // transform: none; + @screen md { max-width: 52rem; } @@ -39,14 +58,21 @@ overflow-y: auto; height: 100%; } - &.hide { - transform: translateX(110%); - } @screen md { - width: unset; .inner { min-width: 48rem; } } } + +@keyframes animateBackground { + 0%, + 50% { + background: none; + } + + 100% { + background: rgba(0, 0, 0, 0.2); + } +} diff --git a/src/components/common/DrawerCommon/DrawerCommon.tsx b/src/components/common/DrawerCommon/DrawerCommon.tsx index deb1af3eb..9e486dd23 100644 --- a/src/components/common/DrawerCommon/DrawerCommon.tsx +++ b/src/components/common/DrawerCommon/DrawerCommon.tsx @@ -11,22 +11,33 @@ interface Props { } const DrawerCommon = ({ title, visible, children, onClose }: Props) => { +const refInner = useRef(null) + +const handleClickOut = (e: any) => { + if (e.target.contains(refInner.current)) { + onClose() + } +} + return (
-
-
-

- {title} -

-
- +
+
+
+

+ {title} +

+
+ +
+
+
+ {children}
-
-
- {children}
diff --git a/src/components/common/Header/Header.module.scss b/src/components/common/Header/Header.module.scss index 99cd29fe0..8f1124fb8 100644 --- a/src/components/common/Header/Header.module.scss +++ b/src/components/common/Header/Header.module.scss @@ -6,20 +6,28 @@ left: 0; z-index: 9999; margin-bottom: 3.2rem; - @screen md { - @apply relative; - } + &.full { @apply shadow-none; - border: 1px solid var(--border-line); } .menu { + box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05); padding-left: 3.2rem; padding-right: 3.2rem; } .logo { @apply font-logo; } + + @screen md { + @apply relative; + &.full { + border: 1px solid var(--border-line); + } + .menu { + @apply shadow-none; + } + } } .headerSticky { @@ -33,13 +41,13 @@ transition: all 0.2s; &.show { display: block; - animation: showHeaderSticky 0.2s; + animation: showHeaderSticky 0.4s; } } @keyframes showHeaderSticky { 0% { - transform: translateY(-7rem); + transform: scale(.95); } 100% { transform: none; diff --git a/src/components/common/Header/Header.tsx b/src/components/common/Header/Header.tsx index 5b42c6aaf..d1d88adda 100644 --- a/src/components/common/Header/Header.tsx +++ b/src/components/common/Header/Header.tsx @@ -1,7 +1,6 @@ import classNames from 'classnames' import React, { memo, useEffect, useMemo, useRef, useState } from 'react' import { useModalCommon } from 'src/components/hooks' -import { isMobile } from 'src/utils/funtion.utils' import { CartDrawer } from '..' import ModalAuthenticate from '../ModalAuthenticate/ModalAuthenticate' import ModalCreateUserInfo from '../ModalCreateUserInfo/ModalCreateUserInfo' @@ -11,10 +10,11 @@ import HeaderSubMenu from './components/HeaderSubMenu/HeaderSubMenu' import HeaderSubMenuMobile from './components/HeaderSubMenuMobile/HeaderSubMenuMobile' import s from './Header.module.scss' interface props { - toggleFilter: () => void + toggleFilter: () => void, + visibleFilter: boolean } -const Header = memo(({ toggleFilter }: props) => { +const Header = memo(({ toggleFilter, visibleFilter }: props) => { const headeFullRef = useRef(null) const [isFullHeader, setIsFullHeader] = useState(true) const { visible: visibleModalAuthen, closeModal: closeModalAuthen, openModal: openModalAuthen } = useModalCommon({ initialValue: false }) @@ -29,53 +29,52 @@ const Header = memo(({ toggleFilter }: props) => { } } - const headerHeight = useMemo(() => { - return headeFullRef.current?.offsetHeight - }, [headeFullRef.current]) - useEffect(() => { const handleScroll = () => { - if (!isMobile()) { - if (!headerHeight || window.scrollY > headerHeight) { - setIsFullHeader(false) - } else { - setIsFullHeader(true) - } + if (!headeFullRef.current || window.scrollY > headeFullRef.current?.offsetHeight) { + setIsFullHeader(false) + } else { + setIsFullHeader(true) } + // if (!isMobile()) { + // } else { + // setIsFullHeader(true) + // } } window.addEventListener('scroll', handleScroll) return () => { window.removeEventListener('scroll', handleScroll) } - }, [headerHeight]) + }, [headeFullRef.current]) return ( <> -
- -
- - -
-
- -
-
+
+ +
+ + +
+
+ diff --git a/src/components/common/Header/components/HeaderHighLight/HeaderHighLight.module.scss b/src/components/common/Header/components/HeaderHighLight/HeaderHighLight.module.scss index 77e6aee82..2db143931 100644 --- a/src/components/common/Header/components/HeaderHighLight/HeaderHighLight.module.scss +++ b/src/components/common/Header/components/HeaderHighLight/HeaderHighLight.module.scss @@ -7,6 +7,7 @@ padding-top: 0.8rem; padding-bottom: 0.8rem; color: var(--white); + margin-bottom: 1.6rem; .menu { @apply flex items-center list-none; padding: 0.8rem 0; diff --git a/src/components/common/Header/components/HeaderMenu/HeaderMenu.module.scss b/src/components/common/Header/components/HeaderMenu/HeaderMenu.module.scss index 09f4dadbc..6a16505bc 100644 --- a/src/components/common/Header/components/HeaderMenu/HeaderMenu.module.scss +++ b/src/components/common/Header/components/HeaderMenu/HeaderMenu.module.scss @@ -1,37 +1,82 @@ @import "../../../../../styles/utilities"; .headerMenu { - padding-top: 1.6rem; + @apply hidden; + padding-top: 0.8rem; padding-bottom: 0.8rem; - @screen md { - @apply flex justify-between items-center; - padding-top: 0.8rem; - padding-bottom: 0.8rem; - &.full { - padding-top: 2.4rem; - padding-bottom: 2.4rem; + &.full { + @apply flex; + padding-top: 1.6rem; + @screen md { + padding-top: 0.8rem; } } + &.small { + @apply flex; + .left { + .top { + display: none; + @screen md { + display: flex; + } + } + } + } + @screen md { + @apply flex justify-between items-center; + } .left { + // margin-bottom: 3.2rem; + flex: 1; .top { @apply flex justify-between items-center; - .iconGroup{ + margin-bottom: 2rem; + @screen md { + margin-bottom: 0; + } + .iconGroup { @apply flex justify-between items-center; } .iconCart { margin-left: 1.6rem; } - .iconFilter{ + .iconFilter { + @apply relative; + .dot { + @apply absolute; + top: -0.08rem; + right: -0.2rem; + background-color: var(--negative); + width: 1.2rem; + height: 1.2rem; + border-radius: 1.2rem; + @apply hidden; + &.isShow { + @apply block; + } + } @screen md { display: none; } } } - .inputSearch { - margin-top: 2.4rem; + .searchWrap { + @apply flex items-center; + .inputSearch { + flex: 1; + } + .buttonSearch { + margin-left: 1rem; + } + @screen md { + margin: 0 1.6rem 0 4.8rem; + } @screen lg { min-width: 51.2rem; max-width: 50%; + .buttonSearch { + @apply hidden; + } } } @screen md { @@ -41,9 +86,18 @@ @apply hidden; } } - .inputSearch { - margin-left: 4.8rem; - margin-top: 0; + } + } + .btnCart { + all: unset; + cursor: pointer; + &:focus-visible { + outline: 2px solid #000; + } + &:hover { + svg path { + fill: var(--primary); + opacity: 0.8; } } } @@ -70,24 +124,11 @@ } } } - .btnCart { - all: unset; - cursor: pointer; - &:focus-visible { - outline: 2px solid #000; - } - &:hover { - svg path { - fill: var(--primary); - opacity: 0.8; - } - } - } } } @screen xl { .iconFilterDesk { - display:none; + display: none; } } } diff --git a/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx b/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx index 02eb6466d..74ebc1187 100644 --- a/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx +++ b/src/components/common/Header/components/HeaderMenu/HeaderMenu.tsx @@ -1,26 +1,30 @@ import classNames from 'classnames' import Link from 'next/link' +import { useRouter } from 'next/router' import { memo, useMemo } from 'react' +import { ButtonCommon } from 'src/components/common' import InputSearch from 'src/components/common/InputSearch/InputSearch' import MenuDropdown from 'src/components/common/MenuDropdown/MenuDropdown' import { IconBuy, IconFilter, IconHeart, IconHistory, IconUser } from 'src/components/icons' import { ACCOUNT_TAB, FILTER_PAGE, QUERY_KEY, ROUTE } from 'src/utils/constanst.utils' import Logo from '../../../Logo/Logo' import s from './HeaderMenu.module.scss' -import { useRouter } from 'next/router' interface Props { children?: any, - isFull: boolean, + isFull?: boolean, + isStickyHeader?: boolean, + visibleFilter?: boolean, openModalAuthen: () => void, openModalInfo: () => void, - toggleFilter:() => void, - toggleCart:() => void, + toggleFilter: () => void, + toggleCart: () => void, } - -const HeaderMenu = memo(({ isFull, openModalAuthen, openModalInfo, toggleFilter, toggleCart }: Props) => { +const HeaderMenu = memo(({ isFull, isStickyHeader, visibleFilter, openModalAuthen, openModalInfo, toggleFilter, toggleCart }: Props) => { const router = useRouter() + + const optionMenu = useMemo(() => [ { onClick: openModalAuthen, @@ -30,6 +34,18 @@ const HeaderMenu = memo(({ isFull, openModalAuthen, openModalInfo, toggleFilter, onClick: openModalInfo, name: 'Create User Info (Demo)', }, + { + link: '/account-not-login', + name: 'Account Not Login (Demo)', + }, + { + link: '/demo', + name: 'Notifications Empty (Demo)', + }, + { + link: ROUTE.NOTIFICATION, + name: 'Notifications', + }, { link: ROUTE.ACCOUNT, name: 'Account', @@ -41,26 +57,36 @@ const HeaderMenu = memo(({ isFull, openModalAuthen, openModalInfo, toggleFilter, ], [openModalAuthen]) return ( -
+
- +
{ FILTER_PAGE.includes(router.pathname) && ( ) } -
-
- +
+
+ +
+
+ Search +
    diff --git a/src/components/common/Header/components/HeaderSubMenu/HeaderSubMenu.module.scss b/src/components/common/Header/components/HeaderSubMenu/HeaderSubMenu.module.scss index 3d8016c6b..231ac8300 100644 --- a/src/components/common/Header/components/HeaderSubMenu/HeaderSubMenu.module.scss +++ b/src/components/common/Header/components/HeaderSubMenu/HeaderSubMenu.module.scss @@ -5,6 +5,7 @@ @screen md { @apply block; padding-bottom: 2.4rem; + margin-top: 1.6rem; transform: none; height: unset; @screen lg { diff --git a/src/components/common/Header/components/HeaderSubMenuMobile/HeaderSubMenuMobile.module.scss b/src/components/common/Header/components/HeaderSubMenuMobile/HeaderSubMenuMobile.module.scss index 230d9e59e..5acab44b4 100644 --- a/src/components/common/Header/components/HeaderSubMenuMobile/HeaderSubMenuMobile.module.scss +++ b/src/components/common/Header/components/HeaderSubMenuMobile/HeaderSubMenuMobile.module.scss @@ -4,30 +4,32 @@ @apply fixed w-full bg-white; bottom: 0; left: 0; - padding: 2rem 1rem; + padding: 0 1rem 1rem; border-top: 1px solid var(--border-line); box-shadow: -5px 6px 10px rgba(0, 0, 0, 0.2); z-index: 9999; .menu { - @apply grid grid-cols-4; + @apply grid grid-cols-5; li { a { @apply transition-all duration-200 no-underline; - &:hover { - color: var(--primary); - } + -webkit-tap-highlight-color: unset; } .menuItem { @apply flex flex-col justify-center items-center sm-label; + padding-top: 1rem; + border-top: 2px solid transparent; .icon { position: relative; margin-bottom: 0.5rem; + height: 3rem; svg path { fill: currentColor; } } &.active { @apply text-primary; + border-top: 2px solid var(--primary); } &.dot { .icon { diff --git a/src/components/common/Header/components/HeaderSubMenuMobile/HeaderSubMenuMobile.tsx b/src/components/common/Header/components/HeaderSubMenuMobile/HeaderSubMenuMobile.tsx index d2cf1bf3e..7537f7b8e 100644 --- a/src/components/common/Header/components/HeaderSubMenuMobile/HeaderSubMenuMobile.tsx +++ b/src/components/common/Header/components/HeaderSubMenuMobile/HeaderSubMenuMobile.tsx @@ -2,7 +2,7 @@ import classNames from 'classnames' import Link from 'next/link' import { useRouter } from 'next/router' import { memo } from 'react' -import { IconHeart, IconHome, IconShopping, IconUser } from 'src/components/icons' +import { IconHeart, IconHome, IconNoti, IconShopping, IconUser } from 'src/components/icons' import { ACCOUNT_TAB, QUERY_KEY, ROUTE } from 'src/utils/constanst.utils' import s from './HeaderSubMenuMobile.module.scss' @@ -11,7 +11,6 @@ const OPTION_MENU = [ link: ROUTE.HOME, name: 'Home', icon: , - isMarked: true, }, { link: ROUTE.PRODUCTS, @@ -25,6 +24,12 @@ const OPTION_MENU = [ icon: , isMarked: false, }, + { + link: ROUTE.NOTIFICATION, + name: 'Notifications', + icon: , + isMarked: true, + }, { link: ROUTE.ACCOUNT, name: 'Account', diff --git a/src/components/common/ImgWithLink/ImgWithLink.tsx b/src/components/common/ImgWithLink/ImgWithLink.tsx index 62a30fa45..212e45583 100644 --- a/src/components/common/ImgWithLink/ImgWithLink.tsx +++ b/src/components/common/ImgWithLink/ImgWithLink.tsx @@ -6,16 +6,17 @@ import { BLUR_DATA_IMG } from 'src/utils/constanst.utils' export interface ImgWithLinkProps { src: string, alt?: string, + blurDataURL?: string, } -const ImgWithLink = ({ src, alt }: ImgWithLinkProps) => { +const ImgWithLink = ({ src, alt, blurDataURL = BLUR_DATA_IMG }: ImgWithLinkProps) => { return (
    {alt}
    ) diff --git a/src/components/common/InputCommon/InputCommon.module.scss b/src/components/common/InputCommon/InputCommon.module.scss index 6b12d2bbd..5471b2169 100644 --- a/src/components/common/InputCommon/InputCommon.module.scss +++ b/src/components/common/InputCommon/InputCommon.module.scss @@ -15,10 +15,11 @@ .icon + .inputCommon { padding-left: 4.8rem; } - + .inputCommon { - @apply block w-full transition-all duration-200 rounded bg-white; - padding: 1.2rem 1.6rem; + @apply block w-full transition-all duration-200 bg-white; + border-radius: .8rem; + padding: 1.6rem; border: 1px solid var(--border-line); &:hover, &:focus, @@ -31,24 +32,6 @@ &::placeholder { @apply text-label; } - - &.custom { - @apply custom-border-radius; - border: 1px solid transparent; - background: var(--gray); - &:hover, - &:focus, - &:active { - border: 1px solid var(--primary); - } - } - &.bgTransparent { - background: rgb(227, 242, 233, 0.3); - color: var(--white); - &::placeholder { - color: var(--white); - } - } } &.preserve { @@ -91,4 +74,27 @@ color: var(--negative); margin-top: 0.4rem; } + + &.custom { + @apply shape-common; + .inputCommon { + border: none; + background: var(--background-gray); + &:hover, + &:focus, + &:active { + @apply shadow-md; + border: none; + } + } + } + &.bgTransparent { + .inputCommon { + background: rgb(227, 242, 233, 0.3); + color: var(--white); + &::placeholder { + color: var(--white); + } + } + } } diff --git a/src/components/common/InputCommon/InputCommon.tsx b/src/components/common/InputCommon/InputCommon.tsx index 0389c99b3..7ef9d886f 100644 --- a/src/components/common/InputCommon/InputCommon.tsx +++ b/src/components/common/InputCommon/InputCommon.tsx @@ -1,12 +1,12 @@ import classNames from 'classnames'; -import React, { forwardRef, useImperativeHandle, useMemo, useRef, useState } from 'react'; -import { IconCheck, IconError, IconPassword, IconPasswordCross } from 'src/components/icons'; +import React, { forwardRef, useImperativeHandle, useMemo, useRef } from 'react'; +import { IconCheck, IconError } from 'src/components/icons'; import { KEY } from 'src/utils/constanst.utils'; import s from './InputCommon.module.scss'; type Ref = { focus: () => void - getValue: () => string | number + getValue: () => string | number } | null; interface Props { children?: React.ReactNode, @@ -63,6 +63,9 @@ const InputCommon = forwardRef(({ value, placeholder, type, styleTyp return (
    (({ value, placeholder, type, styleTyp placeholder={placeholder} onChange={handleChange} onKeyDown={handleKeyDown} - className={classNames({ - [s.inputCommon]: true, - [s[styleType]]: true, - [s.bgTransparent]: backgroundTransparent - })} + className={s.inputCommon} />
    { diff --git a/src/components/common/Layout/Layout.module.scss b/src/components/common/Layout/Layout.module.scss index 30e4a077d..679b0b48f 100644 --- a/src/components/common/Layout/Layout.module.scss +++ b/src/components/common/Layout/Layout.module.scss @@ -4,6 +4,9 @@ min-height: 100vh; > main { flex: 1; + width: 100%; + max-width: min( 100%, 1536px); + margin: auto; } } .filter{ diff --git a/src/components/common/Layout/Layout.tsx b/src/components/common/Layout/Layout.tsx index 28d83bc94..94d2f3320 100644 --- a/src/components/common/Layout/Layout.tsx +++ b/src/components/common/Layout/Layout.tsx @@ -3,7 +3,7 @@ import { useRouter } from 'next/router' import { FC } from 'react' import { useModalCommon } from 'src/components/hooks' import { BRAND, CATEGORY, FEATURED, FILTER_PAGE } from 'src/utils/constanst.utils' -import { CustomShapeSvg } from '..' +import { ScrollToTop } from '..' import Footer from '../Footer/Footer' import Header from '../Header/Header' import MenuNavigationProductList from '../MenuNavigationProductList/MenuNavigationProductList' @@ -18,7 +18,7 @@ interface Props { const Layout: FC = ({ children }) => { const { locale = 'en-US', pathname } = useRouter() const { visible: visibleFilter, openModal: openFilter, closeModal: closeFilter } = useModalCommon({ initialValue: false }) - + const toggleFilter = () => { if (visibleFilter) { closeFilter() @@ -28,16 +28,16 @@ const Layout: FC = ({ children }) => { } return ( -
    -
    -
    {children}
    - - - { - FILTER_PAGE.includes(pathname) && (
    ) - } -
    -
    +
    +
    +
    {children}
    +
    + + { + FILTER_PAGE.includes(pathname) && (
    ) + } +
    +
    ) diff --git a/src/components/common/ListProductWithInfo/ListProductWithInfo.module.scss b/src/components/common/ListProductWithInfo/ListProductWithInfo.module.scss index ddd8ed901..de7b96d3d 100644 --- a/src/components/common/ListProductWithInfo/ListProductWithInfo.module.scss +++ b/src/components/common/ListProductWithInfo/ListProductWithInfo.module.scss @@ -3,9 +3,14 @@ .listProductWithInfo { background-color: var(--background); border-top: 1rem solid var(--gray); - border-bottom: 1rem solid var(--gray); padding-top: 6rem; padding-bottom: 6rem; + &.borderBottom { + border-bottom: 1rem solid var(--gray); + @screen lg { + border-bottom: none; + } + } @screen lg { @apply flex spacing-horizontal-left; padding-top: 5.6rem; @@ -17,8 +22,11 @@ @apply spacing-horizontal-left; @screen lg { max-width: 75%; - @apply custom-border-radius-lg bg-white; - padding: 4rem .8rem; + padding: 0 0.8rem; + > div > div { + @apply shape-common-lg bg-white; + padding: 4rem 0; + } :global(.customArrow) { @screen lg { &:global(.leftArrow) { @@ -31,18 +39,8 @@ } } @screen xl { - padding: 4rem 2.4rem; + padding: 0 2.4rem; max-width: 80%; - :global(.customArrow) { - @screen lg { - &:global(.leftArrow) { - left: calc(-6.4rem + 1rem); - } - &:global(.rightArrow) { - right: calc(-6.4rem + 1rem); - } - } - } } } } diff --git a/src/components/common/ListProductWithInfo/ListProductWithInfo.tsx b/src/components/common/ListProductWithInfo/ListProductWithInfo.tsx index 66b8253d1..0bbd1df65 100644 --- a/src/components/common/ListProductWithInfo/ListProductWithInfo.tsx +++ b/src/components/common/ListProductWithInfo/ListProductWithInfo.tsx @@ -1,3 +1,4 @@ +import classNames from 'classnames'; import { TOptionsEvents } from 'keen-slider'; import React from 'react'; import CarouselCommon from '../CarouselCommon/CarouselCommon'; @@ -9,6 +10,7 @@ interface Props { data: ProductCardProps[], title: string, subtitle?: string, + hasBorderBottomMobile?: boolean, } const OPTION_DEFAULT: TOptionsEvents = { slidesPerView: 2, @@ -18,20 +20,29 @@ const OPTION_DEFAULT: TOptionsEvents = { slidesPerView: 3, }, '(min-width: 768px)': { - slidesPerView: 4, - }, - '(min-width: 1024px)': { slidesPerView: 3, }, + '(min-width: 1008px)': { + slidesPerView: 3.5, + }, + '(min-width: 1024px)': { + slidesPerView: 2.5, + }, '(min-width: 1280px)': { + slidesPerView: 3.5, + }, + '(min-width: 1440px)': { slidesPerView: 4.5, }, }, } -const ListProductWithInfo = ({ data, title, subtitle }: Props) => { +const ListProductWithInfo = ({ data, title, subtitle, hasBorderBottomMobile }: Props) => { return ( -
    +
    { + + return ( +
    +
    +
    +

    Loading...

    +
    + ) +} + +export default LoadingCommon \ No newline at end of file diff --git a/src/components/common/LoadingCommon/assets/carrot.png b/src/components/common/LoadingCommon/assets/carrot.png new file mode 100644 index 000000000..60a89d625 Binary files /dev/null and b/src/components/common/LoadingCommon/assets/carrot.png differ diff --git a/src/components/common/MenuDropdown/MenuDropdown.module.scss b/src/components/common/MenuDropdown/MenuDropdown.module.scss index 5332794ff..20b54dcaa 100644 --- a/src/components/common/MenuDropdown/MenuDropdown.module.scss +++ b/src/components/common/MenuDropdown/MenuDropdown.module.scss @@ -71,7 +71,8 @@ @apply block shadow-md; } .menuIner { - @apply rounded list-none bg-white; + @apply list-none bg-white; + border-radius: 0.8rem; border: 1px solid var(--text-active); margin-top: 0.4rem; > li { diff --git a/src/components/common/MenuNavigation/MenuNavigation.module.scss b/src/components/common/MenuNavigation/MenuNavigation.module.scss index 7535df707..6d0a06c3f 100644 --- a/src/components/common/MenuNavigation/MenuNavigation.module.scss +++ b/src/components/common/MenuNavigation/MenuNavigation.module.scss @@ -1,5 +1,9 @@ @import "../../../styles/utilities"; .menuNavigationWrapper{ + @apply hidden; + @screen md { + @apply block; + } .menuNavigationHeading{ @screen md { @apply sub-headline font-bold ; diff --git a/src/components/common/MenuNavigationProductList/MenuNavigationProductList.module.scss b/src/components/common/MenuNavigationProductList/MenuNavigationProductList.module.scss index 042785c05..353b9073e 100644 --- a/src/components/common/MenuNavigationProductList/MenuNavigationProductList.module.scss +++ b/src/components/common/MenuNavigationProductList/MenuNavigationProductList.module.scss @@ -10,8 +10,6 @@ } .menuNavigationProductListMobile{ @apply relative transition-all duration-100; - - &.isShow{ &::after{ content: ""; @@ -39,13 +37,14 @@ transform: translateY(0%) } .content{ - @apply relative w-full h-full; + @apply absolute w-full h-full; margin-top: 3rem; - padding-top: 8rem ; + padding-top: 10rem ; padding-bottom: 10rem; background-color: white; overflow-y: auto; - height: 100vh; + height: 96%; + bottom: 0; border-radius: 2.4rem 2.4rem 0 0; .head{ @apply flex justify-between fixed; @@ -53,7 +52,7 @@ left:0; margin-top: 3rem; border-radius: 2.4rem 2.4rem 0 0; - padding: 3rem 2rem 1rem 2rem; + padding: 4rem 2rem 2rem 2rem; width: 100%; background-color: white; z-index: 10000; @@ -68,7 +67,8 @@ left:0; width: 100%; background-color: white; - padding: 0 1rem 2rem 1rem; + padding: 0 1rem 3rem 1rem; + } button{ margin-top: 2rem; diff --git a/src/components/common/MenuNavigationProductList/MenuSort/MenuSort.module.scss b/src/components/common/MenuNavigationProductList/MenuSort/MenuSort.module.scss index 19bd605f8..d259611c7 100644 --- a/src/components/common/MenuNavigationProductList/MenuSort/MenuSort.module.scss +++ b/src/components/common/MenuNavigationProductList/MenuSort/MenuSort.module.scss @@ -9,7 +9,7 @@ margin: 0.8rem 0; } .menuSortList{ - margin-bottom: 2rem; + padding-bottom: 1rem; box-sizing: border-box; li{ @@ -22,7 +22,7 @@ &.active { @apply font-bold relative; color:var(--text-active); - background-color: var(--primary-lightest); + background-color: var(--gray); &::after{ @apply absolute; content:""; diff --git a/src/components/common/ModalAuthenticate/ModalAuthenticate.tsx b/src/components/common/ModalAuthenticate/ModalAuthenticate.tsx index 31ca3fb81..b35258da5 100644 --- a/src/components/common/ModalAuthenticate/ModalAuthenticate.tsx +++ b/src/components/common/ModalAuthenticate/ModalAuthenticate.tsx @@ -1,5 +1,5 @@ import classNames from 'classnames' -import React, { useState } from 'react' +import React, { useEffect, useState } from 'react' import ModalCommon from '../ModalCommon/ModalCommon' import FormLogin from './components/FormLogin/FormLogin' import FormRegister from './components/FormRegister/FormRegister' @@ -8,11 +8,20 @@ import s from './ModalAuthenticate.module.scss' interface Props { visible: boolean, closeModal: () => void, + mode?: '' | 'register' } -const ModalAuthenticate = ({ visible, closeModal }: Props) => { +const ModalAuthenticate = ({ visible, mode, closeModal }: Props) => { const [isLogin, setIsLogin] = useState(true) + useEffect(() => { + if (mode === 'register') { + setIsLogin(false) + } else { + setIsLogin(true) + } + }, [mode]) + const onSwitch = () => { setIsLogin(!isLogin) } diff --git a/src/components/common/ModalCreateUserInfo/ModalCreateUserInfo.tsx b/src/components/common/ModalCreateUserInfo/ModalCreateUserInfo.tsx index 85817c930..c3794bf81 100644 --- a/src/components/common/ModalCreateUserInfo/ModalCreateUserInfo.tsx +++ b/src/components/common/ModalCreateUserInfo/ModalCreateUserInfo.tsx @@ -1,9 +1,7 @@ -import classNames from 'classnames'; -import Link from 'next/link'; import React, { useRef } from 'react'; -import { useModalCommon } from 'src/components/hooks/useModalCommon'; +import { STATE_OPTIONS } from 'src/utils/constanst.utils'; import { CustomInputCommon } from 'src/utils/type.utils'; -import { Inputcommon } from '..'; +import { Inputcommon, SelectCommon } from '..'; import ButtonCommon from '../ButtonCommon/ButtonCommon'; import ModalCommon from '../ModalCommon/ModalCommon'; import s from './ModalCreateUserInfo.module.scss'; @@ -27,8 +25,7 @@ const ModalCreateUserInfo = ({ demoVisible: visible, demoCloseModal: closeModal
    - {/* todo: select, not input */} - +
    diff --git a/src/components/common/ProductCard/ProductCard.module.scss b/src/components/common/ProductCard/ProductCard.module.scss index 4b06936da..8e4fa644e 100644 --- a/src/components/common/ProductCard/ProductCard.module.scss +++ b/src/components/common/ProductCard/ProductCard.module.scss @@ -1,5 +1,5 @@ -.productCardWarpper{ - max-width: 20.8rem; +.productCardWarpper { + max-width: 22.4rem; min-height: 31.8rem; padding: 1.2rem 1.2rem 0 1.2rem; margin: auto; @@ -11,47 +11,53 @@ &.notSell { @apply justify-center; } - .cardTop{ + .cardTop { @apply relative; height: 13.8rem; width: 100%; - .productImage{ + .productImage { height: 100%; width: 100%; @apply flex justify-center items-center; - img{ + > div { + min-height: 13rem; + img { + object-fit: contain; + } + } + img { @apply inline; } - &:hover{ + &:hover { cursor: pointer; } } - .productLabel{ + .productLabel { @apply absolute left-0 bottom-0; } } - .cardMid{ + .cardMid { min-height: 10.4rem; @apply flex flex-col justify-between; - .cardMidTop{ - .productname{ + .cardMidTop { + .productname { font-weight: bold; color: var(--text-active); - &:hover{ + &:hover { cursor: pointer; } } - .productWeight{ + .productWeight { font-size: 1.2rem; line-height: 2rem; letter-spacing: 0.01em; color: var(--text-base); } } - .cardMidBot{ + .cardMidBot { padding-top: 0.8rem; @apply flex justify-between items-center border-t border-solid border-line; - .productPrice{ + .productPrice { @apply font-bold; font-size: 2rem; line-height: 2.8rem; @@ -59,11 +65,27 @@ } } } - .cardBot{ + .cardBot { + @apply flex justify-between items-center; min-height: 4rem; - @apply flex justify-between items-center; - .cardIcon{ + margin-top: 1.6rem; + .cardIcon { margin-right: 0.8rem; } + .cardButton { + width: 100%; + button { + width: 100%; + > div { + span { + display: -webkit-box; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + overflow-y: hidden; + text-overflow: ellipsis; + } + } + } + } } -} \ No newline at end of file +} diff --git a/src/components/common/ProductCard/ProductCard.tsx b/src/components/common/ProductCard/ProductCard.tsx index a6022efa4..af982cbd1 100644 --- a/src/components/common/ProductCard/ProductCard.tsx +++ b/src/components/common/ProductCard/ProductCard.tsx @@ -1,7 +1,9 @@ import Link from 'next/link' import React from 'react' +import { IconBuy } from 'src/components/icons' import { ROUTE } from 'src/utils/constanst.utils' import { ProductProps } from 'src/utils/types.utils' +import { ImgWithLink } from '..' import ButtonCommon from '../ButtonCommon/ButtonCommon' import ButtonIconBuy from '../ButtonIconBuy/ButtonIconBuy' import ItemWishList from '../ItemWishList/ItemWishList' @@ -11,6 +13,7 @@ import ProductNotSell from './ProductNotSell/ProductNotSell' export interface ProductCardProps extends ProductProps { buttonText?: string + isSingleButton?: boolean, } const ProductCard = ({ @@ -21,6 +24,7 @@ const ProductCard = ({ buttonText = 'Buy Now', imageSrc, isNotSell, + isSingleButton, }: ProductCardProps) => { if (isNotSell) { return
    @@ -34,7 +38,7 @@ const ProductCard = ({
    - image +
    @@ -56,12 +60,22 @@ const ProductCard = ({
    -
    - -
    -
    - {buttonText} -
    + { + isSingleButton ? +
    + }>Add to cart +
    + : + <> +
    + +
    +
    + {buttonText} +
    + + } +
    ) diff --git a/src/components/common/ProductCard/ProductNotSell/ProductNotSell.module.scss b/src/components/common/ProductCard/ProductNotSell/ProductNotSell.module.scss index 4945220a9..963a602ec 100644 --- a/src/components/common/ProductCard/ProductNotSell/ProductNotSell.module.scss +++ b/src/components/common/ProductCard/ProductNotSell/ProductNotSell.module.scss @@ -1,8 +1,12 @@ @import "../../../../styles/utilities"; .imgWrap { - img { - opacity: 0.5; + > div { + min-height: 13rem; + img { + opacity: 0.5; + object-fit: contain + } } } @@ -11,7 +15,7 @@ } .info { - @apply flex justify-center items-center custom-border-radius bg-info-light text-center; + @apply flex justify-center items-center shape-common bg-info-light text-center; padding: .8rem 1.6rem; margin-top: 1.6rem; color: var(--info); diff --git a/src/components/common/ProductCarousel/ProductCarousel.tsx b/src/components/common/ProductCarousel/ProductCarousel.tsx index 533e81ed3..8252e08a6 100644 --- a/src/components/common/ProductCarousel/ProductCarousel.tsx +++ b/src/components/common/ProductCarousel/ProductCarousel.tsx @@ -7,9 +7,9 @@ import ProductCard, { ProductCardProps } from '../ProductCard/ProductCard' import s from "./ProductCarousel.module.scss" interface ProductCarouselProps - extends Omit, 'Component'|"option"> { - option?:TOptionsEvents - } + extends Omit, 'Component' | "option"> { + option?: TOptionsEvents +} const OPTION_DEFAULT: TOptionsEvents = { slidesPerView: 2, @@ -19,11 +19,15 @@ const OPTION_DEFAULT: TOptionsEvents = { slidesPerView: 3, }, '(min-width: 768px)': { - slidesPerView: 4, + slidesPerView: 3, }, - '(min-width: 1024px)': { + '(min-width: 1008px)': { + slidesPerView: 3.5, + }, + '(min-width: 1280px)': { slidesPerView: 4.5, - },'(min-width: 1280px)': { + }, + '(min-width: 1440px)': { slidesPerView: 5.5, }, }, diff --git a/src/components/common/RecipeCard/RecipeCard.tsx b/src/components/common/RecipeCard/RecipeCard.tsx index 92ab879e9..014708935 100644 --- a/src/components/common/RecipeCard/RecipeCard.tsx +++ b/src/components/common/RecipeCard/RecipeCard.tsx @@ -1,19 +1,24 @@ import Link from 'next/link' import React from 'react' +import { ROUTE } from 'src/utils/constanst.utils' import { RecipeProps } from 'src/utils/types.utils' import s from './RecipeCard.module.scss' -export interface RecipeCardProps extends RecipeProps {} +export interface RecipeCardProps extends RecipeProps { } -const RecipeCard = ({ imageSrc, title, description }: RecipeCardProps) => { +const RecipeCard = ({ imageSrc, title, description, slug }: RecipeCardProps) => { return (
    - -
    - image recipe -
    + + +
    + image recipe +
    +
    - -
    {title}
    + + +
    {title}
    +
    {description}
    diff --git a/src/components/common/RecipeDetail/components/RecipeDetailInfo/RecipeDetailInfo.module.scss b/src/components/common/RecipeDetail/components/RecipeDetailInfo/RecipeDetailInfo.module.scss index 86b525083..94647504d 100644 --- a/src/components/common/RecipeDetail/components/RecipeDetailInfo/RecipeDetailInfo.module.scss +++ b/src/components/common/RecipeDetail/components/RecipeDetailInfo/RecipeDetailInfo.module.scss @@ -2,13 +2,16 @@ .recipeDetailInfo { @apply spacing-horizontal; - margin: 5.6rem auto; + margin: 0 auto 5.6rem; @screen md { @apply flex; + margin: 5.6rem auto; } + .img { - width: fit-content; + width: 100%; margin-top: 0; + min-height: 50rem; @screen sm-only { margin-bottom: 2rem; @@ -16,13 +19,16 @@ @screen lg { max-width: 60rem; } - img { - @apply w-full; - object-fit: contain; - max-height: 64rem; - border-radius: 2.4rem; - @screen md { - max-height: 90rem; + > div { + min-height: 64rem; + img { + // object-fit: contain; + // @apply w-full; + min-height: 64rem; + border-radius: 2.4rem; + // @screen md { + // max-height: 90rem; + // } } } } @@ -55,6 +61,9 @@ list-style: disc; margin-left: 2rem; } + a { + color: var(--info); + } } } } diff --git a/src/components/common/RecipeDetail/components/RecipeDetailInfo/RecipeDetailInfo.tsx b/src/components/common/RecipeDetail/components/RecipeDetailInfo/RecipeDetailInfo.tsx index 4d212e10a..a853ad869 100644 --- a/src/components/common/RecipeDetail/components/RecipeDetailInfo/RecipeDetailInfo.tsx +++ b/src/components/common/RecipeDetail/components/RecipeDetailInfo/RecipeDetailInfo.tsx @@ -1,4 +1,5 @@ import React from 'react' +import { ImgWithLink } from 'src/components/common' import RecipeBriefInfo from '../RecipeBriefInfo/RecipeBriefInfo' import s from './RecipeDetailInfo.module.scss' @@ -12,7 +13,7 @@ const RecipeDetailInfo = ({ }: Props) => { return (
    - Recipe +
    diff --git a/src/components/modules/product-detail/RecommendedRecipes/RecommendedRecipes.module.scss b/src/components/common/RecommendedRecipes/RecommendedRecipes.module.scss similarity index 94% rename from src/components/modules/product-detail/RecommendedRecipes/RecommendedRecipes.module.scss rename to src/components/common/RecommendedRecipes/RecommendedRecipes.module.scss index d43e2d58c..b96b7d4e7 100644 --- a/src/components/modules/product-detail/RecommendedRecipes/RecommendedRecipes.module.scss +++ b/src/components/common/RecommendedRecipes/RecommendedRecipes.module.scss @@ -1,4 +1,4 @@ -@import "../../../../styles/utilities"; +@import "../../../styles/utilities"; .recommendedRecipes { margin: 6rem auto; diff --git a/src/components/modules/product-detail/RecommendedRecipes/RecommendedRecipes.tsx b/src/components/common/RecommendedRecipes/RecommendedRecipes.tsx similarity index 100% rename from src/components/modules/product-detail/RecommendedRecipes/RecommendedRecipes.tsx rename to src/components/common/RecommendedRecipes/RecommendedRecipes.tsx diff --git a/src/components/common/RelevantBlogPosts/RelevantBlogPosts.tsx b/src/components/common/RelevantBlogPosts/RelevantBlogPosts.tsx index 1d71a6ca1..ab21590c3 100644 --- a/src/components/common/RelevantBlogPosts/RelevantBlogPosts.tsx +++ b/src/components/common/RelevantBlogPosts/RelevantBlogPosts.tsx @@ -1,6 +1,3 @@ -import image15 from '../../../../public/assets/images/image15.png' -import image16 from '../../../../public/assets/images/image16.png' -import image17 from '../../../../public/assets/images/image17.png' import classNames from 'classnames' import React from 'react' import { HeadingCommon, ViewAllItem } from 'src/components/common' @@ -22,32 +19,32 @@ const recipe:BlogCardProps[] = [ title: "Want to Lose Weight? Here are 10 DEBM Diet Guidelines for Beginners", slug: 'have-a-nice-lunch', description:"The DEBM diet stands for "+'"Delicious Happy Fun Diet"'+". This diet was popularized by Robert...", - imageSrc: image15.src, + imageSrc: "https://user-images.githubusercontent.com/46085455/133185783-8100ef4e-7a72-4dc1-bb12-2ca46b56b393.png", },{ title: "9 Ways to Make an Aloe Vera Mask at Home", slug: 'have-a-nice-lunch', description:"Aloe vera or aloe vera is a green plant, has thorns on the side of the skin with yellowish patches and...", - imageSrc: image16.src, + imageSrc: "https://user-images.githubusercontent.com/46085455/133185911-df505d10-fdcd-4312-add3-7c62ad8af71e.png", },{ title: "Don't Buy Wrong, Here Are 7 Ways to Choose a Ripe Dragon Fruit", slug: 'have-a-nice-lunch', description:"Dragon fruit is a type of fruit that is a favorite for many people because of its delicious and fresh...", - imageSrc: image17.src, + imageSrc: "https://user-images.githubusercontent.com/46085455/133185959-7ad75580-ca6d-4684-83d9-3f64500bbc97.png", },{ title: "Want to Lose Weight? Here are 10 DEBM Diet Guidelines for Beginners", slug: 'have-a-nice-lunch', description:"The DEBM diet stands for "+'"Delicious Happy Fun Diet"'+". This diet was popularized by Robert...", - imageSrc: image15.src, + imageSrc: "https://user-images.githubusercontent.com/46085455/133185783-8100ef4e-7a72-4dc1-bb12-2ca46b56b393.png", },{ title: "9 Ways to Make an Aloe Vera Mask at Home", slug: 'have-a-nice-lunch', description:"Aloe vera or aloe vera is a green plant, has thorns on the side of the skin with yellowish patches and...", - imageSrc: image16.src, + imageSrc: "https://user-images.githubusercontent.com/46085455/133185911-df505d10-fdcd-4312-add3-7c62ad8af71e.png", },{ title: "Don't Buy Wrong, Here Are 7 Ways to Choose a Ripe Dragon Fruit", slug: 'have-a-nice-lunch', description:"Dragon fruit is a type of fruit that is a favorite for many people because of its delicious and fresh...", - imageSrc: image17.src, + imageSrc: "https://user-images.githubusercontent.com/46085455/133185959-7ad75580-ca6d-4684-83d9-3f64500bbc97.png", }] const RelevantBlogPosts = ({ data = recipe, itemKey="detail-relevant", title="Relevant Blog Posts", bgcolor = "default" }: RelevantProps) => { diff --git a/src/components/common/ScrollToTop/ScrollToTop.module.scss b/src/components/common/ScrollToTop/ScrollToTop.module.scss index c010f08ad..bfaa5cb99 100644 --- a/src/components/common/ScrollToTop/ScrollToTop.module.scss +++ b/src/components/common/ScrollToTop/ScrollToTop.module.scss @@ -1,24 +1,24 @@ -@import '../../../styles/utilities'; +@import "../../../styles/utilities"; .scrollToTop { @apply hidden; + z-index: 9999; @screen md { &.show { @apply block rounded-lg fixed cursor-pointer; - right: 11.2rem; - bottom: 21.6rem; + right: 6.4rem; + bottom: 10.6rem; width: 6.4rem; height: 6.4rem; background-color: var(--border-line); - } - - &.hide { - @apply hidden; + @screen lg { + right: 11.2rem; + } } } .scrollToTopBtn { @apply outline-none w-full h-full; } -} \ No newline at end of file +} diff --git a/src/components/common/ScrollToTop/ScrollToTop.tsx b/src/components/common/ScrollToTop/ScrollToTop.tsx index d148c8937..388fae3cc 100644 --- a/src/components/common/ScrollToTop/ScrollToTop.tsx +++ b/src/components/common/ScrollToTop/ScrollToTop.tsx @@ -1,47 +1,44 @@ -import React, { useState, useEffect, MutableRefObject } from 'react' import classNames from 'classnames' +import React, { useEffect, useState } from 'react' +import ArrowUp from '../../icons/IconArrowUp' import s from './ScrollToTop.module.scss' -import ArrowUp from '../../icons/IconArrowUp' interface ScrollToTopProps { visibilityHeight?: number; } -const ScrollToTop = ({ visibilityHeight=450 }: ScrollToTopProps) => { - - const [scrollPosition, setSrollPosition] = useState(0); - const [showScrollToTop, setShowScrollToTop] = useState("hide"); +const ScrollToTop = ({ visibilityHeight = 450 }: ScrollToTopProps) => { + const [showScrollToTop, setShowScrollToTop] = useState(); function handleVisibleButton() { - const position = window.pageYOffset; - setSrollPosition(position); - + const scrollPosition = window.scrollY; + if (scrollPosition > visibilityHeight) { - return setShowScrollToTop("show") - } else if (scrollPosition < visibilityHeight) { - return setShowScrollToTop("hide"); + setShowScrollToTop(true) + } else { + setShowScrollToTop(false) } }; + useEffect(() => { + window.addEventListener("scroll", handleVisibleButton); + return () => { + window.removeEventListener("scroll", handleVisibleButton); + } + }, []); + + function handleScrollUp() { window.scrollTo(0, 0); } - function addEventScroll() { - window.addEventListener("scroll", handleVisibleButton); - } - - useEffect(() => { - addEventScroll(); - }); - return (
    + [s.show]: showScrollToTop + })} + onClick={handleScrollUp} + > diff --git a/src/components/common/SelectCommon/SelectCommon.module.scss b/src/components/common/SelectCommon/SelectCommon.module.scss index 4809a46bb..82ce46f5b 100644 --- a/src/components/common/SelectCommon/SelectCommon.module.scss +++ b/src/components/common/SelectCommon/SelectCommon.module.scss @@ -28,7 +28,7 @@ } &.custom { .selectTrigger { - @apply border-2; + border-width: 1px; border-color: var(--border-line); color: var(--text-label); } @@ -68,7 +68,7 @@ @apply border-solid border border-current; } &.custom { - @apply border-2; + border-width: 1px; border-color: var(--border-line); color: var(--text-label); } diff --git a/src/components/common/SkeletonCommon/SkeletonImage/SkeletonImage.module.scss b/src/components/common/SkeletonCommon/SkeletonImage/SkeletonImage.module.scss new file mode 100644 index 000000000..d9607adec --- /dev/null +++ b/src/components/common/SkeletonCommon/SkeletonImage/SkeletonImage.module.scss @@ -0,0 +1,53 @@ +@import '../../../../styles/utilities'; + +.skeletonImage { + @apply relative; + background: #DDDBDD; + + &.small { + width: 10rem; + height: 10rem; + } + + &.default { + width: 15rem; + height: 15rem; + } + + &.large { + width: 20rem; + height: 20rem; + } + + &.left { + margin-left: 0; + } + + &.center { + margin: auto; + } + + &::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + transform: translateX(-100%); + background-image: linear-gradient( + 90deg, + rgba(#fff, 0) 0, + rgba(#fff, 0.2) 20%, + rgba(#fff, 0.5) 60%, + rgba(#fff, 0) + ); + animation: shimmer 2s infinite; + content: ''; + } +} + +@keyframes shimmer { + 100% { + transform: translateX(100%); + } +} diff --git a/src/components/common/SkeletonCommon/SkeletonImage/SkeletonImage.tsx b/src/components/common/SkeletonCommon/SkeletonImage/SkeletonImage.tsx new file mode 100644 index 000000000..e2c7c5e0f --- /dev/null +++ b/src/components/common/SkeletonCommon/SkeletonImage/SkeletonImage.tsx @@ -0,0 +1,20 @@ +import classNames from "classnames"; +import React from "react"; +import s from './SkeletonImage.module.scss' + +interface SkeletonImageProps { + align?: "left" | "center" + size?: "small" | "default" | "large" +} + +const SkeletonImage = ({ align="center", size="default" }: SkeletonImageProps) => { + return ( +
    +
    + ) +} + +export default SkeletonImage \ No newline at end of file diff --git a/src/components/common/SkeletonCommon/SkeletonParagraph/SkeletonParagraph.module.scss b/src/components/common/SkeletonCommon/SkeletonParagraph/SkeletonParagraph.module.scss new file mode 100644 index 000000000..1ebd6e413 --- /dev/null +++ b/src/components/common/SkeletonCommon/SkeletonParagraph/SkeletonParagraph.module.scss @@ -0,0 +1,65 @@ +@import '../../../../styles/utilities'; + +.skeletonParagraph { + margin: 0 1.6rem; + + .row { + display: inline-block; + height: 2rem; + width: 100%; + position: relative; + overflow: hidden; + background-color: #DDDBDD; + + &::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + transform: translateX(-100%); + background-image: linear-gradient( + 90deg, + rgba(#fff, 0) 0, + rgba(#fff, 0.2) 20%, + rgba(#fff, 0.5) 60%, + rgba(#fff, 0) + ); + animation: shimmer 2s infinite; + content: ''; + } + } + + .lastRow { + display: inline-block; + height: 2rem; + width: 80%; + position: relative; + overflow: hidden; + background-color: #DDDBDD; + + &::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + transform: translateX(-100%); + background-image: linear-gradient( + 90deg, + rgba(#fff, 0) 0, + rgba(#fff, 0.2) 20%, + rgba(#fff, 0.5) 60%, + rgba(#fff, 0) + ); + animation: shimmer 2s infinite; + content: ''; + } + } +} + +@keyframes shimmer { + 100% { + transform: translateX(100%); + } +} diff --git a/src/components/common/SkeletonCommon/SkeletonParagraph/SkeletonParagraph.tsx b/src/components/common/SkeletonCommon/SkeletonParagraph/SkeletonParagraph.tsx new file mode 100644 index 000000000..eadcff724 --- /dev/null +++ b/src/components/common/SkeletonCommon/SkeletonParagraph/SkeletonParagraph.tsx @@ -0,0 +1,23 @@ +import React from "react"; +import s from './SkeletonParagraph.module.scss' + +interface SkeletonParagraphProps { + rows?: number // number of rows in paragraph +} + +const SkeletonParagraph = ({ rows=2 }: SkeletonParagraphProps) => { + return ( +
    + { + [...Array(rows)].map((e, i) => { + if (i === rows-1) { + return
    + } + return
    + }) + } +
    + ) +} + +export default SkeletonParagraph \ No newline at end of file diff --git a/src/components/common/TabCommon/TabCommon.module.scss b/src/components/common/TabCommon/TabCommon.module.scss index d8b5d0f9a..ff90e8979 100644 --- a/src/components/common/TabCommon/TabCommon.module.scss +++ b/src/components/common/TabCommon/TabCommon.module.scss @@ -7,7 +7,7 @@ .tabList { @apply flex; position: relative; - border-bottom: 2px solid #FBFBFB; + border-bottom: 2px solid #EBEBEB; padding: 0.8rem 0; &.center{ margin: auto; diff --git a/src/components/common/index.ts b/src/components/common/index.ts index 7de333d3a..868d49e29 100644 --- a/src/components/common/index.ts +++ b/src/components/common/index.ts @@ -46,3 +46,4 @@ export { default as TabCommon} from './TabCommon/TabCommon' export { default as StaticImage} from './StaticImage/StaticImage' export { default as EmptyCommon} from './EmptyCommon/EmptyCommon' export { default as CustomShapeSvg} from './CustomShapeSvg/CustomShapeSvg' +export { default as RecommendedRecipes} from './RecommendedRecipes/RecommendedRecipes' diff --git a/src/components/icons/IconBell.tsx b/src/components/icons/IconBell.tsx new file mode 100644 index 000000000..278edc640 --- /dev/null +++ b/src/components/icons/IconBell.tsx @@ -0,0 +1,19 @@ +const IconBell = ({ ...props }) => { + return ( + + + + ) + } + + export default IconBell + \ No newline at end of file diff --git a/src/components/icons/IconBill.tsx b/src/components/icons/IconBill.tsx new file mode 100644 index 000000000..4892a0b07 --- /dev/null +++ b/src/components/icons/IconBill.tsx @@ -0,0 +1,25 @@ +const IconBill = ({ ...props }) => { + return ( + + + + + ) + } + + export default IconBill + \ No newline at end of file diff --git a/src/components/icons/IconNoti.tsx b/src/components/icons/IconNoti.tsx new file mode 100644 index 000000000..ab166fecc --- /dev/null +++ b/src/components/icons/IconNoti.tsx @@ -0,0 +1,11 @@ +import React from 'react' + +const IconNoti = () => { + return ( + + + + ) +} + +export default IconNoti diff --git a/src/components/icons/index.ts b/src/components/icons/index.ts index 7dd36b14f..70575e11d 100644 --- a/src/components/icons/index.ts +++ b/src/components/icons/index.ts @@ -33,3 +33,6 @@ export { default as IconMinus } from './IconMinus' export { default as IconCirclePlus } from './IconCirclePlus' export { default as IconDoneCheckout } from './IconDoneCheckout' export { default as IconFilter } from './IconFilter' +export { default as IconBell } from './IconBell' +export { default as IconBill } from './IconBill' +export { default as IconNoti } from './IconNoti' diff --git a/src/components/modules/404/404Page/404Page.module.scss b/src/components/modules/404/404Page/404Page.module.scss index b089a9ad3..f490b4f3a 100644 --- a/src/components/modules/404/404Page/404Page.module.scss +++ b/src/components/modules/404/404Page/404Page.module.scss @@ -6,7 +6,7 @@ background-color: white; .inner{ - height: 100vh; + height: 70vh; .logo{ margin-top: 2rem; } diff --git a/src/components/modules/Notification/NotificationBreadcrum/NotificationBreadcrumb.module.scss b/src/components/modules/Notification/NotificationBreadcrum/NotificationBreadcrumb.module.scss new file mode 100644 index 000000000..d347ad872 --- /dev/null +++ b/src/components/modules/Notification/NotificationBreadcrum/NotificationBreadcrumb.module.scss @@ -0,0 +1,7 @@ +@import "../../../../styles/utilities"; +.breadCrumbWrapper { + @apply py-12 spacing-horizontal; + @screen lg { + padding-left: 3.2rem; + } +} \ No newline at end of file diff --git a/src/components/modules/Notification/NotificationBreadcrum/NotificationBreadcrumb.tsx b/src/components/modules/Notification/NotificationBreadcrum/NotificationBreadcrumb.tsx new file mode 100644 index 000000000..5f713e2db --- /dev/null +++ b/src/components/modules/Notification/NotificationBreadcrum/NotificationBreadcrumb.tsx @@ -0,0 +1,16 @@ +import { BreadcrumbCommon } from "src/components/common" +import s from './NotificationBreadcrumb.module.scss' + +const NOTIFICATION_DATA = [ + {link: "/notifications", name: "Notifications"}, +]; + +const NotificationBreadcrumb = () => { + return ( +
    + +
    + ) +} + +export default NotificationBreadcrumb \ No newline at end of file diff --git a/src/components/modules/Notification/NotificationEmptyPage/NotificationEmptyPage.module.scss b/src/components/modules/Notification/NotificationEmptyPage/NotificationEmptyPage.module.scss new file mode 100644 index 000000000..13efe5e14 --- /dev/null +++ b/src/components/modules/Notification/NotificationEmptyPage/NotificationEmptyPage.module.scss @@ -0,0 +1,17 @@ +@import "../../../../styles/utilities"; + +.emptyPage { + @apply flex justify-center items-center flex-col; + margin-bottom: 5.4rem; + @screen lg { + margin-bottom: 12.8rem; + } + .emptyIcon { + padding-bottom: 2.6rem; + } + .emptyContent { + @apply sub-headline; + align-content: center; + color: var(--disabled); + } +} \ No newline at end of file diff --git a/src/components/modules/Notification/NotificationEmptyPage/NotificationEmptyPage.tsx b/src/components/modules/Notification/NotificationEmptyPage/NotificationEmptyPage.tsx new file mode 100644 index 000000000..b698b0f50 --- /dev/null +++ b/src/components/modules/Notification/NotificationEmptyPage/NotificationEmptyPage.tsx @@ -0,0 +1,18 @@ +import React from 'react' +import { IconBell } from 'src/components/icons' +import s from '../NotificationEmptyPage/NotificationEmptyPage.module.scss' + + +const NotificationEmptyPage = () => { + return ( +
    +
    + +
    +
    +

    Your Notification is empty

    +
    +
    + ) +} +export default NotificationEmptyPage \ No newline at end of file diff --git a/src/components/modules/Notification/NotificationHeading/NotificationHeading.module.scss b/src/components/modules/Notification/NotificationHeading/NotificationHeading.module.scss new file mode 100644 index 000000000..2833c5f10 --- /dev/null +++ b/src/components/modules/Notification/NotificationHeading/NotificationHeading.module.scss @@ -0,0 +1,9 @@ +@import "../../../../styles/utilities"; + +.headingWrapper { + @apply flex spacing-horizontal-left pb-16; + .heading{ + max-width: 121.6rem; + flex-grow: 1; + } +} \ No newline at end of file diff --git a/src/components/modules/Notification/NotificationHeading/NotificationHeading.tsx b/src/components/modules/Notification/NotificationHeading/NotificationHeading.tsx new file mode 100644 index 000000000..573bac2a9 --- /dev/null +++ b/src/components/modules/Notification/NotificationHeading/NotificationHeading.tsx @@ -0,0 +1,18 @@ +import { HeadingCommon } from "src/components/common" +import s from './NotificationHeading.module.scss' + +interface NotificationHeadingProps { + children?: React.ReactNode, + heading?: string, +} + +const NotificationHeading = ({heading = "NOTIFICATIONS"}: NotificationHeadingProps) => { + return ( +
    +
    + {heading} +
    +
    + ) +} +export default NotificationHeading \ No newline at end of file diff --git a/src/components/modules/Notification/NotificationItem/NotificationItem.module.scss b/src/components/modules/Notification/NotificationItem/NotificationItem.module.scss new file mode 100644 index 000000000..ac064e19f --- /dev/null +++ b/src/components/modules/Notification/NotificationItem/NotificationItem.module.scss @@ -0,0 +1,35 @@ +@import '../../../../styles/utilities'; + +.notificationItem { + @apply flex flex-row spacing-horizontal; + padding-top: 1.2rem; + &:hover{ + cursor: pointer; + } + .contentWrapper { + padding-left: 1.6rem; + padding-bottom: 1.4rem; + max-width: 26.3rem; + .title { + font-weight: bold; + color: var(--text-active); + } + .date { + @apply caption; + color: #828282; + } + } + &.isChecked { + .icon { + rect { + fill: var(--gray) + } + path { + fill: var(--disabled) + } + } + .title, .content { + color: var(--text-label); + } + } +} \ No newline at end of file diff --git a/src/components/modules/Notification/NotificationItem/NotificationItem.tsx b/src/components/modules/Notification/NotificationItem/NotificationItem.tsx new file mode 100644 index 000000000..402575daf --- /dev/null +++ b/src/components/modules/Notification/NotificationItem/NotificationItem.tsx @@ -0,0 +1,51 @@ +import React, {useState} from 'react' +import s from '../NotificationItem/NotificationItem.module.scss' +import ClassNames from 'classnames' +import { IconBill } from 'src/components/icons' +import Link from 'next/link' +import {ROUTE , QUERY_KEY, ACCOUNT_TAB } from 'src/utils/constanst.utils' + +export interface NotificationItemProps { + ID?: string, + title?: string, + content?: string, + date?: string, + checked?: boolean, +} + +const NotificationItem = ({ ID, title, content, date, checked}: NotificationItemProps) => { + const [isChecked, setChecked] = useState(checked) + const Check = () => { + setChecked(true) + } + return ( +
    +
    + +
    + + +
    +
    + {title} +
    +
    + {content} +
    +
    + {date} +
    +
    +
    + + +
    + ) +} + +export default NotificationItem \ No newline at end of file diff --git a/src/components/modules/Notification/NotificationPage/NotificationPage.module.scss b/src/components/modules/Notification/NotificationPage/NotificationPage.module.scss new file mode 100644 index 000000000..1a214dccc --- /dev/null +++ b/src/components/modules/Notification/NotificationPage/NotificationPage.module.scss @@ -0,0 +1,6 @@ +.notificationPage { + padding-bottom: 5.4rem; + @screen md { + padding-bottom: 12.8rem; + } +} \ No newline at end of file diff --git a/src/components/modules/Notification/NotificationPage/NotificationPage.tsx b/src/components/modules/Notification/NotificationPage/NotificationPage.tsx new file mode 100644 index 000000000..954b7727c --- /dev/null +++ b/src/components/modules/Notification/NotificationPage/NotificationPage.tsx @@ -0,0 +1,56 @@ +import React from 'react' +import NotificationEmptyPage from '../NotificationEmptyPage/NotificationEmptyPage' +import NotificationItem, { NotificationItemProps } from '../NotificationItem/NotificationItem' +import s from './NotificationPage.module.scss' + +interface NotificationPageProps { + isEmpty?: boolean, + data?: NotificationItemProps[], +} +const NOTIFICATION_DATA = [ + { + ID: "ID33455", + title: "Your order ID33455", + content: "The order has been deliveried successfully!", + date: "2 days ago", + checked: false, + }, + { + ID: "ID33456", + title: "Your order ID33456", + content: "The order has been deliveried successfully!", + date: "2 days ago", + checked: false, + }, + { + ID: "ID33457", + title: "Your order ID33457", + content: "The order has been deliveried successfully!", + date: "2 days ago", + checked: true, + } +] + + +const NotificationPage = ({ isEmpty=false, data = NOTIFICATION_DATA }: NotificationPageProps) => { + return ( +
    + { + isEmpty ? + + : + <> + { + data.map(item => { + return ( + + ) + }) + } + + } +
    + ) +} + +export default NotificationPage \ No newline at end of file diff --git a/src/components/modules/Notification/index.tsx b/src/components/modules/Notification/index.tsx new file mode 100644 index 000000000..413535595 --- /dev/null +++ b/src/components/modules/Notification/index.tsx @@ -0,0 +1,5 @@ +export { default as NotificationPage } from './NotificationPage/NotificationPage' +export { default as NotificationEmptyPage } from './NotificationEmptyPage/NotificationEmptyPage' +export { default as NotificationItem } from './NotificationItem/NotificationItem' +export { default as NotificationBreadcrumb } from './NotificationBreadcrum/NotificationBreadcrumb' +export { default as NotificationHeading } from './NotificationHeading/NotificationHeading' \ No newline at end of file diff --git a/src/components/modules/account/AccountNavigation/AccountNavigation.module.scss b/src/components/modules/account/AccountNavigation/AccountNavigation.module.scss index 8bece6668..eb255a3b4 100644 --- a/src/components/modules/account/AccountNavigation/AccountNavigation.module.scss +++ b/src/components/modules/account/AccountNavigation/AccountNavigation.module.scss @@ -1,27 +1,54 @@ @import '../../../../styles/utilities'; .accountNavigation { - @apply flex; + @apply relative; width: 100%; + @screen md { + @apply flex; + width: 100%; + } + .slider { - @apply inline-block; - width: 0.2rem; - height: 4.8rem; - border-radius: 3px; - background-color: var(--primary); - position: absolute; - left: 11.2rem; - transition: all .2s linear; + @apply hidden; + + @screen md { + @apply inline-block; + width: 0.2rem; + height: 4.8rem; + border-radius: 3px; + background-color: var(--primary); + position: absolute; + left: 0; + top: 450; + transition: all .2s linear; + } } .tabList { - margin-top: 3.8rem; - margin-right: 12.4rem; + @apply flex; + + @screen md { + @apply block; + margin-right: 0rem; + } + + @screen lg { + @apply block; + margin-right: 4.8rem; + } + + @screen xl { + @apply block; + margin-right: 12.4rem; + } } .tabBody { - margin-top: -4.7rem; width: 100%; + + @screen md { + margin-top: -8.6rem; + } } } \ No newline at end of file diff --git a/src/components/modules/account/AccountNavigation/AccountNavigation.tsx b/src/components/modules/account/AccountNavigation/AccountNavigation.tsx index 013b4cbf1..4fd534148 100644 --- a/src/components/modules/account/AccountNavigation/AccountNavigation.tsx +++ b/src/components/modules/account/AccountNavigation/AccountNavigation.tsx @@ -1,7 +1,6 @@ import React, { useRef, useEffect, Children, ReactElement, PropsWithChildren, useState, cloneElement } from "react" import s from './AccountNavigation.module.scss' - -import AccountNavigationItem from './components/AccountNavigationItem' +import AccountNavigationItem from './components/AccountNavigationItem/AccountNavigationItem' import {TabPaneProps} from '../../../common/TabCommon/components/TabPane/TabPane' interface AccountNavigationProps { @@ -14,6 +13,12 @@ const AccountNavigation = ({ defaultActiveIndex, children } : AccountNavigationP const sliderRef = useRef(null); const headerRef = useRef(null) + useEffect(() => { + if (defaultActiveIndex !== undefined) { + setActive(defaultActiveIndex) + } + }, [defaultActiveIndex]) + const onTabClick = (index: number) => { setActive(index) } @@ -21,10 +26,12 @@ const AccountNavigation = ({ defaultActiveIndex, children } : AccountNavigationP function slide(index: number) { const active = headerRef.current?.children.item(index)?.getBoundingClientRect() const header = headerRef.current?.getBoundingClientRect() + const firstEl = headerRef.current?.children.item(0)?.getBoundingClientRect() const current = sliderRef.current - if (current && active && header) { - const top = active.top; + if (current && active && header && firstEl) { + const firstElTop = firstEl.top + const top = active.top - firstElTop; current.style.top = top.toString()+"px"; } } @@ -63,7 +70,6 @@ const AccountNavigation = ({ defaultActiveIndex, children } : AccountNavigationP }) }
    -
    ) } diff --git a/src/components/modules/account/AccountNavigation/components/AccountNavigationItem.module.scss b/src/components/modules/account/AccountNavigation/components/AccountNavigationItem.module.scss deleted file mode 100644 index 10037cdc7..000000000 --- a/src/components/modules/account/AccountNavigation/components/AccountNavigationItem.module.scss +++ /dev/null @@ -1,17 +0,0 @@ -@import '../../../../../styles/utilities'; - -.accountNavigationItem { - width: 28rem; - padding: 1.2rem 0 1.2rem 1.6rem; - margin-bottom: 1.2rem; - - - &:hover { - @apply cursor-pointer; - } - - &.active { - background-color: #FBFBFB; - border-radius: 0 1.6rem 1.6rem 0; - } -} \ No newline at end of file diff --git a/src/components/modules/account/AccountNavigation/components/AccountNavigationItem/AccountNavigationItem.module.scss b/src/components/modules/account/AccountNavigation/components/AccountNavigationItem/AccountNavigationItem.module.scss new file mode 100644 index 000000000..6ae8f42e2 --- /dev/null +++ b/src/components/modules/account/AccountNavigation/components/AccountNavigationItem/AccountNavigationItem.module.scss @@ -0,0 +1,46 @@ +@import '../../../../../../styles/utilities'; + +.accountNavigationItem { + width: fit-content; + padding: 1.2rem 1.6rem 1.2rem 0rem; + + margin-bottom: 1.2rem; + + &:hover { + @apply cursor-pointer; + } + + &.active { + @apply shape-common font-bold; + background-color: var(--primary); + color: white; + padding: 1.2rem 1.6rem 1.2rem 1.6rem; + margin-right: 1.6rem; + + @screen md { + @apply font-normal; + background-color: #FBFBFB; + border-radius: 0 1.6rem 1.6rem 0; + color: #3D3D3D; + clip-path: none; + } + } + + @screen md { + max-width: 24rem; + min-width: 22rem; + padding: 1.2rem 1.6rem 1.2rem 1.6rem; + } + + @screen lg { + max-width: 26rem; + min-width: 23rem; + padding: 1.2rem 1.6rem 1.2rem 1.6rem; + } + + @screen xl { + max-width: 28rem; + min-width: 24rem; + padding: 1.2rem 1.6rem 1.2rem 1.6rem; + } +} \ No newline at end of file diff --git a/src/components/modules/account/AccountNavigation/components/AccountNavigationItem.tsx b/src/components/modules/account/AccountNavigation/components/AccountNavigationItem/AccountNavigationItem.tsx similarity index 100% rename from src/components/modules/account/AccountNavigation/components/AccountNavigationItem.tsx rename to src/components/modules/account/AccountNavigation/components/AccountNavigationItem/AccountNavigationItem.tsx diff --git a/src/components/modules/account/AccountPage/AccountPage.module.scss b/src/components/modules/account/AccountPage/AccountPage.module.scss index 3f8307750..5eece6c80 100644 --- a/src/components/modules/account/AccountPage/AccountPage.module.scss +++ b/src/components/modules/account/AccountPage/AccountPage.module.scss @@ -6,6 +6,8 @@ margin-top: -3.2rem; padding-top: 3.2rem; padding-bottom: 3.2rem; + min-height: 70rem; + @screen md { padding-left: 3.2rem; diff --git a/src/components/modules/account/AccountPage/AccountPage.tsx b/src/components/modules/account/AccountPage/AccountPage.tsx index a5a0ef79d..47f5cf955 100644 --- a/src/components/modules/account/AccountPage/AccountPage.tsx +++ b/src/components/modules/account/AccountPage/AccountPage.tsx @@ -1,18 +1,28 @@ -import React, { useState } from "react" +import React, { useEffect, useState } from "react" import s from './AccountPage.module.scss' +import { HeadingCommon, TabPane } from "src/components/common" + import AccountNavigation from '../AccountNavigation/AccountNavigation' -import HeadingCommon from '../../../common/HeadingCommon/HeadingCommon' import AccountInfomation from "./components/AccountInfomation/AccountInfomation" +import FavouriteProducts from "./components/FavouriteProducts/FavouriteProducts" import OrderInfomation from './components/OrderInformation/OrderInformation' import EditInfoModal from './components/EditInfoModal/EditInfoModal' -import TabPane from "src/components/common/TabCommon/components/TabPane/TabPane" + +import { PRODUCT_CART_DATA_TEST } from 'src/utils/demo-data'; +import { ACCOUNT_TAB, QUERY_KEY } from "src/utils/constanst.utils" +import { useRouter } from "next/router" const waiting = [ { id: "NO 123456", products: ["Tomato", "Fish", "Pork", "Onion"], totalPrice : 1000 + }, + { + id: "NO 123457", + products: ["Tomato", "Fish", "Pork", "Onion"], + totalPrice : 1000 } ] @@ -21,6 +31,11 @@ const delivering = [ id: "NO 123456", products: ["Tomato", "Fish", "Pork", "Onion", "Tomato", "Fish", "Pork", "Onion"], totalPrice : 1000 + }, + { + id: "NO 123457", + products: ["Tomato", "Fish", "Pork", "Onion", "Tomato", "Fish", "Pork", "Onion"], + totalPrice : 1000 } ] @@ -29,6 +44,11 @@ const delivered = [ id: "NO 123456", products: ["Tomato", "Fish", "Pork", "Onion", "Tomato", "Fish", "Pork", "Onion"], totalPrice : 1000 + }, + { + id: "NO 123457", + products: ["Tomato", "Fish", "Pork", "Onion", "Tomato", "Fish", "Pork", "Onion"], + totalPrice : 1000 } ] @@ -45,12 +65,30 @@ let account = { interface AccountPageProps { defaultActiveContent?: "info" | "orders" | "favorites" } +const getTabIndex = (tab?: string): number => { + switch (tab) { + case ACCOUNT_TAB.CUSTOMER_INFO: + return 0; + case ACCOUNT_TAB.ORDER: + return 1; + case ACCOUNT_TAB.FAVOURITE: + return 2; + default: + return 0 + } +} -const AccountPage = ({defaultActiveContent="orders"} : AccountPageProps) => { - - const [activeTab] = useState(defaultActiveContent==="info" ? 0 : defaultActiveContent==="orders" ? 1 : 2) +const AccountPage = ({ defaultActiveContent="orders" } : AccountPageProps) => { + const router = useRouter() + const [activeTab, setActiveTab] = useState(defaultActiveContent==="info" ? 0 : defaultActiveContent==="orders" ? 1 : 2) const [modalVisible, setModalVisible] = useState(false); + useEffect(() => { + const query = router.query[QUERY_KEY.TAB] as string + const index = getTabIndex(query) + setActiveTab(index) + }, [router.query[QUERY_KEY.TAB]]) + function showModal() { setModalVisible(true); } @@ -74,7 +112,7 @@ const AccountPage = ({defaultActiveContent="orders"} : AccountPageProps) => { - {/* */} +
diff --git a/src/components/modules/account/AccountPage/components/AccountInfomation/AccountInfomation.module.scss b/src/components/modules/account/AccountPage/components/AccountInfomation/AccountInfomation.module.scss index 442dae2eb..6e8150f1b 100644 --- a/src/components/modules/account/AccountPage/components/AccountInfomation/AccountInfomation.module.scss +++ b/src/components/modules/account/AccountPage/components/AccountInfomation/AccountInfomation.module.scss @@ -1,13 +1,11 @@ @import '../../../../../../styles/utilities'; .accountInfomation { - @apply flex justify-center items-center; - text-align: center; + @apply block text-center; margin-top: 1.6rem; @screen md { - @apply block; - text-align: left; + @apply text-left; margin-top: 0; } @@ -32,17 +30,29 @@ border: 1px solid var(--disabled); max-width: 39.2rem; min-width: 30rem; + margin: auto; margin-top: 2.4rem; margin-bottom: 2.4rem; + + @screen md { + margin-left: 0; + } } .shippingInfo { @apply heading-3 font-heading; + margin-bottom: .8rem; } .accountAddress { - max-width: 31rem; - min-width: none; + margin: auto; + max-width: 28rem; + + @screen md { + max-width: 31rem; + min-width: none; + margin-left: 0; + } } .editInfoBtn { diff --git a/src/components/modules/account/AccountPage/components/AccountInfomation/AccountInfomation.tsx b/src/components/modules/account/AccountPage/components/AccountInfomation/AccountInfomation.tsx index f24b36216..dac651fea 100644 --- a/src/components/modules/account/AccountPage/components/AccountInfomation/AccountInfomation.tsx +++ b/src/components/modules/account/AccountPage/components/AccountInfomation/AccountInfomation.tsx @@ -21,34 +21,30 @@ const AccountInfomation = ({ account, onClick } : AccountInfomationProps) => { return (
- { -
-
- avatar -
+
+ avatar +
-
- {account.name} -
-
- {account.email} -
+
+ {account.name} +
+
+ {account.email} +
-
+
-
Shipping Infomation
+
Shipping Infomation
-
- {account.address + `, ${account.state}, ${account.city}, ${account.postalCode}`} -
+
+ {account.address + `, ${account.state}, ${account.city}, ${account.postalCode}`} +
-
- {account.phoneNumber} -
+
+ {account.phoneNumber} +
-
Edit
-
- } +
Edit
) } diff --git a/src/components/modules/account/AccountPage/components/EditInfoModal/EditInfoModal.module.scss b/src/components/modules/account/AccountPage/components/EditInfoModal/EditInfoModal.module.scss index be1384ab7..20acd257b 100644 --- a/src/components/modules/account/AccountPage/components/EditInfoModal/EditInfoModal.module.scss +++ b/src/components/modules/account/AccountPage/components/EditInfoModal/EditInfoModal.module.scss @@ -5,77 +5,35 @@ @apply bg-white; margin-bottom: 1.6rem; width: 100%; - border: 2px solid #EBEBEB; - border-radius: .8rem; - padding: 1.6rem; } .inputDisable { margin-bottom: 1.6rem; width: 100%; - border: 2px solid #EBEBEB; - border-radius: .8rem; - padding: 1.6rem; - background-color: #EBEBEB; color: #CCCCCC; } - .inputStateWrapper { - @apply bg-white; - margin-bottom: 1.6rem; - margin-right: 1.6rem; - border: 2px solid #EBEBEB; - border-radius: .8rem; - padding: 1.6rem; - - .inputState { - @apply bg-white cursor-pointer; - border: white; - } + .inputState { + @apply bg-white cursor-pointer; + border: white; + margin-right: 0.8rem; + height: fit-content; } .inputPostalCode { @apply bg-white; - margin-bottom: 1.6rem; - border: 2px solid #EBEBEB; - border-radius: .8rem; - padding: 1.6rem; + margin-left: 0.8rem; } .inputPhoneNumber { @apply bg-white; margin-bottom: 4rem; width: 100%; - border: 2px solid #EBEBEB; - border-radius: .8rem; - padding: 1.6rem; + margin-top: 1.6rem; } .buttons { - @apply flex; - - .buttonCancel { - @apply bg-white text-center font-bold custom-border-radius-lg; - color: #141414; - border: 1px solid #141414; - padding: 1.6rem; - margin-right: 1.6rem; - width: 100%; - - &:hover { - @apply cursor-pointer; - } - } - - .buttonSave { - @apply text-center font-bold custom-border-radius-lg; - background-color: var(--primary); - color: white; - padding: 1.6rem; - width: 100%; - &:hover { - @apply cursor-pointer; - } - } + @apply grid grid-cols-2; + grid-gap: 1.6rem; } } \ No newline at end of file diff --git a/src/components/modules/account/AccountPage/components/EditInfoModal/EditInfoModal.tsx b/src/components/modules/account/AccountPage/components/EditInfoModal/EditInfoModal.tsx index d2be8b1a1..4f1b8296b 100644 --- a/src/components/modules/account/AccountPage/components/EditInfoModal/EditInfoModal.tsx +++ b/src/components/modules/account/AccountPage/components/EditInfoModal/EditInfoModal.tsx @@ -1,10 +1,7 @@ -import classNames from "classnames" -import React, { useState } from "react" +import React from "react" import s from './EditInfoModal.module.scss' -import {ModalCommon, MenuDropdown} from '../../../../../common' - -import {ButtonCommon} from '../../../../../common' +import { ModalCommon, Inputcommon, SelectCommon, ButtonCommon } from '../../../../../common' interface EditInfoModalProps { accountInfo: {name: string, email: string, address: string, state: string, city: string, postalCode: string, phoneNumber: string}; @@ -14,14 +11,6 @@ interface EditInfoModalProps { const EditInfoModal = ({ accountInfo, visible = false, closeModal }: EditInfoModalProps) => { - const [name, setName] = useState(accountInfo.name); - const [email, setEmail] = useState(accountInfo.email); - const [address, setAddress] = useState(accountInfo.address); - const [state, setState] = useState(accountInfo.state); - const [city, setCity] = useState(accountInfo.city); - const [postalCode, setPostalCode] = useState(accountInfo.postalCode); - const [phoneNumber, setPhoneNumber] = useState(accountInfo.phoneNumber); - function saveInfo() { console.log("saved !!!"); @@ -29,51 +18,48 @@ const EditInfoModal = ({ accountInfo, visible = false, closeModal }: EditInfoMod } const states = [ - {name: "D1", onClick: () => {setState("D1")}}, - {name: "D2", onClick: () => {setState("D2")}}, - {name: "D3", onClick: () => {setState("D3")}} + {name: "District 1", value: "D1"}, + {name: "District 2", value: "D2"}, + {name: "District 3", value: "D3"} ] return (
-
- {setName(e.target.value)}} /> +
+
-
- {setEmail(e.target.value)}} /> -
-
- {setAddress(e.target.value)}}/> -
-
- {setCity(e.target.value)}} /> -
-
-
- - - -
- - {setPostalCode(e.target.value)}} /> +
+ +
+ +
+
-
- {setPhoneNumber(e.target.value)}} /> +
+ +
+ + +
+
+ +
+ +
+ +
+
+ +
+
-
Cancel
-
Save
+ Cancel + Save
diff --git a/src/components/modules/account/AccountPage/components/FavouriteProducts/FavouriteProducts.module.scss b/src/components/modules/account/AccountPage/components/FavouriteProducts/FavouriteProducts.module.scss new file mode 100644 index 000000000..e6eef3499 --- /dev/null +++ b/src/components/modules/account/AccountPage/components/FavouriteProducts/FavouriteProducts.module.scss @@ -0,0 +1,5 @@ +@import '../../../../../../styles/utilities'; + +.favouriteProducts { + +} \ No newline at end of file diff --git a/src/components/modules/account/AccountPage/components/FavouriteProducts/FavouriteProducts.tsx b/src/components/modules/account/AccountPage/components/FavouriteProducts/FavouriteProducts.tsx new file mode 100644 index 000000000..f88605242 --- /dev/null +++ b/src/components/modules/account/AccountPage/components/FavouriteProducts/FavouriteProducts.tsx @@ -0,0 +1,20 @@ +import React from "react" +import s from './FavouriteProducts.module.scss' +import {ProductList} from '../../../../../common' +import { ProductCardProps } from '../../../../../common/ProductCard/ProductCard' + + +interface FavouriteProductsProps { + products: ProductCardProps[]; +} + +const FavouriteProducts = ({ products } : FavouriteProductsProps) => { + + return ( +
+ +
+ ) +} + +export default FavouriteProducts \ No newline at end of file diff --git a/src/components/modules/account/AccountPage/components/OrderInformation/OrderInformation.module.scss b/src/components/modules/account/AccountPage/components/OrderInformation/OrderInformation.module.scss index 0096a67d7..cfa30c6ad 100644 --- a/src/components/modules/account/AccountPage/components/OrderInformation/OrderInformation.module.scss +++ b/src/components/modules/account/AccountPage/components/OrderInformation/OrderInformation.module.scss @@ -8,6 +8,8 @@ .tabs { margin-top: 3.2rem; + width: 100%; + border-bottom: black; .blank { margin-bottom: 2.4rem; diff --git a/src/components/modules/account/AccountPage/components/OrderInformation/OrderInformation.tsx b/src/components/modules/account/AccountPage/components/OrderInformation/OrderInformation.tsx index 76985b9fd..858526f26 100644 --- a/src/components/modules/account/AccountPage/components/OrderInformation/OrderInformation.tsx +++ b/src/components/modules/account/AccountPage/components/OrderInformation/OrderInformation.tsx @@ -10,55 +10,50 @@ interface OrderInformationProps { waiting: {id: string, products: string[], totalPrice: number}[], delivering: {id: string, products: string[], totalPrice: number}[], delivered: {id: string, products: string[], totalPrice: number}[], - // active?: boolean } const OrderInformation = ({ waiting, delivering, delivered} : OrderInformationProps) => { return (
- { -
-
Order Information
+
Order Information
-
- - -
- { - waiting.map((order, i) => { - return ( - - ) - }) - } -
+
+ + +
+ { + waiting.map((order, i) => { + return ( + + ) + }) + } +
- -
- { - delivering.map((order, i) => { - return ( - - ) - }) - } -
+ +
+ { + delivering.map((order, i) => { + return ( + + ) + }) + } +
- -
- { - delivered.map((order, i) => { - return ( - - ) - }) - } -
-
-
-
- } + +
+ { + delivered.map((order, i) => { + return ( + + ) + }) + } +
+ +
) } diff --git a/src/components/modules/account/AccountSignIn/AccountSignIn.module.scss b/src/components/modules/account/AccountSignIn/AccountSignIn.module.scss new file mode 100644 index 000000000..e613992bc --- /dev/null +++ b/src/components/modules/account/AccountSignIn/AccountSignIn.module.scss @@ -0,0 +1,35 @@ +@import "../../../../styles/utilities"; +.accountSignInWrapper{ + padding: 5rem; + @apply w-full; + .imgError{ + @apply w-full flex justify-center; + } + .text{ + @apply sub-headline; + color:var(--text-placeholder); + text-align: center; + margin-top: 3.6rem; + } + .btn{ + @apply flex justify-center; + margin: 2.6rem auto; + button{ + div{ + padding: 1.6rem 7rem; + } + } + } + .dontHaveAccount{ + @apply flex justify-center font-bold; + button { + all: unset; + color:var(--primary); + cursor: pointer; + &:focus-visible { + outline: 2px solid var(--text-active); + } + } + } + +} \ No newline at end of file diff --git a/src/components/modules/account/AccountSignIn/AccountSignIn.tsx b/src/components/modules/account/AccountSignIn/AccountSignIn.tsx new file mode 100644 index 000000000..32e7fa646 --- /dev/null +++ b/src/components/modules/account/AccountSignIn/AccountSignIn.tsx @@ -0,0 +1,47 @@ +import React,{memo, useState} from "react" +import { ButtonCommon, StaticImage } from "src/components/common"; +import s from './AccountSignIn.module.scss'; +import {LANGUAGE} from 'src/utils/language.utils'; +import AccountSignInImg from '../../../../../public/assets/images/accountsignin.png' +import { useRouter } from 'next/router'; +import ModalAuthenticate from "src/components/common/ModalAuthenticate/ModalAuthenticate"; +import { useModalCommon } from "src/components/hooks"; + +interface AccountSignIn { + +} + +const AccountSignIn = memo(({ } : AccountSignIn) => { + const router = useRouter(); + const { visible: visibleModalAuthen, closeModal: closeModalAuthen, openModal: openModalAuthen } = useModalCommon({ initialValue: false }) + const [isModeAuthenSignup, setIsModeAuthenSignup] = useState(false) + + const openModalSignup = () => { + setIsModeAuthenSignup(true) + openModalAuthen() + } + + return ( + <> +
+
+
+ +
+
+ Sign in to get more interesting
features +
+
+ {LANGUAGE.BUTTON_LABEL.SIGNIN} +
+
+
Don't have an account?  
+
+
+
+ + + ) +}); + +export default AccountSignIn \ No newline at end of file diff --git a/src/components/modules/account/DeliveryItem/DeliveryItem.module.scss b/src/components/modules/account/DeliveryItem/DeliveryItem.module.scss index b83b77fd3..44cc3a5c9 100644 --- a/src/components/modules/account/DeliveryItem/DeliveryItem.module.scss +++ b/src/components/modules/account/DeliveryItem/DeliveryItem.module.scss @@ -1,9 +1,8 @@ @import '../../../../styles/utilities'; .deliveryItem { - @apply flex bg-white items-center custom-border-radius; + @apply flex bg-white items-center shape-common; margin-bottom: 1.6rem; - border: 1px solid var(--primary) } .separator { diff --git a/src/components/modules/account/DeliveryItem/DeliveryItem.tsx b/src/components/modules/account/DeliveryItem/DeliveryItem.tsx index fe8f5cdef..a8ccbb69d 100644 --- a/src/components/modules/account/DeliveryItem/DeliveryItem.tsx +++ b/src/components/modules/account/DeliveryItem/DeliveryItem.tsx @@ -9,20 +9,19 @@ import ReOrder from './components/ReOrder/ReOrder' interface DeliveryItemProps { id: string; - status: "waiting" | "delivering" | "delivered"; + status: "Waiting" | "Delivering" | "Delivered"; products: string[]; totalPrice: number; - reOrderLink?: string; } -const DeliveryItem = ({ id, status, products, totalPrice, reOrderLink } : DeliveryItemProps) => { +const DeliveryItem = ({ id, status, products, totalPrice } : DeliveryItemProps) => { return (
- +
) } diff --git a/src/components/modules/account/DeliveryItem/components/IdAndStatus/IdAndStatus.module.scss b/src/components/modules/account/DeliveryItem/components/IdAndStatus/IdAndStatus.module.scss index d50ecd115..5e8cbdd83 100644 --- a/src/components/modules/account/DeliveryItem/components/IdAndStatus/IdAndStatus.module.scss +++ b/src/components/modules/account/DeliveryItem/components/IdAndStatus/IdAndStatus.module.scss @@ -2,48 +2,7 @@ .idAndStatus { @apply items-center; - padding: 2.4rem 0 2.4rem 1rem; - - @screen md { - padding: 2.4rem 0 2.4rem 1.2rem; - } - - @screen lg { - padding: 2.4rem 0 2.4rem 2.4rem; - } - - .id { - @apply font-bold; - margin-bottom: .8rem; - } - - .deliveryStatus { - @apply font-bold text-white; - font-size: 1.2rem; - line-height: 2rem; - padding: 0 .8rem; - border-radius: 0.5rem; - width: fit-content; - - &.waiting { - background-color: #D9A645; - } - &.delivering { - background-color: var(--info-dark); - } - &.delivered { - background-color: var(--primary); - } - } -}@import '../../../../../../styles/utilities'; - -.idAndStatus { - @apply items-center; - padding: 2.4rem 0 2.4rem 1rem; - - @screen md { - padding: 2.4rem 0 2.4rem 1.2rem; - } + padding: 2.4rem 0 2.4rem 1.2rem; @screen lg { padding: 2.4rem 0 2.4rem 2.4rem; diff --git a/src/components/modules/account/DeliveryItem/components/IdAndStatus/IdAndStatus.tsx b/src/components/modules/account/DeliveryItem/components/IdAndStatus/IdAndStatus.tsx index 841dd530f..578c94f97 100644 --- a/src/components/modules/account/DeliveryItem/components/IdAndStatus/IdAndStatus.tsx +++ b/src/components/modules/account/DeliveryItem/components/IdAndStatus/IdAndStatus.tsx @@ -5,10 +5,10 @@ import s from './IdAndStatus.module.scss' interface IdAndStatusProps { id?: string; - status: "waiting" | "delivering" | "delivered"; + status: "Waiting" | "Delivering" | "Delivered"; } -const IdAndStatus = ({ id, status="waiting" } : IdAndStatusProps) => { +const IdAndStatus = ({ id, status="Waiting" } : IdAndStatusProps) => { return (
@@ -16,7 +16,7 @@ const IdAndStatus = ({ id, status="waiting" } : IdAndStatusProps) => {
{status} + })}> {status.charAt(0).toUpperCase() + status.slice(1)}
) diff --git a/src/components/modules/account/DeliveryItem/components/ReOrder/ReOrder.module.scss b/src/components/modules/account/DeliveryItem/components/ReOrder/ReOrder.module.scss index b46b528e1..517dd2e4f 100644 --- a/src/components/modules/account/DeliveryItem/components/ReOrder/ReOrder.module.scss +++ b/src/components/modules/account/DeliveryItem/components/ReOrder/ReOrder.module.scss @@ -1,27 +1,9 @@ @import '../../../../../../styles/utilities'; .reOrder { - @apply text-white custom-border-radius hidden font-bold; - padding: .4rem .6rem; - margin-right: 1rem; - background-color: var(--primary); - - @screen md { - padding: .4rem .6rem; - margin-right: 1.2rem; - } - - @screen lg { - padding: .8rem 1.2rem; - margin-right: 2.4rem; - } - + @apply hidden; + margin-right: 1.2rem; &.show { @apply block; } - - &:hover { - @apply cursor-pointer; - } - } \ No newline at end of file diff --git a/src/components/modules/account/DeliveryItem/components/ReOrder/ReOrder.tsx b/src/components/modules/account/DeliveryItem/components/ReOrder/ReOrder.tsx index 2fbc546f4..aaef9153c 100644 --- a/src/components/modules/account/DeliveryItem/components/ReOrder/ReOrder.tsx +++ b/src/components/modules/account/DeliveryItem/components/ReOrder/ReOrder.tsx @@ -1,21 +1,18 @@ import classNames from "classnames" import React from "react" +import { ButtonCommon } from "src/components/common" import s from './ReOrder.module.scss' -import Link from 'next/link' interface ReOrderProps { show: boolean; - href?: string; } -const ReOrder = ({ show=false, href="#" } : ReOrderProps) => { +const ReOrder = ({ show=false } : ReOrderProps) => { return (
- - Re-Order - + Re-Order
) } diff --git a/src/components/modules/account/DeliveryItem/components/TotalPrice/TotalPrice.module.scss b/src/components/modules/account/DeliveryItem/components/TotalPrice/TotalPrice.module.scss index 9a4f795b3..e987f30c1 100644 --- a/src/components/modules/account/DeliveryItem/components/TotalPrice/TotalPrice.module.scss +++ b/src/components/modules/account/DeliveryItem/components/TotalPrice/TotalPrice.module.scss @@ -2,11 +2,7 @@ .totalPrice { margin-left: auto; - margin-right: 1rem; - - @screen md { - margin-right: 1.2rem; - } + margin-right: 1.2rem; @screen lg { margin-right: 2.4rem; diff --git a/src/components/modules/account/index.ts b/src/components/modules/account/index.ts index 42753b0b5..8cb391e9c 100644 --- a/src/components/modules/account/index.ts +++ b/src/components/modules/account/index.ts @@ -1,3 +1,4 @@ export { default as AccountNavigation } from './AccountNavigation/AccountNavigation' export { default as DeliveryItem } from './DeliveryItem/DeliveryItem' -export { default as AccountPage } from './AccountPage/AccountPage' \ No newline at end of file +export { default as AccountPage } from './AccountPage/AccountPage' +export { default as AccountSignIn } from './AccountSignIn/AccountSignIn' diff --git a/src/components/modules/blog-detail/BlogContent/BlogContent.module.scss b/src/components/modules/blog-detail/BlogContent/BlogContent.module.scss index e081b5f15..7904c99aa 100644 --- a/src/components/modules/blog-detail/BlogContent/BlogContent.module.scss +++ b/src/components/modules/blog-detail/BlogContent/BlogContent.module.scss @@ -31,12 +31,13 @@ padding: 2rem 0; } .content{ - - - - img{ - width: 100%; - border-radius: 2.4rem; + figure{ + div{ + width: 100%; + border-radius: 2.4rem; + min-height: 45.2rem; + object-fit: cover; + } } } .boxShare{ diff --git a/src/components/modules/blog-detail/BlogContent/BlogContent.tsx b/src/components/modules/blog-detail/BlogContent/BlogContent.tsx index 17d8555ae..cb9d6b8d8 100644 --- a/src/components/modules/blog-detail/BlogContent/BlogContent.tsx +++ b/src/components/modules/blog-detail/BlogContent/BlogContent.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { Author, DateTime } from "src/components/common"; +import { Author, DateTime, ImgWithLink } from "src/components/common"; import IconFacebook from 'src/components/icons/IconFacebook'; import IconInstagram from 'src/components/icons/IconInstagram'; import IconTwitter from 'src/components/icons/IconTwitter'; @@ -55,7 +55,10 @@ const BlogContent = ({}:BlogContentProps) => { You can eat broccoli stems. In fact, they are delicious. Just use a peeler to peel off the outsides and then trim the stalks into small 1/4”-1/2” cubes.


- blog-detail + +
+ +
diff --git a/src/components/modules/blog-detail/BlogDetailImg/BlogDetailImg.module.scss b/src/components/modules/blog-detail/BlogDetailImg/BlogDetailImg.module.scss index 98206b439..aad3aebbf 100644 --- a/src/components/modules/blog-detail/BlogDetailImg/BlogDetailImg.module.scss +++ b/src/components/modules/blog-detail/BlogDetailImg/BlogDetailImg.module.scss @@ -3,10 +3,14 @@ padding-bottom: 3.2rem; } .image{ - width: 100%; - padding: 0 2rem; - margin-bottom: 2rem; - border-radius: 2.4rem; + div{ + width: 100%; + padding: 0 2rem; + margin-bottom: 2rem; + border-radius: 2.4rem; + min-height: 45.2rem; + } + @screen md { width: 90%; margin:0 auto; diff --git a/src/components/modules/blog-detail/BlogDetailImg/BlogDetailImg.tsx b/src/components/modules/blog-detail/BlogDetailImg/BlogDetailImg.tsx index b7eb6aaef..ed9b88a29 100644 --- a/src/components/modules/blog-detail/BlogDetailImg/BlogDetailImg.tsx +++ b/src/components/modules/blog-detail/BlogDetailImg/BlogDetailImg.tsx @@ -1,5 +1,6 @@ import React from 'react'; +import { ImgWithLink } from 'src/components/common'; import BreadcrumbCommon from 'src/components/common/BreadcrumbCommon/BreadcrumbCommon'; import s from './BlogDetailImg.module.scss'; interface Props { @@ -19,7 +20,9 @@ const BlogDetailImg = ({}:Props ) => {
- Ảnh đại diện +
+ +
) } diff --git a/src/components/modules/blog-detail/BlogDetailImg/img/tong-hop-21-dac-san-sai-gon-ngon-noi-tieng-khong-an-that-co-loi-2.jpg b/src/components/modules/blog-detail/BlogDetailImg/img/tong-hop-21-dac-san-sai-gon-ngon-noi-tieng-khong-an-that-co-loi-2.jpg new file mode 100644 index 000000000..ca84eae92 Binary files /dev/null and b/src/components/modules/blog-detail/BlogDetailImg/img/tong-hop-21-dac-san-sai-gon-ngon-noi-tieng-khong-an-that-co-loi-2.jpg differ diff --git a/src/components/modules/blogs/BlogsList/BlogsList.tsx b/src/components/modules/blogs/BlogsList/BlogsList.tsx index 536aa4afd..9b7ddc1e0 100644 --- a/src/components/modules/blogs/BlogsList/BlogsList.tsx +++ b/src/components/modules/blogs/BlogsList/BlogsList.tsx @@ -3,12 +3,6 @@ import CardBlog, { BlogCardProps } from 'src/components/common/CardBlog/CardBlog import PaginationCommon from 'src/components/common/PaginationCommon/PaginationCommon' import s from "./BlogsList.module.scss" import { DEFAULT_BLOG_PAGE_SIZE } from 'src/utils/constanst.utils' -import image15 from '../../../../../public/assets/images/image15.png' -import image16 from '../../../../../public/assets/images/image16.png' -import image17 from '../../../../../public/assets/images/image17.png' -import image21 from '../../../../../public/assets/images/image21.png' -import image22 from '../../../../../public/assets/images/image22.png' -import image23 from '../../../../../public/assets/images/image23.png' interface BlogsListProps { data?: BlogCardProps[], @@ -16,109 +10,109 @@ interface BlogsListProps { const BLOGSLIST_DATA = [ { - imageSrc: image15.src, + imageSrc: "https://user-images.githubusercontent.com/46085455/133185783-8100ef4e-7a72-4dc1-bb12-2ca46b56b393.png", title: "1", description: "The DEBM diet stands for "+"Delicious Happy Fun Diet"+". This diet was popularized by Robert...", slug: "happy-diet" }, { - imageSrc: image16.src, + imageSrc: "https://user-images.githubusercontent.com/46085455/133185911-df505d10-fdcd-4312-add3-7c62ad8af71e.png", title: "2", description: "Aloe vera or aloe vera is a green plant, has thorns on the side of the skin with yellowish patches and...", slug: "happy-diet" }, { - imageSrc: image17.src, + imageSrc: "https://user-images.githubusercontent.com/46085455/133185959-7ad75580-ca6d-4684-83d9-3f64500bbc97.png", title: "3", description: "Dragon fruit is a type of fruit that is a favorite for many people because of its delicious and fresh...", slug: "happy-diet" }, { - imageSrc: image21.src, + imageSrc: "https://user-images.githubusercontent.com/46085455/133186410-d8718d90-82fb-46cb-a0f2-0ec96356ae89.png", title: "4", description: "The DEBM diet stands for "+"Delicious Happy Fun Diet"+". This diet was popularized by Robert...", slug: "happy-diet" }, { - imageSrc: image22.src, + imageSrc: "https://user-images.githubusercontent.com/46085455/133186474-b2d89bbc-32ed-4174-a05e-3d388c0a39ff.png", title: "5", description: "Aloe vera or aloe vera is a green plant, has thorns on the side of the skin with yellowish patches and...", slug: "happy-diet" }, { - imageSrc: image23.src, + imageSrc: "https://user-images.githubusercontent.com/46085455/133186545-d860f4ee-222c-4d72-a876-808af0f397a0.png", title: "6", description: "Dragon fruit is a type of fruit that is a favorite for many people because of its delicious and fresh...", slug: "happy-diet" }, { - imageSrc: image15.src, + imageSrc: "https://user-images.githubusercontent.com/46085455/133185783-8100ef4e-7a72-4dc1-bb12-2ca46b56b393.png", title: "7", description: "The DEBM diet stands for "+"Delicious Happy Fun Diet"+". This diet was popularized by Robert...", slug: "happy-diet" }, { - imageSrc: image16.src, + imageSrc: "https://user-images.githubusercontent.com/46085455/133185911-df505d10-fdcd-4312-add3-7c62ad8af71e.png", title: "8", description: "Aloe vera or aloe vera is a green plant, has thorns on the side of the skin with yellowish patches and...", slug: "happy-diet" }, { - imageSrc: image17.src, + imageSrc: "https://user-images.githubusercontent.com/46085455/133185959-7ad75580-ca6d-4684-83d9-3f64500bbc97.png", title: "9", description: "Dragon fruit is a type of fruit that is a favorite for many people because of its delicious and fresh...", slug: "happy-diet" }, { - imageSrc: image23.src, + imageSrc: "https://user-images.githubusercontent.com/46085455/133186545-d860f4ee-222c-4d72-a876-808af0f397a0.png", title: "10", description: "Dragon fruit is a type of fruit that is a favorite for many people because of its delicious and fresh...", slug: "happy-diet" }, { - imageSrc: image21.src, + imageSrc: "https://user-images.githubusercontent.com/46085455/133186410-d8718d90-82fb-46cb-a0f2-0ec96356ae89.png", title: "11", description: "The DEBM diet stands for "+"Delicious Happy Fun Diet"+". This diet was popularized by Robert...", slug: "happy-diet" }, { - imageSrc: image22.src, + imageSrc: "https://user-images.githubusercontent.com/46085455/133186474-b2d89bbc-32ed-4174-a05e-3d388c0a39ff.png", title: "12", description: "Aloe vera or aloe vera is a green plant, has thorns on the side of the skin with yellowish patches and...", slug: "happy-diet" }, { - imageSrc: image15.src, + imageSrc: "https://user-images.githubusercontent.com/46085455/133185783-8100ef4e-7a72-4dc1-bb12-2ca46b56b393.png", title: "13", description: "The DEBM diet stands for "+"Delicious Happy Fun Diet"+". This diet was popularized by Robert...", slug: "happy-diet" }, { - imageSrc: image16.src, + imageSrc: "https://user-images.githubusercontent.com/46085455/133185911-df505d10-fdcd-4312-add3-7c62ad8af71e.png", title: "14", description: "Aloe vera or aloe vera is a green plant, has thorns on the side of the skin with yellowish patches and...", slug: "happy-diet" }, { - imageSrc: image17.src, + imageSrc: "https://user-images.githubusercontent.com/46085455/133185959-7ad75580-ca6d-4684-83d9-3f64500bbc97.png", title: "15", description: "Dragon fruit is a type of fruit that is a favorite for many people because of its delicious and fresh...", slug: "happy-diet" }, { - imageSrc: image21.src, + imageSrc: "https://user-images.githubusercontent.com/46085455/133186410-d8718d90-82fb-46cb-a0f2-0ec96356ae89.png", title: "16", description: "The DEBM diet stands for "+"Delicious Happy Fun Diet"+". This diet was popularized by Robert...", slug: "happy-diet" }, { - imageSrc: image23.src, + imageSrc: "https://user-images.githubusercontent.com/46085455/133186545-d860f4ee-222c-4d72-a876-808af0f397a0.png", title: "17", description: "Dragon fruit is a type of fruit that is a favorite for many people because of its delicious and fresh...", slug: "happy-diet" }, { - imageSrc: image22.src, + imageSrc: "https://user-images.githubusercontent.com/46085455/133186474-b2d89bbc-32ed-4174-a05e-3d388c0a39ff.png", title: "18", description: "Aloe vera or aloe vera is a green plant, has thorns on the side of the skin with yellowish patches and...", slug: "happy-diet" diff --git a/src/components/modules/blogs/FeaturedCardBlog/FeaturedCardBlog.module.scss b/src/components/modules/blogs/FeaturedCardBlog/FeaturedCardBlog.module.scss index 6fb16450c..f8e2ff3e8 100644 --- a/src/components/modules/blogs/FeaturedCardBlog/FeaturedCardBlog.module.scss +++ b/src/components/modules/blogs/FeaturedCardBlog/FeaturedCardBlog.module.scss @@ -11,13 +11,15 @@ } } .left { - max-width: 59.8rem; - img { - border-radius: 2.4rem; + > div{ + min-width: 59.8rem; + min-height: 33.6rem; + img { + border-radius: 2.4rem; + } } } .right { - flex-shrink: 3; @screen lg { margin-left: 6.4rem; } diff --git a/src/components/modules/blogs/FeaturedCardBlog/FeaturedCardBlog.tsx b/src/components/modules/blogs/FeaturedCardBlog/FeaturedCardBlog.tsx index 2bd158d79..ec90633d8 100644 --- a/src/components/modules/blogs/FeaturedCardBlog/FeaturedCardBlog.tsx +++ b/src/components/modules/blogs/FeaturedCardBlog/FeaturedCardBlog.tsx @@ -1,14 +1,11 @@ import s from './FeaturedCardBlog.module.scss' -import { Author, DateTime } from 'src/components/common' -import Image from "next/image"; -import image20 from '../../../../../public/assets/images/image20.png' -import author from '../../../../../public/assets/images/author.png' +import { Author, DateTime, ImgWithLink } from 'src/components/common' interface FeaturedCardBlogProps{ title?: string, content?: string, - imgSrc?: any, - imgAuthor?: any, + imgSrc?: string, + imgAuthor?: string, date?: string, authorName?: string, } @@ -16,8 +13,8 @@ interface FeaturedCardBlogProps{ const FEATURED_DATA = { title: "Flammekueche with green asparagus", content: "Traditionally, the Flammekueche is made with rapeseed oil, which, contrary to popular belief, is indeed an oil that can be cooked hot and is not limited to seasoning. It is important to vary the oils in the kitchen to take advantage of the benefits of each. Rapeseed oil is an oil rich in omega 3 which participate in the proper functioning of the cardiovascular system as well as in vitamins E which contributes to the protection of cells against oxidative stress. In short, oils are your friends 😉", - imgSrc: image20, - imgAuthor: author.src, + imgSrc: "https://user-images.githubusercontent.com/46085455/133186666-1ea8081f-4319-4617-8644-d20ed14b1825.png", + imgAuthor: "https://user-images.githubusercontent.com/46085455/133186783-d0c71d43-b7bc-44b6-b560-818c71bd162f.png", date: "APRIL 30, 2021", author: "Alessandro Del Piero" } @@ -34,7 +31,7 @@ const FeaturedCardBlog = ({
- image feature card +
diff --git a/src/components/modules/checkout/CheckoutSuccess/CheckoutSuccess.module.scss b/src/components/modules/checkout/CheckoutSuccess/CheckoutSuccess.module.scss new file mode 100644 index 000000000..c7d4b2859 --- /dev/null +++ b/src/components/modules/checkout/CheckoutSuccess/CheckoutSuccess.module.scss @@ -0,0 +1,38 @@ +@import '../../../../styles/utilities'; + +.checkoutSuccessWrapper { + @apply flex items-center justify-center; + margin-top: -3.2rem; + + .checkoutSuccess { + border-radius: 80% 90% 18% 10% / 20% 10% 27% 20%; + max-width: 77.6rem; + height: fit-content; + background: + url('./assets/veget.png') left 0 top 0 no-repeat, + url('./assets/fish.png') right 0 top 0 no-repeat, + url('./assets/freezeShrimp.png') right 0 bottom 0 no-repeat, + url('./assets/coffeeBean.png') left 0 bottom 0 no-repeat; + background-color: #E3F2E9; + + .checkoutContent { + @apply text-center; + margin: 7.2rem 4.8rem 6.4rem 4.8rem; + + .checkoutMsg { + @apply heading-1 font-heading; + margin-top: 3.2rem; + margin-bottom: 1.6rem; + } + + .checkoutSubMsg { + @apply sub-headline; + margin-bottom: 4rem; + } + + .backToHomeBtn { + @apply flex justify-center; + } + } + } +} \ No newline at end of file diff --git a/src/components/modules/checkout/CheckoutSuccess/CheckoutSuccess.tsx b/src/components/modules/checkout/CheckoutSuccess/CheckoutSuccess.tsx new file mode 100644 index 000000000..277cd5e30 --- /dev/null +++ b/src/components/modules/checkout/CheckoutSuccess/CheckoutSuccess.tsx @@ -0,0 +1,34 @@ +import React from "react"; +import s from './CheckoutSuccess.module.scss'; + +import Link from "next/link"; + +import checkIcon from './assets/checkIcon.png'; + +import { ButtonCommon, StaticImage } from "src/components/common"; +import { IconArrowRight } from "src/components/icons"; + +const CheckoutSuccess = () => { + return ( +
+
+
+ + +
Your purchase has been successed!
+
Last call! Shop deep deals on 100+ bulk picks while you can.
+ + +
+
+
+ ) +} + +export default CheckoutSuccess \ No newline at end of file diff --git a/src/components/modules/checkout/CheckoutSuccess/assets/checkIcon.png b/src/components/modules/checkout/CheckoutSuccess/assets/checkIcon.png new file mode 100644 index 000000000..9d97234fb Binary files /dev/null and b/src/components/modules/checkout/CheckoutSuccess/assets/checkIcon.png differ diff --git a/src/components/modules/checkout/CheckoutSuccess/assets/coffeeBean.png b/src/components/modules/checkout/CheckoutSuccess/assets/coffeeBean.png new file mode 100644 index 000000000..742f30b68 Binary files /dev/null and b/src/components/modules/checkout/CheckoutSuccess/assets/coffeeBean.png differ diff --git a/src/components/modules/checkout/CheckoutSuccess/assets/fish.png b/src/components/modules/checkout/CheckoutSuccess/assets/fish.png new file mode 100644 index 000000000..14f676f64 Binary files /dev/null and b/src/components/modules/checkout/CheckoutSuccess/assets/fish.png differ diff --git a/src/components/modules/checkout/CheckoutSuccess/assets/freezeShrimp.png b/src/components/modules/checkout/CheckoutSuccess/assets/freezeShrimp.png new file mode 100644 index 000000000..5b3a501ac Binary files /dev/null and b/src/components/modules/checkout/CheckoutSuccess/assets/freezeShrimp.png differ diff --git a/src/components/modules/checkout/CheckoutSuccess/assets/veget.png b/src/components/modules/checkout/CheckoutSuccess/assets/veget.png new file mode 100644 index 000000000..83b8f51cc Binary files /dev/null and b/src/components/modules/checkout/CheckoutSuccess/assets/veget.png differ diff --git a/src/components/modules/error/ErrorPage/Errorpage.module.scss b/src/components/modules/error-page/ErrorContent/ErrorContent.module.scss similarity index 97% rename from src/components/modules/error/ErrorPage/Errorpage.module.scss rename to src/components/modules/error-page/ErrorContent/ErrorContent.module.scss index 562a20f8b..379c01c46 100644 --- a/src/components/modules/error/ErrorPage/Errorpage.module.scss +++ b/src/components/modules/error-page/ErrorContent/ErrorContent.module.scss @@ -6,7 +6,7 @@ background-color: white; .inner{ - height: 100vh; + height: 70vh; .logo{ margin-top: 2rem; } diff --git a/src/components/modules/error/ErrorPage/ErrorPage.tsx b/src/components/modules/error-page/ErrorContent/ErrorContent.tsx similarity index 86% rename from src/components/modules/error/ErrorPage/ErrorPage.tsx rename to src/components/modules/error-page/ErrorContent/ErrorContent.tsx index 0e550b766..112f9339c 100644 --- a/src/components/modules/error/ErrorPage/ErrorPage.tsx +++ b/src/components/modules/error-page/ErrorContent/ErrorContent.tsx @@ -1,12 +1,12 @@ import Link from 'next/link'; import React from 'react'; import { ButtonCommon } from 'src/components/common'; -import s from './ErrorPage.module.scss'; +import s from './ErrorContent.module.scss'; interface Props { } -const ErrorPage = ({ }: Props) => { +const ErrorContent = ({ }: Props) => { return (
@@ -26,4 +26,4 @@ const ErrorPage = ({ }: Props) => { ) } -export default ErrorPage +export default ErrorContent diff --git a/src/components/modules/error-page/index.tsx b/src/components/modules/error-page/index.tsx new file mode 100644 index 000000000..3732145a5 --- /dev/null +++ b/src/components/modules/error-page/index.tsx @@ -0,0 +1 @@ +export {default as ErrorContent} from './ErrorContent/ErrorContent'; \ No newline at end of file diff --git a/src/components/modules/error/index.tsx b/src/components/modules/error/index.tsx deleted file mode 100644 index 4fadf1398..000000000 --- a/src/components/modules/error/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export {default as ErrorPage} from './ErrorPage/ErrorPage'; \ No newline at end of file diff --git a/src/components/modules/home/HomeBanner/HomeBanner.module.scss b/src/components/modules/home/HomeBanner/HomeBanner.module.scss index fdba411c0..ed8c5c7a7 100644 --- a/src/components/modules/home/HomeBanner/HomeBanner.module.scss +++ b/src/components/modules/home/HomeBanner/HomeBanner.module.scss @@ -11,14 +11,14 @@ @apply grid; grid-template-columns: 1fr 1.8fr; .left { - @apply relative flex items-end justify-center custom-border-radius-lg; + @apply relative flex items-end justify-center shape-common-lg; margin-right: 1.6rem; .imgWrap { @apply absolute w-full h-full; top: 0; left: 0; > div { - @apply w-full h-full custom-border-radius-lg; + @apply w-full h-full shape-common-lg; } img { object-fit: cover; @@ -36,6 +36,7 @@ letter-spacing: -0.03em; font-weight: bold; text-transform: uppercase; + &::after { @apply absolute; content: ""; diff --git a/src/components/modules/home/HomeBanner/HomeBanner.tsx b/src/components/modules/home/HomeBanner/HomeBanner.tsx index 18432ec82..ebb9af6bf 100644 --- a/src/components/modules/home/HomeBanner/HomeBanner.tsx +++ b/src/components/modules/home/HomeBanner/HomeBanner.tsx @@ -1,9 +1,9 @@ import React from 'react' -import { Banner } from 'src/components/common' +import { Banner, StaticImage } from 'src/components/common' +import { ROUTE } from 'src/utils/constanst.utils' import BannerImgRight from './assets/banner_full.png' import HomeBannerImg from './assets/home_banner.png' import s from './HomeBanner.module.scss' -import Image from 'next/image' interface Props { className?: string @@ -15,7 +15,7 @@ const HomeBanner = ({ }: Props) => {
- +
Freshness
guaranteed @@ -28,12 +28,14 @@ const HomeBanner = ({ }: Props) => { subtitle: "Last call! Shop deep deals on 100+ bulk picks while you can.", imgLink: BannerImgRight.src, size: "small", + linkButton: ROUTE.PRODUCTS, }, { title: "Save 15% on your first order 2", subtitle: "Last call! Shop deep deals on 100+ bulk picks while you can.", imgLink: BannerImgRight.src, size: "small", + linkButton: ROUTE.PRODUCTS, } ] } diff --git a/src/components/modules/home/HomeCategories/CategoriesItem/CategoryItem.module.scss b/src/components/modules/home/HomeCategories/CategoriesItem/CategoryItem.module.scss index 41d593b6e..ae2b758e1 100644 --- a/src/components/modules/home/HomeCategories/CategoriesItem/CategoryItem.module.scss +++ b/src/components/modules/home/HomeCategories/CategoriesItem/CategoryItem.module.scss @@ -2,7 +2,7 @@ .categoryItem { .categoryItemImage { - @apply transition-all duration-200; + @apply flex justify-center items-center transition-all duration-200; width: 10.6rem; margin: 0 auto; max-height: 14rem; diff --git a/src/components/modules/home/HomeCategories/CategoriesItem/CategoryItem.tsx b/src/components/modules/home/HomeCategories/CategoriesItem/CategoryItem.tsx index 64046c1b3..1f94e176e 100644 --- a/src/components/modules/home/HomeCategories/CategoriesItem/CategoryItem.tsx +++ b/src/components/modules/home/HomeCategories/CategoriesItem/CategoryItem.tsx @@ -4,6 +4,7 @@ import s from './CategoryItem.module.scss' import classNames from 'classnames'; import Image from "next/image"; import Link from 'next/link'; +import { StaticImage } from 'src/components/common'; interface CategoryItem { image: StaticImageData, @@ -17,7 +18,7 @@ const CategoryItem = ({ image, name, link }: CategoryItem) => { diff --git a/src/components/modules/home/HomeCategories/HomeCategories.module.scss b/src/components/modules/home/HomeCategories/HomeCategories.module.scss index 9865b95ed..f4135bd3c 100644 --- a/src/components/modules/home/HomeCategories/HomeCategories.module.scss +++ b/src/components/modules/home/HomeCategories/HomeCategories.module.scss @@ -4,7 +4,7 @@ margin: 3rem auto; .inner { - @apply relative spacing-horizontal; + @apply relative spacing-horizontal w-full; padding-top: 1.6rem; padding-bottom: 1.6rem; @@ -15,7 +15,7 @@ } @screen md { @apply relative; - margin: 5.6rem auto; + margin: 12.8rem auto; &::before, &::after { diff --git a/src/components/modules/home/HomeFeature/HomeFeature.module.scss b/src/components/modules/home/HomeFeature/HomeFeature.module.scss index 1753edf99..3275bfb3b 100644 --- a/src/components/modules/home/HomeFeature/HomeFeature.module.scss +++ b/src/components/modules/home/HomeFeature/HomeFeature.module.scss @@ -1,16 +1,5 @@ @import "../../../../styles/utilities"; .homeFeature { - @apply spacing-horizontal; - background-color: #ffffff; - height: fit-content; - margin: 3.2rem auto; - @screen md { - @apply grid grid-cols-3; - grid-gap: 2.4rem; - margin: 6.4rem auto; - } - @screen md { - grid-gap: 4rem; - } + @apply spacing-horizontal-left bg-white; } diff --git a/src/components/modules/home/HomeFeature/HomeFeature.tsx b/src/components/modules/home/HomeFeature/HomeFeature.tsx index af6ec7287..d8851aa30 100644 --- a/src/components/modules/home/HomeFeature/HomeFeature.tsx +++ b/src/components/modules/home/HomeFeature/HomeFeature.tsx @@ -1,25 +1,34 @@ import React from 'react' import s from './HomeFeature.module.scss' -import HomeFeatureItem from './components/HomeFeatureItem/HomeFeatureItem' +import FirstPic from './assets/10h30-11h.png' +import SecondPic from './assets/8h.png' +import ThirdPic from './assets/green.png' -const HomeFeature = () => { +import HomeFeatureCarousel from './components/HomeFeatureCarousel/HomeFeatureCarousel' + +const CAROUSEL_DATA = [ + { + image: FirstPic, + children: Webshop owner will upload products at 10:30pm shoppers can buy fresh products at 11pm., + }, + { + image: SecondPic, + children: Most fresh fish and seafood will be listed at 8am from inventory., + }, + { + image: ThirdPic, + children: Show that food will be shipped in a greengrocery plastic bag., + }, +] + +const HomeFeature = () => { return ( -
- - Webshop owner will upload products at 10:30pm shoppers can buy fresh products at 11pm. - - - - Most fresh fish and seafood will be listed at 8am from inventory. - - - - Show that food will be shipped in a greengrocery plastic bag. - -
+
+ +
) } -export default HomeFeature +export default HomeFeature \ No newline at end of file diff --git a/src/components/modules/home/HomeFeature/assets/10h30-11h-mobile.png b/src/components/modules/home/HomeFeature/assets/10h30-11h-mobile.png deleted file mode 100644 index 871e0e15b..000000000 Binary files a/src/components/modules/home/HomeFeature/assets/10h30-11h-mobile.png and /dev/null differ diff --git a/src/components/modules/home/HomeFeature/assets/10h30-11h-desktop.png b/src/components/modules/home/HomeFeature/assets/10h30-11h.png similarity index 100% rename from src/components/modules/home/HomeFeature/assets/10h30-11h-desktop.png rename to src/components/modules/home/HomeFeature/assets/10h30-11h.png diff --git a/src/components/modules/home/HomeFeature/assets/8h-mobile.png b/src/components/modules/home/HomeFeature/assets/8h-mobile.png deleted file mode 100644 index e734cf1e5..000000000 Binary files a/src/components/modules/home/HomeFeature/assets/8h-mobile.png and /dev/null differ diff --git a/src/components/modules/home/HomeFeature/assets/8h-desktop.png b/src/components/modules/home/HomeFeature/assets/8h.png similarity index 100% rename from src/components/modules/home/HomeFeature/assets/8h-desktop.png rename to src/components/modules/home/HomeFeature/assets/8h.png diff --git a/src/components/modules/home/HomeFeature/assets/green-desktop.png b/src/components/modules/home/HomeFeature/assets/green.png similarity index 100% rename from src/components/modules/home/HomeFeature/assets/green-desktop.png rename to src/components/modules/home/HomeFeature/assets/green.png diff --git a/src/components/modules/home/HomeFeature/components/HomeFeatureCarousel/HomeFeatureCarousel.tsx b/src/components/modules/home/HomeFeature/components/HomeFeatureCarousel/HomeFeatureCarousel.tsx new file mode 100644 index 000000000..32f545020 --- /dev/null +++ b/src/components/modules/home/HomeFeature/components/HomeFeatureCarousel/HomeFeatureCarousel.tsx @@ -0,0 +1,48 @@ +import React from 'react' +import { TOptionsEvents } from 'keen-slider' + +import HomeFeatureItem, {HomeFeatureItemProps} from '../HomeFeatureItem/HomeFeatureItem' +import CarouselCommon, {CarouselCommonProps} from '../../../../../common/CarouselCommon/CarouselCommon' + +interface HomeFeatureCarouselProps + extends Omit, 'Component' | "option"> { + option?: TOptionsEvents +} + +const OPTION_DEFAULT: TOptionsEvents = { + slidesPerView: 1.2, + mode: 'free', + breakpoints: { + '(min-width: 640px)': { + slidesPerView: 1.8, + }, + '(min-width: 768px)': { + slidesPerView: 2.1, + }, + '(min-width: 1008px)': { + slidesPerView: 2.3, + }, + '(min-width: 1280px)': { + slidesPerView: 2.8, + }, + '(min-width: 1440px)': { + slidesPerView: 3, + }, + }, + } + +const HomeFeatureCarousel = ({option, data, ...props} : HomeFeatureCarouselProps) => { + return ( +
+ + data={data} + Component={HomeFeatureItem} + {...props} + option={{ ...OPTION_DEFAULT, ...option }} + /> +
+ ) + +} + +export default HomeFeatureCarousel \ No newline at end of file diff --git a/src/components/modules/home/HomeFeature/components/HomeFeatureItem/HomeFeatureItem.module.scss b/src/components/modules/home/HomeFeature/components/HomeFeatureItem/HomeFeatureItem.module.scss index d3dcb518b..c0b8d49ba 100644 --- a/src/components/modules/home/HomeFeature/components/HomeFeatureItem/HomeFeatureItem.module.scss +++ b/src/components/modules/home/HomeFeature/components/HomeFeatureItem/HomeFeatureItem.module.scss @@ -1,56 +1,18 @@ @import "../../../../../../styles/utilities"; .homeFeatureItem { - @apply flex items-center; - width: fit-content; - margin: auto; - - @screen md { - @apply flex flex-col items-center justify-between; - } - - @screen lg { - @apply flex flex-row; - } + @apply flex items-center justify-center; + margin-right: 0.8rem; + height: 100%; .itemImg { - @apply flex float-left clear-both; margin-right: 2.4rem; - align-items: center; - &.firstImg { - margin-top: 1rem; - content: url("../../assets/10h30-11h-desktop.png"); - } - &.secondImg { - margin-top: 1rem; - content: url("../../assets/8h-desktop.png"); - } - &.thirdImg { - margin-top: 1rem; - content: url("../../assets/green-desktop.png"); - } - - @screen md { - @apply flex flex-col justify-center items-center; - margin: auto; - margin-top: 0.8rem; - } - - @screen lg { - @apply flex float-left clear-both; - margin-right: 2.4rem; - margin-top: 0; - } + max-width: 12rem; + min-width: 8rem; } .itemText { max-width: 28rem; - min-width: 12rem; - @screen md { - @apply text-center; - } - @screen lg { - @apply text-left; - } + min-width: none; } } diff --git a/src/components/modules/home/HomeFeature/components/HomeFeatureItem/HomeFeatureItem.tsx b/src/components/modules/home/HomeFeature/components/HomeFeatureItem/HomeFeatureItem.tsx index eb566bdc9..3cc2db47f 100644 --- a/src/components/modules/home/HomeFeature/components/HomeFeatureItem/HomeFeatureItem.tsx +++ b/src/components/modules/home/HomeFeature/components/HomeFeatureItem/HomeFeatureItem.tsx @@ -1,21 +1,21 @@ import React from 'react' -import classNames from 'classnames' import s from './HomeFeatureItem.module.scss' +import { StaticImage } from 'src/components/common' -interface HomeFeatureItemProps { - image: string; - children: any; +export interface HomeFeatureItemProps { + image: StaticImageData; + children: React.ReactNode; } const HomeFeatureItem = ({ image, children }: HomeFeatureItemProps) => { return (
- home feature item img +
+ +
+
{children}
) diff --git a/src/components/modules/home/HomeSpice/HomeSpice.module.scss b/src/components/modules/home/HomeSpice/HomeSpice.module.scss new file mode 100644 index 000000000..62d6f1f78 --- /dev/null +++ b/src/components/modules/home/HomeSpice/HomeSpice.module.scss @@ -0,0 +1,3 @@ +.homeSpiceWarpper{ + margin-bottom: 8rem; +} \ No newline at end of file diff --git a/src/components/modules/home/HomeSpice/HomeSpice.tsx b/src/components/modules/home/HomeSpice/HomeSpice.tsx new file mode 100644 index 000000000..5c24f1809 --- /dev/null +++ b/src/components/modules/home/HomeSpice/HomeSpice.tsx @@ -0,0 +1,19 @@ +import React from 'react' +import { ProductCarousel } from 'src/components/common' +import { SPICE_DATA_TEST } from "../../../../utils/demo-data" +import s from './HomeSpice.module.scss' + +interface HomeSpice { + +} + + +const HomeSpice = ({}: HomeSpice) => { + return ( +
+ +
+ ) +} + +export default HomeSpice diff --git a/src/components/modules/home/HomeVideo/HomeVideo.tsx b/src/components/modules/home/HomeVideo/HomeVideo.tsx index eac203769..8d9e33be0 100644 --- a/src/components/modules/home/HomeVideo/HomeVideo.tsx +++ b/src/components/modules/home/HomeVideo/HomeVideo.tsx @@ -5,11 +5,13 @@ import LogoBrand from './assets/logo_maggi.png' import { VideoPlayer } from 'src/components/common' import HeadingCommon from '../../../common/HeadingCommon/HeadingCommon' + interface Props { className?: string children?: any } + const HomeVideo = ({ }: Props) => { return (
diff --git a/src/components/modules/product-detail/ProductInfoDetail/components/ProductImgItem/ProductImgItem.module.scss b/src/components/modules/product-detail/ProductInfoDetail/components/ProductImgItem/ProductImgItem.module.scss new file mode 100644 index 000000000..5ce5cc0ce --- /dev/null +++ b/src/components/modules/product-detail/ProductInfoDetail/components/ProductImgItem/ProductImgItem.module.scss @@ -0,0 +1,8 @@ +.productImgItem { + @apply w-full h-full; + min-height: 30rem; + img { + object-fit: contain; + } +} + diff --git a/src/components/modules/product-detail/ProductInfoDetail/components/ProductImgItem/ProductImgItem.tsx b/src/components/modules/product-detail/ProductInfoDetail/components/ProductImgItem/ProductImgItem.tsx new file mode 100644 index 000000000..95236266c --- /dev/null +++ b/src/components/modules/product-detail/ProductInfoDetail/components/ProductImgItem/ProductImgItem.tsx @@ -0,0 +1,19 @@ +import React from 'react' +import { ImgWithLink } from 'src/components/common' +import s from './ProductImgItem.module.scss' + +export interface ProductImgItemProps { + src: string + alt?: string +} + + +const ProductImgItem = ({ src, alt }: ProductImgItemProps) => { + return ( +
+ +
+ ) +} + +export default ProductImgItem diff --git a/src/components/modules/product-detail/ProductInfoDetail/components/ProductImgs/ProductImgs.module.scss b/src/components/modules/product-detail/ProductInfoDetail/components/ProductImgs/ProductImgs.module.scss index a10eb5865..94ce13cc1 100644 --- a/src/components/modules/product-detail/ProductInfoDetail/components/ProductImgs/ProductImgs.module.scss +++ b/src/components/modules/product-detail/ProductInfoDetail/components/ProductImgs/ProductImgs.module.scss @@ -6,4 +6,7 @@ @screen lg { max-width: 60rem; } + > div { + width: 100%; + } } diff --git a/src/components/modules/product-detail/ProductInfoDetail/components/ProductImgs/ProductImgs.tsx b/src/components/modules/product-detail/ProductInfoDetail/components/ProductImgs/ProductImgs.tsx index 325c6b453..c300fba38 100644 --- a/src/components/modules/product-detail/ProductInfoDetail/components/ProductImgs/ProductImgs.tsx +++ b/src/components/modules/product-detail/ProductInfoDetail/components/ProductImgs/ProductImgs.tsx @@ -1,6 +1,6 @@ import React from 'react' -import { CarouselCommon, ImgWithLink } from 'src/components/common' -import { ImgWithLinkProps } from 'src/components/common/ImgWithLink/ImgWithLink' +import { CarouselCommon } from 'src/components/common' +import ProductImgItem, { ProductImgItemProps } from '../ProductImgItem/ProductImgItem' import s from './ProductImgs.module.scss' interface Props { @@ -9,6 +9,10 @@ interface Props { } const DATA = [ + { + src: 'https://user-images.githubusercontent.com/76729908/133026929-199799fc-bd75-4445-a24d-15c0e41796eb.png', + alt: 'Meat', + }, { src: 'https://user-images.githubusercontent.com/76729908/130574371-3b75fa72-9552-4605-aba9-a4b31cd9dce7.png', alt: 'Broccoli', @@ -26,10 +30,10 @@ const option = { const ProductImgs = ({ }: Props) => { return (
- + data={DATA} itemKey="product-detail-img" - Component={ImgWithLink} + Component={ProductImgItem} option={option} isDot={true} /> @@ -38,3 +42,4 @@ const ProductImgs = ({ }: Props) => { } export default ProductImgs + diff --git a/src/components/modules/product-detail/ProductInfoDetail/components/ProductInfo/ProductInfo.module.scss b/src/components/modules/product-detail/ProductInfoDetail/components/ProductInfo/ProductInfo.module.scss index 403782c51..4235edf66 100644 --- a/src/components/modules/product-detail/ProductInfoDetail/components/ProductInfo/ProductInfo.module.scss +++ b/src/components/modules/product-detail/ProductInfoDetail/components/ProductInfo/ProductInfo.module.scss @@ -64,6 +64,12 @@ margin-left: 0.8rem; } } + svg { + height: 2rem; + path { + fill: currentColor; + } + } } button { @apply w-full; diff --git a/src/components/modules/product-detail/ViewedProducts/ViewedProducts.tsx b/src/components/modules/product-detail/ViewedProducts/ViewedProducts.tsx index 820af402f..87e600416 100644 --- a/src/components/modules/product-detail/ViewedProducts/ViewedProducts.tsx +++ b/src/components/modules/product-detail/ViewedProducts/ViewedProducts.tsx @@ -8,6 +8,7 @@ const ViewedProducts = () => { title="viewed Products" subtitle="Last call! Shop deep deals on 100+ bulk picks while you can." data={PRODUCT_DATA_TEST} + hasBorderBottomMobile={true} /> ); }; diff --git a/src/components/modules/product-detail/index.ts b/src/components/modules/product-detail/index.ts index ef4461432..07fd04753 100644 --- a/src/components/modules/product-detail/index.ts +++ b/src/components/modules/product-detail/index.ts @@ -1,4 +1,3 @@ export { default as ProductInfoDetail } from './ProductInfoDetail/ProductInfoDetail' export { default as ViewedProducts } from './ViewedProducts/ViewedProducts' export { default as ReleventProducts } from './ReleventProducts/ReleventProducts' -export { default as RecommendedRecipes } from './RecommendedRecipes/RecommendedRecipes' diff --git a/src/components/modules/product-list/ProductListBanner/ProductListBanner.tsx b/src/components/modules/product-list/ProductListBanner/ProductListBanner.tsx index 17d48d637..edeaa9f35 100644 --- a/src/components/modules/product-list/ProductListBanner/ProductListBanner.tsx +++ b/src/components/modules/product-list/ProductListBanner/ProductListBanner.tsx @@ -16,7 +16,7 @@ const ProductListBanner = ({ }: Props) => { subtitle: "Last call! Shop deep deals on 100+ bulk picks while you can.", imgLink: BannerRight.src, size: "large", - }, + } ] } /> diff --git a/src/components/modules/recipes-list/RecipesList/RecipesItem/RecipesItem.module.scss b/src/components/modules/recipes-list/RecipesList/RecipesItem/RecipesItem.module.scss index 2f70eb3ca..dac6dbbc9 100644 --- a/src/components/modules/recipes-list/RecipesList/RecipesItem/RecipesItem.module.scss +++ b/src/components/modules/recipes-list/RecipesList/RecipesItem/RecipesItem.module.scss @@ -11,11 +11,12 @@ .recipesItemImage { @apply transition-all duration-200; width: 31%; - img { - @apply block object-cover; - width: 100%; - min-height: 12.5rem; - border-radius: 1.5rem; + a{ + div{ + @apply object-cover; + min-height: 19.6rem; + border-radius: 1.5rem; + } } @screen md { diff --git a/src/components/modules/recipes-list/RecipesList/RecipesItem/RecipesItem.tsx b/src/components/modules/recipes-list/RecipesList/RecipesItem/RecipesItem.tsx index f43227d5a..01918c86e 100644 --- a/src/components/modules/recipes-list/RecipesList/RecipesItem/RecipesItem.tsx +++ b/src/components/modules/recipes-list/RecipesList/RecipesItem/RecipesItem.tsx @@ -1,5 +1,6 @@ import Link from 'next/link'; import React from 'react'; +import { ImgWithLink } from 'src/components/common'; import s from './RecipesItem.module.scss'; interface RecipesItem { image:string, @@ -14,7 +15,7 @@ const RecipesItem = ({ image, name,description, link }: RecipesItem) => { diff --git a/src/components/modules/recipes-list/RecipesList/RecipesList.tsx b/src/components/modules/recipes-list/RecipesList/RecipesList.tsx index c061b9edb..f636157fa 100644 --- a/src/components/modules/recipes-list/RecipesList/RecipesList.tsx +++ b/src/components/modules/recipes-list/RecipesList/RecipesList.tsx @@ -6,7 +6,8 @@ import PaginationCommon from 'src/components/common/PaginationCommon/PaginationC import { RecipeCardProps } from 'src/components/common/RecipeCard/RecipeCard'; import { OPTION_ALL, QUERY_KEY, ROUTE } from 'src/utils/constanst.utils'; import HeadingCommon from "../../../common/HeadingCommon/HeadingCommon"; -import RecipesItem from './RecipesItem/RecipesItem'; +import { RecipeCard } from 'src/components/common' + import s from './RecipesList.module.scss'; const recipe:RecipeCardProps[] = [ @@ -46,6 +47,7 @@ const recipe:RecipeCardProps[] = [ imageSrc: 'https://user-images.githubusercontent.com/76729908/132159262-f28a9fb9-4852-47e6-80b5-d600521b548a.png', slug:"the-best-recipe-of-beef-noodle-soup" },]; + const DEFAULT_PAGESIZE_RECIPELIST = 6; const BREADCRUMB = [ @@ -159,11 +161,10 @@ const OPTIONSLECT=[ interface Props{ data?: RecipeCardProps[], recipes?:{ - id:string, title:string, - image:string, + imageSrc:string, description:string, - link:string + slug:string }[], } @@ -203,12 +204,7 @@ const RecipesList = ({ data =recipe}:Props) => {
{data?.map((item,index) => (
- +
))}
diff --git a/src/styles/_base.scss b/src/styles/_base.scss index e8719581f..a3ba0a6db 100644 --- a/src/styles/_base.scss +++ b/src/styles/_base.scss @@ -1,4 +1,5 @@ @import url("https://fonts.googleapis.com/css2?family=Nunito&family=Poppins:wght@500&family=Righteous&display=swap"); +@import '../../public/fonts/style.css'; :root { --primary: #5b9a74; @@ -41,7 +42,7 @@ --line-height: 2.4rem; --font-sans: "Nunito", -apple-system, system-ui, BlinkMacSystemFont, "Helvetica Neue", "Helvetica", sans-serif; - --font-heading: "Righteous", -apple-system, system-ui, BlinkMacSystemFont, "Helvetica Neue", "Helvetica", sans-serif; + --font-heading: "Norquay-bold", "Righteous", -apple-system, system-ui, BlinkMacSystemFont, "Helvetica Neue", "Helvetica", sans-serif; --font-logo: "Poppins", -apple-system, system-ui, BlinkMacSystemFont, "Helvetica Neue", "Helvetica", sans-serif; } @@ -79,6 +80,3 @@ html { font-feature-settings: "case" 1, "rlig" 1, "calt" 0; } -a { - -webkit-tap-highlight-color: var(--primary); -} diff --git a/src/styles/_pages.scss b/src/styles/_pages.scss new file mode 100644 index 000000000..0855aaada --- /dev/null +++ b/src/styles/_pages.scss @@ -0,0 +1,6 @@ +.page-recipe-detail { + margin-bottom: 5.4rem; + @screen lg { + margin-bottom: 12.8rem; + } +} \ No newline at end of file diff --git a/src/styles/_utilities.scss b/src/styles/_utilities.scss index c73526a27..5ce5f24af 100644 --- a/src/styles/_utilities.scss +++ b/src/styles/_utilities.scss @@ -121,12 +121,13 @@ .shape-common-border { position: relative; - $border: 2px; + $border: 1px; margin: $border; .inner { background: var(--white); clip-path: url(#svg-custom-shape); + margin: 1px; } &::before { position: absolute; @@ -152,6 +153,7 @@ .inner { padding: 2rem; + margin: 1px; clip-path: url(#svg-custom-shape-lg); } &::before { diff --git a/src/styles/main.scss b/src/styles/main.scss index 2e4abf3da..51391b33f 100644 --- a/src/styles/main.scss +++ b/src/styles/main.scss @@ -5,3 +5,5 @@ @import "~tailwindcss/utilities"; @import './utilities'; + +@import './pages' diff --git a/src/utils/constanst.utils.ts b/src/utils/constanst.utils.ts index 5090a2fec..8fb0a196b 100644 --- a/src/utils/constanst.utils.ts +++ b/src/utils/constanst.utils.ts @@ -9,19 +9,26 @@ export const SOCIAL_LINKS = { export const ROUTE = { HOME: '/', + ABOUT: '/about', + ACCOUNT: '/account', + PRODUCTS: '/products', PRODUCT_DETAIL: '/product', - ABOUT: '/about', + + BLOGS: '/blogs', BLOG_DETAIL: '/blog', - ACCOUNT: '/account', + RECIPES: '/recipes', + RECIPE_DETAIL: '/recipe', + + NOTIFICATION: '/notifications', BUSSINESS: '/bussiness', CONTACT: '/contact', + CHECKOUT: '/checkout', FAQ: '/faq', CUSTOMER_SERVICE: '/customer-service', TERM_CONDITION: '/term-condition', PRIVACY_POLICY: '/privacy-policy', - BLOGS: '/blogs', FORGOT_PASSWORD: '/forgot-password' } @@ -117,4 +124,16 @@ export const FEATURED = [ ] export const DEFAULT_BLOG_PAGE_SIZE=6; -export const FILTER_PAGE = [ROUTE.HOME,ROUTE.PRODUCTS] \ No newline at end of file + +export const FILTER_PAGE = [ROUTE.HOME,ROUTE.PRODUCTS] + +export const STATE_OPTIONS = [ + { + name: 'Hồ Chí Minh', + value: 'Hồ Chí Minh', + }, + { + name: 'Hà Nội', + value: 'Hà Nội', + }, +] diff --git a/src/utils/demo-data.ts b/src/utils/demo-data.ts index aad6653b5..1658a8b30 100644 --- a/src/utils/demo-data.ts +++ b/src/utils/demo-data.ts @@ -68,7 +68,72 @@ export const PRODUCT_DATA_TEST = [ imageSrc: "https://user-images.githubusercontent.com/76729908/131646231-2d1c3ad1-4f5b-4a8e-9874-ca731f4ce128.png", }, ] - +export const SPICE_DATA_TEST = [ + { + name: 'Tomato', + slug: 'tomato', + weight: '250g', + category: 'VEGGIE', + price: 'Rp 27.500', + imageSrc: "https://user-images.githubusercontent.com/89437339/133218370-4145e774-4d99-45f9-9200-9dc1f55b967d.png", + }, + { + name: 'Cucumber', + slug: 'tomato', + weight: '250g', + category: 'VEGGIE', + price: 'Rp 27.500', + imageSrc: "https://user-images.githubusercontent.com/89437339/133218428-20bd1a2b-b3e2-477a-8cef-2b9f0a5c8899.png", + }, + { + name: 'Carrot', + slug: 'tomato', + weight: '250g', + category: 'VEGGIE', + price: 'Rp 27.500', + imageSrc: "https://user-images.githubusercontent.com/89437339/133218473-99e96817-40b6-45a4-9fed-daa269ae912f.png", + }, + { + name: 'Salad', + slug: 'tomato', + weight: '250g', + category: 'VEGGIE', + price: 'Rp 27.500', + imageSrc: "https://user-images.githubusercontent.com/89437339/133218528-9da429bf-11ab-43a2-9700-ed7c7114cd12.png", + }, + { + name: 'Tomato', + slug: 'tomato', + weight: '250g', + category: 'VEGGIE', + price: 'Rp 27.500', + imageSrc: "https://user-images.githubusercontent.com/89437339/133218535-60015545-fe6d-4af0-9650-3c18f14b4b20.png", + }, + { + name: 'Cucumber', + slug: 'tomato', + weight: '250g', + category: 'VEGGIE', + price: 'Rp 27.500', + imageSrc: "https://user-images.githubusercontent.com/89437339/133218538-10d41f11-a484-4f42-ae1f-dc95ac9e5773.png", + }, + { + name: 'Tomato', + slug: 'tomato', + weight: '250g', + category: 'VEGGIE', + price: 'Rp 27.500', + imageSrc: "https://user-images.githubusercontent.com/89437339/133218370-4145e774-4d99-45f9-9200-9dc1f55b967d.png", + }, + { + name: 'Cucumber', + slug: 'tomato', + weight: '250g', + category: 'VEGGIE', + price: 'Rp 27.500', + imageSrc: "https://user-images.githubusercontent.com/89437339/133218428-20bd1a2b-b3e2-477a-8cef-2b9f0a5c8899.png", + }, +] export const PRODUCT_CART_DATA_TEST = [ { name: 'Tomato', diff --git a/src/utils/funtion.utils.ts b/src/utils/funtion.utils.ts index 619e9ae30..43d517589 100644 --- a/src/utils/funtion.utils.ts +++ b/src/utils/funtion.utils.ts @@ -1,5 +1,5 @@ export function isMobile() { - return window.innerWidth <= 768 + return window.innerWidth < 768 } export function removeItem(arr: Array, value: T): Array { diff --git a/src/utils/language.utils.ts b/src/utils/language.utils.ts index 8b3d8f8d5..dfd2b9604 100644 --- a/src/utils/language.utils.ts +++ b/src/utils/language.utils.ts @@ -5,6 +5,7 @@ export const LANGUAGE = { CONFIRM:'Confirm', ADD_TO_CARD: 'Add to Cart', PREORDER: 'Pre-Order Now', + SIGNIN :'Sign In' }, PLACE_HOLDER: { SEARCH: 'Search', diff --git a/tailwind.config.js b/tailwind.config.js index 69ab1ade5..9d51fd1ba 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -106,9 +106,6 @@ module.exports = { fontSize: { base: ['16px', '24px'], }, - borderRadius: { - rounded: '.8rem', - }, screens: { 'sm-only': {'min': '0', 'max': '767px'}, 'sm': '640px', @@ -125,7 +122,7 @@ module.exports = { 'xl': '1280px', // => @media (min-width: 1280px) { ... } - '2xl': '1536px', + '2xl': '1440px', // => @media (min-width: 1536px) { ... } }, caroucel: { diff --git a/yarn.lock b/yarn.lock index 96275a4eb..7d98b108e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -428,6 +428,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/runtime-corejs3@^7.10.2": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.15.4.tgz#403139af262b9a6e8f9ba04a6fdcebf8de692bf1" + integrity sha512-lWcAqKeB624/twtTc3w6w/2o9RqJPaNBhPGK6DKLSiwuVWC7WFkypWyNg+CpZoyJH0jVzv1uMtXZ/5/lQOLtCg== + dependencies: + core-js-pure "^3.16.0" + regenerator-runtime "^0.13.4" + "@babel/runtime@7.12.5": version "7.12.5" resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz" @@ -449,6 +457,13 @@ dependencies: regenerator-runtime "^0.13.4" +"@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.4.tgz#fd17d16bfdf878e6dd02d19753a39fa8a8d9c84a" + integrity sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw== + dependencies: + regenerator-runtime "^0.13.4" + "@babel/template@^7.14.5": version "7.14.5" resolved "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz" @@ -529,6 +544,21 @@ ts-node "^9" tslib "^2" +"@eslint/eslintrc@^0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" + integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== + dependencies: + ajv "^6.12.4" + debug "^4.1.1" + espree "^7.3.0" + globals "^13.9.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + "@fullhuman/postcss-purgecss@^4.0.3": version "4.0.3" resolved "https://registry.npmjs.org/@fullhuman/postcss-purgecss/-/postcss-purgecss-4.0.3.tgz" @@ -926,6 +956,20 @@ resolved "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.0.tgz" integrity sha512-sqKVVVOe5ivCaXDWivIJYVSaEgdQK9ul7a4Kity5Iw7u9+wBAPbX1RMSnLLmp7O4Vzj0WOWwMAJsTL00xwaNug== +"@humanwhocodes/config-array@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" + integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== + dependencies: + "@humanwhocodes/object-schema" "^1.2.0" + debug "^4.1.1" + minimatch "^3.0.4" + +"@humanwhocodes/object-schema@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz#87de7af9c231826fdd68ac7258f77c429e0e5fcf" + integrity sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w== + "@iarna/toml@^2.2.5": version "2.2.5" resolved "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz" @@ -948,6 +992,13 @@ resolved "https://registry.npmjs.org/@next/env/-/env-11.0.1.tgz" integrity sha512-yZfKh2U6R9tEYyNUrs2V3SBvCMufkJ07xMH5uWy8wqcl5gAXoEw6A/1LDqwX3j7pUutF9d1ZxpdGDA3Uag+aQQ== +"@next/eslint-plugin-next@11.1.2": + version "11.1.2" + resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-11.1.2.tgz#f26cf90bcb6cd2e4645e2ba253bbc9aaaa43a170" + integrity sha512-cN+ojHRsufr9Yz0rtvjv8WI5En0RPZRJnt0y16Ha7DD+0n473evz8i1ETEJHmOLeR7iPJR0zxRrxeTN/bJMOjg== + dependencies: + glob "7.1.7" + "@next/polyfill-module@11.0.1": version "11.0.1" resolved "https://registry.npmjs.org/@next/polyfill-module/-/polyfill-module-11.0.1.tgz" @@ -1046,6 +1097,11 @@ "@react-spring/shared" "~9.2.0" "@react-spring/types" "~9.2.0" +"@rushstack/eslint-patch@^1.0.6": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.0.6.tgz#023d72a5c4531b4ce204528971700a78a85a0c50" + integrity sha512-Myxw//kzromB9yWgS8qYGuGVf91oBUUJpNvy5eM50sqvmKLbKjwLxohJnkWGTeeI9v9IBMtPLxz5Gc60FIfvCA== + "@samverschueren/stream-to-observable@^0.3.0": version "0.3.1" resolved "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz" @@ -1107,6 +1163,11 @@ resolved "https://registry.npmjs.org/@types/json-stable-stringify/-/json-stable-stringify-1.0.33.tgz" integrity sha512-qEWiQff6q2tA5gcJGWwzplQcXdJtm+0oy6IHGHzlOf3eFAkGE/FIPXZK9ofWgNSHVp8AFFI33PJJshS0ei3Gvw== +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= + "@types/jsonwebtoken@^8.5.0": version "8.5.5" resolved "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.5.tgz" @@ -1198,6 +1259,50 @@ dependencies: "@types/node" "*" +"@typescript-eslint/parser@^4.20.0": + version "4.31.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.31.0.tgz#87b7cd16b24b9170c77595d8b1363f8047121e05" + integrity sha512-oWbzvPh5amMuTmKaf1wp0ySxPt2ZXHnFQBN2Szu1O//7LmOvgaKTCIDNLK2NvzpmVd5A2M/1j/rujBqO37hj3w== + dependencies: + "@typescript-eslint/scope-manager" "4.31.0" + "@typescript-eslint/types" "4.31.0" + "@typescript-eslint/typescript-estree" "4.31.0" + debug "^4.3.1" + +"@typescript-eslint/scope-manager@4.31.0": + version "4.31.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.31.0.tgz#9be33aed4e9901db753803ba233b70d79a87fc3e" + integrity sha512-LJ+xtl34W76JMRLjbaQorhR0hfRAlp3Lscdiz9NeI/8i+q0hdBZ7BsiYieLoYWqy+AnRigaD3hUwPFugSzdocg== + dependencies: + "@typescript-eslint/types" "4.31.0" + "@typescript-eslint/visitor-keys" "4.31.0" + +"@typescript-eslint/types@4.31.0": + version "4.31.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.31.0.tgz#9a7c86fcc1620189567dc4e46cad7efa07ee8dce" + integrity sha512-9XR5q9mk7DCXgXLS7REIVs+BaAswfdHhx91XqlJklmqWpTALGjygWVIb/UnLh4NWhfwhR5wNe1yTyCInxVhLqQ== + +"@typescript-eslint/typescript-estree@4.31.0": + version "4.31.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.31.0.tgz#4da4cb6274a7ef3b21d53f9e7147cc76f278a078" + integrity sha512-QHl2014t3ptg+xpmOSSPn5hm4mY8D4s97ftzyk9BZ8RxYQ3j73XcwuijnJ9cMa6DO4aLXeo8XS3z1omT9LA/Eg== + dependencies: + "@typescript-eslint/types" "4.31.0" + "@typescript-eslint/visitor-keys" "4.31.0" + debug "^4.3.1" + globby "^11.0.3" + is-glob "^4.0.1" + semver "^7.3.5" + tsutils "^3.21.0" + +"@typescript-eslint/visitor-keys@4.31.0": + version "4.31.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.31.0.tgz#4e87b7761cb4e0e627dc2047021aa693fc76ea2b" + integrity sha512-HUcRp2a9I+P21+O21yu3ezv3GEPGjyGiXoEUQwZXjR8UxRApGeLyWH4ZIIUSalE28aG4YsV6GjtaAVB3QKOu0w== + dependencies: + "@typescript-eslint/types" "4.31.0" + eslint-visitor-keys "^2.0.0" + "@vercel/fetch-cached-dns@^2.0.2": version "2.0.2" resolved "https://registry.npmjs.org/@vercel/fetch-cached-dns/-/fetch-cached-dns-2.0.2.tgz" @@ -1243,6 +1348,11 @@ abort-controller@3.0.0: dependencies: event-target-shim "^5.0.0" +acorn-jsx@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + acorn-node@^1.6.1: version "1.8.2" resolved "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz" @@ -1262,9 +1372,9 @@ acorn-walk@^8.0.0: resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.1.1.tgz" integrity sha512-FbJdceMlPHEAWJOILDk1fXD8lnTlEIWFkqtfk+MvmL5q/qlHfN7GEHcsFZWt/Tea9jRNPWUZG4G976nqAAmU9w== -acorn@^7.0.0: +acorn@^7.0.0, acorn@^7.4.0: version "7.4.1" - resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== acorn@^8.0.4: @@ -1294,6 +1404,26 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" +ajv@^6.10.0, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^8.0.1: + version "8.6.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.6.2.tgz#2fb45e0e5fcbc0813326c1c3da535d1881bb0571" + integrity sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + anser@1.4.9: version "1.4.9" resolved "https://registry.npmjs.org/anser/-/anser-1.4.9.tgz" @@ -1373,11 +1503,26 @@ arg@^5.0.0: resolved "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz" integrity sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA== +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + argparse@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== +aria-query@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" + integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA== + dependencies: + "@babel/runtime" "^7.10.2" + "@babel/runtime-corejs3" "^7.10.2" + array-includes-with-glob@^3.0.6: version "3.1.0" resolved "https://registry.npmjs.org/array-includes-with-glob/-/array-includes-with-glob-3.1.0.tgz" @@ -1386,11 +1531,31 @@ array-includes-with-glob@^3.0.6: "@babel/runtime" "^7.14.0" matcher "^4.0.0" +array-includes@^3.1.1, array-includes@^3.1.2, array-includes@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.3.tgz#c7f619b382ad2afaf5326cddfdc0afc61af7690a" + integrity sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.2" + get-intrinsic "^1.1.1" + is-string "^1.0.5" + array-union@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== +array.prototype.flat@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz#6ef638b43312bd401b4c6199fdec7e2dc9e9a123" + integrity sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + array.prototype.flatmap@^1.2.4: version "1.2.4" resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz" @@ -1434,6 +1599,11 @@ assert@^1.1.1: object-assign "^4.1.1" util "0.10.3" +ast-types-flow@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" + integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= + ast-types@0.13.2: version "0.13.2" resolved "https://registry.npmjs.org/ast-types/-/ast-types-0.13.2.tgz" @@ -1498,6 +1668,16 @@ available-typed-arrays@^1.0.4: resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.4.tgz" integrity sha512-SA5mXJWrId1TaQjfxUYghbqQ/hYioKmLJvPJyDuYRtXXenFNMjj4hSSt1Cf1xsuXSXrtxrVC5Ot4eU6cOtBDdA== +axe-core@^4.0.2: + version "4.3.3" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.3.3.tgz#b55cd8e8ddf659fe89b064680e1c6a4dceab0325" + integrity sha512-/lqqLAmuIPi79WYfRpy2i8z+x+vxU3zX2uAm0gs1q52qTuKwolOj1P8XbufpXcsydrpKx2yGn2wzAnxCMV86QA== + +axobject-query@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" + integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== + babel-plugin-dynamic-import-node@^2.3.3: version "2.3.3" resolved "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz" @@ -2096,6 +2276,11 @@ cookie@^0.4.1: resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz" integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== +core-js-pure@^3.16.0: + version "3.17.3" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.17.3.tgz#98ea3587188ab7ef4695db6518eeb71aec42604a" + integrity sha512-YusrqwiOTTn8058JDa0cv9unbXdIiIgcgI9gXso0ey4WgkFLd3lYlV9rp9n7nDCsYxXsMDTjA4m1h3T348mdlQ== + core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" @@ -2169,7 +2354,7 @@ cross-fetch@3.1.4, cross-fetch@^3.0.4, cross-fetch@^3.0.6: dependencies: node-fetch "2.6.1" -cross-spawn@^7.0.3: +cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -2261,6 +2446,11 @@ csstype@^3.0.2: resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.8.tgz#d2266a792729fb227cd216fb572f43728e1ad340" integrity sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw== +damerau-levenshtein@^1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.7.tgz#64368003512a1a6992593741a09a9d31a836f55d" + integrity sha512-VvdQIPGdWP0SqFXghj79Wf/5LArmreyMsGLa6FG6iC4t3j7j5s71TrwWmT/4akbDQIqjfACkLZmjXhA7g2oUZw== + data-uri-to-buffer@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636" @@ -2281,7 +2471,7 @@ debounce@^1.2.0: resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5" integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug== -debug@2: +debug@2, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -2302,13 +2492,20 @@ debug@4, debug@^4.1.0, debug@^4.3.1: dependencies: ms "2.1.2" -debug@^3.1.0: +debug@^3.1.0, debug@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" +debug@^4.0.1, debug@^4.1.1: + version "4.3.2" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" + integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== + dependencies: + ms "2.1.2" + decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -2331,6 +2528,11 @@ deep-extend@^0.6.0: resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + deepmerge@4.2.2, deepmerge@^4.0.0, deepmerge@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" @@ -2426,6 +2628,20 @@ dlv@^1.1.3: resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + domain-browser@4.19.0: version "4.19.0" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-4.19.0.tgz#1093e17c0a17dbd521182fe90d49ac1370054af1" @@ -2499,6 +2715,11 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +emoji-regex@^9.0.0: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + emojis-list@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" @@ -2518,7 +2739,7 @@ end-of-stream@^1.1.0: dependencies: once "^1.4.0" -enquirer@^2.3.6: +enquirer@^2.3.5, enquirer@^2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== @@ -2554,6 +2775,30 @@ es-abstract@^1.18.0-next.1: string.prototype.trimstart "^1.0.4" unbox-primitive "^1.0.1" +es-abstract@^1.18.0-next.2, es-abstract@^1.18.2: + version "1.18.6" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.6.tgz#2c44e3ea7a6255039164d26559777a6d978cb456" + integrity sha512-kAeIT4cku5eNLNuUKhlmtuk1/TRZvQoYccn6TO0cSVdf1kzB0T7+dYuVK9MWM7l+/53W2Q8M7N2c6MQvhXFcUQ== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + get-intrinsic "^1.1.1" + get-symbol-description "^1.0.0" + has "^1.0.3" + has-symbols "^1.0.2" + internal-slot "^1.0.3" + is-callable "^1.2.4" + is-negative-zero "^2.0.1" + is-regex "^1.1.4" + is-string "^1.0.7" + object-inspect "^1.11.0" + object-keys "^1.1.1" + object.assign "^4.1.2" + string.prototype.trimend "^1.0.4" + string.prototype.trimstart "^1.0.4" + unbox-primitive "^1.0.1" + es-abstract@^1.18.5: version "1.18.5" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.5.tgz#9b10de7d4c206a3581fd5b2124233e04db49ae19" @@ -2606,6 +2851,224 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== +eslint-config-next@^11.1.2: + version "11.1.2" + resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-11.1.2.tgz#73c918f2fa6120d5f65080bf3fcf6b154905707e" + integrity sha512-dFutecxX2Z5/QVlLwdtKt+gIfmNMP8Qx6/qZh3LM/DFVdGJEAnUKrr4VwGmACB2kx/PQ5bx3R+QxnEg4fDPiTg== + dependencies: + "@next/eslint-plugin-next" "11.1.2" + "@rushstack/eslint-patch" "^1.0.6" + "@typescript-eslint/parser" "^4.20.0" + eslint-import-resolver-node "^0.3.4" + eslint-import-resolver-typescript "^2.4.0" + eslint-plugin-import "^2.22.1" + eslint-plugin-jsx-a11y "^6.4.1" + eslint-plugin-react "^7.23.1" + eslint-plugin-react-hooks "^4.2.0" + +eslint-config-prettier@^8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz#f7471b20b6fe8a9a9254cc684454202886a2dd7a" + integrity sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew== + +eslint-import-resolver-node@^0.3.4, eslint-import-resolver-node@^0.3.6: + version "0.3.6" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" + integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== + dependencies: + debug "^3.2.7" + resolve "^1.20.0" + +eslint-import-resolver-typescript@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.4.0.tgz#ec1e7063ebe807f0362a7320543aaed6fe1100e1" + integrity sha512-useJKURidCcldRLCNKWemr1fFQL1SzB3G4a0li6lFGvlc5xGe1hY343bvG07cbpCzPuM/lK19FIJB3XGFSkplA== + dependencies: + debug "^4.1.1" + glob "^7.1.6" + is-glob "^4.0.1" + resolve "^1.17.0" + tsconfig-paths "^3.9.0" + +eslint-module-utils@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.2.tgz#94e5540dd15fe1522e8ffa3ec8db3b7fa7e7a534" + integrity sha512-QG8pcgThYOuqxupd06oYTZoNOGaUdTY1PqK+oS6ElF6vs4pBdk/aYxFVQQXzcrAqp9m7cl7lb2ubazX+g16k2Q== + dependencies: + debug "^3.2.7" + pkg-dir "^2.0.0" + +eslint-plugin-import@^2.22.1: + version "2.24.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.24.2.tgz#2c8cd2e341f3885918ee27d18479910ade7bb4da" + integrity sha512-hNVtyhiEtZmpsabL4neEj+6M5DCLgpYyG9nzJY8lZQeQXEn5UPW1DpUdsMHMXsq98dbNm7nt1w9ZMSVpfJdi8Q== + dependencies: + array-includes "^3.1.3" + array.prototype.flat "^1.2.4" + debug "^2.6.9" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.6" + eslint-module-utils "^2.6.2" + find-up "^2.0.0" + has "^1.0.3" + is-core-module "^2.6.0" + minimatch "^3.0.4" + object.values "^1.1.4" + pkg-up "^2.0.0" + read-pkg-up "^3.0.0" + resolve "^1.20.0" + tsconfig-paths "^3.11.0" + +eslint-plugin-jsx-a11y@^6.4.1: + version "6.4.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.4.1.tgz#a2d84caa49756942f42f1ffab9002436391718fd" + integrity sha512-0rGPJBbwHoGNPU73/QCLP/vveMlM1b1Z9PponxO87jfr6tuH5ligXbDT6nHSSzBC8ovX2Z+BQu7Bk5D/Xgq9zg== + dependencies: + "@babel/runtime" "^7.11.2" + aria-query "^4.2.2" + array-includes "^3.1.1" + ast-types-flow "^0.0.7" + axe-core "^4.0.2" + axobject-query "^2.2.0" + damerau-levenshtein "^1.0.6" + emoji-regex "^9.0.0" + has "^1.0.3" + jsx-ast-utils "^3.1.0" + language-tags "^1.0.5" + +eslint-plugin-react-hooks@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz#8c229c268d468956334c943bb45fc860280f5556" + integrity sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ== + +eslint-plugin-react@^7.23.1: + version "7.25.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.25.1.tgz#9286b7cd9bf917d40309760f403e53016eda8331" + integrity sha512-P4j9K1dHoFXxDNP05AtixcJEvIT6ht8FhYKsrkY0MPCPaUMYijhpWwNiRDZVtA8KFuZOkGSeft6QwH8KuVpJug== + dependencies: + array-includes "^3.1.3" + array.prototype.flatmap "^1.2.4" + doctrine "^2.1.0" + estraverse "^5.2.0" + has "^1.0.3" + jsx-ast-utils "^2.4.1 || ^3.0.0" + minimatch "^3.0.4" + object.entries "^1.1.4" + object.fromentries "^2.0.4" + object.values "^1.1.4" + prop-types "^15.7.2" + resolve "^2.0.0-next.3" + string.prototype.matchall "^4.0.5" + +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint@^7.32.0: + version "7.32.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" + integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== + dependencies: + "@babel/code-frame" "7.12.11" + "@eslint/eslintrc" "^0.4.3" + "@humanwhocodes/config-array" "^0.5.0" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.0.1" + doctrine "^3.0.0" + enquirer "^2.3.5" + escape-string-regexp "^4.0.0" + eslint-scope "^5.1.1" + eslint-utils "^2.1.0" + eslint-visitor-keys "^2.0.0" + espree "^7.3.1" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.1.2" + globals "^13.6.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + progress "^2.0.0" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + table "^6.0.9" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^7.3.0, espree@^7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" + integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== + dependencies: + acorn "^7.4.0" + acorn-jsx "^5.3.1" + eslint-visitor-keys "^1.3.0" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -2668,6 +3131,11 @@ extract-files@9.0.0, extract-files@^9.0.0: resolved "https://registry.yarnpkg.com/extract-files/-/extract-files-9.0.0.tgz#8a7744f2437f81f5ed3250ed9f1550de902fe54a" integrity sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ== +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + fast-glob@^3.1.1, fast-glob@^3.2.5: version "3.2.5" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" @@ -2680,6 +3148,16 @@ fast-glob@^3.1.1, fast-glob@^3.2.5: micromatch "^4.0.2" picomatch "^2.2.1" +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + fastq@^1.6.0: version "1.12.0" resolved "https://registry.npmjs.org/fastq/-/fastq-1.12.0.tgz" @@ -2734,6 +3212,13 @@ figures@^3.0.0: dependencies: escape-string-regexp "^1.0.5" +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + fill-range@^7.0.1: version "7.0.1" resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" @@ -2750,6 +3235,13 @@ find-cache-dir@3.3.1: make-dir "^3.0.2" pkg-dir "^4.1.0" +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.0" + find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" @@ -2758,6 +3250,19 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.2.tgz#64bfed5cb68fe3ca78b3eb214ad97b63bedce561" + integrity sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA== + flatten@^1.0.2: version "1.0.3" resolved "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz" @@ -2815,6 +3320,11 @@ function-bind@^1.1.1: resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" @@ -2865,9 +3375,17 @@ get-stream@^6.0.0: resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== -glob-parent@^5.1.0, glob-parent@~5.1.0, glob-parent@~5.1.2: +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +glob-parent@^5.1.0, glob-parent@^5.1.2, glob-parent@~5.1.0, glob-parent@~5.1.2: version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" @@ -2884,7 +3402,7 @@ glob-to-regexp@^0.4.1: resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@^7.0.0, glob@^7.1.1, glob@^7.1.3, glob@^7.1.6: +glob@7.1.7, glob@^7.0.0, glob@^7.1.1, glob@^7.1.3, glob@^7.1.6: version "7.1.7" resolved "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz" integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== @@ -2901,6 +3419,13 @@ globals@^11.1.0: resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== +globals@^13.6.0, globals@^13.9.0: + version "13.11.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.11.0.tgz#40ef678da117fe7bd2e28f1fab24951bd0255be7" + integrity sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g== + dependencies: + type-fest "^0.20.2" + globby@11.0.3: version "11.0.3" resolved "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz" @@ -2913,6 +3438,18 @@ globby@11.0.3: merge2 "^1.3.0" slash "^3.0.0" +globby@^11.0.3: + version "11.0.4" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" + integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.1.1" + ignore "^5.1.4" + merge2 "^1.3.0" + slash "^3.0.0" + got@^9.6.0: version "9.6.0" resolved "https://registry.npmjs.org/got/-/got-9.6.0.tgz" @@ -3065,6 +3602,11 @@ hmac-drbg@^1.0.1: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + html-tags@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz" @@ -3144,6 +3686,11 @@ ieee754@^1.1.13, ieee754@^1.1.4: resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + ignore@^5.1.4: version "5.1.8" resolved "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz" @@ -3173,9 +3720,9 @@ import-cwd@^3.0.0: dependencies: import-from "^3.0.0" -import-fresh@^3.2.1: +import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" - resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== dependencies: parent-module "^1.0.0" @@ -3193,6 +3740,11 @@ import-from@4.0.0: resolved "https://registry.npmjs.org/import-from/-/import-from-4.0.0.tgz" integrity sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ== +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + indent-string@^3.0.0: version "3.2.0" resolved "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz" @@ -3324,7 +3876,12 @@ is-callable@^1.1.4, is-callable@^1.2.3: resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz" integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== -is-core-module@^2.2.0: +is-callable@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" + integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== + +is-core-module@^2.2.0, is-core-module@^2.6.0: version "2.6.0" resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz" integrity sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ== @@ -3367,7 +3924,7 @@ is-generator-function@^1.0.7: dependencies: has-tostringtag "^1.0.0" -is-glob@4.0.1, is-glob@^4.0.1, is-glob@~4.0.1: +is-glob@4.0.1, is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.1" resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz" integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== @@ -3436,6 +3993,14 @@ is-regex@^1.1.3: call-bind "^1.0.2" has-symbols "^1.0.2" +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + is-regexp@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz" @@ -3463,6 +4028,13 @@ is-string@^1.0.5, is-string@^1.0.6: resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz" integrity sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w== +is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + is-symbol@^1.0.2, is-symbol@^1.0.3: version "1.0.4" resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" @@ -3552,6 +4124,14 @@ js-cookie@^2.2.1: resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + js-yaml@^4.0.0: version "4.1.0" resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" @@ -3569,11 +4149,31 @@ json-buffer@3.0.0: resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz" integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= +json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + json-parse-even-better-errors@^2.3.0: version "2.3.1" resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + json-stable-stringify@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz" @@ -3633,6 +4233,14 @@ jsonwebtoken@^8.5.1: ms "^2.1.1" semver "^5.6.0" +"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz#41108d2cec408c3453c1bbe8a4aae9e1e2bd8f82" + integrity sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q== + dependencies: + array-includes "^3.1.2" + object.assign "^4.1.2" + jwa@^1.4.1: version "1.4.1" resolved "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz" @@ -3662,6 +4270,18 @@ keyv@^3.0.0: dependencies: json-buffer "3.0.0" +language-subtag-registry@~0.3.2: + version "0.3.21" + resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz#04ac218bea46f04cb039084602c6da9e788dd45a" + integrity sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg== + +language-tags@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" + integrity sha1-0yHbxNowuovzAk4ED6XBRmH5GTo= + dependencies: + language-subtag-registry "~0.3.2" + latest-version@5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz" @@ -3669,6 +4289,14 @@ latest-version@5.1.0: dependencies: package-json "^6.3.0" +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + lilconfig@^2.0.3: version "2.0.3" resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.3.tgz" @@ -3757,6 +4385,16 @@ listr@^0.14.3: p-map "^2.0.0" rxjs "^6.3.3" +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + load-script@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/load-script/-/load-script-1.0.0.tgz#0491939e0bee5643ee494a7e3da3d2bac70c6ca4" @@ -3771,6 +4409,14 @@ loader-utils@1.2.3: emojis-list "^2.0.0" json5 "^1.0.1" +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + locate-path@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" @@ -3833,6 +4479,11 @@ lodash.isstring@^4.0.1: resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + lodash.once@^4.0.0: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" @@ -3863,6 +4514,11 @@ lodash.topath@^4.5.2: resolved "https://registry.yarnpkg.com/lodash.topath/-/lodash.topath-4.5.2.tgz#3616351f3bba61994a0931989660bd03254fd009" integrity sha1-NhY1Hzu6YZlKCTGYlmC9AyVP0Ak= +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= + lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" @@ -3945,6 +4601,13 @@ lru-cache@5.1.1: dependencies: yallist "^3.0.2" +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + make-dir@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" @@ -4110,6 +4773,11 @@ native-url@0.3.4: dependencies: querystring "^0.2.0" +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + next-seo@^4.26.0: version "4.26.0" resolved "https://registry.yarnpkg.com/next-seo/-/next-seo-4.26.0.tgz#4218cfae5651fdc2e330dcdf1cc1b34ce199d41c" @@ -4242,6 +4910,16 @@ node-releases@^1.1.71: resolved "https://registry.npmjs.org/node-releases/-/node-releases-1.1.75.tgz" integrity sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw== +normalize-package-data@^2.3.2: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz" @@ -4351,6 +5029,34 @@ object.assign@^4.1.0, object.assign@^4.1.2: has-symbols "^1.0.1" object-keys "^1.1.1" +object.entries@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.4.tgz#43ccf9a50bc5fd5b649d45ab1a579f24e088cafd" + integrity sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.2" + +object.fromentries@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.4.tgz#26e1ba5c4571c5c6f0890cef4473066456a120b8" + integrity sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.2" + has "^1.0.3" + +object.values@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.4.tgz#0d273762833e816b693a637d30073e7051535b30" + integrity sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.2" + once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" @@ -4377,6 +5083,18 @@ opener@^1.5.2: resolved "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz" integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + os-browserify@0.3.0, os-browserify@^0.3.0: version "0.3.0" resolved "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz" @@ -4399,6 +5117,13 @@ p-limit@3.1.0: dependencies: yocto-queue "^0.1.0" +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + p-limit@^2.2.0: version "2.3.0" resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" @@ -4406,6 +5131,13 @@ p-limit@^2.2.0: dependencies: p-try "^2.0.0" +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + p-locate@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" @@ -4425,6 +5157,11 @@ p-map@^4.0.0: dependencies: aggregate-error "^3.0.0" +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + p-try@^2.0.0: version "2.2.0" resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" @@ -4480,6 +5217,14 @@ parse-filepath@^1.0.2: map-cache "^0.2.0" path-root "^0.1.1" +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + parse-json@^5.0.0: version "5.2.0" resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" @@ -4516,6 +5261,11 @@ path-case@^3.0.4: dot-case "^3.0.4" tslib "^2.0.3" +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + path-exists@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" @@ -4548,6 +5298,13 @@ path-root@^0.1.1: dependencies: path-root-regex "^0.1.0" +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + path-type@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" @@ -4574,6 +5331,18 @@ pify@^2.3.0: resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= + dependencies: + find-up "^2.1.0" + pkg-dir@^4.1.0: version "4.2.0" resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" @@ -4581,6 +5350,13 @@ pkg-dir@^4.1.0: dependencies: find-up "^4.0.0" +pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" + integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= + dependencies: + find-up "^2.1.0" + platform@1.3.6: version "1.3.6" resolved "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz" @@ -4972,6 +5748,11 @@ postcss@^8.1.6, postcss@^8.2.1, postcss@^8.3.5: nanoid "^3.1.23" source-map-js "^0.6.2" +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + prepend-http@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" @@ -4997,6 +5778,11 @@ process@0.11.10, process@^0.11.10: resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + promise@^7.1.1: version "7.3.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" @@ -5202,6 +5988,23 @@ read-cache@^1.0.0: dependencies: pify "^2.3.0" +read-pkg-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" + integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= + dependencies: + find-up "^2.0.0" + read-pkg "^3.0.0" + +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + readable-stream@^2.0.2, readable-stream@^2.3.3, readable-stream@^2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" @@ -5251,6 +6054,19 @@ regenerator-runtime@^0.13.2, regenerator-runtime@^0.13.4: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== +regexp.prototype.flags@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26" + integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +regexpp@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + registry-auth-token@^4.0.0: version "4.2.1" resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250" @@ -5322,6 +6138,11 @@ require-directory@^2.1.1: resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + require-main-filename@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz" @@ -5337,7 +6158,7 @@ resolve-from@^4.0.0: resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -resolve@^1.1.7, resolve@^1.20.0: +resolve@^1.1.7, resolve@^1.10.0, resolve@^1.17.0, resolve@^1.20.0: version "1.20.0" resolved "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz" integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== @@ -5345,6 +6166,14 @@ resolve@^1.1.7, resolve@^1.20.0: is-core-module "^2.2.0" path-parse "^1.0.6" +resolve@^2.0.0-next.3: + version "2.0.0-next.3" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.3.tgz#d41016293d4a8586a39ca5d9b5f15cbea1f55e46" + integrity sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q== + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" + responselike@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz" @@ -5383,9 +6212,9 @@ reusify@^1.0.4: resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@^3.0.0: +rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" @@ -5457,9 +6286,9 @@ semver-compare@^1.0.0: resolved "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz" integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= -semver@^5.6.0: +"semver@2 || 3 || 4 || 5", semver@^5.6.0: version "5.7.1" - resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: @@ -5467,6 +6296,13 @@ semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^7.2.1, semver@^7.3.5: + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" + sentence-case@^3.0.4: version "3.0.4" resolved "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz" @@ -5622,6 +6458,32 @@ source-map@^0.6.0, source-map@^0.6.1: resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.10" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz#0d9becccde7003d6c658d487dd48a32f0bf3014b" + integrity sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA== + sponge-case@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/sponge-case/-/sponge-case-1.0.1.tgz" @@ -5629,6 +6491,11 @@ sponge-case@^1.0.1: dependencies: tslib "^2.0.3" +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + stacktrace-parser@0.1.10: version "0.1.10" resolved "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz" @@ -5726,6 +6593,20 @@ string-width@^4.1.0, string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" +string.prototype.matchall@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz#59370644e1db7e4c0c045277690cf7b01203c4da" + integrity sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.2" + get-intrinsic "^1.1.1" + has-symbols "^1.0.2" + internal-slot "^1.0.3" + regexp.prototype.flags "^1.3.1" + side-channel "^1.0.4" + string.prototype.trimend@^1.0.4: version "1.0.4" resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz" @@ -5786,11 +6667,21 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + strip-final-newline@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" @@ -5909,6 +6800,18 @@ tabbable@^5.2.0: resolved "https://registry.npmjs.org/tabbable/-/tabbable-5.2.0.tgz" integrity sha512-0uyt8wbP0P3T4rrsfYg/5Rg3cIJ8Shl1RJ54QMqYxm1TLdWqJD1u6+RQjr2Lor3wmfT7JRHkirIwy99ydBsyPg== +table@^6.0.9: + version "6.7.1" + resolved "https://registry.yarnpkg.com/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2" + integrity sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg== + dependencies: + ajv "^8.0.1" + lodash.clonedeep "^4.5.0" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.0" + strip-ansi "^6.0.0" + tailwindcss@^2.2.2: version "2.2.2" resolved "https://registry.npmjs.org/tailwindcss/-/tailwindcss-2.2.2.tgz" @@ -5946,6 +6849,11 @@ tailwindcss@^2.2.2: resolve "^1.20.0" tmp "^0.2.1" +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + through@^2.3.6, through@^2.3.8: version "2.3.8" resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" @@ -6040,9 +6948,19 @@ ts-pnp@^1.1.6: resolved "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz" integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw== -tslib@^1.9.0: +tsconfig-paths@^3.11.0, tsconfig-paths@^3.9.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.11.0.tgz#954c1fe973da6339c78e06b03ce2e48810b65f36" + integrity sha512-7ecdYDnIdmv639mmDwslG6KQg1Z9STTz1j7Gcz0xa+nshh/gKDAHcPxRbWOsA3SPp0tXP2leTcY9Kw+NAkfZzA== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.0" + strip-bom "^3.0.0" + +tslib@^1.8.1, tslib@^1.9.0: version "1.14.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tslib@^2, tslib@^2.0.3, tslib@^2.1.0, tslib@~2.2.0: @@ -6065,6 +6983,13 @@ tslib@~2.3.0: resolved "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz" integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + tty-browserify@0.0.0: version "0.0.0" resolved "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz" @@ -6075,6 +7000,18 @@ tty-browserify@0.0.1: resolved "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz" integrity sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw== +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + type-fest@^0.21.3: version "0.21.3" resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" @@ -6146,6 +7083,13 @@ upper-case@^2.0.2: dependencies: tslib "^2.0.3" +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + url-parse-lax@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz" @@ -6220,11 +7164,24 @@ uuidv4@^6.2.10: "@types/uuid" "8.3.1" uuid "8.3.2" +v8-compile-cache@^2.0.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== + valid-url@1.0.9, valid-url@^1.0.9: version "1.0.9" resolved "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz" integrity sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA= +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + value-or-promise@1.0.10: version "1.0.10" resolved "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.10.tgz" @@ -6317,6 +7274,11 @@ which@^2.0.1: dependencies: isexe "^2.0.0" +word-wrap@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + wrap-ansi@^3.0.1: version "3.0.1" resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz" @@ -6373,6 +7335,11 @@ yallist@^3.0.2: resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + yaml-ast-parser@^0.0.43: version "0.0.43" resolved "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz"