├── .env.local.template
├── .gitignore
├── DOCUMENTATION.md
├── README.md
├── next-env.d.ts
├── next-i18next.config.js
├── next.config.js
├── package-lock.json
├── package.json
├── postcss.config.js
├── public
├── api
│ ├── attribute.json
│ ├── attributes.json
│ ├── brands.json
│ ├── categories.json
│ ├── featured_categories.json
│ ├── featured_products.json
│ ├── login.json
│ ├── order.json
│ ├── password_change_response.json
│ ├── product.json
│ ├── products.json
│ ├── products_best_seller.json
│ ├── products_flash_sale.json
│ ├── products_new_arrival.json
│ ├── products_on_selling.json
│ ├── products_top_seller.json
│ ├── register.json
│ ├── related_products.json
│ └── search.json
├── assets
│ ├── images
│ │ ├── 404.svg
│ │ ├── app-store.svg
│ │ ├── app.png
│ │ ├── banner
│ │ │ ├── banner-1.jpg
│ │ │ ├── banner-2.jpg
│ │ │ ├── banner-3.jpg
│ │ │ ├── banner-4.jpg
│ │ │ ├── banner-5.jpg
│ │ │ ├── banner-6.jpg
│ │ │ ├── banner-mobile-1.jpg
│ │ │ ├── banner-mobile-2.jpg
│ │ │ ├── banner-mobile-3.jpg
│ │ │ ├── banner-mobile-4.jpg
│ │ │ ├── banner-mobile-5.png
│ │ │ ├── banner-mobile-6.png
│ │ │ ├── banner-sale-offer-reverse.jpg
│ │ │ ├── banner-sale-offer.jpg
│ │ │ ├── grid
│ │ │ │ ├── banner-1.jpg
│ │ │ │ ├── banner-2.jpg
│ │ │ │ ├── banner-3.jpg
│ │ │ │ ├── banner-mobile-1.jpg
│ │ │ │ ├── banner-mobile-2.jpg
│ │ │ │ ├── banner-mobile-3.jpg
│ │ │ │ └── small
│ │ │ │ │ ├── banner-1.jpg
│ │ │ │ │ ├── banner-2.jpg
│ │ │ │ │ ├── banner-3.jpg
│ │ │ │ │ ├── banner-mobile-1.jpg
│ │ │ │ │ ├── banner-mobile-2.jpg
│ │ │ │ │ └── banner-mobile-3.jpg
│ │ │ ├── masonry
│ │ │ │ ├── banner-1.jpg
│ │ │ │ ├── banner-2.jpg
│ │ │ │ ├── banner-3.jpg
│ │ │ │ ├── banner-4.jpg
│ │ │ │ ├── banner-5.jpg
│ │ │ │ ├── banner-6.jpg
│ │ │ │ ├── banner-mobile-1.jpg
│ │ │ │ ├── banner-mobile-2.jpg
│ │ │ │ ├── banner-mobile-3.jpg
│ │ │ │ ├── banner-mobile-4.jpg
│ │ │ │ ├── banner-mobile-5.jpg
│ │ │ │ └── banner-mobile-6.jpg
│ │ │ ├── slider
│ │ │ │ ├── banner-1.jpg
│ │ │ │ ├── banner-2.jpg
│ │ │ │ ├── banner-3.jpg
│ │ │ │ └── mobile
│ │ │ │ │ ├── banner-1.jpg
│ │ │ │ │ ├── banner-2.jpg
│ │ │ │ │ └── banner-3.jpg
│ │ │ └── small
│ │ │ │ ├── banner-1.jpg
│ │ │ │ ├── banner-2.jpg
│ │ │ │ ├── banner-3.jpg
│ │ │ │ ├── banner-mobile-1.jpg
│ │ │ │ ├── banner-mobile-2.jpg
│ │ │ │ └── banner-mobile-3.jpg
│ │ ├── brands
│ │ │ ├── blaze-fashion.png
│ │ │ ├── club-shoes.png
│ │ │ ├── elegance.png
│ │ │ ├── fashadil.png
│ │ │ ├── fusion.png
│ │ │ ├── grid
│ │ │ │ ├── blaze-fashion-bg.jpg
│ │ │ │ ├── blaze-fashion.png
│ │ │ │ ├── clothingegy-bg.jpg
│ │ │ │ ├── clothingegy.png
│ │ │ │ ├── clothingtastic-bg.jpg
│ │ │ │ ├── clothingtastic.png
│ │ │ │ ├── club-shoes-bg.jpg
│ │ │ │ ├── club-shoes.png
│ │ │ │ ├── elegance-bg.jpg
│ │ │ │ ├── elegance.png
│ │ │ │ ├── fashadil-bg.jpg
│ │ │ │ ├── fashadil.png
│ │ │ │ ├── fashnetic-bg.jpg
│ │ │ │ ├── fashnetic.png
│ │ │ │ ├── fusion-bg.jpg
│ │ │ │ ├── fusion.png
│ │ │ │ ├── hoppister-bg.jpg
│ │ │ │ ├── hoppister.png
│ │ │ │ ├── hunter-shoes-bg.jpg
│ │ │ │ ├── hunter-shoes.png
│ │ │ │ ├── pop-clothing-bg.jpg
│ │ │ │ ├── pop-clothing.png
│ │ │ │ ├── sholy-bg.jpg
│ │ │ │ ├── sholy.png
│ │ │ │ ├── shoozly-bg.jpg
│ │ │ │ ├── shoozly.png
│ │ │ │ ├── shosio-bg.jpg
│ │ │ │ ├── shosio.png
│ │ │ │ ├── shovia-bg.jpg
│ │ │ │ ├── shovia.png
│ │ │ │ ├── tyrant-bg.jpg
│ │ │ │ └── tyrant.png
│ │ │ ├── hoppister.png
│ │ │ ├── hunter-shoes.png
│ │ │ └── shovia.png
│ │ ├── category
│ │ │ ├── bags.jpg
│ │ │ ├── kid.jpg
│ │ │ ├── man.jpg
│ │ │ ├── sneakers.jpg
│ │ │ ├── sports.jpg
│ │ │ ├── sunglass.jpg
│ │ │ ├── two
│ │ │ │ ├── bags
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── jewellers
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── shoes
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── sun-glasses
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── wallets
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ └── watches
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ ├── watch.jpg
│ │ │ └── woman.jpg
│ │ ├── checkout
│ │ │ ├── 01.png
│ │ │ ├── 02.png
│ │ │ └── 03.png
│ │ ├── collection
│ │ │ ├── 1.jpg
│ │ │ ├── 2.jpg
│ │ │ └── 3.jpg
│ │ ├── exclusive
│ │ │ ├── men.png
│ │ │ └── women.png
│ │ ├── feature
│ │ │ ├── delivery.svg
│ │ │ ├── product.svg
│ │ │ ├── risk-free.svg
│ │ │ └── saving.svg
│ │ ├── hero
│ │ │ ├── banner-1.jpg
│ │ │ ├── banner-2.jpg
│ │ │ ├── banner-3.jpg
│ │ │ ├── banner-mobile-1.jpg
│ │ │ ├── banner-mobile-2.jpg
│ │ │ ├── banner-mobile-3.jpg
│ │ │ └── two
│ │ │ │ ├── banner-1.jpg
│ │ │ │ ├── banner-2.jpg
│ │ │ │ ├── banner-3.jpg
│ │ │ │ ├── banner-mobile-1.jpg
│ │ │ │ ├── banner-mobile-2.jpg
│ │ │ │ └── banner-mobile-3.jpg
│ │ ├── instagram
│ │ │ ├── 1.jpg
│ │ │ ├── 2.jpg
│ │ │ ├── 3.jpg
│ │ │ ├── 4.jpg
│ │ │ ├── 5.jpg
│ │ │ └── 6.jpg
│ │ ├── logo.svg
│ │ ├── map-image.jpg
│ │ ├── newsletter.jpg
│ │ ├── not-found-alt.svg
│ │ ├── og-image-01.png
│ │ ├── og-image-02.png
│ │ ├── page-header.jpg
│ │ ├── payment
│ │ │ ├── jcb.svg
│ │ │ ├── mastercard.svg
│ │ │ ├── paypal.svg
│ │ │ ├── skrill.svg
│ │ │ └── visa.svg
│ │ ├── play-store.svg
│ │ ├── products
│ │ │ ├── featured
│ │ │ │ ├── 1.png
│ │ │ │ ├── 2.png
│ │ │ │ ├── 3.png
│ │ │ │ ├── 4.png
│ │ │ │ └── 5.png
│ │ │ ├── p-1-m.png
│ │ │ ├── p-1.png
│ │ │ ├── p-10-m.png
│ │ │ ├── p-10.png
│ │ │ ├── p-11-m.png
│ │ │ ├── p-11-xs.png
│ │ │ ├── p-11.png
│ │ │ ├── p-12-m.png
│ │ │ ├── p-12-md.png
│ │ │ ├── p-13-m.png
│ │ │ ├── p-13.png
│ │ │ ├── p-14-m.png
│ │ │ ├── p-14-md.png
│ │ │ ├── p-14-xs.png
│ │ │ ├── p-14.png
│ │ │ ├── p-15-lg.png
│ │ │ ├── p-15-m.png
│ │ │ ├── p-15-xs.png
│ │ │ ├── p-15.png
│ │ │ ├── p-16-lg.png
│ │ │ ├── p-16-m.png
│ │ │ ├── p-16-md.png
│ │ │ ├── p-16-xs.png
│ │ │ ├── p-16.png
│ │ │ ├── p-17-m.png
│ │ │ ├── p-17.png
│ │ │ ├── p-18-m.png
│ │ │ ├── p-18.png
│ │ │ ├── p-19-m.png
│ │ │ ├── p-19.png
│ │ │ ├── p-2-m.png
│ │ │ ├── p-2.png
│ │ │ ├── p-20-1.png
│ │ │ ├── p-20-2.png
│ │ │ ├── p-20-3.png
│ │ │ ├── p-20-4.png
│ │ │ ├── p-20-m.png
│ │ │ ├── p-20-s.png
│ │ │ ├── p-20.png
│ │ │ ├── p-21-m.png
│ │ │ ├── p-21.png
│ │ │ ├── p-22-m.png
│ │ │ ├── p-22-s.png
│ │ │ ├── p-22.png
│ │ │ ├── p-23-m.png
│ │ │ ├── p-23.png
│ │ │ ├── p-24-m.png
│ │ │ ├── p-24-md.png
│ │ │ ├── p-24-s.png
│ │ │ ├── p-24-sm.png
│ │ │ ├── p-25-m.png
│ │ │ ├── p-25-md.png
│ │ │ ├── p-25-s.png
│ │ │ ├── p-26-m.png
│ │ │ ├── p-26-md.png
│ │ │ ├── p-26-xs.png
│ │ │ ├── p-27-m.png
│ │ │ ├── p-27-md.png
│ │ │ ├── p-27-sm.png
│ │ │ ├── p-27-xs.png
│ │ │ ├── p-28-m.png
│ │ │ ├── p-28-xs.png
│ │ │ ├── p-29-m.png
│ │ │ ├── p-29-sm.png
│ │ │ ├── p-3-m.png
│ │ │ ├── p-3.png
│ │ │ ├── p-30-m.png
│ │ │ ├── p-30-md.png
│ │ │ ├── p-4-m.png
│ │ │ ├── p-4.png
│ │ │ ├── p-5-m.png
│ │ │ ├── p-5.png
│ │ │ ├── p-6-m.png
│ │ │ ├── p-6-xs.png
│ │ │ ├── p-6.png
│ │ │ ├── p-7-m.png
│ │ │ ├── p-7-xs.png
│ │ │ ├── p-7.png
│ │ │ ├── p-8-m.png
│ │ │ ├── p-8-md.png
│ │ │ ├── p-8-xs.png
│ │ │ ├── p-8.png
│ │ │ ├── p-9-m.png
│ │ │ └── p-9.png
│ │ ├── search
│ │ │ ├── 1.png
│ │ │ ├── 2.png
│ │ │ └── 3.png
│ │ └── support.png
│ └── placeholder
│ │ ├── brand-bg.svg
│ │ ├── card-medium.svg
│ │ ├── card-small.svg
│ │ ├── cart-item.svg
│ │ ├── category-small.svg
│ │ ├── collection.svg
│ │ ├── instagram.svg
│ │ ├── order-product.svg
│ │ ├── products
│ │ ├── product-cat.svg
│ │ ├── product-gallery.svg
│ │ ├── product-grid.svg
│ │ ├── product-gridSlim.svg
│ │ ├── product-list.svg
│ │ ├── product-listSmall.svg
│ │ └── product-thumbnail.svg
│ │ └── search-product.svg
├── favicon.ico
├── locales
│ ├── ar
│ │ ├── common.json
│ │ ├── faq.json
│ │ ├── footer.json
│ │ ├── forms.json
│ │ ├── menu.json
│ │ ├── privacy.json
│ │ └── terms.json
│ ├── de
│ │ ├── common.json
│ │ ├── faq.json
│ │ ├── footer.json
│ │ ├── forms.json
│ │ ├── menu.json
│ │ ├── privacy.json
│ │ └── terms.json
│ ├── en
│ │ ├── common.json
│ │ ├── faq.json
│ │ ├── footer.json
│ │ ├── forms.json
│ │ ├── menu.json
│ │ ├── privacy.json
│ │ └── terms.json
│ ├── es
│ │ ├── common.json
│ │ ├── faq.json
│ │ ├── footer.json
│ │ ├── forms.json
│ │ ├── menu.json
│ │ ├── privacy.json
│ │ └── terms.json
│ ├── he
│ │ ├── common.json
│ │ ├── faq.json
│ │ ├── footer.json
│ │ ├── forms.json
│ │ ├── menu.json
│ │ ├── privacy.json
│ │ └── terms.json
│ └── zh
│ │ ├── common.json
│ │ ├── faq.json
│ │ ├── footer.json
│ │ ├── forms.json
│ │ ├── menu.json
│ │ ├── privacy.json
│ │ └── terms.json
├── sw.js
├── vercel.svg
└── workbox-ea903bce.js
├── src
├── components
│ ├── 404
│ │ └── error-information.tsx
│ ├── auth
│ │ ├── forget-password-form.tsx
│ │ ├── login-form.tsx
│ │ └── sign-up-form.tsx
│ ├── cart
│ │ ├── cart-button.tsx
│ │ ├── cart-item.tsx
│ │ ├── cart.tsx
│ │ └── empty-cart.tsx
│ ├── checkout
│ │ ├── checkout-card-footer-item.tsx
│ │ ├── checkout-card-item.tsx
│ │ ├── checkout-card.tsx
│ │ └── checkout-form.tsx
│ ├── common
│ │ ├── accordion.tsx
│ │ ├── banner-card.tsx
│ │ ├── brand-card.tsx
│ │ ├── breadcrumb.tsx
│ │ ├── card.tsx
│ │ ├── category-card.tsx
│ │ ├── category-list-card.tsx
│ │ ├── collection-card.tsx
│ │ ├── counter.tsx
│ │ ├── default-seo.tsx
│ │ ├── download-apps.tsx
│ │ ├── drawer
│ │ │ ├── drawer.tsx
│ │ │ └── managed-drawer.tsx
│ │ ├── form
│ │ │ ├── contact-form.tsx
│ │ │ └── review-form.tsx
│ │ ├── instagram.tsx
│ │ ├── modal
│ │ │ ├── managed-modal.tsx
│ │ │ └── modal.tsx
│ │ ├── newsletter.tsx
│ │ ├── progress-card.tsx
│ │ ├── sale-with-progress.tsx
│ │ ├── scrollbar.tsx
│ │ ├── search-box.tsx
│ │ ├── search-product.tsx
│ │ ├── search.tsx
│ │ ├── section-header.tsx
│ │ ├── subscription.tsx
│ │ ├── support.tsx
│ │ └── text-information.tsx
│ ├── icons
│ │ ├── CNFlag.tsx
│ │ ├── DEFlag.tsx
│ │ ├── ESFlag.tsx
│ │ ├── ILFlag.tsx
│ │ ├── SAFlag.tsx
│ │ ├── USFlag.tsx
│ │ ├── cart-icon.tsx
│ │ ├── eye-icon.tsx
│ │ ├── eye-off-icon.tsx
│ │ ├── filter-icon.tsx
│ │ ├── home-icon.tsx
│ │ ├── menu-icon.tsx
│ │ ├── minus-icon.tsx
│ │ ├── plus-icon.tsx
│ │ ├── search-icon.tsx
│ │ ├── trash-icon.tsx
│ │ └── user-icon.tsx
│ ├── layout
│ │ ├── footer
│ │ │ ├── copyright.tsx
│ │ │ ├── data.tsx
│ │ │ ├── footer.tsx
│ │ │ └── widgets.tsx
│ │ ├── header
│ │ │ ├── auth-menu.tsx
│ │ │ ├── header-menu.tsx
│ │ │ ├── header.tsx
│ │ │ └── mobile-menu.tsx
│ │ ├── layout.tsx
│ │ └── mobile-navigation
│ │ │ └── mobile-navigation.tsx
│ ├── my-account
│ │ ├── account-details.tsx
│ │ ├── account-layout.tsx
│ │ ├── account-nav.tsx
│ │ ├── change-password.tsx
│ │ └── orders-table.tsx
│ ├── order
│ │ ├── order-details.tsx
│ │ └── order-information.tsx
│ ├── product
│ │ ├── feeds
│ │ │ ├── best-seller-product-feed.tsx
│ │ │ ├── flash-sale-product-feed.tsx
│ │ │ └── new-arrivals-product-feed.tsx
│ │ ├── product-attributes.tsx
│ │ ├── product-card.tsx
│ │ ├── product-meta-review.tsx
│ │ ├── product-overlay-card.tsx
│ │ ├── product-popup.tsx
│ │ └── product-single-details.tsx
│ ├── shop
│ │ ├── brand-filter.tsx
│ │ ├── category-filter.tsx
│ │ ├── color-filter.tsx
│ │ ├── discount.tsx
│ │ ├── filter-sidebar.tsx
│ │ ├── filtered-item.tsx
│ │ ├── filters.tsx
│ │ ├── price-filter.tsx
│ │ ├── product-grid.tsx
│ │ └── top-bar.tsx
│ ├── ui
│ │ ├── active-link.tsx
│ │ ├── alert.tsx
│ │ ├── button.tsx
│ │ ├── carousel
│ │ │ └── carousel.tsx
│ │ ├── checkbox.tsx
│ │ ├── container.tsx
│ │ ├── divider.tsx
│ │ ├── input.tsx
│ │ ├── language-switcher.tsx
│ │ ├── link.tsx
│ │ ├── list-box.tsx
│ │ ├── list-menu.tsx
│ │ ├── loaders
│ │ │ ├── brand-card-loader.tsx
│ │ │ ├── card-loader.tsx
│ │ │ ├── card-rounded-loader.tsx
│ │ │ ├── category-card-loader.tsx
│ │ │ ├── category-list-card-loader.tsx
│ │ │ ├── category-list-feed-loader.tsx
│ │ │ ├── content-feed-loader.tsx
│ │ │ ├── product-card-grid-loader.tsx
│ │ │ ├── product-card-loader.tsx
│ │ │ ├── product-card-small-list-loader.tsx
│ │ │ ├── product-feed-loader.tsx
│ │ │ ├── product-flash-sale-grid-feed-loader.tsx
│ │ │ ├── product-flash-sale-grid-loader.tsx
│ │ │ ├── product-flash-sale-loader.tsx
│ │ │ ├── product-list-card-loader.tsx
│ │ │ ├── product-list-feed-loader.tsx
│ │ │ └── search-result-loader.tsx
│ │ ├── logo.tsx
│ │ ├── mega-menu.tsx
│ │ ├── page-header.tsx
│ │ ├── password-input.tsx
│ │ ├── radiobox.tsx
│ │ ├── tabs.tsx
│ │ ├── text-area.tsx
│ │ └── text.tsx
│ └── widgets
│ │ └── widget-link.tsx
├── containers
│ ├── banner-block.tsx
│ ├── banner-carousel-block.tsx
│ ├── banner-grid-block.tsx
│ ├── banner-slider-block.tsx
│ ├── banner-with-products.tsx
│ ├── brand-block.tsx
│ ├── brand-grid-block.tsx
│ ├── category-block.tsx
│ ├── category-grid-block.tsx
│ ├── collection-block.tsx
│ ├── contact-info.tsx
│ ├── exclusive-block.tsx
│ ├── feature-block.tsx
│ ├── hero-block.tsx
│ ├── hero-with-category-flash.tsx
│ ├── hero-with-category.tsx
│ ├── product-flash-sale-block.tsx
│ ├── products-block.tsx
│ ├── products-featured.tsx
│ ├── products-with-flash-sale.tsx
│ └── related-products.tsx
├── contexts
│ ├── cart
│ │ ├── cart.context.tsx
│ │ ├── cart.reducer.tsx
│ │ └── cart.utils.ts
│ └── ui.context.tsx
├── framework
│ └── basic-rest
│ │ ├── auth
│ │ ├── use-forget-password.tsx
│ │ ├── use-login.tsx
│ │ ├── use-logout.tsx
│ │ └── use-signup.tsx
│ │ ├── brand
│ │ └── get-all-brands.tsx
│ │ ├── category
│ │ ├── get-all-categories.tsx
│ │ ├── get-all-featured-categories.tsx
│ │ └── get-category.tsx
│ │ ├── checkout
│ │ └── use-checkout.tsx
│ │ ├── customer
│ │ ├── use-change-email.tsx
│ │ ├── use-change-password.tsx
│ │ └── use-update-customer.tsx
│ │ ├── order
│ │ ├── get-all-orders.ts
│ │ └── get-order.ts
│ │ ├── product
│ │ ├── get-all-best-seller-products.tsx
│ │ ├── get-all-featured-products.tsx
│ │ ├── get-all-flash-sale-products.tsx
│ │ ├── get-all-new-arrival-products.tsx
│ │ ├── get-all-on-selling-products.tsx
│ │ ├── get-all-products.tsx
│ │ ├── get-all-top-seller-products.tsx
│ │ ├── get-product.tsx
│ │ ├── get-related-product.tsx
│ │ ├── use-price.tsx
│ │ └── use-search.tsx
│ │ ├── static
│ │ └── banner.ts
│ │ ├── types.ts
│ │ └── utils
│ │ ├── api-endpoints.ts
│ │ ├── get-token.ts
│ │ ├── get-variations.ts
│ │ └── http.ts
├── pages
│ ├── 404.tsx
│ ├── _app.tsx
│ ├── _document.tsx
│ ├── checkout.tsx
│ ├── classic.tsx
│ ├── contact-us.tsx
│ ├── faq.tsx
│ ├── forget-password.tsx
│ ├── index.tsx
│ ├── minimal.tsx
│ ├── my-account
│ │ ├── account-details.tsx
│ │ ├── change-password.tsx
│ │ ├── index.tsx
│ │ └── orders
│ │ │ ├── [id].tsx
│ │ │ └── index.tsx
│ ├── order.tsx
│ ├── privacy.tsx
│ ├── products
│ │ ├── [slug].tsx
│ │ └── index.tsx
│ ├── search.tsx
│ ├── signin.tsx
│ ├── signup.tsx
│ ├── standard.tsx
│ ├── terms.tsx
│ └── vintage.tsx
├── settings
│ ├── faq.settings.ts
│ ├── privacy-settings.ts
│ ├── site-settings.tsx
│ └── terms-settings.ts
├── styles
│ ├── custom-plugins.css
│ ├── scrollbar.css
│ ├── swiper-carousel.css
│ └── tailwind.css
└── utils
│ ├── add-active-scroll.ts
│ ├── constants.ts
│ ├── generate-cart-item-name.ts
│ ├── generate-cart-item.ts
│ ├── get-direction.ts
│ ├── motion
│ ├── fade-in-left.ts
│ ├── fade-in-out.ts
│ ├── fade-in-right.ts
│ ├── fade-in-top.ts
│ ├── height-collapse.ts
│ └── zoom-out-in.ts
│ ├── routes.ts
│ ├── use-breadcrumb.ts
│ ├── use-click-outside.ts
│ ├── use-local-storage.ts
│ └── use-window-size.ts
├── tailwind.config.js
├── tsconfig.json
├── vercel.json
└── yarn.lock
/.env.local.template:
--------------------------------------------------------------------------------
1 | NEXT_PUBLIC_REST_API_ENDPOINT=http://localhost:3000/api
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # next.js
12 | /.next/
13 | /out/
14 |
15 | # production
16 | /build
17 |
18 | # misc
19 | .DS_Store
20 | *.pem
21 |
22 | # debug
23 | npm-debug.log*
24 | yarn-debug.log*
25 | yarn-error.log*
26 |
27 | # local env files
28 | .env.local
29 | .env.development.local
30 | .env.test.local
31 | .env.production.local
32 |
33 | # vercel
34 | .vercel
35 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # react-nextjs-ecommerce
2 | ECommerce website built in reactjs/nextjs
3 |
--------------------------------------------------------------------------------
/next-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 | ///
3 | declare module "react-rating-stars-component";
4 |
--------------------------------------------------------------------------------
/next-i18next.config.js:
--------------------------------------------------------------------------------
1 | const path = require("path");
2 | module.exports = {
3 | i18n: {
4 | locales: ["en", "de", "es", "ar", "he", "zh"],
5 | defaultLocale: "en",
6 | },
7 | localePath: path.resolve("./public/locales"),
8 | };
9 |
--------------------------------------------------------------------------------
/next.config.js:
--------------------------------------------------------------------------------
1 | const { i18n } = require("./next-i18next.config");
2 | const withPWA = require("next-pwa");
3 | const runtimeCaching = require("next-pwa/cache");
4 | module.exports = withPWA({
5 | pwa: {
6 | disable: process.env.NODE_ENV === "development",
7 | dest: "public",
8 | runtimeCaching,
9 | },
10 | i18n,
11 | });
12 |
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | };
7 |
--------------------------------------------------------------------------------
/public/api/attribute.json:
--------------------------------------------------------------------------------
1 | {
2 | "id": 2,
3 | "name": "Color",
4 | "slug": "color",
5 | "values": [
6 | {
7 | "id": 5,
8 | "value": "#e86c25"
9 | },
10 | {
11 | "id": 6,
12 | "value": "#ffa5b4"
13 | },
14 | {
15 | "id": 7,
16 | "value": "#8224e3"
17 | },
18 | {
19 | "id": 8,
20 | "value": "#dd3333"
21 | },
22 | {
23 | "id": 8,
24 | "value": "#ff3333"
25 | },
26 | {
27 | "id": 8,
28 | "value": "#ee3333"
29 | },
30 | {
31 | "id": 8,
32 | "value": "#fe3333"
33 | },
34 | {
35 | "id": 8,
36 | "value": "#ef3333"
37 | }
38 | ]
39 | }
40 |
--------------------------------------------------------------------------------
/public/api/attributes.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "id": 1,
4 | "name": "Size",
5 | "slug": "size",
6 | "values": [
7 | {
8 | "id": 1,
9 | "value": "S"
10 | },
11 | {
12 | "id": 2,
13 | "value": "M"
14 | },
15 | {
16 | "id": 3,
17 | "value": "L"
18 | },
19 | {
20 | "id": 4,
21 | "value": "XL"
22 | }
23 | ]
24 | },
25 | {
26 | "id": 2,
27 | "name": "Color",
28 | "slug": "color",
29 | "values": [
30 | {
31 | "id": 5,
32 | "value": "#e86c25"
33 | },
34 | {
35 | "id": 6,
36 | "value": "#ffa5b4"
37 | },
38 | {
39 | "id": 7,
40 | "value": "#8224e3"
41 | },
42 | {
43 | "id": 8,
44 | "value": "#dd3333"
45 | },
46 | {
47 | "id": 8,
48 | "value": "#ff3333"
49 | },
50 | {
51 | "id": 8,
52 | "value": "#ee3333"
53 | },
54 | {
55 | "id": 8,
56 | "value": "#fe3333"
57 | },
58 | {
59 | "id": 8,
60 | "value": "#ef3333"
61 | }
62 | ]
63 | }
64 | ]
65 |
--------------------------------------------------------------------------------
/public/api/login.json:
--------------------------------------------------------------------------------
1 | {
2 | "token": "ienjnd883ndn283njd",
3 | "permissions": ["customer"]
4 | }
5 |
--------------------------------------------------------------------------------
/public/api/order.json:
--------------------------------------------------------------------------------
1 | {
2 | "id": 1,
3 | "tracking_number": "XRQ4567",
4 | "customer": {
5 | "id": 1,
6 | "email": "customer@demo.com"
7 | },
8 | "total": 132,
9 | "shipping_fee": 17,
10 | "payment_gateway": "cash on delivery",
11 | "products": [
12 | {
13 | "id": 1,
14 | "name": "Nike Black - Black, S",
15 | "quantity": 10,
16 | "price": 5
17 | },
18 | {
19 | "id": 1,
20 | "name": "Hermes Carlton London - Red, XL",
21 | "quantity": 10,
22 | "price": 15
23 | },
24 | {
25 | "id": 1,
26 | "name": "Gucci Carlton UK, Green, M",
27 | "quantity": 5,
28 | "price": 25
29 | },
30 | {
31 | "id": 1,
32 | "name": "Regular Fit Flannel Shirt, Blue, X",
33 | "quantity": 10,
34 | "price": 35
35 | }
36 | ],
37 | "note": "new order"
38 | }
39 |
--------------------------------------------------------------------------------
/public/api/password_change_response.json:
--------------------------------------------------------------------------------
1 | {
2 | "data": {
3 | "success": true,
4 | "message": "Success"
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/public/api/register.json:
--------------------------------------------------------------------------------
1 | {
2 | "data": {
3 | "token": "ienjnd883ndn283njd",
4 | "permissions": ["customer"]
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/public/assets/images/app.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/app.png
--------------------------------------------------------------------------------
/public/assets/images/banner/banner-1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/banner-1.jpg
--------------------------------------------------------------------------------
/public/assets/images/banner/banner-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/banner-2.jpg
--------------------------------------------------------------------------------
/public/assets/images/banner/banner-3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/banner-3.jpg
--------------------------------------------------------------------------------
/public/assets/images/banner/banner-4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/banner-4.jpg
--------------------------------------------------------------------------------
/public/assets/images/banner/banner-5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/banner-5.jpg
--------------------------------------------------------------------------------
/public/assets/images/banner/banner-6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/banner-6.jpg
--------------------------------------------------------------------------------
/public/assets/images/banner/banner-mobile-1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/banner-mobile-1.jpg
--------------------------------------------------------------------------------
/public/assets/images/banner/banner-mobile-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/banner-mobile-2.jpg
--------------------------------------------------------------------------------
/public/assets/images/banner/banner-mobile-3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/banner-mobile-3.jpg
--------------------------------------------------------------------------------
/public/assets/images/banner/banner-mobile-4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/banner-mobile-4.jpg
--------------------------------------------------------------------------------
/public/assets/images/banner/banner-mobile-5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/banner-mobile-5.png
--------------------------------------------------------------------------------
/public/assets/images/banner/banner-mobile-6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/banner-mobile-6.png
--------------------------------------------------------------------------------
/public/assets/images/banner/banner-sale-offer-reverse.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/banner-sale-offer-reverse.jpg
--------------------------------------------------------------------------------
/public/assets/images/banner/banner-sale-offer.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/banner-sale-offer.jpg
--------------------------------------------------------------------------------
/public/assets/images/banner/grid/banner-1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/grid/banner-1.jpg
--------------------------------------------------------------------------------
/public/assets/images/banner/grid/banner-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/grid/banner-2.jpg
--------------------------------------------------------------------------------
/public/assets/images/banner/grid/banner-3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/grid/banner-3.jpg
--------------------------------------------------------------------------------
/public/assets/images/banner/grid/banner-mobile-1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/grid/banner-mobile-1.jpg
--------------------------------------------------------------------------------
/public/assets/images/banner/grid/banner-mobile-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/grid/banner-mobile-2.jpg
--------------------------------------------------------------------------------
/public/assets/images/banner/grid/banner-mobile-3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/grid/banner-mobile-3.jpg
--------------------------------------------------------------------------------
/public/assets/images/banner/grid/small/banner-1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/grid/small/banner-1.jpg
--------------------------------------------------------------------------------
/public/assets/images/banner/grid/small/banner-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/grid/small/banner-2.jpg
--------------------------------------------------------------------------------
/public/assets/images/banner/grid/small/banner-3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/grid/small/banner-3.jpg
--------------------------------------------------------------------------------
/public/assets/images/banner/grid/small/banner-mobile-1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/grid/small/banner-mobile-1.jpg
--------------------------------------------------------------------------------
/public/assets/images/banner/grid/small/banner-mobile-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/grid/small/banner-mobile-2.jpg
--------------------------------------------------------------------------------
/public/assets/images/banner/grid/small/banner-mobile-3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/grid/small/banner-mobile-3.jpg
--------------------------------------------------------------------------------
/public/assets/images/banner/masonry/banner-1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/masonry/banner-1.jpg
--------------------------------------------------------------------------------
/public/assets/images/banner/masonry/banner-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/masonry/banner-2.jpg
--------------------------------------------------------------------------------
/public/assets/images/banner/masonry/banner-3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/masonry/banner-3.jpg
--------------------------------------------------------------------------------
/public/assets/images/banner/masonry/banner-4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/masonry/banner-4.jpg
--------------------------------------------------------------------------------
/public/assets/images/banner/masonry/banner-5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/masonry/banner-5.jpg
--------------------------------------------------------------------------------
/public/assets/images/banner/masonry/banner-6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/masonry/banner-6.jpg
--------------------------------------------------------------------------------
/public/assets/images/banner/masonry/banner-mobile-1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/masonry/banner-mobile-1.jpg
--------------------------------------------------------------------------------
/public/assets/images/banner/masonry/banner-mobile-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/masonry/banner-mobile-2.jpg
--------------------------------------------------------------------------------
/public/assets/images/banner/masonry/banner-mobile-3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/masonry/banner-mobile-3.jpg
--------------------------------------------------------------------------------
/public/assets/images/banner/masonry/banner-mobile-4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/masonry/banner-mobile-4.jpg
--------------------------------------------------------------------------------
/public/assets/images/banner/masonry/banner-mobile-5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/masonry/banner-mobile-5.jpg
--------------------------------------------------------------------------------
/public/assets/images/banner/masonry/banner-mobile-6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/masonry/banner-mobile-6.jpg
--------------------------------------------------------------------------------
/public/assets/images/banner/slider/banner-1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/slider/banner-1.jpg
--------------------------------------------------------------------------------
/public/assets/images/banner/slider/banner-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/slider/banner-2.jpg
--------------------------------------------------------------------------------
/public/assets/images/banner/slider/banner-3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/slider/banner-3.jpg
--------------------------------------------------------------------------------
/public/assets/images/banner/slider/mobile/banner-1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/slider/mobile/banner-1.jpg
--------------------------------------------------------------------------------
/public/assets/images/banner/slider/mobile/banner-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/slider/mobile/banner-2.jpg
--------------------------------------------------------------------------------
/public/assets/images/banner/slider/mobile/banner-3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/slider/mobile/banner-3.jpg
--------------------------------------------------------------------------------
/public/assets/images/banner/small/banner-1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/small/banner-1.jpg
--------------------------------------------------------------------------------
/public/assets/images/banner/small/banner-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/small/banner-2.jpg
--------------------------------------------------------------------------------
/public/assets/images/banner/small/banner-3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/small/banner-3.jpg
--------------------------------------------------------------------------------
/public/assets/images/banner/small/banner-mobile-1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/small/banner-mobile-1.jpg
--------------------------------------------------------------------------------
/public/assets/images/banner/small/banner-mobile-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/small/banner-mobile-2.jpg
--------------------------------------------------------------------------------
/public/assets/images/banner/small/banner-mobile-3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/banner/small/banner-mobile-3.jpg
--------------------------------------------------------------------------------
/public/assets/images/brands/blaze-fashion.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/brands/blaze-fashion.png
--------------------------------------------------------------------------------
/public/assets/images/brands/club-shoes.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/brands/club-shoes.png
--------------------------------------------------------------------------------
/public/assets/images/brands/elegance.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/brands/elegance.png
--------------------------------------------------------------------------------
/public/assets/images/brands/fashadil.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/brands/fashadil.png
--------------------------------------------------------------------------------
/public/assets/images/brands/fusion.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/brands/fusion.png
--------------------------------------------------------------------------------
/public/assets/images/brands/grid/blaze-fashion-bg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/brands/grid/blaze-fashion-bg.jpg
--------------------------------------------------------------------------------
/public/assets/images/brands/grid/blaze-fashion.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/brands/grid/blaze-fashion.png
--------------------------------------------------------------------------------
/public/assets/images/brands/grid/clothingegy-bg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/brands/grid/clothingegy-bg.jpg
--------------------------------------------------------------------------------
/public/assets/images/brands/grid/clothingegy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/brands/grid/clothingegy.png
--------------------------------------------------------------------------------
/public/assets/images/brands/grid/clothingtastic-bg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/brands/grid/clothingtastic-bg.jpg
--------------------------------------------------------------------------------
/public/assets/images/brands/grid/clothingtastic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/brands/grid/clothingtastic.png
--------------------------------------------------------------------------------
/public/assets/images/brands/grid/club-shoes-bg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/brands/grid/club-shoes-bg.jpg
--------------------------------------------------------------------------------
/public/assets/images/brands/grid/club-shoes.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/brands/grid/club-shoes.png
--------------------------------------------------------------------------------
/public/assets/images/brands/grid/elegance-bg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/brands/grid/elegance-bg.jpg
--------------------------------------------------------------------------------
/public/assets/images/brands/grid/elegance.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/brands/grid/elegance.png
--------------------------------------------------------------------------------
/public/assets/images/brands/grid/fashadil-bg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/brands/grid/fashadil-bg.jpg
--------------------------------------------------------------------------------
/public/assets/images/brands/grid/fashadil.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/brands/grid/fashadil.png
--------------------------------------------------------------------------------
/public/assets/images/brands/grid/fashnetic-bg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/brands/grid/fashnetic-bg.jpg
--------------------------------------------------------------------------------
/public/assets/images/brands/grid/fashnetic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/brands/grid/fashnetic.png
--------------------------------------------------------------------------------
/public/assets/images/brands/grid/fusion-bg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/brands/grid/fusion-bg.jpg
--------------------------------------------------------------------------------
/public/assets/images/brands/grid/fusion.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/brands/grid/fusion.png
--------------------------------------------------------------------------------
/public/assets/images/brands/grid/hoppister-bg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/brands/grid/hoppister-bg.jpg
--------------------------------------------------------------------------------
/public/assets/images/brands/grid/hoppister.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/brands/grid/hoppister.png
--------------------------------------------------------------------------------
/public/assets/images/brands/grid/hunter-shoes-bg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/brands/grid/hunter-shoes-bg.jpg
--------------------------------------------------------------------------------
/public/assets/images/brands/grid/hunter-shoes.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/brands/grid/hunter-shoes.png
--------------------------------------------------------------------------------
/public/assets/images/brands/grid/pop-clothing-bg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/brands/grid/pop-clothing-bg.jpg
--------------------------------------------------------------------------------
/public/assets/images/brands/grid/pop-clothing.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/brands/grid/pop-clothing.png
--------------------------------------------------------------------------------
/public/assets/images/brands/grid/sholy-bg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/brands/grid/sholy-bg.jpg
--------------------------------------------------------------------------------
/public/assets/images/brands/grid/sholy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/brands/grid/sholy.png
--------------------------------------------------------------------------------
/public/assets/images/brands/grid/shoozly-bg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/brands/grid/shoozly-bg.jpg
--------------------------------------------------------------------------------
/public/assets/images/brands/grid/shoozly.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/brands/grid/shoozly.png
--------------------------------------------------------------------------------
/public/assets/images/brands/grid/shosio-bg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/brands/grid/shosio-bg.jpg
--------------------------------------------------------------------------------
/public/assets/images/brands/grid/shosio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/brands/grid/shosio.png
--------------------------------------------------------------------------------
/public/assets/images/brands/grid/shovia-bg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/brands/grid/shovia-bg.jpg
--------------------------------------------------------------------------------
/public/assets/images/brands/grid/shovia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/brands/grid/shovia.png
--------------------------------------------------------------------------------
/public/assets/images/brands/grid/tyrant-bg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/brands/grid/tyrant-bg.jpg
--------------------------------------------------------------------------------
/public/assets/images/brands/grid/tyrant.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/brands/grid/tyrant.png
--------------------------------------------------------------------------------
/public/assets/images/brands/hoppister.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/brands/hoppister.png
--------------------------------------------------------------------------------
/public/assets/images/brands/hunter-shoes.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/brands/hunter-shoes.png
--------------------------------------------------------------------------------
/public/assets/images/brands/shovia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/brands/shovia.png
--------------------------------------------------------------------------------
/public/assets/images/category/bags.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/category/bags.jpg
--------------------------------------------------------------------------------
/public/assets/images/category/kid.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/category/kid.jpg
--------------------------------------------------------------------------------
/public/assets/images/category/man.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/category/man.jpg
--------------------------------------------------------------------------------
/public/assets/images/category/sneakers.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/category/sneakers.jpg
--------------------------------------------------------------------------------
/public/assets/images/category/sports.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/category/sports.jpg
--------------------------------------------------------------------------------
/public/assets/images/category/sunglass.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/category/sunglass.jpg
--------------------------------------------------------------------------------
/public/assets/images/category/two/bags/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/category/two/bags/1.png
--------------------------------------------------------------------------------
/public/assets/images/category/two/bags/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/category/two/bags/2.png
--------------------------------------------------------------------------------
/public/assets/images/category/two/bags/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/category/two/bags/3.png
--------------------------------------------------------------------------------
/public/assets/images/category/two/jewellers/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/category/two/jewellers/1.png
--------------------------------------------------------------------------------
/public/assets/images/category/two/jewellers/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/category/two/jewellers/2.png
--------------------------------------------------------------------------------
/public/assets/images/category/two/jewellers/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/category/two/jewellers/3.png
--------------------------------------------------------------------------------
/public/assets/images/category/two/shoes/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/category/two/shoes/1.png
--------------------------------------------------------------------------------
/public/assets/images/category/two/shoes/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/category/two/shoes/2.png
--------------------------------------------------------------------------------
/public/assets/images/category/two/shoes/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/category/two/shoes/3.png
--------------------------------------------------------------------------------
/public/assets/images/category/two/sun-glasses/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/category/two/sun-glasses/1.png
--------------------------------------------------------------------------------
/public/assets/images/category/two/sun-glasses/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/category/two/sun-glasses/2.png
--------------------------------------------------------------------------------
/public/assets/images/category/two/sun-glasses/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/category/two/sun-glasses/3.png
--------------------------------------------------------------------------------
/public/assets/images/category/two/wallets/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/category/two/wallets/1.png
--------------------------------------------------------------------------------
/public/assets/images/category/two/wallets/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/category/two/wallets/2.png
--------------------------------------------------------------------------------
/public/assets/images/category/two/wallets/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/category/two/wallets/3.png
--------------------------------------------------------------------------------
/public/assets/images/category/two/watches/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/category/two/watches/1.png
--------------------------------------------------------------------------------
/public/assets/images/category/two/watches/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/category/two/watches/2.png
--------------------------------------------------------------------------------
/public/assets/images/category/two/watches/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/category/two/watches/3.png
--------------------------------------------------------------------------------
/public/assets/images/category/watch.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/category/watch.jpg
--------------------------------------------------------------------------------
/public/assets/images/category/woman.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/category/woman.jpg
--------------------------------------------------------------------------------
/public/assets/images/checkout/01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/checkout/01.png
--------------------------------------------------------------------------------
/public/assets/images/checkout/02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/checkout/02.png
--------------------------------------------------------------------------------
/public/assets/images/checkout/03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/checkout/03.png
--------------------------------------------------------------------------------
/public/assets/images/collection/1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/collection/1.jpg
--------------------------------------------------------------------------------
/public/assets/images/collection/2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/collection/2.jpg
--------------------------------------------------------------------------------
/public/assets/images/collection/3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/collection/3.jpg
--------------------------------------------------------------------------------
/public/assets/images/exclusive/men.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/exclusive/men.png
--------------------------------------------------------------------------------
/public/assets/images/exclusive/women.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/exclusive/women.png
--------------------------------------------------------------------------------
/public/assets/images/hero/banner-1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/hero/banner-1.jpg
--------------------------------------------------------------------------------
/public/assets/images/hero/banner-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/hero/banner-2.jpg
--------------------------------------------------------------------------------
/public/assets/images/hero/banner-3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/hero/banner-3.jpg
--------------------------------------------------------------------------------
/public/assets/images/hero/banner-mobile-1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/hero/banner-mobile-1.jpg
--------------------------------------------------------------------------------
/public/assets/images/hero/banner-mobile-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/hero/banner-mobile-2.jpg
--------------------------------------------------------------------------------
/public/assets/images/hero/banner-mobile-3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/hero/banner-mobile-3.jpg
--------------------------------------------------------------------------------
/public/assets/images/hero/two/banner-1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/hero/two/banner-1.jpg
--------------------------------------------------------------------------------
/public/assets/images/hero/two/banner-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/hero/two/banner-2.jpg
--------------------------------------------------------------------------------
/public/assets/images/hero/two/banner-3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/hero/two/banner-3.jpg
--------------------------------------------------------------------------------
/public/assets/images/hero/two/banner-mobile-1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/hero/two/banner-mobile-1.jpg
--------------------------------------------------------------------------------
/public/assets/images/hero/two/banner-mobile-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/hero/two/banner-mobile-2.jpg
--------------------------------------------------------------------------------
/public/assets/images/hero/two/banner-mobile-3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/hero/two/banner-mobile-3.jpg
--------------------------------------------------------------------------------
/public/assets/images/instagram/1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/instagram/1.jpg
--------------------------------------------------------------------------------
/public/assets/images/instagram/2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/instagram/2.jpg
--------------------------------------------------------------------------------
/public/assets/images/instagram/3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/instagram/3.jpg
--------------------------------------------------------------------------------
/public/assets/images/instagram/4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/instagram/4.jpg
--------------------------------------------------------------------------------
/public/assets/images/instagram/5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/instagram/5.jpg
--------------------------------------------------------------------------------
/public/assets/images/instagram/6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/instagram/6.jpg
--------------------------------------------------------------------------------
/public/assets/images/map-image.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/map-image.jpg
--------------------------------------------------------------------------------
/public/assets/images/newsletter.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/newsletter.jpg
--------------------------------------------------------------------------------
/public/assets/images/og-image-01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/og-image-01.png
--------------------------------------------------------------------------------
/public/assets/images/og-image-02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/og-image-02.png
--------------------------------------------------------------------------------
/public/assets/images/page-header.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/page-header.jpg
--------------------------------------------------------------------------------
/public/assets/images/products/featured/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/featured/1.png
--------------------------------------------------------------------------------
/public/assets/images/products/featured/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/featured/2.png
--------------------------------------------------------------------------------
/public/assets/images/products/featured/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/featured/3.png
--------------------------------------------------------------------------------
/public/assets/images/products/featured/4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/featured/4.png
--------------------------------------------------------------------------------
/public/assets/images/products/featured/5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/featured/5.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-1-m.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-1-m.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-1.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-10-m.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-10-m.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-10.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-11-m.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-11-m.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-11-xs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-11-xs.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-11.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-12-m.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-12-m.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-12-md.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-12-md.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-13-m.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-13-m.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-13.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-13.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-14-m.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-14-m.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-14-md.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-14-md.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-14-xs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-14-xs.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-14.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-14.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-15-lg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-15-lg.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-15-m.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-15-m.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-15-xs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-15-xs.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-15.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-15.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-16-lg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-16-lg.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-16-m.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-16-m.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-16-md.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-16-md.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-16-xs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-16-xs.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-16.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-17-m.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-17-m.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-17.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-17.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-18-m.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-18-m.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-18.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-18.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-19-m.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-19-m.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-19.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-19.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-2-m.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-2-m.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-2.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-20-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-20-1.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-20-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-20-2.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-20-3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-20-3.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-20-4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-20-4.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-20-m.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-20-m.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-20-s.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-20-s.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-20.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-20.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-21-m.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-21-m.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-21.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-21.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-22-m.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-22-m.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-22-s.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-22-s.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-22.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-22.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-23-m.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-23-m.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-23.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-23.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-24-m.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-24-m.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-24-md.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-24-md.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-24-s.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-24-s.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-24-sm.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-24-sm.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-25-m.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-25-m.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-25-md.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-25-md.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-25-s.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-25-s.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-26-m.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-26-m.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-26-md.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-26-md.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-26-xs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-26-xs.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-27-m.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-27-m.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-27-md.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-27-md.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-27-sm.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-27-sm.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-27-xs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-27-xs.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-28-m.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-28-m.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-28-xs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-28-xs.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-29-m.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-29-m.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-29-sm.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-29-sm.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-3-m.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-3-m.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-3.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-30-m.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-30-m.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-30-md.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-30-md.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-4-m.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-4-m.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-4.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-5-m.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-5-m.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-5.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-6-m.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-6-m.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-6-xs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-6-xs.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-6.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-7-m.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-7-m.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-7-xs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-7-xs.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-7.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-8-m.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-8-m.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-8-md.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-8-md.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-8-xs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-8-xs.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-8.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-9-m.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-9-m.png
--------------------------------------------------------------------------------
/public/assets/images/products/p-9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/products/p-9.png
--------------------------------------------------------------------------------
/public/assets/images/search/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/search/1.png
--------------------------------------------------------------------------------
/public/assets/images/search/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/search/2.png
--------------------------------------------------------------------------------
/public/assets/images/search/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/search/3.png
--------------------------------------------------------------------------------
/public/assets/images/support.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/assets/images/support.png
--------------------------------------------------------------------------------
/public/assets/placeholder/brand-bg.svg:
--------------------------------------------------------------------------------
1 |
12 |
--------------------------------------------------------------------------------
/public/assets/placeholder/card-medium.svg:
--------------------------------------------------------------------------------
1 |
12 |
--------------------------------------------------------------------------------
/public/assets/placeholder/card-small.svg:
--------------------------------------------------------------------------------
1 |
12 |
--------------------------------------------------------------------------------
/public/assets/placeholder/cart-item.svg:
--------------------------------------------------------------------------------
1 |
12 |
--------------------------------------------------------------------------------
/public/assets/placeholder/category-small.svg:
--------------------------------------------------------------------------------
1 |
12 |
--------------------------------------------------------------------------------
/public/assets/placeholder/collection.svg:
--------------------------------------------------------------------------------
1 |
12 |
--------------------------------------------------------------------------------
/public/assets/placeholder/instagram.svg:
--------------------------------------------------------------------------------
1 |
12 |
--------------------------------------------------------------------------------
/public/assets/placeholder/order-product.svg:
--------------------------------------------------------------------------------
1 |
12 |
--------------------------------------------------------------------------------
/public/assets/placeholder/products/product-cat.svg:
--------------------------------------------------------------------------------
1 |
12 |
--------------------------------------------------------------------------------
/public/assets/placeholder/products/product-gallery.svg:
--------------------------------------------------------------------------------
1 |
12 |
--------------------------------------------------------------------------------
/public/assets/placeholder/products/product-grid.svg:
--------------------------------------------------------------------------------
1 |
12 |
--------------------------------------------------------------------------------
/public/assets/placeholder/products/product-gridSlim.svg:
--------------------------------------------------------------------------------
1 |
12 |
--------------------------------------------------------------------------------
/public/assets/placeholder/products/product-list.svg:
--------------------------------------------------------------------------------
1 |
12 |
--------------------------------------------------------------------------------
/public/assets/placeholder/products/product-listSmall.svg:
--------------------------------------------------------------------------------
1 |
12 |
--------------------------------------------------------------------------------
/public/assets/placeholder/products/product-thumbnail.svg:
--------------------------------------------------------------------------------
1 |
12 |
--------------------------------------------------------------------------------
/public/assets/placeholder/search-product.svg:
--------------------------------------------------------------------------------
1 |
12 |
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/harrypotter518/react-nextjs-ecommerce/26ab234413ee0d554bebd5d50893c722b8e73b66/public/favicon.ico
--------------------------------------------------------------------------------
/public/locales/ar/faq.json:
--------------------------------------------------------------------------------
1 | {
2 | "faq-one-title": "كيف تتصل بخدمة العملاء؟",
3 | "faq-one-content": "يتوفر فريق تجربة العملاء لدينا 7 أيام في الأسبوع ونقدم طريقتين للاتصال. البريد الإلكتروني والدردشة. نحاول الرد بسرعة ، لذلك لا داعي للانتظار طويلاً للرد !.",
4 | "faq-two-title": "فشل تثبيت التطبيق ، كيف يتم تحديث معلومات النظام؟",
5 | "faq-two-content": "الرجاء قراءة الوثائق بعناية. لدينا أيضًا بعض مقاطع الفيديو التعليمية عبر الإنترنت بخصوص هذه المشكلة. إذا استمرت المشكلة ، يرجى فتح تذكرة في منتدى الدعم",
6 | "faq-three-title": "تستغرق استجابة الموقع وقتًا ، كيف تتحسن؟",
7 | "faq-three-content": "في البداية ، يرجى التحقق من اتصالك بالإنترنت. لدينا أيضًا بعض مقاطع الفيديو التعليمية عبر الإنترنت بخصوص هذه المشكلة. إذا استمرت المشكلة ، يرجى فتح تذكرة في منتدى الدعم.",
8 | "faq-four-title": "كيف أقوم بإنشاء حساب؟",
9 | "faq-four-content": "إذا كنت تريد فتح حساب للاستخدام الشخصي ، فيمكنك القيام بذلك عبر الهاتف أو عبر الإنترنت. يجب أن يستغرق فتح حساب عبر الإنترنت بضع دقائق فقط."
10 | }
--------------------------------------------------------------------------------
/public/locales/de/faq.json:
--------------------------------------------------------------------------------
1 | {
2 | "faq-one-title": "Wie kann ich mit dem Kundendienst Kontakt aufnehmen?",
3 | "faq-one-content": "Unser Customer Experience Team ist 7 Tage die Woche für Sie da und wir bieten zwei Möglichkeiten, um Kontakt aufzunehmen. E-Mail und Chat. Wir versuchen schnell zu antworten, damit Sie nicht zu lange auf eine Antwort warten müssen!.",
4 | "faq-two-title": "App-Installation fehlgeschlagen, wie aktualisiere ich Systeminformationen?",
5 | "faq-two-content": "Bitte lesen Sie die Dokumentation sorgfältig durch. Wir haben auch einige Online-Video-Tutorials zu diesem Thema. Wenn das Problem weiterhin besteht, öffnen Sie bitte ein Ticket im Support-Forum",
6 | "faq-three-title": "Website-Antwort braucht Zeit, wie kann man sich verbessern?",
7 | "faq-three-content": "Bitte überprüfen Sie zunächst Ihre Internetverbindung. Wir haben auch einige Online-Video-Tutorials zu diesem Thema. Wenn das Problem weiterhin besteht, öffnen Sie bitte ein Ticket im Support-Forum.",
8 | "faq-four-title": "Wie erstelle ich ein Konto?",
9 | "faq-four-content": "Wenn Sie ein Konto für den persönlichen Gebrauch eröffnen möchten, können Sie dies telefonisch oder online tun. Die Online-Kontoeröffnung sollte nur wenige Minuten dauern."
10 | }
--------------------------------------------------------------------------------
/public/locales/en/faq.json:
--------------------------------------------------------------------------------
1 | {
2 | "faq-one-title": "How to contact with Customer Service?",
3 | "faq-one-content": "Our Customer Experience Team is available 7 days a week and we offer 2 ways to get in contact.Email and Chat . We try to reply quickly, so you need not to wait too long for a response!.",
4 | "faq-two-title": "App installation failed, how to update system information?",
5 | "faq-two-content": "Please read the documentation carefully . We also have some online video tutorials regarding this issue . If the problem remains, Please Open a ticket in the support forum",
6 | "faq-three-title": "Website response taking time, how to improve?",
7 | "faq-three-content": "At first, Please check your internet connection . We also have some online video tutorials regarding this issue . If the problem remains, Please Open a ticket in the support forum.",
8 | "faq-four-title": "How do I create an account?",
9 | "faq-four-content": "If you want to open an account for personal use you can do it over the phone or online. Opening an account online should only take a few minutes."
10 | }
--------------------------------------------------------------------------------
/public/locales/es/faq.json:
--------------------------------------------------------------------------------
1 | {
2 | "faq-one-title": "¿Cómo ponerse en contacto con el servicio de atención al cliente?",
3 | "faq-one-content": "Nuestro equipo de experiencia del cliente está disponible los 7 días de la semana y ofrecemos 2 formas de ponerse en contacto: correo electrónico y chat. Intentamos responder rápidamente, por lo que no necesita esperar demasiado para recibir una respuesta.",
4 | "faq-two-title": "Falló la instalación de la aplicación, ¿cómo actualizar la información del sistema?",
5 | "faq-two-content": "Lea la documentación detenidamente. También tenemos algunos videos tutoriales en línea sobre este tema. Si el problema persiste, abra un ticket en el foro de soporte",
6 | "faq-three-title": "La respuesta del sitio web tarda, ¿cómo mejorar?",
7 | "faq-three-content": "Al principio, compruebe su conexión a Internet. También tenemos algunos videos tutoriales en línea sobre este tema. Si el problema persiste, abra un ticket en el foro de soporte.",
8 | "faq-four-title": "¿Cómo creo una cuenta?",
9 | "faq-four-content": "Si desea abrir una cuenta para uso personal, puede hacerlo por teléfono o en línea. Abrir una cuenta en línea solo debería tomar unos minutos."
10 | }
--------------------------------------------------------------------------------
/public/locales/he/faq.json:
--------------------------------------------------------------------------------
1 | {
2 | "faq-one-title": "כיצד ליצור קשר עם שירות הלקוחות?",
3 | "faq-one-content": "צוות חווית הלקוח שלנו זמין 7 ימים בשבוע ואנחנו מציעים שתי דרכים ליצור קשר. דואר אלקטרוני וצ'אט. אנו מנסים להשיב במהירות, כך שאינך צריך לחכות זמן רב מדי לתגובה !.",
4 | "faq-two-title": "התקנת האפליקציה נכשלה, כיצד לעדכן את פרטי המערכת?",
5 | "faq-two-content": "אנא קרא את התיעוד בעיון. יש לנו גם כמה מדריכי וידאו מקוונים בנושא זה. אם הבעיה נותרה, אנא פתח כרטיס בפורום התמיכה",
6 | "faq-three-title": "תגובת האתר לוקח זמן, כיצד ניתן לשפר?",
7 | "faq-three-content": "בהתחלה, אנא בדוק את חיבור האינטרנט שלך. יש לנו גם כמה מדריכי וידאו מקוונים בנושא זה. אם הבעיה נותרה, אנא פתח כרטיס בפורום התמיכה.",
8 | "faq-four-title": "כיצד אוכל ליצור חשבון?",
9 | "faq-four-content": "אם ברצונך לפתוח חשבון לשימוש אישי תוכל לעשות זאת בטלפון או באופן מקוון. פתיחת חשבון באופן מקוון אמורה לארוך מספר דקות בלבד."
10 | }
--------------------------------------------------------------------------------
/public/locales/zh/faq.json:
--------------------------------------------------------------------------------
1 | {
2 | "faq-one-title": "如何与客户服务联系?",
3 | "faq-one-content": "我们的客户体验团队每周工作7天,我们提供两种联系方式。电子邮件和聊天。 我们会尽快回复您,因此您无需等待太久就可以回复!",
4 | "faq-two-title": "应用安装失败,如何更新系统信息?",
5 | "faq-two-content": "请仔细阅读文档。 我们也有一些有关此问题的在线视频教程。 如果问题仍然存在,请在支持论坛中打开故障单",
6 | "faq-three-title": "网站响应耗时,如何改进?",
7 | "faq-three-content": "首先,请检查您的互联网连接。 我们也有一些有关此问题的在线视频教程。 如果问题仍然存在,请在支持论坛中打开故障单。",
8 | "faq-four-title": "我如何创建一个帐户?",
9 | "faq-four-content": "如果您想开设一个个人帐户,可以通过电话或在线进行。 在线开户仅需几分钟。"
10 | }
--------------------------------------------------------------------------------
/public/locales/zh/footer.json:
--------------------------------------------------------------------------------
1 | {
2 | "text-copyright": "版权",
3 | "text-all-rights-reserved": "保留所有权利",
4 | "widget-title-social": "社交",
5 | "widget-title-contact": "联系方式",
6 | "widget-title-about": "关于",
7 | "widget-title-customer-care": "客户服务",
8 | "widget-title-our-information": "我们的信息",
9 | "widget-title-top-categories": "热门类别",
10 | "link-instagram": "Instagram",
11 | "link-twitter": "Twitter",
12 | "link-facebook": "Facebook",
13 | "link-youtube": "Youtube",
14 | "link-contact-us": "联系我们",
15 | "link-email": "yourexample@email.com",
16 | "link-email-two": "example@email.com",
17 | "link-phone": "给我们打电话:+1 254 568-5479",
18 | "link-support-center": "支持中心",
19 | "link-customer-support": "客户支持",
20 | "link-about-us": "关于我们",
21 | "link-copyright": "版权",
22 | "link-faq": "常见问题和帮助",
23 | "link-shipping": "送货方式",
24 | "link-exchanges": "退货和换货",
25 | "link-privacy": "隐私政策更新",
26 | "link-terms": "条款和条件",
27 | "link-return-policy": "退货政策",
28 | "link-site-map": "网站地图",
29 | "link-men-wear": "男装",
30 | "link-women-wear": "女装",
31 | "link-kids-wear": "童装",
32 | "link-sports-wear": "体育服",
33 | "payment-master-card": "主卡",
34 | "payment-visa": "Visa",
35 | "payment-paypal": "Paypal",
36 | "payment-jcb": "JCB",
37 | "payment-skrill": "Skrill"
38 | }
--------------------------------------------------------------------------------
/public/locales/zh/privacy.json:
--------------------------------------------------------------------------------
1 | {
2 | "privacy-one-title": "目的",
3 | "privacy-one-content": "
小& 大的致力于保护您的隐私,因为我们致力于珍视人。 以下我们的隐私政策阐明了如何收集,使用和保护您的个人信息。 Demo国家隐私权原则 也适用于我们。 p>
本隐私权政策描述了我们关于收集,持有, 使用和披露您的个人信息,应与我们的条款和条件一起阅读。 提供您的个人信息即表示您同意我们根据本隐私政策收集,使用和披露该信息
",
4 | "privacy-two-title": "什么是个人数据?",
5 | "privacy-two-content": "在本政策中使用时,“个人信息”具有《隐私法》中给出的含义。 通常,它表示可以用来识别您的任何信息或意见。
",
6 | "privacy-three-title": "收集个人资料",
7 | "privacy-three-content": "为以下目的并使用以下服务而收集的个人数据:
- 谷歌分析(分析):Cookie; 使用数据
- 联系表: 电子邮件地址; 名; 电话号码
- 邮件列表或新闻通讯: 电子邮件地址; 名
",
8 | "privacy-four-title": "访问您的个人数据",
9 | "privacy-four-content": "您可以要求访问我们收集的您的个人信息,并要求我们更正该个人信息。 您可以通过与我们联系来要求访问或更正,我们通常会在30天内回复。 如果我们拒绝让您访问或纠正您的个人信息,我们将书面通知您并说明原因。
",
10 | "privacy-five-title": "投诉投诉",
11 | "privacy-five-content": "I如果您认为您的隐私受到侵犯或对我们如何处理您的个人信息有投诉,请以书面形式与我们联系。 我们会在合理的期限内(通常在30天内)做出回应。
",
12 | "privacy-six-title": "所有者和数据控制者",
13 | "privacy-six-content": "公地
20-40 demo St,
Jon doe NSW 2008
国家
电子邮件: demo@demo.com
"
14 | }
--------------------------------------------------------------------------------
/public/locales/zh/terms.json:
--------------------------------------------------------------------------------
1 | {
2 | "terms-one-title": "目的",
3 | "terms-one-content": "小& 大的致力于保护您的隐私,因为我们致力于珍视人。 以下我们的隐私政策阐明了如何收集,使用和保护您的个人信息。 Demo国家隐私权原则 也适用于我们。 p>
本隐私权政策描述了我们关于收集,持有, 使用和披露您的个人信息,应与我们的条款和条件一起阅读。 提供您的个人信息即表示您同意我们根据本隐私政策收集,使用和披露该信息
",
4 | "terms-two-title": "什么是个人数据?",
5 | "terms-two-content": "在本政策中使用时,“个人信息”具有《隐私法》中给出的含义。 通常,它表示可以用来识别您的任何信息或意见。
",
6 | "terms-three-title": "收集个人资料",
7 | "terms-three-content": "为以下目的并使用以下服务而收集的个人数据:
- 谷歌分析(分析):Cookie; 使用数据
- 联系表: 电子邮件地址; 名; 电话号码
- 邮件列表或新闻通讯: 电子邮件地址; 名
",
8 | "terms-four-title": "访问您的个人数据",
9 | "terms-four-content": "您可以要求访问我们收集的您的个人信息,并要求我们更正该个人信息。 您可以通过与我们联系来要求访问或更正,我们通常会在30天内回复。 如果我们拒绝让您访问或纠正您的个人信息,我们将书面通知您并说明原因。
",
10 | "terms-five-title": "投诉投诉",
11 | "terms-five-content": "I如果您认为您的隐私受到侵犯或对我们如何处理您的个人信息有投诉,请以书面形式与我们联系。 我们会在合理的期限内(通常在30天内)做出回应。
",
12 | "terms-six-title": "所有者和数据控制者",
13 | "terms-six-content": "公地
20-40 demo St,
Jon doe NSW 2008
国家
电子邮件: demo@demo.com
"
14 | }
--------------------------------------------------------------------------------
/public/vercel.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/components/404/error-information.tsx:
--------------------------------------------------------------------------------
1 | import Image from "next/image";
2 | import { IoHomeSharp } from "react-icons/io5";
3 | import Text from "@components/ui/text";
4 | import Link from "@components/ui/link";
5 | import { useTranslation } from "next-i18next";
6 |
7 | const ErrorInformation: React.FC = () => {
8 | const { t } = useTranslation("common");
9 | return (
10 |
11 |
12 |
18 |
19 |
{t("error-heading")}
20 |
21 | {t("error-sub-heading")}
22 |
23 |
27 |
28 |
{t("button-go-home")}
29 |
30 |
31 |
32 | );
33 | };
34 |
35 | export default ErrorInformation;
36 |
--------------------------------------------------------------------------------
/src/components/cart/cart-button.tsx:
--------------------------------------------------------------------------------
1 | import CartIcon from "@components/icons/cart-icon";
2 | import { useCart } from "@contexts/cart/cart.context";
3 | import { useUI } from "@contexts/ui.context";
4 |
5 | const CartButton = () => {
6 | const { openCart } = useUI();
7 | const { totalItems } = useCart();
8 | function handleCartOpen() {
9 | return openCart();
10 | }
11 |
12 | return (
13 |
23 | );
24 | };
25 |
26 | export default CartButton;
27 |
--------------------------------------------------------------------------------
/src/components/checkout/checkout-card-footer-item.tsx:
--------------------------------------------------------------------------------
1 | type FooterItemProps = {
2 | id: string;
3 | name: string;
4 | price: string;
5 | };
6 | export const CheckoutCardFooterItem: React.FC<{ item: FooterItemProps }> = ({
7 | item,
8 | }) => {
9 | return (
10 |
11 | {item.name}
12 | {item.price}
13 |
14 | );
15 | };
16 |
--------------------------------------------------------------------------------
/src/components/checkout/checkout-card-item.tsx:
--------------------------------------------------------------------------------
1 | import { Item } from "@contexts/cart/cart.utils";
2 | import { generateCartItemName } from "@utils/generate-cart-item-name";
3 | import usePrice from "@framework/product/use-price";
4 |
5 | export const CheckoutItem: React.FC<{ item: Item }> = ({ item }) => {
6 | const { price } = usePrice({
7 | amount: item.itemTotal,
8 | currencyCode: "USD",
9 | });
10 | return (
11 |
12 |
13 |

19 |
20 |
21 | {generateCartItemName(item.name, item.attributes)}
22 |
23 |
24 | {price}
25 |
26 |
27 | );
28 | };
29 |
--------------------------------------------------------------------------------
/src/components/common/default-seo.tsx:
--------------------------------------------------------------------------------
1 | import { DefaultSeo as NextDefaultSeo } from "next-seo";
2 | import { siteSettings } from "@settings/site-settings";
3 |
4 | export const DefaultSeo = () => {
5 | return (
6 |
27 | );
28 | };
29 |
--------------------------------------------------------------------------------
/src/components/common/drawer/drawer.tsx:
--------------------------------------------------------------------------------
1 | import "rc-drawer/assets/index.css";
2 | export { default as Drawer } from "rc-drawer";
3 |
--------------------------------------------------------------------------------
/src/components/common/drawer/managed-drawer.tsx:
--------------------------------------------------------------------------------
1 | import Cart from "@components/cart/cart";
2 | import { useUI } from "@contexts/ui.context";
3 | import { Drawer } from "@components/common/drawer/drawer";
4 | import { useRouter } from "next/router";
5 | import { getDirection } from "@utils/get-direction";
6 |
7 | const ManagedDrawer = () => {
8 | const { displayCart, closeCart } = useUI();
9 | const { locale } = useRouter();
10 | const dir = getDirection(locale);
11 | const contentWrapperCSS = dir === "ltr" ? { right: 0 } : { left: 0 };
12 | return (
13 |
22 |
23 |
24 | );
25 | };
26 |
27 | export default ManagedDrawer;
28 |
--------------------------------------------------------------------------------
/src/components/common/modal/managed-modal.tsx:
--------------------------------------------------------------------------------
1 | import { useUI } from "@contexts/ui.context";
2 | import Modal from "./modal";
3 | import dynamic from "next/dynamic";
4 | const LoginForm = dynamic(() => import("@components/auth/login-form"));
5 | const SignUpForm = dynamic(() => import("@components/auth/sign-up-form"));
6 | const ForgetPasswordForm = dynamic(() =>
7 | import("@components/auth/forget-password-form")
8 | );
9 | const ProductPopup = dynamic(() => import("@components/product/product-popup"));
10 | const ManagedModal: React.FC = () => {
11 | const { displayModal, closeModal, modalView } = useUI();
12 | return (
13 |
14 | {modalView === "LOGIN_VIEW" && }
15 | {modalView === "SIGN_UP_VIEW" && }
16 | {modalView === "FORGET_PASSWORD" && }
17 | {modalView === "PRODUCT_VIEW" && }
18 |
19 | );
20 | };
21 |
22 | export default ManagedModal;
23 |
--------------------------------------------------------------------------------
/src/components/common/progress-card.tsx:
--------------------------------------------------------------------------------
1 | import { useTranslation } from "next-i18next";
2 |
3 | interface Props {
4 | soldProduct?: number;
5 | totalProduct?: number;
6 | }
7 |
8 | const ProgressCard: React.FC = ({
9 | soldProduct = 0,
10 | totalProduct = 0,
11 | }) => {
12 | const progressBar = (100 / totalProduct) * soldProduct;
13 | const { t } = useTranslation("common");
14 | return (
15 |
16 |
17 |
18 | {t("text-sold")} :
19 | {soldProduct}
20 |
21 |
22 | {t("text-available")} :
23 | {totalProduct - soldProduct}
24 |
25 |
26 |
32 |
33 | );
34 | };
35 |
36 | export default ProgressCard;
37 |
--------------------------------------------------------------------------------
/src/components/common/scrollbar.tsx:
--------------------------------------------------------------------------------
1 | import cn from "classnames";
2 | import { OverlayScrollbarsComponent } from "overlayscrollbars-react";
3 | import "overlayscrollbars/css/OverlayScrollbars.css";
4 |
5 | type ScrollbarProps = {
6 | options?: any;
7 | children: React.ReactNode;
8 | style?: React.CSSProperties;
9 | className?: string;
10 | };
11 |
12 | const Scrollbar: React.FC = ({
13 | options,
14 | children,
15 | style,
16 | className,
17 | ...props
18 | }) => {
19 | return (
20 |
31 | {children}
32 |
33 | );
34 | };
35 |
36 | export default Scrollbar;
37 |
--------------------------------------------------------------------------------
/src/components/common/section-header.tsx:
--------------------------------------------------------------------------------
1 | import Text from "@components/ui/text";
2 | import Link from "@components/ui/link";
3 | import { useTranslation } from "next-i18next";
4 |
5 | interface Props {
6 | sectionHeading: string;
7 | categorySlug?: string;
8 | className?: string;
9 | }
10 |
11 | const SectionHeader: React.FC = ({
12 | sectionHeading = "text-section-title",
13 | categorySlug,
14 | className = "pb-0.5 mb-4 md:mb-5 lg:mb-6 2xl:mb-7 3xl:mb-8",
15 | }) => {
16 | const { t } = useTranslation("common");
17 | return (
18 |
21 | {t(`${sectionHeading}`)}
22 | {categorySlug && (
23 |
27 | {t("text-see-all-product")}
28 |
29 | )}
30 |
31 | );
32 | };
33 |
34 | export default SectionHeader;
35 |
--------------------------------------------------------------------------------
/src/components/common/text-information.tsx:
--------------------------------------------------------------------------------
1 | import classNames from "classnames";
2 | import Image from "next/image";
3 | import { useTranslation } from "next-i18next";
4 |
5 | interface ItemProps {
6 | icon: string;
7 | title: string;
8 | description: string;
9 | }
10 |
11 | interface Props {
12 | className?: string;
13 | item: ItemProps;
14 | }
15 |
16 | const TextInformation: React.FC = ({ item, className }) => {
17 | const { t } = useTranslation("common");
18 | return (
19 |
25 |
26 |
32 |
33 |
34 |
35 | {t(`${item.title}`)}
36 |
37 |
38 | {t(`${item.description}`)}
39 |
40 |
41 |
42 | );
43 | };
44 |
45 | export default TextInformation;
46 |
--------------------------------------------------------------------------------
/src/components/icons/CNFlag.tsx:
--------------------------------------------------------------------------------
1 | export const CNFlag = ({ width = "640px", height = "480px" }) => {
2 | return (
3 |
44 | );
45 | };
46 |
--------------------------------------------------------------------------------
/src/components/icons/DEFlag.tsx:
--------------------------------------------------------------------------------
1 | export const DEFlag = ({ width = "640px", height = "480px" }) => {
2 | return (
3 |
13 | );
14 | };
15 |
--------------------------------------------------------------------------------
/src/components/icons/ILFlag.tsx:
--------------------------------------------------------------------------------
1 | export const ILFlag = ({ width = "640px", height = "480px" }) => {
2 | return (
3 |
32 | );
33 | };
34 |
--------------------------------------------------------------------------------
/src/components/icons/cart-icon.tsx:
--------------------------------------------------------------------------------
1 | const CartIcon = ({
2 | color = "currentColor",
3 | width = "18px",
4 | height = "18px",
5 | className = "md:w-4 xl:w-5 md:h-4 xl:h-5",
6 | }) => {
7 | return (
8 |
22 | );
23 | };
24 |
25 | export default CartIcon;
26 |
--------------------------------------------------------------------------------
/src/components/icons/eye-icon.tsx:
--------------------------------------------------------------------------------
1 | export const Eye: React.FC> = (props) => (
2 |
22 | );
23 |
--------------------------------------------------------------------------------
/src/components/icons/eye-off-icon.tsx:
--------------------------------------------------------------------------------
1 | export const EyeOff: React.FC> = (props) => (
2 |
16 | );
17 |
--------------------------------------------------------------------------------
/src/components/icons/home-icon.tsx:
--------------------------------------------------------------------------------
1 | const HomeIcon = ({
2 | color = "currentColor",
3 | width = "18px",
4 | height = "20px",
5 | }) => {
6 | return (
7 |
21 | );
22 | };
23 |
24 | export default HomeIcon;
25 |
--------------------------------------------------------------------------------
/src/components/icons/menu-icon.tsx:
--------------------------------------------------------------------------------
1 | const MenuIcon: React.FC> = (props) => {
2 | return (
3 |
40 | );
41 | };
42 |
43 | export default MenuIcon;
44 |
--------------------------------------------------------------------------------
/src/components/icons/minus-icon.tsx:
--------------------------------------------------------------------------------
1 | const MinusIcon = ({
2 | color = "currentColor",
3 | width = "10px",
4 | height = "2px",
5 | }) => {
6 | return (
7 |
20 | );
21 | };
22 |
23 | export default MinusIcon;
24 |
--------------------------------------------------------------------------------
/src/components/icons/plus-icon.tsx:
--------------------------------------------------------------------------------
1 | const PlusIcon = ({
2 | color = "currentColor",
3 | width = "10px",
4 | height = "10px",
5 | }) => {
6 | return (
7 |
22 | );
23 | };
24 |
25 | export default PlusIcon;
26 |
--------------------------------------------------------------------------------
/src/components/icons/search-icon.tsx:
--------------------------------------------------------------------------------
1 | const SearchIcon = ({
2 | color = "currentColor",
3 | width = "17px",
4 | height = "18px",
5 | className = "md:w-4 xl:w-5 md:h-4 xl:h-5",
6 | }) => {
7 | return (
8 |
22 | );
23 | };
24 |
25 | export default SearchIcon;
26 |
--------------------------------------------------------------------------------
/src/components/icons/user-icon.tsx:
--------------------------------------------------------------------------------
1 | const UserIcon = ({
2 | color = "currentColor",
3 | width = "18px",
4 | height = "20px",
5 | }) => {
6 | return (
7 |
21 | );
22 | };
23 |
24 | export default UserIcon;
25 |
--------------------------------------------------------------------------------
/src/components/layout/footer/footer.tsx:
--------------------------------------------------------------------------------
1 | import Widgets from "./widgets";
2 | import Copyright from "./copyright";
3 | import { footer } from "./data";
4 | const { widgets, payment } = footer;
5 |
6 | const Footer: React.FC = () => (
7 |
11 | );
12 |
13 | export default Footer;
14 |
--------------------------------------------------------------------------------
/src/components/layout/footer/widgets.tsx:
--------------------------------------------------------------------------------
1 | import Container from "@components/ui/container";
2 | import WidgetLink from "@components/widgets/widget-link";
3 |
4 | interface WidgetsProps {
5 | widgets: {
6 | id: number;
7 | widgetTitle: string;
8 | lists: any;
9 | }[];
10 | }
11 |
12 | const Widgets: React.FC = ({ widgets }) => {
13 | return (
14 |
15 |
16 | {widgets?.map((widget) => (
17 |
22 | ))}
23 |
24 |
25 | );
26 | };
27 |
28 | export default Widgets;
29 |
--------------------------------------------------------------------------------
/src/components/layout/header/auth-menu.tsx:
--------------------------------------------------------------------------------
1 | import Link from "@components/ui/link";
2 | import React from "react";
3 |
4 | interface Props {
5 | href: string;
6 | className?: string;
7 | btnProps: React.ButtonHTMLAttributes;
8 | isAuthorized: boolean;
9 | }
10 |
11 | const AuthMenu: React.FC = ({
12 | isAuthorized,
13 | href,
14 | className,
15 | btnProps,
16 | children,
17 | }) => {
18 | return isAuthorized ? (
19 |
20 | {children}
21 |
22 | ) : (
23 |
24 | );
25 | };
26 |
27 | export default AuthMenu;
28 |
--------------------------------------------------------------------------------
/src/components/my-account/account-layout.tsx:
--------------------------------------------------------------------------------
1 | import PageHeader from "@components/ui/page-header";
2 | import Container from "@components/ui/container";
3 | import AccountNav from "@components/my-account/account-nav";
4 | import Subscription from "@components/common/subscription";
5 |
6 | const AccountLayout: React.FunctionComponent<{}> = ({ children }) => {
7 | return (
8 | <>
9 |
10 |
11 |
12 |
13 |
14 |
{children}
15 |
16 |
17 |
18 |
19 |
20 | >
21 | );
22 | };
23 |
24 | export default AccountLayout;
25 |
--------------------------------------------------------------------------------
/src/components/product/feeds/best-seller-product-feed.tsx:
--------------------------------------------------------------------------------
1 | import ProductsBlock from "@containers/products-block";
2 | import { useBestSellerProductsQuery } from "@framework/product/get-all-best-seller-products";
3 |
4 | export default function BestSellerProductFeed() {
5 | const { data, isLoading, error } = useBestSellerProductsQuery({
6 | limit: 10,
7 | });
8 |
9 | return (
10 |
17 | );
18 | }
19 |
--------------------------------------------------------------------------------
/src/components/product/feeds/new-arrivals-product-feed.tsx:
--------------------------------------------------------------------------------
1 | import ProductsBlock from "@containers/products-block";
2 | import { useNewArrivalProductsQuery } from "@framework/product/get-all-new-arrival-products";
3 |
4 | export default function NewArrivalsProductFeed() {
5 | const { data, isLoading, error } = useNewArrivalProductsQuery({
6 | limit: 10,
7 | });
8 |
9 | return (
10 |
17 | );
18 | }
19 |
--------------------------------------------------------------------------------
/src/components/product/product-meta-review.tsx:
--------------------------------------------------------------------------------
1 | import { useState } from "react";
2 | import { Collapse } from "@components/common/accordion";
3 | import ReviewForm from "@components/common/form/review-form";
4 |
5 | interface Props {
6 | data: any;
7 | }
8 |
9 | const ProductMetaReview: React.FC = ({ data }) => {
10 | const [expanded, setExpanded] = useState(0);
11 | return (
12 | <>
13 | {data?.meta.map((item: any, index: any) => (
14 |
22 | {item.content}
23 | >
24 | ) : (
25 | item.content
26 | )
27 | }
28 | expanded={expanded}
29 | setExpanded={setExpanded}
30 | variant="transparent"
31 | />
32 | ))}
33 | >
34 | );
35 | };
36 |
37 | export default ProductMetaReview;
38 |
--------------------------------------------------------------------------------
/src/components/shop/discount.tsx:
--------------------------------------------------------------------------------
1 | import { useState } from "react";
2 | import Container from "@components/ui/container";
3 | import { IoClose } from "react-icons/io5";
4 | import { useTranslation } from "next-i18next";
5 |
6 | const ShopDiscount: React.FC = () => {
7 | const [status, setStatus] = useState(false);
8 | const hide = () => {
9 | setStatus(true);
10 | };
11 | const { t } = useTranslation("common");
12 | return (
13 |
34 | );
35 | };
36 |
37 | export default ShopDiscount;
38 |
--------------------------------------------------------------------------------
/src/components/shop/filtered-item.tsx:
--------------------------------------------------------------------------------
1 | import { useRouter } from "next/router";
2 | import { IoClose } from "react-icons/io5";
3 | import isEmpty from "lodash/isEmpty";
4 |
5 | interface Props {
6 | itemKey: string;
7 | itemValue: string;
8 | }
9 |
10 | export const FilteredItem = ({ itemKey, itemValue }: Props) => {
11 | const router = useRouter();
12 | const { pathname, query } = router;
13 |
14 | function handleClose() {
15 | const currentItem = (query[itemKey]! as string)
16 | .split(",")
17 | .filter((i) => i !== itemValue);
18 | delete query[itemKey];
19 | router.push({
20 | pathname,
21 | query: {
22 | ...query,
23 | ...(!isEmpty(currentItem) ? { [itemKey]: currentItem.join(",") } : {}),
24 | },
25 | });
26 | }
27 | return (
28 |
32 | {itemValue}
33 |
34 |
35 | );
36 | };
37 |
--------------------------------------------------------------------------------
/src/components/ui/active-link.tsx:
--------------------------------------------------------------------------------
1 | import { useRouter } from "next/router";
2 | import Link from "next/link";
3 | import React, { Children } from "react";
4 |
5 | const ActiveLink = ({ children, activeClassName, href, ...props }: any) => {
6 | const { pathname } = useRouter();
7 | const child = Children.only(children);
8 | const childClassName = child.props.className || "";
9 |
10 | const className =
11 | pathname === href
12 | ? `${childClassName} ${activeClassName}`.trim()
13 | : childClassName;
14 |
15 | return (
16 |
17 | {React.cloneElement(child, {
18 | className: className || null,
19 | })}
20 |
21 | );
22 | };
23 |
24 | export default ActiveLink;
25 |
--------------------------------------------------------------------------------
/src/components/ui/alert.tsx:
--------------------------------------------------------------------------------
1 | interface AlertProps {
2 | message?: string;
3 | }
4 |
5 | const Alert: React.FC = ({ message }) => {
6 | return (
7 |
8 | {message}
9 |
10 | );
11 | };
12 |
13 | export default Alert;
14 |
--------------------------------------------------------------------------------
/src/components/ui/checkbox.tsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { useTranslation } from "next-i18next";
3 | interface CheckBoxProps extends React.InputHTMLAttributes {
4 | labelKey?: string;
5 | label?: string | any;
6 | }
7 | export const CheckBox = React.forwardRef(
8 | ({ labelKey, label, ...rest }, ref) => {
9 | const { t } = useTranslation();
10 | return (
11 |
20 | );
21 | }
22 | );
23 |
--------------------------------------------------------------------------------
/src/components/ui/container.tsx:
--------------------------------------------------------------------------------
1 | import cn from "classnames";
2 | interface Props {
3 | className?: string;
4 | children?: any;
5 | el?: HTMLElement;
6 | clean?: boolean;
7 | }
8 |
9 | const Container: React.FC = ({
10 | children,
11 | className,
12 | el = "div",
13 | clean,
14 | }) => {
15 | const rootClassName = cn(className, {
16 | "mx-auto max-w-[1920px] px-4 md:px-8 2xl:px-16": !clean,
17 | });
18 |
19 | let Component: React.ComponentType<
20 | React.HTMLAttributes
21 | > = el as any;
22 |
23 | return {children};
24 | };
25 |
26 | export default Container;
27 |
--------------------------------------------------------------------------------
/src/components/ui/divider.tsx:
--------------------------------------------------------------------------------
1 | interface DividerProps {
2 | className?: string;
3 | }
4 |
5 | const Divider: React.FC = ({
6 | className = "mb-12 lg:mb-14 xl:mb-16 pb-0.5 lg:pb-1 xl:pb-0",
7 | }) => {
8 | return ;
9 | };
10 |
11 | export default Divider;
12 |
--------------------------------------------------------------------------------
/src/components/ui/link.tsx:
--------------------------------------------------------------------------------
1 | import NextLink, { LinkProps as NextLinkProps } from "next/link";
2 |
3 | const Link: React.FC = ({
4 | href,
5 | children,
6 | ...props
7 | }) => {
8 | return (
9 |
10 | {children}
11 |
12 | );
13 | };
14 |
15 | export default Link;
16 |
--------------------------------------------------------------------------------
/src/components/ui/loaders/brand-card-loader.tsx:
--------------------------------------------------------------------------------
1 | import ContentLoader from "react-content-loader";
2 |
3 | const BrandCardLoader = (props: any) => (
4 |
14 |
15 |
16 | );
17 |
18 | export default BrandCardLoader;
19 |
--------------------------------------------------------------------------------
/src/components/ui/loaders/card-loader.tsx:
--------------------------------------------------------------------------------
1 | import ContentLoader from "react-content-loader";
2 |
3 | const CardLoader = (props: any) => (
4 |
14 |
15 |
16 |
17 | );
18 |
19 | export default CardLoader;
20 |
--------------------------------------------------------------------------------
/src/components/ui/loaders/card-rounded-loader.tsx:
--------------------------------------------------------------------------------
1 | import ContentLoader from "react-content-loader";
2 |
3 | const CardRoundedLoader = (props: any) => (
4 |
14 |
15 |
16 |
17 | );
18 |
19 | export default CardRoundedLoader;
20 |
--------------------------------------------------------------------------------
/src/components/ui/loaders/category-card-loader.tsx:
--------------------------------------------------------------------------------
1 | import ContentLoader from "react-content-loader";
2 |
3 | const CategoryCardLoader = (props: any) => (
4 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 | );
24 |
25 | export default CategoryCardLoader;
26 |
--------------------------------------------------------------------------------
/src/components/ui/loaders/category-list-card-loader.tsx:
--------------------------------------------------------------------------------
1 | import ContentLoader from "react-content-loader";
2 |
3 | const CategoryListCardLoader = (props: any) => (
4 |
14 |
15 |
16 |
17 |
18 | );
19 |
20 | export default CategoryListCardLoader;
21 |
--------------------------------------------------------------------------------
/src/components/ui/loaders/category-list-feed-loader.tsx:
--------------------------------------------------------------------------------
1 | import CategoryListCardLoader from "./category-list-card-loader";
2 |
3 | interface Props {
4 | limit?: number;
5 | }
6 |
7 | const CategoryListFeedLoader = ({ limit = 7 }: Props) => {
8 | return (
9 | <>
10 | {Array.from({ length: limit }).map((_, idx) => (
11 |
12 | ))}
13 | >
14 | );
15 | };
16 |
17 | export default CategoryListFeedLoader;
18 |
--------------------------------------------------------------------------------
/src/components/ui/loaders/content-feed-loader.tsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | interface Props {
3 | limit?: number;
4 | contentLoader?: any;
5 | }
6 |
7 | const ContentFeedLoader = ({ limit = 3, contentLoader }: Props) => {
8 | return (
9 | <>
10 | {Array.from({ length: limit }).map((_, idx) => (
11 | {contentLoader}
12 | ))}
13 | >
14 | );
15 | };
16 | export default ContentFeedLoader;
17 |
--------------------------------------------------------------------------------
/src/components/ui/loaders/product-card-grid-loader.tsx:
--------------------------------------------------------------------------------
1 | import ContentLoader from "react-content-loader";
2 |
3 | const ProductCardGridLoader = (props: any) => (
4 |
14 |
15 |
16 |
17 |
18 |
19 | );
20 |
21 | export default ProductCardGridLoader;
22 |
--------------------------------------------------------------------------------
/src/components/ui/loaders/product-card-loader.tsx:
--------------------------------------------------------------------------------
1 | import ContentLoader from "react-content-loader";
2 |
3 | const ProductCardLoader = (props: any) => (
4 |
14 |
15 |
16 |
17 |
18 |
19 | );
20 |
21 | export default ProductCardLoader;
22 |
--------------------------------------------------------------------------------
/src/components/ui/loaders/product-card-small-list-loader.tsx:
--------------------------------------------------------------------------------
1 | import ContentLoader from "react-content-loader";
2 |
3 | const ProductCardListSmallLoader = (props: any) => (
4 |
14 |
15 |
16 |
17 |
18 |
19 | );
20 |
21 | export default ProductCardListSmallLoader;
22 |
--------------------------------------------------------------------------------
/src/components/ui/loaders/product-feed-loader.tsx:
--------------------------------------------------------------------------------
1 | import ProductCardLoader from "@components/ui/loaders/product-card-loader";
2 |
3 | interface Props {
4 | limit?: number;
5 | uniqueKey?: string;
6 | }
7 |
8 | const ProductFeedLoader = ({ limit = 5, uniqueKey = "product" }: Props) => {
9 | return (
10 | <>
11 | {Array.from({ length: limit }).map((_, idx) => (
12 |
13 | ))}
14 | >
15 | );
16 | };
17 |
18 | export default ProductFeedLoader;
19 |
--------------------------------------------------------------------------------
/src/components/ui/loaders/product-flash-sale-grid-feed-loader.tsx:
--------------------------------------------------------------------------------
1 | import ProductFlashSaleGridLoader from "./product-flash-sale-grid-loader";
2 |
3 | interface Props {
4 | limit?: number;
5 | }
6 |
7 | const ProductFlashSaleGridFeedLoader = ({ limit = 3 }: Props) => {
8 | return (
9 | <>
10 | {Array.from({ length: limit }).map((_, idx) => (
11 |
12 | ))}
13 | >
14 | );
15 | };
16 |
17 | export default ProductFlashSaleGridFeedLoader;
18 |
--------------------------------------------------------------------------------
/src/components/ui/loaders/product-flash-sale-grid-loader.tsx:
--------------------------------------------------------------------------------
1 | import ContentLoader from "react-content-loader";
2 |
3 | const ProductFlashSaleGridLoader = (props: any) => (
4 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 | );
25 |
26 | export default ProductFlashSaleGridLoader;
27 |
--------------------------------------------------------------------------------
/src/components/ui/loaders/product-flash-sale-loader.tsx:
--------------------------------------------------------------------------------
1 | import ContentLoader from "react-content-loader";
2 |
3 | const ProductFlashSaleLoader = (props: any) => (
4 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 | );
25 |
26 | export default ProductFlashSaleLoader;
27 |
--------------------------------------------------------------------------------
/src/components/ui/loaders/product-list-card-loader.tsx:
--------------------------------------------------------------------------------
1 | import ContentLoader from "react-content-loader";
2 |
3 | const ProductListCardLoader = (props: any) => (
4 |
14 |
15 |
16 |
17 |
18 |
19 | );
20 |
21 | export default ProductListCardLoader;
22 |
--------------------------------------------------------------------------------
/src/components/ui/loaders/product-list-feed-loader.tsx:
--------------------------------------------------------------------------------
1 | import ProductListCardLoader from "./product-list-card-loader";
2 |
3 | interface Props {
4 | limit?: number;
5 | }
6 |
7 | const ProductListFeedLoader = ({ limit = 4 }: Props) => {
8 | return (
9 | <>
10 | {Array.from({ length: limit }).map((_, idx) => (
11 |
12 | ))}
13 | >
14 | );
15 | };
16 |
17 | export default ProductListFeedLoader;
18 |
--------------------------------------------------------------------------------
/src/components/ui/loaders/search-result-loader.tsx:
--------------------------------------------------------------------------------
1 | import ContentLoader from "react-content-loader";
2 |
3 | const SearchResultLoader = (props: any) => (
4 |
14 |
15 |
16 |
17 |
18 | );
19 |
20 | export default SearchResultLoader;
21 |
--------------------------------------------------------------------------------
/src/components/ui/logo.tsx:
--------------------------------------------------------------------------------
1 | import Image from "next/image";
2 | import Link from "@components/ui/link";
3 | import cn from "classnames";
4 | import { siteSettings } from "@settings/site-settings";
5 |
6 | const Logo: React.FC> = ({
7 | className,
8 | ...props
9 | }) => {
10 | return (
11 |
16 |
24 |
25 | );
26 | };
27 |
28 | export default Logo;
29 |
--------------------------------------------------------------------------------
/src/components/ui/page-header.tsx:
--------------------------------------------------------------------------------
1 | import { useTranslation } from "next-i18next";
2 |
3 | interface HeaderProps {
4 | pageSubHeader?: string;
5 | pageHeader: string;
6 | }
7 |
8 | const PageHeader: React.FC = ({
9 | pageSubHeader = "text-page-explore",
10 | pageHeader = "text-page-header",
11 | }) => {
12 | const { t } = useTranslation("common");
13 | return (
14 |
20 |
21 |
22 |
23 |
24 | {t(`${pageSubHeader}`)}
25 |
26 | {t(`${pageHeader}`)}
27 |
28 |
29 |
30 | );
31 | };
32 |
33 | export default PageHeader;
34 |
--------------------------------------------------------------------------------
/src/components/ui/radiobox.tsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { useTranslation } from "next-i18next";
3 | interface RadioBoxProps extends React.InputHTMLAttributes {
4 | labelKey: string | React.ReactElement;
5 | }
6 | export const RadioBox = React.forwardRef(
7 | ({ labelKey, ...rest }, ref) => {
8 | const { t } = useTranslation("forms");
9 | return (
10 |
21 | );
22 | }
23 | );
24 |
--------------------------------------------------------------------------------
/src/components/ui/tabs.tsx:
--------------------------------------------------------------------------------
1 | import "react-tabs/style/react-tabs.css";
2 | export { Tab, Tabs, TabList, TabPanel } from "react-tabs";
3 |
--------------------------------------------------------------------------------
/src/containers/banner-block.tsx:
--------------------------------------------------------------------------------
1 | import BannerCard from "@components/common/banner-card";
2 |
3 | interface BannerProps {
4 | data: any;
5 | className?: string;
6 | }
7 |
8 | const BannerBlock: React.FC = ({
9 | data,
10 | className = "mb-12 md:mb-14 xl:mb-16",
11 | }) => {
12 | return (
13 |
16 | {data.map((banner: any) => (
17 |
28 | ))}
29 |
30 | );
31 | };
32 |
33 | export default BannerBlock;
34 |
--------------------------------------------------------------------------------
/src/containers/banner-carousel-block.tsx:
--------------------------------------------------------------------------------
1 | import BannerCard from "@components/common/banner-card";
2 | import Carousel from "@components/ui/carousel/carousel";
3 | import { SwiperSlide } from "swiper/react";
4 | import { promotionBannerTwo as banners } from "@framework/static/banner";
5 |
6 | const breakpoints = {
7 | "1025": {
8 | slidesPerView: 3,
9 | spaceBetween: 28,
10 | },
11 | "480": {
12 | slidesPerView: 2,
13 | spaceBetween: 20,
14 | },
15 | "0": {
16 | slidesPerView: 1,
17 | spaceBetween: 12,
18 | },
19 | };
20 |
21 | interface BannerProps {
22 | className?: string;
23 | }
24 |
25 | const BannerCarouselBlock: React.FC = ({
26 | className = "mb-12 md:mb-12 lg:mb-14 pb-0.5 xl:pb-1.5",
27 | }) => {
28 | return (
29 |
30 |
31 | {banners?.map((banner: any) => (
32 |
33 |
34 |
35 | ))}
36 |
37 |
38 | );
39 | };
40 |
41 | export default BannerCarouselBlock;
42 |
--------------------------------------------------------------------------------
/src/containers/banner-slider-block.tsx:
--------------------------------------------------------------------------------
1 | import BannerCard from "@components/common/banner-card";
2 | import Carousel from "@components/ui/carousel/carousel";
3 | import { SwiperSlide } from "swiper/react";
4 | import { promotionBanner } from "@framework/static/banner";
5 |
6 | interface BannerProps {
7 | className?: string;
8 | }
9 |
10 | const breakpoints = {
11 | "0": {
12 | slidesPerView: 2,
13 | },
14 | };
15 |
16 | const BannerSliderBlock: React.FC = ({
17 | className = "mb-12 md:mb-14 xl:mb-16",
18 | }) => {
19 | return (
20 |
21 |
22 |
31 | {promotionBanner.map((banner: any) => (
32 |
36 |
37 |
38 | ))}
39 |
40 |
41 |
42 | );
43 | };
44 |
45 | export default BannerSliderBlock;
46 |
--------------------------------------------------------------------------------
/src/framework/basic-rest/auth/use-forget-password.tsx:
--------------------------------------------------------------------------------
1 | // import { API_ENDPOINTS } from "@framework/utils/api-endpoints";
2 | // import http from "@framework/utils/http";
3 | import Cookies from "js-cookie";
4 | import { useMutation } from "react-query";
5 |
6 | export interface ForgetPasswordType {
7 | email: string;
8 | }
9 | async function forgetPassword() {
10 | // return http.post(API_ENDPOINTS.LOGIN, input);
11 | return {
12 | ok: true,
13 | message: "Forget password Successful!",
14 | };
15 | }
16 | export const useForgetPasswordMutation = () => {
17 | return useMutation(() => forgetPassword(), {
18 | onSuccess: (_data) => {
19 | Cookies.remove("auth_token");
20 | },
21 | onError: (data) => {
22 | console.log(data, "forget password error response");
23 | },
24 | });
25 | };
26 |
--------------------------------------------------------------------------------
/src/framework/basic-rest/auth/use-login.tsx:
--------------------------------------------------------------------------------
1 | import { useUI } from "@contexts/ui.context";
2 | // import { API_ENDPOINTS } from "@framework/utils/api-endpoints";
3 | // import http from "@framework/utils/http";
4 | import Cookies from "js-cookie";
5 | import { useMutation } from "react-query";
6 |
7 | export interface LoginInputType {
8 | email: string;
9 | password: string;
10 | remember_me: boolean;
11 | }
12 | async function login(input: LoginInputType) {
13 | // return http.post(API_ENDPOINTS.LOGIN, input);
14 | return {
15 | token: `${input.email}.${input.remember_me}`.split("").reverse().join(""),
16 | };
17 | }
18 | export const useLoginMutation = () => {
19 | const { authorize, closeModal } = useUI();
20 | return useMutation((input: LoginInputType) => login(input), {
21 | onSuccess: (data) => {
22 | Cookies.set("auth_token", data.token);
23 | authorize();
24 | closeModal();
25 | },
26 | onError: (data) => {
27 | console.log(data, "login error response");
28 | },
29 | });
30 | };
31 |
--------------------------------------------------------------------------------
/src/framework/basic-rest/auth/use-logout.tsx:
--------------------------------------------------------------------------------
1 | import { useUI } from "@contexts/ui.context";
2 | // import { API_ENDPOINTS } from "@framework/utils/api-endpoints";
3 | // import http from "@framework/utils/http";
4 | import Cookies from "js-cookie";
5 | import Router from "next/router";
6 | import { useMutation } from "react-query";
7 |
8 | export interface LoginInputType {
9 | email: string;
10 | password: string;
11 | remember_me: boolean;
12 | }
13 | async function logout() {
14 | // return http.post(API_ENDPOINTS.LOGIN, input);
15 | return {
16 | ok: true,
17 | message: "Logout Successful!",
18 | };
19 | }
20 | export const useLogoutMutation = () => {
21 | const { unauthorize } = useUI();
22 | return useMutation(() => logout(), {
23 | onSuccess: (_data) => {
24 | Cookies.remove("auth_token");
25 | unauthorize();
26 | Router.push("/");
27 | },
28 | onError: (data) => {
29 | console.log(data, "logout error response");
30 | },
31 | });
32 | };
33 |
--------------------------------------------------------------------------------
/src/framework/basic-rest/auth/use-signup.tsx:
--------------------------------------------------------------------------------
1 | import { useUI } from "@contexts/ui.context";
2 | // import { API_ENDPOINTS } from "@framework/utils/api-endpoints";
3 | // import http from "@framework/utils/http";
4 | import Cookies from "js-cookie";
5 | import { useMutation } from "react-query";
6 |
7 | export interface SignUpInputType {
8 | email: string;
9 | password: string;
10 | name: string;
11 | }
12 | async function signUp(input: SignUpInputType) {
13 | // return http.post(API_ENDPOINTS.LOGIN, input);
14 | return {
15 | token: `${input.email}.${input.name}`.split("").reverse().join(""),
16 | };
17 | }
18 | export const useSignUpMutation = () => {
19 | const { authorize, closeModal } = useUI();
20 | return useMutation((input: SignUpInputType) => signUp(input), {
21 | onSuccess: (data) => {
22 | Cookies.set("auth_token", data.token);
23 | authorize();
24 | closeModal();
25 | },
26 | onError: (data) => {
27 | console.log(data, "login error response");
28 | },
29 | });
30 | };
31 |
--------------------------------------------------------------------------------
/src/framework/basic-rest/brand/get-all-brands.tsx:
--------------------------------------------------------------------------------
1 | import { QueryOptionsType, Brand } from "@framework/types";
2 | import http from "@framework/utils/http";
3 | import { API_ENDPOINTS } from "@framework/utils/api-endpoints";
4 | import { useQuery } from "react-query";
5 |
6 | export const fetchBrands = async ({ queryKey }: any) => {
7 | const [_key, _params] = queryKey;
8 | const { data } = await http.get(API_ENDPOINTS.BRANDS);
9 | return data;
10 | };
11 | export const useBrandsQuery = (options: QueryOptionsType) => {
12 | return useQuery<{ brands: Brand[]; brandsGrid: Brand[] }, Error>(
13 | [API_ENDPOINTS.BRANDS, options],
14 | fetchBrands
15 | );
16 | };
17 |
--------------------------------------------------------------------------------
/src/framework/basic-rest/category/get-all-categories.tsx:
--------------------------------------------------------------------------------
1 | import { CategoriesQueryOptionsType, Category } from "@framework/types";
2 | import http from "@framework/utils/http";
3 | import { API_ENDPOINTS } from "@framework/utils/api-endpoints";
4 | import { useQuery } from "react-query";
5 |
6 | export const fetchCategories = async ({ queryKey }: any) => {
7 | const [_key, _params] = queryKey;
8 | const {
9 | data: { data },
10 | } = await http.get(API_ENDPOINTS.CATEGORIES);
11 | return { categories: { data: data as Category[] } };
12 | };
13 | export const useCategoriesQuery = (options: CategoriesQueryOptionsType) => {
14 | return useQuery<{ categories: { data: Category[] } }, Error>(
15 | [API_ENDPOINTS.CATEGORIES, options],
16 | fetchCategories
17 | );
18 | };
19 |
--------------------------------------------------------------------------------
/src/framework/basic-rest/category/get-all-featured-categories.tsx:
--------------------------------------------------------------------------------
1 | import { QueryOptionsType, Category } from "@framework/types";
2 | import http from "@framework/utils/http";
3 | import { API_ENDPOINTS } from "@framework/utils/api-endpoints";
4 | import { useQuery } from "react-query";
5 |
6 | export const fetchFeaturedCategories = async ({ queryKey }: any) => {
7 | const [_key, _params] = queryKey;
8 | const { data } = await http.get(API_ENDPOINTS.FEATURED_CATEGORIES);
9 | return data;
10 | };
11 | export const useFeaturedCategoriesQuery = (options: QueryOptionsType) => {
12 | return useQuery(
13 | [API_ENDPOINTS.FEATURED_CATEGORIES, options],
14 | fetchFeaturedCategories
15 | );
16 | };
17 |
--------------------------------------------------------------------------------
/src/framework/basic-rest/category/get-category.tsx:
--------------------------------------------------------------------------------
1 | import { QueryOptionsType, Category } from "@framework/types";
2 | import http from "@framework/utils/http";
3 | import { API_ENDPOINTS } from "@framework/utils/api-endpoints";
4 | import { useQuery } from "react-query";
5 |
6 | export const fetchCategory = async ({ queryKey }: any) => {
7 | const [_key, _params] = queryKey;
8 | const {
9 | data: { data },
10 | } = await http.get(API_ENDPOINTS.CATEGORIES);
11 | return { category: { data } };
12 | };
13 | export const useCategoriesQuery = (options: QueryOptionsType) => {
14 | return useQuery<{ category: { data: Category[] } }, Error>(
15 | [API_ENDPOINTS.CATEGORIES, options],
16 | fetchCategory
17 | );
18 | };
19 |
--------------------------------------------------------------------------------
/src/framework/basic-rest/checkout/use-checkout.tsx:
--------------------------------------------------------------------------------
1 | // import { API_ENDPOINTS } from "@framework/utils/api-endpoints";
2 | // import http from "@framework/utils/http";
3 | import { useMutation } from "react-query";
4 |
5 | export interface CheckoutInputType {
6 | firstName: string;
7 | lastName: string;
8 | phone: string;
9 | email: string;
10 | address: string;
11 | city: string;
12 | zipCode: string;
13 | save: boolean;
14 | note: string;
15 | }
16 | async function checkout(input: CheckoutInputType) {
17 | // return http.post(API_ENDPOINTS.ChangeEmail, input);
18 | return input;
19 | }
20 | export const useCheckoutMutation = () => {
21 | return useMutation((input: CheckoutInputType) => checkout(input), {
22 | onSuccess: (data) => {
23 | console.log(data, "Checkout success response");
24 | },
25 | onError: (data) => {
26 | console.log(data, "Checkout error response");
27 | },
28 | });
29 | };
30 |
--------------------------------------------------------------------------------
/src/framework/basic-rest/customer/use-change-email.tsx:
--------------------------------------------------------------------------------
1 | // import { API_ENDPOINTS } from "@framework/utils/api-endpoints";
2 | // import http from "@framework/utils/http";
3 | import { useMutation } from "react-query";
4 |
5 | export interface ChangeEmailInputType {
6 | newEmail: string;
7 | oldEmail: string;
8 | }
9 | async function changeEmail(input: ChangeEmailInputType) {
10 | // return http.post(API_ENDPOINTS.ChangeEmail, input);
11 | return input;
12 | }
13 | export const useChangeEmailMutation = () => {
14 | return useMutation((input: ChangeEmailInputType) => changeEmail(input), {
15 | onSuccess: (data) => {
16 | console.log(data, "ChangeEmail success response");
17 | },
18 | onError: (data) => {
19 | console.log(data, "ChangeEmail error response");
20 | },
21 | });
22 | };
23 |
--------------------------------------------------------------------------------
/src/framework/basic-rest/customer/use-change-password.tsx:
--------------------------------------------------------------------------------
1 | // import { API_ENDPOINTS } from "@framework/utils/api-endpoints";
2 | // import http from "@framework/utils/http";
3 | import { useMutation } from "react-query";
4 |
5 | export interface ChangePasswordInputType {
6 | newPassword: string;
7 | oldPassword: string;
8 | }
9 | async function changePassword(input: ChangePasswordInputType) {
10 | // return http.post(API_ENDPOINTS.ChangePassword, input);
11 | return input;
12 | }
13 | export const useChangePasswordMutation = () => {
14 | return useMutation(
15 | (input: ChangePasswordInputType) => changePassword(input),
16 | {
17 | onSuccess: (data) => {
18 | console.log(data, "ChangePassword success response");
19 | },
20 | onError: (data) => {
21 | console.log(data, "ChangePassword error response");
22 | },
23 | }
24 | );
25 | };
26 |
--------------------------------------------------------------------------------
/src/framework/basic-rest/customer/use-update-customer.tsx:
--------------------------------------------------------------------------------
1 | // import { API_ENDPOINTS } from "@framework/utils/api-endpoints";
2 | // import http from "@framework/utils/http";
3 | import { useMutation } from "react-query";
4 |
5 | export interface UpdateUserType {
6 | firstName: string;
7 | lastName: string;
8 | displayName: string;
9 | phoneNumber: string;
10 | email: string;
11 | password: string;
12 | confirmPassword: string;
13 | gender: string;
14 | }
15 | async function updateUser(input: UpdateUserType) {
16 | // return http.post(API_ENDPOINTS.ChangeEmail, input);
17 | return input;
18 | }
19 | export const useUpdateUserMutation = () => {
20 | return useMutation((input: UpdateUserType) => updateUser(input), {
21 | onSuccess: (data) => {
22 | console.log(data, "UpdateUser success response");
23 | },
24 | onError: (data) => {
25 | console.log(data, "UpdateUser error response");
26 | },
27 | });
28 | };
29 |
--------------------------------------------------------------------------------
/src/framework/basic-rest/order/get-all-orders.ts:
--------------------------------------------------------------------------------
1 | import { QueryOptionsType, Order } from "@framework/types";
2 | import http from "@framework/utils/http";
3 | import { API_ENDPOINTS } from "@framework/utils/api-endpoints";
4 | import { useQuery } from "react-query";
5 |
6 | export const fetchOrders = async ({ queryKey }: any) => {
7 | const [_key, _params] = queryKey;
8 | const {
9 | data: { data },
10 | } = await http.get(API_ENDPOINTS.ORDERS);
11 | return { orders: { data: data as Order[] } };
12 | };
13 | export const useOrdersQuery = (options: QueryOptionsType) => {
14 | return useQuery<{ orders: { data: Order[] } }, Error>(
15 | [API_ENDPOINTS.ORDERS, options],
16 | fetchOrders
17 | );
18 | };
19 |
--------------------------------------------------------------------------------
/src/framework/basic-rest/order/get-order.ts:
--------------------------------------------------------------------------------
1 | import { Order } from "@framework/types";
2 | import http from "@framework/utils/http";
3 | import { API_ENDPOINTS } from "@framework/utils/api-endpoints";
4 | import { useQuery } from "react-query";
5 |
6 | export const fetchOrder = async (_id: string) => {
7 | const { data } = await http.get(`${API_ENDPOINTS.ORDER}`);
8 | return data;
9 | };
10 | export const useOrderQuery = (id: string) => {
11 | return useQuery([API_ENDPOINTS.ORDER, id], () =>
12 | fetchOrder(id)
13 | );
14 | };
15 |
--------------------------------------------------------------------------------
/src/framework/basic-rest/product/get-all-best-seller-products.tsx:
--------------------------------------------------------------------------------
1 | import { QueryOptionsType, Product } from "@framework/types";
2 | import http from "@framework/utils/http";
3 | import { API_ENDPOINTS } from "@framework/utils/api-endpoints";
4 | import { useQuery } from "react-query";
5 |
6 | export const fetchBestSellerProducts = async ({ queryKey }: any) => {
7 | const [_key, _params] = queryKey;
8 | const { data } = await http.get(API_ENDPOINTS.BEST_SELLER_PRODUCTS);
9 | return data as Product[];
10 | };
11 | export const useBestSellerProductsQuery = (options: QueryOptionsType) => {
12 | return useQuery(
13 | [API_ENDPOINTS.BEST_SELLER_PRODUCTS, options],
14 | fetchBestSellerProducts
15 | );
16 | };
17 |
--------------------------------------------------------------------------------
/src/framework/basic-rest/product/get-all-featured-products.tsx:
--------------------------------------------------------------------------------
1 | import { QueryOptionsType, Product } from "@framework/types";
2 | import http from "@framework/utils/http";
3 | import { API_ENDPOINTS } from "@framework/utils/api-endpoints";
4 | import { useQuery } from "react-query";
5 |
6 | export const fetchFeaturedProducts = async ({ queryKey }: any) => {
7 | const [_key, _params] = queryKey;
8 | const { data } = await http.get(API_ENDPOINTS.FEATURED_PRODUCTS);
9 | return data;
10 | };
11 | export const useFeaturedProductsQuery = (options: QueryOptionsType) => {
12 | return useQuery(
13 | [API_ENDPOINTS.FEATURED_PRODUCTS, options],
14 | fetchFeaturedProducts
15 | );
16 | };
17 |
--------------------------------------------------------------------------------
/src/framework/basic-rest/product/get-all-flash-sale-products.tsx:
--------------------------------------------------------------------------------
1 | import { QueryOptionsType } from "@framework/types";
2 | import http from "@framework/utils/http";
3 | import { API_ENDPOINTS } from "@framework/utils/api-endpoints";
4 | import { useQuery } from "react-query";
5 |
6 | export const fetchFlashSaleProducts = async ({ queryKey }: any) => {
7 | const [_key, _params] = queryKey;
8 | const { data } = await http.get(API_ENDPOINTS.FLASH_SALE_PRODUCTS);
9 | return data;
10 | };
11 | export const useFlashSaleProductsQuery = (options: QueryOptionsType) => {
12 | return useQuery(
13 | [API_ENDPOINTS.FLASH_SALE_PRODUCTS, options],
14 | fetchFlashSaleProducts
15 | );
16 | };
17 |
--------------------------------------------------------------------------------
/src/framework/basic-rest/product/get-all-new-arrival-products.tsx:
--------------------------------------------------------------------------------
1 | import { QueryOptionsType, Product } from "@framework/types";
2 | import http from "@framework/utils/http";
3 | import { API_ENDPOINTS } from "@framework/utils/api-endpoints";
4 | import { useQuery } from "react-query";
5 |
6 | export const fetchNewArrivalProducts = async ({ queryKey }: any) => {
7 | const [_key, _params] = queryKey;
8 | const { data } = await http.get(API_ENDPOINTS.NEW_ARRIVAL_PRODUCTS);
9 | return data as Product[];
10 | };
11 | export const useNewArrivalProductsQuery = (options: QueryOptionsType) => {
12 | return useQuery(
13 | [API_ENDPOINTS.NEW_ARRIVAL_PRODUCTS, options],
14 | fetchNewArrivalProducts
15 | );
16 | };
17 |
--------------------------------------------------------------------------------
/src/framework/basic-rest/product/get-all-on-selling-products.tsx:
--------------------------------------------------------------------------------
1 | import { QueryOptionsType, Product } from "@framework/types";
2 | import http from "@framework/utils/http";
3 | import { API_ENDPOINTS } from "@framework/utils/api-endpoints";
4 | import { useQuery } from "react-query";
5 |
6 | export const fetchOnSellingProducts = async ({ queryKey }: any) => {
7 | const [_key, _params] = queryKey;
8 | const { data } = await http.get(API_ENDPOINTS.ON_SELLING_PRODUCTS);
9 | return data;
10 | };
11 | export const useOnSellingProductsQuery = (options: QueryOptionsType) => {
12 | return useQuery(
13 | [API_ENDPOINTS.ON_SELLING_PRODUCTS, options],
14 | fetchOnSellingProducts
15 | );
16 | };
17 |
--------------------------------------------------------------------------------
/src/framework/basic-rest/product/get-all-products.tsx:
--------------------------------------------------------------------------------
1 | import { QueryOptionsType, Product } from "@framework/types";
2 | import { API_ENDPOINTS } from "@framework/utils/api-endpoints";
3 | import http from "@framework/utils/http";
4 | import shuffle from "lodash/shuffle";
5 | import { useInfiniteQuery } from "react-query";
6 | type PaginatedProduct = {
7 | data: Product[];
8 | paginatorInfo: any;
9 | };
10 | const fetchProducts = async ({ queryKey }: any) => {
11 | const [_key, _params] = queryKey;
12 | const { data } = await http.get(API_ENDPOINTS.PRODUCTS);
13 | return {
14 | data: shuffle(data),
15 | paginatorInfo: {
16 | nextPageUrl: "",
17 | },
18 | };
19 | };
20 |
21 | const useProductsQuery = (options: QueryOptionsType) => {
22 | return useInfiniteQuery(
23 | [API_ENDPOINTS.PRODUCTS, options],
24 | fetchProducts,
25 | {
26 | getNextPageParam: ({ paginatorInfo }) => paginatorInfo.nextPageUrl,
27 | }
28 | );
29 | };
30 |
31 | export { useProductsQuery, fetchProducts };
32 |
--------------------------------------------------------------------------------
/src/framework/basic-rest/product/get-all-top-seller-products.tsx:
--------------------------------------------------------------------------------
1 | import { QueryOptionsType, Product } from "@framework/types";
2 | import http from "@framework/utils/http";
3 | import { API_ENDPOINTS } from "@framework/utils/api-endpoints";
4 | import { useQuery } from "react-query";
5 |
6 | export const fetchTopSellerProducts = async ({ queryKey }: any) => {
7 | const [_key, _params] = queryKey;
8 | const { data } = await http.get(API_ENDPOINTS.TOP_SELLER_PRODUCTS);
9 | return data;
10 | };
11 | export const useTopSellerProductsQuery = (options: QueryOptionsType) => {
12 | return useQuery(
13 | [API_ENDPOINTS.TOP_SELLER_PRODUCTS, options],
14 | fetchTopSellerProducts
15 | );
16 | };
17 |
--------------------------------------------------------------------------------
/src/framework/basic-rest/product/get-product.tsx:
--------------------------------------------------------------------------------
1 | import { Product } from "@framework/types";
2 | import http from "@framework/utils/http";
3 | import { API_ENDPOINTS } from "@framework/utils/api-endpoints";
4 | import { useQuery } from "react-query";
5 |
6 | export const fetchProduct = async (_slug: string) => {
7 | const { data } = await http.get(`${API_ENDPOINTS.PRODUCT}`);
8 | return data;
9 | };
10 | export const useProductQuery = (slug: string) => {
11 | return useQuery([API_ENDPOINTS.PRODUCT, slug], () =>
12 | fetchProduct(slug)
13 | );
14 | };
15 |
--------------------------------------------------------------------------------
/src/framework/basic-rest/product/get-related-product.tsx:
--------------------------------------------------------------------------------
1 | import { QueryOptionsType, Product } from "@framework/types";
2 | import http from "@framework/utils/http";
3 | import { API_ENDPOINTS } from "@framework/utils/api-endpoints";
4 | import { useQuery } from "react-query";
5 |
6 | export const fetchRelatedProducts = async ({ queryKey }: any) => {
7 | const [_key, _params] = queryKey;
8 | const { data } = await http.get(API_ENDPOINTS.RELATED_PRODUCTS);
9 | return data;
10 | };
11 | export const useRelatedProductsQuery = (options: QueryOptionsType) => {
12 | return useQuery(
13 | [API_ENDPOINTS.RELATED_PRODUCTS, options],
14 | fetchRelatedProducts
15 | );
16 | };
17 |
--------------------------------------------------------------------------------
/src/framework/basic-rest/product/use-search.tsx:
--------------------------------------------------------------------------------
1 | import { QueryOptionsType, Product } from "@framework/types";
2 | import http from "@framework/utils/http";
3 | import { API_ENDPOINTS } from "@framework/utils/api-endpoints";
4 | import { useQuery } from "react-query";
5 |
6 | export const fetchSearchedProducts = async ({ queryKey }: any) => {
7 | const [_key, _params] = queryKey;
8 | const { data } = await http.get(API_ENDPOINTS.SEARCH);
9 | return data;
10 | };
11 | export const useSearchQuery = (options: QueryOptionsType) => {
12 | return useQuery(
13 | [API_ENDPOINTS.SEARCH, options],
14 | fetchSearchedProducts
15 | );
16 | };
17 |
--------------------------------------------------------------------------------
/src/framework/basic-rest/utils/api-endpoints.ts:
--------------------------------------------------------------------------------
1 | export const API_ENDPOINTS = {
2 | LOGIN: "/login",
3 | REGISTER: "/register",
4 | LOGOUT: "/logout",
5 | FORGET_PASSWORD: "/forget-password",
6 | CATEGORIES: "/categories.json",
7 | FEATURED_CATEGORIES: "/featured_categories.json",
8 | BRANDS: "/brands.json",
9 | PRODUCTS: "/products.json",
10 | FEATURED_PRODUCTS: "/featured_products.json",
11 | TOP_SELLER_PRODUCTS: "/products_top_seller.json",
12 | ON_SELLING_PRODUCTS: "/products_on_selling.json",
13 | PRODUCT: "/product.json",
14 | RELATED_PRODUCTS: "/related_products.json",
15 | BEST_SELLER_PRODUCTS: "/products_best_seller.json",
16 | NEW_ARRIVAL_PRODUCTS: "/products_new_arrival.json",
17 | FLASH_SALE_PRODUCTS: "/products_flash_sale.json",
18 | SEARCH: "/search.json",
19 | ORDERS: "/orders.json",
20 | ORDER: "/order.json",
21 | };
22 |
--------------------------------------------------------------------------------
/src/framework/basic-rest/utils/get-token.ts:
--------------------------------------------------------------------------------
1 | import Cookies from "js-cookie";
2 |
3 | export const getToken = () => {
4 | if (typeof window === undefined) {
5 | return null;
6 | }
7 | return Cookies.get("auth_token");
8 | };
9 |
--------------------------------------------------------------------------------
/src/framework/basic-rest/utils/get-variations.ts:
--------------------------------------------------------------------------------
1 | import groupBy from "lodash/groupBy";
2 |
3 | export function getVariations(variations: object | undefined) {
4 | if (!variations) return {};
5 | return groupBy(variations, "attribute.slug");
6 | }
7 |
--------------------------------------------------------------------------------
/src/framework/basic-rest/utils/http.ts:
--------------------------------------------------------------------------------
1 | import axios from "axios";
2 | import { getToken } from "./get-token";
3 |
4 | const http = axios.create({
5 | baseURL: process.env.NEXT_PUBLIC_REST_API_ENDPOINT,
6 | timeout: 30000,
7 | headers: {
8 | Accept: "application/json",
9 | "Content-Type": "application/json",
10 | },
11 | });
12 |
13 | // Change request data/error here
14 | http.interceptors.request.use(
15 | (config) => {
16 | const token = getToken();
17 | config.headers = {
18 | ...config.headers,
19 | Authorization: `Bearer ${token ? token : ""}`,
20 | };
21 | return config;
22 | },
23 | (error) => {
24 | return Promise.reject(error);
25 | }
26 | );
27 |
28 | export default http;
29 |
--------------------------------------------------------------------------------
/src/pages/404.tsx:
--------------------------------------------------------------------------------
1 | import Layout from "@components/layout/layout";
2 | import { serverSideTranslations } from "next-i18next/serverSideTranslations";
3 | import ErrorInformation from "@components/404/error-information";
4 |
5 | export default function ErrorPage() {
6 | return ;
7 | }
8 |
9 | ErrorPage.Layout = Layout;
10 |
11 | export const getStaticProps = async ({ locale }: any) => {
12 | return {
13 | props: {
14 | ...(await serverSideTranslations(locale, [
15 | "common",
16 | "forms",
17 | "menu",
18 | "footer",
19 | ])),
20 | },
21 | };
22 | };
23 |
--------------------------------------------------------------------------------
/src/pages/_document.tsx:
--------------------------------------------------------------------------------
1 | import Document, {
2 | Html,
3 | Head,
4 | Main,
5 | NextScript,
6 | DocumentContext,
7 | } from "next/document";
8 | import { i18n } from "next-i18next";
9 | import { getDirection } from "@utils/get-direction";
10 |
11 | export default class CustomDocument extends Document {
12 | static async getInitialProps(ctx: DocumentContext) {
13 | return await Document.getInitialProps(ctx);
14 | }
15 | render() {
16 | const { locale } = this.props.__NEXT_DATA__;
17 | if (process.env.NODE_ENV !== "production") {
18 | i18n!.reloadResources(locale);
19 | }
20 | return (
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 | );
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/pages/faq.tsx:
--------------------------------------------------------------------------------
1 | import Container from "@components/ui/container";
2 | import Layout from "@components/layout/layout";
3 | import Subscription from "@components/common/subscription";
4 | import Accordion from "@components/common/accordion";
5 | import PageHeader from "@components/ui/page-header";
6 | import { faq } from "@settings/faq.settings";
7 | import { serverSideTranslations } from "next-i18next/serverSideTranslations";
8 |
9 | export default function FAQ() {
10 | return (
11 | <>
12 |
13 |
14 |
17 |
18 |
19 | >
20 | );
21 | }
22 |
23 | FAQ.Layout = Layout;
24 |
25 | export const getStaticProps = async ({ locale }: any) => {
26 | return {
27 | props: {
28 | ...(await serverSideTranslations(locale, [
29 | "common",
30 | "forms",
31 | "menu",
32 | "faq",
33 | "footer",
34 | ])),
35 | },
36 | };
37 | };
38 |
--------------------------------------------------------------------------------
/src/pages/forget-password.tsx:
--------------------------------------------------------------------------------
1 | import Container from "@components/ui/container";
2 | import Layout from "@components/layout/layout";
3 | import ForgetPasswordForm from "@components/auth/forget-password-form";
4 | import PageHeader from "@components/ui/page-header";
5 | import Subscription from "@components/common/subscription";
6 | import { serverSideTranslations } from "next-i18next/serverSideTranslations";
7 |
8 | export default function ForgetPasswordPage() {
9 | return (
10 | <>
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 | >
19 | );
20 | }
21 |
22 | ForgetPasswordPage.Layout = Layout;
23 |
24 | export const getStaticProps = async ({ locale }: any) => {
25 | return {
26 | props: {
27 | ...(await serverSideTranslations(locale, [
28 | "common",
29 | "forms",
30 | "menu",
31 | "footer",
32 | ])),
33 | },
34 | };
35 | };
36 |
--------------------------------------------------------------------------------
/src/pages/my-account/account-details.tsx:
--------------------------------------------------------------------------------
1 | import Layout from "@components/layout/layout";
2 | import AccountLayout from "@components/my-account/account-layout";
3 | import AccountDetails from "@components/my-account/account-details";
4 | import { serverSideTranslations } from "next-i18next/serverSideTranslations";
5 |
6 | export default function AccountDetailsPage() {
7 | return (
8 |
9 |
10 |
11 | );
12 | }
13 |
14 | AccountDetailsPage.Layout = Layout;
15 |
16 | export const getStaticProps = async ({ locale }: any) => {
17 | return {
18 | props: {
19 | ...(await serverSideTranslations(locale, [
20 | "common",
21 | "forms",
22 | "menu",
23 | "footer",
24 | ])),
25 | },
26 | };
27 | };
28 |
--------------------------------------------------------------------------------
/src/pages/my-account/change-password.tsx:
--------------------------------------------------------------------------------
1 | import Layout from "@components/layout/layout";
2 | import AccountLayout from "@components/my-account/account-layout";
3 | import ChangePassword from "@components/my-account/change-password";
4 | import { serverSideTranslations } from "next-i18next/serverSideTranslations";
5 |
6 | export default function ChangePasswordPage() {
7 | return (
8 |
9 |
10 |
11 | );
12 | }
13 |
14 | ChangePasswordPage.Layout = Layout;
15 |
16 | export const getStaticProps = async ({ locale }: any) => {
17 | return {
18 | props: {
19 | ...(await serverSideTranslations(locale, [
20 | "common",
21 | "forms",
22 | "menu",
23 | "footer",
24 | ])),
25 | },
26 | };
27 | };
28 |
--------------------------------------------------------------------------------
/src/pages/my-account/orders/[id].tsx:
--------------------------------------------------------------------------------
1 | import Layout from "@components/layout/layout";
2 | import AccountLayout from "@components/my-account/account-layout";
3 | import OrderDetails from "@components/order/order-details";
4 |
5 | export default function OrderPage() {
6 | return (
7 |
8 |
9 |
10 | );
11 | }
12 |
13 | OrderPage.Layout = Layout;
14 |
--------------------------------------------------------------------------------
/src/pages/my-account/orders/index.tsx:
--------------------------------------------------------------------------------
1 | import Layout from "@components/layout/layout";
2 | import AccountLayout from "@components/my-account/account-layout";
3 | import OrdersTable from "@components/my-account/orders-table";
4 | import { serverSideTranslations } from "next-i18next/serverSideTranslations";
5 |
6 | export default function OrdersTablePage() {
7 | return (
8 |
9 |
10 |
11 | );
12 | }
13 |
14 | OrdersTablePage.Layout = Layout;
15 |
16 | export const getStaticProps = async ({ locale }: any) => {
17 | return {
18 | props: {
19 | ...(await serverSideTranslations(locale, [
20 | "common",
21 | "forms",
22 | "menu",
23 | "footer",
24 | ])),
25 | },
26 | };
27 | };
28 |
--------------------------------------------------------------------------------
/src/pages/order.tsx:
--------------------------------------------------------------------------------
1 | import Container from "@components/ui/container";
2 | import Layout from "@components/layout/layout";
3 | import Subscription from "@components/common/subscription";
4 | import PageHeader from "@components/ui/page-header";
5 | import OrderInformation from "@components/order/order-information";
6 | import { serverSideTranslations } from "next-i18next/serverSideTranslations";
7 |
8 | export default function Order() {
9 | return (
10 | <>
11 |
12 |
13 |
14 |
15 |
16 | >
17 | );
18 | }
19 |
20 | Order.Layout = Layout;
21 |
22 | export const getStaticProps = async ({ locale }: any) => {
23 | return {
24 | props: {
25 | ...(await serverSideTranslations(locale, [
26 | "common",
27 | "forms",
28 | "menu",
29 | "footer",
30 | ])),
31 | },
32 | };
33 | };
34 |
--------------------------------------------------------------------------------
/src/pages/products/[slug].tsx:
--------------------------------------------------------------------------------
1 | import Container from "@components/ui/container";
2 | import Layout from "@components/layout/layout";
3 | import Subscription from "@components/common/subscription";
4 | import ProductSingleDetails from "@components/product/product-single-details";
5 | import RelatedProducts from "@containers/related-products";
6 | import Divider from "@components/ui/divider";
7 | import Breadcrumb from "@components/common/breadcrumb";
8 | import { serverSideTranslations } from "next-i18next/serverSideTranslations";
9 |
10 | export default function ProductPage() {
11 | return (
12 | <>
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | >
23 | );
24 | }
25 |
26 | ProductPage.Layout = Layout;
27 |
28 | export const getServerSideProps = async ({ locale }: any) => {
29 | return {
30 | props: {
31 | ...(await serverSideTranslations(locale, [
32 | "common",
33 | "forms",
34 | "menu",
35 | "footer",
36 | ])),
37 | },
38 | };
39 | };
40 |
--------------------------------------------------------------------------------
/src/pages/signin.tsx:
--------------------------------------------------------------------------------
1 | import Container from "@components/ui/container";
2 | import Layout from "@components/layout/layout";
3 | import Subscription from "@components/common/subscription";
4 | import LoginForm from "@components/auth/login-form";
5 | import PageHeader from "@components/ui/page-header";
6 | import { serverSideTranslations } from "next-i18next/serverSideTranslations";
7 |
8 | export default function SignInPage() {
9 | return (
10 | <>
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 | >
19 | );
20 | }
21 |
22 | SignInPage.Layout = Layout;
23 |
24 | export const getStaticProps = async ({ locale }: any) => {
25 | return {
26 | props: {
27 | ...(await serverSideTranslations(locale, [
28 | "common",
29 | "forms",
30 | "menu",
31 | "footer",
32 | ])),
33 | },
34 | };
35 | };
36 |
--------------------------------------------------------------------------------
/src/pages/signup.tsx:
--------------------------------------------------------------------------------
1 | import Container from "@components/ui/container";
2 | import Layout from "@components/layout/layout";
3 | import SignUpForm from "@components/auth/sign-up-form";
4 | import PageHeader from "@components/ui/page-header";
5 | import Subscription from "@components/common/subscription";
6 | import { serverSideTranslations } from "next-i18next/serverSideTranslations";
7 |
8 | export default function SignUpPage() {
9 | return (
10 | <>
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 | >
19 | );
20 | }
21 |
22 | SignUpPage.Layout = Layout;
23 |
24 | export const getStaticProps = async ({ locale }: any) => {
25 | return {
26 | props: {
27 | ...(await serverSideTranslations(locale, [
28 | "common",
29 | "forms",
30 | "menu",
31 | "footer",
32 | ])),
33 | },
34 | };
35 | };
36 |
--------------------------------------------------------------------------------
/src/settings/faq.settings.ts:
--------------------------------------------------------------------------------
1 | export const faq = [
2 | {
3 | titleKey: "faq-one-title",
4 | contentKey: "faq-one-content",
5 | },
6 | {
7 | titleKey: "faq-two-title",
8 | contentKey: "faq-two-content",
9 | },
10 | {
11 | titleKey: "faq-three-title",
12 | contentKey: "faq-three-content",
13 | },
14 | {
15 | titleKey: "faq-four-title",
16 | contentKey: "faq-four-content",
17 | },
18 | ];
--------------------------------------------------------------------------------
/src/settings/privacy-settings.ts:
--------------------------------------------------------------------------------
1 | export const privacyPolicy = [
2 | {
3 | id: "1",
4 | title: "privacy-one-title",
5 | description:"privacy-one-content",
6 | },
7 | {
8 | id: "2",
9 | title: "privacy-two-title",
10 | description: "privacy-two-content",
11 | },
12 | {
13 | id: "3",
14 | title: "privacy-three-title",
15 | description:"privacy-three-content",
16 | },
17 | {
18 | id: "4",
19 | title: "privacy-four-title",
20 | description:"privacy-four-content",
21 | },
22 | {
23 | id: "5",
24 | title: "privacy-five-title",
25 | description:"privacy-five-content",
26 | },
27 | {
28 | id: "6",
29 | title: "privacy-six-title",
30 | description:"privacy-six-content",
31 | },
32 | ];
33 |
--------------------------------------------------------------------------------
/src/settings/terms-settings.ts:
--------------------------------------------------------------------------------
1 | export const termsAndServices = [
2 | {
3 | id: "1",
4 | title: "terms-one-title",
5 | description:"terms-one-content",
6 | },
7 | {
8 | id: "2",
9 | title: "terms-two-title",
10 | description: "terms-two-content",
11 | },
12 | {
13 | id: "3",
14 | title: "terms-three-title",
15 | description:"terms-three-content",
16 | },
17 | {
18 | id: "4",
19 | title: "terms-four-title",
20 | description:"terms-four-content",
21 | },
22 | {
23 | id: "5",
24 | title: "terms-five-title",
25 | description:"terms-five-content",
26 | },
27 | {
28 | id: "6",
29 | title: "terms-six-title",
30 | description:"terms-six-content",
31 | },
32 | ];
33 |
--------------------------------------------------------------------------------
/src/utils/add-active-scroll.ts:
--------------------------------------------------------------------------------
1 | import {useEffect, RefObject} from 'react'
2 |
3 | export function addActiveScroll(ref: RefObject, topOffset: number = 80) {
4 | useEffect(() => {
5 | const element = ref?.current;
6 | const listener = () => {
7 | if (window.scrollY > topOffset) {
8 | element?.classList.add('is-scrolling');
9 | } else {
10 | element?.classList.remove('is-scrolling');
11 | }
12 | };
13 | document.addEventListener('scroll', listener);
14 | return () => {
15 | document.removeEventListener('scroll', listener);
16 | };
17 | }, []);
18 | }
--------------------------------------------------------------------------------
/src/utils/constants.ts:
--------------------------------------------------------------------------------
1 | export const CUSTOMER = "customer";
2 |
--------------------------------------------------------------------------------
/src/utils/generate-cart-item-name.ts:
--------------------------------------------------------------------------------
1 | import isEmpty from "lodash/isEmpty";
2 | import orderBy from "lodash/orderBy";
3 |
4 | export function generateCartItemName(name: string, attributes: object) {
5 | if (!isEmpty(attributes)) {
6 | const sortedAttributes = orderBy(attributes);
7 | return `${name} - ${sortedAttributes.join(", ")}`;
8 | }
9 | return name;
10 | }
11 |
--------------------------------------------------------------------------------
/src/utils/generate-cart-item.ts:
--------------------------------------------------------------------------------
1 | import isEmpty from "lodash/isEmpty";
2 |
3 | interface Item {
4 | id: string | number;
5 | name: string;
6 | slug: string;
7 | image: {
8 | thumbnail: string;
9 | [key: string]: unknown;
10 | };
11 | price: number;
12 | sale_price?: number;
13 | [key: string]: unknown;
14 | }
15 | export function generateCartItem(item: Item, attributes: object) {
16 | const { id, name, slug, image, price, sale_price } = item;
17 | return {
18 | id: !isEmpty(attributes)
19 | ? `${id}.${Object.values(attributes).join(".")}`
20 | : id,
21 | name,
22 | slug,
23 | image: image.thumbnail,
24 | price: sale_price ? sale_price : price,
25 | attributes,
26 | };
27 | }
28 |
--------------------------------------------------------------------------------
/src/utils/get-direction.ts:
--------------------------------------------------------------------------------
1 | export function getDirection(locale: string | undefined) {
2 | if (!locale) return "ltr";
3 | const rtlLanguages = ["ar", "he"];
4 | return rtlLanguages.includes(locale) ? "rtl" : "ltr";
5 | }
6 |
--------------------------------------------------------------------------------
/src/utils/motion/fade-in-left.ts:
--------------------------------------------------------------------------------
1 | export function fadeInLeft (duration:number = 0.3) {
2 | return {
3 | from: {
4 | left: '-100%',
5 | transition: {
6 | type: 'easeInOut',
7 | duration: duration,
8 | }
9 | },
10 | to: {
11 | left: 0,
12 | transition: {
13 | type: 'easeInOut',
14 | duration: duration,
15 | }
16 | },
17 | }
18 | }
--------------------------------------------------------------------------------
/src/utils/motion/fade-in-out.ts:
--------------------------------------------------------------------------------
1 | export function fadeInOut (duration:number = 0.2) {
2 | return {
3 | from: {
4 | opacity: 0,
5 | transition: {
6 | type: 'easeInOut',
7 | duration: duration,
8 | }
9 | },
10 | to: {
11 | opacity: 1,
12 | transition: {
13 | type: 'easeInOut',
14 | duration: duration,
15 | }
16 | },
17 | }
18 | }
--------------------------------------------------------------------------------
/src/utils/motion/fade-in-right.ts:
--------------------------------------------------------------------------------
1 | export function fadeInRight (duration:number = 0.3) {
2 | return {
3 | from: {
4 | right: '-100%',
5 | transition: {
6 | type: 'easeInOut',
7 | duration: duration,
8 | }
9 | },
10 | to: {
11 | right: 0,
12 | transition: {
13 | type: 'easeInOut',
14 | duration: duration,
15 | }
16 | },
17 | }
18 | }
--------------------------------------------------------------------------------
/src/utils/motion/fade-in-top.ts:
--------------------------------------------------------------------------------
1 | export function fadeInTop (duration:number = 0.5) {
2 | return {
3 | from: {
4 | position: 'relative',
5 | top: "50px",
6 | opacity: 0,
7 | transition: {
8 | type: 'easeInOut',
9 | duration: duration,
10 | }
11 | },
12 | to: {
13 | position: 'relative',
14 | top: "0",
15 | opacity: 1,
16 | transition: {
17 | type: 'easeInOut',
18 | duration: duration,
19 | }
20 | },
21 | }
22 | }
--------------------------------------------------------------------------------
/src/utils/motion/height-collapse.ts:
--------------------------------------------------------------------------------
1 | export function heightCollapse() {
2 | return {
3 | from: {
4 | opacity: 0,
5 | height: 0,
6 | transition: {
7 | ease: [0.04, 0.62, 0.23, 0.98],
8 | },
9 | },
10 | to: {
11 | opacity: 1,
12 | height: "auto",
13 | transition: {
14 | ease: [0.04, 0.62, 0.23, 0.98],
15 | },
16 | },
17 | };
18 | }
19 |
--------------------------------------------------------------------------------
/src/utils/motion/zoom-out-in.ts:
--------------------------------------------------------------------------------
1 | export function zoomOutIn (duration:number = 0.2) {
2 | return {
3 | from: {
4 | scale: 1.1,
5 | transition: {
6 | type: 'easeOut',
7 | duration: duration,
8 | }
9 | },
10 | to: {
11 | scale: 1,
12 | transition: {
13 | type: 'easeOut',
14 | duration: duration,
15 | }
16 | },
17 | }
18 | }
--------------------------------------------------------------------------------
/src/utils/routes.ts:
--------------------------------------------------------------------------------
1 | export const ROUTES = {
2 | HOME: "/",
3 | PRODUCT: `/products`,
4 | CHECKOUT: "/checkout",
5 | CONTACT: "/contact-us",
6 | TERMS: "/terms",
7 | POLICY: "/privacy",
8 | FAQ: "/faq",
9 | FORGET_PASSWORD: "/forget-password",
10 | ACCOUNT: "/my-account",
11 | ORDERS: "/my-account/orders",
12 | ACCOUNT_DETAILS: "/my-account/account-details",
13 | CHANGE_PASSWORD: "/my-account/change-password",
14 | SHOP: "/shop",
15 | LOGIN: "/signin",
16 | SIGN_UP: "/signup",
17 | SEARCH: "/search",
18 | ORDER: "/order",
19 | };
20 |
--------------------------------------------------------------------------------
/src/utils/use-breadcrumb.ts:
--------------------------------------------------------------------------------
1 | import { useState, useEffect } from "react";
2 | import { useRouter } from "next/router";
3 |
4 | export function convertBreadcrumbTitle(string: string) {
5 | return string
6 | .replace(/-/g, " ")
7 | .replace(/oe/g, "ö")
8 | .replace(/ae/g, "ä")
9 | .replace(/ue/g, "ü")
10 | .toLowerCase();
11 | }
12 |
13 | export default function useBreadcrumb() {
14 | const router = useRouter();
15 | const [breadcrumbs, setBreadcrumbs] = useState(null);
16 |
17 | useEffect(() => {
18 | if (router) {
19 | const linkPath = router.asPath.split("/");
20 | linkPath.shift();
21 |
22 | const pathArray = linkPath.map((path, i) => {
23 | return {
24 | breadcrumb: path,
25 | href: "/" + linkPath.slice(0, i + 1).join("/"),
26 | };
27 | });
28 |
29 | setBreadcrumbs(pathArray);
30 | }
31 | }, [router]);
32 |
33 | return breadcrumbs;
34 | }
35 |
--------------------------------------------------------------------------------
/src/utils/use-click-outside.ts:
--------------------------------------------------------------------------------
1 | import { useEffect, RefObject } from 'react'
2 |
3 | type Event = MouseEvent | TouchEvent
4 |
5 | export default function useOnClickOutside(
6 | ref: RefObject,
7 | handler: (event: Event) => void,
8 | ) {
9 | useEffect(
10 | () => {
11 | const listener = (event: Event) => {
12 | const el = ref?.current
13 | if (!el || el.contains((event?.target as Node) || null)) {
14 | return
15 | }
16 | handler(event);
17 | };
18 | document.addEventListener('mousedown', listener);
19 | document.addEventListener('touchstart', listener);
20 | return () => {
21 | document.removeEventListener('mousedown', listener);
22 | document.removeEventListener('touchstart', listener);
23 | };
24 | },
25 | [ref, handler]
26 | );
27 | }
--------------------------------------------------------------------------------
/src/utils/use-local-storage.ts:
--------------------------------------------------------------------------------
1 | export { default as useLocalStorage } from "react-use/lib/useLocalStorage";
2 |
--------------------------------------------------------------------------------
/src/utils/use-window-size.ts:
--------------------------------------------------------------------------------
1 | export { default as useWindowSize } from "react-use/lib/useWindowSize";
2 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "baseUrl": ".",
4 | "target": "es5",
5 | "lib": ["dom", "dom.iterable", "esnext"],
6 | "allowJs": true,
7 | "skipLibCheck": true,
8 | "strict": true,
9 | "forceConsistentCasingInFileNames": true,
10 | "noEmit": true,
11 | "esModuleInterop": true,
12 | "alwaysStrict": true,
13 | "noFallthroughCasesInSwitch": true,
14 | "noUnusedLocals": true,
15 | "noUnusedParameters": true,
16 | "module": "esnext",
17 | "moduleResolution": "node",
18 | "resolveJsonModule": true,
19 | "isolatedModules": true,
20 | "jsx": "preserve",
21 | "paths": {
22 | "@components/*": ["src/components/*"],
23 | "@containers/*": ["src/containers/*"],
24 | "@contexts/*": ["src/contexts/*"],
25 | "@framework/*": ["src/framework/basic-rest/*"],
26 | "@settings/*": ["src/settings/*"],
27 | "@styles/*": ["src/styles/*"],
28 | "@utils/*": ["src/utils/*"]
29 | }
30 | },
31 | "include": ["next-env.d.ts", "src/**/*.ts", "src/**/*.tsx"],
32 | "exclude": ["node_modules"]
33 | }
34 |
--------------------------------------------------------------------------------
/vercel.json:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "NEXT_PUBLIC_REST_API_ENDPOINT": "Put your api endpoint here"
4 | },
5 | "build": {
6 | "env": {
7 | "NEXT_PUBLIC_REST_API_ENDPOINT": "Put your api endpoint here"
8 | }
9 | }
10 | }
11 |
--------------------------------------------------------------------------------