diff --git a/.github/workflows/alpha.yml b/.github/workflows/alpha.yml
index 59ef8a34b..2663ca678 100644
--- a/.github/workflows/alpha.yml
+++ b/.github/workflows/alpha.yml
@@ -70,6 +70,39 @@ jobs:
tags: retrospected/backend:alpha
platforms: linux/amd64
push: true
+
+ marketing:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - name: Read VERSION
+ id: package
+ uses: martinbeentjes/npm-get-version-action@master
+ - name: Echo VERSION
+ run: echo ${{ steps.package.outputs.current-version }}
+ - name: Setup QEMU
+ uses: docker/setup-qemu-action@v2
+ with:
+ platforms: all
+ - name: Setup BuildX
+ uses: docker/setup-buildx-action@v2
+ id: buildx
+ with:
+ install: true
+ - name: Login to DockerHub
+ uses: docker/login-action@v2
+ with:
+ username: ${{ secrets.DOCKER_NEW_USERNAME }}
+ password: ${{ secrets.DOCKER_NEW_PASSWORD }}
+ - name: Build and push Marketing
+ uses: docker/build-push-action@v4
+ with:
+ builder: ${{ steps.buildx.outputs.name }}
+ file: marketing/Dockerfile
+ context: marketing
+ tags: retrospected/marketing:alpha
+ platforms: linux/amd64
+ push: true
integration:
runs-on: ubuntu-latest
@@ -88,7 +121,7 @@ jobs:
trivy:
runs-on: ubuntu-latest
- needs: [frontend, backend]
+ needs: [frontend, backend, marketing]
steps:
- name: Trivy - Frontend
uses: aquasecurity/trivy-action@master
@@ -108,4 +141,13 @@ jobs:
ignore-unfixed: true
vuln-type: 'os,library'
severity: 'CRITICAL'
+ - name: Trivy - Marketing
+ uses: aquasecurity/trivy-action@master
+ with:
+ image-ref: retrospected/marketing:alpha
+ format: 'table'
+ exit-code: '1'
+ ignore-unfixed: true
+ vuln-type: 'os,library'
+ severity: 'CRITICAL'
\ No newline at end of file
diff --git a/.github/workflows/canary.yml b/.github/workflows/canary.yml
index ab9ccde8e..6d22a3af0 100644
--- a/.github/workflows/canary.yml
+++ b/.github/workflows/canary.yml
@@ -104,6 +104,39 @@ jobs:
platforms: linux/amd64,linux/arm64,linux/arm/v7
push: true
+ marketing:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - name: Read VERSION
+ id: package
+ uses: martinbeentjes/npm-get-version-action@master
+ - name: Echo VERSION
+ run: echo ${{ steps.package.outputs.current-version }}
+ - name: Setup QEMU
+ uses: docker/setup-qemu-action@v2
+ with:
+ platforms: all
+ - name: Setup BuildX
+ uses: docker/setup-buildx-action@v2
+ id: buildx
+ with:
+ install: true
+ - name: Login to DockerHub
+ uses: docker/login-action@v2
+ with:
+ username: ${{ secrets.DOCKER_NEW_USERNAME }}
+ password: ${{ secrets.DOCKER_NEW_PASSWORD }}
+ - name: Build and push Marketing
+ uses: docker/build-push-action@v4
+ with:
+ builder: ${{ steps.buildx.outputs.name }}
+ file: marketing/Dockerfile
+ context: marketing
+ tags: retrospected/marketing:canary
+ platforms: linux/amd64,linux/arm64,linux/arm/v7
+ push: true
+
maintenance:
runs-on: ubuntu-latest
steps:
@@ -154,7 +187,7 @@ jobs:
trivy:
runs-on: ubuntu-latest
- needs: [frontend, backend]
+ needs: [frontend, backend, marketing]
steps:
- name: Trivy - Frontend
uses: aquasecurity/trivy-action@master
@@ -174,4 +207,13 @@ jobs:
ignore-unfixed: true
vuln-type: 'os,library'
severity: 'CRITICAL'
+ - name: Trivy - Marketing
+ uses: aquasecurity/trivy-action@master
+ with:
+ image-ref: retrospected/marketing:canary
+ format: 'table'
+ exit-code: '1'
+ ignore-unfixed: true
+ vuln-type: 'os,library'
+ severity: 'CRITICAL'
\ No newline at end of file
diff --git a/.github/workflows/marketing.yml b/.github/workflows/marketing.yml
new file mode 100644
index 000000000..9cebf33f6
--- /dev/null
+++ b/.github/workflows/marketing.yml
@@ -0,0 +1,39 @@
+name: 'Marketing Build'
+
+on:
+ push:
+ branches: [v5000/marketing-final]
+
+jobs:
+ marketing:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - name: Read VERSION
+ id: package
+ uses: martinbeentjes/npm-get-version-action@master
+ - name: Echo VERSION
+ run: echo ${{ steps.package.outputs.current-version }}
+ - name: Setup QEMU
+ uses: docker/setup-qemu-action@v2
+ with:
+ platforms: all
+ - name: Setup BuildX
+ uses: docker/setup-buildx-action@v2
+ id: buildx
+ with:
+ install: true
+ - name: Login to DockerHub
+ uses: docker/login-action@v2
+ with:
+ username: ${{ secrets.DOCKER_NEW_USERNAME }}
+ password: ${{ secrets.DOCKER_NEW_PASSWORD }}
+ - name: Build and push Marketing
+ uses: docker/build-push-action@v4
+ with:
+ builder: ${{ steps.buildx.outputs.name }}
+ file: marketing/Dockerfile
+ context: marketing
+ tags: retrospected/marketing:alpha
+ platforms: linux/amd64
+ push: true
diff --git a/.github/workflows/master.yml b/.github/workflows/master.yml
index d2c0e47f1..97f0d7b65 100644
--- a/.github/workflows/master.yml
+++ b/.github/workflows/master.yml
@@ -104,6 +104,39 @@ jobs:
platforms: linux/amd64,linux/arm64,linux/arm/v7
push: true
+ marketing:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - name: Read VERSION
+ id: package
+ uses: martinbeentjes/npm-get-version-action@master
+ - name: Echo VERSION
+ run: echo ${{ steps.package.outputs.current-version }}
+ - name: Setup QEMU
+ uses: docker/setup-qemu-action@v2
+ with:
+ platforms: all
+ - name: Setup BuildX
+ uses: docker/setup-buildx-action@v2
+ id: buildx
+ with:
+ install: true
+ - name: Login to DockerHub
+ uses: docker/login-action@v2
+ with:
+ username: ${{ secrets.DOCKER_NEW_USERNAME }}
+ password: ${{ secrets.DOCKER_NEW_PASSWORD }}
+ - name: Build and push Marketing
+ uses: docker/build-push-action@v4
+ with:
+ builder: ${{ steps.buildx.outputs.name }}
+ file: marketing/Dockerfile
+ context: marketing
+ tags: retrospected/marketing:${{ steps.package.outputs.current-version }}
+ platforms: linux/amd64,linux/arm64,linux/arm/v7
+ push: true
+
maintenance:
runs-on: ubuntu-latest
steps:
diff --git a/.gitignore b/.gitignore
index 0983c7d26..e8c20b46f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -35,7 +35,7 @@ node_modules
build
persist
configuration.json
-assets
+# assets
stats
.vscode
.DS_Store
diff --git a/Makefile b/Makefile
index 50ba5d1c7..e36ff3532 100644
--- a/Makefile
+++ b/Makefile
@@ -23,6 +23,10 @@ local:
docker build -f ./backend/Dockerfile -t retrospected/backend:local ./backend
docker build -f ./frontend/Dockerfile -t retrospected/frontend:local ./frontend
+marketing-build:
+ docker build -f ./marketing/Dockerfile -t retrospected/marketing:local ./marketing
+ docker run -it --rm -p 3333:80 retrospected/marketing:local
+
install-trivy:
brew install trivy
diff --git a/marketing/.dockerignore b/marketing/.dockerignore
new file mode 100644
index 000000000..67fba9ca1
--- /dev/null
+++ b/marketing/.dockerignore
@@ -0,0 +1,7 @@
+.env
+.env.example
+.env.local
+.next
+.node_modules
+Makefile
+yarn-error.log
\ No newline at end of file
diff --git a/marketing/.env.example b/marketing/.env.example
new file mode 100644
index 000000000..491f8a132
--- /dev/null
+++ b/marketing/.env.example
@@ -0,0 +1,3 @@
+# Copy to .env.local
+NEXT_PUBLIC_APP_URL=http://localhost:3000
+NEXT_PUBLIC_MEASUREMENT_ID=G-XXXXXXXXXX
\ No newline at end of file
diff --git a/marketing/.eslintrc.json b/marketing/.eslintrc.json
new file mode 100644
index 000000000..bffb357a7
--- /dev/null
+++ b/marketing/.eslintrc.json
@@ -0,0 +1,3 @@
+{
+ "extends": "next/core-web-vitals"
+}
diff --git a/marketing/.gitignore b/marketing/.gitignore
new file mode 100644
index 000000000..c87c9b392
--- /dev/null
+++ b/marketing/.gitignore
@@ -0,0 +1,36 @@
+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
+
+# dependencies
+/node_modules
+/.pnp
+.pnp.js
+
+# testing
+/coverage
+
+# next.js
+/.next/
+/out/
+
+# production
+/build
+
+# misc
+.DS_Store
+*.pem
+
+# debug
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+.pnpm-debug.log*
+
+# local env files
+.env*.local
+
+# vercel
+.vercel
+
+# typescript
+*.tsbuildinfo
+next-env.d.ts
diff --git a/marketing/Dockerfile b/marketing/Dockerfile
new file mode 100644
index 000000000..3199576a5
--- /dev/null
+++ b/marketing/Dockerfile
@@ -0,0 +1,66 @@
+FROM node:18-alpine AS base
+
+# Install dependencies only when needed
+FROM base AS deps
+# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed.
+RUN apk add --no-cache libc6-compat
+WORKDIR /app
+
+# Install dependencies based on the preferred package manager
+COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* ./
+RUN \
+ if [ -f yarn.lock ]; then yarn --frozen-lockfile; \
+ elif [ -f package-lock.json ]; then npm ci; \
+ elif [ -f pnpm-lock.yaml ]; then yarn global add pnpm && pnpm i --frozen-lockfile; \
+ else echo "Lockfile not found." && exit 1; \
+ fi
+
+
+# Rebuild the source code only when needed
+FROM base AS builder
+WORKDIR /app
+COPY --from=deps /app/node_modules ./node_modules
+COPY . .
+
+# Next.js collects completely anonymous telemetry data about general usage.
+# Learn more here: https://nextjs.org/telemetry
+# Uncomment the following line in case you want to disable telemetry during the build.
+# ENV NEXT_TELEMETRY_DISABLED 1
+
+ARG NEXT_PUBLIC_MEASUREMENT_ID=APP_NEXT_PUBLIC_MEASUREMENT_ID
+ARG NEXT_PUBLIC_APP_URL=APP_NEXT_PUBLIC_APP_URL
+RUN yarn build
+
+# If using npm comment out above and use below instead
+# RUN npm run build
+
+# Production image, copy all the files and run next
+FROM base AS runner
+WORKDIR /app
+
+ENV NODE_ENV production
+# Uncomment the following line in case you want to disable telemetry during runtime.
+# ENV NEXT_TELEMETRY_DISABLED 1
+
+RUN addgroup --system --gid 1001 nodejs
+RUN adduser --system --uid 1001 nextjs
+
+COPY --from=builder /app/public ./public
+COPY --from=builder /app/docker/entrypoint.sh ./entrypoint.sh
+
+RUN ["chmod", "+x", "/app/entrypoint.sh"]
+
+# Automatically leverage output traces to reduce image size
+# https://nextjs.org/docs/advanced-features/output-file-tracing
+COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
+COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
+
+USER nextjs
+
+EXPOSE 3000
+
+ENV PORT 3000
+
+ENTRYPOINT ["/app/entrypoint.sh"]
+
+CMD ["node", "server.js"]
\ No newline at end of file
diff --git a/marketing/Makefile b/marketing/Makefile
new file mode 100644
index 000000000..76b81ed22
--- /dev/null
+++ b/marketing/Makefile
@@ -0,0 +1,6 @@
+run:
+ docker build -f ./Dockerfile -t retrospected/marketing:local ./
+ docker run \
+ --env NEXT_PUBLIC_MEASUREMENT_ID=G-BLAH \
+ --env NEXT_PUBLIC_APP_URL=http://localhost:3000 \
+ -it --rm -p 3333:3000 retrospected/marketing:local
\ No newline at end of file
diff --git a/marketing/README.md b/marketing/README.md
new file mode 100644
index 000000000..965a1228c
--- /dev/null
+++ b/marketing/README.md
@@ -0,0 +1,38 @@
+This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).
+
+## Getting Started
+
+First, run the development server:
+
+```bash
+npm run dev
+# or
+yarn dev
+# or
+pnpm dev
+```
+
+Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
+
+You can start editing the page by modifying `pages/index.tsx`. The page auto-updates as you edit the file.
+
+[API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.ts`.
+
+The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages.
+
+This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font.
+
+## Learn More
+
+To learn more about Next.js, take a look at the following resources:
+
+- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
+- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
+
+You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!
+
+## Deploy on Vercel
+
+The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
+
+Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.
diff --git a/marketing/docker/entrypoint.sh b/marketing/docker/entrypoint.sh
new file mode 100644
index 000000000..6155b454a
--- /dev/null
+++ b/marketing/docker/entrypoint.sh
@@ -0,0 +1,26 @@
+#!/usr/bin/env sh
+
+# The first part wrapped in a function
+makeSedCommands() {
+ printenv | \
+ grep '^NEXT_PUBLIC' | \
+ sed -r "s/=/ /g" | \
+ xargs -n 2 sh -c 'echo "sed -i \"s#APP_$0#$1#g\""'
+}
+
+# Set the delimiter to newlines (needed for looping over the function output)
+IFS=$'\n'
+# For each sed command
+for c in $(makeSedCommands); do
+ echo "Executing $c"
+ # For each file in the .next directory
+ for f in $(find .next -type f); do
+ # Execute the command against the file
+ COMMAND="$c $f"
+ eval $COMMAND
+ done
+done
+
+echo "Starting Nextjs"
+# Run any arguments passed to this script
+exec "$@"
\ No newline at end of file
diff --git a/marketing/next-i18next.config.js b/marketing/next-i18next.config.js
new file mode 100644
index 000000000..bc82b01e8
--- /dev/null
+++ b/marketing/next-i18next.config.js
@@ -0,0 +1,6 @@
+module.exports = {
+ i18n: {
+ defaultLocale: 'en',
+ locales: ['en', 'fr'],
+ },
+}
\ No newline at end of file
diff --git a/marketing/next.config.js b/marketing/next.config.js
new file mode 100644
index 000000000..37d52f535
--- /dev/null
+++ b/marketing/next.config.js
@@ -0,0 +1,13 @@
+const { i18n } = require('./next-i18next.config')
+
+/** @type {import('next').NextConfig} */
+const nextConfig = {
+ reactStrictMode: true,
+ i18n,
+ output: 'standalone',
+ compiler: {
+ styledComponents: true,
+ }
+}
+
+module.exports = nextConfig
diff --git a/marketing/package.json b/marketing/package.json
new file mode 100644
index 000000000..b37477df8
--- /dev/null
+++ b/marketing/package.json
@@ -0,0 +1,54 @@
+{
+ "name": "marketing",
+ "version": "5.0.0",
+ "private": true,
+ "scripts": {
+ "dev": "next dev -p 3001",
+ "build": "next build",
+ "start": "next start",
+ "lint": "next lint"
+ },
+ "dependencies": {
+ "@next/font": "13.1.6",
+ "@redq/reuse-modal": "^2.0.0",
+ "@styled-system/theme-get": "^5.1.2",
+ "@types/node": "18.13.0",
+ "@types/react": "18.0.28",
+ "@types/react-anchor-link-smooth-scroll": "^1.0.2",
+ "@types/react-aria-menubutton": "^6.2.9",
+ "@types/react-dom": "18.0.11",
+ "@types/react-scrollspy": "^3.3.5",
+ "@types/react-slick": "^0.23.10",
+ "@types/react-stickynode": "^4.0.0",
+ "@types/styled-components": "^5.1.26",
+ "@types/styled-system": "^5.1.16",
+ "@types/styled-system__theme-get": "^5.0.2",
+ "animate.css": "^4.1.1",
+ "eslint": "8.34.0",
+ "eslint-config-next": "13.1.6",
+ "fs": "^0.0.1-security",
+ "i18next": "^22.4.9",
+ "next": "13.1.6",
+ "next-i18next": "^13.1.5",
+ "polished": "^4.2.2",
+ "rc-collapse": "^3.5.2",
+ "rc-drawer": "^6.1.3",
+ "react": "18.2.0",
+ "react-anchor-link-smooth-scroll": "^1.0.12",
+ "react-aria-menubutton": "^7.0.3",
+ "react-dom": "18.2.0",
+ "react-i18next": "^12.1.5",
+ "react-icons-kit": "^2.0.0",
+ "react-parallax": "^3.5.1",
+ "react-reveal": "^1.2.2",
+ "react-scroll-motion": "^0.3.2",
+ "react-scrollspy": "^3.4.3",
+ "react-slick": "^0.29.0",
+ "react-stickynode": "^4.1.0",
+ "react-tabs": "^6.0.0",
+ "sharp": "^0.31.3",
+ "styled-components": "^5.3.6",
+ "styled-system": "^5.1.5",
+ "typescript": "4.9.5"
+ }
+}
diff --git a/marketing/public/android-chrome-192x192.png b/marketing/public/android-chrome-192x192.png
new file mode 100644
index 000000000..7b80416d2
Binary files /dev/null and b/marketing/public/android-chrome-192x192.png differ
diff --git a/marketing/public/android-chrome-512x512.png b/marketing/public/android-chrome-512x512.png
new file mode 100644
index 000000000..63be5adb0
Binary files /dev/null and b/marketing/public/android-chrome-512x512.png differ
diff --git a/marketing/public/android-icon-144x144.png b/marketing/public/android-icon-144x144.png
new file mode 100644
index 000000000..b841d875a
Binary files /dev/null and b/marketing/public/android-icon-144x144.png differ
diff --git a/marketing/public/android-icon-192x192.png b/marketing/public/android-icon-192x192.png
new file mode 100644
index 000000000..9615254dd
Binary files /dev/null and b/marketing/public/android-icon-192x192.png differ
diff --git a/marketing/public/android-icon-36x36.png b/marketing/public/android-icon-36x36.png
new file mode 100644
index 000000000..41b0ba1ca
Binary files /dev/null and b/marketing/public/android-icon-36x36.png differ
diff --git a/marketing/public/android-icon-48x48.png b/marketing/public/android-icon-48x48.png
new file mode 100644
index 000000000..84171d8a7
Binary files /dev/null and b/marketing/public/android-icon-48x48.png differ
diff --git a/marketing/public/android-icon-72x72.png b/marketing/public/android-icon-72x72.png
new file mode 100644
index 000000000..393c16e03
Binary files /dev/null and b/marketing/public/android-icon-72x72.png differ
diff --git a/marketing/public/android-icon-96x96.png b/marketing/public/android-icon-96x96.png
new file mode 100644
index 000000000..0f463ffc2
Binary files /dev/null and b/marketing/public/android-icon-96x96.png differ
diff --git a/marketing/public/apple-icon-114x114.png b/marketing/public/apple-icon-114x114.png
new file mode 100644
index 000000000..1b72f4c08
Binary files /dev/null and b/marketing/public/apple-icon-114x114.png differ
diff --git a/marketing/public/apple-icon-120x120.png b/marketing/public/apple-icon-120x120.png
new file mode 100644
index 000000000..cb2a0c365
Binary files /dev/null and b/marketing/public/apple-icon-120x120.png differ
diff --git a/marketing/public/apple-icon-144x144.png b/marketing/public/apple-icon-144x144.png
new file mode 100644
index 000000000..b841d875a
Binary files /dev/null and b/marketing/public/apple-icon-144x144.png differ
diff --git a/marketing/public/apple-icon-152x152.png b/marketing/public/apple-icon-152x152.png
new file mode 100644
index 000000000..ff1e5ca32
Binary files /dev/null and b/marketing/public/apple-icon-152x152.png differ
diff --git a/marketing/public/apple-icon-180x180.png b/marketing/public/apple-icon-180x180.png
new file mode 100644
index 000000000..2d0f9df2e
Binary files /dev/null and b/marketing/public/apple-icon-180x180.png differ
diff --git a/marketing/public/apple-icon-57x57.png b/marketing/public/apple-icon-57x57.png
new file mode 100644
index 000000000..3be312d09
Binary files /dev/null and b/marketing/public/apple-icon-57x57.png differ
diff --git a/marketing/public/apple-icon-60x60.png b/marketing/public/apple-icon-60x60.png
new file mode 100644
index 000000000..07643bdc0
Binary files /dev/null and b/marketing/public/apple-icon-60x60.png differ
diff --git a/marketing/public/apple-icon-72x72.png b/marketing/public/apple-icon-72x72.png
new file mode 100644
index 000000000..393c16e03
Binary files /dev/null and b/marketing/public/apple-icon-72x72.png differ
diff --git a/marketing/public/apple-icon-76x76.png b/marketing/public/apple-icon-76x76.png
new file mode 100644
index 000000000..732c2059f
Binary files /dev/null and b/marketing/public/apple-icon-76x76.png differ
diff --git a/marketing/public/apple-icon-precomposed.png b/marketing/public/apple-icon-precomposed.png
new file mode 100644
index 000000000..72752ac78
Binary files /dev/null and b/marketing/public/apple-icon-precomposed.png differ
diff --git a/marketing/public/apple-icon.png b/marketing/public/apple-icon.png
new file mode 100644
index 000000000..72752ac78
Binary files /dev/null and b/marketing/public/apple-icon.png differ
diff --git a/marketing/public/apple-touch-icon.png b/marketing/public/apple-touch-icon.png
new file mode 100644
index 000000000..84211393e
Binary files /dev/null and b/marketing/public/apple-touch-icon.png differ
diff --git a/marketing/public/browserconfig.xml b/marketing/public/browserconfig.xml
new file mode 100644
index 000000000..01f124d9d
--- /dev/null
+++ b/marketing/public/browserconfig.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+ #5842DE
+
+
+
diff --git a/marketing/public/favicon-16x16.png b/marketing/public/favicon-16x16.png
new file mode 100644
index 000000000..80d5fb8b0
Binary files /dev/null and b/marketing/public/favicon-16x16.png differ
diff --git a/marketing/public/favicon-32x32.png b/marketing/public/favicon-32x32.png
new file mode 100644
index 000000000..84aa66a24
Binary files /dev/null and b/marketing/public/favicon-32x32.png differ
diff --git a/marketing/public/favicon-96x96.png b/marketing/public/favicon-96x96.png
new file mode 100644
index 000000000..0f463ffc2
Binary files /dev/null and b/marketing/public/favicon-96x96.png differ
diff --git a/marketing/public/favicon.ico b/marketing/public/favicon.ico
new file mode 100644
index 000000000..54875131e
Binary files /dev/null and b/marketing/public/favicon.ico differ
diff --git a/marketing/public/locales/en/common.json b/marketing/public/locales/en/common.json
new file mode 100644
index 000000000..c1fbd28c5
--- /dev/null
+++ b/marketing/public/locales/en/common.json
@@ -0,0 +1,160 @@
+{
+ "SEO": {
+ "title": "Retrospected",
+ "description": "Free Real-time Agile Retrospective Board for engineering teams"
+ },
+ "Banner": {
+ "heading": "Real-time Retrospectives. Done right. In seconds.",
+ "text": "Because Post-It notes aren't going to cut it.",
+ "tagline": "*No Credit card required",
+ "subscribeToday": "Try it for free"
+ },
+ "Nav": {
+ "home": "Home",
+ "howTo": "How To",
+ "features": "Features",
+ "testimonial": "Testimonials",
+ "pricing": "Pricing",
+ "faq": "FAQ",
+ "subscribe": "Subscribe",
+ "login": "Login"
+ },
+ "Clients": {
+ "main": "Join the hundreds of companies using our product"
+ },
+ "HowItWorks": {
+ "heading": "We are different because..."
+ },
+ "Testimonials": {
+ "heading": "What people say about us",
+ "1": {
+ "author": "Johnny Simpson",
+ "designation": "Head of Design",
+ "quote": "Each room is loaded with the most collaborative surfaces so you can quickly take notes, capture to-dos, and share ideas. Pick one of our stock themes, or create your custom theme with the editors."
+ },
+ "2": {
+ "author": "Johnny Simpson",
+ "designation": "Head of Design",
+ "quote": "Each room is loaded with the most collaborative surfaces so you can quickly take notes, capture to-dos, and share ideas. Pick one of our stock themes, or create your custom theme with the editors."
+ },
+ "3": {
+ "author": "Johnny Simpson",
+ "designation": "Head of Design",
+ "quote": "Each room is loaded with the most collaborative surfaces so you can quickly take notes, capture to-dos, and share ideas. Pick one of our stock themes, or create your custom theme with the editors."
+ },
+ "4": {
+ "author": "Johnny Simpson",
+ "designation": "Head of Design",
+ "quote": "Each room is loaded with the most collaborative surfaces so you can quickly take notes, capture to-dos, and share ideas. Pick one of our stock themes, or create your custom theme with the editors."
+ }
+ },
+ "Pricing": {
+ "heading": "Explore our exciting pricing",
+ "monthly": "Monthly",
+ "yearly": "Yearly",
+ "currency": "$",
+ "subscribe": "Subscribe Now",
+ "login": "Login Now",
+ "basic": {
+ "title": "Basic",
+ "price": 0,
+ "recurrence": "per month",
+ "features": [
+ "Unlimited Retrospectives",
+ "Unlimited Team Members",
+ "Unlimited Action Items",
+ "40 posts"
+ ]
+ },
+ "pro": {
+ "title": "Pro",
+ "price": 12.90,
+ "recurrence": "per month",
+ "features": [
+ "Unlimited Retrospectives",
+ "Unlimited Team Members",
+ "Unlimited Action Items",
+ "Unlimited posts",
+ "20 users"
+ ]
+ },
+ "unlimited": {
+ "title": "Unlimited",
+ "price": 49.95,
+ "recurrence": "per month",
+ "features": [
+ "Unlimited Retrospectives",
+ "Unlimited Team Members",
+ "Unlimited Action Items",
+ "Unlimited posts",
+ "Unlimited users"
+ ]
+ },
+ "hosted": {
+ "title": "Self Hosted",
+ "price": 649,
+ "recurrence": "One-time fee",
+ "features": [
+ "Everything from Unlimited",
+ "All users are Pro by default",
+ "Awesome documentation"
+ ]
+ }
+ },
+ "SelfHosted": {
+ "slogan": "Self Hosting",
+ "title": "Retrospected on your premises",
+ "desc": "Keep complete control of your data by self-hosting Retrospected. One-time fee, unlimited updates. Get up and running with our amazing documentation in no time.",
+ "features": [
+ "Complete control: your data stays on your premises",
+ "Easy to install",
+ "Administration Panel",
+ "All users are Pro",
+ "Free updates, forever"
+ ],
+ "button": {
+ "link": "https://docs.retrospected.com",
+ "label": "Discover our documentation"
+ }
+ },
+ "Features": {
+ "heading": "Start a retrospective in seconds",
+ "description":"Starting or joining a retro is as easy as 1, 2, 3. It's friction-less.",
+ "feature1": "Feature 1",
+ "feature2": "Feature 2",
+ "feature3": "Feature 3",
+ "feature4": "Feature 4"
+ },
+ "Newsfeed": {
+ "heading": "What's new at Retrospected"
+ },
+ "FAQ": {
+ "heading": "Frequently Asked Questions",
+ "data": [
+ {"question": "How are payments handled?", "answer": "Payments are handled by our partner, Stripe. No payment information is stored by Retrospected."},
+ {"question": "Do you give Pro licenses for free in some cases?", "answer": "If you are using this product as a charity, or you are in education, send us an email and we'll sort out a free license for you. Contact us."},
+ {"question": "Will I pay more for some features?", "answer": "We only have 2 tiers: Free and Pro. All features are unlocked when you subscribe to a Pro account."},
+ {"question": "Is it possible to pay yearly?", "answer": "You can! Simply select this option at checkout and you will get one month free per year."},
+ {"question": "Can I cancel my plan?", "answer": "Yes. The subscription can be stopped at any time, and will end at the end of your current billing month."},
+ {"question": "Is there any limit?", "answer": "There is no limit on the amount of data stored, subject to fair-use policy. On free accounts, you are limited to 40 posts."}
+ ]
+ },
+ "CTA": {
+ "heading": "Start a Retrospective now",
+ "description": "Join the thousands of users who are already using Retrospected",
+ "button": "Start a Retrospective",
+ "hint": "This will change your life!"
+ },
+ "Footer": {
+ "copyright": "Copyright © 2023 - Retrospected Ltd. All rights reserved.",
+ "about": "We create software with Love, from London, UK"
+ },
+ "Contact": {
+ "title": "Contact info",
+ "address": "Retrospected Ltd, London, UK",
+ "phone": "+44 (not used for now)",
+ "openingTime": "7 Days - 8am - 10pm",
+ "email": "support@retrospected.com"
+ }
+}
+
\ No newline at end of file
diff --git a/marketing/public/locales/fr/common.json b/marketing/public/locales/fr/common.json
new file mode 100644
index 000000000..558896432
--- /dev/null
+++ b/marketing/public/locales/fr/common.json
@@ -0,0 +1,158 @@
+{
+ "SEO": {
+ "title": "Retrospected",
+ "description": "Retrospectives gratuites et temps-réel pour équipes agiles"
+ },
+ "Banner": {
+ "heading": "Des retrospectives fun & efficaces, des équipes performantes & motivées !",
+ "text": "Donnez une platforme moderne et simple à vos équipes, pour soutenir leur collaboration et leur amélioration continue",
+ "tagline": "*Aucune carte bancaire demandée",
+ "subscribeToday": "Essayer gratuitement"
+ },
+ "Nav": {
+ "home": "Accueil",
+ "howTo": "Comment ?",
+ "features": "Fonctionnalités",
+ "testimonial": "Témoignages",
+ "pricing": "Tarifs",
+ "faq": "FAQ",
+ "subscribe": "Achetez",
+ "login": "Connectez-vous"
+ },
+ "Clients": {
+ "main": "Rejoingnez les centaines d'entreprises qui nous ont fait confiance"
+ },
+ "HowItWorks": {
+ "heading": "Nous sommes différents, parce-que..."
+ },
+ "Testimonials": {
+ "heading": "Ce que les gens disent de nous",
+ "1": {
+ "author": "Jean LaPointe",
+ "designation": "Directeur Design",
+ "quote": "Retrospected nous est très utile, et blah blah blah, et encore du blah blah merci de remplir les trous"
+ },
+ "2": {
+ "author": "Jean LaPointe",
+ "designation": "Directeur Design",
+ "quote": "Retrospected nous est très utile, et blah blah blah, et encore du blah blah merci de remplir les trous"
+ },
+ "3": {
+ "author": "Jean LaPointe",
+ "designation": "Directeur Design",
+ "quote": "Retrospected nous est très utile, et blah blah blah, et encore du blah blah merci de remplir les trous"
+ },
+ "4": {
+ "author": "Jean LaPointe",
+ "designation": "Directeur Design",
+ "quote": "Retrospected nous est très utile, et blah blah blah, et encore du blah blah merci de remplir les trous"
+ }
+ },
+ "Pricing": {
+ "heading": "Nos prix",
+ "monthly": "Par mois",
+ "yearly": "Par an",
+ "currency": "€",
+ "subscribe": "Acheter maintenant",
+ "login": "Connectez-vous",
+ "basic": {
+ "title": "Basic",
+ "price": 0,
+ "features": [
+ "Retrospectives illimitées",
+ "Unlimited Team Members",
+ "Unlimited Action Items",
+ "40 posts"
+ ]
+ },
+ "pro": {
+ "title": "Pro",
+ "price": 11.90,
+ "recurrence": "par mois",
+ "features": [
+ "Unlimited Retrospectives",
+ "Unlimited Team Members",
+ "Unlimited Action Items",
+ "Unlimited posts",
+ "20 users"
+ ]
+ },
+ "unlimited": {
+ "title": "Unlimited",
+ "price": 49.95,
+ "recurrence": "par mois",
+ "features": [
+ "Unlimited Retrospectives",
+ "Unlimited Team Members",
+ "Unlimited Action Items",
+ "Unlimited posts",
+ "Unlimited users"
+ ]
+ },
+ "hosted": {
+ "title": "Self Hosted",
+ "price": 599,
+ "recurrence": "une seule fois",
+ "features": [
+ "Everything from Unlimited",
+ "All users are Pro by default",
+ "Awesome documentation"
+ ]
+ }
+ },
+ "SelfHosted": {
+ "slogan": "Self Hosting",
+ "title": "A TRADUIRE",
+ "desc": "Keep complete control of your data by self-hosting Retrospected. One-time fee, unlimited updates. Get up and running with our amazing documentation in no time.",
+ "features": [
+ "Complete control: your data stays on your premises",
+ "Easy to install",
+ "Administration Panel",
+ "All users are Pro",
+ "Free updates, forever"
+ ],
+ "button": {
+ "link": "https://docs.retrospected.com",
+ "label": "Discover our documentation"
+ }
+ },
+ "Features": {
+ "heading": "Commencez une rétro en quelques secondes",
+ "description":"Starting or joining a retro is as easy as 1, 2, 3. It's friction-less.",
+ "feature1": "Fonctionalité 1",
+ "feature2": "Feature 2",
+ "feature3": "Feature 3",
+ "feature4": "Feature 4"
+ },
+ "Newsfeed": {
+ "heading": "Quoi de neuf à Retrospected ?"
+ },
+ "FAQ": {
+ "heading": "Vos Questions (à traduire)",
+ "data": [
+ {"question": "How are payments handled?", "answer": "Payments are handled by our partner, Stripe. No payment information is stored by Retrospected."},
+ {"question": "Do you give Pro licenses for free in some cases?", "answer": "If you are using this product as a charity, or you are in education, send us an email and we'll sort out a free license for you. Contact us."},
+ {"question": "Will I pay more for some features?", "answer": "We only have 2 tiers: Free and Pro. All features are unlocked when you subscribe to a Pro account."},
+ {"question": "Is it possible to pay yearly?", "answer": "You can! Simply select this option at checkout and you will get one month free per year."},
+ {"question": "Can I cancel my plan?", "answer": "Yes. The subscription can be stopped at any time, and will end at the end of your current billing month."},
+ {"question": "Is there any limit?", "answer": "There is no limit on the amount of data stored, subject to fair-use policy. On free accounts, you are limited to 40 posts."}
+ ]
+ },
+ "CTA": {
+ "heading": "Commencez une Retrospective maintenant",
+ "description": "Join the thousands of users who are already using Retrospected",
+ "button": "Start a Retrospective",
+ "hint": "This will change your life!"
+ },
+ "Footer": {
+ "copyright": "Copyright © 2023 - Retrospected Ltd. Tout droits réservés.",
+ "about": "Nos logiciels sont développés avec amour par Retrospected Ltd à Londres"
+ },
+ "Contact": {
+ "title": "Contactez-nous",
+ "address": "Retrospected Ltd, London, UK",
+ "phone": "+44 (not used for now)",
+ "openingTime": "7j/7 - 8h - 22h",
+ "email": "support@retrospected.com"
+ }
+}
diff --git a/marketing/public/manifest.json b/marketing/public/manifest.json
new file mode 100644
index 000000000..a8f67d690
--- /dev/null
+++ b/marketing/public/manifest.json
@@ -0,0 +1,43 @@
+{
+ "name": "Retrospected",
+ "short_name": "Retrospected",
+ "display": "standalone",
+ "start_url": "/",
+ "icons": [{
+ "src": "\/android-icon-36x36.png",
+ "sizes": "36x36",
+ "type": "image\/png",
+ "density": 0.75
+ },
+ {
+ "src": "\/android-icon-48x48.png",
+ "sizes": "48x48",
+ "type": "image\/png",
+ "density": 1
+ },
+ {
+ "src": "\/android-icon-72x72.png",
+ "sizes": "72x72",
+ "type": "image\/png",
+ "density": 1.5
+ },
+ {
+ "src": "\/android-icon-96x96.png",
+ "sizes": "96x96",
+ "type": "image\/png",
+ "density": 2
+ },
+ {
+ "src": "\/android-icon-144x144.png",
+ "sizes": "144x144",
+ "type": "image\/png",
+ "density": 3
+ },
+ {
+ "src": "\/android-icon-192x192.png",
+ "sizes": "192x192",
+ "type": "image\/png",
+ "density": 4
+ }
+ ]
+}
\ No newline at end of file
diff --git a/marketing/public/ms-icon-144x144.png b/marketing/public/ms-icon-144x144.png
new file mode 100644
index 000000000..b841d875a
Binary files /dev/null and b/marketing/public/ms-icon-144x144.png differ
diff --git a/marketing/public/ms-icon-150x150.png b/marketing/public/ms-icon-150x150.png
new file mode 100644
index 000000000..3a1b2c5ad
Binary files /dev/null and b/marketing/public/ms-icon-150x150.png differ
diff --git a/marketing/public/ms-icon-310x310.png b/marketing/public/ms-icon-310x310.png
new file mode 100644
index 000000000..5a1c600b6
Binary files /dev/null and b/marketing/public/ms-icon-310x310.png differ
diff --git a/marketing/public/ms-icon-70x70.png b/marketing/public/ms-icon-70x70.png
new file mode 100644
index 000000000..e004ec249
Binary files /dev/null and b/marketing/public/ms-icon-70x70.png differ
diff --git a/marketing/public/safari-pinned-tab.svg b/marketing/public/safari-pinned-tab.svg
new file mode 100644
index 000000000..06036cdbd
--- /dev/null
+++ b/marketing/public/safari-pinned-tab.svg
@@ -0,0 +1,815 @@
+
+
+
+
+Created by potrace 1.11, written by Peter Selinger 2001-2013
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/marketing/public/site.webmanifest b/marketing/public/site.webmanifest
new file mode 100644
index 000000000..0dc94ece5
--- /dev/null
+++ b/marketing/public/site.webmanifest
@@ -0,0 +1,19 @@
+{
+ "name": "Retrospected",
+ "short_name": "Retrospected",
+ "icons": [
+ {
+ "src": "/android-chrome-192x192.png",
+ "sizes": "192x192",
+ "type": "image/png"
+ },
+ {
+ "src": "/android-chrome-512x512.png",
+ "sizes": "512x512",
+ "type": "image/png"
+ }
+ ],
+ "theme_color": "#5842DE",
+ "background_color": "#ffffff",
+ "display": "standalone"
+}
\ No newline at end of file
diff --git a/marketing/src/common/assets/css/flaticon.css b/marketing/src/common/assets/css/flaticon.css
new file mode 100755
index 000000000..3411e362f
--- /dev/null
+++ b/marketing/src/common/assets/css/flaticon.css
@@ -0,0 +1,167 @@
+/*
+ Flaticon icon font: Flaticon
+ Creation date: 10/02/2019 12:14
+ */
+
+@font-face {
+ font-family: 'Flaticon';
+ src: url('../fonts/Flaticon.eot');
+ src: url('../fonts/Flaticon.eot?#iefix') format('embedded-opentype'),
+ url('../fonts/Flaticon.woff2') format('woff2'),
+ url('../fonts/Flaticon.woff') format('woff'),
+ url('../fonts/Flaticon.ttf') format('truetype'),
+ url('../fonts/Flaticon.svg#Flaticon') format('svg');
+ font-weight: normal;
+ font-style: normal;
+}
+
+@media screen and (-webkit-min-device-pixel-ratio: 0) {
+ @font-face {
+ font-family: 'Flaticon';
+ src: url('../fonts/Flaticon.svg#Flaticon') format('svg');
+ }
+}
+
+[class^='flaticon-']:before,
+[class*=' flaticon-']:before,
+[class^='flaticon-']:after,
+[class*=' flaticon-']:after {
+ font-family: Flaticon;
+ font-style: normal;
+}
+
+.flaticon-flask:before {
+ content: '\f100';
+}
+.flaticon-pencil-case:before {
+ content: '\f101';
+}
+.flaticon-ruler:before {
+ content: '\f102';
+}
+.flaticon-startup:before {
+ content: '\f103';
+}
+.flaticon-creative:before {
+ content: '\f104';
+}
+.flaticon-briefing:before {
+ content: '\f105';
+}
+.flaticon-magnifying-glass:before {
+ content: '\f106';
+}
+.flaticon-user:before {
+ content: '\f107';
+}
+.flaticon-quotes:before {
+ content: '\f108';
+}
+.flaticon-next:before {
+ content: '\f109';
+}
+.flaticon-left-arrow:before {
+ content: '\f10a';
+}
+.flaticon-plus-symbol:before {
+ content: '\f10b';
+}
+.flaticon-minus-symbol:before {
+ content: '\f10c';
+}
+.flaticon-trophy:before {
+ content: '\f10d';
+}
+.flaticon-conversation:before {
+ content: '\f10e';
+}
+.flaticon-atom:before {
+ content: '\f10f';
+}
+.flaticon-link:before {
+ content: '\f110';
+}
+.flaticon-battery:before {
+ content: '\f111';
+}
+.flaticon-stopwatch:before {
+ content: '\f112';
+}
+.flaticon-stopwatch-1:before {
+ content: '\f113';
+}
+.flaticon-objective:before {
+ content: '\f114';
+}
+.flaticon-facebook-logo:before {
+ content: '\f115';
+}
+.flaticon-twitter-logo-silhouette:before {
+ content: '\f116';
+}
+.flaticon-instagram:before {
+ content: '\f117';
+}
+.flaticon-dribble-logo:before {
+ content: '\f118';
+}
+.flaticon-tumblr-logo:before {
+ content: '\f119';
+}
+.flaticon-youtube:before {
+ content: '\f11a';
+}
+.flaticon-google-plus:before {
+ content: '\f11b';
+}
+.flaticon-blockchain:before {
+ content: '\f11c';
+}
+.flaticon-money-bag:before {
+ content: '\f11d';
+}
+.flaticon-wallet:before {
+ content: '\f11e';
+}
+.flaticon-security:before {
+ content: '\f11f';
+}
+.flaticon-bitcoin:before {
+ content: '\f120';
+}
+.flaticon-blockchain-1:before {
+ content: '\f121';
+}
+.flaticon-annonymous:before {
+ content: '\f122';
+}
+.flaticon-group:before {
+ content: '\f123';
+}
+.flaticon-prototype:before {
+ content: '\f124';
+}
+.flaticon-code:before {
+ content: '\f125';
+}
+.flaticon-vectors:before {
+ content: '\f126';
+}
+.flaticon-export:before {
+ content: '\f127';
+}
+.flaticon-hourglass:before {
+ content: '\f128';
+}
+.flaticon-trophy-1:before {
+ content: '\f129';
+}
+.flaticon-upload:before {
+ content: '\f12a';
+}
+.flaticon-settings:before {
+ content: '\f12b';
+}
+.flaticon-strategy:before {
+ content: '\f12c';
+}
diff --git a/marketing/src/common/assets/css/icon-example-page.css b/marketing/src/common/assets/css/icon-example-page.css
new file mode 100755
index 000000000..44e166308
--- /dev/null
+++ b/marketing/src/common/assets/css/icon-example-page.css
@@ -0,0 +1,314 @@
+#flaticonExample ol,
+#flaticonExample ul {
+ list-style: none;
+}
+
+#flaticonExample blockquote,
+#flaticonExample q {
+ quotes: none;
+}
+
+#flaticonExample blockquote:before,
+#flaticonExample blockquote:after,
+#flaticonExample q:before,
+#flaticonExample q:after {
+ content: '';
+ content: none;
+}
+
+#flaticonExample table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+#flaticonExample {
+ font-family: 'Varela Round', Helvetica, Arial, sans-serif;
+ font-size: 16px;
+ color: #222;
+}
+
+#flaticonExample a {
+ color: #333;
+ border-bottom: 1px solid #a9fd00;
+ font-weight: bold;
+ text-decoration: none;
+}
+
+#flaticonExample * {
+ -moz-box-sizing: border-box;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ margin: 0;
+ padding: 0;
+}
+
+#flaticonExample [class^='flaticon-']:before,
+#flaticonExample [class*=' flaticon-']:before,
+#flaticonExample [class^='flaticon-']:after,
+#flaticonExample [class*=' flaticon-']:after {
+ font-family: Flaticon;
+ font-size: 30px;
+ font-style: normal;
+ margin-left: 20px;
+ color: #333;
+}
+
+#flaticonExample .wrapper {
+ max-width: 600px;
+ margin: auto;
+ padding: 0 1em;
+}
+
+#flaticonExample .title {
+ font-size: 1.25em;
+ text-align: center;
+ margin-bottom: 1em;
+ text-transform: uppercase;
+}
+
+#flaticonExample header {
+ text-align: center;
+ background-color: #222;
+ color: #fff;
+ padding: 1em;
+}
+
+#flaticonExample header .logo {
+ width: 210px;
+ height: 38px;
+ display: inline-block;
+ vertical-align: middle;
+ margin-right: 1em;
+ border: none;
+}
+
+#flaticonExample header strong {
+ font-size: 1.95em;
+ font-weight: bold;
+ vertical-align: middle;
+ margin-top: 5px;
+ display: inline-block;
+}
+
+#flaticonExample .demo {
+ margin: 2em auto;
+ line-height: 1.25em;
+}
+
+#flaticonExample .demo ul li {
+ margin-bottom: 1em;
+}
+
+#flaticonExample .demo ul li .num {
+ color: #222;
+ border-radius: 20px;
+ display: inline-block;
+ width: 26px;
+ padding: 3px;
+ height: 26px;
+ text-align: center;
+ margin-right: 0.5em;
+ border: 1px solid #222;
+}
+
+#flaticonExample .demo ul li code {
+ background-color: #222;
+ border-radius: 4px;
+ padding: 0.25em 0.5em;
+ display: inline-block;
+ color: #fff;
+ font-family: Consolas, Monaco, Lucida Console, Liberation Mono,
+ DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace;
+ font-weight: lighter;
+ margin-top: 1em;
+ font-size: 0.8em;
+ word-break: break-all;
+}
+
+#flaticonExample .demo ul li code.big {
+ padding: 1em;
+ font-size: 0.9em;
+}
+
+#flaticonExample .demo ul li code .red {
+ color: #ef3159;
+}
+
+#flaticonExample .demo ul li code .green {
+ color: #acff65;
+}
+
+#flaticonExample .demo ul li code .yellow {
+ color: #ffff99;
+}
+
+#flaticonExample .demo ul li code .blue {
+ color: #99d3ff;
+}
+
+#flaticonExample .demo ul li code .purple {
+ color: #a295ff;
+}
+
+#flaticonExample .demo ul li code .dots {
+ margin-top: 0.5em;
+ display: block;
+}
+
+#flaticonExample #glyphs {
+ border-bottom: 1px solid #ccc;
+ padding: 2em 0;
+ text-align: center;
+}
+
+#flaticonExample .glyph {
+ display: inline-block;
+ width: 9em;
+ margin: 1em;
+ text-align: center;
+ vertical-align: top;
+ background: #fff;
+}
+
+#flaticonExample .glyph .glyph-icon {
+ padding: 10px;
+ display: block;
+ font-family: 'Flaticon';
+ font-size: 64px;
+ line-height: 1;
+}
+
+#flaticonExample .glyph .glyph-icon:before {
+ font-size: 64px;
+ color: #222;
+ margin-left: 0;
+}
+
+#flaticonExample .class-name {
+ font-size: 0.65em;
+ background-color: #222;
+ color: #fff;
+ border-radius: 4px 4px 0 0;
+ padding: 0.5em;
+ color: #ffff99;
+ font-family: Consolas, Monaco, Lucida Console, Liberation Mono,
+ DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace;
+}
+
+#flaticonExample .author-name {
+ font-size: 0.6em;
+ background-color: #fcfcfd;
+ border: 1px solid #dedee4;
+ border-top: 0;
+ border-radius: 0 0 4px 4px;
+ padding: 0.5em;
+}
+
+#flaticonExample .class-name:last-child {
+ font-size: 10px;
+ color: #888;
+}
+
+#flaticonExample .class-name:last-child a {
+ font-size: 10px;
+ color: #555;
+}
+
+#flaticonExample .class-name:last-child a:hover {
+ color: #a9fd00;
+}
+
+#flaticonExample .glyph > input {
+ display: block;
+ width: 100px;
+ margin: 5px auto;
+ text-align: center;
+ font-size: 12px;
+ cursor: text;
+}
+
+#flaticonExample .glyph > input.icon-input {
+ font-family: 'Flaticon';
+ font-size: 16px;
+ margin-bottom: 10px;
+}
+
+#flaticonExample .attribution .title {
+ margin-top: 2em;
+}
+
+#flaticonExample .attribution textarea {
+ background-color: #fcfcfd;
+ padding: 1em;
+ border: none;
+ box-shadow: none;
+ border: 1px solid #dedee4;
+ border-radius: 4px;
+ resize: none;
+ width: 100%;
+ height: 150px;
+ font-size: 0.8em;
+ font-family: Consolas, Monaco, Lucida Console, Liberation Mono,
+ DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace;
+ -webkit-appearance: none;
+}
+
+#flaticonExample .iconsuse {
+ margin: 2em auto;
+ text-align: center;
+ max-width: 1200px;
+}
+
+#flaticonExample .iconsuse:after {
+ content: '';
+ display: table;
+ clear: both;
+}
+
+#flaticonExample .iconsuse .image {
+ float: left;
+ width: 25%;
+ padding: 0 1em;
+}
+
+#flaticonExample .iconsuse .image p {
+ margin-bottom: 1em;
+}
+
+#flaticonExample .iconsuse .image span {
+ display: block;
+ font-size: 0.65em;
+ background-color: #222;
+ color: #fff;
+ border-radius: 4px;
+ padding: 0.5em;
+ color: #ffff99;
+ margin-top: 1em;
+ font-family: Consolas, Monaco, Lucida Console, Liberation Mono,
+ DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace;
+}
+
+#flaticonExample #footer {
+ text-align: center;
+ background-color: #4c5b5c;
+ color: #7c9192;
+ padding: 1em;
+}
+
+#flaticonExample #footer a {
+ border: none;
+ color: #a9fd00;
+ font-weight: normal;
+}
+
+@media (max-width: 960px) {
+ #flaticonExample .iconsuse .image {
+ width: 50%;
+ }
+}
+
+@media (max-width: 560px) {
+ #flaticonExample .iconsuse .image {
+ width: 100%;
+ }
+}
diff --git a/marketing/src/common/assets/css/rc-collapse.css b/marketing/src/common/assets/css/rc-collapse.css
new file mode 100755
index 000000000..e520c9690
--- /dev/null
+++ b/marketing/src/common/assets/css/rc-collapse.css
@@ -0,0 +1,37 @@
+.rc-collapse-motion {
+ transition: height 0.3s, opacity 0.3s;
+}
+
+.rc-collapse-content-hidden {
+ display: none;
+}
+
+.rc-collapse-header {
+ width: 100%;
+}
+
+.rc-collapse-header > .rc-collapse-header-text {
+ width: 100%;
+ justify-content: space-between;
+ display: flex;
+}
+
+.rc-collapse > .rc-collapse-item > .rc-collapse-header .rc-collapse-extra {
+ margin: 0 16px 0 auto;
+}
+
+.rc-collapse > .rc-collapse-item .rc-collapse-header-collapsible-only {
+ cursor: default;
+}
+
+.rc-collapse > .rc-collapse-item .rc-collapse-header-collapsible-only .rc-collapse-header-text {
+ cursor: pointer;
+}
+
+.rc-collapse > .rc-collapse-item-disabled > .rc-collapse-header {
+ cursor: not-allowed;
+}
+
+.rc-collapse-content {
+ overflow: hidden;
+}
diff --git a/marketing/src/common/assets/css/rc-drawer.css b/marketing/src/common/assets/css/rc-drawer.css
new file mode 100755
index 000000000..a0723d1a0
--- /dev/null
+++ b/marketing/src/common/assets/css/rc-drawer.css
@@ -0,0 +1,70 @@
+.rc-drawer{
+ z-index: 9999 !important;
+}
+.mask-motion-enter-active,
+.mask-motion-appear-active,
+.mask-motion-leave-active {
+ transition: all 0.3s;
+}
+.mask-motion-enter,
+.mask-motion-appear {
+ opacity: 0;
+}
+.mask-motion-enter-active,
+.mask-motion-appear-active {
+ opacity: 1;
+}
+.mask-motion-leave {
+ opacity: 1;
+}
+.mask-motion-leave-active {
+ opacity: 0;
+}
+.panel-motion-left-enter-start,
+.panel-motion-left-appear-start,
+.panel-motion-left-leave-start {
+ transition: none !important;
+}
+.panel-motion-left-enter-active,
+.panel-motion-left-appear-active,
+.panel-motion-left-leave-active {
+ transition: all 0.3s;
+}
+.panel-motion-left-enter,
+.panel-motion-left-appear {
+ transform: translateX(-100%);
+}
+.panel-motion-left-enter-active,
+.panel-motion-left-appear-active {
+ transform: translateX(0);
+}
+.panel-motion-left-leave {
+ transform: translateX(0);
+}
+.panel-motion-left-leave-active {
+ transform: translateX(-100%) !important;
+}
+.panel-motion-right-enter-start,
+.panel-motion-right-appear-start,
+.panel-motion-right-leave-start {
+ transition: none !important;
+}
+.panel-motion-right-enter-active,
+.panel-motion-right-appear-active,
+.panel-motion-right-leave-active {
+ transition: all 0.3s;
+}
+.panel-motion-right-enter,
+.panel-motion-right-appear {
+ transform: translateX(100%);
+}
+.panel-motion-right-enter-active,
+.panel-motion-right-appear-active {
+ transform: translateX(0);
+}
+.panel-motion-right-leave {
+ transform: translateX(0);
+}
+.panel-motion-right-leave-active {
+ transform: translateX(100%) !important;
+}
diff --git a/marketing/src/common/assets/css/react-slick.css b/marketing/src/common/assets/css/react-slick.css
new file mode 100755
index 000000000..1ecfb29b2
--- /dev/null
+++ b/marketing/src/common/assets/css/react-slick.css
@@ -0,0 +1,98 @@
+.slick-list,
+.slick-slider,
+.slick-track {
+ position: relative;
+ display: block;
+}
+
+.slick-loading .slick-slide,
+.slick-loading .slick-track {
+ visibility: hidden;
+}
+
+.slick-slider {
+ box-sizing: border-box;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ -webkit-touch-callout: none;
+ -khtml-user-select: none;
+ -ms-touch-action: pan-y;
+ touch-action: pan-y;
+ -webkit-tap-highlight-color: transparent;
+}
+
+.slick-list {
+ overflow: hidden;
+ margin: 0;
+ padding: 0;
+}
+
+.slick-list:focus {
+ outline: 0;
+}
+
+.slick-list.dragging {
+ cursor: pointer;
+ cursor: hand;
+}
+
+.slick-slider .slick-list,
+.slick-slider .slick-track {
+ transform: translate3d(0, 0, 0);
+}
+
+.slick-track {
+ top: 0;
+ left: 0;
+}
+
+.slick-track:after,
+.slick-track:before {
+ display: table;
+ content: '';
+}
+
+.slick-track:after {
+ clear: both;
+}
+
+.slick-slide {
+ display: none;
+ float: left;
+ height: 100%;
+ min-height: 1px;
+}
+
+[dir='rtl'] .slick-slide {
+ float: right;
+}
+
+.slick-slide img {
+ display: block;
+}
+
+.slick-slide.slick-loading img {
+ display: none;
+}
+
+.slick-slide.dragging img {
+ pointer-events: none;
+}
+
+.slick-initialized .slick-slide {
+ display: block;
+}
+
+.slick-vertical .slick-slide {
+ display: block;
+ height: auto;
+ border: 1px solid transparent;
+}
+
+.slick-arrow.slick-hidden {
+ display: none;
+}
+
+/*# sourceMappingURL=slick.min.css.map */
diff --git a/marketing/src/common/assets/css/style.js b/marketing/src/common/assets/css/style.js
new file mode 100755
index 000000000..994cb417c
--- /dev/null
+++ b/marketing/src/common/assets/css/style.js
@@ -0,0 +1,120 @@
+import { createGlobalStyle } from 'styled-components';
+
+const ResetCSS = createGlobalStyle`
+ ::selection {
+ background: #333333;
+ color: #ffffff;
+ }
+
+ html {
+ box-sizing: border-box;
+ -ms-overflow-style: scrollbar;
+ }
+
+ *,
+ *::before,
+ *::after {
+ box-sizing: inherit;
+ }
+
+ * {
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ }
+ *:focus {
+ outline: none;
+ }
+
+ html,
+ html a,
+ h1,
+ h2,
+ h3,
+ h4,
+ h5,
+ h6,
+ a,
+ p,
+ li,
+ dl,
+ th,
+ dt,
+ input,
+ textarea,
+ span,
+ div {
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.004);
+ }
+
+ body {
+ margin: 0;
+ padding: 0;
+ overflow-x: hidden;
+ -webkit-tap-highlight-color: transparent;
+ }
+
+ ul {
+ margin: 0;
+ padding: 0;
+ }
+
+ li {
+ list-style-type: none;
+ }
+
+ a {
+ text-decoration: none;
+ }
+
+ a:hover {
+ text-decoration: none;
+ }
+
+ .reuseModalHolder {
+ padding: 0 !important;
+ &.demo_switcher_modal {
+ border: 0 !important;
+ background-color: rgba(16, 30, 77, 0.9) !important;
+ .innerRndComponent {
+ border-radius: 8px !important;
+ }
+ }
+ }
+
+ button.modalCloseBtn {
+ position: fixed !important;
+ z-index: 999991 !important;
+ background-color: transparent !important;
+ top: 10px !important;
+ right: 10px !important;
+ min-width: 34px !important;
+ min-height: 34px !important;
+ padding: 0 !important;
+ span.btn-icon {
+ font-size: 22px !important;
+ transform: rotate(45deg) !important;
+ }
+
+ &.alt {
+ border-radius: 50% !important;
+ z-index: 999999 !important;
+ padding: 0 !important;
+ transition: all 0.3s ease !important;
+ top: 25px !important;
+ right: 30px !important;
+ min-width: 40px !important;
+ min-height: 40px !important;
+
+ span.btn-icon {
+ font-size: 20px !important;
+ }
+
+ &:hover {
+ opacity: 0.88 !important;
+ }
+ }
+ }
+`;
+export default ResetCSS;
diff --git a/marketing/src/common/assets/fonts/Flaticon.eot b/marketing/src/common/assets/fonts/Flaticon.eot
new file mode 100755
index 000000000..7590da273
Binary files /dev/null and b/marketing/src/common/assets/fonts/Flaticon.eot differ
diff --git a/marketing/src/common/assets/fonts/Flaticon.svg b/marketing/src/common/assets/fonts/Flaticon.svg
new file mode 100755
index 000000000..d0186943d
--- /dev/null
+++ b/marketing/src/common/assets/fonts/Flaticon.svg
@@ -0,0 +1,551 @@
+
+
+
+
+
+Created by FontForge 20170731 at Sun Feb 10 12:14:44 2019
+ By root
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/marketing/src/common/assets/fonts/Flaticon.ttf b/marketing/src/common/assets/fonts/Flaticon.ttf
new file mode 100755
index 000000000..fbef793f3
Binary files /dev/null and b/marketing/src/common/assets/fonts/Flaticon.ttf differ
diff --git a/marketing/src/common/assets/fonts/Flaticon.woff b/marketing/src/common/assets/fonts/Flaticon.woff
new file mode 100755
index 000000000..fa9c0ca3e
Binary files /dev/null and b/marketing/src/common/assets/fonts/Flaticon.woff differ
diff --git a/marketing/src/common/assets/fonts/Flaticon.woff2 b/marketing/src/common/assets/fonts/Flaticon.woff2
new file mode 100755
index 000000000..8b18d0e44
Binary files /dev/null and b/marketing/src/common/assets/fonts/Flaticon.woff2 differ
diff --git a/marketing/src/common/assets/image/404.svg b/marketing/src/common/assets/image/404.svg
new file mode 100755
index 000000000..44bc1e58d
--- /dev/null
+++ b/marketing/src/common/assets/image/404.svg
@@ -0,0 +1 @@
+cuper
\ No newline at end of file
diff --git a/marketing/src/common/assets/image/error.svg b/marketing/src/common/assets/image/error.svg
new file mode 100755
index 000000000..04e726ef1
--- /dev/null
+++ b/marketing/src/common/assets/image/error.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
diff --git a/marketing/src/common/assets/image/fav.png b/marketing/src/common/assets/image/fav.png
new file mode 100755
index 000000000..f43d3a322
Binary files /dev/null and b/marketing/src/common/assets/image/fav.png differ
diff --git a/marketing/src/common/assets/image/favicon.png b/marketing/src/common/assets/image/favicon.png
new file mode 100755
index 000000000..13e5aa90d
Binary files /dev/null and b/marketing/src/common/assets/image/favicon.png differ
diff --git a/marketing/src/common/assets/image/red-heart.svg b/marketing/src/common/assets/image/red-heart.svg
new file mode 100755
index 000000000..46f1e97ca
--- /dev/null
+++ b/marketing/src/common/assets/image/red-heart.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/marketing/src/common/assets/image/success.svg b/marketing/src/common/assets/image/success.svg
new file mode 100755
index 000000000..aedd7c26a
--- /dev/null
+++ b/marketing/src/common/assets/image/success.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
diff --git a/marketing/src/common/assets/image/webAppCreative/analytics.png b/marketing/src/common/assets/image/webAppCreative/analytics.png
new file mode 100755
index 000000000..439b88462
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/analytics.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/clients/envato.png b/marketing/src/common/assets/image/webAppCreative/clients/envato.png
new file mode 100755
index 000000000..f86648d5d
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/clients/envato.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/clients/evernote.png b/marketing/src/common/assets/image/webAppCreative/clients/evernote.png
new file mode 100755
index 000000000..6a73230b1
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/clients/evernote.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/clients/forbes.png b/marketing/src/common/assets/image/webAppCreative/clients/forbes.png
new file mode 100755
index 000000000..385c0bd35
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/clients/forbes.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/clients/geekwire.png b/marketing/src/common/assets/image/webAppCreative/clients/geekwire.png
new file mode 100755
index 000000000..57a4c1d43
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/clients/geekwire.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/clients/slack.png b/marketing/src/common/assets/image/webAppCreative/clients/slack.png
new file mode 100755
index 000000000..886d83767
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/clients/slack.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/clients/usa-today.png b/marketing/src/common/assets/image/webAppCreative/clients/usa-today.png
new file mode 100755
index 000000000..72330371b
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/clients/usa-today.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/cta-bubble-1.png b/marketing/src/common/assets/image/webAppCreative/cta-bubble-1.png
new file mode 100755
index 000000000..5755b0f29
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/cta-bubble-1.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/cta-bubble-2.png b/marketing/src/common/assets/image/webAppCreative/cta-bubble-2.png
new file mode 100755
index 000000000..468abc0dd
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/cta-bubble-2.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/cta-bubble.png b/marketing/src/common/assets/image/webAppCreative/cta-bubble.png
new file mode 100755
index 000000000..cc30144af
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/cta-bubble.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/dashboard-2.png b/marketing/src/common/assets/image/webAppCreative/dashboard-2.png
new file mode 100755
index 000000000..31055a81a
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/dashboard-2.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/dashboard-pattern.png b/marketing/src/common/assets/image/webAppCreative/dashboard-pattern.png
new file mode 100755
index 000000000..8bdefe20b
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/dashboard-pattern.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/dashboard.png b/marketing/src/common/assets/image/webAppCreative/dashboard.png
new file mode 100755
index 000000000..4c72997f0
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/dashboard.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/icons/1.png b/marketing/src/common/assets/image/webAppCreative/icons/1.png
new file mode 100755
index 000000000..adb21d021
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/icons/1.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/icons/2.png b/marketing/src/common/assets/image/webAppCreative/icons/2.png
new file mode 100755
index 000000000..d06c15de2
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/icons/2.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/icons/3.png b/marketing/src/common/assets/image/webAppCreative/icons/3.png
new file mode 100755
index 000000000..9ea59bc0a
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/icons/3.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/icons/4.png b/marketing/src/common/assets/image/webAppCreative/icons/4.png
new file mode 100755
index 000000000..9e247ee44
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/icons/4.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/icons/5.png b/marketing/src/common/assets/image/webAppCreative/icons/5.png
new file mode 100755
index 000000000..5273bcee2
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/icons/5.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/icons/6.png b/marketing/src/common/assets/image/webAppCreative/icons/6.png
new file mode 100755
index 000000000..afcfa6d98
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/icons/6.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/icons/7.png b/marketing/src/common/assets/image/webAppCreative/icons/7.png
new file mode 100755
index 000000000..fc18b7831
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/icons/7.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/icons/README.zip b/marketing/src/common/assets/image/webAppCreative/icons/README.zip
new file mode 100755
index 000000000..5663d7e77
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/icons/README.zip differ
diff --git a/marketing/src/common/assets/image/webAppCreative/icons/Superprops.zip b/marketing/src/common/assets/image/webAppCreative/icons/Superprops.zip
new file mode 100755
index 000000000..5e3cc06ba
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/icons/Superprops.zip differ
diff --git a/marketing/src/common/assets/image/webAppCreative/icons/asana.png b/marketing/src/common/assets/image/webAppCreative/icons/asana.png
new file mode 100755
index 000000000..3d37a6d7d
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/icons/asana.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/icons/donut.png b/marketing/src/common/assets/image/webAppCreative/icons/donut.png
new file mode 100755
index 000000000..fa5d0fb80
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/icons/donut.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/icons/dribbble.png b/marketing/src/common/assets/image/webAppCreative/icons/dribbble.png
new file mode 100755
index 000000000..83d755540
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/icons/dribbble.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/icons/drive.png b/marketing/src/common/assets/image/webAppCreative/icons/drive.png
new file mode 100755
index 000000000..9d38d6e6b
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/icons/drive.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/icons/dropbox.png b/marketing/src/common/assets/image/webAppCreative/icons/dropbox.png
new file mode 100755
index 000000000..2f98d952a
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/icons/dropbox.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/icons/envelope.png b/marketing/src/common/assets/image/webAppCreative/icons/envelope.png
new file mode 100755
index 000000000..8b7795dbf
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/icons/envelope.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/icons/facebook.png b/marketing/src/common/assets/image/webAppCreative/icons/facebook.png
new file mode 100755
index 000000000..f52f8b4a8
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/icons/facebook.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/icons/fontawesome.png b/marketing/src/common/assets/image/webAppCreative/icons/fontawesome.png
new file mode 100755
index 000000000..2c17e760d
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/icons/fontawesome.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/icons/github.png b/marketing/src/common/assets/image/webAppCreative/icons/github.png
new file mode 100755
index 000000000..99e38f47a
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/icons/github.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/icons/google-cloud.png b/marketing/src/common/assets/image/webAppCreative/icons/google-cloud.png
new file mode 100755
index 000000000..ebc0296a4
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/icons/google-cloud.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/icons/icecream.png b/marketing/src/common/assets/image/webAppCreative/icons/icecream.png
new file mode 100755
index 000000000..bae95847d
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/icons/icecream.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/icons/messenger.png b/marketing/src/common/assets/image/webAppCreative/icons/messenger.png
new file mode 100755
index 000000000..311fe0cd8
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/icons/messenger.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/icons/nginx.png b/marketing/src/common/assets/image/webAppCreative/icons/nginx.png
new file mode 100755
index 000000000..70c3cc8f6
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/icons/nginx.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/icons/pizza.png b/marketing/src/common/assets/image/webAppCreative/icons/pizza.png
new file mode 100755
index 000000000..f1281ded8
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/icons/pizza.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/icons/slack.png b/marketing/src/common/assets/image/webAppCreative/icons/slack.png
new file mode 100755
index 000000000..ebaf03af5
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/icons/slack.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/icons/smashing-mag.png b/marketing/src/common/assets/image/webAppCreative/icons/smashing-mag.png
new file mode 100755
index 000000000..04f408466
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/icons/smashing-mag.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/icons/twitter.png b/marketing/src/common/assets/image/webAppCreative/icons/twitter.png
new file mode 100755
index 000000000..ca8e5b675
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/icons/twitter.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/icons/zeplin.png b/marketing/src/common/assets/image/webAppCreative/icons/zeplin.png
new file mode 100755
index 000000000..f5cf7fe1e
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/icons/zeplin.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/icons/zoom.png b/marketing/src/common/assets/image/webAppCreative/icons/zoom.png
new file mode 100755
index 000000000..683acccde
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/icons/zoom.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/logo.png b/marketing/src/common/assets/image/webAppCreative/logo.png
new file mode 100755
index 000000000..8c3931c9d
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/logo.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/parallax-1.png b/marketing/src/common/assets/image/webAppCreative/parallax-1.png
new file mode 100755
index 000000000..0817ec634
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/parallax-1.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/pattern1.png b/marketing/src/common/assets/image/webAppCreative/pattern1.png
new file mode 100755
index 000000000..a20060c23
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/pattern1.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/pattern2.png b/marketing/src/common/assets/image/webAppCreative/pattern2.png
new file mode 100755
index 000000000..c186d8dda
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/pattern2.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/pattern3.png b/marketing/src/common/assets/image/webAppCreative/pattern3.png
new file mode 100755
index 000000000..02e30d194
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/pattern3.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/pattern4.png b/marketing/src/common/assets/image/webAppCreative/pattern4.png
new file mode 100755
index 000000000..b95e76c32
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/pattern4.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/pattern5.png b/marketing/src/common/assets/image/webAppCreative/pattern5.png
new file mode 100755
index 000000000..9bccb47f1
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/pattern5.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/pattern6.png b/marketing/src/common/assets/image/webAppCreative/pattern6.png
new file mode 100755
index 000000000..2c11d7ec8
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/pattern6.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/pattern7.png b/marketing/src/common/assets/image/webAppCreative/pattern7.png
new file mode 100755
index 000000000..edee351a8
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/pattern7.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/polygon.png b/marketing/src/common/assets/image/webAppCreative/polygon.png
new file mode 100755
index 000000000..eb18d3820
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/polygon.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/post1.png b/marketing/src/common/assets/image/webAppCreative/post1.png
new file mode 100755
index 000000000..17e3b63ee
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/post1.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/post2.png b/marketing/src/common/assets/image/webAppCreative/post2.png
new file mode 100755
index 000000000..0d9ac96fc
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/post2.png differ
diff --git a/marketing/src/common/assets/image/webAppCreative/post3.png b/marketing/src/common/assets/image/webAppCreative/post3.png
new file mode 100755
index 000000000..6b9244a9e
Binary files /dev/null and b/marketing/src/common/assets/image/webAppCreative/post3.png differ
diff --git a/marketing/src/common/components/Accordion/accordion.style.js b/marketing/src/common/components/Accordion/accordion.style.js
new file mode 100755
index 000000000..d9eac059b
--- /dev/null
+++ b/marketing/src/common/components/Accordion/accordion.style.js
@@ -0,0 +1,75 @@
+import styled, { keyframes } from 'styled-components';
+import {
+ AccordionItemHeading,
+ AccordionItemButton,
+ Accordion,
+ AccordionItem,
+ AccordionItemPanel,
+} from 'react-accessible-accordion';
+import 'react-accessible-accordion/dist/fancy-example.css';
+
+const fadeIn = keyframes`
+ 0% {
+ opacity: 0;
+ }
+ 100% {
+ opacity: 1;
+ }
+`;
+
+export const AccordionWrapper = styled(Accordion)``;
+
+export const AccordionItemWrapper = styled(AccordionItem)``;
+
+export const OpenIcon = styled.div``;
+
+export const CloseIcon = styled.div`
+ opacity: 0;
+`;
+
+export const AccordionTitleWrapper = styled(AccordionItemHeading)`
+ > div {
+ display: flex;
+ align-items: center;
+ cursor: pointer;
+ position: relative;
+ &[aria-expanded='false'] {
+ ${OpenIcon} {
+ opacity: 0;
+ }
+ ${CloseIcon} {
+ opacity: 1;
+ }
+ }
+ }
+
+ &:focus {
+ outline: none;
+ }
+
+ * {
+ flex-grow: 1;
+ }
+`;
+export const AccordionItemButtonWrapper = styled(AccordionItemButton)``;
+export const AccordionBodyWrapper = styled(AccordionItemPanel)`
+ animation: 0.35s ${fadeIn} ease-in;
+ &.accordion__body--hidden {
+ animation: 0.35s ${fadeIn} ease-in;
+ }
+`;
+
+export const IconWrapper = styled.div`
+ margin-left: 30px;
+ width: 40px;
+ position: relative;
+
+ ${OpenIcon},
+ ${CloseIcon} {
+ position: absolute;
+ top: 50%;
+ right: 0;
+ transform: translateY(-50%);
+ transition: 0.25s ease-in-out;
+ }
+`;
diff --git a/marketing/src/common/components/Accordion/index.js b/marketing/src/common/components/Accordion/index.js
new file mode 100755
index 000000000..1a276fa62
--- /dev/null
+++ b/marketing/src/common/components/Accordion/index.js
@@ -0,0 +1,127 @@
+import React from 'react'
+import PropTypes from 'prop-types'
+import {
+ AccordionWrapper,
+ AccordionItemWrapper,
+ AccordionTitleWrapper,
+ AccordionItemButtonWrapper,
+ AccordionBodyWrapper,
+ IconWrapper,
+ OpenIcon,
+ CloseIcon,
+} from './accordion.style'
+
+const Accordion = ({
+ className,
+ children,
+ allowZeroExpanded = true,
+ preExpanded = [],
+}) => {
+ // Add all classs to an array
+ const addAllClasses = ['reusecore__accordion']
+
+ // className prop checking
+ if (className) {
+ addAllClasses.push(className)
+ }
+
+ return (
+
+ {children}
+
+ )
+}
+
+const AccordionItem = ({ className, children, uuid }) => {
+ // Add all classs to an array
+ const addAllClasses = ['accordion__item']
+
+ // className prop checking
+ if (className) {
+ addAllClasses.push(className)
+ }
+
+ return (
+
+ {children}
+
+ )
+}
+
+const AccordionTitle = ({ className, children }) => {
+ // Add all classs to an array
+ const addAllClasses = ['accordion__header']
+
+ // className prop checking
+ if (className) {
+ addAllClasses.push(className)
+ }
+
+ return (
+
+ {children}
+
+ )
+}
+
+const AccordionBody = ({ className, children }) => {
+ // Add all classs to an array
+ const addAllClasses = ['accordion__body']
+
+ // className prop checking
+ if (className) {
+ addAllClasses.push(className)
+ }
+
+ return (
+
+ {children}
+
+ )
+}
+
+Accordion.propTypes = {
+ /** ClassName of the Accordion. Default class is reusecore__accordion*/
+ className: PropTypes.string,
+
+ /** Used to render any component */
+ children: PropTypes.element,
+}
+
+AccordionItem.propTypes = {
+ /** ClassName of the AccordionItem. Default class is accordion__item */
+ className: PropTypes.string,
+
+ /** Used to render any component */
+ children: PropTypes.element,
+}
+
+AccordionTitle.propTypes = {
+ /** ClassName of the AccordionTitle. Default class is accordion__header */
+ className: PropTypes.string,
+
+ /** Used to render any component */
+ children: PropTypes.element,
+}
+
+AccordionBody.propTypes = {
+ /** ClassName of the AccordionBody. Default class is accordion__body */
+ className: PropTypes.string,
+
+ /** Used to render any component */
+ children: PropTypes.element,
+}
+
+export {
+ Accordion,
+ AccordionItem,
+ AccordionTitle,
+ AccordionBody,
+ IconWrapper,
+ OpenIcon,
+ CloseIcon,
+}
diff --git a/marketing/src/common/components/Alert/alert.style.js b/marketing/src/common/components/Alert/alert.style.js
new file mode 100755
index 000000000..d6464f2c8
--- /dev/null
+++ b/marketing/src/common/components/Alert/alert.style.js
@@ -0,0 +1,41 @@
+import styled from 'styled-components';
+import { variant } from 'styled-system';
+import { themeGet } from '@styled-system/theme-get';
+import { colorStyle } from '../customVariant';
+import { base } from '../base';
+
+const AlertStyle = styled.div`
+ /* Alert default style */
+ padding: 20px 25px;
+ border-radius: 4px;
+ border-width: 1px;
+ border-style: solid;
+ border-color: ${themeGet('colors.borderColor', '#dadada')};
+ font-size: ${themeGet('fontSizes.4', '16')}px;
+ color: ${themeGet('colors.textColor', '#484848')};
+
+ p {
+ &:last-child {
+ margin-bottom: 0;
+ }
+ }
+
+ /* Material style goes here */
+ &.is-material {
+ box-shadow: 0px 1px 5px 0px rgba(0, 0, 0, 0.2),
+ 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 3px 1px -2px rgba(0, 0, 0, 0.12);
+ }
+
+ /* Style system custome color variant */
+ ${colorStyle}
+ ${base}
+`;
+
+// prop types can also be added from the style functions
+AlertStyle.propTypes = {
+ ...variant.propTypes,
+};
+
+AlertStyle.displayName = 'AlertStyle';
+
+export default AlertStyle;
diff --git a/marketing/src/common/components/Alert/index.js b/marketing/src/common/components/Alert/index.js
new file mode 100755
index 000000000..6ee88a04a
--- /dev/null
+++ b/marketing/src/common/components/Alert/index.js
@@ -0,0 +1,40 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import AlertStyle from './alert.style';
+
+const Alert = ({ className, isMaterial, children, ...props }) => {
+ // Add all classs to an array
+ const addAllClasses = ['reusecore__alert'];
+
+ // className prop checking
+ if (className) {
+ addAllClasses.push(className);
+ }
+
+ // isMaterial prop checking
+ if (isMaterial) {
+ addAllClasses.push('is-material');
+ }
+
+ return (
+
+ {children}
+
+ );
+};
+
+Alert.propTypes = {
+ /** ClassName of the Alert */
+ className: PropTypes.string,
+
+ /** Add Material effect */
+ isMaterial: PropTypes.bool,
+
+ /** Used to render icon, button, text or any elements inside the Alert.
+ * This can be a string or any component. */
+ children: PropTypes.element,
+};
+
+Alert.defaultProps = {};
+
+export default Alert;
diff --git a/marketing/src/common/components/Animation/index.js b/marketing/src/common/components/Animation/index.js
new file mode 100755
index 000000000..2c3a4f593
--- /dev/null
+++ b/marketing/src/common/components/Animation/index.js
@@ -0,0 +1,20 @@
+import { css, keyframes } from 'styled-components';
+
+const spinner = keyframes`
+ 0% {
+ transform: rotate(0deg);
+ }
+ 50% {
+ transform: rotate(180deg);
+ opacity: 0.5;
+ }
+ 100% {
+ transform: rotate(360deg);
+ }
+`;
+
+const AnimSpinner = css`
+ animation: ${spinner} 1s linear infinite;
+`;
+
+export { AnimSpinner };
diff --git a/marketing/src/common/components/BlogPost/index.js b/marketing/src/common/components/BlogPost/index.js
new file mode 100755
index 000000000..e248e96a0
--- /dev/null
+++ b/marketing/src/common/components/BlogPost/index.js
@@ -0,0 +1,36 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import NextImage from '../NextImage';
+
+const BlogPost = ({ className, thumbUrl, title, excerpt, link }) => {
+ // Add all classes to an array
+ const addAllClasses = ['blog_post'];
+
+ // className prop checking
+ if (className) {
+ addAllClasses.push(className);
+ }
+
+ return (
+
+
+
+
+
+
{title}
+
{excerpt}
+ {link &&
{link}
}
+
+
+ );
+};
+
+BlogPost.propTypes = {
+ className: PropTypes.string,
+ thumbUrl: PropTypes.object,
+ title: PropTypes.string,
+ excerpt: PropTypes.string,
+ link: PropTypes.element,
+};
+
+export default BlogPost;
diff --git a/marketing/src/common/components/Box/index.js b/marketing/src/common/components/Box/index.js
new file mode 100755
index 000000000..a56c9058a
--- /dev/null
+++ b/marketing/src/common/components/Box/index.js
@@ -0,0 +1,149 @@
+import React from 'react'
+import PropTypes from 'prop-types'
+import styled, { css } from 'styled-components'
+import {
+ flexWrap,
+ flexDirection,
+ alignItems,
+ justifyContent,
+} from 'styled-system'
+import { base, themed } from '../base'
+
+const BoxWrapper = styled('div')(
+ base,
+ themed('Box'),
+ (props) =>
+ props.flexBox &&
+ css(
+ { display: 'flex' },
+ flexWrap,
+ flexDirection,
+ alignItems,
+ justifyContent,
+ themed('FlexBox')
+ )
+)
+
+const Box = ({ children, ...props }) => (
+ {children}
+)
+
+export default Box
+
+Box.propTypes = {
+ children: PropTypes.any.isRequired,
+ /** Using this props we can convert our Box Component to a Flex Container or Component */
+ flexBox: PropTypes.bool,
+ as: PropTypes.oneOf([
+ 'div',
+ 'article',
+ 'section',
+ 'address',
+ 'header',
+ 'footer',
+ 'nav',
+ 'main',
+ ]),
+ width: PropTypes.oneOfType([
+ PropTypes.string,
+ PropTypes.number,
+ PropTypes.arrayOf(
+ PropTypes.oneOfType([PropTypes.string, PropTypes.number])
+ ),
+ ]),
+ height: PropTypes.oneOfType([
+ PropTypes.string,
+ PropTypes.number,
+ PropTypes.arrayOf(
+ PropTypes.oneOfType([PropTypes.string, PropTypes.number])
+ ),
+ ]),
+ fontSize: PropTypes.oneOfType([
+ PropTypes.string,
+ PropTypes.number,
+ PropTypes.arrayOf(
+ PropTypes.oneOfType([PropTypes.string, PropTypes.number])
+ ),
+ ]),
+ color: PropTypes.oneOfType([
+ PropTypes.string,
+ PropTypes.number,
+ PropTypes.arrayOf(
+ PropTypes.oneOfType([PropTypes.string, PropTypes.number])
+ ),
+ ]),
+ flex: PropTypes.oneOfType([
+ PropTypes.string,
+ PropTypes.number,
+ PropTypes.arrayOf(
+ PropTypes.oneOfType([PropTypes.string, PropTypes.number])
+ ),
+ ]),
+ order: PropTypes.oneOfType([
+ PropTypes.string,
+ PropTypes.number,
+ PropTypes.arrayOf(
+ PropTypes.oneOfType([PropTypes.string, PropTypes.number])
+ ),
+ ]),
+ alignSelf: PropTypes.oneOfType([
+ PropTypes.string,
+ PropTypes.number,
+ PropTypes.arrayOf(
+ PropTypes.oneOfType([PropTypes.string, PropTypes.number])
+ ),
+ ]),
+ display: PropTypes.oneOfType([
+ PropTypes.string,
+ PropTypes.number,
+ PropTypes.arrayOf(
+ PropTypes.oneOfType([PropTypes.string, PropTypes.number])
+ ),
+ ]),
+ border: PropTypes.oneOfType([
+ PropTypes.string,
+ PropTypes.number,
+ PropTypes.arrayOf(
+ PropTypes.oneOfType([PropTypes.string, PropTypes.number])
+ ),
+ ]),
+ borderTop: PropTypes.oneOfType([
+ PropTypes.string,
+ PropTypes.number,
+ PropTypes.arrayOf(
+ PropTypes.oneOfType([PropTypes.string, PropTypes.number])
+ ),
+ ]),
+ borderRight: PropTypes.oneOfType([
+ PropTypes.string,
+ PropTypes.number,
+ PropTypes.arrayOf(
+ PropTypes.oneOfType([PropTypes.string, PropTypes.number])
+ ),
+ ]),
+ borderBottom: PropTypes.oneOfType([
+ PropTypes.string,
+ PropTypes.number,
+ PropTypes.arrayOf(
+ PropTypes.oneOfType([PropTypes.string, PropTypes.number])
+ ),
+ ]),
+ borderLeft: PropTypes.oneOfType([
+ PropTypes.string,
+ PropTypes.number,
+ PropTypes.arrayOf(
+ PropTypes.oneOfType([PropTypes.string, PropTypes.number])
+ ),
+ ]),
+ borderColor: PropTypes.oneOfType([
+ PropTypes.string,
+ PropTypes.number,
+ PropTypes.arrayOf(
+ PropTypes.oneOfType([PropTypes.string, PropTypes.number])
+ ),
+ ]),
+}
+
+Box.defaultProps = {
+ as: 'div',
+}
diff --git a/marketing/src/common/components/Button/button.style.tsx b/marketing/src/common/components/Button/button.style.tsx
new file mode 100755
index 000000000..72127cd31
--- /dev/null
+++ b/marketing/src/common/components/Button/button.style.tsx
@@ -0,0 +1,67 @@
+import styled from 'styled-components';
+import { alignItems, boxShadow } from 'styled-system';
+import { themeGet } from '@styled-system/theme-get';
+import { buttonStyle, colorStyle, sizeStyle } from '../customVariant';
+import { base } from '../base';
+
+const ButtonStyle = styled.button`
+ /* button default style */
+ cursor: pointer;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ color: ${themeGet('colors.white', '#ffffff')};
+ background-color: ${themeGet('colors.primary', '#028489')};
+ min-height: ${themeGet('heights.3', '48')}px;
+ min-width: ${themeGet('widths.3', '48')}px;
+ border-radius: ${themeGet('radius.0', '3')}px;
+ font-family: inherit;
+ font-size: ${themeGet('fontSizes.4', '16')}px;
+ font-weight: ${themeGet('fontWeights.4', '500')};
+ text-decoration: none;
+ text-transform: capitalize;
+ padding-top: ${themeGet('space.2', '8')}px;
+ padding-bottom: ${themeGet('space.2', '8')}px;
+ padding-left: ${themeGet('space.4', '15')}px;
+ padding-right: ${themeGet('space.4', '15')}px;
+ border: 0;
+ transition: all 0.3s ease;
+ span.btn-text {
+ padding-left: ${themeGet('space.1', '4')}px;
+ padding-right: ${themeGet('space.1', '4')}px;
+ }
+ span.btn-icon {
+ display: flex;
+ > div {
+ display: flex !important;
+ }
+ }
+
+ &:focus {
+ outline: none;
+ }
+
+ /* Material style goes here */
+ &.is-material {
+ box-shadow: 0px 1px 5px 0px rgba(0, 0, 0, 0.2),
+ 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 3px 1px -2px rgba(0, 0, 0, 0.12);
+ }
+
+ /* When button on loading stage */
+ &.is-loading {
+ .btn-text {
+ padding-left: ${themeGet('space.2', '8')}px;
+ padding-right: ${themeGet('space.2', '8')}px;
+ }
+ }
+
+ /* Style system support */
+ ${alignItems}
+ ${boxShadow}
+ ${buttonStyle}
+ ${colorStyle}
+ ${sizeStyle}
+ ${base}
+`;
+
+export default ButtonStyle;
diff --git a/marketing/src/common/components/Button/index.tsx b/marketing/src/common/components/Button/index.tsx
new file mode 100755
index 000000000..586abebce
--- /dev/null
+++ b/marketing/src/common/components/Button/index.tsx
@@ -0,0 +1,148 @@
+import React, { Fragment } from 'react';
+import PropTypes from 'prop-types';
+import ButtonStyle from './button.style';
+import Loader from '../Loader';
+
+type ButtonProps = {
+ type: 'button' | 'submit' | 'reset';
+ title?: string;
+ icon?: React.ReactNode;
+ disabled?: boolean;
+ iconPosition?: 'left' | 'right';
+ onClick?: (event: React.MouseEvent) => void;
+ loader?: React.ReactNode;
+ loaderColor?: string;
+ isMaterial?: boolean;
+ isLoading?: boolean;
+ className?: string;
+ colors?:
+ | 'primary'
+ | 'secondary'
+ | 'warning'
+ | 'error'
+ | 'primaryWithBg'
+ | 'secondaryWithBg'
+ | 'warningWithBg'
+ | 'errorWithBg';
+};
+
+const Button = ({
+ type,
+ title,
+ icon,
+ disabled,
+ iconPosition,
+ onClick,
+ loader,
+ loaderColor,
+ isMaterial,
+ isLoading,
+ className,
+ ...props
+}: ButtonProps) => {
+ // Add all classs to an array
+ const addAllClasses = ['reusecore__button'];
+
+ // isLoading prop checking
+ if (isLoading) {
+ addAllClasses.push('is-loading');
+ }
+
+ // isMaterial prop checking
+ if (isMaterial) {
+ addAllClasses.push('is-material');
+ }
+
+ // className prop checking
+ if (className) {
+ addAllClasses.push(className);
+ }
+
+ // Checking button loading state
+ const buttonIcon =
+ isLoading !== false ? (
+
+ {loader ? loader : }
+
+ ) : (
+ icon && {icon}
+ );
+
+ // set icon position
+ const position = iconPosition || 'right';
+
+ return (
+
+ {position === 'left' && buttonIcon}
+ {title && {title} }
+ {position === 'right' && buttonIcon}
+
+ );
+};
+
+Button.propTypes = {
+ /** ClassName of the button */
+ className: PropTypes.string,
+
+ /** Add icon */
+ type: PropTypes.oneOf(['button', 'submit', 'reset']),
+
+ /** Add icon */
+ icon: PropTypes.object,
+
+ /** Add loader */
+ loader: PropTypes.object,
+
+ /** Add Material effect */
+ isMaterial: PropTypes.bool,
+
+ /** Button Loading state */
+ isLoading: PropTypes.bool,
+
+ /** Button Loading state */
+ loaderColor: PropTypes.string,
+
+ /** If true button will be disabled */
+ disabled: PropTypes.bool,
+
+ /** Adjust your icon and loader position [if you use loader] */
+ iconPosition: PropTypes.oneOf(['left', 'right']),
+
+ /** Variant change button shape */
+ variant: PropTypes.oneOf(['textButton', 'outlined', 'fab', 'extendedFab']),
+
+ /** primary || secondary || warning || error change text and border color.
+ * And primaryWithBg || secondaryWithBg || warningWithBg || errorWithBg change text, border and background color */
+ colors: PropTypes.oneOf([
+ 'primary',
+ 'secondary',
+ 'warning',
+ 'error',
+ 'primaryWithBg',
+ 'secondaryWithBg',
+ 'warningWithBg',
+ 'errorWithBg',
+ ]),
+
+ /**
+ * Gets called when the user clicks on the button
+ */
+ onClick: PropTypes.func,
+};
+
+Button.defaultProps = {
+ disabled: false,
+ isMaterial: false,
+ isLoading: false,
+ type: 'button',
+};
+
+export default Button;
diff --git a/marketing/src/common/components/Card/index.js b/marketing/src/common/components/Card/index.js
new file mode 100755
index 000000000..e375f957e
--- /dev/null
+++ b/marketing/src/common/components/Card/index.js
@@ -0,0 +1,54 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import styled from 'styled-components';
+import {
+ borders,
+ borderColor,
+ borderRadius,
+ boxShadow,
+ backgroundImage,
+ backgroundSize,
+ backgroundPosition,
+ backgroundRepeat,
+ opacity,
+} from 'styled-system';
+import { cards } from '../customVariant';
+import { base, themed } from '../base';
+
+const CardWrapper = styled('div')(
+ base,
+ borders,
+ borderColor,
+ borderRadius,
+ boxShadow,
+ backgroundImage,
+ backgroundSize,
+ backgroundPosition,
+ backgroundRepeat,
+ opacity,
+ cards,
+ themed('Card')
+);
+
+const Card = ({ children, ...props }) => (
+ {children}
+);
+
+Card.propTypes = {
+ children: PropTypes.any,
+ ...borders.propTypes,
+ ...borderColor.propTypes,
+ ...borderRadius.propTypes,
+ ...boxShadow.propTypes,
+ ...backgroundImage.propTypes,
+ ...backgroundSize.propTypes,
+ ...backgroundPosition.propTypes,
+ ...backgroundRepeat.propTypes,
+ ...opacity.propTypes,
+ ...cards.propTypes,
+};
+
+Card.defaultProps = {
+ boxShadow: '0px 20px 35px rgba(0, 0, 0, 0.05)',
+};
+export default Card;
diff --git a/marketing/src/common/components/Checkbox/checkbox.group.js b/marketing/src/common/components/Checkbox/checkbox.group.js
new file mode 100755
index 000000000..1bd4c9942
--- /dev/null
+++ b/marketing/src/common/components/Checkbox/checkbox.group.js
@@ -0,0 +1,18 @@
+// import React, { useState, Fragment } from 'react';
+// import PropTypes from 'prop-types';
+// import CheckBoxStyle from './checkbox.style';
+// import CheckBox from './index';
+
+// const CheckBoxGroup = props => {
+// const { data } = props;
+// console.log(data);
+// return (
+//
+// {Object.keys(data).forEach((key, index) => {
+// // console.log(key, data[key], 'moma');
+// ;
+// })}
+//
+// );
+// };
+// export default CheckBoxGroup;
diff --git a/marketing/src/common/components/Checkbox/checkbox.style.js b/marketing/src/common/components/Checkbox/checkbox.style.js
new file mode 100755
index 000000000..0811ba4cc
--- /dev/null
+++ b/marketing/src/common/components/Checkbox/checkbox.style.js
@@ -0,0 +1,96 @@
+import styled from 'styled-components';
+import { themeGet } from '@styled-system/theme-get';
+import { base } from '../base';
+
+const CheckBoxStyle = styled.div`
+ display: inline-flex;
+ /* Switch label default style */
+ .reusecore__field-label {
+ color: ${themeGet('colors.textColor', '#484848')};
+ font-size: ${themeGet('fontSizes.4', '16')}px;
+ font-weight: ${themeGet('fontWeights.4', '500')};
+ }
+
+ /* Switch label style when labelPosition on left */
+ &.label_left {
+ label {
+ display: flex;
+ align-items: center;
+ .reusecore__field-label {
+ margin-right: ${themeGet('space.3', '10')}px;
+ }
+ }
+ }
+
+ /* Switch label style when labelPosition on right */
+ &.label_right {
+ label {
+ display: flex;
+ flex-direction: row-reverse;
+ align-items: center;
+
+ .reusecore__field-label {
+ margin-left: ${themeGet('space.3', '10')}px;
+ }
+ }
+ }
+
+ /* Checkbox default style */
+ input[type='checkbox'] {
+ &.checkbox {
+ opacity: 0;
+ position: absolute;
+ margin: 0;
+ z-index: -1;
+ width: 0;
+ height: 0;
+ overflow: hidden;
+ pointer-events: none;
+
+ &:checked + div {
+ border-color: ${themeGet('colors.primary', '#028489')};
+ background-color: ${themeGet('colors.primary', '#028489')};
+ &::after {
+ opacity: 1;
+ visibility: visible;
+ transform: rotate(45deg) scale(1);
+ }
+ }
+ }
+ + div {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ width: 16px;
+ height: 16px;
+ border-radius: 3px;
+ border: 1px solid ${themeGet('colors.borderColor', '#dadada')};
+ position: relative;
+ transition: all 0.3s ease;
+ &::after {
+ content: '';
+ width: 4px;
+ height: 10px;
+ transform: rotate(45deg) scale(0.8);
+ border-bottom: 2px solid ${themeGet('colors.white', '#ffffff')};
+ border-right: 2px solid ${themeGet('colors.white', '#ffffff')};
+ position: absolute;
+ top: 0;
+ opacity: 0;
+ visibility: hidden;
+ transition-property: opacity, visibility;
+ transition-duration: 0.3s;
+ }
+ }
+ }
+
+ /* support base component props */
+ ${base}
+`;
+
+// prop types can also be added from the style functions
+CheckBoxStyle.propTypes = {};
+
+CheckBoxStyle.displayName = 'CheckBoxStyle';
+
+export default CheckBoxStyle;
diff --git a/marketing/src/common/components/Checkbox/index.js b/marketing/src/common/components/Checkbox/index.js
new file mode 100755
index 000000000..fb3afd1f0
--- /dev/null
+++ b/marketing/src/common/components/Checkbox/index.js
@@ -0,0 +1,101 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import useToggle from '../useToggle';
+import CheckBoxStyle from './checkbox.style';
+
+const CheckBox = ({
+ className,
+ isChecked,
+ labelText,
+ value,
+ id,
+ htmlFor,
+ labelPosition,
+ isMaterial,
+ disabled,
+ ...props
+}) => {
+ // use toggle hooks
+ const [toggleValue, toggleHandler] = useToggle(isChecked);
+
+ // Add all classs to an array
+ const addAllClasses = ['reusecore__checkbox'];
+
+ // Add label position class
+ if (labelPosition) {
+ addAllClasses.push(`label_${labelPosition}`);
+ }
+
+ // isMaterial prop checking
+ if (isMaterial) {
+ addAllClasses.push('is-material');
+ }
+
+ // className prop checking
+ if (className) {
+ addAllClasses.push(className);
+ }
+
+ // label control
+ const LabelField = labelText && (
+ {labelText}
+ );
+
+ const position = labelPosition || 'right';
+
+ return (
+
+
+ {position === 'left' || position === 'right' ? LabelField : ''}
+
+
+
+
+ );
+};
+
+CheckBox.propTypes = {
+ /** ClassName of the Checkbox */
+ className: PropTypes.string,
+
+ /** labelText of the checkbox field */
+ labelText: PropTypes.string,
+
+ /**
+ * Note: id and htmlFor must be same.
+ */
+ htmlFor: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
+
+ /** Set checkbox id in number || string */
+ id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
+
+ /** value of the checkbox field */
+ value: PropTypes.string,
+
+ /** labelText of the checkbox field */
+ labelPosition: PropTypes.oneOf(['right', 'left']),
+
+ /** Checkbox toggle state based on isChecked prop */
+ isChecked: PropTypes.bool,
+
+ /** disabled of the checkbox field */
+ disabled: PropTypes.bool,
+};
+
+/** Checkbox default proptype */
+CheckBox.defaultProps = {
+ isChecked: false,
+ labelText: 'Checkbox label',
+ labelPosition: 'right',
+ disabled: false,
+};
+export default CheckBox;
diff --git a/marketing/src/common/components/DatePicker/datepicker.style.js b/marketing/src/common/components/DatePicker/datepicker.style.js
new file mode 100755
index 000000000..100c462b6
--- /dev/null
+++ b/marketing/src/common/components/DatePicker/datepicker.style.js
@@ -0,0 +1,23 @@
+import styled from 'styled-components';
+import { themeGet } from '@styled-system/theme-get';
+import { base } from '../base';
+
+import ThemedStyleSheet from 'react-with-styles/lib/ThemedStyleSheet';
+import aphroditeInterface from 'react-with-styles-interface-aphrodite';
+import DefaultTheme from 'react-dates/lib/theme/DefaultTheme';
+
+ThemedStyleSheet.registerInterface(aphroditeInterface);
+ThemedStyleSheet.registerTheme(DefaultTheme);
+
+const DatePickerStyle = styled.div``;
+
+// prop types can also be added from the style functions
+DatePickerStyle.propTypes = {};
+
+DatePickerStyle.displayName = 'DatePickerStyle';
+
+DatePickerStyle.defaultProps = {
+ // as: 'div'
+};
+
+export default DatePickerStyle;
diff --git a/marketing/src/common/components/DatePicker/index.js b/marketing/src/common/components/DatePicker/index.js
new file mode 100755
index 000000000..d63a8a702
--- /dev/null
+++ b/marketing/src/common/components/DatePicker/index.js
@@ -0,0 +1,132 @@
+import React, { Fragment, Component } from 'react';
+import PropTypes from 'prop-types';
+import { SingleDatePicker } from 'react-dates';
+import 'react-dates/lib/css/_datepicker.css';
+import DatePickerStyle from './datepicker.style';
+// import moment from 'moment';
+
+class DatePicker extends Component {
+ constructor(props) {
+ super(props);
+ let date = null;
+ this.state = {
+ focused: false,
+ date,
+ dateFormat: 'l',
+ };
+ this.onDateChangeFunc = this.onDateChangeFunc.bind(this);
+ this.onFocusChangeFunc = this.onFocusChangeFunc.bind(this);
+ }
+
+ onDateChangeFunc = (date) => {
+ // ********* Date passing will be START here.... *********
+ // const { dateFormat } = this.state;
+ // const newDate = date.format(dateFormat);
+ // ********* Date passing will be END here.... *********
+ this.setState({ date });
+ };
+
+ onFocusChangeFunc = ({ focused }) => {
+ this.setState({ focused });
+ };
+
+ render() {
+ const { focused, date } = this.state;
+ const {
+ className,
+ labelText,
+ labelPosition,
+ item,
+ placeholder,
+ disabled,
+ showClearDate,
+ isRTL,
+ orientation,
+ anchorDirection,
+ withPortal,
+ withFullScreenPortal,
+ ...props
+ } = this.props;
+
+ // Add all classs to an array **************
+ const addAllClasses = ['reusecore__DatePicker'];
+ // Add label position class **************
+ if (labelPosition) {
+ addAllClasses.push(`label_${labelPosition}`);
+ }
+ // label control **************
+ const position = labelPosition || 'right';
+ const LabelField = labelText && (
+ {labelText}
+ );
+ // className prop checking **************
+ if (className) {
+ addAllClasses.push(className);
+ }
+
+ // DatePicker Props List
+ const datePickerPropsOptions = {
+ id: item && item.id ? item.id : 'unique_id',
+ date,
+ focused,
+ placeholder,
+ disabled,
+ isRTL,
+ showClearDate,
+ orientation,
+ anchorDirection,
+ withPortal,
+ withFullScreenPortal,
+ onFocusChange: this.onFocusChangeFunc,
+ onDateChange: this.onDateChangeFunc,
+ ...props,
+ };
+ // moment.locale('pl');
+ return (
+
+
+
+ {position === 'left' || position === 'right' || position === 'top'
+ ? LabelField
+ : null}
+
+
+ {position === 'bottom' && LabelField}
+
+
+
+ );
+ }
+}
+
+DatePicker.propTypes = {
+ /** labelText of the date-picker field */
+ labelText: PropTypes.string,
+ /** labelText of the date-picker field */
+ labelPosition: PropTypes.oneOf(['top', 'bottom', 'right', 'left']),
+ /** placeholder of the date-picker field */
+ placeholder: PropTypes.string,
+ /** disabled of the date-picker field */
+ disabled: PropTypes.bool,
+ /** showClearDate of the date-picker field */
+ showClearDate: PropTypes.bool,
+ /** isRTL of the date-picker field */
+ isRTL: PropTypes.bool,
+ /** orientation of the date-picker field */
+ orientation: PropTypes.oneOf(['horizontal', 'vertical']),
+ /** anchorDirection of the date-picker field */
+ anchorDirection: PropTypes.oneOf(['left', 'right']),
+ /** withPortal of the date-picker field */
+ withPortal: PropTypes.bool,
+ /** withFullScreenPortal of the date-picker field */
+ withFullScreenPortal: PropTypes.bool,
+};
+
+/** RangeBox default proptype */
+DatePicker.defaultProps = {
+ labelText: 'ReuseCore DatePicker',
+ labelPosition: 'top',
+};
+export default DatePicker;
diff --git a/marketing/src/common/components/DateRangePicker/daterangepicker.style.js b/marketing/src/common/components/DateRangePicker/daterangepicker.style.js
new file mode 100755
index 000000000..3df1dfa3a
--- /dev/null
+++ b/marketing/src/common/components/DateRangePicker/daterangepicker.style.js
@@ -0,0 +1,23 @@
+import styled from 'styled-components';
+import { themeGet } from '@styled-system/theme-get';
+import { base } from '../base';
+
+import ThemedStyleSheet from 'react-with-styles/lib/ThemedStyleSheet';
+import aphroditeInterface from 'react-with-styles-interface-aphrodite';
+import DefaultTheme from 'react-dates/lib/theme/DefaultTheme';
+
+ThemedStyleSheet.registerInterface(aphroditeInterface);
+ThemedStyleSheet.registerTheme(DefaultTheme);
+
+const DateRangePickerStyle = styled.div``;
+
+// prop types can also be added from the style functions
+DateRangePickerStyle.propTypes = {};
+
+DateRangePickerStyle.displayName = 'DateRangePickerStyle';
+
+DateRangePickerStyle.defaultProps = {
+ // as: 'div'
+};
+
+export default DateRangePickerStyle;
diff --git a/marketing/src/common/components/DateRangePicker/index.js b/marketing/src/common/components/DateRangePicker/index.js
new file mode 100755
index 000000000..fc9f954ab
--- /dev/null
+++ b/marketing/src/common/components/DateRangePicker/index.js
@@ -0,0 +1,190 @@
+import React, { Fragment, Component } from 'react';
+import PropTypes from 'prop-types';
+import { DateRangePicker } from 'react-dates';
+import 'react-dates/lib/css/_datepicker.css';
+import DateRangePickerStyle from './daterangepicker.style';
+import moment from 'moment';
+
+class DateRangePickerBox extends Component {
+ constructor(props) {
+ super(props);
+ const { item } = this.props;
+ let date,
+ startDate,
+ endDate = null;
+ const separator = item && item.separator ? item.separator : '-';
+ const dateFormat = item && item.format ? item.format : 'llll';
+ if (date) {
+ const dates = date.split(` ${separator} `);
+ startDate = moment(dates[0], dateFormat);
+ endDate = moment(dates[1], dateFormat);
+ }
+ this.state = {
+ focusedInput: null,
+ startDate,
+ endDate,
+ dateFormat,
+ };
+ this.onDateChangeFunc = this.onDateChangeFunc.bind(this);
+ this.onFocusChangeFunc = this.onFocusChangeFunc.bind(this);
+ }
+
+ onDateChangeFunc = ({ startDate, endDate }) => {
+ // ********* Date passing will be START here.... *********
+ // const { item } = this.props;
+ // const { dateFormat, separator } = this.state;
+ // if (!startDate && !endDate) {
+ // this.props.updateData(item, separator);
+ // return;
+ // }
+ // this.setState({
+ // startDate,
+ // endDate
+ // });
+ // if (startDate !== null && endDate !== null) {
+ // moment.locale('en');
+ // this.props.updateData(
+ // item,
+ // `${startDate.format(dateFormat)} ${separator} ${endDate.format(
+ // dateFormat
+ // )}`
+ // );
+ // }
+ // ********* Date passing will be END here.... *********
+ this.setState({ startDate, endDate });
+ };
+
+ onFocusChangeFunc = (focusedInput) => {
+ return this.setState({ focusedInput });
+ };
+
+ render() {
+ const { focusedInput, startDate, endDate } = this.state;
+ const {
+ className,
+ labelText,
+ labelPosition,
+ item,
+ startDateId,
+ endDateId,
+ startDatePlaceholderText,
+ endDatePlaceholderText,
+ disabled,
+ showClearDates,
+ isRTL,
+ orientation,
+ anchorDirection,
+ withPortal,
+ withFullScreenPortal,
+ ...props
+ } = this.props;
+
+ // Add all classs to an array **************
+ const addAllClasses = ['reusecore__DatePicker'];
+ // Add label position class **************
+ if (labelPosition) {
+ addAllClasses.push(`label_${labelPosition}`);
+ }
+ // label control **************
+ const position = labelPosition || 'right';
+ const LabelField = labelText && (
+ {labelText}
+ );
+ // className prop checking **************
+ if (className) {
+ addAllClasses.push(className);
+ }
+
+ // DatePicker Props List
+ const datePickerPropsOptions = {
+ startDateId: startDateId ? startDateId : 'start_unique_id',
+ endDateId: endDateId ? endDateId : 'end_date_unique_id',
+ startDate,
+ endDate,
+ focusedInput,
+ startDatePlaceholderText,
+ endDatePlaceholderText,
+ disabled,
+ isRTL,
+ showClearDates,
+ orientation,
+ anchorDirection,
+ withPortal,
+ withFullScreenPortal,
+ onFocusChange: this.onFocusChangeFunc,
+ onDatesChange: this.onDateChangeFunc,
+ ...props,
+ };
+ // if (item && item.locale) {
+ // moment.locale(item.locale);
+ // } else {
+ // moment.locale('en');
+ // }
+ // console.log(datePickerPropsOptions, 'datePickerPropsOptions');
+ return (
+
+
+
+ {position === 'left' || position === 'right' || position === 'top'
+ ? LabelField
+ : null}
+
+ {/* */}
+
+ {position === 'bottom' && LabelField}
+
+
+
+ );
+ }
+}
+
+DateRangePickerBox.propTypes = {
+ /** labelText of the date-picker field */
+ labelText: PropTypes.string,
+ /** labelText of the date-picker field */
+ labelPosition: PropTypes.oneOf(['top', 'bottom', 'right', 'left']),
+ /** startDateId of the date-picker field */
+ startDateId: PropTypes.string.isRequired,
+ /** endDateId of the date-picker field */
+ endDateId: PropTypes.string.isRequired, //
+ /** startDatePlaceholderText of the date-picker field */
+ startDatePlaceholderText: PropTypes.string,
+ /** endDatePlaceholderText of the date-picker field */
+ endDatePlaceholderText: PropTypes.string,
+ /** disabled of the date-picker field */
+ disabled: PropTypes.oneOfType([
+ PropTypes.bool,
+ PropTypes.oneOf(['START_DATE', 'END_DATE']),
+ ]),
+
+ /** showClearDate of the date-picker field */
+ showClearDate: PropTypes.bool,
+ /** isRTL of the date-picker field */
+ isRTL: PropTypes.bool,
+ /** orientation of the date-picker field */
+ orientation: PropTypes.oneOf(['horizontal', 'vertical']),
+ /** anchorDirection of the date-picker field */
+ anchorDirection: PropTypes.oneOf(['left', 'right']),
+ /** withPortal of the date-picker field */
+ withPortal: PropTypes.bool,
+ /** withFullScreenPortal of the date-picker field */
+ withFullScreenPortal: PropTypes.bool,
+};
+
+/** RangeBox default proptype */
+DateRangePickerBox.defaultProps = {
+ labelText: 'ReuseCore DateRangePickerBox',
+ labelPosition: 'top',
+};
+export default DateRangePickerBox;
diff --git a/marketing/src/common/components/Drawer/index.tsx b/marketing/src/common/components/Drawer/index.tsx
new file mode 100755
index 000000000..c194b5a9a
--- /dev/null
+++ b/marketing/src/common/components/Drawer/index.tsx
@@ -0,0 +1,80 @@
+import React, { Fragment } from 'react';
+import PropTypes from 'prop-types';
+import RcDrawer from 'rc-drawer';
+import motionProps from './motion';
+import 'rc-drawer/assets/index.css';
+
+type DrawerProps = {
+ className?: string;
+ closeButton?: React.ReactNode;
+ width?: string;
+ placement: 'left' | 'right' | 'top' | 'bottom';
+ drawerHandler: React.ReactNode;
+ children: React.ReactNode;
+ closeButtonStyle?: React.CSSProperties;
+ toggleHandler: () => void;
+ open: boolean;
+ level?: any;
+ handler?: boolean;
+};
+
+const Drawer = ({
+ className,
+ children,
+ closeButton,
+ closeButtonStyle,
+ drawerHandler,
+ toggleHandler,
+ placement,
+ open,
+ width = '300px',
+ handler = false,
+ level = null,
+ ...props
+}: DrawerProps) => {
+ // Add all classs to an array
+ const addAllClasses = ['reusecore__drawer'];
+ // const addAllClasses = ['rc-drawer-content-wrapper'];
+
+ // className prop checking
+ if (className) {
+ addAllClasses.push(className);
+ }
+
+ return (
+
+
+
+ {closeButton}
+
+ {children}
+
+
+
+ {drawerHandler}
+
+
+ );
+};
+
+export default Drawer;
diff --git a/marketing/src/common/components/Drawer/motion.ts b/marketing/src/common/components/Drawer/motion.ts
new file mode 100755
index 000000000..e918595ec
--- /dev/null
+++ b/marketing/src/common/components/Drawer/motion.ts
@@ -0,0 +1,17 @@
+export const maskMotion = {
+ motionAppear: true,
+ motionName: 'mask-motion',
+ onAppearEnd: console.warn,
+};
+
+export const motion = (placement: string) => ({
+ motionAppear: true,
+ motionName: `panel-motion-${placement}`,
+});
+
+const motionProps = {
+ maskMotion,
+ motion,
+};
+
+export default motionProps;
diff --git a/marketing/src/common/components/Dropdown/dropdown.style.js b/marketing/src/common/components/Dropdown/dropdown.style.js
new file mode 100755
index 000000000..8e8505196
--- /dev/null
+++ b/marketing/src/common/components/Dropdown/dropdown.style.js
@@ -0,0 +1,33 @@
+import styled from 'styled-components';
+
+export const DropdownMenuWrapper = styled.div`
+ position: relative;
+ cursor: pointer;
+ transition: 0.2s ease-in-out;
+`;
+
+export const DropdownMenuItemsWrapper = styled.ul`
+ margin-top: 40px;
+ padding: 0;
+ list-style: none;
+ background-color: #ffffff;
+ position: absolute;
+ top: 0;
+ left: ${(props) => (props.dropdownDirection === 'left' ? '0' : 'auto')};
+ right: ${(props) => (props.dropdownDirection === 'right' ? '0' : 'auto')};
+ z-index: 15;
+ min-width: 190px;
+ box-shadow: 0 3px 10px rgba(0, 0, 0, 0.16);
+ border-radius: 3px;
+`;
+
+export const DropdownMenuItemWrapper = styled.li`
+ padding: 10px 15px;
+ transition: background-color 0.3s ease-in-out;
+ a {
+ display: block;
+ }
+ &:hover {
+ background-color: #e2e2e2;
+ }
+`;
diff --git a/marketing/src/common/components/Dropdown/index.js b/marketing/src/common/components/Dropdown/index.js
new file mode 100755
index 000000000..8fdc94be7
--- /dev/null
+++ b/marketing/src/common/components/Dropdown/index.js
@@ -0,0 +1,55 @@
+import React, { useState, useEffect } from 'react';
+import {
+ DropdownMenuWrapper,
+ DropdownMenuItemsWrapper,
+ DropdownMenuItemWrapper,
+} from './dropdown.style';
+
+const DropdownMenu = (props) => {
+ const [menuState, setMenuState] = useState({
+ show: false,
+ });
+
+ useEffect(() => {
+ window.addEventListener('click', handleDocumentClick);
+ return () => {
+ window.removeEventListener('click', handleDocumentClick);
+ };
+ });
+
+ const handleToggle = () => {
+ setMenuState((prevState) => ({
+ ...menuState,
+ show: !prevState.show,
+ }));
+ };
+
+ const handleDocumentClick = () => {
+ if (menuState.show) {
+ handleToggle();
+ }
+ };
+
+ const { content, dropdownItems, dropdownDirection, className } = props;
+
+ return (
+ e.stopPropagation()}>
+ {content}
+ {menuState.show && (
+
+ {dropdownItems &&
+ dropdownItems.map((item, index) => (
+
+ {item}
+
+ ))}
+
+ )}
+
+ );
+};
+
+export default DropdownMenu;
diff --git a/marketing/src/common/components/FeatureBlock/featureBlock.style.js b/marketing/src/common/components/FeatureBlock/featureBlock.style.js
new file mode 100755
index 000000000..5682efdf0
--- /dev/null
+++ b/marketing/src/common/components/FeatureBlock/featureBlock.style.js
@@ -0,0 +1,94 @@
+import styled from 'styled-components';
+import {
+ color,
+ width,
+ height,
+ display,
+ space,
+ borders,
+ borderColor,
+ boxShadow,
+ borderRadius,
+ flexWrap,
+ alignItems,
+ justifyContent,
+ flexDirection,
+ position,
+ overflow,
+ fontSize,
+ textAlign,
+} from 'styled-system';
+
+// FeatureBlock wrapper style
+const FeatureBlockWrapper = styled.div`
+ &.icon_left {
+ display: flex;
+ .icon__wrapper {
+ flex-shrink: 0;
+ }
+ }
+ &.icon_right {
+ display: flex;
+ flex-direction: row-reverse;
+ .content__wrapper {
+ text-align: right;
+ }
+ .icon__wrapper {
+ flex-shrink: 0;
+ }
+ }
+
+ /* styled system prop support */
+ ${display}
+ ${width}
+ ${height}
+ ${flexWrap}
+ ${flexDirection}
+ ${alignItems}
+ ${justifyContent}
+ ${position}
+ ${color}
+ ${space}
+ ${borders}
+ ${borderColor}
+ ${boxShadow}
+ ${borderRadius}
+ ${overflow}
+`;
+
+// Icon wrapper style
+const IconWrapper = styled.div`
+ ${display}
+ ${width}
+ ${height}
+ ${alignItems}
+ ${justifyContent}
+ ${position}
+ ${color}
+ ${space}
+ ${borders}
+ ${borderColor}
+ ${boxShadow}
+ ${borderRadius}
+ ${overflow}
+ ${fontSize}
+`;
+
+// Content wrapper style
+const ContentWrapper = styled.div`
+ ${width}
+ ${space}
+ ${textAlign}
+`;
+
+// Button wrapper style
+const ButtonWrapper = styled.div`
+ ${display}
+ ${space}
+ ${alignItems}
+ ${flexDirection}
+ ${justifyContent}
+`;
+
+export { IconWrapper, ContentWrapper, ButtonWrapper };
+export default FeatureBlockWrapper;
diff --git a/marketing/src/common/components/FeatureBlock/index.js b/marketing/src/common/components/FeatureBlock/index.js
new file mode 100755
index 000000000..4b99e15a7
--- /dev/null
+++ b/marketing/src/common/components/FeatureBlock/index.js
@@ -0,0 +1,109 @@
+import React, { Fragment } from "react";
+import PropTypes from "prop-types";
+import FeatureBlockWrapper, {
+ IconWrapper,
+ ContentWrapper,
+ ButtonWrapper,
+} from "./featureBlock.style";
+
+const FeatureBlock = ({
+ className,
+ icon,
+ title,
+ button,
+ description,
+ iconPosition,
+ listItems,
+ additionalContent,
+ wrapperStyle,
+ iconStyle,
+ contentStyle,
+ btnWrapperStyle,
+ ...props
+}) => {
+ // Add all classs to an array
+ const addAllClasses = ["feature__block"];
+
+ // Add icon position class
+ if (iconPosition) {
+ addAllClasses.push(`icon_${iconPosition}`);
+ }
+
+ // className prop checking
+ if (className) {
+ addAllClasses.push(className);
+ }
+
+ // check icon value and add
+ const Icon = icon && (
+
+ {icon}
+
+ );
+
+ return (
+
+ {Icon}
+
+ {title || description || listItems || button ? (
+
+
+ {title}
+ {description}
+ {button && (
+
+ {button}
+
+ )}
+ {listItems}
+
+ {additionalContent}
+
+ ) : (
+ ""
+ )}
+
+ );
+};
+
+FeatureBlock.propTypes = {
+ /** ClassName of the FeatureBlock */
+ className: PropTypes.string,
+
+ /** title prop contain a react component. You can use our Heading component from reusecore */
+ title: PropTypes.element,
+
+ /** description prop contain a react component. You can use our Text component from reusecore */
+ description: PropTypes.element,
+
+ /** button prop contain a react component. You can use our Button component from reusecore */
+ button: PropTypes.element,
+
+ /** Set icon position of the FeatureBlock */
+ iconPosition: PropTypes.oneOf(["top", "left", "right"]),
+
+ /** wrapperStyle prop contain these style system props: display, flexWrap, width, height, alignItems,
+ * justifyContent, position, overflow, space, color, borders, borderColor, boxShadow and borderRadius. */
+ wrapperStyle: PropTypes.object,
+
+ /** iconStyle prop contain these style system props: display, width, height, alignItems, justifyContent,
+ * position, space, fontSize, color, borders, overflow, borderColor, boxShadow and borderRadius. */
+ iconStyle: PropTypes.object,
+
+ /** contentStyle prop contain these style system props: width, textAlign and space. */
+ contentStyle: PropTypes.object,
+
+ /** btnWrapperStyle prop contain these style system props: display, space, alignItems,
+ * flexDirection and justifyContent. */
+ btnWrapperStyle: PropTypes.object,
+};
+
+FeatureBlock.defaultProps = {
+ iconPosition: "top",
+};
+
+export default FeatureBlock;
diff --git a/marketing/src/common/components/FormGroup/formgroup.style.js b/marketing/src/common/components/FormGroup/formgroup.style.js
new file mode 100755
index 000000000..e69de29bb
diff --git a/marketing/src/common/components/FormGroup/index.js b/marketing/src/common/components/FormGroup/index.js
new file mode 100755
index 000000000..e69de29bb
diff --git a/marketing/src/common/components/GlideCarousel/glide.style.js b/marketing/src/common/components/GlideCarousel/glide.style.js
new file mode 100755
index 000000000..91a2f4cad
--- /dev/null
+++ b/marketing/src/common/components/GlideCarousel/glide.style.js
@@ -0,0 +1,116 @@
+import styled from 'styled-components';
+import {
+ width,
+ height,
+ display,
+ space,
+ color,
+ borders,
+ boxShadow,
+ borderRadius,
+ position,
+ top,
+ left,
+ right,
+ bottom,
+ alignItems,
+ justifyContent,
+ flexWrap,
+} from 'styled-system';
+
+// Glide wrapper style
+const GlideWrapper = styled.div`
+ ${width}
+ ${height}
+ ${space}
+`;
+
+// Glide slide wrapper style
+const GlideSlideWrapper = styled.li`
+ ${space}
+ ${color}
+ ${borders}
+ ${boxShadow}
+ ${borderRadius}
+`;
+
+// Button wrapper style
+const ButtonWrapper = styled.div`
+ display: inline-block;
+ ${display}
+ ${space}
+ ${color}
+ ${borders}
+ ${boxShadow}
+ ${borderRadius}
+ ${position}
+ ${top}
+ ${left}
+ ${right}
+ ${bottom}
+`;
+
+// ButtonControlWrapper style
+const ButtonControlWrapper = styled.div`
+ ${display}
+ ${space}
+ ${alignItems}
+ ${justifyContent}
+ ${position}
+ ${top}
+ ${left}
+ ${right}
+ ${bottom}
+`;
+
+// BulletControlWrapper style
+const BulletControlWrapper = styled.div`
+ ${display}
+ ${space}
+ ${alignItems}
+ ${justifyContent}
+ ${flexWrap}
+`;
+
+// BulletButton style
+const BulletButton = styled.button`
+ cursor: pointer;
+ width: 10px;
+ height: 10px;
+ margin: 4px;
+ border: 0;
+ padding: 0;
+ outline: none;
+ border-radius: 50%;
+ background-color: #d6d6d6;
+
+ &:hover,
+ &.glide__bullet--active {
+ background-color: #869791;
+ }
+
+ ${display}
+ ${space}
+ ${color}
+ ${borders}
+ ${boxShadow}
+ ${borderRadius}
+ ${width}
+ ${height}
+`;
+
+// default button style
+const DefaultBtn = styled.button`
+ cursor: pointer;
+ margin: 10px 3px;
+`;
+
+export {
+ GlideSlideWrapper,
+ ButtonControlWrapper,
+ ButtonWrapper,
+ BulletControlWrapper,
+ BulletButton,
+ DefaultBtn,
+};
+export default GlideWrapper;
diff --git a/marketing/src/common/components/GlideCarousel/glideSlide.js b/marketing/src/common/components/GlideCarousel/glideSlide.js
new file mode 100755
index 000000000..a0f93b4b2
--- /dev/null
+++ b/marketing/src/common/components/GlideCarousel/glideSlide.js
@@ -0,0 +1,17 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import { GlideSlideWrapper } from './glide.style';
+
+// Glide Slide wrapper component
+const GlideSlide = ({ children }) => {
+ return (
+ {children}
+ );
+};
+
+GlideSlide.propTypes = {
+ /** Children. */
+ children: PropTypes.element,
+};
+
+export default GlideSlide;
diff --git a/marketing/src/common/components/GlideCarousel/index.js b/marketing/src/common/components/GlideCarousel/index.js
new file mode 100755
index 000000000..4eab04209
--- /dev/null
+++ b/marketing/src/common/components/GlideCarousel/index.js
@@ -0,0 +1,175 @@
+import React, { Fragment, useEffect } from 'react'
+import PropTypes from 'prop-types'
+import Glide from '@glidejs/glide'
+import '@glidejs/glide/dist/css/glide.core.min.css'
+
+import GlideWrapper, {
+ ButtonControlWrapper,
+ ButtonWrapper,
+ BulletControlWrapper,
+ BulletButton,
+ DefaultBtn,
+} from './glide.style'
+
+const GlideCarousel = ({
+ className,
+ children,
+ options,
+ controls,
+ prevButton,
+ nextButton,
+ prevWrapper,
+ nextWrapper,
+ bullets,
+ numberOfBullets,
+ buttonWrapperStyle,
+ bulletWrapperStyle,
+ bulletButtonStyle,
+ carouselSelector,
+}) => {
+ // Add all classs to an array
+ const addAllClasses = ['glide']
+
+ // className prop checking
+ if (className) {
+ addAllClasses.push(className)
+ }
+
+ // number of bullets loop
+ const totalBullets = []
+ for (let i = 0; i < numberOfBullets; i++) {
+ totalBullets.push(i)
+ }
+
+ // Load glide
+ useEffect(() => {
+ const glide = new Glide(
+ carouselSelector ? `#${carouselSelector}` : '#glide',
+ {
+ ...options,
+ }
+ )
+ glide.mount()
+ })
+
+ return (
+
+
+
+ {/** if controls prop true then show glide controls nav */}
+ {controls && (
+
+
+ {prevButton ? prevButton : Prev }
+
+
+ {nextButton ? nextButton : Next }
+
+
+ )}
+
+ {/** if bullets prop true then show glide bullets nav */}
+ {bullets && (
+
+
+ {totalBullets.map((index) => (
+
+ ))}
+
+
+ )}
+
+ )
+}
+
+GlideCarousel.propTypes = {
+ /** className of the GlideCarousel. */
+ className: PropTypes.string,
+
+ /** Children. */
+ children: PropTypes.element,
+
+ /** You can add your custom glid options using this prop. */
+ options: PropTypes.object,
+
+ /** Hide || show controls nav. */
+ controls: PropTypes.bool,
+
+ /** Hide || show bullets nav. */
+ bullets: PropTypes.bool,
+
+ /** This prop only take your slider / carousel / testimonials data length. */
+ numberOfBullets: PropTypes.number,
+
+ /** bulletWrapperStyle is a bullet control wrapper style object prop.
+ * It's contain display, space, alignItems,
+ * justifyContent and flexWrap style-system prop.
+ */
+ bulletWrapperStyle: PropTypes.object,
+
+ /** buttonWrapperStyle is a button control wrapper style object prop.
+ * It's contain same as buttonWrapperStyle style-system prop and
+ * position, left, right, top and bottom.
+ */
+ buttonWrapperStyle: PropTypes.object,
+
+ /** prevWrapper is a previous button wrapper style object prop.
+ * It's contain display, space, bg, borders, boxShadow, borderRadius,
+ * position, top, left, right and bottom style-system prop.
+ */
+ prevWrapper: PropTypes.object,
+
+ /** nextWrapper is a next button wrapper style object prop.
+ * It's contain same as prevWrapper style-system prop.
+ */
+ nextWrapper: PropTypes.object,
+
+ /** Set previous button for glide carousel. */
+ prevButton: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),
+
+ /** Set next button for glide carousel. */
+ nextButton: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),
+
+ /** bulletButtonStyle is a bullet button style object prop.
+ * It's contain display, width, height, space,
+ * bg, borders, boxShadow and borderRadius style-system prop.
+ */
+ bulletButtonStyle: PropTypes.object,
+}
+
+// GlideCarousel default props
+GlideCarousel.defaultProps = {
+ controls: true,
+ bullets: false,
+}
+
+export default GlideCarousel
diff --git a/marketing/src/common/components/HamburgMenu/hamburgMenu.style.tsx b/marketing/src/common/components/HamburgMenu/hamburgMenu.style.tsx
new file mode 100755
index 000000000..9ec3e6e6e
--- /dev/null
+++ b/marketing/src/common/components/HamburgMenu/hamburgMenu.style.tsx
@@ -0,0 +1,72 @@
+import styled from 'styled-components';
+import {
+ width,
+ height,
+ color,
+ space,
+ border,
+ boxShadow,
+ borderRadius,
+} from 'styled-system';
+
+const HamburgMenuWrapper = styled.button<{ barColor: string }>`
+ border: 0;
+ background: transparent;
+ width: 44px;
+ height: 30px;
+ cursor: pointer;
+ ${width}
+ ${height}
+ ${color}
+ ${space}
+ ${border}
+ ${boxShadow}
+ ${borderRadius}
+
+ > span {
+ display: block;
+ width: 100%;
+ height: 2px;
+ margin: 4px 0;
+ float: right;
+ background-color: ${(props) =>
+ props.barColor ? props.barColor : '#10ac84'};
+ transition: all 0.3s ease;
+ &:first-child {
+ margin-top: 0;
+ }
+ &:last-child {
+ width: calc(100% - 10px);
+ margin-bottom: 0;
+ }
+ }
+ &:focus,
+ &:hover {
+ outline: none;
+ > span {
+ &:last-child {
+ width: 100%;
+ }
+ }
+ }
+
+ &:focus,
+ &.active {
+ > span {
+ &:first-child {
+ transform: rotate(45deg);
+ transform-origin: 8px 50%;
+ }
+ &:nth-child(2) {
+ display: none;
+ }
+ &:last-child {
+ width: 100%;
+ transform: rotate(-45deg);
+ transform-origin: 9px 50%;
+ }
+ }
+ }
+`;
+
+export default HamburgMenuWrapper;
diff --git a/marketing/src/common/components/HamburgMenu/index.tsx b/marketing/src/common/components/HamburgMenu/index.tsx
new file mode 100755
index 000000000..50ae18f92
--- /dev/null
+++ b/marketing/src/common/components/HamburgMenu/index.tsx
@@ -0,0 +1,56 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import HamburgMenuWrapper from './hamburgMenu.style';
+
+type HamburgMenuProps = {
+ /** ClassName of the Hamburg menu. */
+ className?: string;
+
+ /** barColor allow to change hambrug menu's bar color. */
+ barColor: string;
+
+ /** wrapperStyle prop allow to change Hamburg menu bg color, width, height, space, boxShadow, border and borderRadius.*/
+ wrapperStyle?: any;
+};
+
+const HamburgMenu = ({
+ className,
+ wrapperStyle,
+ barColor,
+ ...props
+}: HamburgMenuProps) => {
+ // Add all classs to an array
+ const addAllClasses = ['hamburgMenu__bar'];
+
+ // className prop checking
+ if (className) {
+ addAllClasses.push(className);
+ }
+
+ return (
+
+
+
+
+
+ );
+};
+
+HamburgMenu.propTypes = {
+ /** ClassName of the Hamburg menu. */
+ className: PropTypes.string,
+
+ /** barColor allow to change hambrug menu's bar color. */
+ barColor: PropTypes.string,
+
+ /** wrapperStyle prop allow to change Hamburg menu bg color, width, height, space, boxShadow, border and borderRadius.*/
+ wrapperStyle: PropTypes.object,
+};
+
+export default HamburgMenu;
diff --git a/marketing/src/common/components/Heading/index.js b/marketing/src/common/components/Heading/index.js
new file mode 100755
index 000000000..bc19f44f7
--- /dev/null
+++ b/marketing/src/common/components/Heading/index.js
@@ -0,0 +1,89 @@
+import React from 'react'
+import PropTypes from 'prop-types'
+import styled from 'styled-components'
+import {
+ fontFamily,
+ fontWeight,
+ textAlign,
+ lineHeight,
+ letterSpacing,
+} from 'styled-system'
+import { base, themed } from '../base'
+
+const HeadingWrapper = styled('p')(
+ base,
+ fontFamily,
+ fontWeight,
+ textAlign,
+ lineHeight,
+ letterSpacing,
+ themed('Heading')
+)
+
+const Heading = ({ content, ...props }) => (
+ {content}
+)
+
+export default Heading
+
+Heading.propTypes = {
+ content: PropTypes.string,
+ as: PropTypes.oneOf(['h1', 'h2', 'h3', 'h4', 'h5', 'h6']),
+ mt: PropTypes.oneOfType([
+ PropTypes.string,
+ PropTypes.number,
+ PropTypes.arrayOf(
+ PropTypes.oneOfType([PropTypes.string, PropTypes.number])
+ ),
+ ]),
+ mb: PropTypes.oneOfType([
+ PropTypes.string,
+ PropTypes.number,
+ PropTypes.arrayOf(
+ PropTypes.oneOfType([PropTypes.string, PropTypes.number])
+ ),
+ ]),
+ fontFamily: PropTypes.oneOfType([
+ PropTypes.string,
+ PropTypes.number,
+ PropTypes.arrayOf(
+ PropTypes.oneOfType([PropTypes.string, PropTypes.number])
+ ),
+ ]),
+ fontWeight: PropTypes.oneOfType([
+ PropTypes.string,
+ PropTypes.number,
+ PropTypes.arrayOf(
+ PropTypes.oneOfType([PropTypes.string, PropTypes.number])
+ ),
+ ]),
+ textAlign: PropTypes.oneOfType([
+ PropTypes.string,
+ PropTypes.number,
+ PropTypes.arrayOf(
+ PropTypes.oneOfType([PropTypes.string, PropTypes.number])
+ ),
+ ]),
+ lineHeight: PropTypes.oneOfType([
+ PropTypes.string,
+ PropTypes.number,
+ PropTypes.arrayOf(
+ PropTypes.oneOfType([PropTypes.string, PropTypes.number])
+ ),
+ ]),
+ letterSpacing: PropTypes.oneOfType([
+ PropTypes.string,
+ PropTypes.number,
+ PropTypes.arrayOf(
+ PropTypes.oneOfType([PropTypes.string, PropTypes.number])
+ ),
+ ]),
+ ...base.propTypes,
+}
+
+Heading.defaultProps = {
+ as: 'h2',
+ mt: 0,
+ mb: '1rem',
+ fontWeight: 'bold',
+}
diff --git a/marketing/src/common/components/Image/images.png b/marketing/src/common/components/Image/images.png
new file mode 100755
index 000000000..63e22b90c
Binary files /dev/null and b/marketing/src/common/components/Image/images.png differ
diff --git a/marketing/src/common/components/Image/index.js b/marketing/src/common/components/Image/index.js
new file mode 100755
index 000000000..97354d73e
--- /dev/null
+++ b/marketing/src/common/components/Image/index.js
@@ -0,0 +1,29 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import styled from 'styled-components';
+import { base, themed } from '../base';
+
+const ImageWrapper = styled('img')(
+ {
+ display: 'block',
+ maxWidth: '100%',
+ height: 'auto',
+ },
+ base,
+ themed('Image')
+);
+
+const Image = ({ src, alt, ...props }) => (
+
+);
+
+export default Image;
+
+Image.propTypes = {
+ src: PropTypes.string.isRequired,
+ alt: PropTypes.string.isRequired,
+};
+
+Image.defaultProps = {
+ m: 0,
+};
diff --git a/marketing/src/common/components/Input/index.tsx b/marketing/src/common/components/Input/index.tsx
new file mode 100755
index 000000000..7e79eb036
--- /dev/null
+++ b/marketing/src/common/components/Input/index.tsx
@@ -0,0 +1,268 @@
+/* eslint-disable */
+import React, { useState } from 'react';
+import PropTypes from 'prop-types';
+import InputField, { EyeButton } from './input.style';
+
+type InputProps = {
+ label?: string;
+ value?: string | number;
+ onBlur?: (
+ event: React.FocusEvent
+ ) => void;
+ onFocus?: (
+ event: React.FocusEvent
+ ) => void;
+ onChange?: (value: string | number) => void;
+ inputType?: 'text' | 'email' | 'password' | 'number' | 'textarea';
+ isMaterial?: boolean;
+ icon?: React.ReactNode;
+ iconPosition?: 'left' | 'right';
+ passwordShowHide?: boolean;
+ className?: string;
+ placeholder?: string;
+};
+
+const Input = ({
+ label,
+ value,
+ onBlur,
+ onFocus,
+ onChange,
+ inputType,
+ isMaterial,
+ icon,
+ iconPosition,
+ passwordShowHide,
+ className,
+ ...props
+}: InputProps) => {
+ // use toggle hooks
+ const [state, setState] = useState({
+ toggle: false,
+ focus: false,
+ value: '',
+ });
+
+ // toggle function
+ const handleToggle = () => {
+ setState({
+ ...state,
+ toggle: !state.toggle,
+ });
+ };
+
+ // add focus class
+ const handleOnFocus = (
+ event: React.FocusEvent
+ ) => {
+ setState({
+ ...state,
+ focus: true,
+ });
+ if (onFocus) {
+ onFocus(event);
+ }
+ };
+
+ // remove focus class
+ const handleOnBlur = (
+ event: React.FocusEvent
+ ) => {
+ setState({
+ ...state,
+ focus: false,
+ });
+ if (onBlur) {
+ onBlur(event);
+ }
+ };
+
+ // handle input value
+ const handleOnChange = (
+ event: React.ChangeEvent
+ ) => {
+ setState({
+ ...state,
+ value: event.target.value,
+ });
+ if (onChange) {
+ onChange(event.target.value);
+ }
+ };
+
+ // get input focus class
+ const getInputFocusClass = () => {
+ if (state.focus === true || state.value !== '') {
+ return 'is-focus';
+ } else {
+ return '';
+ }
+ };
+
+ // init variable
+ let inputElement, htmlFor;
+
+ // Add all classs to an array
+ const addAllClasses = ['reusecore__input'];
+
+ // Add is-material class
+ if (isMaterial) {
+ addAllClasses.push('is-material');
+ }
+
+ // Add icon position class if input element has icon
+ if (icon && iconPosition) {
+ addAllClasses.push(`icon-${iconPosition}`);
+ }
+
+ // Add new class
+ if (className) {
+ addAllClasses.push(className);
+ }
+
+ // if lable is not empty
+ if (label) {
+ htmlFor = label.replace(/\s+/g, '_').toLowerCase();
+ }
+
+ // Label position
+ const LabelPosition = isMaterial === true ? 'bottom' : 'top';
+
+ // Label field
+ const LabelField = label && {label} ;
+
+ // Input type check
+ switch (inputType) {
+ case 'textarea':
+ inputElement = (
+
+ );
+ break;
+
+ case 'password':
+ inputElement = (
+
+
+ {passwordShowHide && (
+
+
+
+ )}
+
+ );
+ break;
+
+ default:
+ inputElement = (
+
+
+ {icon && {icon} }
+
+ );
+ }
+
+ return (
+
+ {LabelPosition === 'top' && LabelField}
+ {inputElement}
+ {isMaterial && }
+ {LabelPosition === 'bottom' && LabelField}
+
+ );
+};
+
+/** Inout prop type checking. */
+Input.propTypes = {
+ /** className of the Input component. */
+ className: PropTypes.string,
+
+ /** Set input label value. */
+ label: PropTypes.string,
+
+ /** The input value, required for a controlled component. */
+ value: PropTypes.oneOf(['string', 'number']),
+
+ /** Make default input into material style input. */
+ isMaterial: PropTypes.bool,
+
+ /** Password show hide icon button prop [*only for password field]. */
+ passwordShowHide: PropTypes.bool,
+
+ /** Set input type of the input element. Default type is text. */
+ inputType: PropTypes.oneOf([
+ 'text',
+ 'email',
+ 'password',
+ 'number',
+ 'textarea',
+ ]),
+
+ /** Add icon in input field. This prop will not work with password
+ * and textarea field.
+ */
+ icon: PropTypes.object,
+
+ /** Set input field icon position. Default position is 'left'. */
+ iconPosition: PropTypes.oneOf(['left', 'right']),
+
+ /**
+ * @ignore
+ */
+ onBlur: PropTypes.func,
+
+ /**
+ * @ignore
+ */
+ onFocus: PropTypes.func,
+
+ /**
+ * Callback fired when the value is changed.
+ *
+ * @param {object} event The event source of the callback.
+ * You can pull out the new value by accessing `event.target.value`.
+ */
+ onChange: PropTypes.func,
+};
+
+/** Inout default type. */
+Input.defaultProps = {
+ inputType: 'text',
+ isMaterial: false,
+ iconPosition: 'left',
+ onBlur: () => {},
+ onFocus: () => {},
+ onChange: () => {},
+};
+
+export default Input;
diff --git a/marketing/src/common/components/Input/input.style.tsx b/marketing/src/common/components/Input/input.style.tsx
new file mode 100755
index 000000000..921876ddf
--- /dev/null
+++ b/marketing/src/common/components/Input/input.style.tsx
@@ -0,0 +1,240 @@
+import styled from 'styled-components';
+import { themeGet } from '@styled-system/theme-get';
+
+const InputField = styled.div`
+ position: relative;
+
+ /* Input field wrapper */
+ .field-wrapper {
+ position: relative;
+ }
+
+ /* If input has icon then these styel */
+ &.icon-left,
+ &.icon-right {
+ .field-wrapper {
+ display: flex;
+ align-items: center;
+ > .input-icon {
+ position: absolute;
+ top: 0;
+ bottom: auto;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 34px;
+ height: 40px;
+ }
+ }
+ }
+
+ /* When icon position in left */
+ &.icon-left {
+ .field-wrapper {
+ > .input-icon {
+ left: 0;
+ right: auto;
+ }
+ > input {
+ padding-left: 34px;
+ }
+ }
+ }
+
+ /* When icon position in right */
+ &.icon-right {
+ .field-wrapper {
+ > .input-icon {
+ left: auto;
+ right: 0;
+ }
+ > input {
+ padding-right: 34px;
+ }
+ }
+ }
+
+ /* Label default style */
+ label {
+ display: block;
+ color: ${themeGet('colors.labelColor', '#767676')};
+ font-size: ${themeGet('fontSizes.4', '16')}px;
+ font-weight: ${themeGet('fontWeights.4', '500')};
+ margin-bottom: ${themeGet('space.3', '10')}px;
+ transition: 0.2s ease all;
+ }
+
+ /* Input and textarea default style */
+ textarea,
+ input {
+ font-size: 16px;
+ padding: 11px;
+ display: block;
+ width: 100%;
+ color: ${themeGet('colors.textColor', '#484848')};
+ box-shadow: none;
+ border-radius: 4px;
+ box-sizing: border-box;
+ border: 1px solid ${themeGet('colors.inactiveIcon', '#ebebeb')};
+ transition: border-color 0.2s ease;
+ &:focus {
+ outline: none;
+ border-color: ${themeGet('colors.primary', '#028489')};
+ }
+ }
+
+ textarea {
+ min-height: 150px;
+ }
+
+ /* Input material style */
+ &.is-material {
+ label {
+ position: absolute;
+ left: 0;
+ top: 10px;
+ }
+
+ input,
+ textarea {
+ border-radius: 0;
+ border-top: 0;
+ border-left: 0;
+ border-right: 0;
+ padding-left: 0;
+ padding-right: 0;
+ }
+
+ textarea {
+ min-height: 40px;
+ padding-bottom: 0;
+ }
+
+ .highlight {
+ position: absolute;
+ height: 1px;
+ top: auto;
+ left: 50%;
+ bottom: 0;
+ width: 0;
+ pointer-events: none;
+ transition: all 0.2s ease;
+ }
+
+ /* If input has icon then these styel */
+ &.icon-left,
+ &.icon-right {
+ .field-wrapper {
+ flex-direction: row-reverse;
+ > .input-icon {
+ width: auto;
+ }
+ > input {
+ flex: 1;
+ }
+ }
+ }
+
+ /* When icon position in left */
+ &.icon-left {
+ .field-wrapper {
+ > input {
+ padding-left: 20px;
+ }
+ }
+ label {
+ top: -15px;
+ font-size: 12px;
+ }
+ }
+
+ /* When icon position in right */
+ &.icon-right {
+ .field-wrapper {
+ > input {
+ padding-right: 20px;
+ }
+ }
+ }
+
+ /* Material input focus style */
+ &.is-focus {
+ input {
+ border-color: ${themeGet('colors.inactiveIcon', '#ebebeb')};
+ }
+
+ label {
+ top: -16px;
+ font-size: 12px;
+ color: ${themeGet('colors.textColor', '#484848')};
+ }
+
+ .highlight {
+ width: 100%;
+ height: 2px;
+ background-color: ${themeGet('colors.primary', '#028489')};
+ left: 0;
+ }
+ }
+ }
+`;
+
+const EyeButton = styled.button`
+ width: 43px;
+ height: 40px;
+ border: 0;
+ padding: 0;
+ margin: 0;
+ top: 0;
+ right: 0;
+ position: absolute;
+ outline: none;
+ cursor: pointer;
+ box-shadow: none;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ background-color: transparent;
+
+ > span {
+ width: 12px;
+ height: 12px;
+ display: block;
+ border: solid 1px ${themeGet('colors.textColor', '#484848')};
+ border-radius: 75% 15%;
+ transform: rotate(45deg);
+ position: relative;
+
+ &:before {
+ content: '';
+ display: block;
+ width: 4px;
+ height: 4px;
+ border-radius: 50%;
+ left: 3px;
+ top: 3px;
+ position: absolute;
+ border: solid 1px ${themeGet('colors.textColor', '#484848')};
+ }
+ }
+
+ &.eye-closed {
+ > span {
+ &:after {
+ content: '';
+ display: block;
+ width: 1px;
+ height: 20px;
+ left: calc(50% - 1px / 2);
+ top: -4px;
+ position: absolute;
+ background-color: ${themeGet('colors.textColor', '#484848')};
+ transform: rotate(-12deg);
+ }
+ }
+ }
+`;
+
+export { EyeButton };
+
+export default InputField;
diff --git a/marketing/src/common/components/InputGroup/index.js b/marketing/src/common/components/InputGroup/index.js
new file mode 100755
index 000000000..d9595f7b2
--- /dev/null
+++ b/marketing/src/common/components/InputGroup/index.js
@@ -0,0 +1,130 @@
+/* eslint-disable */
+import React, { useState, useRef } from 'react';
+import PropTypes from 'prop-types';
+import useOnClickOutside from 'common/hooks/useOnClickOutside';
+import ComponentWrapper, {
+ Input,
+ SelectWrapper,
+ CurrentOption,
+ Dropdown,
+} from './inputGroup.style';
+
+const InputGroup = ({
+ className,
+ inputType,
+ placeholder,
+ selectOptions,
+ inputValue,
+ inputOnChange,
+ selectOnUpdate,
+ selectedValue,
+ currency,
+}) => {
+ const [state, setState] = useState({
+ open: false,
+ currency,
+ selectedValue,
+ });
+
+ const handleDropdown = () => {
+ setState({
+ ...state,
+ open: !state.open,
+ });
+ };
+
+ const handleSelectedData = (item) => {
+ setState({
+ ...state,
+ open: false,
+ currency: item.title,
+ selectedValue: item.value,
+ });
+ selectOnUpdate(item.value);
+ };
+
+ const dropdownRef = useRef(null);
+ useOnClickOutside(dropdownRef, () => setState({ ...state, open: false }));
+
+ const addAllClasses = ['input_group'];
+ if (className) {
+ addAllClasses.push(className);
+ }
+
+ return (
+
+
+
+
+ {state.currency}
+
+
+
+
+
+ {selectOptions.map((item) => (
+ handleSelectedData(item)}
+ >
+ {item.title}
+
+ ))}
+
+
+
+ );
+};
+
+InputGroup.propTypes = {
+ /** className of the InputGroup. */
+ className: PropTypes.string,
+ /** inputType prop for input field type. This should be a number or text. */
+ inputType: PropTypes.oneOf(['number', 'text']),
+ /** placeholder text for input field type. */
+ placeholder: PropTypes.string,
+ /** Call back function for inout onChange event. */
+ inputOnChange: PropTypes.func,
+ /** currency prop shoude be a string with currency name and symbol. */
+ currency: PropTypes.string,
+ /** selectedValue pron shoube be a currency string without symbol but in lowercase. */
+ selectedValue: PropTypes.string,
+ /** selectOptions prop contain a set of data in array of object form. It has 3 properties id, value and title. */
+ selectOptions: PropTypes.array,
+ /** It contain selected data. */
+ selectOnUpdate: PropTypes.func,
+};
+
+InputGroup.defaultProps = {
+ inputType: 'number',
+ selectOptions: [],
+ inputOnChange: () => {},
+ selectOnUpdate: () => {},
+};
+
+export default InputGroup;
diff --git a/marketing/src/common/components/InputGroup/inputGroup.style.js b/marketing/src/common/components/InputGroup/inputGroup.style.js
new file mode 100755
index 000000000..410c323a5
--- /dev/null
+++ b/marketing/src/common/components/InputGroup/inputGroup.style.js
@@ -0,0 +1,111 @@
+import styled from 'styled-components';
+
+const ComponentWrapper = styled.div`
+ display: flex;
+ align-items: flex-start;
+`;
+
+export const Input = styled.input`
+ width: calc(100% - 180px);
+ height: 65px;
+ font-size: 20px;
+ font-weight: 600;
+ padding: 0 20px;
+ border: 2px solid #f2f2f2;
+ border-right-width: 1px;
+ border-top-left-radius: 10px;
+ border-bottom-left-radius: 10px;
+ color: #294859;
+ @media only screen and (max-width: 1440px) {
+ font-size: 16px;
+ height: 60px;
+ }
+
+ &::-webkit-inner-spin-button,
+ &::-webkit-outer-spin-button {
+ appearance: none;
+ }
+
+ &::placeholder {
+ color: #616970;
+ }
+`;
+
+export const SelectWrapper = styled.div`
+ position: relative;
+ width: 180px;
+`;
+
+export const CurrentOption = styled.div`
+ cursor: pointer;
+ height: 65px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ padding: 0 20px;
+ border: 2px solid #f2f2f2;
+ border-left-width: 1px;
+ border-top-right-radius: 10px;
+ border-bottom-right-radius: 10px;
+ @media only screen and (max-width: 1440px) {
+ height: 60px;
+ }
+
+ .text {
+ color: #294859;
+ margin-right: 20px;
+ font-size: 20px;
+ font-weight: 600;
+ @media only screen and (max-width: 1440px) {
+ font-size: 16px;
+ margin-right: 15px;
+ }
+ }
+`;
+
+export const Dropdown = styled.ul`
+ position: absolute;
+ left: 0;
+ top: 65px;
+ width: 100%;
+ border-radius: 10px;
+ opacity: 0;
+ visibility: hidden;
+ background-color: #ffffff;
+ box-shadow: 0 3px 9px -2px rgba(0, 0, 0, 0.2);
+ overflow: hidden;
+ z-index: 2;
+
+ &.active {
+ opacity: 1;
+ visibility: visible;
+ }
+
+ li {
+ cursor: pointer;
+ font-size: 18px;
+ padding: 15px 20px;
+ color: #616970;
+ border-bottom: 2px solid #f2f2f2;
+ transition: all 0.3s ease;
+ @media only screen and (max-width: 1440px) {
+ font-size: 16px;
+ }
+
+ &:last-child {
+ border-bottom: 0;
+ }
+
+ &:hover {
+ color: #294859;
+ background-color: #f2f2f2;
+ }
+
+ &.selected {
+ color: #294859;
+ font-weight: 600;
+ }
+ }
+`;
+
+export default ComponentWrapper;
diff --git a/marketing/src/common/components/Link/index.js b/marketing/src/common/components/Link/index.js
new file mode 100755
index 000000000..3510f582d
--- /dev/null
+++ b/marketing/src/common/components/Link/index.js
@@ -0,0 +1,28 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import styled from 'styled-components';
+import { base, themed } from '../base';
+
+const LinkWrapper = styled('a')(
+ { textDecoration: 'none', alignItems: 'center' },
+ base,
+ themed('Link')
+);
+
+const Link = ({ children, ...props }) => (
+ {children}
+);
+
+export default Link;
+
+Link.propTypes = {
+ as: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),
+ children: PropTypes.any.isRequired,
+ ...base.propTypes,
+};
+
+Link.defaultProps = {
+ as: 'a',
+ m: 0,
+ display: 'inline-flex',
+};
diff --git a/marketing/src/common/components/List/index.js b/marketing/src/common/components/List/index.js
new file mode 100755
index 000000000..e57bbfa23
--- /dev/null
+++ b/marketing/src/common/components/List/index.js
@@ -0,0 +1,24 @@
+/* eslint-disable */
+import React, { Fragment } from 'react';
+import Link from 'next/link';
+import { ListWrapper } from './list.style';
+
+const List = ({ className, icon, text, link, ...props }) => (
+
+ {link ? (
+
+
+ {icon}
+ {text}
+
+
+ ) : (
+
+ {icon}
+ {text}
+
+ )}
+
+);
+
+export default List;
diff --git a/marketing/src/common/components/List/list.style.js b/marketing/src/common/components/List/list.style.js
new file mode 100755
index 000000000..14b88edfb
--- /dev/null
+++ b/marketing/src/common/components/List/list.style.js
@@ -0,0 +1,5 @@
+import styled from 'styled-components';
+
+const ListWrapper = styled.div``;
+
+export { ListWrapper };
diff --git a/marketing/src/common/components/ListGrid/index.js b/marketing/src/common/components/ListGrid/index.js
new file mode 100755
index 000000000..75a9656f9
--- /dev/null
+++ b/marketing/src/common/components/ListGrid/index.js
@@ -0,0 +1,166 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import Box from '../Box';
+import Button from '../Button';
+import Loader from '../Loader';
+import Text from '../Text';
+
+const LoadMore = ({
+ handleLoadMore,
+ showButton,
+ buttonText,
+ buttonVariant,
+ loaderColor,
+ isLoading,
+ loadMoreComponent,
+ loadMoreWrapperStyle,
+ loadMoreButtonStyle,
+}) => {
+ return (
+ <>
+ {showButton ? (
+
+ {loadMoreComponent ? (
+ loadMoreComponent
+ ) : (
+ }
+ onClick={handleLoadMore}
+ {...loadMoreButtonStyle}
+ />
+ )}
+
+ ) : null}
+ >
+ );
+};
+
+const ListGrid = ({
+ data = [],
+ total,
+ component,
+ columnWidth,
+ postCount,
+ totalPost,
+ pagination,
+ paginationComponent,
+ handleLoadMore,
+ loadMoreComponent,
+ infinityScroll,
+ placeholder,
+ loading,
+ isLoading,
+ limit,
+ buttonText,
+ buttonVariant,
+ loaderColor,
+ componentWrapperStyle,
+ componentContainerStyle,
+ loadMoreWrapperStyle,
+ loadMoreButtonStyle,
+ paginationWrapperStyle,
+ className,
+}) => {
+ const Limit = limit ? Number(limit) : 1;
+ const limits = [];
+ for (let i = 0; i < Limit; i++) {
+ limits.push(i);
+ }
+ // const grabPostNumber = data.length;
+ let showButton = postCount < totalPost;
+
+ return (
+ <>
+
+ {data.length ? (
+ <>
+ {data.map((item, index) => (
+
+ {component(item, index)}
+
+ ))}
+ >
+ ) : null}
+ {loading && (
+ <>
+ {limits.map((index) => (
+
+ {placeholder ? placeholder : }
+
+ ))}
+ >
+ )}
+
+ {postCount < totalPost && (
+
+ )}
+ {paginationComponent && (
+ {paginationComponent}
+ )}
+ >
+ );
+};
+
+ListGrid.propTypes = {
+ data: PropTypes.array.isRequired,
+ totalPost: PropTypes.number,
+ component: PropTypes.func.isRequired,
+ columnWidth: PropTypes.oneOfType([
+ PropTypes.string,
+ PropTypes.number,
+ PropTypes.array,
+ ]),
+ pagination: PropTypes.bool,
+ paginationComponent: PropTypes.element,
+ handleLoadMore: PropTypes.func,
+ loadMoreComponent: PropTypes.element,
+ infinityScroll: PropTypes.bool,
+ placeholder: PropTypes.element,
+ loading: PropTypes.bool,
+ limit: PropTypes.number,
+ buttonText: PropTypes.string,
+ listWrapperStyle: PropTypes.object,
+ componentWrapperStyle: PropTypes.object,
+ componentContainerStyle: PropTypes.object,
+ loadMoreWrapperStyle: PropTypes.object,
+ loadMoreStyle: PropTypes.object,
+ paginationWrapperStyle: PropTypes.object,
+};
+
+ListGrid.defaultProps = {
+ componentWrapperStyle: {
+ flexBox: true,
+ flexWrap: 'wrap',
+ mr: '-1rem',
+ ml: '-1rem',
+ },
+ componentContainerStyle: {
+ pr: '1rem',
+ pl: '1rem',
+ },
+ loadMoreWrapperStyle: {
+ flexBox: true,
+ justifyContent: 'center',
+ mt: '1rem',
+ },
+};
+
+export default ListGrid;
diff --git a/marketing/src/common/components/Loader/index.tsx b/marketing/src/common/components/Loader/index.tsx
new file mode 100755
index 000000000..5e1f31503
--- /dev/null
+++ b/marketing/src/common/components/Loader/index.tsx
@@ -0,0 +1,28 @@
+import React from 'react';
+import LoaderStyle from './loader.style';
+
+type LoaderProps = {
+ className?: string;
+ width?: string | number;
+ height?: string | number;
+ loaderColor?: string;
+};
+
+export function Loader({ loaderColor, className, ...props }: LoaderProps) {
+ // Add all classs to an array
+ const addAllClasses = ['reusecore__loader'];
+
+ // className prop checking
+ if (className) {
+ addAllClasses.push(className);
+ }
+ return (
+
+ );
+}
+
+export default Loader;
diff --git a/marketing/src/common/components/Loader/loader.style.tsx b/marketing/src/common/components/Loader/loader.style.tsx
new file mode 100755
index 000000000..5847e350b
--- /dev/null
+++ b/marketing/src/common/components/Loader/loader.style.tsx
@@ -0,0 +1,27 @@
+import styled from 'styled-components';
+import { variant } from 'styled-system';
+import { colorStyle } from '../customVariant';
+import { AnimSpinner } from '../Animation';
+import { base } from '../base';
+
+const LoaderStyle = styled.span<{ loaderColor?: string }>`
+ /* loader default style */
+ display: inline-flex;
+ width: 14px;
+ height: 14px;
+ border-radius: 50%;
+ overflow: hidden;
+ border-width: 2px;
+ border-style: solid;
+ border-color: ${(props) =>
+ props.loaderColor ? props.loaderColor : '#000000'};
+ border-top-color: transparent !important;
+
+ /* animation goes here */
+ ${AnimSpinner}
+ /* Style system custome color variant */
+ ${colorStyle}
+ ${base}
+`;
+
+export default LoaderStyle;
diff --git a/marketing/src/common/components/Navbar/index.tsx b/marketing/src/common/components/Navbar/index.tsx
new file mode 100755
index 000000000..fc4066108
--- /dev/null
+++ b/marketing/src/common/components/Navbar/index.tsx
@@ -0,0 +1,29 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import NavbarStyle from './navbar.style';
+
+type NavbarProps = {
+ children: React.ReactNode;
+ className?: string;
+ navbarStyle?: any;
+};
+
+const Navbar = ({
+ className,
+ children,
+ navbarStyle,
+ ...props
+}: NavbarProps) => {
+ const addAllClasses = ['reusecore__navbar'];
+
+ // className prop checking
+ if (className) {
+ addAllClasses.push(className);
+ }
+
+ return (
+ {children}
+ );
+};
+
+export default Navbar;
diff --git a/marketing/src/common/components/Navbar/navbar.style.tsx b/marketing/src/common/components/Navbar/navbar.style.tsx
new file mode 100755
index 000000000..5eaed5d43
--- /dev/null
+++ b/marketing/src/common/components/Navbar/navbar.style.tsx
@@ -0,0 +1,39 @@
+import styled from 'styled-components';
+import {
+ display,
+ alignItems,
+ justifyContent,
+ flexWrap,
+ flexDirection,
+ boxShadow,
+ color,
+ space,
+ borderRadius,
+ width,
+ height,
+} from 'styled-system';
+
+const NavbarStyle = styled.nav`
+ /* Navbar default style goes here */
+ display: flex;
+ align-items: center;
+ min-height: 56px;
+ padding: 10px 16px;
+
+ /* Style system supported prop */
+ ${display}
+ ${alignItems}
+ ${justifyContent}
+ ${flexDirection}
+ ${flexWrap}
+ ${width}
+ ${height}
+ ${color}
+ ${space}
+ ${boxShadow}
+ ${borderRadius}
+`;
+
+NavbarStyle.displayName = 'NavbarStyle';
+
+export default NavbarStyle;
diff --git a/marketing/src/common/components/NextImage/index.tsx b/marketing/src/common/components/NextImage/index.tsx
new file mode 100755
index 000000000..d21ac65b7
--- /dev/null
+++ b/marketing/src/common/components/NextImage/index.tsx
@@ -0,0 +1,5 @@
+import Image, { ImageProps } from 'next/image';
+
+export default function NextImage({ ...props }: ImageProps) {
+ return ;
+}
diff --git a/marketing/src/common/components/NoSSR.js b/marketing/src/common/components/NoSSR.js
new file mode 100755
index 000000000..a5e664de5
--- /dev/null
+++ b/marketing/src/common/components/NoSSR.js
@@ -0,0 +1,8 @@
+import { Fragment } from 'react';
+import dynamic from 'next/dynamic';
+
+const NoSSR = ({ children }) => {children} ;
+
+export default dynamic(() => Promise.resolve(NoSSR), {
+ ssr: false,
+});
diff --git a/marketing/src/common/components/Radio/index.js b/marketing/src/common/components/Radio/index.js
new file mode 100755
index 000000000..af6ce25da
--- /dev/null
+++ b/marketing/src/common/components/Radio/index.js
@@ -0,0 +1,101 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import { useToggle } from '../useToggle';
+import RadioBoxStyle from './radio.style';
+
+const Radio = ({
+ className,
+ isChecked,
+ labelText,
+ value,
+ id,
+ htmlFor,
+ isMaterial,
+ labelPosition,
+ disabled,
+ ...props
+}) => {
+ // use toggle hooks
+ const [toggleValue, toggleHandler] = useToggle(isChecked);
+
+ // Add all classs to an array
+ const addAllClasses = ['reusecore__radio'];
+
+ // Add label position class
+ if (labelPosition) {
+ addAllClasses.push(`label_${labelPosition}`);
+ }
+
+ // isMaterial prop checking
+ if (isMaterial) {
+ addAllClasses.push('is-material');
+ }
+
+ // className prop checking
+ if (className) {
+ addAllClasses.push(className);
+ }
+
+ const position = labelPosition || 'right';
+
+ // label control
+ const LabelField = labelText && (
+ {labelText}
+ );
+
+ return (
+
+
+ {position === 'left' || position === 'right' ? LabelField : ''}
+
+
+
+
+ );
+};
+
+Radio.propTypes = {
+ /** ClassName of the radio */
+ className: PropTypes.string,
+
+ /** labelText of the radio field */
+ labelText: PropTypes.string,
+
+ /**
+ * Note: id and htmlFor must be same.
+ */
+ htmlFor: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
+
+ /** Set radio id in number || string */
+ id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
+
+ /** value of the radio field */
+ value: PropTypes.string,
+
+ /** labelText of the radio field */
+ labelPosition: PropTypes.oneOf(['right', 'left']),
+
+ /** radio toggle state based on isChecked prop */
+ isChecked: PropTypes.bool,
+
+ /** disabled of the radio field */
+ disabled: PropTypes.bool,
+};
+
+/** Radio default proptype */
+Radio.defaultProps = {
+ isChecked: false,
+ labelText: 'Radio label',
+ labelPosition: 'right',
+ disabled: false,
+};
+export default Radio;
diff --git a/marketing/src/common/components/Radio/radio.style.js b/marketing/src/common/components/Radio/radio.style.js
new file mode 100755
index 000000000..f7bd73db4
--- /dev/null
+++ b/marketing/src/common/components/Radio/radio.style.js
@@ -0,0 +1,99 @@
+import styled from 'styled-components';
+import { themeGet } from '@styled-system/theme-get';
+import { base } from '../base';
+
+const RadioBoxStyle = styled.div`
+ display: inline-flex;
+ /* Switch label default style */
+ .reusecore__field-label {
+ color: ${themeGet('colors.textColor', '#484848')};
+ font-size: ${themeGet('fontSizes.4', '16')}px;
+ font-weight: ${themeGet('fontWeights.4', '500')};
+ }
+
+ /* Switch label style when labelPosition on left */
+ &.label_left {
+ label {
+ display: flex;
+ align-items: center;
+ .reusecore__field-label {
+ margin-right: ${themeGet('space.3', '10')}px;
+ }
+ }
+ }
+
+ /* Switch label style when labelPosition on right */
+ &.label_right {
+ label {
+ display: flex;
+ flex-direction: row-reverse;
+ align-items: center;
+
+ .reusecore__field-label {
+ margin-left: ${themeGet('space.3', '10')}px;
+ }
+ }
+ }
+
+ /* Checkbox default style */
+ input[type='radio'] {
+ &.radio {
+ opacity: 0;
+ position: absolute;
+ margin: 0;
+ z-index: -1;
+ width: 0;
+ height: 0;
+ overflow: hidden;
+ pointer-events: none;
+
+ &:focus {
+ + div {
+ border-color: ${themeGet('colors.primary', '#028489')};
+ }
+ }
+
+ &:checked + div {
+ &::after {
+ opacity: 1;
+ visibility: visible;
+ transform: scale(1);
+ }
+ }
+ }
+ + div {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ width: 16px;
+ height: 16px;
+ border-radius: 50%;
+ border: 1px solid ${themeGet('colors.borderColor', '#dadada')};
+ position: relative;
+ transition: background-color 0.3s ease;
+ &::after {
+ content: '';
+ display: flex;
+ width: 8px;
+ height: 8px;
+ transform: scale(0.8);
+ border-radius: 50%;
+ background-color: ${themeGet('colors.primary', '#028489')};
+ opacity: 0;
+ visibility: hidden;
+ transition-property: opacity, visibility;
+ transition-duration: 0.3s;
+ }
+ }
+ }
+
+ /* support base component props */
+ ${base}
+`;
+
+// prop types can also be added from the style functions
+RadioBoxStyle.propTypes = {};
+
+RadioBoxStyle.displayName = 'RadioBoxStyle';
+
+export default RadioBoxStyle;
diff --git a/marketing/src/common/components/RadioGroup/index.js b/marketing/src/common/components/RadioGroup/index.js
new file mode 100755
index 000000000..2e1deb94d
--- /dev/null
+++ b/marketing/src/common/components/RadioGroup/index.js
@@ -0,0 +1,74 @@
+import React, { useState } from 'react';
+import PropTypes from 'prop-types';
+import ComponentWrapper from './radioGroup.style';
+
+const RadioGroup = ({ className, name, value, items, onUpdate }) => {
+ const [state, setState] = useState({ value: value });
+
+ const onChange = (e) => {
+ const currentValue = e.target.value;
+ setState({
+ ...state,
+ value: currentValue,
+ });
+ onUpdate(e.target.value);
+ };
+
+ const addAllClasses = ['radio_group'];
+
+ if (className) {
+ addAllClasses.push(className);
+ }
+
+ return (
+
+ {items.map((item) => (
+
+
+ {item.title || item.text ? (
+
+
{item.title && item.title}
+
{item.text && item.text}
+
+ ) : (
+ ''
+ )}
+
+ ))}
+
+ );
+};
+
+RadioGroup.propTypes = {
+ /** className of the RadioGroup. */
+ className: PropTypes.string,
+ /** title or value of the RadioGroup. */
+ title: PropTypes.string,
+ /** text or sub title for single radio component / element. */
+ text: PropTypes.string,
+ /** active item value of the RadioGroup. The prop should be a string but in camelCase. */
+ value: PropTypes.string,
+ /** RadioGroup data in array of object form. Each object item should has 3 properties id, title and text. */
+ items: PropTypes.array,
+ /** This prop contain active radio field value.*/
+ onUpdate: PropTypes.func,
+};
+
+/** RadioGroup default type. */
+RadioGroup.defaultProps = {
+ onUpdate: () => {},
+};
+
+export default RadioGroup;
diff --git a/marketing/src/common/components/RadioGroup/radioGroup.style.js b/marketing/src/common/components/RadioGroup/radioGroup.style.js
new file mode 100755
index 000000000..92631d0b8
--- /dev/null
+++ b/marketing/src/common/components/RadioGroup/radioGroup.style.js
@@ -0,0 +1,38 @@
+import styled from 'styled-components';
+
+const ComponentWrapper = styled.div`
+ display: flex;
+ align-items: flex-start;
+ margin: 0 -10px;
+ h4,
+ p {
+ margin: 0;
+ }
+
+ h4 {
+ margin-bottom: 7px;
+ }
+
+ label {
+ position: relative;
+ padding: 15px 25px;
+ box-sizing: border-box;
+ border: 2px solid #f4f2fa;
+ border-radius: 10px;
+ margin: 0 10px;
+ cursor: pointer;
+ transition: all 0.3s ease;
+
+ &.active {
+ background-color: #f4f2fa;
+ }
+
+ input {
+ visibility: hidden;
+ opacity: 0;
+ position: absolute;
+ }
+ }
+`;
+
+export default ComponentWrapper;
diff --git a/marketing/src/common/components/Range-with-RC-SLIDE/index.js b/marketing/src/common/components/Range-with-RC-SLIDE/index.js
new file mode 100755
index 000000000..a76bd4378
--- /dev/null
+++ b/marketing/src/common/components/Range-with-RC-SLIDE/index.js
@@ -0,0 +1,198 @@
+import React, { Fragment } from 'react';
+import PropTypes from 'prop-types';
+import Slider from 'rc-slider';
+import Tooltip from 'rc-tooltip';
+import 'rc-slider/assets/index.css';
+import RangeBoxStyle from './range.style';
+
+const createSliderWithTooltip = Slider.createSliderWithTooltip;
+const Range = createSliderWithTooltip(Slider.Range);
+const Handle = Slider.Handle;
+
+const toolTipHandleFunc = (props) => {
+ const { value, dragging, index, ...restProps } = props;
+ return (
+
+
+
+ );
+};
+
+const SliderBox = (props) => {
+ const {
+ min,
+ max,
+ stepper,
+ dots,
+ slideDefaultValue,
+ vertical,
+ disabled,
+ handleChangefunc,
+ ...others
+ } = props;
+ return (
+
+ );
+};
+
+const RangeBox = (props) => {
+ const {
+ min,
+ max,
+ stepper,
+ unit,
+ dots,
+ placement,
+ rangeDefaultValue,
+ vertical,
+ disabled,
+ handleChangefunc,
+ ...others
+ } = props;
+ const defaultThresholdInit =
+ rangeDefaultValue && rangeDefaultValue[0] ? rangeDefaultValue[0] : 0;
+ const defaultThresholdLast =
+ rangeDefaultValue && rangeDefaultValue[1] ? rangeDefaultValue[1] : 0;
+ const toolTipConfig = {
+ placement,
+ prefixCls: 'reusecore__rc_slider_tooltip rc-slider-tooltip',
+ };
+ return (
+ `${value}${unit}`}
+ tipProps={toolTipConfig}
+ vertical={vertical}
+ {...others}
+ />
+ );
+};
+
+export default function RangeWithRCSlide({ className, labelText, labelPosition, type, ...props }) {
+ // Add all classs to an array
+ const addAllClasses = ['reusecore__rangebox'];
+ // Add label position class
+ if (labelPosition) {
+ addAllClasses.push(`label_${labelPosition}`);
+ }
+ // label control
+ const position = labelPosition || 'right';
+ const LabelField = labelText && (
+ {labelText}
+ );
+ // className prop checking
+ if (className) {
+ addAllClasses.push(className);
+ }
+ return (
+
+
+
+ {position === 'left' || position === 'right' ? LabelField : ''}
+ {type && type === 'range' ? (
+
+ ) : (
+
+ )}
+
+
+
+
+ );
+}
+
+RangeBox.propTypes = {
+ /** ClassName of the range-box */
+ className: PropTypes.string,
+
+ /** labelText of the range-box field */
+ labelText: PropTypes.string,
+
+ /** labelText of the range-box field */
+ labelPosition: PropTypes.oneOf(['right', 'left']),
+
+ /** type of the range-box */
+ type: PropTypes.oneOf(['range', 'slide']).isRequired,
+
+ /** toolitip-placement of the range-box [for type="range" only] */
+ placement: PropTypes.oneOf([
+ 'left',
+ 'right',
+ 'top',
+ 'bottom',
+ 'topLeft',
+ 'topRight',
+ 'bottomLeft',
+ 'bottomRight',
+ ]),
+
+ /** Minimum value of the range-box field */
+ min: PropTypes.number.isRequired,
+
+ /** Maximum value of the range-box field */
+ max: PropTypes.number.isRequired,
+
+ /** Stepper value of the range-box field */
+ stepper: PropTypes.number.isRequired,
+
+ /** Default value of the range-box field [for type="slide" only] */
+ slideDefaultValue: PropTypes.number,
+
+ /** Default value of the range-box field [for type="range" only] */
+ rangeDefaultValue: PropTypes.array,
+
+ /** Unit value of the range-box tooltip field [for type="range" only] */
+ unit: PropTypes.string,
+
+ /** dots of the range-box field */
+ dots: PropTypes.bool,
+
+ /** disabled of the range-box field */
+ disabled: PropTypes.bool,
+
+ /** vertical of the range-box field */
+ vertical: PropTypes.bool,
+};
+
+/** RangeBox default proptype */
+RangeBox.defaultProps = {
+ labelText: 'ReuseCore RangeBox',
+ labelPosition: 'right',
+ className: 'rangebox_wrapper_className',
+ type: 'slide',
+ disabled: false,
+ min: 0,
+ max: 100,
+ stepper: 5,
+ unit: '',
+ placement: 'top',
+ slideDefaultValue: 3,
+ rangeDefaultValue: [0, 50],
+ dots: true,
+ vertical: false,
+};
diff --git a/marketing/src/common/components/Range-with-RC-SLIDE/range.style.js b/marketing/src/common/components/Range-with-RC-SLIDE/range.style.js
new file mode 100755
index 000000000..2890e8c76
--- /dev/null
+++ b/marketing/src/common/components/Range-with-RC-SLIDE/range.style.js
@@ -0,0 +1,16 @@
+import styled from 'styled-components';
+import { themeGet } from '@styled-system/theme-get';
+import { base } from '../base';
+
+const RangeBoxStyle = styled.div``;
+
+// prop types can also be added from the style functions
+RangeBoxStyle.propTypes = {};
+
+RangeBoxStyle.displayName = 'RangeBoxStyle';
+
+RangeBoxStyle.defaultProps = {
+ as: 'div',
+};
+
+export default RangeBoxStyle;
diff --git a/marketing/src/common/components/Range/index.js b/marketing/src/common/components/Range/index.js
new file mode 100755
index 000000000..158a28697
--- /dev/null
+++ b/marketing/src/common/components/Range/index.js
@@ -0,0 +1,123 @@
+import React, { Fragment } from 'react';
+import PropTypes from 'prop-types';
+import RangeBoxStyle from './range.style';
+import Rheostat from 'rheostat';
+import 'rheostat/initialize';
+
+const handleChange = (props) => {
+ console.log(props, 'current range value');
+};
+
+//Main Component
+const RangeBox = ({ className, labelText, labelPosition, type, ...props }) => {
+ const { min, max } = props;
+ let initValue, lastValue;
+ initValue = min ? min : 0;
+ lastValue = max ? max : 100;
+
+ // Add all classs to an array
+ const addAllClasses = ['reusecore__rangebox'];
+ // Add label position class
+ if (labelPosition) {
+ addAllClasses.push(`label_${labelPosition}`);
+ }
+ // label control
+ const position = labelPosition || 'right';
+ const LabelField = labelText && (
+ {labelText}
+ );
+ // className prop checking
+ if (className) {
+ addAllClasses.push(className);
+ }
+
+ return (
+
+
+
+ {position === 'left' || position === 'right' || position === 'top'
+ ? LabelField
+ : ''}
+
+
+ {position === 'bottom' && LabelField}
+
+
+
+ );
+};
+
+RangeBox.propTypes = {
+ /** labelText of the range-box field */
+ labelText: PropTypes.string,
+
+ /** labelText of the range-box field */
+ labelPosition: PropTypes.oneOf(['top', 'bottom', 'right', 'left']),
+
+ // /** type of the range-box */
+ // type: PropTypes.oneOf(['range', 'slide']).isRequired,
+
+ // /** toolitip-placement of the range-box [for type="range" only] */
+ // placement: PropTypes.oneOf([
+ // 'left',
+ // 'right',
+ // 'top',
+ // 'bottom',
+ // 'topLeft',
+ // 'topRight',
+ // 'bottomLeft',
+ // 'bottomRight'
+ // ]),
+
+ /** Minimum value of the range-box field */
+ min: PropTypes.number.isRequired,
+
+ /** Maximum value of the range-box field */
+ max: PropTypes.number.isRequired,
+
+ // /** Stepper value of the range-box field */
+ // stepper: PropTypes.number.isRequired,
+
+ // /** Default value of the range-box field [for type="slide" only] */
+ // slideDefaultValue: PropTypes.number,
+
+ // /** Default value of the range-box field [for type="range" only] */
+ // rangeDefaultValue: PropTypes.array,
+
+ // /** Unit value of the range-box tooltip field [for type="range" only] */
+ // unit: PropTypes.string,
+
+ // /** dots of the range-box field */
+ // dots: PropTypes.bool,
+
+ // /** disabled of the range-box field */
+ // disabled: PropTypes.bool,
+
+ // /** vertical of the range-box field */
+ // vertical: PropTypes.bool
+};
+
+/** RangeBox default proptype */
+RangeBox.defaultProps = {
+ labelText: 'ReuseCore RangeBox',
+ labelPosition: 'top',
+ // type: 'range',
+ // disabled: false,
+ min: 0,
+ max: 100,
+ // stepper: 5
+ // unit: ' BDT',
+ // placement: 'top',
+ // slideDefaultValue: 3,
+ // rangeDefaultValue: [20, 50],
+ // dots: true,
+ // vertical: false
+};
+export default RangeBox;
diff --git a/marketing/src/common/components/Range/range.mdx b/marketing/src/common/components/Range/range.mdx
new file mode 100755
index 000000000..4b85e6953
--- /dev/null
+++ b/marketing/src/common/components/Range/range.mdx
@@ -0,0 +1,20 @@
+---
+name: RangeBox
+---
+
+import { Playground, PropsTable } from 'docz';
+import RangeBox from './';
+
+# RangeBox
+
+## Basic Usage
+
+
+
+
+
+
+
+## Properties
+
+
diff --git a/marketing/src/common/components/Range/range.style.js b/marketing/src/common/components/Range/range.style.js
new file mode 100755
index 000000000..68d9d0775
--- /dev/null
+++ b/marketing/src/common/components/Range/range.style.js
@@ -0,0 +1,22 @@
+import styled from 'styled-components';
+import { themeGet } from 'styled-system';
+import { base } from '../base';
+// import ThemedStyleSheet from 'react-with-styles/lib/ThemedStyleSheet';
+// import aphroditeInterface from 'react-with-styles-interface-aphrodite';
+// import DefaultTheme from 'rheostat/lib/themes/DefaultTheme';
+
+// ThemedStyleSheet.registerInterface(aphroditeInterface);
+// ThemedStyleSheet.registerTheme(DefaultTheme);
+
+const RangeBoxStyle = styled.div``;
+
+// prop types can also be added from the style functions
+RangeBoxStyle.propTypes = {};
+
+RangeBoxStyle.displayName = 'RangeBoxStyle';
+
+RangeBoxStyle.defaultProps = {
+ as: 'div',
+};
+
+export default RangeBoxStyle;
diff --git a/marketing/src/common/components/Range/range.test.js b/marketing/src/common/components/Range/range.test.js
new file mode 100755
index 000000000..673c14142
--- /dev/null
+++ b/marketing/src/common/components/Range/range.test.js
@@ -0,0 +1,22 @@
+import React from 'react';
+import ReactDOM from 'react-dom';
+import { expect } from 'chai';
+import { shallow } from 'enzyme';
+import sinon from 'sinon';
+import RangeBox from './index';
+import { string } from 'postcss-selector-parser';
+
+describe(' Component', () => {
+ // const minProps = {
+ // type: 'range',
+ // min: 'a',
+ // max: 1,
+ // stepper: 1
+ // };
+ // it('renders without crashing', () => {
+ // expect(shallow( ).length).toEqual(1);
+ // });
+ it('renders without crashing', () => {
+ shallow( );
+ });
+});
diff --git a/marketing/src/common/components/Rating/index.js b/marketing/src/common/components/Rating/index.js
new file mode 100755
index 000000000..f66a2d52e
--- /dev/null
+++ b/marketing/src/common/components/Rating/index.js
@@ -0,0 +1,23 @@
+import React from 'react';
+import { Icon } from 'react-icons-kit';
+import { star } from 'react-icons-kit/fa/star';
+import { starO } from 'react-icons-kit/fa/starO';
+
+const Rating = ({ rating }) => {
+ const totalRating = [];
+ for (let i = 0; i < 5; i++) {
+ if (i < rating) {
+ totalRating.push(
+
+ );
+ } else {
+ totalRating.push(
+
+ );
+ }
+ }
+
+ return {totalRating}
;
+};
+
+export default Rating;
diff --git a/marketing/src/common/components/ScrollSpyMenu/index.tsx b/marketing/src/common/components/ScrollSpyMenu/index.tsx
new file mode 100755
index 000000000..4104175a1
--- /dev/null
+++ b/marketing/src/common/components/ScrollSpyMenu/index.tsx
@@ -0,0 +1,132 @@
+import React, { useContext } from 'react';
+import PropTypes from 'prop-types';
+import Scrollspy from 'react-scrollspy';
+import AnchorLink from 'react-anchor-link-smooth-scroll';
+
+import { DrawerContext } from '../../contexts/DrawerContext';
+import NextImage from '../NextImage';
+import { MenuItem } from '@/types';
+import { useTranslation } from 'next-i18next';
+
+type ScrollSpyMenuProps = {
+ /** className of the ScrollSpyMenu. */
+ className?: string;
+
+ /** menuItems is an array of object prop which contain your menu
+ * data.
+ */
+ menuItems: MenuItem[];
+
+ /** Class name that apply to the navigation element paired with the content element in viewport. */
+ currentClassName?: string;
+
+ /** Class name that apply to the navigation elements that have been scrolled past [optional]. */
+ scrolledPastClassName?: string;
+
+ /** HTML tag for Scrollspy component if you want to use other than [optional]. */
+ componentTag?: string;
+
+ /** Style attribute to be passed to the generated element [optional]. */
+ style?: React.CSSProperties;
+
+ /** Offset value that adjusts to determine the elements are in the viewport [optional]. */
+ offset?: number;
+
+ /** Name of the element of scrollable container that can be used with querySelector [optional]. */
+ rootEl?: string;
+
+ drawerClose?: boolean;
+
+ /**
+ * Function to be executed when the active item has been updated [optional].
+ */
+ onUpdate?: ((item: HTMLElement) => void) | undefined;
+};
+
+const RenderLinkWithIcon = ({ menu }: { menu: MenuItem }) => {
+ return (
+
+ );
+};
+
+const ScrollSpyMenu = ({
+ className,
+ menuItems,
+ drawerClose,
+ componentTag = 'ul',
+ currentClassName = 'is-current',
+ ...props
+}: ScrollSpyMenuProps) => {
+ const { t } = useTranslation();
+ const { dispatch } = useContext(DrawerContext);
+ // empty array for scrollspy items
+ const scrollItems: string[] = [];
+
+ // convert menu path to scrollspy items
+ menuItems.forEach((item) => {
+ scrollItems.push(item.path.slice(1));
+ });
+
+ // Add all classs to an array
+ const addAllClasses = ['scrollspy__menu'];
+
+ // className prop checking
+ if (className) {
+ addAllClasses.push(className);
+ }
+
+ // Close drawer when click on menu item
+ const toggleDrawer = () => {
+ dispatch({
+ type: 'TOGGLE',
+ });
+ };
+
+ return (
+
+ {menuItems.map((menu, index) => (
+
+ {menu.staticLink ? (
+
+ ) : (
+ <>
+ {drawerClose ? (
+
+ {t(menu.label)}
+
+ ) : (
+
+ {t(menu.label)}
+
+ )}
+ >
+ )}
+
+ ))}
+
+ );
+};
+
+export default ScrollSpyMenu;
diff --git a/marketing/src/common/components/Select/index.js b/marketing/src/common/components/Select/index.js
new file mode 100755
index 000000000..ed062d797
--- /dev/null
+++ b/marketing/src/common/components/Select/index.js
@@ -0,0 +1,51 @@
+import React from 'react';
+import ReactSelect from 'react-select';
+import PropTypes from 'prop-types';
+import SelectStyle from './select.style';
+
+const Select = ({ className, labelText, labelPosition, ...props }) => {
+ // Add all classes to an array
+ const addAllClasses = ['reusecore__select'];
+
+ // Add label position class
+ if (labelPosition) {
+ addAllClasses.push(`label_${labelPosition}`);
+ }
+
+ // className prop checking
+ if (className) {
+ addAllClasses.push(className);
+ }
+
+ const LabelField = labelText && {labelText} ;
+
+ const position = labelPosition || 'top';
+
+ return (
+
+ {position === 'left' || position === 'right' || position === 'top' ? LabelField : ''}
+
+
+ {position === 'bottom' && LabelField}
+
+ );
+};
+
+Select.propTypes = {
+ /** You can add your custom class for select wrapper component.
+ * note: We manualy add react-select className and classNamePrefix props value */
+ className: PropTypes.string,
+
+ /** labelText of the select field */
+ labelText: PropTypes.string,
+
+ /** Set label position of the select field. By default it's top */
+ labelPosition: PropTypes.oneOf(['top', 'bottom', 'left', 'right']),
+};
+
+Select.defaultProps = {
+ as: 'div',
+ labelPosition: 'top',
+};
+
+export default Select;
diff --git a/marketing/src/common/components/Select/select.style.js b/marketing/src/common/components/Select/select.style.js
new file mode 100755
index 000000000..47b313f8a
--- /dev/null
+++ b/marketing/src/common/components/Select/select.style.js
@@ -0,0 +1,53 @@
+import styled from 'styled-components';
+import { themeGet } from '@styled-system/theme-get';
+
+const SelectStyle = styled.div`
+ /* Select label default style */
+ .reusecore__field-label {
+ color: ${themeGet('colors.labelColor', '#767676')};
+ font-size: ${themeGet('fontSizes.4', '16')}px;
+ font-weight: ${themeGet('fontWeights.4', '500')};
+ }
+
+ /* Select label style when labelPosition on left */
+ &.label_left {
+ display: flex;
+ align-items: center;
+ .reusecore__field-label {
+ margin-right: ${themeGet('space.3', '10')}px;
+ }
+ }
+
+ /* Select label style when labelPosition on right */
+ &.label_right {
+ display: flex;
+ flex-direction: row-reverse;
+ align-items: center;
+
+ .reusecore__field-label {
+ margin-left: ${themeGet('space.3', '10')}px;
+ }
+ }
+
+ /* Switch label style when labelPosition on top || bottom */
+ &.label_top {
+ .reusecore__field-label {
+ display: flex;
+ margin-bottom: ${themeGet('space.2', '8')}px;
+ }
+ }
+ &.label_bottom {
+ .reusecore__field-label {
+ display: flex;
+ margin-top: ${themeGet('space.2', '8')}px;
+ }
+ }
+`;
+
+SelectStyle.displayName = 'SelectStyle';
+
+SelectStyle.defaultProps = {
+ as: 'div',
+};
+
+export default SelectStyle;
diff --git a/marketing/src/common/components/Switch/index.js b/marketing/src/common/components/Switch/index.js
new file mode 100755
index 000000000..8efc2b4b8
--- /dev/null
+++ b/marketing/src/common/components/Switch/index.js
@@ -0,0 +1,137 @@
+/* eslint-disable */
+import React from 'react';
+import PropTypes from 'prop-types';
+import useToggle from '../useToggle';
+import SwitchStyle from './switch.style';
+
+const Switch = ({
+ className,
+ switchColor,
+ isChecked,
+ labelText,
+ labelPosition,
+ switchSize,
+ isMaterial,
+ barColor,
+ onChange,
+ onFocus,
+ onBlur,
+ handleOnChange,
+ ...props
+}) => {
+ // use toggle hooks
+ const [toggleValue, toggleHandler] = useToggle(isChecked);
+
+ // Add all classs to an array
+ const addAllClasses = ['reusecore__switch'];
+
+ // Add label position class
+ if (labelPosition) {
+ addAllClasses.push(`label_${labelPosition}`);
+ }
+
+ // isMaterial prop checking
+ if (isMaterial) {
+ addAllClasses.push('is-material');
+ }
+
+ // className prop checking
+ if (className) {
+ addAllClasses.push(className);
+ }
+
+ handleOnChange = (event) => {
+ toggleHandler();
+ onChange(!toggleValue);
+ };
+
+ const LabelField = labelText && (
+ {labelText}
+ );
+
+ const position = labelPosition || 'top';
+
+ return (
+
+
+ {position === 'left' || position === 'right' || position === 'top'
+ ? LabelField
+ : ''}
+
+
+
+ {position === 'bottom' && LabelField}
+
+
+ );
+};
+
+Switch.propTypes = {
+ /** ClassName of the Switch */
+ className: PropTypes.string,
+
+ /** Add Material effect */
+ isMaterial: PropTypes.bool,
+
+ /** labelText of the switch field */
+ labelText: PropTypes.string,
+
+ /** switchSize control switch width and height */
+ switchSize: PropTypes.string,
+
+ /** Set label position of the switch field */
+ labelPosition: PropTypes.oneOf(['top', 'bottom', 'left', 'right']),
+
+ /** Switch toggle state based on isChecked prop */
+ isChecked: PropTypes.bool,
+
+ /** Set color for Switch */
+ SwitchColor: PropTypes.string,
+
+ /** Set material bar color for Switch */
+ barColor: PropTypes.string,
+
+ /**
+ * @ignore
+ */
+ onBlur: PropTypes.func,
+
+ /**
+ * @ignore
+ */
+ onFocus: PropTypes.func,
+
+ /**
+ * Callback fired when the value is changed.
+ *
+ * @param {object} event The event source of the callback.
+ * You can pull out the new value by accessing `event.target.value`.
+ */
+ onChange: PropTypes.func,
+};
+
+Switch.defaultProps = {
+ isChecked: false,
+ labelPosition: 'top',
+ onBlur: () => {},
+ onFocus: () => {},
+ onChange: () => {},
+};
+
+export default Switch;
diff --git a/marketing/src/common/components/Switch/switch.style.js b/marketing/src/common/components/Switch/switch.style.js
new file mode 100755
index 000000000..570504b02
--- /dev/null
+++ b/marketing/src/common/components/Switch/switch.style.js
@@ -0,0 +1,200 @@
+import styled from 'styled-components';
+import { themeGet } from '@styled-system/theme-get';
+import { lightenColor } from '../lightenDarken';
+import { base } from '../base';
+
+const SwitchStyle = styled.div`
+ /* Switch default style */
+ display: inline-flex;
+
+ /* Switch label default style */
+ .reusecore__field-label {
+ color: ${themeGet('colors.labelColor', '#767676')};
+ font-size: ${themeGet('fontSizes.4', '16')}px;
+ font-weight: ${themeGet('fontWeights.4', '500')};
+ }
+
+ /* Switch label style when labelPosition on left */
+ &.label_left {
+ label {
+ display: flex;
+ align-items: center;
+ .reusecore__field-label {
+ margin-right: ${themeGet('space.3', '10')}px;
+ }
+ }
+ }
+
+ /* Switch label style when labelPosition on right */
+ &.label_right {
+ label {
+ display: flex;
+ flex-direction: row-reverse;
+ align-items: center;
+
+ .reusecore__field-label {
+ margin-left: ${themeGet('space.3', '10')}px;
+ }
+ }
+ }
+
+ /* Switch label style when labelPosition on top || bottom */
+ &.label_top {
+ label {
+ .reusecore__field-label {
+ display: flex;
+ margin-bottom: ${themeGet('space.2', '8')}px;
+ }
+ }
+ }
+ &.label_bottom {
+ label {
+ .reusecore__field-label {
+ display: flex;
+ margin-top: ${themeGet('space.2', '8')}px;
+ }
+ }
+ }
+
+ /* Switch default style goes here */
+ input[type='checkbox'] {
+ &.switch {
+ opacity: 0;
+ position: absolute;
+ margin: 0;
+ z-index: -1;
+ width: 0;
+ height: 0;
+ overflow: hidden;
+ left: 0;
+ pointer-events: none;
+
+ &:checked + div {
+ width: ${(props) => (props.switchSize ? props.switchSize : '80px')};
+ background-position: 0 0;
+ background-color: ${(props) =>
+ props.switchColor ? props.switchColor : '#028489'};
+ > div {
+ background-color: ${themeGet('colors.white', '#ffffff')};
+ left: calc(
+ ${(props) => (props.switchSize ? props.switchSize : '80px')} / 2 +
+ 3px
+ );
+ }
+ }
+ }
+ + div {
+ vertical-align: middle;
+ width: ${(props) => (props.switchSize ? props.switchSize : '80px')};
+ height: calc(
+ ${(props) => (props.switchSize ? props.switchSize : '80px')} / 2
+ );
+ border-radius: 450px;
+ border-width: 2px;
+ border-style: solid;
+ border-color: ${(props) =>
+ props.switchColor ? props.switchColor : '#028489'};
+ transition-duration: 0.4s;
+ transition-property: background-color, box-shadow;
+ cursor: pointer;
+ box-sizing: border-box;
+ position: relative;
+
+ > div {
+ float: left;
+ width: calc(
+ ${(props) => (props.switchSize ? props.switchSize : '80px')} / 2 - 8px
+ );
+ height: calc(
+ ${(props) => (props.switchSize ? props.switchSize : '80px')} / 2 - 8px
+ );
+ border-radius: 50%;
+ pointer-events: none;
+ top: 2px;
+ left: 2px;
+ position: absolute;
+ background-color: ${(props) =>
+ props.switchColor ? props.switchColor : '#028489'};
+ transition-timing-function: cubic-bezier(1, 0, 0, 1);
+ transition-duration: 0.4s;
+ transition-property: left, background-color;
+ }
+ }
+ }
+
+ /* Material style goes here */
+ &.is-material {
+ /* Switch label style when labelPosition on top || bottom */
+ &.label_top {
+ label {
+ .reusecore__field-label {
+ margin-bottom: ${themeGet('space.3', '10')}px;
+ }
+ }
+ }
+ &.label_bottom {
+ label {
+ .reusecore__field-label {
+ margin-top: ${themeGet('space.3', '10')}px;
+ }
+ }
+ }
+
+ /* Material switch default style */
+ input[type='checkbox'] {
+ &.switch {
+ &:checked + div {
+ width: ${(props) => (props.switchSize ? props.switchSize : '50px')};
+ background-color: ${(props) =>
+ props.switchColor
+ ? lightenColor(props.switchColor, 0.2)
+ : lightenColor('#028489', 0.2)};
+ > div {
+ background-color: ${(props) =>
+ props.switchColor ? props.switchColor : '#028489'};
+ left: calc(
+ ${(props) => (props.switchSize ? props.switchSize : '50px')} -
+ ${(props) => (props.switchSize ? props.switchSize : '50px')} / 2 +
+ 1px
+ );
+ }
+ }
+ }
+ + div {
+ width: ${(props) => (props.switchSize ? props.switchSize : '50px')};
+ height: calc(
+ ${(props) => (props.switchSize ? props.switchSize : '50px')} / 4
+ );
+ border-width: 0;
+ background-color: ${(props) =>
+ props.barColor ? props.barColor : '#a0a0a0'};
+
+ > div {
+ width: calc(
+ ${(props) => (props.switchSize ? props.switchSize : '50px')} / 2
+ );
+ height: calc(
+ ${(props) => (props.switchSize ? props.switchSize : '50px')} / 2
+ );
+ top: calc(
+ -${(props) => (props.switchSize ? props.switchSize : '50px')} / 8
+ );
+ left: 0;
+ background-color: ${themeGet('colors.white', '#ffffff')};
+ box-shadow: 0px 1px 5px 0px rgba(0, 0, 0, 0.2),
+ 0px 2px 2px 0px rgba(0, 0, 0, 0.14),
+ 0px 3px 1px -2px rgba(0, 0, 0, 0.12);
+ }
+ }
+ }
+ }
+
+ ${base}
+`;
+
+// prop types can also be added from the style functions
+SwitchStyle.propTypes = {};
+
+SwitchStyle.displayName = 'SwitchStyle';
+
+export default SwitchStyle;
diff --git a/marketing/src/common/components/Tabs/index.js b/marketing/src/common/components/Tabs/index.js
new file mode 100755
index 000000000..f4d9962ea
--- /dev/null
+++ b/marketing/src/common/components/Tabs/index.js
@@ -0,0 +1,59 @@
+import React, { useState } from 'react';
+import PropTypes from 'prop-types';
+import TabWrapper, {
+ TabMenu,
+ MenuItem,
+ TabContent,
+ TabPanel,
+} from './tabs.style';
+
+const Tab = ({ active, className, children }) => {
+ const [state, setState] = useState({
+ active: active || 0,
+ });
+
+ const handleChange = (index) => {
+ setState({ active: index });
+ };
+
+ const addAllClasses = ['rq_tab'];
+ if (className) {
+ addAllClasses.push(className);
+ }
+
+ return (
+
+
+ {children.map((element, index) => {
+ let activeClass = index === state.active ? 'active' : '';
+ return (
+ handleChange(index)}
+ >
+ {element.props.title}
+
+ );
+ })}
+
+ {children[state.active]}
+
+ );
+};
+
+export const Panel = ({ children }) => (
+ {children}
+);
+
+Tab.propTypes = {
+ children: PropTypes.array,
+ active: PropTypes.number.isRequired,
+};
+
+Panel.propTypes = {
+ children: PropTypes.element,
+ title: PropTypes.element.isRequired,
+};
+
+export default Tab;
diff --git a/marketing/src/common/components/Tabs/tabs.style.js b/marketing/src/common/components/Tabs/tabs.style.js
new file mode 100755
index 000000000..0256c0f5e
--- /dev/null
+++ b/marketing/src/common/components/Tabs/tabs.style.js
@@ -0,0 +1,19 @@
+import styled from 'styled-components';
+
+const TabWrapper = styled.div``;
+
+export const TabMenu = styled.ul``;
+
+export const MenuItem = styled.li`
+ cursor: pointer;
+
+ &.active {
+ font-weight: 700;
+ }
+`;
+
+export const TabContent = styled.div``;
+
+export const TabPanel = styled.div``;
+
+export default TabWrapper;
diff --git a/marketing/src/common/components/Text/index.js b/marketing/src/common/components/Text/index.js
new file mode 100755
index 000000000..c0a5a5f3e
--- /dev/null
+++ b/marketing/src/common/components/Text/index.js
@@ -0,0 +1,88 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import styled from 'styled-components';
+import {
+ fontFamily,
+ fontWeight,
+ textAlign,
+ lineHeight,
+ letterSpacing,
+} from 'styled-system';
+import { base, themed } from '../base';
+
+const TextWrapper = styled('p')(
+ base,
+ fontFamily,
+ fontWeight,
+ textAlign,
+ lineHeight,
+ letterSpacing,
+ themed('Text')
+);
+
+const Text = ({ content, ...props }) => (
+ {content}
+);
+
+export default Text;
+
+Text.propTypes = {
+ content: PropTypes.string,
+ as: PropTypes.string,
+ mt: PropTypes.oneOfType([
+ PropTypes.string,
+ PropTypes.number,
+ PropTypes.arrayOf(
+ PropTypes.oneOfType([PropTypes.string, PropTypes.number])
+ ),
+ ]),
+ mb: PropTypes.oneOfType([
+ PropTypes.string,
+ PropTypes.number,
+ PropTypes.arrayOf(
+ PropTypes.oneOfType([PropTypes.string, PropTypes.number])
+ ),
+ ]),
+ fontFamily: PropTypes.oneOfType([
+ PropTypes.string,
+ PropTypes.number,
+ PropTypes.arrayOf(
+ PropTypes.oneOfType([PropTypes.string, PropTypes.number])
+ ),
+ ]),
+ fontWeight: PropTypes.oneOfType([
+ PropTypes.string,
+ PropTypes.number,
+ PropTypes.arrayOf(
+ PropTypes.oneOfType([PropTypes.string, PropTypes.number])
+ ),
+ ]),
+ textAlign: PropTypes.oneOfType([
+ PropTypes.string,
+ PropTypes.number,
+ PropTypes.arrayOf(
+ PropTypes.oneOfType([PropTypes.string, PropTypes.number])
+ ),
+ ]),
+ lineHeight: PropTypes.oneOfType([
+ PropTypes.string,
+ PropTypes.number,
+ PropTypes.arrayOf(
+ PropTypes.oneOfType([PropTypes.string, PropTypes.number])
+ ),
+ ]),
+ letterSpacing: PropTypes.oneOfType([
+ PropTypes.string,
+ PropTypes.number,
+ PropTypes.arrayOf(
+ PropTypes.oneOfType([PropTypes.string, PropTypes.number])
+ ),
+ ]),
+ ...base.propTypes,
+};
+
+Text.defaultProps = {
+ as: 'p',
+ mt: 0,
+ mb: '1rem',
+};
diff --git a/marketing/src/common/components/Tooltip/index.js b/marketing/src/common/components/Tooltip/index.js
new file mode 100755
index 000000000..d42c583f6
--- /dev/null
+++ b/marketing/src/common/components/Tooltip/index.js
@@ -0,0 +1,98 @@
+import React, { useState } from 'react';
+import PropTypes from 'prop-types';
+import {
+ TooltipStyle,
+ TriggerStyle,
+ BubbleSize,
+ BubbleStyle,
+} from './tooltip.style';
+
+const Tooltip = ({
+ className,
+ position,
+ tooltipColor,
+ bubbleSize,
+ bubbleStyle,
+ triggerStyle,
+ message,
+ children,
+ ...props
+}) => {
+ // tooltip local state
+ const [state, setState] = useState({
+ open: false,
+ });
+
+ // Add all classs to an array
+ const addAllClasses = ['reusecore__tooltip'];
+
+ // className prop checking
+ if (className) {
+ addAllClasses.push(className);
+ }
+
+ // hide tooltip on mouse leave
+ const hideTooltip = () => {
+ setState({ open: false });
+ };
+
+ // show tooltip on mouse over
+ const showTooltip = () => {
+ setState({ open: true });
+ };
+
+ return (
+
+ {state.open && (
+
+
+ {message}
+
+
+ )}
+
+ {children}
+
+
+ );
+};
+
+Tooltip.propTypes = {
+ /** ClassName of the Tooltip */
+ className: PropTypes.string,
+
+ /** Change tooltip tooltipColor */
+ tooltipColor: PropTypes.string,
+
+ /** triggerStyle prop allow to change tooltip trigger fontSize, fontWeight, margin, padding, color and bg color.*/
+ triggerStyle: PropTypes.object,
+
+ /** bubbleSize prop allow to change tooltip's buble width including min and max width.
+ * And height including min and max height */
+ BubbleSize: PropTypes.object,
+
+ /** bubbleStyle prop allow to change tooltip's buble boxShadow, color, fontSize, borderRadius */
+ bubbleStyle: PropTypes.object,
+
+ /** Set tooltip position left || right || top || bottom. */
+ position: PropTypes.oneOf(['left', 'right', 'top', 'bottom']),
+};
+
+/** Tooltip default proptype */
+Tooltip.defaultProps = {
+ isChecked: false,
+};
+
+export default Tooltip;
diff --git a/marketing/src/common/components/Tooltip/tooltip.style.js b/marketing/src/common/components/Tooltip/tooltip.style.js
new file mode 100755
index 000000000..e55bbe62e
--- /dev/null
+++ b/marketing/src/common/components/Tooltip/tooltip.style.js
@@ -0,0 +1,137 @@
+import styled from 'styled-components';
+import {
+ fontSize,
+ fontWeight,
+ boxShadow,
+ color,
+ space,
+ borderRadius,
+ width,
+ maxWidth,
+ minWidth,
+ height,
+ maxHeight,
+ minHeight,
+} from 'styled-system';
+
+const TooltipStyle = styled.span`
+ /* Tooltip default style */
+ position: relative;
+
+ .tooltip-top,
+ .tooltip-bottom {
+ left: 50%;
+ transform: translateX(-50%);
+
+ &::after {
+ left: 50%;
+ transform: translateX(-50%);
+ border-left: 9px solid transparent;
+ border-right: 9px solid transparent;
+ }
+ }
+
+ .tooltip-top {
+ bottom: 100%;
+ padding-bottom: 9px;
+
+ &::after {
+ border-top: 9px solid
+ ${(props) => (props.tooltipColor ? props.tooltipColor : '#131212')};
+ bottom: 0;
+ }
+ }
+
+ .tooltip-bottom {
+ top: 100%;
+ padding-top: 9px;
+
+ &::after {
+ border-bottom: 9px solid
+ ${(props) => (props.tooltipColor ? props.tooltipColor : '#131212')};
+ top: 0;
+ }
+ }
+
+ .tooltip-left,
+ .tooltip-right {
+ top: 50%;
+ transform: translateY(-50%);
+
+ &::after {
+ top: 50%;
+ transform: translateY(-50%);
+ border-top: 9px solid transparent;
+ border-bottom: 9px solid transparent;
+ }
+ }
+
+ .tooltip-left {
+ right: 100%;
+ padding-right: 9px;
+
+ &::after {
+ border-left: 9px solid
+ ${(props) => (props.tooltipColor ? props.tooltipColor : '#131212')};
+ right: 0;
+ }
+ }
+
+ .tooltip-right {
+ left: 100%;
+ padding-left: 9px;
+
+ &::after {
+ border-right: 9px solid
+ ${(props) => (props.tooltipColor ? props.tooltipColor : '#131212')};
+ left: 0;
+ }
+ }
+`;
+
+const TriggerStyle = styled.span`
+ display: inline-block;
+ font-weight: 700;
+ ${fontSize}
+ ${fontWeight}
+ ${color}
+ ${space}
+`;
+
+const BubbleSize = styled.div`
+ min-width: 120px;
+ max-width: 210px;
+ position: absolute;
+ z-index: 10;
+ &::after {
+ content: '';
+ position: absolute;
+ }
+ ${minWidth}
+ ${maxWidth}
+ ${width}
+ ${minHeight}
+ ${maxHeight}
+ ${height}
+`;
+
+const BubbleStyle = styled.div`
+ background-color: ${(props) =>
+ props.tooltipColor ? props.tooltipColor : '#131212'};
+ border-radius: 3px;
+ color: #ffffff;
+ font-size: 12px;
+ line-height: 15px;
+ padding: 0.75em;
+ text-align: center;
+
+ /* Style system custom style */
+ ${boxShadow}
+ ${fontSize}
+ ${color}
+ ${borderRadius}
+`;
+
+TooltipStyle.displayName = 'TooltipStyle';
+
+export { TooltipStyle, TriggerStyle, BubbleSize, BubbleStyle };
diff --git a/marketing/src/common/components/UI/Container/index.tsx b/marketing/src/common/components/UI/Container/index.tsx
new file mode 100755
index 000000000..76fea7db5
--- /dev/null
+++ b/marketing/src/common/components/UI/Container/index.tsx
@@ -0,0 +1,41 @@
+import React from 'react';
+import ContainerWrapper from './style';
+
+type ContainerProps = {
+ children: React.ReactNode;
+ className?: string;
+ fullWidth?: boolean;
+ noGutter?: boolean;
+ mobileGutter?: boolean;
+ width?: string;
+};
+
+const Container = ({
+ children,
+ className,
+ fullWidth,
+ noGutter,
+ mobileGutter,
+ width,
+}: ContainerProps) => {
+ // Add all classs to an array
+ const addAllClasses = ['container'];
+ // className prop checking
+ if (className) {
+ addAllClasses.push(className);
+ }
+
+ return (
+
+ {children}
+
+ );
+};
+
+export default Container;
diff --git a/marketing/src/common/components/UI/Container/style.tsx b/marketing/src/common/components/UI/Container/style.tsx
new file mode 100755
index 000000000..eacc42fbe
--- /dev/null
+++ b/marketing/src/common/components/UI/Container/style.tsx
@@ -0,0 +1,55 @@
+import styled, { css } from 'styled-components';
+
+type ContainerProps = {
+ fullWidth?: boolean;
+ noGutter?: boolean;
+ mobileGutter?: boolean;
+ width?: string;
+};
+
+const ContainerWrapper = styled.div`
+ margin-left: auto;
+ margin-right: auto;
+ ${(props) =>
+ props.fullWidth &&
+ css`
+ width: 100%;
+ max-width: none !important;
+ `};
+ ${(props) =>
+ (props.noGutter &&
+ css`
+ padding-left: 0;
+ padding-right: 0;
+ `) ||
+ css`
+ padding-left: 30px;
+ padding-right: 30px;
+ `};
+ @media (min-width: 768px) {
+ max-width: 750px;
+ width: 100%;
+ }
+ @media (min-width: 992px) {
+ max-width: 970px;
+ width: 100%;
+ }
+ @media (min-width: 1220px) {
+ max-width: ${(props) => props.width || '1170px'};
+ width: 100%;
+ }
+ @media (min-width: 1400px) {
+ max-width: ${(props) => props.width || '1360px'};
+ width: 100%;
+ }
+ @media (max-width: 768px) {
+ ${(props) =>
+ props.mobileGutter &&
+ css`
+ padding-left: 30px;
+ padding-right: 30px;
+ `};
+ }
+`;
+
+export default ContainerWrapper;
diff --git a/marketing/src/common/components/UI/ContainerTwo/index.js b/marketing/src/common/components/UI/ContainerTwo/index.js
new file mode 100755
index 000000000..bb237aae1
--- /dev/null
+++ b/marketing/src/common/components/UI/ContainerTwo/index.js
@@ -0,0 +1,32 @@
+import React from 'react';
+import ContainerWrapper from './style';
+
+const Container = ({
+ children,
+ className,
+ fullWidth,
+ noGutter,
+ mobileGutter,
+ width,
+}) => {
+ // Add all classs to an array
+ const addAllClasses = ['container'];
+ // className prop checking
+ if (className) {
+ addAllClasses.push(className);
+ }
+
+ return (
+
+ {children}
+
+ );
+};
+
+export default Container;
diff --git a/marketing/src/common/components/UI/ContainerTwo/style.js b/marketing/src/common/components/UI/ContainerTwo/style.js
new file mode 100755
index 000000000..071d64e9b
--- /dev/null
+++ b/marketing/src/common/components/UI/ContainerTwo/style.js
@@ -0,0 +1,50 @@
+import styled, { css } from 'styled-components';
+
+const ContainerWrapper = styled.div`
+ margin-left: auto;
+ margin-right: auto;
+ ${(props) =>
+ props.fullWidth &&
+ css`
+ width: 100%;
+ max-width: none !important;
+ `};
+ ${(props) =>
+ (props.noGutter &&
+ css`
+ padding-left: 0;
+ padding-right: 0;
+ `) ||
+ css`
+ padding-left: 30px;
+ padding-right: 30px;
+ `};
+ @media (min-width: 768px) {
+ max-width: 750px;
+ width: 100%;
+ }
+ @media (min-width: 992px) {
+ max-width: 970px;
+ width: 100%;
+ }
+
+ @media (min-width: 1200px) {
+ max-width: ${(props) => props.width || '1170px'};
+ padding: 0;
+ }
+ @media (min-width: 1400px) {
+ padding: 0;
+ max-width: ${(props) => props.width || '1300px'};
+ width: 100%;
+ }
+ @media (max-width: 768px) {
+ ${(props) =>
+ props.mobileGutter &&
+ css`
+ padding-left: 30px;
+ padding-right: 30px;
+ `};
+ }
+`;
+
+export default ContainerWrapper;
diff --git a/marketing/src/common/components/UIElements/Logo/Logo.mdx b/marketing/src/common/components/UIElements/Logo/Logo.mdx
new file mode 100755
index 000000000..92736c03b
--- /dev/null
+++ b/marketing/src/common/components/UIElements/Logo/Logo.mdx
@@ -0,0 +1,25 @@
+---
+name: Logo
+menu: UI Components
+---
+
+import { Playground, PropsTable } from 'docz';
+
+import Logo from './';
+import DemoImage from '../../Image/images.png';
+
+# Logo
+
+## Basic Usage
+
+
+
+
+
+
+
+
+
+## Properties
+
+
diff --git a/marketing/src/common/components/UIElements/Logo/index.tsx b/marketing/src/common/components/UIElements/Logo/index.tsx
new file mode 100755
index 000000000..64939bf38
--- /dev/null
+++ b/marketing/src/common/components/UIElements/Logo/index.tsx
@@ -0,0 +1,74 @@
+import React from 'react';
+import Text from '../../Text';
+import Link from '../../Link';
+import Image from '../../Image';
+import NextImage from '../../NextImage';
+
+type LogoProps = Partial & {
+ logoSrc?: any;
+ title: string;
+ logoWrapperStyle?: any;
+ logoStyle?: any;
+ titleStyle?: any;
+ withAnchor?: boolean;
+ anchorProps?: any;
+ width: number;
+ height: number;
+};
+
+const Logo = ({
+ logoWrapperStyle = {
+ display: 'inline-flex',
+ alignItems: 'center',
+ mr: '1rem',
+ 'a:hover,a:focus': {
+ textDecoration: 'none',
+ },
+ },
+ logoStyle,
+ titleStyle = {
+ display: 'inline-block',
+ fontSize: '2rem',
+ lineHeight: 'inherit',
+ whiteSpace: 'nowrap',
+ },
+ withAnchor,
+ anchorProps,
+ logoSrc,
+ title,
+ width,
+ height,
+ ...props
+}: LogoProps) => (
+
+ {withAnchor ? (
+
+ {logoSrc ? (
+
+ ) : (
+
+ )}
+
+ ) : (
+ <>
+ {logoSrc ? (
+
+ ) : (
+
+ )}
+ >
+ )}
+
+);
+
+export default Logo;
diff --git a/marketing/src/common/components/base.js b/marketing/src/common/components/base.js
new file mode 100755
index 000000000..8c6b4262f
--- /dev/null
+++ b/marketing/src/common/components/base.js
@@ -0,0 +1,54 @@
+/** this is our Base Component every components must be Extend it */
+import {
+ space,
+ borders,
+ borderColor,
+ width,
+ minWidth,
+ maxWidth,
+ height,
+ minHeight,
+ maxHeight,
+ display,
+ fontSize,
+ flex,
+ order,
+ alignSelf,
+ color,
+ compose,
+} from 'styled-system';
+
+export const themed = (key) => (props) => props.theme[key];
+
+export const base = compose(
+ () => ({ boxSizing: 'border-box' }),
+ space,
+ width,
+ minWidth,
+ maxWidth,
+ height,
+ minHeight,
+ maxHeight,
+ fontSize,
+ color,
+ flex,
+ order,
+ alignSelf,
+ borders,
+ borderColor,
+ display
+);
+
+base.propTypes = {
+ ...display.propTypes,
+ ...space.propTypes,
+ ...borders.propTypes,
+ ...borderColor.propTypes,
+ ...width.propTypes,
+ ...height.propTypes,
+ ...fontSize.propTypes,
+ ...color.propTypes,
+ ...flex.propTypes,
+ ...order.propTypes,
+ ...alignSelf.propTypes,
+};
diff --git a/marketing/src/common/components/customVariant.js b/marketing/src/common/components/customVariant.js
new file mode 100755
index 000000000..8b56cd270
--- /dev/null
+++ b/marketing/src/common/components/customVariant.js
@@ -0,0 +1,19 @@
+import { variant } from 'styled-system';
+
+const buttonStyle = variant({
+ key: 'buttonStyles',
+});
+
+const colorStyle = variant({
+ key: 'colorStyles',
+ prop: 'colors',
+});
+
+const sizeStyle = variant({
+ key: 'sizeStyles',
+ prop: 'size',
+});
+
+export const cards = variant({ key: 'cards' });
+
+export { buttonStyle, colorStyle, sizeStyle };
diff --git a/marketing/src/common/components/lightenDarken.js b/marketing/src/common/components/lightenDarken.js
new file mode 100755
index 000000000..3859d9a40
--- /dev/null
+++ b/marketing/src/common/components/lightenDarken.js
@@ -0,0 +1,108 @@
+const pad = (num, totalChars) => {
+ let pad = '0';
+ num = num + '';
+ while (num.length < totalChars) {
+ num = pad + num;
+ }
+ return num;
+};
+
+// Ratio is between 0 and 1
+const changeColor = (color, ratio, darker) => {
+ // Trim trailing/leading whitespace
+ color = color.replace(/^\s*|\s*$/, '');
+
+ // Expand three-digit hex
+ color = color.replace(/^#?([a-f0-9])([a-f0-9])([a-f0-9])$/i, '#$1$1$2$2$3$3');
+
+ // Calculate ratio
+ const difference = Math.round(ratio * 256) * (darker ? -1 : 1),
+ // Determine if input is RGB(A)
+ rgb = color.match(
+ new RegExp(
+ '^rgba?\\(\\s*' +
+ '(\\d|[1-9]\\d|1\\d{2}|2[0-4][0-9]|25[0-5])' +
+ '\\s*,\\s*' +
+ '(\\d|[1-9]\\d|1\\d{2}|2[0-4][0-9]|25[0-5])' +
+ '\\s*,\\s*' +
+ '(\\d|[1-9]\\d|1\\d{2}|2[0-4][0-9]|25[0-5])' +
+ '(?:\\s*,\\s*' +
+ '(0|1|0?\\.\\d+))?' +
+ '\\s*\\)$',
+ 'i'
+ )
+ ),
+ alpha = !!rgb && rgb[4] != null ? rgb[4] : null,
+ // Convert hex to decimal
+ decimal = !!rgb
+ ? [rgb[1], rgb[2], rgb[3]]
+ : color
+ .replace(
+ /^#?([a-f0-9][a-f0-9])([a-f0-9][a-f0-9])([a-f0-9][a-f0-9])/i,
+ function () {
+ return (
+ parseInt(arguments[1], 16) +
+ ',' +
+ parseInt(arguments[2], 16) +
+ ',' +
+ parseInt(arguments[3], 16)
+ );
+ }
+ )
+ .split(/,/);
+
+ // Return RGB(A)
+ return !!rgb
+ ? 'rgb' +
+ (alpha !== null ? 'a' : '') +
+ '(' +
+ Math[darker ? 'max' : 'min'](
+ parseInt(decimal[0], 10) + difference,
+ darker ? 0 : 255
+ ) +
+ ', ' +
+ Math[darker ? 'max' : 'min'](
+ parseInt(decimal[1], 10) + difference,
+ darker ? 0 : 255
+ ) +
+ ', ' +
+ Math[darker ? 'max' : 'min'](
+ parseInt(decimal[2], 10) + difference,
+ darker ? 0 : 255
+ ) +
+ (alpha !== null ? ', ' + alpha : '') +
+ ')'
+ : // Return hex
+ [
+ '#',
+ pad(
+ Math[darker ? 'max' : 'min'](
+ parseInt(decimal[0], 10) + difference,
+ darker ? 0 : 255
+ ).toString(16),
+ 2
+ ),
+ pad(
+ Math[darker ? 'max' : 'min'](
+ parseInt(decimal[1], 10) + difference,
+ darker ? 0 : 255
+ ).toString(16),
+ 2
+ ),
+ pad(
+ Math[darker ? 'max' : 'min'](
+ parseInt(decimal[2], 10) + difference,
+ darker ? 0 : 255
+ ).toString(16),
+ 2
+ ),
+ ].join('');
+};
+const lightenColor = (color, ratio) => {
+ return changeColor(color, ratio, false);
+};
+const darkenColor = (color, ratio) => {
+ return changeColor(color, ratio, true);
+};
+
+export { lightenColor, darkenColor };
diff --git a/marketing/src/common/components/useToggle/index.js b/marketing/src/common/components/useToggle/index.js
new file mode 100755
index 000000000..bb736532a
--- /dev/null
+++ b/marketing/src/common/components/useToggle/index.js
@@ -0,0 +1,7 @@
+import { useState, useCallback } from 'react';
+
+export default (initialValue) => {
+ const [value, setValue] = useState(initialValue);
+ const toggler = useCallback(() => setValue((value) => !value), []);
+ return [value, toggler];
+};
diff --git a/marketing/src/common/contexts/DrawerContext.tsx b/marketing/src/common/contexts/DrawerContext.tsx
new file mode 100755
index 000000000..8b4470c68
--- /dev/null
+++ b/marketing/src/common/contexts/DrawerContext.tsx
@@ -0,0 +1,43 @@
+import React, { useReducer } from 'react';
+
+type DrawerContextProps = {
+ state: DrawerContextState;
+ dispatch: React.Dispatch;
+};
+
+type DrawerContextState = {
+ isOpen: boolean;
+};
+
+type Action = {
+ type: string;
+};
+
+const initialState: DrawerContextState = {
+ isOpen: false,
+};
+
+function reducer(state: DrawerContextState, action: Action) {
+ switch (action.type) {
+ case 'TOGGLE':
+ return {
+ ...state,
+ isOpen: !state.isOpen,
+ };
+ default:
+ return state;
+ }
+}
+export const DrawerContext = React.createContext({
+ state: initialState,
+ dispatch: () => null,
+});
+
+export const DrawerProvider = ({ children }: { children: React.ReactNode }) => {
+ const [state, dispatch] = useReducer(reducer, initialState);
+ return (
+
+ {children}
+
+ );
+};
diff --git a/marketing/src/common/data/WebAppCreative/index.js b/marketing/src/common/data/WebAppCreative/index.js
new file mode 100755
index 000000000..bf46122b8
--- /dev/null
+++ b/marketing/src/common/data/WebAppCreative/index.js
@@ -0,0 +1,241 @@
+import envato from '../../../common/assets/image/webAppCreative/clients/envato.png';
+import evernote from '../../../common/assets/image/webAppCreative/clients/evernote.png';
+import forbes from '../../../common/assets/image/webAppCreative/clients/forbes.png';
+import geekwire from '../../../common/assets/image/webAppCreative/clients/geekwire.png';
+import slack from '../../../common/assets/image/webAppCreative/clients/slack.png';
+import usaToday from '../../../common/assets/image/webAppCreative/clients/usa-today.png';
+import icon1 from '../../../common/assets/image/webAppCreative/icons/1.png';
+import icon2 from '../../../common/assets/image/webAppCreative/icons/2.png';
+import icon3 from '../../../common/assets/image/webAppCreative/icons/3.png';
+import icon4 from '../../../common/assets/image/webAppCreative/icons/4.png';
+import icon5 from '../../../common/assets/image/webAppCreative/icons/5.png';
+import icon6 from '../../../common/assets/image/webAppCreative/icons/6.png';
+import icon7 from '../../../common/assets/image/webAppCreative/icons/7.png';
+
+import asana from '../../../common/assets/image/webAppCreative/icons/asana.png';
+import drive from '../../../common/assets/image/webAppCreative/icons/drive.png';
+import dropbox from '../../../common/assets/image/webAppCreative/icons/dropbox.png';
+import fontAwesome from '../../../common/assets/image/webAppCreative/icons/fontawesome.png';
+import github from '../../../common/assets/image/webAppCreative/icons/github.png';
+import googleCloud from '../../../common/assets/image/webAppCreative/icons/google-cloud.png';
+import messenger from '../../../common/assets/image/webAppCreative/icons/messenger.png';
+import nginx from '../../../common/assets/image/webAppCreative/icons/nginx.png';
+import slack2 from '../../../common/assets/image/webAppCreative/icons/slack.png';
+import smashingMag from '../../../common/assets/image/webAppCreative/icons/smashing-mag.png';
+import zeplin from '../../../common/assets/image/webAppCreative/icons/zeplin.png';
+import zoom from '../../../common/assets/image/webAppCreative/icons/zoom.png';
+import icecream from '../../../common/assets/image/webAppCreative/icons/icecream.png';
+import donut from '../../../common/assets/image/webAppCreative/icons/donut.png';
+import pizza from '../../../common/assets/image/webAppCreative/icons/pizza.png';
+import post1 from '../../../common/assets/image/webAppCreative/post1.png';
+import post2 from '../../../common/assets/image/webAppCreative/post2.png';
+import post3 from '../../../common/assets/image/webAppCreative/post3.png';
+import siteLogo from '../../../common/assets/image/webAppCreative/logo.png';
+import facebook from '../../../common/assets/image/webAppCreative/icons/facebook.png';
+import twitter from '../../../common/assets/image/webAppCreative/icons/twitter.png';
+import dribbble from '../../../common/assets/image/webAppCreative/icons/dribbble.png';
+
+export const clients = [envato, evernote, forbes, geekwire, slack, usaToday];
+
+
+
+export const appIntegration = {
+ sectionTitle: 'Lets see what we integrate',
+ sectionDesc: `We recently had to jump on 10+ different plugin across eight different countries to find the right owner and escalation process.`,
+ apps: [
+ {
+ id: 1,
+ icon: nginx,
+ name: 'nginx',
+ bgColor: null,
+ isBlurred: false,
+ },
+ {
+ id: 2,
+ icon: googleCloud,
+ name: 'googleCloud',
+ bgColor: '#fff',
+ isBlurred: false,
+ },
+ {
+ id: 3,
+ icon: slack2,
+ name: 'slack',
+ bgColor: null,
+ isBlurred: false,
+ },
+ {
+ id: 4,
+ icon: dropbox,
+ name: 'dropbox',
+ bgColor: '#fff',
+ isBlurred: false,
+ },
+ {
+ id: 5,
+ icon: drive,
+ name: 'drive',
+ bgColor: null,
+ isBlurred: false,
+ },
+ {
+ id: 6,
+ icon: asana,
+ name: 'asana',
+ bgColor: null,
+ isBlurred: false,
+ },
+ {
+ id: 7,
+ icon: github,
+ name: 'github',
+ bgColor: '#fff',
+ isBlurred: false,
+ },
+ {
+ id: 8,
+ icon: zeplin,
+ name: 'zeplin',
+ bgColor: null,
+ isBlurred: false,
+ },
+ {
+ id: 9,
+ icon: nginx,
+ name: 'nginx',
+ bgColor: null,
+ isBlurred: true,
+ },
+ {
+ id: 10,
+ icon: messenger,
+ name: 'messenger',
+ bgColor: null,
+ isBlurred: false,
+ },
+ {
+ id: 11,
+ icon: zoom,
+ name: 'zoom',
+ bgColor: null,
+ isBlurred: false,
+ },
+ {
+ id: 12,
+ icon: smashingMag,
+ name: 'smashingMag',
+ bgColor: '#fff',
+ isBlurred: false,
+ },
+ {
+ id: 13,
+ icon: fontAwesome,
+ name: 'fontAwesome',
+ bgColor: null,
+ isBlurred: false,
+ },
+ {
+ id: 14,
+ icon: drive,
+ name: 'google drive',
+ bgColor: null,
+ isBlurred: true,
+ },
+ ],
+};
+
+export const pricing = [
+ {
+ id: 1,
+ price: {
+ monthly: 16,
+ annual: 16 * 12 - 5,
+ },
+ currencySymbol: '$',
+ isActive: false,
+ title: 'Starter Pack',
+ desc: 'Complete time tracking & proper reporting',
+ icon: icecream,
+ button: {
+ label: 'Start 6 month trial',
+ link: '#',
+ },
+ details: {
+ label: 'What’s include',
+ link: '#',
+ },
+ },
+ {
+ id: 2,
+ price: {
+ monthly: 29,
+ annual: 29 * 12 - 10,
+ },
+ currencySymbol: '$',
+ isActive: true,
+ title: 'Premium Pack',
+ desc: 'Effortless team with time management.',
+ icon: donut,
+ button: {
+ label: 'Start 6 month trial',
+ link: '#',
+ },
+ details: {
+ label: 'What’s include',
+ link: '#',
+ },
+ },
+ {
+ id: 3,
+ price: {
+ monthly: 35,
+ annual: 35 * 12 - 15,
+ },
+ currencySymbol: '$',
+ isActive: false,
+ title: 'Ultimate Pack',
+ desc: 'A custom plan for complex or large organization.',
+ icon: pizza,
+ button: {
+ label: 'Start 6 month trial',
+ link: '#',
+ },
+ details: {
+ label: 'What’s include',
+ link: '#',
+ },
+ },
+];
+
+export const posts = [
+ {
+ id: 1,
+ date: 'June 3, 2020',
+ image: post1,
+ title: 'The three Fundamental Rules to Keep Your Website Goal Orientated',
+ excerpt: {
+ label: 'Learn More',
+ link: '#',
+ },
+ },
+ {
+ id: 2,
+ date: 'Dec 8, 2020',
+ image: post2,
+ title: 'Five Common Mistakes Teams Make When Tracking Performance',
+ excerpt: {
+ label: 'Learn More',
+ link: '#',
+ },
+ },
+ {
+ id: 3,
+ date: 'Dec 8, 2020',
+ image: post3,
+ title: `Why You Might Want to Reconsider with Tracking First Meaningful Paint`,
+ excerpt: {
+ label: 'Learn More',
+ link: '#',
+ },
+ },
+];
diff --git a/marketing/src/common/data/WebAppCreative/index.json b/marketing/src/common/data/WebAppCreative/index.json
new file mode 100755
index 000000000..8633b49ae
--- /dev/null
+++ b/marketing/src/common/data/WebAppCreative/index.json
@@ -0,0 +1,568 @@
+{
+ "menu_items": [
+ {
+ "label": "Home",
+ "path": "#home",
+ "offset": "70"
+ },
+ {
+ "label": "How To",
+ "path": "#how-to",
+ "offset": "70"
+ },
+ {
+ "label": "Features",
+ "path": "#features",
+ "offset": "70"
+ },
+ {
+ "label": "Testimonial",
+ "path": "#testimonial",
+ "offset": "70"
+ },
+ {
+ "label": "Pricing",
+ "path": "#pricing",
+ "offset": "70"
+ },
+ {
+ "label": "Faq",
+ "path": "#faq",
+ "offset": "70"
+ }
+ ],
+ "clients": [
+ {
+ "id": 1,
+ "logo": "../../assets/image/webAppCreative/clients/envato.png",
+ "alt": ""
+ },
+ {
+ "id": 2,
+ "logo": "../../assets/image/webAppCreative/clients/evernote.png",
+ "alt": ""
+ },
+ {
+ "id": 3,
+ "logo": "../../assets/image/webAppCreative/clients/forbes.png",
+ "alt": ""
+ },
+ {
+ "id": 4,
+ "logo": "../../assets/image/webAppCreative/clients/geekwire.png",
+ "alt": ""
+ },
+ {
+ "id": 5,
+ "logo": "../../assets/image/webAppCreative/clients/slack.png",
+ "alt": ""
+ },
+ {
+ "id": 6,
+ "logo": "../../assets/image/webAppCreative/clients/usa-today.png",
+ "alt": ""
+ }
+ ],
+ "howTos": [
+ {
+ "id": 1,
+ "icon": "../../assets/image/webAppCreative/icons/1.png",
+ "title": "Manage Smartly",
+ "text": "Stay on top of your task lists and stay in touch with what's happening",
+ "linkLabel": "Learn More",
+ "link": "#"
+ },
+ {
+ "id": 2,
+ "icon": "../../assets/image/webAppCreative/icons/2.png",
+ "title": "Monitor user Analytics",
+ "text": "Stay on top of your task lists and stay in touch with what's happening",
+ "linkLabel": "Learn More",
+ "link": "#"
+ },
+ {
+ "id": 3,
+ "icon": "../../assets/image/webAppCreative/icons/3.png",
+ "title": "Safe & Trusted",
+ "text": "Get the best DoorDash experience with live order tracking.",
+ "linkLabel": "Learn More",
+ "link": "#"
+ },
+ {
+ "id": 4,
+ "icon": "../../assets/image/webAppCreative/icons/4.png",
+ "title": "Fast Customer Support",
+ "text": "Get the best DoorDash experience with live order tracking.",
+ "linkLabel": "Learn More",
+ "link": "#"
+ }
+ ],
+ "analyticsTool": {
+ "slogan": "Audience source monitoring",
+ "title": "Advanced analytics tools to keep you in control & customizable",
+ "desc": "Pick one of our stock themes, or create your custom theme with the most advanced theme editor on any online survey building tool.",
+ "features": [
+ "Chat promt module supported",
+ "Enjoy unlimited features by paid plans",
+ "Manage ultimate conversation"
+ ],
+ "button": {
+ "link": "#",
+ "label": "Explore More"
+ }
+ },
+ "dashboard": {
+ "sectionTitle": "Get on the same page, fast.",
+ "sectionDesc": "Each room is loaded with collaborative surfaces so you can quickly take notes, capture to-dos, and share ideas. Pick one of our stock themes, or create your custom theme with the most advanced theme editor.",
+ "tabs": [
+ {
+ "id": 1,
+ "title": "Dashboard",
+ "content": {
+ "image": "../../assets/image/webAppCreative/dashboard-2.png"
+ }
+ },
+ {
+ "id": 2,
+ "title": "Whiteboard",
+ "content": {
+ "image": "../../assets/image/webAppCreative/dashboard-2.png"
+ }
+ },
+ {
+ "id": 3,
+ "title": "Transaction",
+ "content": {
+ "image": "../../assets/image/webAppCreative/dashboard-2.png"
+ }
+ },
+ {
+ "id": 4,
+ "title": "Float",
+ "content": {
+ "image": "../../assets/image/webAppCreative/dashboard-2.png"
+ }
+ }
+ ]
+ },
+ "testimonials": [
+ {
+ "id": 1,
+ "logo": "../../assets/image/webAppCreative/icons/5.png",
+ "author": "Johnny Simpson",
+ "designation": "Head of Design",
+ "quote": "Each room is loaded with the most collaborative surfaces so you can quickly take notes, capture to-dos, and share ideas. Pick one of our stock themes, or create your custom theme with the editors."
+ },
+ {
+ "id": 2,
+ "logo": "../../assets/image/webAppCreative/icons/6.png",
+ "author": "Deanna Hodges",
+ "designation": "Business HR Admin",
+ "quote": "We deliver on such an expansive with innovation agenda with so many theme projects going on at any time, it can be hard to maintain momentum. So We appreciate to work with them."
+ },
+ {
+ "id": 3,
+ "logo": "../../assets/image/webAppCreative/icons/7.png",
+ "author": "Gracelyn Mason",
+ "designation": "Senior Marketer",
+ "quote": "Flat item is loaded with the most of collaborative surfaces so you can do quickly take notes, capture to-dos, and share ideas. Pick one of our stock themes, or create your custom theme with statics."
+ },
+ {
+ "id": 4,
+ "logo": "../../assets/image/webAppCreative/icons/5.png",
+ "author": "Gracelyn Mason",
+ "designation": "Senior Marketer",
+ "quote": "Flat item is loaded with the most of collaborative surfaces so you can do quickly take notes, capture to-dos, and share ideas. Pick one of our stock themes, or create your custom theme with statics."
+ }
+ ],
+ "appIntegration": {
+ "sectionTitle": "Lets see what we integrate",
+ "sectionDesc": "We recently had to jump on 10+ different plugin across eight different countries to find the right owner and escalation process.",
+ "apps": [
+ {
+ "id": 1,
+ "icon": "../../assets/image/webAppCreative/icons/nginx.png",
+ "name": "nginx",
+ "bgColor": null,
+ "isBlurred": false
+ },
+ {
+ "id": 2,
+ "icon": "../../assets/image/webAppCreative/icons/google-cloud.png",
+ "name": "googleCloud",
+ "bgColor": "#fff",
+ "isBlurred": false
+ },
+ {
+ "id": 3,
+ "icon": "../../assets/image/webAppCreative/icons/slack.png",
+ "name": "slack",
+ "bgColor": null,
+ "isBlurred": false
+ },
+ {
+ "id": 4,
+ "icon": "../../assets/image/webAppCreative/icons/dropbox.png",
+ "name": "dropbox",
+ "bgColor": "#fff",
+ "isBlurred": false
+ },
+ {
+ "id": 5,
+ "icon": "../../assets/image/webAppCreative/icons/drive.png",
+ "name": "drive",
+ "bgColor": null,
+ "isBlurred": false
+ },
+ {
+ "id": 6,
+ "icon": "../../assets/image/webAppCreative/icons/asana.png",
+ "name": "asana",
+ "bgColor": null,
+ "isBlurred": false
+ },
+ {
+ "id": 7,
+ "icon": "../../assets/image/webAppCreative/icons/github.png",
+ "name": "github",
+ "bgColor": "#fff",
+ "isBlurred": false
+ },
+ {
+ "id": 8,
+ "icon": "../../assets/image/webAppCreative/icons/zeplin.png",
+ "name": "zeplin",
+ "bgColor": null,
+ "isBlurred": false
+ },
+ {
+ "id": 9,
+ "icon": "../../assets/image/webAppCreative/icons/nginx.png",
+ "name": "nginx",
+ "bgColor": null,
+ "isBlurred": true
+ },
+ {
+ "id": 10,
+ "icon": "../../assets/image/webAppCreative/icons/messenger.png",
+ "name": "messenger",
+ "bgColor": null,
+ "isBlurred": false
+ },
+ {
+ "id": 11,
+ "icon": "../../assets/image/webAppCreative/icons/zoom.png",
+ "name": "zoom",
+ "bgColor": null,
+ "isBlurred": false
+ },
+ {
+ "id": 12,
+ "icon": "../../assets/image/webAppCreative/icons/smashing-mag.png",
+ "name": "smashingMag",
+ "bgColor": "#fff",
+ "isBlurred": false
+ },
+ {
+ "id": 13,
+ "icon": "../../assets/image/webAppCreative/icons/fontawesome.png",
+ "name": "fontAwesome",
+ "bgColor": null,
+ "isBlurred": false
+ },
+ {
+ "id": 14,
+ "icon": "../../assets/image/webAppCreative/icons/drive.png",
+ "name": "google drive",
+ "bgColor": null,
+ "isBlurred": true
+ }
+ ]
+ },
+ "pricing": [
+ {
+ "id": 1,
+ "price": {
+ "monthly": 16,
+ "annual": 187
+ },
+ "currencySymbol": "$",
+ "isActive": false,
+ "title": "Starter Pack",
+ "desc": "Complete time tracking & proper reporting",
+ "icon": "../../assets/image/webAppCreative/icons/icecream.png",
+ "button": {
+ "label": "Start 6 month trial",
+ "link": "#"
+ },
+ "details": {
+ "label": "What’s include",
+ "link": "#"
+ }
+ },
+ {
+ "id": 2,
+ "price": {
+ "monthly": 29,
+ "annual": 338
+ },
+ "currencySymbol": "$",
+ "isActive": true,
+ "title": "Premium Pack",
+ "desc": "Effortless team with time management.",
+ "icon": "../../assets/image/webAppCreative/icons/donut.png",
+ "button": {
+ "label": "Start 6 month trial",
+ "link": "#"
+ },
+ "details": {
+ "label": "What’s include",
+ "link": "#"
+ }
+ },
+ {
+ "id": 3,
+ "price": {
+ "monthly": 35,
+ "annual": 405
+ },
+ "currencySymbol": "$",
+ "isActive": false,
+ "title": "Ultimate Pack",
+ "desc": "A custom plan for complex or large organization.",
+ "icon": "../../assets/image/webAppCreative/icons/pizza.png",
+ "button": {
+ "label": "Start 6 month trial",
+ "link": "#"
+ },
+ "details": {
+ "label": "What’s include",
+ "link": "#"
+ }
+ }
+ ],
+ "posts": [
+ {
+ "id": 1,
+ "date": "June 3, 2020",
+ "image": {
+ "src": "../../assets/image/webAppCreative/post1.png",
+ "alt": ""
+ },
+ "title": "The three Fundamental Rules to Keep Your Website Goal Orientated",
+ "excerpt": {
+ "label": "Learn More",
+ "link": "#"
+ }
+ },
+ {
+ "id": 2,
+ "date": "Dec 8, 2020",
+ "image": {
+ "src": "../../assets/image/webAppCreative/post2.png",
+ "alt": ""
+ },
+ "title": "Five Common Mistakes Teams Make When Tracking Performance",
+ "excerpt": {
+ "label": "Learn More",
+ "link": "#"
+ }
+ },
+ {
+ "id": 3,
+ "date": "Dec 8, 2020",
+ "image": {
+ "src": "../../assets/image/webAppCreative/post3.png",
+ "alt": ""
+ },
+ "title": "Why You Might Want to Reconsider with Tracking First Meaningful Paint",
+ "excerpt": {
+ "label": "Learn More",
+ "link": "#"
+ }
+ }
+ ],
+ "faqs": [
+ {
+ "id": 1,
+ "title": "01. What is the process of project final delivery system?",
+ "description": "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!."
+ },
+ {
+ "id": 2,
+ "title": "02. What is payment process, believe in upfront?",
+ "description": "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."
+ },
+ {
+ "id": 3,
+ "title": "03. What is the process of project final delivery system?",
+ "description": "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."
+ },
+ {
+ "id": 4,
+ "title": "04. Estimate project budget for categories?",
+ "description": "Our core members created this place for Designers, Developers, Product Owners, Marketing Managers, startup's, Freelancers and really for everyone who appreciates fine designs and well-crafted sites. We want to inspire and support you in the process of creating your own unique website projects."
+ },
+ {
+ "id": 5,
+ "title": "05. All about project customization & monetization",
+ "description": "We are giving the update of this theme continuously. You will receive an email Notification when we push an update. Always try to be updated with us."
+ }
+ ],
+ "footerTop": {
+ "about": {
+ "logo": {
+ "src": "../../assets/image/webAppCreative/logo.png",
+ "alt": "Web App Creative"
+ },
+ "text": "We run Advanced Search reports on the criteria you care about to see how work is progressing and where to focus your effort."
+ },
+ "widgets": [
+ {
+ "id": 2,
+ "title": "About Us",
+ "list": [
+ {
+ "id": 1,
+ "title": "Support Center",
+ "link": "#"
+ },
+ {
+ "id": 2,
+ "title": "Customer Support",
+ "link": "#"
+ },
+ {
+ "id": 3,
+ "title": "About Us",
+ "link": "#"
+ },
+ {
+ "id": 4,
+ "title": "Copyright",
+ "link": "#"
+ },
+ {
+ "id": 5,
+ "title": "Popular Campaign",
+ "link": "#"
+ }
+ ]
+ },
+ {
+ "id": 3,
+ "title": "Our Information",
+ "list": [
+ {
+ "id": 1,
+ "title": "Return Policy ",
+ "link": "#"
+ },
+ {
+ "id": 2,
+ "title": "Privacy Policy",
+ "link": "#"
+ },
+ {
+ "id": 3,
+ "title": "Terms & Conditions",
+ "link": "#"
+ },
+ {
+ "id": 4,
+ "title": "Site Map",
+ "link": "#"
+ },
+ {
+ "id": 5,
+ "title": "Store Hours",
+ "link": "#"
+ }
+ ]
+ },
+ {
+ "id": 4,
+ "title": "My Account",
+ "list": [
+ {
+ "id": 1,
+ "title": "Press inquiries",
+ "link": "#"
+ },
+ {
+ "id": 2,
+ "title": "Social media ",
+ "link": "#"
+ },
+ {
+ "id": 3,
+ "title": "directories",
+ "link": "#"
+ },
+ {
+ "id": 4,
+ "title": "Images & B-roll",
+ "link": "#"
+ },
+ {
+ "id": 5,
+ "title": "Permissions",
+ "link": "#"
+ }
+ ]
+ }
+ ],
+ "contactInfo": {
+ "title": "Contact info",
+ "address": "Mohakhali DOHS, Amsterdam, Netherlands",
+ "phone": "+31 62 19 22 705",
+ "openingTime": "7 Days - 8am - 10pm",
+ "email": "info@redqteam.com"
+ }
+ },
+ "footer": {
+ "copyright": "Copyright © 2021 Superprops. All rights reserved",
+ "nav": [
+ {
+ "id": 1,
+ "title": "Support",
+ "link": "#"
+ },
+ {
+ "id": 2,
+ "title": "Hiring",
+ "link": "#"
+ },
+ {
+ "id": 3,
+ "title": "Privacy",
+ "link": "#"
+ },
+ {
+ "id": 4,
+ "title": "Terms",
+ "link": "#"
+ }
+ ],
+ "socialLinks": [
+ {
+ "id": 1,
+ "link": "http://facebook.com",
+ "icon": "../../assets/image/webAppCreative/facebook.png",
+ "label": "Facebook"
+ },
+ {
+ "id": 2,
+ "link": "http://twitter.com",
+ "icon": "../../assets/image/webAppCreative/twitter.png",
+ "label": "Twitter"
+ },
+ {
+ "id": 3,
+ "link": "http://dribbble.com",
+ "icon": "../../assets/image/webAppCreative/dribbble.png",
+ "label": "Dribbble"
+ }
+ ]
+ }
+}
diff --git a/marketing/src/common/hooks/useConfig.ts b/marketing/src/common/hooks/useConfig.ts
new file mode 100644
index 000000000..497fb71ff
--- /dev/null
+++ b/marketing/src/common/hooks/useConfig.ts
@@ -0,0 +1,11 @@
+type Config = {
+ measurementId?: string;
+ appUrl?: string;
+};
+
+export function useConfig(): Config {
+ return {
+ measurementId: process.env.NEXT_PUBLIC_MEASUREMENT_ID,
+ appUrl: process.env.NEXT_PUBLIC_APP_URL,
+ };
+}
diff --git a/marketing/src/common/hooks/useMount.js b/marketing/src/common/hooks/useMount.js
new file mode 100755
index 000000000..183e955f1
--- /dev/null
+++ b/marketing/src/common/hooks/useMount.js
@@ -0,0 +1,11 @@
+import { useState, useEffect } from 'react';
+
+export default function useMount() {
+ const [isMount, setIsMount] = useState(false);
+
+ useEffect(() => {
+ setIsMount(true);
+ }, []);
+
+ return isMount;
+}
diff --git a/marketing/src/common/hooks/useOnClickOutside.js b/marketing/src/common/hooks/useOnClickOutside.js
new file mode 100755
index 000000000..98e414265
--- /dev/null
+++ b/marketing/src/common/hooks/useOnClickOutside.js
@@ -0,0 +1,22 @@
+import { useEffect } from 'react';
+
+function useOnClickOutside(ref, handler) {
+ useEffect(() => {
+ const listener = (event) => {
+ if (!ref.current || ref.current.contains(event.target)) {
+ return;
+ }
+ handler(event);
+ };
+
+ document.addEventListener('mousedown', listener);
+ document.addEventListener('touchstart', listener);
+
+ return () => {
+ document.removeEventListener('mousedown', listener);
+ document.removeEventListener('touchstart', listener);
+ };
+ }, [ref, handler]);
+}
+
+export default useOnClickOutside;
diff --git a/marketing/src/common/theme/global/colors.ts b/marketing/src/common/theme/global/colors.ts
new file mode 100755
index 000000000..377d6ed14
--- /dev/null
+++ b/marketing/src/common/theme/global/colors.ts
@@ -0,0 +1,18 @@
+const colors = {
+ transparent: 'transparent', // 0
+ black: '#000000', // 1
+ white: '#ffffff', // 2
+ textColor: '#484848', // 3
+ labelColor: '#767676', // 4
+ inactiveField: '#f2f2f2', // 5
+ inactiveButton: '#b7dbdd', // 6
+ inactiveIcon: '#EBEBEB', // 7
+ primary: '#028489', // 8
+ primaryHover: '#006b70', // 9
+ secondary: '#ff5b60', // 10
+ secondaryHover: '#FF282F', // 11
+ yellow: '#fdb32a', // 12
+ yellowHover: '#F29E02', // 13
+};
+
+export default colors;
diff --git a/marketing/src/common/theme/global/customVariant.ts b/marketing/src/common/theme/global/customVariant.ts
new file mode 100755
index 000000000..b3152753f
--- /dev/null
+++ b/marketing/src/common/theme/global/customVariant.ts
@@ -0,0 +1,17 @@
+import { variant } from 'styled-system';
+
+const buttonStyle = variant({
+ key: 'buttonStyles',
+});
+
+const colorStyle = variant({
+ key: 'colorStyles',
+ prop: 'colors',
+});
+
+const sizeStyle = variant({
+ key: 'sizeStyles',
+ prop: 'size',
+});
+
+export { buttonStyle, colorStyle, sizeStyle };
diff --git a/marketing/src/common/theme/global/index.ts b/marketing/src/common/theme/global/index.ts
new file mode 100755
index 000000000..489d48bbe
--- /dev/null
+++ b/marketing/src/common/theme/global/index.ts
@@ -0,0 +1,133 @@
+import colors from './colors';
+
+export const theme = {
+ breakpoints: [32, 48, 64],
+ space: [0, 4, 8, 16, 32, 64],
+ fontSizes: [10, 12, 14, 15, 16, 20, 24, 36, 48, 80, 96],
+ fontWeights: [100, 200, 300, 400, 500, 600, 700, 800, 900],
+ lineHeights: {
+ solid: 1,
+ title: 1.25,
+ copy: 1.5,
+ },
+ letterSpacings: {
+ normal: 'normal',
+ tracked: '0.1em',
+ tight: '-0.05em',
+ mega: '0.25em',
+ },
+ borders: [
+ 0,
+ '1px solid',
+ '2px solid',
+ '3px solid',
+ '4px solid',
+ '5px solid',
+ '6px solid',
+ ],
+ radius: [3, 4, 5, 10, 20, 30, 60, 120, '50%'],
+ widths: [36, 40, 44, 48, 54, 70, 81, 128, 256],
+ heights: [36, 40, 44, 48, 54, 70, 81, 128],
+ maxWidths: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],
+ colors,
+ colorStyles: {
+ primary: {
+ color: colors.primary,
+ borderColor: colors.primary,
+ '&:hover': {
+ color: colors.primaryHover,
+ borderColor: colors.primaryHover,
+ },
+ },
+ secondary: {
+ color: colors.secondary,
+ borderColor: colors.secondary,
+ '&:hover': {
+ color: colors.primaryHover,
+ borderColor: colors.primaryHover,
+ },
+ },
+ warning: {
+ color: colors.yellow,
+ borderColor: colors.yellow,
+ '&:hover': {
+ color: colors.yellowHover,
+ borderColor: colors.yellowHover,
+ },
+ },
+ error: {
+ color: colors.secondaryHover,
+ borderColor: colors.secondaryHover,
+ '&:hover': {
+ color: colors.secondary,
+ borderColor: colors.secondary,
+ },
+ },
+ primaryWithBg: {
+ color: colors.white,
+ backgroundColor: colors.primary,
+ borderColor: colors.primary,
+ '&:hover': {
+ backgroundColor: colors.primaryHover,
+ borderColor: colors.primaryHover,
+ },
+ },
+ secondaryWithBg: {
+ color: colors.white,
+ backgroundColor: colors.secondary,
+ borderColor: colors.secondary,
+ '&:hover': {
+ backgroundColor: colors.secondaryHover,
+ borderColor: colors.secondaryHover,
+ },
+ },
+ warningWithBg: {
+ color: colors.white,
+ backgroundColor: colors.yellow,
+ borderColor: colors.yellow,
+ '&:hover': {
+ backgroundColor: colors.yellowHover,
+ borderColor: colors.yellowHover,
+ },
+ },
+ errorWithBg: {
+ color: colors.white,
+ backgroundColor: colors.secondaryHover,
+ borderColor: colors.secondaryHover,
+ '&:hover': {
+ backgroundColor: colors.secondary,
+ borderColor: colors.secondary,
+ },
+ },
+ },
+ buttonStyles: {
+ textButton: {
+ border: 0,
+ color: colors.primary,
+ backgroundColor: colors.transparent,
+ },
+ outlined: {
+ borderWidth: '1px',
+ borderStyle: 'solid',
+ backgroundColor: colors.transparent,
+ },
+ fab: {
+ border: '0',
+ width: '40px',
+ height: '40px',
+ padding: 0,
+ borderRadius: '50%',
+ justifyContent: 'center',
+ 'span.btn-icon': {
+ paddingLeft: 0,
+ },
+ },
+ extendedFab: {
+ border: '0',
+ minWidth: '50px',
+ height: '40px',
+ borderRadius: '50px',
+ justifyContent: 'center',
+ },
+ },
+};
diff --git a/marketing/src/common/theme/webAppCreative/colors.ts b/marketing/src/common/theme/webAppCreative/colors.ts
new file mode 100755
index 000000000..5ad908d09
--- /dev/null
+++ b/marketing/src/common/theme/webAppCreative/colors.ts
@@ -0,0 +1,27 @@
+import { rgba } from 'polished';
+
+const colors = {
+ transparent: 'transparent', // 0
+ black: '#000000', // 1
+ white: '#ffffff', // 2
+ headingColor: '#0F2137', // 3
+ textColor: rgba('#0F2137', 0.65), // 4
+ textColorAlt: '#36526C', // 5
+ textColorLight: rgba('#fff', 0.7), // 6
+ labelColor: '#767676', // 7
+ inactiveField: '#f2f2f2', // 8
+ inactiveButton: '#b7dbdd', // 9
+ inactiveIcon: '#EBEBEB', // 10
+ primary: '#2C6FEE', // 11
+ primaryHover: '#3C74FF', // 12
+ secondary: '#FF9B3E', // 13
+ secondaryHover: '#FF9B3E',
+ borderColor: '#E5ECF4', //14
+ linkColor: '#2C6FEE', // 15
+ primaryBoxShadow: '0px 8px 20px -6px rgba(42, 162, 117, 0.57)',
+ secondaryBoxShadow: '0px 8px 20px -6px rgba(237, 205, 55, 0.5)',
+ yellow: '#fdb32a',
+ yellowHover: '#F29E02',
+};
+
+export default colors;
diff --git a/marketing/src/common/theme/webAppCreative/customeVariant.ts b/marketing/src/common/theme/webAppCreative/customeVariant.ts
new file mode 100755
index 000000000..8b56cd270
--- /dev/null
+++ b/marketing/src/common/theme/webAppCreative/customeVariant.ts
@@ -0,0 +1,19 @@
+import { variant } from 'styled-system';
+
+const buttonStyle = variant({
+ key: 'buttonStyles',
+});
+
+const colorStyle = variant({
+ key: 'colorStyles',
+ prop: 'colors',
+});
+
+const sizeStyle = variant({
+ key: 'sizeStyles',
+ prop: 'size',
+});
+
+export const cards = variant({ key: 'cards' });
+
+export { buttonStyle, colorStyle, sizeStyle };
diff --git a/marketing/src/common/theme/webAppCreative/index.ts b/marketing/src/common/theme/webAppCreative/index.ts
new file mode 100755
index 000000000..54a09de37
--- /dev/null
+++ b/marketing/src/common/theme/webAppCreative/index.ts
@@ -0,0 +1,126 @@
+import colors from './colors';
+export const theme = {
+ breakpoints: ['480px', '768px', '990px', '1220px'],
+ space: [0, 5, 10, 15, 20, 25, 30, 40, 56, 71, 91],
+ fontSizes: [10, 12, 14, 15, 16, 20, 24, 36, 48, 55, 60, 81],
+ fontWeights: [300, 400, 500, 600, 700, 800, 900],
+ lineHeights: {
+ solid: 1,
+ title: 1.25,
+ copy: 1.5,
+ },
+ letterSpacings: {
+ normal: 'normal',
+ tracked: '0.1em',
+ tight: '-0.05em',
+ mega: '0.25em',
+ },
+ fonts: {
+ dmsans: "'DM Sans', sans-serif",
+ },
+ borders: [0, '1px solid', '2px solid', '4px solid'],
+ radius: [0, 3, 5, 10, 15, 20, 25, 50, 60, '50%'],
+ colors,
+ colorStyles: {
+ primary: {
+ color: colors.primary,
+ borderColor: colors.primary,
+ '&:hover': {
+ color: colors.primaryHover,
+ borderColor: colors.primaryHover,
+ },
+ },
+ secondary: {
+ color: colors.secondary,
+ borderColor: colors.secondary,
+ '&:hover': {
+ color: colors.secondaryHover,
+ borderColor: colors.secondaryHover,
+ },
+ },
+ warning: {
+ color: colors.yellow,
+ borderColor: colors.yellow,
+ '&:hover': {
+ color: colors.yellowHover,
+ borderColor: colors.yellowHover,
+ },
+ },
+ error: {
+ color: colors.secondaryHover,
+ borderColor: colors.secondaryHover,
+ '&:hover': {
+ color: colors.secondary,
+ borderColor: colors.secondary,
+ },
+ },
+ primaryWithBg: {
+ color: colors.white,
+ backgroundColor: colors.primary,
+ borderColor: colors.primary,
+ '&:hover': {
+ backgroundColor: colors.primaryHover,
+ borderColor: colors.primaryHover,
+ },
+ },
+ secondaryWithBg: {
+ color: colors.white,
+ backgroundColor: colors.secondary,
+ borderColor: colors.secondary,
+ '&:hover': {
+ backgroundColor: colors.secondaryHover,
+ borderColor: colors.secondaryHover,
+ },
+ },
+ warningWithBg: {
+ color: colors.white,
+ backgroundColor: colors.yellow,
+ borderColor: colors.yellow,
+ '&:hover': {
+ backgroundColor: colors.yellowHover,
+ borderColor: colors.yellowHover,
+ },
+ },
+ errorWithBg: {
+ color: colors.white,
+ backgroundColor: colors.secondaryHover,
+ borderColor: colors.secondaryHover,
+ '&:hover': {
+ backgroundColor: colors.secondary,
+ borderColor: colors.secondary,
+ },
+ },
+ },
+ buttonStyles: {
+ textButton: {
+ border: 0,
+ color: colors.primary,
+ padding: 0,
+ height: 'auto',
+ backgroundColor: `${colors.transparent}`,
+ },
+ outlined: {
+ borderWidth: '1px',
+ borderStyle: 'solid',
+ backgroundColor: colors.transparent,
+ },
+ fab: {
+ border: '0',
+ width: '40px',
+ height: '40px',
+ padding: 0,
+ borderRadius: '50%',
+ justifyContent: 'center',
+ 'span.btn-icon': {
+ paddingLeft: 0,
+ },
+ },
+ extendedFab: {
+ border: '0',
+ minWidth: '50px',
+ height: '40px',
+ borderRadius: '50px',
+ justifyContent: 'center',
+ },
+ },
+};
diff --git a/marketing/src/containers/WebAppCreative/AnalyticsTool/analytics.style.tsx b/marketing/src/containers/WebAppCreative/AnalyticsTool/analytics.style.tsx
new file mode 100755
index 000000000..51b93c99d
--- /dev/null
+++ b/marketing/src/containers/WebAppCreative/AnalyticsTool/analytics.style.tsx
@@ -0,0 +1,209 @@
+import { Parallax } from 'react-parallax';
+import styled from 'styled-components';
+import { rgba } from 'polished';
+import { themeGet } from '@styled-system/theme-get';
+import parallaxBg from '../../../common/assets/image/webAppCreative/parallax-1.png';
+import polygon from '../../../common/assets/image/webAppCreative/polygon.png';
+
+const Section = styled(Parallax)`
+ /* background: #373754 url(${parallaxBg?.src}) no-repeat fixed center center / cover; */
+ background-color: #373754;
+ padding-top: 100px;
+ padding-bottom: 100px;
+ overflow: unset !important;
+ @media (max-width: 1280px) {
+ padding-top: 60px;
+ padding-bottom: 60px;
+ }
+ @media (max-width: 1024px) {
+ padding-top: 60px;
+ padding-bottom: 80px;
+ }
+ @media (max-width: 768px) {
+ padding-top: 40px;
+ padding-bottom: 60px;
+ }
+ .react-parallax-bgimage {
+ z-index: 10;
+ }
+ .container {
+ @media (min-width: 768px) {
+ /* position: relative;
+ ::after {
+ background: transparent url(${polygon?.src}) no-repeat;
+ content: '';
+ right: 0;
+ position: absolute;
+ width: 104px;
+ height: 104px;
+ z-index: 1;
+ top: -80px;
+ } */
+ }
+ @media (min-width: 1024px) {
+ ::after {
+ top: -95px;
+ }
+ }
+ @media (min-width: 1280px) {
+ ::after {
+ top: -100px;
+ }
+ }
+ @media (min-width: 1440px) {
+ ::after {
+ top: -140px;
+ }
+ }
+ }
+ .react-parallax-content {
+ z-index: 10;
+ }
+`;
+
+export const Grid = styled.div`
+ display: flex;
+ @media (max-width: 1024px) {
+ gap: 30px;
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ }
+ @media (max-width: 768px) {
+ display: block;
+ }
+`;
+
+export const Figure = styled.figure`
+ margin: 0 0 0 -5px;
+ img {
+ @media (min-width: 567px) and (max-width: 768px) {
+ max-width: 80%;
+ margin-left: auto;
+ margin-right: auto;
+ }
+ }
+`;
+
+export const Content = styled.div`
+ margin-left: 85px;
+ margin-top: 30px;
+ @media (max-width: 1280px) {
+ margin-left: 45px;
+ }
+ @media (max-width: 1024px) {
+ margin-left: 0;
+ margin-top: 0;
+ }
+ @media (max-width: 768px) {
+ margin: 15px 0 0;
+ text-align: center;
+ }
+ .subtitle {
+ color: ${themeGet('colors.secondary')};
+ font-size: 16px;
+ font-weight: 700;
+ line-height: 22px;
+ letter-spacing: -0.005em;
+ @media (min-width: 769px) and (max-width: 1024px) {
+ font-size: 15px;
+ line-height: 2;
+ }
+ }
+ h2 {
+ color: ${themeGet('colors.white')};
+ font-weight: 800;
+ font-size: 40px;
+ line-height: 1.25;
+ letter-spacing: -0.03em;
+ max-width: 480px;
+ @media (max-width: 1280px) {
+ font-size: 32px;
+ }
+ @media (max-width: 1024px) {
+ font-size: 28px;
+ line-height: 1.5;
+ }
+ @media (max-width: 768px) {
+ margin-left: auto;
+ margin-right: auto;
+ max-width: 500px;
+ }
+ @media (max-width: 480px) {
+ font-size: 24px;
+ }
+ }
+ .description {
+ color: ${themeGet('colors.textColorLight')};
+ font-weight: 500;
+ font-size: 16px;
+ line-height: 2;
+ max-width: 460px;
+ @media (max-width: 768px) {
+ margin-left: auto;
+ margin-right: auto;
+ }
+ }
+ .explore {
+ margin-top: 40px;
+ @media only screen and (min-width: 1024px) and (max-width: 1366px) {
+ margin-top: 15px;
+ }
+ @media only screen and (max-width: 1024px) {
+ margin-top: 30px;
+ }
+ button {
+ background-color: transparent;
+ border: 1px solid ${rgba('#fffefe', 0.4)};
+ border-radius: 7px;
+ color: ${themeGet('colors.white')};
+ :hover {
+ background-color: ${themeGet('colors.primary')};
+ border-color: ${themeGet('colors.primary')};
+ color: ${themeGet('colors.white')};
+ }
+ }
+ i {
+ line-height: 1;
+ transform: translateX(0px);
+ transition: 0.3s ease 0s;
+ }
+ &:hover i {
+ transform: translateX(3px);
+ }
+ }
+`;
+
+export const Features = styled.ul`
+ gap: 15px;
+ display: grid;
+ margin-top: 30px;
+ text-align: left;
+ @media only screen and (max-width: 480px) {
+ gap: 10px;
+ }
+ @media only screen and (max-width: 768px) {
+ max-width: 350px;
+ margin-left: auto;
+ margin-right: auto;
+ }
+ li {
+ color: ${themeGet('colors.white')};
+ font-family: 'Inter', sans-serif;
+ font-weight: 500;
+ font-size: 17px;
+ line-height: 21px;
+ @media only screen and (max-width: 480px) {
+ font-size: 15px;
+ line-height: 18px;
+ }
+ i {
+ color: #3fdbb1;
+ margin-right: 15px;
+ @media only screen and (max-width: 480px) {
+ margin-right: 6px;
+ }
+ }
+ }
+`;
+
+export default Section;
diff --git a/marketing/src/containers/WebAppCreative/AnalyticsTool/index.tsx b/marketing/src/containers/WebAppCreative/AnalyticsTool/index.tsx
new file mode 100755
index 000000000..07991432b
--- /dev/null
+++ b/marketing/src/containers/WebAppCreative/AnalyticsTool/index.tsx
@@ -0,0 +1,55 @@
+import React from 'react';
+import Fade from 'react-reveal/Fade';
+import { Icon } from 'react-icons-kit';
+import { check } from 'react-icons-kit/feather/check';
+import { ic_keyboard_arrow_right } from 'react-icons-kit/md/ic_keyboard_arrow_right';
+import Container from '../../../common/components/UI/Container';
+import NextImage from '../../../common/components/NextImage';
+import Button from '../../../common/components/Button';
+import Text from '../../../common/components/Text';
+import Link from '../../../common/components/Link';
+import Heading from '../../../common/components/Heading';
+import analytics from './server-secure.svg';
+import Section, { Grid, Figure, Content, Features } from './analytics.style';
+import parallaxBg from '../../../common/assets/image/webAppCreative/parallax-1.png';
+import { useTranslation } from 'next-i18next';
+
+const AnalyticsTool = () => {
+ const { t } = useTranslation();
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {(
+ t('SelfHosted.features', { returnObjects: true }) as string[]
+ ).map((feat, i) => (
+
+
+ {feat}
+
+ ))}
+
+
+ }
+ />
+
+
+
+
+
+ );
+};
+
+export default AnalyticsTool;
diff --git a/marketing/src/containers/WebAppCreative/AnalyticsTool/server-secure.svg b/marketing/src/containers/WebAppCreative/AnalyticsTool/server-secure.svg
new file mode 100644
index 000000000..3c5e04af8
--- /dev/null
+++ b/marketing/src/containers/WebAppCreative/AnalyticsTool/server-secure.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/marketing/src/containers/WebAppCreative/Banner/banner.style.tsx b/marketing/src/containers/WebAppCreative/Banner/banner.style.tsx
new file mode 100755
index 000000000..5bc447a39
--- /dev/null
+++ b/marketing/src/containers/WebAppCreative/Banner/banner.style.tsx
@@ -0,0 +1,164 @@
+import { rgba } from 'polished';
+import styled from 'styled-components';
+import { themeGet } from '@styled-system/theme-get';
+
+import dashboardPattern from '../../../common/assets/image/webAppCreative/dashboard-pattern.png';
+
+const Section = styled.section`
+ background: url(${dashboardPattern?.src}) no-repeat center bottom;
+ position: relative;
+ z-index: 0;
+ @media (min-width: 768px) and (max-width: 1280px) {
+ background-size: contain;
+ }
+ @media (min-width: 1280px) {
+ margin-bottom: 50px;
+ }
+`;
+
+export const BannerContentWrapper = styled.div`
+ @media (min-width: 1280px) {
+ min-height: 100vh;
+ }
+`;
+
+export const BannerContent = styled.div`
+ padding-top: 210px;
+ max-width: 870px;
+ margin: 0 auto;
+ text-align: center;
+ @media (max-width: 1024px) {
+ max-width: 660px;
+ padding-top: 170px;
+ }
+ @media (max-width: 768px) {
+ max-width: 550px;
+ padding-top: 150px;
+ }
+ @media (max-width: 480px) {
+ padding-top: 100px;
+ }
+ h2 {
+ color: ${themeGet('colors.headingColor')};
+ font-weight: 700;
+ font-size: 54px;
+ line-height: 1.3;
+ text-align: center;
+ letter-spacing: -1px;
+ @media (max-width: 1024px) {
+ font-size: 40px;
+ }
+ @media (max-width: 768px) {
+ font-size: 32px;
+ }
+ @media (max-width: 480px) {
+ font-size: 24px;
+ }
+ }
+ p {
+ font-weight: 500;
+ font-size: 18px;
+ line-height: 2.11;
+ color: ${themeGet('colors.textColor')};
+ max-width: 600px;
+ margin: 0 auto;
+
+ @media (max-width: 480px) {
+ font-size: 16px;
+ line-height: 1.6;
+ }
+ }
+`;
+
+export const Subscribe = styled.div`
+ display: flex;
+ justify-content: center;
+ max-width: 540px;
+ margin: 28px auto 0;
+ @media screen and (max-width: 1366px) {
+ max-width: 80%;
+ }
+ @media only screen and (max-width: 768px) {
+ max-width: 80%;
+ margin: 30px auto 0;
+ }
+ @media only screen and (max-width: 480px) {
+ max-width: initial;
+ display: block;
+ }
+ .reusecore__input {
+ width: 100%;
+ }
+ .field-wrapper {
+ background-color: #f1f4f6;
+ border-radius: 8px;
+ margin-right: 15px;
+ flex-direction: row-reverse;
+ @media only screen and (max-width: 480px) {
+ margin-right: 0;
+ }
+ input {
+ background-color: #f1f4f6;
+ border: 0;
+ border-radius: 8px;
+ font-size: 16px;
+ min-height: 60px;
+ padding: 0 24px;
+ &::placeholder {
+ color: ${rgba('#02073E', 0.4)};
+ opacity: 1; /* Firefox */
+ }
+ @media only screen and (max-width: 1280px) {
+ min-height: 50px;
+ }
+ }
+ }
+ .icon-left {
+ .field-wrapper {
+ input {
+ padding-left: 12px;
+ }
+ > .input-icon {
+ position: static;
+ height: auto;
+ padding: 0;
+ margin-left: 25px;
+ min-width: 25px;
+ width: auto;
+ }
+ }
+ }
+ button {
+ border-radius: 8px;
+ white-space: nowrap;
+ padding: 0 30px;
+ min-height: 60px;
+ @media only screen and (max-width: 1200px) {
+ min-height: 50px;
+ }
+ @media only screen and (max-width: 480px) {
+ margin-top: 15px;
+ min-height: 45px;
+ width: 100%;
+ }
+ }
+`;
+
+export const Figure = styled.figure`
+ margin: 30px 0 0;
+ display: flex;
+
+ img {
+ width: 100%;
+ object-fit: contain;
+ @media (min-width: 1280px) {
+ margin-left: auto;
+ margin-right: auto;
+ }
+ }
+ @media (min-width: 768px) {
+ margin-top: 80px;
+ }
+`;
+
+export default Section;
diff --git a/marketing/src/containers/WebAppCreative/Banner/index.tsx b/marketing/src/containers/WebAppCreative/Banner/index.tsx
new file mode 100755
index 000000000..c84d10754
--- /dev/null
+++ b/marketing/src/containers/WebAppCreative/Banner/index.tsx
@@ -0,0 +1,54 @@
+import Container from '../../../common/components/UI/Container';
+import Heading from '../../../common/components/Heading';
+import Text from '../../../common/components/Text';
+import Button from '../../../common/components/Button';
+import NextImage from '../../../common/components/NextImage';
+import Section, {
+ BannerContentWrapper,
+ BannerContent,
+ Subscribe,
+ Figure,
+} from './banner.style';
+import screenshot from './mockup-1-02.webp';
+import { useTranslation } from 'next-i18next';
+import { useConfig } from '@/common/hooks/useConfig';
+
+const Banner = () => {
+ const { t } = useTranslation('common');
+ const { appUrl } = useConfig();
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default Banner;
diff --git a/marketing/src/containers/WebAppCreative/Banner/mockup-1-02.webp b/marketing/src/containers/WebAppCreative/Banner/mockup-1-02.webp
new file mode 100644
index 000000000..82299d5e4
Binary files /dev/null and b/marketing/src/containers/WebAppCreative/Banner/mockup-1-02.webp differ
diff --git a/marketing/src/containers/WebAppCreative/CallToAction/cta.style.tsx b/marketing/src/containers/WebAppCreative/CallToAction/cta.style.tsx
new file mode 100755
index 000000000..f914cd5fa
--- /dev/null
+++ b/marketing/src/containers/WebAppCreative/CallToAction/cta.style.tsx
@@ -0,0 +1,159 @@
+import styled from 'styled-components';
+import { Wrapper, Menu } from 'react-aria-menubutton';
+import { themeGet } from '@styled-system/theme-get';
+
+const Section = styled.section`
+ background-color: #2c6fee;
+ padding-top: 60px;
+ padding-bottom: 80px;
+ position: relative;
+ @media (max-width: 1280px) {
+ padding-bottom: 20px;
+ }
+ @media (max-width: 1024px) {
+ padding-top: 40px;
+ padding-bottom: 60px;
+ }
+ @media (max-width: 768px) {
+ padding-top: 40px;
+ padding-bottom: 60px;
+ }
+ @media (max-width: 480px) {
+ padding-top: 40px;
+ padding-bottom: 40px;
+ }
+ .bubble-1,
+ .bubble-2 {
+ position: absolute;
+ }
+ .bubble-1 {
+ left: 0;
+ bottom: -6px;
+ max-width: 60px;
+ @media (min-width: 768px) {
+ bottom: -10px;
+ max-width: 100px;
+ }
+ @media (min-width: 1280px) {
+ max-width: 130px;
+ }
+ }
+ .bubble-2 {
+ right: 0;
+ top: -10px;
+ max-width: 60px;
+ @media (min-width: 768px) {
+ top: -20px;
+ max-width: 100px;
+ }
+ @media (min-width: 1280px) {
+ max-width: 130px;
+ }
+ }
+`;
+
+export const Content = styled.div`
+ max-width: 880px;
+ margin: 0 auto;
+ text-align: center;
+ h2 {
+ color: ${themeGet('colors.white')};
+ font-weight: 800;
+ font-size: 36px;
+ line-height: 1.53;
+ letter-spacing: -0.5px;
+ max-width: 755px;
+ margin: 0 auto 15px;
+ @media (max-width: 1024px) {
+ font-size: 32px;
+ }
+ @media (max-width: 768px) {
+ font-size: 28px;
+ }
+ @media (max-width: 480px) {
+ font-size: 24px;
+ margin-bottom: 20px;
+ }
+ }
+ p {
+ color: ${themeGet('colors.textColorLight')};
+ font-weight: 500;
+ font-size: 17px;
+ line-height: 2.06;
+ max-width: 575px;
+ margin: 0 auto 55px;
+ @media (min-width: 1025px) and (max-width: 1280px) {
+ margin-bottom: 35px;
+ }
+ @media (max-width: 768px) {
+ margin-bottom: 30px;
+ }
+ @media (max-width: 480px) {
+ font-size: 16px;
+ margin-bottom: 25px;
+ }
+ }
+ span {
+ display: block;
+ a {
+ color: ${themeGet('colors.textColorLight')};
+ font-size: 14px;
+ font-weight: 700;
+ line-height: 2.43;
+ margin-top: 25px;
+ @media (max-width: 480px) {
+ margin-top: 15px;
+ }
+ }
+ }
+`;
+
+export const DownloadButton = styled(Wrapper)`
+ background-color: ${themeGet('colors.white')};
+ color: ${themeGet('colors.headingColor')};
+ display: inline-flex;
+ align-items: center;
+ border-radius: 8px;
+ font-size: 18px;
+ font-weight: 700;
+ line-height: 1.33;
+ letter-spacing: -0.16px;
+ min-height: 65px;
+ padding: 0 40px;
+ position: relative;
+ @media (min-width: 1025px) and (max-width: 1280px) {
+ font-size: 16px;
+ min-height: 55px;
+ padding: 0 25px;
+ }
+ @media (max-width: 768px) {
+ font-size: 16px;
+ min-height: 50px;
+ padding: 0 20px;
+ }
+ @media (max-width: 480px) {
+ padding: 0 30px;
+ }
+`;
+
+export const DownloadOptions = styled(Menu)`
+ background-color: #fff;
+ box-shadow: 0px 3px 8px 0px rgb(43 83 135 / 8%);
+ border-radius: 8px;
+ position: absolute;
+ top: 100%;
+ width: 100%;
+ left: 0;
+ margin-top: 10px;
+ padding: 10px 0;
+ li {
+ cursor: pointer;
+ padding: 10px;
+ transition: all 0.25s ease 0s;
+ :hover {
+ background-color: rgba(0, 0, 0, 0.08);
+ }
+ }
+`;
+
+export default Section;
diff --git a/marketing/src/containers/WebAppCreative/CallToAction/index.tsx b/marketing/src/containers/WebAppCreative/CallToAction/index.tsx
new file mode 100755
index 000000000..4adfa2dc5
--- /dev/null
+++ b/marketing/src/containers/WebAppCreative/CallToAction/index.tsx
@@ -0,0 +1,46 @@
+import Container from '../../../common/components/UI/Container';
+import Heading from '../../../common/components/Heading';
+import Text from '../../../common/components/Text';
+import Section, { Content } from './cta.style';
+import bubble1 from '../../../common/assets/image/webAppCreative/cta-bubble-1.png';
+import bubble2 from '../../../common/assets/image/webAppCreative/cta-bubble-2.png';
+import { useTranslation } from 'next-i18next';
+import Button from '@/common/components/Button';
+import NextImage from '@/common/components/NextImage';
+import { useConfig } from '@/common/hooks/useConfig';
+
+const CallToAction = () => {
+ const { t } = useTranslation();
+ const { appUrl } = useConfig();
+
+ return (
+
+
+
+
+
+
+
+
+
+ {/* {t('CTA.hint')} */}
+
+
+
+
+ );
+};
+
+export default CallToAction;
diff --git a/marketing/src/containers/WebAppCreative/Clients/adidas.png b/marketing/src/containers/WebAppCreative/Clients/adidas.png
new file mode 100644
index 000000000..b77a0d1a7
Binary files /dev/null and b/marketing/src/containers/WebAppCreative/Clients/adidas.png differ
diff --git a/marketing/src/containers/WebAppCreative/Clients/amazon.png b/marketing/src/containers/WebAppCreative/Clients/amazon.png
new file mode 100644
index 000000000..341c38949
Binary files /dev/null and b/marketing/src/containers/WebAppCreative/Clients/amazon.png differ
diff --git a/marketing/src/containers/WebAppCreative/Clients/barclays.png b/marketing/src/containers/WebAppCreative/Clients/barclays.png
new file mode 100644
index 000000000..5287c8823
Binary files /dev/null and b/marketing/src/containers/WebAppCreative/Clients/barclays.png differ
diff --git a/marketing/src/containers/WebAppCreative/Clients/clients.style.tsx b/marketing/src/containers/WebAppCreative/Clients/clients.style.tsx
new file mode 100755
index 000000000..f012352cf
--- /dev/null
+++ b/marketing/src/containers/WebAppCreative/Clients/clients.style.tsx
@@ -0,0 +1,94 @@
+import styled from 'styled-components';
+import { themeGet } from '@styled-system/theme-get';
+
+const Section = styled.section`
+ padding-bottom: 60px;
+ @media (min-width: 769px) and (max-width: 1024px) {
+ padding-top: 40px;
+ }
+ @media (max-width: 1024px) {
+ padding-bottom: 50px;
+ }
+ @media (max-width: 768px) {
+ padding-top: 40px;
+ }
+ @media (max-width: 480px) {
+ padding-top: 40px;
+ padding-bottom: 40px;
+ }
+`;
+
+export const Title = styled.div`
+ margin-top: 10px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ p {
+ font-weight: 500;
+ font-size: 17px;
+ margin-bottom: 0;
+ color: ${themeGet('colors.textColor')};
+ @media (max-width: 480px) {
+ text-align: center;
+ }
+ }
+`;
+
+export const Figure = styled.figure`
+ margin: 0;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ opacity: 0.7;
+`;
+
+export const SliderWrapper = styled.div`
+ margin-top: 45px;
+ max-width: 1050px;
+ margin-left: auto;
+ margin-right: auto;
+ .slider {
+ display: flex;
+ justify-content: space-between;
+ }
+ figure {
+ img {
+ opacity: 0.7;
+ }
+ }
+ .slick-slide > div {
+ display: flex;
+ min-height: 35px;
+ align-items: center;
+ img {
+ margin: 0 auto;
+ }
+ }
+ .slick-track {
+ align-items: center;
+ justify-content: center;
+ display: flex;
+ gap: 20px;
+ }
+ .slick-dots {
+ display: flex !important;
+ align-items: center;
+ justify-content: center;
+ margin-top: 30px;
+ button {
+ background-color: rgba(0, 0, 0, 0.2);
+ border: 0;
+ border-radius: 20px;
+ height: 10px;
+ width: 10px;
+ margin: 0 5px;
+ padding: 0;
+ text-indent: -9999em;
+ }
+ .slick-active button {
+ background-color: rgba(0, 0, 0, 0.6);
+ }
+ }
+`;
+
+export default Section;
diff --git a/marketing/src/containers/WebAppCreative/Clients/db.png b/marketing/src/containers/WebAppCreative/Clients/db.png
new file mode 100644
index 000000000..d49113ddc
Binary files /dev/null and b/marketing/src/containers/WebAppCreative/Clients/db.png differ
diff --git a/marketing/src/containers/WebAppCreative/Clients/db.svg b/marketing/src/containers/WebAppCreative/Clients/db.svg
new file mode 100644
index 000000000..bd36822e3
--- /dev/null
+++ b/marketing/src/containers/WebAppCreative/Clients/db.svg
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/marketing/src/containers/WebAppCreative/Clients/deloitte.png b/marketing/src/containers/WebAppCreative/Clients/deloitte.png
new file mode 100644
index 000000000..21d6a9750
Binary files /dev/null and b/marketing/src/containers/WebAppCreative/Clients/deloitte.png differ
diff --git a/marketing/src/containers/WebAppCreative/Clients/delta.png b/marketing/src/containers/WebAppCreative/Clients/delta.png
new file mode 100644
index 000000000..fecb219e4
Binary files /dev/null and b/marketing/src/containers/WebAppCreative/Clients/delta.png differ
diff --git a/marketing/src/containers/WebAppCreative/Clients/expedia.png b/marketing/src/containers/WebAppCreative/Clients/expedia.png
new file mode 100644
index 000000000..13afa20b1
Binary files /dev/null and b/marketing/src/containers/WebAppCreative/Clients/expedia.png differ
diff --git a/marketing/src/containers/WebAppCreative/Clients/ibm.png b/marketing/src/containers/WebAppCreative/Clients/ibm.png
new file mode 100644
index 000000000..aad8e8d6d
Binary files /dev/null and b/marketing/src/containers/WebAppCreative/Clients/ibm.png differ
diff --git a/marketing/src/containers/WebAppCreative/Clients/index.tsx b/marketing/src/containers/WebAppCreative/Clients/index.tsx
new file mode 100755
index 000000000..a9c19ddae
--- /dev/null
+++ b/marketing/src/containers/WebAppCreative/Clients/index.tsx
@@ -0,0 +1,121 @@
+import React from 'react';
+import Slider, { Settings } from 'react-slick';
+import Container from '../../../common/components/UI/Container';
+import NextImage from '../../../common/components/NextImage';
+import Text from '../../../common/components/Text';
+import Section, { Title, SliderWrapper, Figure } from './clients.style';
+import { useTranslation } from 'next-i18next';
+import adidas from './adidas.png';
+import amazon from './amazon.png';
+import barclays from './barclays.png';
+import deloitte from './deloitte.png';
+import delta from './delta.png';
+import expedia from './expedia.png';
+import ibm from './ibm.png';
+import natwest from './natwest.png';
+import novartis from './novartis.png';
+import pwc from './pwc.png';
+import siemens from './siemens.png';
+import vodafone from './vodafone.png';
+import dbahn from './db.png';
+
+type ImageType = typeof vodafone;
+
+const clients: ImageType[] = [
+ dbahn,
+ adidas,
+ amazon,
+ barclays,
+ deloitte,
+ delta,
+ expedia,
+ ibm,
+ natwest,
+ novartis,
+ pwc,
+ siemens,
+ // target,
+ // vodafone,
+];
+
+const settings: Settings = {
+ className: 'center',
+ infinite: true,
+ speed: 500,
+ slidesToShow: 4,
+ slidesToScroll: 1,
+ centerMode: true,
+ arrows: false,
+ dots: true,
+ responsive: [
+ {
+ breakpoint: 10000, // a unrealistically big number to cover up greatest screen resolution
+ settings: 'unslick',
+ },
+ {
+ breakpoint: 2400,
+ settings: {
+ slidesToShow: 8,
+ slidesToScroll: 1,
+ },
+ },
+ {
+ breakpoint: 1280,
+ settings: {
+ slidesToShow: 5,
+ slidesToScroll: 1,
+ },
+ },
+ {
+ breakpoint: 1024,
+ settings: {
+ slidesToShow: 4,
+ slidesToScroll: 1,
+ },
+ },
+ {
+ breakpoint: 768,
+ settings: {
+ slidesToShow: 4,
+ slidesToScroll: 1,
+ },
+ },
+ {
+ breakpoint: 480,
+ settings: {
+ slidesToShow: 2,
+ slidesToScroll: 1,
+ },
+ },
+ ],
+};
+
+const Clients = () => {
+ const { t } = useTranslation();
+
+ return (
+
+
+
+
+
+
+
+ {clients.map((client, i) => (
+
+
+
+ ))}
+
+
+
+
+ );
+};
+
+export default Clients;
diff --git a/marketing/src/containers/WebAppCreative/Clients/natwest.png b/marketing/src/containers/WebAppCreative/Clients/natwest.png
new file mode 100644
index 000000000..dde2d9d7f
Binary files /dev/null and b/marketing/src/containers/WebAppCreative/Clients/natwest.png differ
diff --git a/marketing/src/containers/WebAppCreative/Clients/novartis.png b/marketing/src/containers/WebAppCreative/Clients/novartis.png
new file mode 100644
index 000000000..83a9a3821
Binary files /dev/null and b/marketing/src/containers/WebAppCreative/Clients/novartis.png differ
diff --git a/marketing/src/containers/WebAppCreative/Clients/pwc.png b/marketing/src/containers/WebAppCreative/Clients/pwc.png
new file mode 100644
index 000000000..dc6f5038a
Binary files /dev/null and b/marketing/src/containers/WebAppCreative/Clients/pwc.png differ
diff --git a/marketing/src/containers/WebAppCreative/Clients/siemens.png b/marketing/src/containers/WebAppCreative/Clients/siemens.png
new file mode 100644
index 000000000..a23890928
Binary files /dev/null and b/marketing/src/containers/WebAppCreative/Clients/siemens.png differ
diff --git a/marketing/src/containers/WebAppCreative/Clients/target.png b/marketing/src/containers/WebAppCreative/Clients/target.png
new file mode 100644
index 000000000..fe6ca07a2
Binary files /dev/null and b/marketing/src/containers/WebAppCreative/Clients/target.png differ
diff --git a/marketing/src/containers/WebAppCreative/Clients/vodafone.png b/marketing/src/containers/WebAppCreative/Clients/vodafone.png
new file mode 100644
index 000000000..26b7e915f
Binary files /dev/null and b/marketing/src/containers/WebAppCreative/Clients/vodafone.png differ
diff --git a/marketing/src/containers/WebAppCreative/Dashboard/dashboard.style.tsx b/marketing/src/containers/WebAppCreative/Dashboard/dashboard.style.tsx
new file mode 100755
index 000000000..50a80942e
--- /dev/null
+++ b/marketing/src/containers/WebAppCreative/Dashboard/dashboard.style.tsx
@@ -0,0 +1,200 @@
+import styled from 'styled-components';
+import { themeGet } from '@styled-system/theme-get';
+import { Tabs } from 'react-tabs';
+import pattern1 from '../../../common/assets/image/webAppCreative/pattern1.png';
+import pattern2 from '../../../common/assets/image/webAppCreative/pattern2.png';
+
+const Section = styled.section`
+ background-color: #fff;
+ padding-top: 100px;
+ padding-bottom: 100px;
+ position: relative;
+ z-index: 20;
+ @media (max-width: 1280px) {
+ padding-top: 60px;
+ padding-bottom: 60px;
+ }
+ @media (max-width: 1024px) {
+ padding-top: 60px;
+ padding-bottom: 60px;
+ }
+ @media (max-width: 768px) {
+ padding-top: 40px;
+ padding-bottom: 40px;
+ }
+`;
+export default Section;
+
+export const SectionHeading = styled.div`
+ max-width: 960px;
+ margin-left: auto;
+ margin-right: auto;
+ text-align: center;
+ margin-bottom: 40px;
+ h2 {
+ font-weight: 800;
+ font-size: 26px;
+ line-height: 49px;
+ letter-spacing: -0.2px;
+ @media only screen and (max-width: 480px) {
+ font-size: 24px;
+ line-height: 1.5;
+ }
+ }
+ p {
+ color: ${themeGet('colors.textColor')};
+ font-family: 'Inter', sans-serif;
+ font-size: 18px;
+ line-height: 2.22;
+ margin-bottom: 0;
+ margin-left: auto;
+ margin-right: auto;
+ @media only screen and (max-width: 1024px) {
+ max-width: 700px;
+ }
+ @media only screen and (max-width: 768px) {
+ font-size: 16px;
+ line-height: 2;
+ max-width: 550px;
+ }
+ }
+`;
+
+export const ReactTabs = styled(Tabs)`
+ > nav {
+ text-align: center;
+ margin-bottom: 15px;
+ }
+ .react-tabs__tab-list {
+ background-color: #f4f5f9;
+ padding: 6px;
+ display: inline-flex;
+ border-radius: 70px;
+ justify-content: center;
+ @media only screen and (max-width: 1280px) {
+ margin-bottom: 30px;
+ }
+ @media only screen and (max-width: 768px) {
+ margin-bottom: 45px;
+ }
+ @media only screen and (max-width: 480px) {
+ display: flex;
+ border-radius: 6px;
+ padding: 12px;
+ max-width: 100%;
+ overflow-x: scroll;
+ justify-content: flex-start;
+
+ // scrollbar
+ ::-webkit-scrollbar {
+ -webkit-appearance: none;
+ -webkit-overflow-scrolling: auto;
+ height: 8px;
+ width: 8px;
+ border-radius: 10px;
+ background: #e3e3e3;
+ }
+ ::-webkit-scrollbar-thumb:horizontal {
+ background-color: rgba(0, 0, 0, 0.2);
+ border-radius: 10px;
+ border-radius: 4px;
+ }
+ }
+ }
+ .react-tabs__tab {
+ color: ${themeGet('colors.headingColor')};
+ cursor: pointer;
+ font-weight: 700;
+ font-size: 18px;
+ line-height: 25px;
+ padding: 14px 18px;
+ transition: all 0.3s ease-in-out 0s;
+ @media only screen and (max-width: 480px) {
+ font-size: 16px;
+ padding: 10px;
+ }
+ @media only screen and (min-width: 768px) {
+ font-size: 16px;
+ + .react-tabs__tab {
+ margin-left: 12px;
+ }
+ }
+ }
+ .react-tabs__tab--selected {
+ background-color: #fff;
+ border-radius: 70px;
+ box-shadow: 0px 10px 30px rgba(80, 99, 126, 0.1);
+ @media only screen and (max-width: 480px) {
+ border-radius: 6px;
+ }
+ }
+ .react-tabs__tab-panel {
+ figure {
+ margin: 0;
+ position: relative;
+ animation-duration: 400ms;
+ img {
+ @media (min-width: 1280px) and (max-width: 1140px) {
+ max-width: 80%;
+ margin-left: auto;
+ margin-right: auto;
+ }
+ }
+ ::before,
+ ::after {
+ content: '';
+ position: absolute;
+ z-index: -1;
+ }
+ ::before {
+ background: transparent url(${pattern1?.src}) no-repeat;
+ width: 223px;
+ height: 202px;
+ left: 0;
+ top: -5px;
+ @media (min-width: 1025px) and (max-width: 1440px) {
+ left: 80px;
+ top: -25px;
+ }
+ @media (max-width: 1024px) {
+ margin-top: -15px;
+ }
+ @media (max-width: 768px) {
+ width: 150px;
+ height: 150px;
+ background-size: contain;
+ top: -10px;
+ }
+ @media (max-width: 480px) {
+ width: 100px;
+ height: 100px;
+ background-size: contain;
+ top: -10px;
+ }
+ }
+ ::after {
+ background: transparent url(${pattern2?.src}) no-repeat;
+ height: 223px;
+ width: 202px;
+ right: -30px;
+ bottom: -35px;
+ @media (min-width: 1025px) and (max-width: 1440px) {
+ right: 95px;
+ bottom: -55px;
+ }
+ @media (max-width: 768px) {
+ width: 150px;
+ height: 150px;
+ background-size: contain;
+ bottom: -10px;
+ }
+ @media (max-width: 480px) {
+ width: 100px;
+ height: 100px;
+ background-size: contain;
+ bottom: -10px;
+ }
+ }
+ }
+ }
+`;
diff --git a/marketing/src/containers/WebAppCreative/Dashboard/index.tsx b/marketing/src/containers/WebAppCreative/Dashboard/index.tsx
new file mode 100755
index 000000000..e864df06d
--- /dev/null
+++ b/marketing/src/containers/WebAppCreative/Dashboard/index.tsx
@@ -0,0 +1,79 @@
+import React from 'react';
+import { Tab, TabList, TabPanel } from 'react-tabs';
+import Container from '../../../common/components/UI/Container';
+import NextImage from '../../../common/components/NextImage';
+import Text from '../../../common/components/Text';
+import Heading from '../../../common/components/Heading';
+import Section, { SectionHeading, ReactTabs } from './dashboard.style';
+import dashboardImg from '../../../common/assets/image/webAppCreative/dashboard-2.png';
+import { useTranslation } from 'next-i18next';
+
+export const dashboard = {
+ tabs: [
+ {
+ id: 1,
+ title: 'Features.feature1',
+ content: {
+ image: dashboardImg,
+ },
+ },
+ {
+ id: 2,
+ title: 'Features.feature2',
+ content: {
+ image: dashboardImg,
+ },
+ },
+ {
+ id: 3,
+ title: 'Features.feature3',
+ content: {
+ image: dashboardImg,
+ },
+ },
+ {
+ id: 4,
+ title: 'Features.feature4',
+ content: {
+ image: dashboardImg,
+ },
+ },
+ ],
+};
+
+const Dashboard = () => {
+ const { t } = useTranslation();
+ return (
+
+
+
+
+
+
+
+
+
+ {dashboard.tabs.map((tab) => (
+ {t(tab.title)}
+ ))}
+
+
+
+ {dashboard.tabs.map((tab) => (
+
+
+
+
+
+ ))}
+
+
+
+ );
+};
+
+export default Dashboard;
diff --git a/marketing/src/containers/WebAppCreative/Faq/faq.style.tsx b/marketing/src/containers/WebAppCreative/Faq/faq.style.tsx
new file mode 100755
index 000000000..a423aab6c
--- /dev/null
+++ b/marketing/src/containers/WebAppCreative/Faq/faq.style.tsx
@@ -0,0 +1,102 @@
+import styled from 'styled-components';
+import { themeGet } from '@styled-system/theme-get';
+import Collapse from 'rc-collapse';
+
+const Section = styled.section`
+ padding: 80px 0;
+ @media (max-width: 1280px) {
+ padding-top: 50px;
+ }
+ @media (max-width: 1024px) {
+ padding-top: 50px;
+ padding-bottom: 70px;
+ }
+ @media (max-width: 768px) {
+ padding-top: 40px;
+ padding-bottom: 60px;
+ }
+ .container {
+ max-width: 750px;
+ }
+`;
+
+export const SectionHeading = styled.div`
+ text-align: center;
+ margin-bottom: 50px;
+ h2 {
+ margin-bottom: 0;
+ @media (min-width: 1024px) {
+ font-size: 26px;
+ }
+ @media (max-width: 480px) {
+ font-size: 24px;
+ }
+ }
+`;
+
+export const RcCollapse = styled(Collapse)`
+ background-color: transparent;
+ border: 0;
+ display: grid;
+ gap: 12px;
+ .rc-collapse-item {
+ border: 0;
+ box-shadow: 0px 2px 6px rgba(187, 199, 206, 0.25);
+ border-radius: 6px;
+ padding: 25px;
+ .rc-collapse-header {
+ display: flex;
+ cursor: pointer;
+ justify-content: space-between;
+ padding: 0;
+ z-index: 100;
+ position: relative;
+ .icon {
+ position: relative;
+ width: 15px;
+ height: 15px;
+ i {
+ position: absolute;
+ left: 50%;
+ top: 50%;
+ transform: translate(-50%, -50%);
+ }
+ }
+ .plus {
+ color: rgba(0, 0, 0, 0.4);
+ }
+ .minus {
+ opacity: 0;
+ }
+ }
+ h4 {
+ margin-bottom: 0;
+ }
+ .rc-collapse-content {
+ padding: 0 25px;
+ @media (max-width: 480px) {
+ padding: 0;
+ }
+ }
+ .rc-collapse-content-box {
+ padding: 15px 0 0;
+ font-weight: 500;
+ font-size: 15px;
+ line-height: 1.87;
+ margin: 0;
+ }
+ }
+ .rc-collapse-item-active {
+ .rc-collapse-header {
+ .minus {
+ color: ${themeGet('colors.black')};
+ opacity: 1;
+ }
+ .plus {
+ opacity: 0;
+ }
+ }
+ }
+`;
+
+export default Section;
diff --git a/marketing/src/containers/WebAppCreative/Faq/index.tsx b/marketing/src/containers/WebAppCreative/Faq/index.tsx
new file mode 100755
index 000000000..78681c843
--- /dev/null
+++ b/marketing/src/containers/WebAppCreative/Faq/index.tsx
@@ -0,0 +1,62 @@
+import { useState, Fragment } from 'react';
+import Heading from '../../../common/components/Heading';
+import Container from '../../../common/components/UI/Container';
+import { Icon } from 'react-icons-kit';
+import { plus } from 'react-icons-kit/entypo/plus';
+import { minus } from 'react-icons-kit/entypo/minus';
+import Section, { SectionHeading, RcCollapse } from './faq.style';
+import { Panel } from 'rc-collapse';
+import motion from './motion-util';
+import { useTranslation } from 'next-i18next';
+
+type FAQ = {
+ question: string;
+ answer: string;
+};
+
+const Faq = () => {
+ const { t } = useTranslation();
+ const faqs = t('FAQ.data', { returnObjects: true }) as FAQ[];
+ const [activeKey, setActiveKey] = useState(0);
+
+ const onChange = (activeKey: React.Key | React.Key[]) => {
+ setActiveKey(activeKey);
+ };
+
+ return (
+
+
+
+
+
+
+ {faqs?.map((faq, id) => (
+
+
+
+
+
+
+
+ }
+ >
+ {faq.answer}
+
+ ))}
+
+
+
+ );
+};
+
+export default Faq;
diff --git a/marketing/src/containers/WebAppCreative/Faq/motion-util.ts b/marketing/src/containers/WebAppCreative/Faq/motion-util.ts
new file mode 100755
index 000000000..1e77cae68
--- /dev/null
+++ b/marketing/src/containers/WebAppCreative/Faq/motion-util.ts
@@ -0,0 +1,22 @@
+const getCollapsedHeight = () => ({ height: 0, opacity: 0 });
+const getRealHeight = (node: HTMLElement) => ({
+ height: node.scrollHeight,
+ opacity: 1,
+});
+const getCurrentHeight = (node: HTMLElement) => ({ height: node.offsetHeight });
+const skipOpacityTransition = (_: unknown, event: any) =>
+ event.propertyName === 'height';
+
+const collapseMotion = {
+ motionName: 'rc-collapse-motion',
+ onEnterStart: getCollapsedHeight,
+ onEnterActive: getRealHeight,
+ onLeaveStart: getCurrentHeight,
+ onLeaveActive: getCollapsedHeight,
+ onEnterEnd: skipOpacityTransition,
+ onLeaveEnd: skipOpacityTransition,
+ motionDeadline: 500,
+ leavedClassName: 'rc-collapse-content-hidden',
+};
+
+export default collapseMotion;
diff --git a/marketing/src/containers/WebAppCreative/Footer/footer.style.tsx b/marketing/src/containers/WebAppCreative/Footer/footer.style.tsx
new file mode 100755
index 000000000..252fbc538
--- /dev/null
+++ b/marketing/src/containers/WebAppCreative/Footer/footer.style.tsx
@@ -0,0 +1,175 @@
+import styled from 'styled-components';
+import { themeGet } from '@styled-system/theme-get';
+import { rgba } from 'polished';
+
+export const Section = styled.footer`
+ padding-top: 50px;
+`;
+
+export const Grid = styled.div`
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+ @media screen and (max-width: 768px) {
+ gap: 30px 30px;
+ grid-template-columns: repeat(2, 1fr);
+ }
+ @media screen and (max-width: 480px) {
+ gap: 20px 0px;
+ grid-template-columns: repeat(2, 50%);
+ }
+`;
+
+export const AboutUs = styled.div`
+ @media screen and (min-width: 1280px) {
+ width: 290px;
+ margin-right: 80px;
+ }
+ @media screen and (min-width: 1024px) {
+ width: 240px;
+ margin-right: 30px;
+ }
+ @media screen and (max-width: 480px) {
+ grid-column: 1/3;
+ }
+ img {
+ max-width: 126px;
+ margin-bottom: 25px;
+ }
+ p {
+ color: ${themeGet('colors.textColor')};
+ font-family: Inter, sans-serif;
+ font-size: 15px;
+ line-height: 2;
+ letter-spacing: -0.002em;
+ margin-bottom: 0;
+ }
+`;
+
+export const FooterWidget = styled.div`
+ h4 {
+ font-weight: 700;
+ font-size: 17px;
+ line-height: 1.76;
+ margin: 0 0 25px;
+ @media screen and (max-width: 768px) {
+ margin-bottom: 15px;
+ }
+ @media screen and (max-width: 480px) {
+ font-size: 16px;
+ }
+ }
+
+ &:last-child {
+ margin-right: 0;
+ }
+ .widgetListItem {
+ a {
+ color: ${themeGet('colors.textColor')};
+ font-size: 14px;
+ line-height: 2.5;
+ font-weight: 500;
+ &:hover {
+ color: #02073e;
+ }
+ }
+ }
+`;
+
+export const ContactInfo = styled.div`
+ @media screen and (max-width: 768px) {
+ grid-column: 2/4;
+ }
+ @media screen and (max-width: 480px) {
+ grid-column: 1/3;
+ }
+ h4 {
+ font-weight: 700;
+ font-size: 17px;
+ line-height: 1.76;
+ margin: 0 0 25px;
+ }
+`;
+
+export const InfoItem = styled.div`
+ color: ${themeGet('colors.textColor')};
+ display: flex;
+ align-items: flex-start;
+ font-family: Inter, sans-serif;
+ font-size: 15px;
+ line-height: 28px;
+ letter-spacing: -0.002em;
+ i {
+ color: ${rgba('#000', 0.35)};
+ margin-right: 12px;
+ }
+ .phone-icon {
+ margin-top: 6px;
+ }
+ .phone-number {
+ margin-bottom: 0;
+ }
+`;
+
+export const FooterBottom = styled.div`
+ border-top: 1px solid ${themeGet('colors.borderColor')};
+ color: ${themeGet('colors.headingColor')};
+ font-family: Inter, sans-serif;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ padding: 40px 0 45px;
+ margin-top: 60px;
+ @media screen and (max-width: 1024px) {
+ margin-top: 40px;
+ }
+ @media screen and (max-width: 768px) {
+ gap: 25px;
+ display: grid;
+ text-align: center;
+ justify-content: center;
+ }
+ p {
+ margin-bottom: 0;
+ @media screen and (max-width: 480px) {
+ line-height: 1.8;
+ }
+ }
+`;
+
+export const FooterNav = styled.ul`
+ display: flex;
+ justify-content: center;
+ li {
+ + li {
+ margin-left: 30px;
+ @media screen and (max-width: 480px) {
+ margin-left: 20px;
+ }
+ }
+ a {
+ color: ${themeGet('colors.headingColor')};
+ :hover {
+ color: ${themeGet('colors.black')};
+ }
+ }
+ }
+`;
+
+export const SocialLinks = styled.div`
+ align-items: center;
+ display: flex;
+ @media screen and (max-width: 768px) {
+ justify-content: center;
+ }
+ ul {
+ display: flex;
+ align-items: center;
+ li {
+ display: inline-flex;
+ margin-left: 15px;
+ a {
+ display: inline-flex;
+ }
+ }
+ }
+`;
diff --git a/marketing/src/containers/WebAppCreative/Footer/index.tsx b/marketing/src/containers/WebAppCreative/Footer/index.tsx
new file mode 100755
index 000000000..e47a3f8a8
--- /dev/null
+++ b/marketing/src/containers/WebAppCreative/Footer/index.tsx
@@ -0,0 +1,253 @@
+import { Icon } from 'react-icons-kit';
+import { ic_place } from 'react-icons-kit/md/ic_place';
+import { ic_phone } from 'react-icons-kit/md/ic_phone';
+import { paperPlane } from 'react-icons-kit/fa/paperPlane';
+import Container from '../../../common/components/UI/Container';
+import Heading from '../../../common/components/Heading';
+import Image from '../../../common/components/Image';
+import Text from '../../../common/components/Text';
+import Link from '../../../common/components/Link';
+import {
+ Section,
+ Grid,
+ AboutUs,
+ FooterWidget,
+ ContactInfo,
+ InfoItem,
+ FooterBottom,
+ FooterNav,
+ SocialLinks,
+} from './footer.style';
+import NextImage from '@/common/components/NextImage';
+import siteLogo from '../Navbar/logo.png';
+import facebook from '../../../common/assets/image/webAppCreative/icons/facebook.png';
+import twitter from '../../../common/assets/image/webAppCreative/icons/twitter.png';
+import dribbble from '../../../common/assets/image/webAppCreative/icons/dribbble.png';
+import { useTranslation } from 'next-i18next';
+
+export const footerTop = {
+ about: {
+ logo: siteLogo,
+ text: `We run Advanced Search reports on the criteria you care about to see how work is progressing and where to focus your effort.`,
+ },
+ widgets: [
+ {
+ id: 2,
+ title: 'About Us',
+ list: [
+ {
+ id: 1,
+ title: 'Support Center',
+ link: '#',
+ },
+ {
+ id: 2,
+ title: 'Customer Support',
+ link: '#',
+ },
+ {
+ id: 3,
+ title: 'About Us',
+ link: '#',
+ },
+ {
+ id: 4,
+ title: 'Copyright',
+ link: '#',
+ },
+ {
+ id: 5,
+ title: 'Popular Campaign',
+ link: '#',
+ },
+ ],
+ },
+ {
+ id: 3,
+ title: 'Our Information',
+ list: [
+ {
+ id: 1,
+ title: 'Return Policy ',
+ link: '#',
+ },
+ {
+ id: 2,
+ title: 'Privacy Policy',
+ link: '#',
+ },
+ {
+ id: 3,
+ title: 'Terms & Conditions',
+ link: '#',
+ },
+ {
+ id: 4,
+ title: 'Site Map',
+ link: '#',
+ },
+ {
+ id: 5,
+ title: 'Store Hours',
+ link: '#',
+ },
+ ],
+ },
+ {
+ id: 4,
+ title: 'My Account',
+ list: [
+ {
+ id: 1,
+ title: 'Press inquiries',
+ link: '#',
+ },
+ {
+ id: 2,
+ title: 'Social media ',
+ link: '#',
+ },
+ {
+ id: 3,
+ title: 'directories',
+ link: '#',
+ },
+ {
+ id: 4,
+ title: 'Images & B-roll',
+ link: '#',
+ },
+ {
+ id: 5,
+ title: 'Permissions',
+ link: '#',
+ },
+ ],
+ },
+ ],
+ contactInfo: {
+ title: 'Contact info',
+ address: `Mohakhali DOHS, Amsterdam, Netherlands`,
+ phone: `+31 62 19 22 705`,
+ openingTime: `7 Days - 8am - 10pm`,
+ email: `info@redqteam.com`,
+ },
+};
+
+export const footer = {
+ copyright: `Copyright © ${new Date().getFullYear()} Superprops. All rights reserved`,
+ nav: [
+ {
+ id: 1,
+ title: 'Support',
+ link: '#',
+ },
+ {
+ id: 2,
+ title: 'Hiring',
+ link: '#',
+ },
+ {
+ id: 3,
+ title: 'Privacy',
+ link: '#',
+ },
+ {
+ id: 4,
+ title: 'Terms',
+ link: '#',
+ },
+ ],
+ socialLinks: [
+ {
+ id: 1,
+ link: 'http://facebook.com',
+ icon: facebook,
+ label: 'Facebook',
+ },
+ {
+ id: 2,
+ link: 'http://twitter.com',
+ icon: twitter,
+ label: 'Twitter',
+ },
+ {
+ id: 3,
+ link: 'http://dribbble.com',
+ icon: dribbble,
+ label: 'Dribbble',
+ },
+ ],
+};
+
+const Footer = () => {
+ const { t } = useTranslation();
+ return (
+
+
+
+
+
+
+
+ {/* {footerTop.widgets.map((item) => (
+
+ {item.title}
+
+ {item.list.map((item) => (
+
+ {item.title}
+
+ ))}
+
+
+ ))} */}
+
+
+
+
+
+
+ {/*
+
+
+
+
+
+ */}
+
+
+
+
+
+
+
+
+
+
+ {/*
+ {footer.nav.map((item) => (
+
+ {item.title}
+
+ ))}
+ */}
+ {/*
+ Social:
+
+ {footer.socialLinks.map((item) => (
+
+
+
+
+
+ ))}
+
+ */}
+
+
+
+ );
+};
+
+export default Footer;
diff --git a/marketing/src/containers/WebAppCreative/HowItWorks/howItWorks.style.tsx b/marketing/src/containers/WebAppCreative/HowItWorks/howItWorks.style.tsx
new file mode 100755
index 000000000..72409fa15
--- /dev/null
+++ b/marketing/src/containers/WebAppCreative/HowItWorks/howItWorks.style.tsx
@@ -0,0 +1,119 @@
+import styled from 'styled-components';
+import { themeGet } from '@styled-system/theme-get';
+
+const Section = styled.section`
+ padding-top: 60px;
+ padding-bottom: 120px;
+ @media (max-width: 1024px) {
+ padding-top: 50px;
+ }
+ @media (max-width: 768px) {
+ padding-top: 40px;
+ padding-bottom: 60px;
+ }
+`;
+
+export const SectionHeading = styled.div`
+ text-align: center;
+ h2 {
+ font-weight: 800;
+ line-height: 36px;
+ letter-spacing: -0.5px;
+ @media (min-width: 1024px) {
+ font-size: 26px;
+ }
+ @media (max-width: 480px) {
+ font-size: 24px;
+ }
+ }
+`;
+
+export const Grid = styled.div`
+ gap: 60px;
+ display: grid;
+ grid-template-columns: repeat(4, 1fr);
+ margin-top: 80px;
+ @media (max-width: 1280px) {
+ gap: 18px;
+ }
+ @media (max-width: 1024px) {
+ gap: 20px;
+ margin-top: 60px;
+ }
+ @media (max-width: 768px) {
+ grid-template-columns: repeat(2, 290px);
+ justify-content: center;
+ gap: 50px 40px;
+ }
+ @media (max-width: 480px) {
+ grid-template-columns: repeat(1, 1fr);
+ margin-top: 60px;
+ }
+`;
+
+export const Item = styled.div`
+ text-align: center;
+ figure {
+ margin: 0 0 40px;
+ min-height: 110px;
+ @media (min-width: 769px) and (max-width: 1024px) {
+ min-height: auto;
+ margin-bottom: 30px;
+ }
+ @media (max-width: 480px) {
+ margin-bottom: 20px;
+ min-height: auto;
+ }
+ }
+ img {
+ margin: 0 auto;
+ @media (max-width: 1024px) {
+ max-width: 70px;
+ }
+ }
+ h4 {
+ font-weight: bold;
+ font-size: 18px;
+ line-height: 25px;
+ @media (max-width: 1024px) {
+ font-size: 17px;
+ }
+ @media (max-width: 480px) {
+ font-size: 16px;
+ margin-bottom: 5px;
+ }
+ }
+ p {
+ color: ${themeGet('colors.textColor')};
+ font-size: 16px;
+ font-weight: 500;
+ line-height: 2;
+ @media (min-width: 769px) and (max-width: 1024px) {
+ font-size: 15px;
+ line-height: 1.9;
+ }
+ @media (max-width: 480px) {
+ font-size: 15px;
+ }
+ }
+ a {
+ color: ${themeGet('colors.linkColor')};
+ font-size: 15px;
+ font-weight: 700;
+ line-height: 20px;
+ letter-spacing: -0.1px;
+ @media (min-width: 769px) and (max-width: 1024px) {
+ font-size: 14px;
+ }
+ i {
+ line-height: 1;
+ transform: translateX(2px);
+ transition: 0.3s ease 0s;
+ }
+ &:hover i {
+ transform: translateX(5px);
+ }
+ }
+`;
+
+export default Section;
diff --git a/marketing/src/containers/WebAppCreative/HowItWorks/index.tsx b/marketing/src/containers/WebAppCreative/HowItWorks/index.tsx
new file mode 100755
index 000000000..7a46697e1
--- /dev/null
+++ b/marketing/src/containers/WebAppCreative/HowItWorks/index.tsx
@@ -0,0 +1,88 @@
+import React from 'react';
+// import { Icon } from 'react-icons-kit'; TODO !!!!
+// import { arrowRight } from 'react-icons-kit/feather/arrowRight';
+import Container from '../../../common/components/UI/Container';
+import NextImage from '../../../common/components/NextImage';
+import Link from '../../../common/components/Link';
+import Heading from '../../../common/components/Heading';
+import Text from '../../../common/components/Text';
+import Section, { SectionHeading, Grid, Item } from './howItWorks.style';
+import icon1 from '../../../common/assets/image/webAppCreative/icons/1.png';
+import icon2 from '../../../common/assets/image/webAppCreative/icons/2.png';
+import icon3 from '../../../common/assets/image/webAppCreative/icons/3.png';
+import icon4 from '../../../common/assets/image/webAppCreative/icons/4.png';
+import { useTranslation } from 'next-i18next';
+
+type HowTo = {
+ id: number;
+ icon: any; // TODO
+ title: string;
+ text: string;
+ linkLabel: string;
+ link: string;
+};
+
+export const howTos: HowTo[] = [
+ {
+ id: 1,
+ icon: icon1,
+ title: 'Manage Smartly',
+ text: `Stay on top of your task lists and stay in touch with what's happening`,
+ linkLabel: 'Learn More',
+ link: '#',
+ },
+ {
+ id: 2,
+ icon: icon2,
+ title: 'Monitor user Analytics',
+ text: `Stay on top of your task lists and stay in touch with what's happening`,
+ linkLabel: 'Learn More',
+ link: '#',
+ },
+ {
+ id: 3,
+ icon: icon3,
+ title: 'Safe & Trusted',
+ text: `Get the best DoorDash experience with live order tracking.`,
+ linkLabel: 'Learn More',
+ link: '#',
+ },
+ {
+ id: 4,
+ icon: icon4,
+ title: 'Fast Customer Support',
+ text: `Get the best DoorDash experience with live order tracking.`,
+ linkLabel: 'Learn More',
+ link: '#',
+ },
+];
+
+const HowItWorks = () => {
+ const { t } = useTranslation();
+ return (
+
+
+
+
+
+
+ {howTos.map((howTo) => (
+ -
+
+
+
+
+
+
+ {howTo.linkLabel}
+ {/* */}
+
+
+ ))}
+
+
+
+ );
+};
+
+export default HowItWorks;
diff --git a/marketing/src/containers/WebAppCreative/Integrations/index.tsx b/marketing/src/containers/WebAppCreative/Integrations/index.tsx
new file mode 100755
index 000000000..f12af9390
--- /dev/null
+++ b/marketing/src/containers/WebAppCreative/Integrations/index.tsx
@@ -0,0 +1,33 @@
+import Container from '../../../common/components/UI/Container';
+import NextImage from '../../../common/components/NextImage';
+import Text from '../../../common/components/Text';
+import Heading from '../../../common/components/Heading';
+import Section, { SectionHeading, SupportedApps } from './integration.style';
+
+import { appIntegration } from '../../../common/data/WebAppCreative';
+
+const Integrations = () => {
+ return (
+
+
+
+
+
+
+
+ {appIntegration.apps.map((app) => (
+
+
+
+ ))}
+
+
+
+ );
+};
+
+export default Integrations;
diff --git a/marketing/src/containers/WebAppCreative/Integrations/integration.style.tsx b/marketing/src/containers/WebAppCreative/Integrations/integration.style.tsx
new file mode 100755
index 000000000..01315de0f
--- /dev/null
+++ b/marketing/src/containers/WebAppCreative/Integrations/integration.style.tsx
@@ -0,0 +1,112 @@
+import styled from 'styled-components';
+import { themeGet } from '@styled-system/theme-get';
+
+const Section = styled.div`
+ padding-top: 100px;
+ padding-bottom: 80px;
+ @media (max-width: 1280px) {
+ padding-top: 60px;
+ padding-bottom: 60px;
+ }
+ @media (max-width: 1024px) {
+ padding-top: 60px;
+ padding-bottom: 50px;
+ }
+ @media (max-width: 768px) {
+ padding-top: 40px;
+ padding-bottom: 60px;
+ }
+ @media (max-width: 768px) {
+ padding-bottom: 40px;
+ }
+`;
+export default Section;
+
+export const SectionHeading = styled.div`
+ max-width: 580px;
+ margin-left: auto;
+ margin-right: auto;
+ text-align: center;
+ margin-bottom: 60px;
+ @media only screen and (max-width: 768px) {
+ margin-bottom: 40px;
+ }
+ h2 {
+ color: ${themeGet('colors.white')};
+ font-weight: 800;
+ font-size: 26px;
+ line-height: 36px;
+ letter-spacing: -0.2px;
+ @media only screen and (max-width: 480px) {
+ font-size: 24px;
+ line-height: 1.5;
+ }
+ }
+ p {
+ color: ${themeGet('colors.textColorLight')};
+ font-family: 'Inter', sans-serif;
+ font-size: 18px;
+ line-height: 2.22;
+ margin-bottom: 0;
+ @media only screen and (max-width: 768px) {
+ font-size: 16px;
+ line-height: 2;
+ }
+ }
+`;
+
+export const SupportedApps = styled.div`
+ display: flex;
+ flex-wrap: wrap;
+ margin-left: auto;
+ margin-right: auto;
+ justify-content: center;
+ @media only screen and (min-width: 768px) {
+ max-width: 1080px;
+ }
+ figure {
+ margin: 0 7.5px 15px;
+ border-radius: 32px;
+ background: linear-gradient(
+ 0deg,
+ rgba(255, 255, 255, 0.1),
+ rgba(255, 255, 255, 0.1)
+ );
+ box-shadow: rgb(105 109 121 / 4%) 4px 8px 8px,
+ rgb(105 109 121 / 15%) 1px 1px 1px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ min-width: 120px;
+ min-height: 120px;
+ &.blurred {
+ opacity: 0.4;
+ filter: blur(6px);
+ }
+ @media only screen and (max-width: 1024px) {
+ border-radius: 20px;
+ min-width: 98px;
+ min-height: 98px;
+ }
+ @media only screen and (max-width: 768px) {
+ min-width: 85px;
+ min-height: 85px;
+ }
+ @media only screen and (max-width: 480px) {
+ border-radius: 20px;
+ min-width: 60px;
+ min-height: 60px;
+ }
+ img {
+ @media only screen and (max-width: 1024px) {
+ max-width: 55px;
+ }
+ @media only screen and (max-width: 768px) {
+ max-width: 45px;
+ }
+ @media only screen and (max-width: 480px) {
+ max-width: 30px;
+ }
+ }
+ }
+`;
diff --git a/marketing/src/containers/WebAppCreative/Navbar/index.tsx b/marketing/src/containers/WebAppCreative/Navbar/index.tsx
new file mode 100755
index 000000000..c1a074b7d
--- /dev/null
+++ b/marketing/src/containers/WebAppCreative/Navbar/index.tsx
@@ -0,0 +1,139 @@
+import React, { useContext } from 'react';
+import Link from 'next/link';
+import NavbarWrapper from '../../../common/components/Navbar';
+import Drawer from '../../../common/components/Drawer';
+import Button from '../../../common/components/Button';
+import Logo from '../../../common/components/UIElements/Logo';
+import Box from '../../../common/components/Box';
+import HamburgMenu from '../../../common/components/HamburgMenu';
+import Container from '../../../common/components/UI/Container';
+import { DrawerContext } from '../../../common/contexts/DrawerContext';
+import ScrollSpyMenu from '../../../common/components/ScrollSpyMenu';
+import logoImage from './logo.png';
+import { MenuItem } from '@/types';
+import { useTranslation } from 'next-i18next';
+import { useConfig } from '@/common/hooks/useConfig';
+
+export const menuItems: MenuItem[] = [
+ {
+ label: 'Nav.home',
+ path: '#home',
+ offset: '70',
+ },
+ {
+ label: 'Nav.howTo',
+ path: '#how-to',
+ offset: '70',
+ },
+ {
+ label: 'Nav.features',
+ path: '#features',
+ offset: '70',
+ },
+ {
+ label: 'Nav.testimonial',
+ path: '#testimonial',
+ offset: '70',
+ },
+ {
+ label: 'Nav.pricing',
+ path: '#pricing',
+ offset: '70',
+ },
+ {
+ label: 'Nav.faq',
+ path: '#faq',
+ offset: '70',
+ },
+];
+
+type NavbarProps = {
+ navbarStyle?: any;
+ logoStyle?: any;
+ button?: any;
+ row?: any;
+ menuWrapper?: any;
+};
+
+const Navbar = ({
+ navbarStyle = {
+ className: 'web_app_creative_navbar',
+ minHeight: '70px',
+ display: 'block',
+ },
+ row = {
+ flexBox: true,
+ alignItems: 'center',
+ width: '100%',
+ },
+ logoStyle = {
+ maxWidth: ['126px', '126px'],
+ },
+ button = {},
+ menuWrapper = {
+ flexBox: true,
+ alignItems: 'center',
+ },
+}: NavbarProps) => {
+ const { state, dispatch } = useContext(DrawerContext);
+ const { t } = useTranslation();
+ const { appUrl } = useConfig();
+
+ // Toggle drawer
+ const toggleHandler = () => {
+ dispatch({
+ type: 'TOGGLE',
+ });
+ };
+
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ }
+ open={state.isOpen}
+ toggleHandler={toggleHandler}
+ >
+
+
+
+
+
+
+ );
+};
+
+export default Navbar;
diff --git a/marketing/src/containers/WebAppCreative/Navbar/logo.png b/marketing/src/containers/WebAppCreative/Navbar/logo.png
new file mode 100644
index 000000000..3be312d09
Binary files /dev/null and b/marketing/src/containers/WebAppCreative/Navbar/logo.png differ
diff --git a/marketing/src/containers/WebAppCreative/NewsFeed/index.tsx b/marketing/src/containers/WebAppCreative/NewsFeed/index.tsx
new file mode 100755
index 000000000..e255a8151
--- /dev/null
+++ b/marketing/src/containers/WebAppCreative/NewsFeed/index.tsx
@@ -0,0 +1,42 @@
+import React from 'react';
+import { Icon } from 'react-icons-kit';
+import Fade from 'react-reveal/Fade';
+import { arrowRight } from 'react-icons-kit/feather/arrowRight';
+import Container from '../../../common/components/UI/Container';
+import Heading from '../../../common/components/Heading';
+import NextImage from '../../../common/components/NextImage';
+import Text from '../../../common/components/Text';
+import Link from '../../../common/components/Link';
+
+import { posts } from '../../../common/data/WebAppCreative';
+import { Section, SectionHeading, Grid, Article } from './newsFeed.style';
+import { useTranslation } from 'next-i18next';
+
+const NewsFeed = () => {
+ const { t } = useTranslation();
+ return (
+
+
+
+
+
+
+ {posts.map((post) => (
+
+
+
+
+
+
+ {post.excerpt.label}
+
+
+
+ ))}
+
+
+
+ );
+};
+
+export default NewsFeed;
diff --git a/marketing/src/containers/WebAppCreative/NewsFeed/newsFeed.style.tsx b/marketing/src/containers/WebAppCreative/NewsFeed/newsFeed.style.tsx
new file mode 100755
index 000000000..5a3f362ca
--- /dev/null
+++ b/marketing/src/containers/WebAppCreative/NewsFeed/newsFeed.style.tsx
@@ -0,0 +1,97 @@
+import styled from 'styled-components';
+import { themeGet } from '@styled-system/theme-get';
+
+export const Section = styled.section`
+ padding-top: 70px;
+ padding-bottom: 60px;
+ @media screen and (max-width: 480px) {
+ padding-bottom: 45px;
+ }
+`;
+
+export const SectionHeading = styled.div`
+ text-align: center;
+ margin-bottom: 70px;
+ @media screen and (max-width: 768px) {
+ margin-bottom: 40px;
+ }
+ h2 {
+ font-weight: 700;
+ font-size: 26px;
+ line-height: 1.5;
+ letter-spacing: -0.2px;
+ @media screen and (max-width: 768px) {
+ font-size: 26px;
+ }
+ @media screen and (max-width: 480px) {
+ font-size: 24px;
+ }
+ }
+`;
+
+export const Grid = styled.div`
+ gap: 30px;
+ display: grid;
+ justify-content: center;
+ grid-template-columns: repeat(3, 415px);
+ @media screen and (max-width: 1280px) {
+ gap: 30px;
+ grid-template-columns: repeat(3, 1fr);
+ }
+ @media screen and (max-width: 1024px) {
+ gap: 15px;
+ }
+ @media screen and (max-width: 480px) {
+ grid-template-columns: 1fr;
+ grid-gap: 40px 0;
+ }
+`;
+
+export const Article = styled.article`
+ transition: all 0.2s ease 0s;
+ :hover {
+ transform: translateY(-7px);
+ }
+ img {
+ border-radius: 12px;
+ }
+ p {
+ font-family: Inter, sans-serif;
+ font-weight: 500;
+ font-size: 15px;
+ line-height: 18px;
+ margin: 20px 0 0;
+ }
+ h4 {
+ font-weight: 700;
+ font-size: 18px;
+ line-height: 1.68;
+ margin: 8px 0 0;
+ @media screen and (max-width: 1024px) {
+ font-size: 17px;
+ }
+ @media screen and (max-width: 768px) {
+ font-size: 16px;
+ }
+ }
+ a {
+ color: ${themeGet('colors.linkColor')};
+ font-weight: 700;
+ font-size: 15px;
+ line-height: 20px;
+ letter-spacing: -0.1px;
+ margin-top: 10px;
+ @media screen and (max-width: 480px) {
+ font-size: 14px;
+ }
+ i {
+ line-height: 1;
+ margin-left: 5px;
+ transform: translateX(0px);
+ transition: 0.3s ease 0s;
+ }
+ &:hover i {
+ transform: translateX(3px);
+ }
+ }
+`;
diff --git a/marketing/src/containers/WebAppCreative/Pricing/index.tsx b/marketing/src/containers/WebAppCreative/Pricing/index.tsx
new file mode 100755
index 000000000..c8b900834
--- /dev/null
+++ b/marketing/src/containers/WebAppCreative/Pricing/index.tsx
@@ -0,0 +1,167 @@
+import { useState } from 'react';
+import { Icon } from 'react-icons-kit';
+import Fade from 'react-reveal/Fade';
+import { ic_keyboard_arrow_right } from 'react-icons-kit/md/ic_keyboard_arrow_right';
+import Container from '../../../common/components/UI/Container';
+import Heading from '../../../common/components/Heading';
+import Button from '../../../common/components/Button';
+import Image from '../../../common/components/Image';
+import Text from '../../../common/components/Text';
+import icecream from '../../../common/assets/image/webAppCreative/icons/icecream.png';
+import donut from '../../../common/assets/image/webAppCreative/icons/donut.png';
+import pizza from '../../../common/assets/image/webAppCreative/icons/pizza.png';
+import {
+ Section,
+ SectionHeading,
+ SwitcherWrapper,
+ Grid,
+ PriceTable,
+} from './pricing.style';
+import { useTranslation } from 'next-i18next';
+
+type Pricing = {
+ id: number;
+ key: string;
+ isActive: boolean;
+ title: string;
+ features: string;
+ icon: any;
+ isSubscribe: boolean;
+ recurrent: boolean;
+};
+
+export const pricing: Pricing[] = [
+ {
+ id: 1,
+ key: 'basic',
+ isActive: false,
+ title: 'Pricing.basic.title',
+ features: 'Pricing.basic.features',
+ icon: icecream,
+ isSubscribe: false,
+ recurrent: true,
+ },
+ {
+ id: 2,
+ key: 'pro',
+ isActive: false,
+ title: 'Pricing.pro.title',
+ features: 'Pricing.pro.features',
+ icon: donut,
+ isSubscribe: true,
+ recurrent: true,
+ },
+ {
+ id: 3,
+ key: 'unlimited',
+ isActive: true,
+ title: 'Pricing.unlimited.title',
+ features: 'Pricing.unlimited.features',
+ icon: pizza,
+ isSubscribe: true,
+ recurrent: true,
+ },
+ {
+ id: 4,
+ key: 'hosted',
+ isActive: false,
+ title: 'Pricing.hosted.title',
+ features: 'Pricing.hosted.features',
+ icon: pizza,
+ isSubscribe: true,
+ recurrent: false,
+ },
+];
+
+function toPrice(price: string, factor: number) {
+ return (parseFloat(price) * factor).toFixed(2);
+}
+
+const Pricing = () => {
+ const [isMonthly, setIsMonthly] = useState(true);
+ const { t } = useTranslation();
+
+ const handleToggle = () => {
+ setIsMonthly(!isMonthly);
+ };
+
+ return (
+
+
+
+
+
+
+
+ {t('Pricing.monthly')}
+
+
+
+
+
+ {t('Pricing.yearly')}
+
+
+
+ {pricing.map((priceTable) => {
+ const key = `Pricing.${priceTable.key}`;
+ return (
+
+
+
+
+
+
+ {(
+ t(`${key}.features`, { returnObjects: true }) as string[]
+ ).map((f, i) => (
+
+ ))}
+
+
+
+
+
+ {/*
+ {priceTable.details.label}{' '}
+
+ */}
+
+
+ );
+ })}
+
+
+
+ );
+};
+
+export default Pricing;
diff --git a/marketing/src/containers/WebAppCreative/Pricing/pricing.style.tsx b/marketing/src/containers/WebAppCreative/Pricing/pricing.style.tsx
new file mode 100755
index 000000000..768a45116
--- /dev/null
+++ b/marketing/src/containers/WebAppCreative/Pricing/pricing.style.tsx
@@ -0,0 +1,185 @@
+import styled from 'styled-components';
+import { rgba } from 'polished';
+import { themeGet } from '@styled-system/theme-get';
+
+export const Section = styled.div`
+ padding-top: 70px;
+ padding-bottom: 130px;
+ @media screen and (max-width: 1024px) {
+ padding-top: 50px;
+ padding-bottom: 110px;
+ }
+ @media screen and (max-width: 768px) {
+ padding-top: 40px;
+ padding-bottom: 60px;
+ }
+ @media screen and (max-width: 480px) {
+ padding-bottom: 60px;
+ padding-top: 40px;
+ }
+`;
+
+export const SectionHeading = styled.div`
+ max-width: 580px;
+ margin-left: auto;
+ margin-right: auto;
+ text-align: center;
+ margin-bottom: 25px;
+ h2 {
+ color: ${themeGet('colors.white')};
+ font-weight: 700;
+ font-size: 26px;
+ line-height: 36px;
+ letter-spacing: -0.2px;
+ @media screen and (max-width: 480px) {
+ font-size: 24px;
+ }
+ }
+`;
+
+export const SwitcherWrapper = styled.div`
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ margin-bottom: 50px;
+ button {
+ background-color: transparent;
+ border: 0;
+ color: ${themeGet('colors.textColorLight')};
+ cursor: pointer;
+ padding: 0;
+ font-family: Inter, sans-serif;
+ font-weight: 500;
+ font-size: 16px;
+ line-height: 28px;
+ }
+ .switcher {
+ background-color: #3fdbb1;
+ border-radius: 16.5px;
+ cursor: pointer;
+ margin: 0 10px;
+ height: 30px;
+ width: 50px;
+ position: relative;
+ }
+ .switcher-button {
+ background-color: #fff;
+ border-radius: 50%;
+ height: 23px;
+ width: 23px;
+ position: absolute;
+ top: 50%;
+ transform: translate(3px, -50%);
+ transition: all 0.3s ease-in-out 0s;
+ &.right {
+ transform: translate(24px, -50%);
+ }
+ }
+`;
+
+export const Grid = styled.div`
+ gap: 35px;
+ display: grid;
+ grid-template-columns: repeat(4, 360px);
+ justify-content: center;
+ @media screen and (max-width: 1024px) {
+ gap: 20px;
+ grid-template-columns: repeat(4, 1fr);
+ }
+ @media screen and (max-width: 480px) {
+ grid-template-columns: 1fr;
+ gap: 40px;
+ }
+`;
+
+export const PriceTable = styled.div`
+ background-color: ${rgba('#fff', 0.06)};
+ color: ${themeGet('colors.white')};
+ box-shadow: 0px 25px 70px rgba(64, 106, 157, 0.06);
+ border-radius: 30px;
+ padding: 45px 85px;
+ text-align: center;
+ @media (max-width: 1024px) {
+ padding: 45px;
+ }
+ @media (max-width: 768px) {
+ padding: 25px 14px;
+ }
+ @media (max-width: 480px) {
+ padding: 35px 45px;
+ }
+ h2 {
+ font-family: 'Inter', sans-serif;
+ font-weight: 700;
+ font-size: 36px;
+ line-height: 44px;
+ letter-spacing: -0.16px;
+ margin-bottom: 25px;
+ @media (min-width: 567px) and (max-width: 768px) {
+ font-size: 32px;
+ margin-bottom: 15px;
+ }
+ }
+ h5 {
+ font-weight: 700;
+ font-size: 18px;
+ line-height: 25px;
+ margin-bottom: 10px;
+ }
+ p {
+ color: ${themeGet('colors.textColorLight')};
+ font-family: 'Inter', sans-serif;
+ font-size: 15px;
+ line-height: 1.67;
+ }
+ figure {
+ margin: 40px 0 28px;
+ min-height: 101px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ @media (max-width: 768px) {
+ min-height: auto;
+ margin-top: 30px;
+ img {
+ max-height: 60px;
+ }
+ }
+ }
+ button {
+ border-radius: 10px;
+ font-weight: 700;
+ font-size: 15px;
+ line-height: 1.6;
+ letter-spacing: -0.16px;
+ @media (min-width: 567px) and (max-width: 768px) {
+ font-size: 14px;
+ padding: 10px;
+ min-height: 40px;
+ }
+ @media (max-width: 480px) {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+ }
+ }
+ a {
+ color: ${themeGet('colors.textColorLight')};
+ font-size: 14px;
+ line-height: 42px;
+ font-weight: 700;
+ margin-top: 15px;
+ display: inline-flex;
+ }
+ &.active {
+ background-color: ${themeGet('colors.white')};
+ h2,
+ h5 {
+ color: ${themeGet('colors.headingColor')};
+ }
+ p,
+ a {
+ color: ${themeGet('colors.headingColor')};
+ }
+ }
+`;
diff --git a/marketing/src/containers/WebAppCreative/Testimonials/deloitte.png b/marketing/src/containers/WebAppCreative/Testimonials/deloitte.png
new file mode 100644
index 000000000..21d6a9750
Binary files /dev/null and b/marketing/src/containers/WebAppCreative/Testimonials/deloitte.png differ
diff --git a/marketing/src/containers/WebAppCreative/Testimonials/delta.png b/marketing/src/containers/WebAppCreative/Testimonials/delta.png
new file mode 100644
index 000000000..fecb219e4
Binary files /dev/null and b/marketing/src/containers/WebAppCreative/Testimonials/delta.png differ
diff --git a/marketing/src/containers/WebAppCreative/Testimonials/expedia.png b/marketing/src/containers/WebAppCreative/Testimonials/expedia.png
new file mode 100644
index 000000000..13afa20b1
Binary files /dev/null and b/marketing/src/containers/WebAppCreative/Testimonials/expedia.png differ
diff --git a/marketing/src/containers/WebAppCreative/Testimonials/index.tsx b/marketing/src/containers/WebAppCreative/Testimonials/index.tsx
new file mode 100755
index 000000000..e67f0f32e
--- /dev/null
+++ b/marketing/src/containers/WebAppCreative/Testimonials/index.tsx
@@ -0,0 +1,104 @@
+import React from 'react';
+import Container from '../../../common/components/UI/Container';
+import Image from '../../../common/components/Image';
+import Heading from '../../../common/components/Heading';
+import Text from '../../../common/components/Text';
+import Section, {
+ SectionHeading,
+ ReactSlick,
+ Item,
+ AuthorInfo,
+} from './testimonials.style';
+import deloitte from './deloitte.png';
+import delta from './delta.png';
+import expedia from './expedia.png';
+import siemens from './siemens.png';
+import { useTranslation } from 'next-i18next';
+
+type Testimonial = {
+ id: number;
+ logo: any;
+};
+
+export const testimonials: Testimonial[] = [
+ {
+ id: 1,
+ logo: deloitte,
+ },
+ {
+ id: 2,
+ logo: delta,
+ },
+ {
+ id: 3,
+ logo: expedia,
+ },
+ {
+ id: 4,
+ logo: siemens,
+ },
+];
+
+const settings = {
+ infinite: true,
+ speed: 500,
+ slidesToShow: 3,
+ slidesToScroll: 1,
+ arrows: false,
+ dots: true,
+ responsive: [
+ {
+ breakpoint: 1280,
+ settings: {
+ slidesToShow: 2,
+ slidesToScroll: 1,
+ },
+ },
+ {
+ breakpoint: 480,
+ settings: {
+ slidesToShow: 1,
+ slidesToScroll: 1,
+ },
+ },
+ ],
+};
+
+const Testimonials = () => {
+ const { t } = useTranslation();
+ return (
+
+
+
+
+
+
+ {testimonials.map((testimonial) => (
+ -
+
+
+
+
+
+
+
+
+
+
+
+ ))}
+
+
+
+ );
+};
+
+export default Testimonials;
diff --git a/marketing/src/containers/WebAppCreative/Testimonials/siemens.png b/marketing/src/containers/WebAppCreative/Testimonials/siemens.png
new file mode 100644
index 000000000..a23890928
Binary files /dev/null and b/marketing/src/containers/WebAppCreative/Testimonials/siemens.png differ
diff --git a/marketing/src/containers/WebAppCreative/Testimonials/testimonials.style.tsx b/marketing/src/containers/WebAppCreative/Testimonials/testimonials.style.tsx
new file mode 100755
index 000000000..ae8e1696b
--- /dev/null
+++ b/marketing/src/containers/WebAppCreative/Testimonials/testimonials.style.tsx
@@ -0,0 +1,114 @@
+import styled from 'styled-components';
+import Slider from 'react-slick';
+import { rgba } from 'polished';
+import { themeGet } from '@styled-system/theme-get';
+
+const Section = styled.section`
+ padding-top: 60px;
+ padding-bottom: 120px;
+ @media (max-width: 768px) {
+ padding-top: 40px;
+ padding-bottom: 60px;
+ }
+ @media (max-width: 480px) {
+ padding-bottom: 40px;
+ }
+`;
+export default Section;
+
+export const SectionHeading = styled.div`
+ text-align: center;
+ margin-bottom: 80px;
+ @media only screen and (max-width: 768px) {
+ margin-bottom: 40px;
+ }
+ h2 {
+ font-weight: 800;
+ line-height: 36px;
+ letter-spacing: -0.5px;
+ @media (min-width: 768px) {
+ font-size: 26px;
+ }
+ @media (max-width: 480px) {
+ font-size: 24px;
+ }
+ }
+`;
+
+export const ReactSlick = styled(Slider)`
+ .slick-slide > div {
+ margin: 0 12px;
+ }
+ .slick-dots {
+ display: flex !important;
+ justify-content: center;
+ margin-top: 40px;
+ li {
+ + li {
+ margin-left: 7px;
+ }
+ button {
+ background-color: ${rgba('#000', 0.2)};
+ border: 0;
+ border-radius: 50px;
+ cursor: pointer;
+ display: block;
+ text-indent: -9999em;
+ height: 9px;
+ width: 12px;
+ transition: all 0.3s ease-in-out 0s;
+ }
+ }
+ .slick-active {
+ button {
+ background-color: ${themeGet('colors.black')};
+ width: 18px;
+ }
+ }
+ }
+`;
+
+export const Item = styled.div`
+ background-color: #f6f7f9;
+ border-radius: 15px;
+ padding: 40px 35px 45px;
+ font-family: 'Inter', sans-serif;
+ min-height: 432px;
+ display: flex !important;
+ flex-direction: column;
+ @media only screen and (max-width: 480px) {
+ padding: 30px 25px 35px;
+ }
+ figure {
+ margin: 0 0 35px;
+ @media only screen and (max-width: 480px) {
+ margin-bottom: 20px;
+ }
+ }
+ blockquote {
+ color: ${themeGet('colors.headingColor')};
+ font-size: 18px;
+ line-height: 1.94;
+ margin: 0 0 30px;
+ @media only screen and (max-width: 768px) {
+ font-size: 16px;
+ }
+ @media only screen and (max-width: 480px) {
+ font-size: 16px;
+ margin-bottom: 15px;
+ }
+ }
+ h4 {
+ color: ${themeGet('colors.headingColor')};
+ margin-bottom: 12px;
+ }
+ p {
+ color: ${themeGet('colors.textColor')};
+ line-height: 19px;
+ margin-bottom: 0;
+ }
+`;
+
+export const AuthorInfo = styled.div`
+ margin-top: auto;
+`;
diff --git a/marketing/src/containers/WebAppCreative/webAppCreative.style.tsx b/marketing/src/containers/WebAppCreative/webAppCreative.style.tsx
new file mode 100755
index 000000000..1a2755098
--- /dev/null
+++ b/marketing/src/containers/WebAppCreative/webAppCreative.style.tsx
@@ -0,0 +1,327 @@
+import styled, { createGlobalStyle, keyframes } from 'styled-components';
+import { themeGet } from '@styled-system/theme-get';
+import bgPattern from '../../common/assets/image/webAppCreative/pattern3.png';
+import pattern5 from '../../common/assets/image/webAppCreative/pattern5.png';
+import pattern6 from '../../common/assets/image/webAppCreative/pattern6.png';
+import pattern7 from '../../common/assets/image/webAppCreative/pattern7.png';
+
+const Fade = keyframes`
+ 0% {
+ opacity: 0;
+ }
+ 100% {
+ opacity: 1;
+ }
+`;
+const FadeUp = keyframes`
+ 0% {
+ opacity: 0;
+ transform: scale(.5);
+ }
+ 100% {
+ opacity: 1;
+ transform: scale(1);
+ }
+`;
+
+export const GlobalStyle = createGlobalStyle`
+ body{
+ font-family: 'Manrope', sans-serif;
+ }
+
+ h1,
+ h2,
+ h3,
+ h4,
+ h5,
+ h6 {
+ font-family: 'Manrope', sans-serif;
+ }
+
+ input, textarea {
+ font-family: 'Inter', sans-serif;
+ }
+
+ button {
+ font-family: 'Manrope', sans-serif;
+ }
+
+ section {
+ position: relative;
+ }
+
+ .drawer-content-wrapper,.rc-drawer-content-wrapper{
+ @media (max-width: 767px) {
+ width: 300px!important;
+ }
+ .drawer-content,.rc-drawer-content {
+ padding: 60px;
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ @media (max-width: 767px) {
+ padding: 50px 40px 30px 40px;
+ }
+ .mobile_menu {
+ margin-bottom: 40px;
+ flex-grow: 1;
+ @media (max-width: 767px) {
+ margin-bottom: 30px;
+ }
+ li{
+ margin-bottom: 35px;
+ @media (max-width: 767px) {
+ margin-bottom: 25px;
+ }
+ a{
+ font-size: 20px;
+ font-weight: 400;
+ color: #343d48;
+ position: relative;
+ transition: 0.15s ease-in-out;
+ @media (max-width: 767px) {
+ font-size: 18px;
+ }
+ &:hover {
+ color: #ff4361;
+ }
+ &:before{
+ content: '';
+ width: 7px;
+ height: 7px;
+ background: #ff4361;
+ border-radius: 50%;
+ position: absolute;
+ top: 50%;
+ left: -15px;
+ transform: translateY(-50%);
+ opacity: 0;
+ }
+ }
+ &.is-current {
+ a {
+ color: #ff4361;
+ &:before{
+ opacity: 1;
+ }
+ }
+ }
+ }
+ }
+ .navbar_drawer_button button{
+ width: 100%;
+ }
+ }
+
+ .reusecore-drawer__close{
+ width: 34px;
+ height: 34px;
+ position: absolute;
+ top: 20px;
+ right: 20px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ cursor: pointer;
+ @media (max-width: 767px) {
+ top: 15px;
+ right: 15px;
+ }
+ &:before{
+ content: '\f10b';
+ font-family: Flaticon;
+ font-size: 26px;
+ color: #ff4361;
+ transform: rotate(45deg);
+ display: block;
+ }
+ }
+ }
+
+ .video-modal{
+ background: rgba(0,0,0,0.6) !important;
+ border: 0 !important;
+ animation: ${Fade} .5s ease-out forwards !important;
+
+ .innerRndComponent{
+ display: flex !important;
+ align-items: center !important;
+ justify-content: center !important;
+ animation: ${FadeUp} .7s ease-out forwards !important;
+ }
+ }
+ .reuseModalOverlay,
+ .modalCloseBtn{
+
+ animation: ${Fade} .5s ease-out forwards !important;
+ }
+
+ .video-modal{
+ background: transparent !important;
+ border: 0!important;
+ .innerRndComponent{
+ display: flex !important;
+ align-items: center !important;
+ justify-content: center !important;
+ }
+ }
+ .reuseModalOverlay,
+ .reuseModalParentWrapper{
+ z-index: 99999!important;
+ }
+`;
+
+export const ContentWrapper = styled.div`
+ overflow: hidden;
+
+ .web_app_creative_navbar {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ transition: 0.35s ease-in-out;
+ padding: 30px 0;
+ .mainMenuWrapper {
+ flex: 1 1 100%;
+
+ @media (max-width: 991px) {
+ flex: 0 0 auto;
+ margin-left: auto;
+ }
+ }
+ .main_menu {
+ margin-left: 45px;
+ li {
+ display: inline-flex;
+ padding-left: 13px;
+ padding-right: 13px;
+ @media (max-width: 1024px) {
+ padding-left: 8px;
+ padding-right: 8px;
+ }
+ &:first-child {
+ padding-left: 0;
+ }
+ &:last-child {
+ padding-right: 0;
+ }
+ &.is-current {
+ a {
+ color: ${themeGet('colors.primary')};
+ }
+ }
+ a {
+ color: ${themeGet('colors.headingColor')};
+ font-size: 15px;
+ line-height: 2.2;
+ font-weight: 500;
+ padding: 5px;
+ transition: 0.15s ease-in-out;
+ &:hover {
+ color: ${themeGet('colors.primary')};
+ }
+ }
+ }
+ @media (max-width: 990px) {
+ display: none;
+ }
+ }
+
+ .navbar_button button {
+ font-size: 15px;
+ line-height: 20px;
+ font-weight: 700;
+ }
+ .navbar_button_one {
+ margin-left: auto;
+
+ button {
+ background-color: transparent;
+ color: ${themeGet('colors.headingColor')};
+ padding: 0;
+ }
+
+ @media (max-width: 990px) {
+ display: none;
+ }
+ }
+ .navbar_button_two {
+ margin-left: 25px;
+ button {
+ border-radius: 8px;
+ }
+
+ @media (max-width: 990px) {
+ display: none;
+ }
+ }
+ .reusecore-drawer__handler {
+ @media (min-width: 991px) {
+ display: none !important;
+ }
+ .hamburgMenu__bar {
+ > span {
+ background-color: ${themeGet('colors.headingColor')};
+ }
+ }
+ }
+ }
+
+ .sticky-nav-active {
+ .web_app_creative_navbar {
+ background-color: ${themeGet('colors.white')};
+ box-shadow: 0px 3px 8px 0px rgba(43, 83, 135, 0.08);
+ padding: 15px 0;
+ .main_menu li a {
+ color: ${themeGet('colors.headingColor')};
+ }
+ .main_menu li:hover a,
+ .main_menu li.is-current a {
+ color: #1089ff;
+ }
+ .reusecore-drawer__handler {
+ .hamburgMenu__bar {
+ > span {
+ background-color: ${themeGet('colors.headingColor')};
+ }
+ }
+ }
+ .navbar_button_one button {
+ color: ${themeGet('colors.headingColor')};
+ }
+ .navbar_button_two button {
+ }
+ }
+ }
+`;
+
+export const CombinedSection = styled.section`
+ background: #373754 url(${bgPattern?.src}) no-repeat center;
+ position: relative;
+ z-index: 0;
+ @media only screen and (max-width: 1024px) {
+ background-size: contain;
+ background-repeat: repeat;
+ }
+`;
+
+export const CornerPattern = styled.div`
+ background: url(${pattern5?.src}) left top no-repeat, url(${pattern6?.src}) right top no-repeat,
+ url(${pattern7?.src}) right bottom no-repeat;
+ position: absolute;
+ left: 0;
+ top: -30px;
+ bottom: -30px;
+ right: 0;
+ z-index: -1;
+ @media only screen and (max-width: 1024px) {
+ background-size: 60px, 60px, 70px;
+ top: -20px;
+ bottom: -20px;
+ }
+ @media only screen and (max-width: 480px) {
+ background-size: 50px, 50px, 70px;
+ top: -20px;
+ bottom: -20px;
+ }
+`;
diff --git a/marketing/src/pages/_app.tsx b/marketing/src/pages/_app.tsx
new file mode 100644
index 000000000..f09d8fbc8
--- /dev/null
+++ b/marketing/src/pages/_app.tsx
@@ -0,0 +1,119 @@
+import type { AppProps } from 'next/app';
+import Script from 'next/script';
+import { appWithTranslation, useTranslation } from 'next-i18next';
+import '@redq/reuse-modal/es/index.css';
+import '../common/assets/css/flaticon.css';
+import '../common/assets/css/icon-example-page.css';
+// swiper bundle styles
+// import 'swiper/css/bundle';
+import '../common/assets/css/react-slick.css';
+import '../common/assets/css/rc-collapse.css';
+// import 'rc-collapse/assets/index.css';
+import '../common/assets/css/rc-drawer.css';
+import Head from 'next/head';
+
+function App({ Component, pageProps }: AppProps) {
+ const { t } = useTranslation();
+ return (
+ <>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ >
+ );
+}
+
+export default appWithTranslation(App);
diff --git a/marketing/src/pages/_document.tsx b/marketing/src/pages/_document.tsx
new file mode 100644
index 000000000..a9c2e4dd7
--- /dev/null
+++ b/marketing/src/pages/_document.tsx
@@ -0,0 +1,39 @@
+import { useConfig } from '@/common/hooks/useConfig';
+import { Html, Head, Main, NextScript } from 'next/document';
+import Script from 'next/script';
+
+export default function Document() {
+ const config = useConfig();
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/marketing/src/pages/index.tsx b/marketing/src/pages/index.tsx
new file mode 100755
index 000000000..dd3e216ab
--- /dev/null
+++ b/marketing/src/pages/index.tsx
@@ -0,0 +1,76 @@
+import React, { Fragment } from 'react';
+import Head from 'next/head';
+import { ThemeProvider } from 'styled-components';
+import Sticky from 'react-stickynode';
+import { DrawerProvider } from '../common/contexts/DrawerContext';
+import { theme } from '../common/theme/webAppCreative';
+import ResetCSS from '../common/assets/css/style';
+import Banner from '../containers/WebAppCreative/Banner';
+import Navbar from '../containers/WebAppCreative/Navbar';
+import Clients from '../containers/WebAppCreative/Clients';
+import HowItWorks from '../containers/WebAppCreative/HowItWorks';
+import AnalyticsTool from '../containers/WebAppCreative/AnalyticsTool';
+import Dashboard from '../containers/WebAppCreative/Dashboard';
+import Testimonials from '../containers/WebAppCreative/Testimonials';
+import Integrations from '../containers/WebAppCreative/Integrations';
+import Pricing from '../containers/WebAppCreative/Pricing';
+import NewsFeed from '../containers/WebAppCreative/NewsFeed';
+import Faq from '../containers/WebAppCreative/Faq';
+import CallToAction from '../containers/WebAppCreative/CallToAction';
+import Footer from '../containers/WebAppCreative/Footer';
+import {
+ GlobalStyle,
+ ContentWrapper,
+ CombinedSection,
+ CornerPattern,
+} from '../containers/WebAppCreative/webAppCreative.style';
+import 'animate.css';
+import { serverSideTranslations } from 'next-i18next/serverSideTranslations';
+import { useTranslation } from 'next-i18next';
+
+const WebAppCreative = () => {
+ const { t } = useTranslation();
+ return (
+
+
+
+ {t('SEO.title')}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export const getStaticProps = async ({ locale }: { locale?: string }) => ({
+ props: {
+ ...(await serverSideTranslations(locale ?? 'en', ['common'])),
+ },
+});
+
+export default WebAppCreative;
diff --git a/marketing/src/styles/Home.module.css b/marketing/src/styles/Home.module.css
new file mode 100644
index 000000000..27dfff5ec
--- /dev/null
+++ b/marketing/src/styles/Home.module.css
@@ -0,0 +1,278 @@
+.main {
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ align-items: center;
+ padding: 6rem;
+ min-height: 100vh;
+}
+
+.description {
+ display: inherit;
+ justify-content: inherit;
+ align-items: inherit;
+ font-size: 0.85rem;
+ max-width: var(--max-width);
+ width: 100%;
+ z-index: 2;
+ font-family: var(--font-mono);
+}
+
+.description a {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ gap: 0.5rem;
+}
+
+.description p {
+ position: relative;
+ margin: 0;
+ padding: 1rem;
+ background-color: rgba(var(--callout-rgb), 0.5);
+ border: 1px solid rgba(var(--callout-border-rgb), 0.3);
+ border-radius: var(--border-radius);
+}
+
+.code {
+ font-weight: 700;
+ font-family: var(--font-mono);
+}
+
+.grid {
+ display: grid;
+ grid-template-columns: repeat(4, minmax(25%, auto));
+ width: var(--max-width);
+ max-width: 100%;
+}
+
+.card {
+ padding: 1rem 1.2rem;
+ border-radius: var(--border-radius);
+ background: rgba(var(--card-rgb), 0);
+ border: 1px solid rgba(var(--card-border-rgb), 0);
+ transition: background 200ms, border 200ms;
+}
+
+.card span {
+ display: inline-block;
+ transition: transform 200ms;
+}
+
+.card h2 {
+ font-weight: 600;
+ margin-bottom: 0.7rem;
+}
+
+.card p {
+ margin: 0;
+ opacity: 0.6;
+ font-size: 0.9rem;
+ line-height: 1.5;
+ max-width: 30ch;
+}
+
+.center {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ position: relative;
+ padding: 4rem 0;
+}
+
+.center::before {
+ background: var(--secondary-glow);
+ border-radius: 50%;
+ width: 480px;
+ height: 360px;
+ margin-left: -400px;
+}
+
+.center::after {
+ background: var(--primary-glow);
+ width: 240px;
+ height: 180px;
+ z-index: -1;
+}
+
+.center::before,
+.center::after {
+ content: '';
+ left: 50%;
+ position: absolute;
+ filter: blur(45px);
+ transform: translateZ(0);
+}
+
+.logo,
+.thirteen {
+ position: relative;
+}
+
+.thirteen {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ width: 75px;
+ height: 75px;
+ padding: 25px 10px;
+ margin-left: 16px;
+ transform: translateZ(0);
+ border-radius: var(--border-radius);
+ overflow: hidden;
+ box-shadow: 0px 2px 8px -1px #0000001a;
+}
+
+.thirteen::before,
+.thirteen::after {
+ content: '';
+ position: absolute;
+ z-index: -1;
+}
+
+/* Conic Gradient Animation */
+.thirteen::before {
+ animation: 6s rotate linear infinite;
+ width: 200%;
+ height: 200%;
+ background: var(--tile-border);
+}
+
+/* Inner Square */
+.thirteen::after {
+ inset: 0;
+ padding: 1px;
+ border-radius: var(--border-radius);
+ background: linear-gradient(
+ to bottom right,
+ rgba(var(--tile-start-rgb), 1),
+ rgba(var(--tile-end-rgb), 1)
+ );
+ background-clip: content-box;
+}
+
+/* Enable hover only on non-touch devices */
+@media (hover: hover) and (pointer: fine) {
+ .card:hover {
+ background: rgba(var(--card-rgb), 0.1);
+ border: 1px solid rgba(var(--card-border-rgb), 0.15);
+ }
+
+ .card:hover span {
+ transform: translateX(4px);
+ }
+}
+
+@media (prefers-reduced-motion) {
+ .thirteen::before {
+ animation: none;
+ }
+
+ .card:hover span {
+ transform: none;
+ }
+}
+
+/* Mobile */
+@media (max-width: 700px) {
+ .content {
+ padding: 4rem;
+ }
+
+ .grid {
+ grid-template-columns: 1fr;
+ margin-bottom: 120px;
+ max-width: 320px;
+ text-align: center;
+ }
+
+ .card {
+ padding: 1rem 2.5rem;
+ }
+
+ .card h2 {
+ margin-bottom: 0.5rem;
+ }
+
+ .center {
+ padding: 8rem 0 6rem;
+ }
+
+ .center::before {
+ transform: none;
+ height: 300px;
+ }
+
+ .description {
+ font-size: 0.8rem;
+ }
+
+ .description a {
+ padding: 1rem;
+ }
+
+ .description p,
+ .description div {
+ display: flex;
+ justify-content: center;
+ position: fixed;
+ width: 100%;
+ }
+
+ .description p {
+ align-items: center;
+ inset: 0 0 auto;
+ padding: 2rem 1rem 1.4rem;
+ border-radius: 0;
+ border: none;
+ border-bottom: 1px solid rgba(var(--callout-border-rgb), 0.25);
+ background: linear-gradient(
+ to bottom,
+ rgba(var(--background-start-rgb), 1),
+ rgba(var(--callout-rgb), 0.5)
+ );
+ background-clip: padding-box;
+ backdrop-filter: blur(24px);
+ }
+
+ .description div {
+ align-items: flex-end;
+ pointer-events: none;
+ inset: auto 0 0;
+ padding: 2rem;
+ height: 200px;
+ background: linear-gradient(
+ to bottom,
+ transparent 0%,
+ rgb(var(--background-end-rgb)) 40%
+ );
+ z-index: 1;
+ }
+}
+
+/* Tablet and Smaller Desktop */
+@media (min-width: 701px) and (max-width: 1120px) {
+ .grid {
+ grid-template-columns: repeat(2, 50%);
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+ .vercelLogo {
+ filter: invert(1);
+ }
+
+ .logo,
+ .thirteen img {
+ filter: invert(1) drop-shadow(0 0 0.3rem #ffffff70);
+ }
+}
+
+@keyframes rotate {
+ from {
+ transform: rotate(360deg);
+ }
+ to {
+ transform: rotate(0deg);
+ }
+}
diff --git a/marketing/src/styles/globals.css b/marketing/src/styles/globals.css
new file mode 100644
index 000000000..d4f491e15
--- /dev/null
+++ b/marketing/src/styles/globals.css
@@ -0,0 +1,107 @@
+:root {
+ --max-width: 1100px;
+ --border-radius: 12px;
+ --font-mono: ui-monospace, Menlo, Monaco, 'Cascadia Mono', 'Segoe UI Mono',
+ 'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro',
+ 'Fira Mono', 'Droid Sans Mono', 'Courier New', monospace;
+
+ --foreground-rgb: 0, 0, 0;
+ --background-start-rgb: 214, 219, 220;
+ --background-end-rgb: 255, 255, 255;
+
+ --primary-glow: conic-gradient(
+ from 180deg at 50% 50%,
+ #16abff33 0deg,
+ #0885ff33 55deg,
+ #54d6ff33 120deg,
+ #0071ff33 160deg,
+ transparent 360deg
+ );
+ --secondary-glow: radial-gradient(
+ rgba(255, 255, 255, 1),
+ rgba(255, 255, 255, 0)
+ );
+
+ --tile-start-rgb: 239, 245, 249;
+ --tile-end-rgb: 228, 232, 233;
+ --tile-border: conic-gradient(
+ #00000080,
+ #00000040,
+ #00000030,
+ #00000020,
+ #00000010,
+ #00000010,
+ #00000080
+ );
+
+ --callout-rgb: 238, 240, 241;
+ --callout-border-rgb: 172, 175, 176;
+ --card-rgb: 180, 185, 188;
+ --card-border-rgb: 131, 134, 135;
+}
+
+@media (prefers-color-scheme: dark) {
+ :root {
+ --foreground-rgb: 255, 255, 255;
+ --background-start-rgb: 0, 0, 0;
+ --background-end-rgb: 0, 0, 0;
+
+ --primary-glow: radial-gradient(rgba(1, 65, 255, 0.4), rgba(1, 65, 255, 0));
+ --secondary-glow: linear-gradient(
+ to bottom right,
+ rgba(1, 65, 255, 0),
+ rgba(1, 65, 255, 0),
+ rgba(1, 65, 255, 0.3)
+ );
+
+ --tile-start-rgb: 2, 13, 46;
+ --tile-end-rgb: 2, 5, 19;
+ --tile-border: conic-gradient(
+ #ffffff80,
+ #ffffff40,
+ #ffffff30,
+ #ffffff20,
+ #ffffff10,
+ #ffffff10,
+ #ffffff80
+ );
+
+ --callout-rgb: 20, 20, 20;
+ --callout-border-rgb: 108, 108, 108;
+ --card-rgb: 100, 100, 100;
+ --card-border-rgb: 200, 200, 200;
+ }
+}
+
+* {
+ box-sizing: border-box;
+ padding: 0;
+ margin: 0;
+}
+
+html,
+body {
+ max-width: 100vw;
+ overflow-x: hidden;
+}
+
+body {
+ color: rgb(var(--foreground-rgb));
+ background: linear-gradient(
+ to bottom,
+ transparent,
+ rgb(var(--background-end-rgb))
+ )
+ rgb(var(--background-start-rgb));
+}
+
+a {
+ color: inherit;
+ text-decoration: none;
+}
+
+@media (prefers-color-scheme: dark) {
+ html {
+ color-scheme: dark;
+ }
+}
diff --git a/marketing/src/types.ts b/marketing/src/types.ts
new file mode 100644
index 000000000..659f2592a
--- /dev/null
+++ b/marketing/src/types.ts
@@ -0,0 +1,7 @@
+export type MenuItem = {
+ label: string;
+ path: string;
+ offset: `${number}`;
+ icon?: string;
+ staticLink?: string;
+};
diff --git a/marketing/src/typings.d.ts b/marketing/src/typings.d.ts
new file mode 100644
index 000000000..73dabf5af
--- /dev/null
+++ b/marketing/src/typings.d.ts
@@ -0,0 +1,3 @@
+declare module '@redq/reuse-modal';
+declare module 'react-reveal';
+declare module 'react-reveal/Fade';
diff --git a/marketing/tsconfig.json b/marketing/tsconfig.json
new file mode 100644
index 000000000..39235c560
--- /dev/null
+++ b/marketing/tsconfig.json
@@ -0,0 +1,24 @@
+{
+ "compilerOptions": {
+ "target": "es5",
+ "lib": ["dom", "dom.iterable", "esnext"],
+ "allowJs": true,
+ "skipLibCheck": true,
+ "strict": true,
+ "forceConsistentCasingInFileNames": true,
+ "noEmit": true,
+ "esModuleInterop": true,
+ "module": "esnext",
+ "moduleResolution": "node",
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "jsx": "preserve",
+ "incremental": true,
+ "baseUrl": ".",
+ "paths": {
+ "@/*": ["./src/*"]
+ }
+ },
+ "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "src/containers/WebAppCreative/Banner/index.tsx"],
+ "exclude": ["node_modules"]
+}
diff --git a/marketing/yarn.lock b/marketing/yarn.lock
new file mode 100644
index 000000000..852aa52b5
--- /dev/null
+++ b/marketing/yarn.lock
@@ -0,0 +1,3148 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@babel/code-frame@^7.18.6":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a"
+ integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==
+ dependencies:
+ "@babel/highlight" "^7.18.6"
+
+"@babel/generator@^7.20.7":
+ version "7.20.14"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.14.tgz#9fa772c9f86a46c6ac9b321039400712b96f64ce"
+ integrity sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg==
+ dependencies:
+ "@babel/types" "^7.20.7"
+ "@jridgewell/gen-mapping" "^0.3.2"
+ jsesc "^2.5.1"
+
+"@babel/helper-annotate-as-pure@^7.16.0":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb"
+ integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==
+ dependencies:
+ "@babel/types" "^7.18.6"
+
+"@babel/helper-environment-visitor@^7.18.9":
+ version "7.18.9"
+ resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be"
+ integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==
+
+"@babel/helper-function-name@^7.19.0":
+ version "7.19.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c"
+ integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==
+ dependencies:
+ "@babel/template" "^7.18.10"
+ "@babel/types" "^7.19.0"
+
+"@babel/helper-hoist-variables@^7.18.6":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678"
+ integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==
+ dependencies:
+ "@babel/types" "^7.18.6"
+
+"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.16.0":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e"
+ integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==
+ dependencies:
+ "@babel/types" "^7.18.6"
+
+"@babel/helper-split-export-declaration@^7.18.6":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075"
+ integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==
+ dependencies:
+ "@babel/types" "^7.18.6"
+
+"@babel/helper-string-parser@^7.19.4":
+ version "7.19.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63"
+ integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==
+
+"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1":
+ version "7.19.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2"
+ integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==
+
+"@babel/highlight@^7.18.6":
+ version "7.18.6"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf"
+ integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.18.6"
+ chalk "^2.0.0"
+ js-tokens "^4.0.0"
+
+"@babel/parser@^7.20.13", "@babel/parser@^7.20.7":
+ version "7.20.15"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.15.tgz#eec9f36d8eaf0948bb88c87a46784b5ee9fd0c89"
+ integrity sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg==
+
+"@babel/runtime@^7.10.1", "@babel/runtime@^7.11.1", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.0", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.13", "@babel/runtime@^7.20.6", "@babel/runtime@^7.20.7", "@babel/runtime@^7.3.1":
+ version "7.20.13"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.13.tgz#7055ab8a7cff2b8f6058bf6ae45ff84ad2aded4b"
+ integrity sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==
+ dependencies:
+ regenerator-runtime "^0.13.11"
+
+"@babel/template@^7.18.10":
+ version "7.20.7"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8"
+ integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==
+ dependencies:
+ "@babel/code-frame" "^7.18.6"
+ "@babel/parser" "^7.20.7"
+ "@babel/types" "^7.20.7"
+
+"@babel/traverse@^7.4.5":
+ version "7.20.13"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.13.tgz#817c1ba13d11accca89478bd5481b2d168d07473"
+ integrity sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ==
+ dependencies:
+ "@babel/code-frame" "^7.18.6"
+ "@babel/generator" "^7.20.7"
+ "@babel/helper-environment-visitor" "^7.18.9"
+ "@babel/helper-function-name" "^7.19.0"
+ "@babel/helper-hoist-variables" "^7.18.6"
+ "@babel/helper-split-export-declaration" "^7.18.6"
+ "@babel/parser" "^7.20.13"
+ "@babel/types" "^7.20.7"
+ debug "^4.1.0"
+ globals "^11.1.0"
+
+"@babel/types@^7.18.6", "@babel/types@^7.19.0", "@babel/types@^7.20.7":
+ version "7.20.7"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.7.tgz#54ec75e252318423fc07fb644dc6a58a64c09b7f"
+ integrity sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==
+ dependencies:
+ "@babel/helper-string-parser" "^7.19.4"
+ "@babel/helper-validator-identifier" "^7.19.1"
+ to-fast-properties "^2.0.0"
+
+"@emotion/is-prop-valid@^1.1.0":
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz#7f2d35c97891669f7e276eb71c83376a5dc44c83"
+ integrity sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg==
+ dependencies:
+ "@emotion/memoize" "^0.8.0"
+
+"@emotion/memoize@^0.8.0":
+ version "0.8.0"
+ resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.0.tgz#f580f9beb67176fa57aae70b08ed510e1b18980f"
+ integrity sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==
+
+"@emotion/stylis@^0.8.4":
+ version "0.8.5"
+ resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.5.tgz#deacb389bd6ee77d1e7fcaccce9e16c5c7e78e04"
+ integrity sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==
+
+"@emotion/unitless@^0.7.4":
+ version "0.7.5"
+ resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed"
+ integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==
+
+"@eslint/eslintrc@^1.4.1":
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.4.1.tgz#af58772019a2d271b7e2d4c23ff4ddcba3ccfb3e"
+ integrity sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==
+ dependencies:
+ ajv "^6.12.4"
+ debug "^4.3.2"
+ espree "^9.4.0"
+ globals "^13.19.0"
+ ignore "^5.2.0"
+ import-fresh "^3.2.1"
+ js-yaml "^4.1.0"
+ minimatch "^3.1.2"
+ strip-json-comments "^3.1.1"
+
+"@humanwhocodes/config-array@^0.11.8":
+ version "0.11.8"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9"
+ integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==
+ dependencies:
+ "@humanwhocodes/object-schema" "^1.2.1"
+ debug "^4.1.1"
+ minimatch "^3.0.5"
+
+"@humanwhocodes/module-importer@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c"
+ integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==
+
+"@humanwhocodes/object-schema@^1.2.1":
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45"
+ integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==
+
+"@jridgewell/gen-mapping@^0.3.2":
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9"
+ integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==
+ dependencies:
+ "@jridgewell/set-array" "^1.0.1"
+ "@jridgewell/sourcemap-codec" "^1.4.10"
+ "@jridgewell/trace-mapping" "^0.3.9"
+
+"@jridgewell/resolve-uri@3.1.0":
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78"
+ integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==
+
+"@jridgewell/set-array@^1.0.1":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72"
+ integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==
+
+"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10":
+ version "1.4.14"
+ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24"
+ integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==
+
+"@jridgewell/trace-mapping@^0.3.9":
+ version "0.3.17"
+ resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985"
+ integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==
+ dependencies:
+ "@jridgewell/resolve-uri" "3.1.0"
+ "@jridgewell/sourcemap-codec" "1.4.14"
+
+"@next/env@13.1.6":
+ version "13.1.6"
+ resolved "https://registry.yarnpkg.com/@next/env/-/env-13.1.6.tgz#c4925609f16142ded1a5cb833359ab17359b7a93"
+ integrity sha512-s+W9Fdqh5MFk6ECrbnVmmAOwxKQuhGMT7xXHrkYIBMBcTiOqNWhv5KbJIboKR5STXxNXl32hllnvKaffzFaWQg==
+
+"@next/eslint-plugin-next@13.1.6":
+ version "13.1.6"
+ resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-13.1.6.tgz#ad8be22dd3d8aee9a9bd9a2507e2c55a2f7ebdd9"
+ integrity sha512-o7cauUYsXjzSJkay8wKjpKJf2uLzlggCsGUkPu3lP09Pv97jYlekTC20KJrjQKmSv5DXV0R/uks2ZXhqjNkqAw==
+ dependencies:
+ glob "7.1.7"
+
+"@next/font@13.1.6":
+ version "13.1.6"
+ resolved "https://registry.yarnpkg.com/@next/font/-/font-13.1.6.tgz#2bf99e3321ec9b4d65781c0d0ebff072e8752e1a"
+ integrity sha512-AITjmeb1RgX1HKMCiA39ztx2mxeAyxl4ljv2UoSBUGAbFFMg8MO7YAvjHCgFhD39hL7YTbFjol04e/BPBH5RzQ==
+
+"@next/swc-android-arm-eabi@13.1.6":
+ version "13.1.6"
+ resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.1.6.tgz#d766dfc10e27814d947b20f052067c239913dbcc"
+ integrity sha512-F3/6Z8LH/pGlPzR1AcjPFxx35mPqjE5xZcf+IL+KgbW9tMkp7CYi1y7qKrEWU7W4AumxX/8OINnDQWLiwLasLQ==
+
+"@next/swc-android-arm64@13.1.6":
+ version "13.1.6"
+ resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-13.1.6.tgz#f37a98d5f18927d8c9970d750d516ac779465176"
+ integrity sha512-cMwQjnB8vrYkWyK/H0Rf2c2pKIH4RGjpKUDvbjVAit6SbwPDpmaijLio0LWFV3/tOnY6kvzbL62lndVA0mkYpw==
+
+"@next/swc-darwin-arm64@13.1.6":
+ version "13.1.6"
+ resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.1.6.tgz#ec1b90fd9bf809d8b81004c5182e254dced4ad96"
+ integrity sha512-KKRQH4DDE4kONXCvFMNBZGDb499Hs+xcFAwvj+rfSUssIDrZOlyfJNy55rH5t2Qxed1e4K80KEJgsxKQN1/fyw==
+
+"@next/swc-darwin-x64@13.1.6":
+ version "13.1.6"
+ resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.1.6.tgz#e869ac75d16995eee733a7d1550322d9051c1eb4"
+ integrity sha512-/uOky5PaZDoaU99ohjtNcDTJ6ks/gZ5ykTQDvNZDjIoCxFe3+t06bxsTPY6tAO6uEAw5f6vVFX5H5KLwhrkZCA==
+
+"@next/swc-freebsd-x64@13.1.6":
+ version "13.1.6"
+ resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.1.6.tgz#84a7b2e423a2904afc2edca21c2f1ba6b53fa4c1"
+ integrity sha512-qaEALZeV7to6weSXk3Br80wtFQ7cFTpos/q+m9XVRFggu+8Ib895XhMWdJBzew6aaOcMvYR6KQ6JmHA2/eMzWw==
+
+"@next/swc-linux-arm-gnueabihf@13.1.6":
+ version "13.1.6"
+ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.1.6.tgz#980eed1f655ff8a72187d8a6ef9e73ac39d20d23"
+ integrity sha512-OybkbC58A1wJ+JrJSOjGDvZzrVEQA4sprJejGqMwiZyLqhr9Eo8FXF0y6HL+m1CPCpPhXEHz/2xKoYsl16kNqw==
+
+"@next/swc-linux-arm64-gnu@13.1.6":
+ version "13.1.6"
+ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.1.6.tgz#87a71db21cded3f7c63d1d19079845c59813c53d"
+ integrity sha512-yCH+yDr7/4FDuWv6+GiYrPI9kcTAO3y48UmaIbrKy8ZJpi7RehJe3vIBRUmLrLaNDH3rY1rwoHi471NvR5J5NQ==
+
+"@next/swc-linux-arm64-musl@13.1.6":
+ version "13.1.6"
+ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.1.6.tgz#c5aac8619331b9fd030603bbe2b36052011e11de"
+ integrity sha512-ECagB8LGX25P9Mrmlc7Q/TQBb9rGScxHbv/kLqqIWs2fIXy6Y/EiBBiM72NTwuXUFCNrWR4sjUPSooVBJJ3ESQ==
+
+"@next/swc-linux-x64-gnu@13.1.6":
+ version "13.1.6"
+ resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.1.6.tgz#9513d36d540bbfea575576746736054c31aacdea"
+ integrity sha512-GT5w2mruk90V/I5g6ScuueE7fqj/d8Bui2qxdw6lFxmuTgMeol5rnzAv4uAoVQgClOUO/MULilzlODg9Ib3Y4Q==
+
+"@next/swc-linux-x64-musl@13.1.6":
+ version "13.1.6"
+ resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.1.6.tgz#d61fc6884899f5957251f4ce3f522e34a2c479b7"
+ integrity sha512-keFD6KvwOPzmat4TCnlnuxJCQepPN+8j3Nw876FtULxo8005Y9Ghcl7ACcR8GoiKoddAq8gxNBrpjoxjQRHeAQ==
+
+"@next/swc-win32-arm64-msvc@13.1.6":
+ version "13.1.6"
+ resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.1.6.tgz#fac2077a8ae9768e31444c9ae90807e64117cda7"
+ integrity sha512-OwertslIiGQluFvHyRDzBCIB07qJjqabAmINlXUYt7/sY7Q7QPE8xVi5beBxX/rxTGPIbtyIe3faBE6Z2KywhQ==
+
+"@next/swc-win32-ia32-msvc@13.1.6":
+ version "13.1.6"
+ resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.1.6.tgz#498bc11c91b4c482a625bf4b978f98ae91111e46"
+ integrity sha512-g8zowiuP8FxUR9zslPmlju7qYbs2XBtTLVSxVikPtUDQedhcls39uKYLvOOd1JZg0ehyhopobRoH1q+MHlIN/w==
+
+"@next/swc-win32-x64-msvc@13.1.6":
+ version "13.1.6"
+ resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.1.6.tgz#17ed919c723426b7d0ce1cd73d40ce3dcd342089"
+ integrity sha512-Ls2OL9hi3YlJKGNdKv8k3X/lLgc3VmLG3a/DeTkAd+lAituJp8ZHmRmm9f9SL84fT3CotlzcgbdaCDfFwFA6bA==
+
+"@nodelib/fs.scandir@2.1.5":
+ version "2.1.5"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
+ integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
+ dependencies:
+ "@nodelib/fs.stat" "2.0.5"
+ run-parallel "^1.1.9"
+
+"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
+ integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
+
+"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8":
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
+ integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
+ dependencies:
+ "@nodelib/fs.scandir" "2.1.5"
+ fastq "^1.6.0"
+
+"@pkgr/utils@^2.3.1":
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.3.1.tgz#0a9b06ffddee364d6642b3cd562ca76f55b34a03"
+ integrity sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==
+ dependencies:
+ cross-spawn "^7.0.3"
+ is-glob "^4.0.3"
+ open "^8.4.0"
+ picocolors "^1.0.0"
+ tiny-glob "^0.2.9"
+ tslib "^2.4.0"
+
+"@rc-component/portal@^1.0.0-6":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@rc-component/portal/-/portal-1.1.0.tgz#6b94450d2c2b00d50b141bd7a0be23bd96503dbe"
+ integrity sha512-tbXM9SB1r5FOuZjRCljERFByFiEUcMmCWMXLog/NmgCzlAzreXyf23Vei3ZpSMxSMavzPnhCovfZjZdmxS3d1w==
+ dependencies:
+ "@babel/runtime" "^7.18.0"
+ classnames "^2.3.2"
+ rc-util "^5.24.4"
+
+"@redq/reuse-modal@^2.0.0":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@redq/reuse-modal/-/reuse-modal-2.0.0.tgz#96d829e04a0d03ea7f1b2e7d0063850f92112df2"
+ integrity sha512-pvnGDDsVvyadQy9KALK20FHZV0mjjlAqK2pEF+ZX7wdZ6L3/b8cocESfU3aNAClGQUVr65RRo83nQLjR3H4pcA==
+ dependencies:
+ react-rnd "^9.0.4"
+ react-spring "^8.0.18"
+
+"@rushstack/eslint-patch@^1.1.3":
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz#8be36a1f66f3265389e90b5f9c9962146758f728"
+ integrity sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==
+
+"@styled-system/background@^5.1.2":
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/@styled-system/background/-/background-5.1.2.tgz#75c63d06b497ab372b70186c0bf608d62847a2ba"
+ integrity sha512-jtwH2C/U6ssuGSvwTN3ri/IyjdHb8W9X/g8Y0JLcrH02G+BW3OS8kZdHphF1/YyRklnrKrBT2ngwGUK6aqqV3A==
+ dependencies:
+ "@styled-system/core" "^5.1.2"
+
+"@styled-system/border@^5.1.5":
+ version "5.1.5"
+ resolved "https://registry.yarnpkg.com/@styled-system/border/-/border-5.1.5.tgz#0493d4332d2b59b74bb0d57d08c73eb555761ba6"
+ integrity sha512-JvddhNrnhGigtzWRCVuAHepniyVi6hBlimxWDVAdcTuk7aRn9BYJUwfHslURtwYFsF5FoEs8Zmr1oZq2M1AP0A==
+ dependencies:
+ "@styled-system/core" "^5.1.2"
+
+"@styled-system/color@^5.1.2":
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/@styled-system/color/-/color-5.1.2.tgz#b8d6b4af481faabe4abca1a60f8daa4ccc2d9f43"
+ integrity sha512-1kCkeKDZkt4GYkuFNKc7vJQMcOmTl3bJY3YBUs7fCNM6mMYJeT1pViQ2LwBSBJytj3AB0o4IdLBoepgSgGl5MA==
+ dependencies:
+ "@styled-system/core" "^5.1.2"
+
+"@styled-system/core@^5.1.2":
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/@styled-system/core/-/core-5.1.2.tgz#b8b7b86455d5a0514f071c4fa8e434b987f6a772"
+ integrity sha512-XclBDdNIy7OPOsN4HBsawG2eiWfCcuFt6gxKn1x4QfMIgeO6TOlA2pZZ5GWZtIhCUqEPTgIBta6JXsGyCkLBYw==
+ dependencies:
+ object-assign "^4.1.1"
+
+"@styled-system/css@^5.1.5":
+ version "5.1.5"
+ resolved "https://registry.yarnpkg.com/@styled-system/css/-/css-5.1.5.tgz#0460d5f3ff962fa649ea128ef58d9584f403bbbc"
+ integrity sha512-XkORZdS5kypzcBotAMPBoeckDs9aSZVkvrAlq5K3xP8IMAUek+x2O4NtwoSgkYkWWzVBu6DGdFZLR790QWGG+A==
+
+"@styled-system/flexbox@^5.1.2":
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/@styled-system/flexbox/-/flexbox-5.1.2.tgz#077090f43f61c3852df63da24e4108087a8beecf"
+ integrity sha512-6hHV52+eUk654Y1J2v77B8iLeBNtc+SA3R4necsu2VVinSD7+XY5PCCEzBFaWs42dtOEDIa2lMrgL0YBC01mDQ==
+ dependencies:
+ "@styled-system/core" "^5.1.2"
+
+"@styled-system/grid@^5.1.2":
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/@styled-system/grid/-/grid-5.1.2.tgz#7165049877732900b99cd00759679fbe45c6c573"
+ integrity sha512-K3YiV1KyHHzgdNuNlaw8oW2ktMuGga99o1e/NAfTEi5Zsa7JXxzwEnVSDSBdJC+z6R8WYTCYRQC6bkVFcvdTeg==
+ dependencies:
+ "@styled-system/core" "^5.1.2"
+
+"@styled-system/layout@^5.1.2":
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/@styled-system/layout/-/layout-5.1.2.tgz#12d73e79887e10062f4dbbbc2067462eace42339"
+ integrity sha512-wUhkMBqSeacPFhoE9S6UF3fsMEKFv91gF4AdDWp0Aym1yeMPpqz9l9qS/6vjSsDPF7zOb5cOKC3tcKKOMuDCPw==
+ dependencies:
+ "@styled-system/core" "^5.1.2"
+
+"@styled-system/position@^5.1.2":
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/@styled-system/position/-/position-5.1.2.tgz#56961266566836f57a24d8e8e33ce0c1adb59dd3"
+ integrity sha512-60IZfMXEOOZe3l1mCu6sj/2NAyUmES2kR9Kzp7s2D3P4qKsZWxD1Se1+wJvevb+1TP+ZMkGPEYYXRyU8M1aF5A==
+ dependencies:
+ "@styled-system/core" "^5.1.2"
+
+"@styled-system/shadow@^5.1.2":
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/@styled-system/shadow/-/shadow-5.1.2.tgz#beddab28d7de03cd0177a87ac4ed3b3b6d9831fd"
+ integrity sha512-wqniqYb7XuZM7K7C0d1Euxc4eGtqEe/lvM0WjuAFsQVImiq6KGT7s7is+0bNI8O4Dwg27jyu4Lfqo/oIQXNzAg==
+ dependencies:
+ "@styled-system/core" "^5.1.2"
+
+"@styled-system/space@^5.1.2":
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/@styled-system/space/-/space-5.1.2.tgz#38925d2fa29a41c0eb20e65b7c3efb6e8efce953"
+ integrity sha512-+zzYpR8uvfhcAbaPXhH8QgDAV//flxqxSjHiS9cDFQQUSznXMQmxJegbhcdEF7/eNnJgHeIXv1jmny78kipgBA==
+ dependencies:
+ "@styled-system/core" "^5.1.2"
+
+"@styled-system/theme-get@^5.1.2":
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/@styled-system/theme-get/-/theme-get-5.1.2.tgz#b40a00a44da63b7a6ed85f73f737c4defecd6049"
+ integrity sha512-afAYdRqrKfNIbVgmn/2Qet1HabxmpRnzhFwttbGr6F/mJ4RDS/Cmn+KHwHvNXangQsWw/5TfjpWV+rgcqqIcJQ==
+ dependencies:
+ "@styled-system/core" "^5.1.2"
+
+"@styled-system/typography@^5.1.2":
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/@styled-system/typography/-/typography-5.1.2.tgz#65fb791c67d50cd2900d234583eaacdca8c134f7"
+ integrity sha512-BxbVUnN8N7hJ4aaPOd7wEsudeT7CxarR+2hns8XCX1zp0DFfbWw4xYa/olA0oQaqx7F1hzDg+eRaGzAJbF+jOg==
+ dependencies:
+ "@styled-system/core" "^5.1.2"
+
+"@styled-system/variant@^5.1.5":
+ version "5.1.5"
+ resolved "https://registry.yarnpkg.com/@styled-system/variant/-/variant-5.1.5.tgz#8446d8aad06af3a4c723d717841df2dbe4ddeafd"
+ integrity sha512-Yn8hXAFoWIro8+Q5J8YJd/mP85Teiut3fsGVR9CAxwgNfIAiqlYxsk5iHU7VHJks/0KjL4ATSjmbtCDC/4l1qw==
+ dependencies:
+ "@styled-system/core" "^5.1.2"
+ "@styled-system/css" "^5.1.5"
+
+"@swc/helpers@0.4.14":
+ version "0.4.14"
+ resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.14.tgz#1352ac6d95e3617ccb7c1498ff019654f1e12a74"
+ integrity sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==
+ dependencies:
+ tslib "^2.4.0"
+
+"@types/hoist-non-react-statics@*", "@types/hoist-non-react-statics@^3.3.1":
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f"
+ integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==
+ dependencies:
+ "@types/react" "*"
+ hoist-non-react-statics "^3.3.0"
+
+"@types/json5@^0.0.29":
+ version "0.0.29"
+ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
+ integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==
+
+"@types/node@18.13.0":
+ version "18.13.0"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-18.13.0.tgz#0400d1e6ce87e9d3032c19eb6c58205b0d3f7850"
+ integrity sha512-gC3TazRzGoOnoKAhUx+Q0t8S9Tzs74z7m0ipwGpSqQrleP14hKxP4/JUeEQcD3W1/aIpnWl8pHowI7WokuZpXg==
+
+"@types/prop-types@*":
+ version "15.7.5"
+ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf"
+ integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==
+
+"@types/react-anchor-link-smooth-scroll@^1.0.2":
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/@types/react-anchor-link-smooth-scroll/-/react-anchor-link-smooth-scroll-1.0.2.tgz#50a4aaa7c2731f644f8a7b69225669fc29bc6746"
+ integrity sha512-ZemNS6WzQN8KA4w0sy5N86qJ55Ft7OnIDGH6QIHe0LL27xkZpNINMNZGR0DacIVPU66+JrbDqi1cKms9qhcPNQ==
+ dependencies:
+ "@types/react" "*"
+
+"@types/react-aria-menubutton@^6.2.9":
+ version "6.2.9"
+ resolved "https://registry.yarnpkg.com/@types/react-aria-menubutton/-/react-aria-menubutton-6.2.9.tgz#df09f471c4bf50650443667aad96c985d7f667f4"
+ integrity sha512-4j1DGoJwT3NGYDuswC4TatrF0BPAvDAVe8AC9t7dPBogcVQPdHQC5yzFNCeFHTzLOXZ9mdYkjiieY+GdBxBfFg==
+ dependencies:
+ "@types/react" "*"
+
+"@types/react-dom@18.0.11":
+ version "18.0.11"
+ resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.11.tgz#321351c1459bc9ca3d216aefc8a167beec334e33"
+ integrity sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==
+ dependencies:
+ "@types/react" "*"
+
+"@types/react-scrollspy@^3.3.5":
+ version "3.3.5"
+ resolved "https://registry.yarnpkg.com/@types/react-scrollspy/-/react-scrollspy-3.3.5.tgz#1fd8817fbc4d616a9df90bc71f0736d0910dfcc0"
+ integrity sha512-cC08B1cRyWA7FLyTTE1AtKwYIjvbRsGtxWaOoppMoEidusKR1TFlZXCwnSCQF1m0oxYNeeNqr3jxF0tU2PU2Ug==
+ dependencies:
+ "@types/react" "*"
+
+"@types/react-slick@^0.23.10":
+ version "0.23.10"
+ resolved "https://registry.yarnpkg.com/@types/react-slick/-/react-slick-0.23.10.tgz#56126e6e4e95cdce7771535b2811c2c1931a7caa"
+ integrity sha512-ZiqdencANDZy6sWOWJ54LDvebuXFEhDlHtXU9FFipQR2BcYU2QJxZhvJPW6YK7cocibUiNn+YvDTbt1HtCIBVA==
+ dependencies:
+ "@types/react" "*"
+
+"@types/react-stickynode@^4.0.0":
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/@types/react-stickynode/-/react-stickynode-4.0.0.tgz#54ba7ceab9bd563bccdcae72c7486a626e870ecb"
+ integrity sha512-PKkmOzF6WCNuyIKrvhidGeUPLfe8htPwfEljKnQBF4bA5v74ADvXtwkjavOH8i6aCSw9J14AyDDl1Ul0VNQJUg==
+ dependencies:
+ "@types/react" "*"
+
+"@types/react@*", "@types/react@18.0.28":
+ version "18.0.28"
+ resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.28.tgz#accaeb8b86f4908057ad629a26635fe641480065"
+ integrity sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew==
+ dependencies:
+ "@types/prop-types" "*"
+ "@types/scheduler" "*"
+ csstype "^3.0.2"
+
+"@types/scheduler@*":
+ version "0.16.2"
+ resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39"
+ integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==
+
+"@types/styled-components@^5.1.26":
+ version "5.1.26"
+ resolved "https://registry.yarnpkg.com/@types/styled-components/-/styled-components-5.1.26.tgz#5627e6812ee96d755028a98dae61d28e57c233af"
+ integrity sha512-KuKJ9Z6xb93uJiIyxo/+ksS7yLjS1KzG6iv5i78dhVg/X3u5t1H7juRWqVmodIdz6wGVaIApo1u01kmFRdJHVw==
+ dependencies:
+ "@types/hoist-non-react-statics" "*"
+ "@types/react" "*"
+ csstype "^3.0.2"
+
+"@types/styled-system@^5.1.16":
+ version "5.1.16"
+ resolved "https://registry.yarnpkg.com/@types/styled-system/-/styled-system-5.1.16.tgz#c6fa6f751f051de3c7c5fe1d5dc7562d95a80a9e"
+ integrity sha512-+dyGs2n2o6QStsexh87NeaRmXYnKOnEe7iOEkcYOwKwI5a1gFL0+Mt/hZKi+4KD1qDMkLkGb0lpDrffb/vSkDQ==
+ dependencies:
+ csstype "^3.0.2"
+
+"@types/styled-system__theme-get@^5.0.2":
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/@types/styled-system__theme-get/-/styled-system__theme-get-5.0.2.tgz#ebd5bb465f1aaa24c729ebb09fdfa6ead01d2106"
+ integrity sha512-tvGRyzADAn2qQ8Z/fw9YOBTL1EttDQ0zrmHq/N+/K/9tF1l2lsZ9334hls1zie32FCxjPJEhzzXVHxKwqXslog==
+
+"@typescript-eslint/parser@^5.42.0":
+ version "5.52.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.52.0.tgz#73c136df6c0133f1d7870de7131ccf356f5be5a4"
+ integrity sha512-e2KiLQOZRo4Y0D/b+3y08i3jsekoSkOYStROYmPUnGMEoA0h+k2qOH5H6tcjIc68WDvGwH+PaOrP1XRzLJ6QlA==
+ dependencies:
+ "@typescript-eslint/scope-manager" "5.52.0"
+ "@typescript-eslint/types" "5.52.0"
+ "@typescript-eslint/typescript-estree" "5.52.0"
+ debug "^4.3.4"
+
+"@typescript-eslint/scope-manager@5.52.0":
+ version "5.52.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.52.0.tgz#a993d89a0556ea16811db48eabd7c5b72dcb83d1"
+ integrity sha512-AR7sxxfBKiNV0FWBSARxM8DmNxrwgnYMPwmpkC1Pl1n+eT8/I2NAUPuwDy/FmDcC6F8pBfmOcaxcxRHspgOBMw==
+ dependencies:
+ "@typescript-eslint/types" "5.52.0"
+ "@typescript-eslint/visitor-keys" "5.52.0"
+
+"@typescript-eslint/types@5.52.0":
+ version "5.52.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.52.0.tgz#19e9abc6afb5bd37a1a9bea877a1a836c0b3241b"
+ integrity sha512-oV7XU4CHYfBhk78fS7tkum+/Dpgsfi91IIDy7fjCyq2k6KB63M6gMC0YIvy+iABzmXThCRI6xpCEyVObBdWSDQ==
+
+"@typescript-eslint/typescript-estree@5.52.0":
+ version "5.52.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.52.0.tgz#6408cb3c2ccc01c03c278cb201cf07e73347dfca"
+ integrity sha512-WeWnjanyEwt6+fVrSR0MYgEpUAuROxuAH516WPjUblIrClzYJj0kBbjdnbQXLpgAN8qbEuGywiQsXUVDiAoEuQ==
+ dependencies:
+ "@typescript-eslint/types" "5.52.0"
+ "@typescript-eslint/visitor-keys" "5.52.0"
+ debug "^4.3.4"
+ globby "^11.1.0"
+ is-glob "^4.0.3"
+ semver "^7.3.7"
+ tsutils "^3.21.0"
+
+"@typescript-eslint/visitor-keys@5.52.0":
+ version "5.52.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.52.0.tgz#e38c971259f44f80cfe49d97dbffa38e3e75030f"
+ integrity sha512-qMwpw6SU5VHCPr99y274xhbm+PRViK/NATY6qzt+Et7+mThGuFSl/ompj2/hrBlRP/kq+BFdgagnOSgw9TB0eA==
+ dependencies:
+ "@typescript-eslint/types" "5.52.0"
+ eslint-visitor-keys "^3.3.0"
+
+acorn-jsx@^5.3.2:
+ version "5.3.2"
+ resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
+ integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
+
+acorn@^8.8.0:
+ version "8.8.2"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a"
+ integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==
+
+ajv@^6.10.0, ajv@^6.12.4:
+ version "6.12.6"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
+ integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
+ dependencies:
+ fast-deep-equal "^3.1.1"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.4.1"
+ uri-js "^4.2.2"
+
+animate.css@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/animate.css/-/animate.css-4.1.1.tgz#614ec5a81131d7e4dc362a58143f7406abd68075"
+ integrity sha512-+mRmCTv6SbCmtYJCN4faJMNFVNN5EuCTTprDTAo7YzIGji2KADmakjVA3+8mVDkZ2Bf09vayB35lSQIex2+QaQ==
+
+ansi-regex@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
+ integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
+
+ansi-styles@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+ integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+ dependencies:
+ color-convert "^1.9.0"
+
+ansi-styles@^4.1.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
+ integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
+ dependencies:
+ color-convert "^2.0.1"
+
+argparse@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
+ integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
+
+aria-query@^5.1.3:
+ version "5.1.3"
+ resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e"
+ integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==
+ dependencies:
+ deep-equal "^2.0.5"
+
+array-includes@^3.1.5, array-includes@^3.1.6:
+ version "3.1.6"
+ resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f"
+ integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.4"
+ es-abstract "^1.20.4"
+ get-intrinsic "^1.1.3"
+ is-string "^1.0.7"
+
+array-union@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
+ integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
+
+array.prototype.flat@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2"
+ integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.4"
+ es-abstract "^1.20.4"
+ es-shim-unscopables "^1.0.0"
+
+array.prototype.flatmap@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183"
+ integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.4"
+ es-abstract "^1.20.4"
+ es-shim-unscopables "^1.0.0"
+
+array.prototype.tosorted@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz#ccf44738aa2b5ac56578ffda97c03fd3e23dd532"
+ integrity sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.4"
+ es-abstract "^1.20.4"
+ es-shim-unscopables "^1.0.0"
+ get-intrinsic "^1.1.3"
+
+ast-types-flow@^0.0.7:
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad"
+ integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==
+
+available-typed-arrays@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7"
+ integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==
+
+axe-core@^4.6.2:
+ version "4.6.3"
+ resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.6.3.tgz#fc0db6fdb65cc7a80ccf85286d91d64ababa3ece"
+ integrity sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg==
+
+axobject-query@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.1.1.tgz#3b6e5c6d4e43ca7ba51c5babf99d22a9c68485e1"
+ integrity sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==
+ dependencies:
+ deep-equal "^2.0.5"
+
+"babel-plugin-styled-components@>= 1.12.0":
+ version "2.0.7"
+ resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-2.0.7.tgz#c81ef34b713f9da2b7d3f5550df0d1e19e798086"
+ integrity sha512-i7YhvPgVqRKfoQ66toiZ06jPNA3p6ierpfUuEWxNF+fV27Uv5gxBkf8KZLHUCc1nFA9j6+80pYoIpqCeyW3/bA==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.16.0"
+ "@babel/helper-module-imports" "^7.16.0"
+ babel-plugin-syntax-jsx "^6.18.0"
+ lodash "^4.17.11"
+ picomatch "^2.3.0"
+
+babel-plugin-syntax-jsx@^6.18.0:
+ version "6.18.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946"
+ integrity sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw==
+
+babel-runtime@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
+ integrity sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==
+ dependencies:
+ core-js "^2.4.0"
+ regenerator-runtime "^0.11.0"
+
+balanced-match@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
+ integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+
+base64-js@^1.3.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
+ integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
+
+bl@^4.0.3:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a"
+ integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==
+ dependencies:
+ buffer "^5.5.0"
+ inherits "^2.0.4"
+ readable-stream "^3.4.0"
+
+brace-expansion@^1.1.7:
+ version "1.1.11"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+ integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+ dependencies:
+ balanced-match "^1.0.0"
+ concat-map "0.0.1"
+
+braces@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
+ integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
+ dependencies:
+ fill-range "^7.0.1"
+
+buffer@^5.5.0:
+ version "5.7.1"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"
+ integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==
+ dependencies:
+ base64-js "^1.3.1"
+ ieee754 "^1.1.13"
+
+call-bind@^1.0.0, call-bind@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
+ integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
+ dependencies:
+ function-bind "^1.1.1"
+ get-intrinsic "^1.0.2"
+
+callsites@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
+ integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+
+camel-case@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73"
+ integrity sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==
+ dependencies:
+ no-case "^2.2.0"
+ upper-case "^1.1.1"
+
+camelize@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.1.tgz#89b7e16884056331a35d6b5ad064332c91daa6c3"
+ integrity sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==
+
+caniuse-lite@^1.0.30001406:
+ version "1.0.30001452"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001452.tgz#dff7b8bb834b3a91808f0a9ff0453abb1fbba02a"
+ integrity sha512-Lkp0vFjMkBB3GTpLR8zk4NwW5EdRdnitwYJHDOOKIU85x4ckYCPQ+9WlVvSVClHxVReefkUMtWZH2l9KGlD51w==
+
+chalk@^2.0.0:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
+ integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+ dependencies:
+ ansi-styles "^3.2.1"
+ escape-string-regexp "^1.0.5"
+ supports-color "^5.3.0"
+
+chalk@^4.0.0:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
+ integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
+ dependencies:
+ ansi-styles "^4.1.0"
+ supports-color "^7.1.0"
+
+chownr@^1.1.1:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
+ integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
+
+classnames@2.x, classnames@^2.0.0, classnames@^2.2.1, classnames@^2.2.5, classnames@^2.2.6, classnames@^2.3.2:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924"
+ integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==
+
+client-only@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1"
+ integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==
+
+clsx@^1.1.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12"
+ integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==
+
+color-convert@^1.9.0:
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+ integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
+ dependencies:
+ color-name "1.1.3"
+
+color-convert@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
+ integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
+ dependencies:
+ color-name "~1.1.4"
+
+color-name@1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+ integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
+
+color-name@^1.0.0, color-name@~1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
+ integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
+color-string@^1.9.0:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4"
+ integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==
+ dependencies:
+ color-name "^1.0.0"
+ simple-swizzle "^0.2.2"
+
+color@^4.2.3:
+ version "4.2.3"
+ resolved "https://registry.yarnpkg.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a"
+ integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==
+ dependencies:
+ color-convert "^2.0.1"
+ color-string "^1.9.0"
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+ integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
+
+core-js@^2.4.0:
+ version "2.6.12"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec"
+ integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==
+
+core-js@^3, core-js@^3.6.5:
+ version "3.28.0"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.28.0.tgz#ed8b9e99c273879fdfff0edfc77ee709a5800e4a"
+ integrity sha512-GiZn9D4Z/rSYvTeg1ljAIsEqFm0LaN9gVtwDCrKL80zHtS31p9BAjmTxVqTQDMpwlMolJZOFntUG2uwyj7DAqw==
+
+cross-spawn@^7.0.2, cross-spawn@^7.0.3:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
+ integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
+ dependencies:
+ path-key "^3.1.0"
+ shebang-command "^2.0.0"
+ which "^2.0.1"
+
+css-color-keywords@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05"
+ integrity sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==
+
+css-to-react-native@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-3.2.0.tgz#cdd8099f71024e149e4f6fe17a7d46ecd55f1e32"
+ integrity sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==
+ dependencies:
+ camelize "^1.0.0"
+ css-color-keywords "^1.0.0"
+ postcss-value-parser "^4.0.2"
+
+csstype@^3.0.2:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9"
+ integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==
+
+damerau-levenshtein@^1.0.8:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7"
+ integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==
+
+debug@^3.2.7:
+ version "3.2.7"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
+ integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
+ dependencies:
+ ms "^2.1.1"
+
+debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4:
+ version "4.3.4"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
+ integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
+ dependencies:
+ ms "2.1.2"
+
+decompress-response@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc"
+ integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==
+ dependencies:
+ mimic-response "^3.1.0"
+
+deep-equal@^2.0.5:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.0.tgz#5caeace9c781028b9ff459f33b779346637c43e6"
+ integrity sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==
+ dependencies:
+ call-bind "^1.0.2"
+ es-get-iterator "^1.1.2"
+ get-intrinsic "^1.1.3"
+ is-arguments "^1.1.1"
+ is-array-buffer "^3.0.1"
+ is-date-object "^1.0.5"
+ is-regex "^1.1.4"
+ is-shared-array-buffer "^1.0.2"
+ isarray "^2.0.5"
+ object-is "^1.1.5"
+ object-keys "^1.1.1"
+ object.assign "^4.1.4"
+ regexp.prototype.flags "^1.4.3"
+ side-channel "^1.0.4"
+ which-boxed-primitive "^1.0.2"
+ which-collection "^1.0.1"
+ which-typed-array "^1.1.9"
+
+deep-extend@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
+ integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
+
+deep-is@^0.1.3:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
+ integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
+
+define-lazy-prop@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f"
+ integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==
+
+define-properties@^1.1.3, define-properties@^1.1.4:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5"
+ integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==
+ dependencies:
+ has-property-descriptors "^1.0.0"
+ object-keys "^1.1.1"
+
+detect-libc@^2.0.0, detect-libc@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.1.tgz#e1897aa88fa6ad197862937fbc0441ef352ee0cd"
+ integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==
+
+dir-glob@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
+ integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
+ dependencies:
+ path-type "^4.0.0"
+
+doctrine@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
+ integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==
+ dependencies:
+ esutils "^2.0.2"
+
+doctrine@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
+ integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
+ dependencies:
+ esutils "^2.0.2"
+
+emoji-regex@^9.2.2:
+ version "9.2.2"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
+ integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
+
+end-of-stream@^1.1.0, end-of-stream@^1.4.1:
+ version "1.4.4"
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
+ integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
+ dependencies:
+ once "^1.4.0"
+
+enhanced-resolve@^5.10.0:
+ version "5.12.0"
+ resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz#300e1c90228f5b570c4d35babf263f6da7155634"
+ integrity sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==
+ dependencies:
+ graceful-fs "^4.2.4"
+ tapable "^2.2.0"
+
+enquire.js@^2.1.6:
+ version "2.1.6"
+ resolved "https://registry.yarnpkg.com/enquire.js/-/enquire.js-2.1.6.tgz#3e8780c9b8b835084c3f60e166dbc3c2a3c89814"
+ integrity sha512-/KujNpO+PT63F7Hlpu4h3pE3TokKRHN26JYmQpPyjkRD/N57R7bPDNojMXdi7uveAKjYB7yQnartCxZnFWr0Xw==
+
+es-abstract@^1.19.0, es-abstract@^1.20.4:
+ version "1.21.1"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.1.tgz#e6105a099967c08377830a0c9cb589d570dd86c6"
+ integrity sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==
+ dependencies:
+ available-typed-arrays "^1.0.5"
+ call-bind "^1.0.2"
+ es-set-tostringtag "^2.0.1"
+ es-to-primitive "^1.2.1"
+ function-bind "^1.1.1"
+ function.prototype.name "^1.1.5"
+ get-intrinsic "^1.1.3"
+ get-symbol-description "^1.0.0"
+ globalthis "^1.0.3"
+ gopd "^1.0.1"
+ has "^1.0.3"
+ has-property-descriptors "^1.0.0"
+ has-proto "^1.0.1"
+ has-symbols "^1.0.3"
+ internal-slot "^1.0.4"
+ is-array-buffer "^3.0.1"
+ is-callable "^1.2.7"
+ is-negative-zero "^2.0.2"
+ is-regex "^1.1.4"
+ is-shared-array-buffer "^1.0.2"
+ is-string "^1.0.7"
+ is-typed-array "^1.1.10"
+ is-weakref "^1.0.2"
+ object-inspect "^1.12.2"
+ object-keys "^1.1.1"
+ object.assign "^4.1.4"
+ regexp.prototype.flags "^1.4.3"
+ safe-regex-test "^1.0.0"
+ string.prototype.trimend "^1.0.6"
+ string.prototype.trimstart "^1.0.6"
+ typed-array-length "^1.0.4"
+ unbox-primitive "^1.0.2"
+ which-typed-array "^1.1.9"
+
+es-get-iterator@^1.1.2:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6"
+ integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==
+ dependencies:
+ call-bind "^1.0.2"
+ get-intrinsic "^1.1.3"
+ has-symbols "^1.0.3"
+ is-arguments "^1.1.1"
+ is-map "^2.0.2"
+ is-set "^2.0.2"
+ is-string "^1.0.7"
+ isarray "^2.0.5"
+ stop-iteration-iterator "^1.0.0"
+
+es-set-tostringtag@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8"
+ integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==
+ dependencies:
+ get-intrinsic "^1.1.3"
+ has "^1.0.3"
+ has-tostringtag "^1.0.0"
+
+es-shim-unscopables@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241"
+ integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==
+ dependencies:
+ has "^1.0.3"
+
+es-to-primitive@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
+ integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
+ dependencies:
+ is-callable "^1.1.4"
+ is-date-object "^1.0.1"
+ is-symbol "^1.0.2"
+
+escape-string-regexp@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+ integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
+
+escape-string-regexp@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
+ integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
+
+eslint-config-next@13.1.6:
+ version "13.1.6"
+ resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-13.1.6.tgz#ab6894fe5b80080f1e9b9306d1c4b0003230620e"
+ integrity sha512-0cg7h5wztg/SoLAlxljZ0ZPUQ7i6QKqRiP4M2+MgTZtxWwNKb2JSwNc18nJ6/kXBI6xYvPraTbQSIhAuVw6czw==
+ dependencies:
+ "@next/eslint-plugin-next" "13.1.6"
+ "@rushstack/eslint-patch" "^1.1.3"
+ "@typescript-eslint/parser" "^5.42.0"
+ eslint-import-resolver-node "^0.3.6"
+ eslint-import-resolver-typescript "^3.5.2"
+ eslint-plugin-import "^2.26.0"
+ eslint-plugin-jsx-a11y "^6.5.1"
+ eslint-plugin-react "^7.31.7"
+ eslint-plugin-react-hooks "^4.5.0"
+
+eslint-import-resolver-node@^0.3.6, eslint-import-resolver-node@^0.3.7:
+ version "0.3.7"
+ resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz#83b375187d412324a1963d84fa664377a23eb4d7"
+ integrity sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==
+ dependencies:
+ debug "^3.2.7"
+ is-core-module "^2.11.0"
+ resolve "^1.22.1"
+
+eslint-import-resolver-typescript@^3.5.2:
+ version "3.5.3"
+ resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.3.tgz#db5ed9e906651b7a59dd84870aaef0e78c663a05"
+ integrity sha512-njRcKYBc3isE42LaTcJNVANR3R99H9bAxBDMNDr2W7yq5gYPxbU3MkdhsQukxZ/Xg9C2vcyLlDsbKfRDg0QvCQ==
+ dependencies:
+ debug "^4.3.4"
+ enhanced-resolve "^5.10.0"
+ get-tsconfig "^4.2.0"
+ globby "^13.1.2"
+ is-core-module "^2.10.0"
+ is-glob "^4.0.3"
+ synckit "^0.8.4"
+
+eslint-module-utils@^2.7.4:
+ version "2.7.4"
+ resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz#4f3e41116aaf13a20792261e61d3a2e7e0583974"
+ integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==
+ dependencies:
+ debug "^3.2.7"
+
+eslint-plugin-import@^2.26.0:
+ version "2.27.5"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz#876a6d03f52608a3e5bb439c2550588e51dd6c65"
+ integrity sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==
+ dependencies:
+ array-includes "^3.1.6"
+ array.prototype.flat "^1.3.1"
+ array.prototype.flatmap "^1.3.1"
+ debug "^3.2.7"
+ doctrine "^2.1.0"
+ eslint-import-resolver-node "^0.3.7"
+ eslint-module-utils "^2.7.4"
+ has "^1.0.3"
+ is-core-module "^2.11.0"
+ is-glob "^4.0.3"
+ minimatch "^3.1.2"
+ object.values "^1.1.6"
+ resolve "^1.22.1"
+ semver "^6.3.0"
+ tsconfig-paths "^3.14.1"
+
+eslint-plugin-jsx-a11y@^6.5.1:
+ version "6.7.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz#fca5e02d115f48c9a597a6894d5bcec2f7a76976"
+ integrity sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==
+ dependencies:
+ "@babel/runtime" "^7.20.7"
+ aria-query "^5.1.3"
+ array-includes "^3.1.6"
+ array.prototype.flatmap "^1.3.1"
+ ast-types-flow "^0.0.7"
+ axe-core "^4.6.2"
+ axobject-query "^3.1.1"
+ damerau-levenshtein "^1.0.8"
+ emoji-regex "^9.2.2"
+ has "^1.0.3"
+ jsx-ast-utils "^3.3.3"
+ language-tags "=1.0.5"
+ minimatch "^3.1.2"
+ object.entries "^1.1.6"
+ object.fromentries "^2.0.6"
+ semver "^6.3.0"
+
+eslint-plugin-react-hooks@^4.5.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3"
+ integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==
+
+eslint-plugin-react@^7.31.7:
+ version "7.32.2"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz#e71f21c7c265ebce01bcbc9d0955170c55571f10"
+ integrity sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==
+ dependencies:
+ array-includes "^3.1.6"
+ array.prototype.flatmap "^1.3.1"
+ array.prototype.tosorted "^1.1.1"
+ doctrine "^2.1.0"
+ estraverse "^5.3.0"
+ jsx-ast-utils "^2.4.1 || ^3.0.0"
+ minimatch "^3.1.2"
+ object.entries "^1.1.6"
+ object.fromentries "^2.0.6"
+ object.hasown "^1.1.2"
+ object.values "^1.1.6"
+ prop-types "^15.8.1"
+ resolve "^2.0.0-next.4"
+ semver "^6.3.0"
+ string.prototype.matchall "^4.0.8"
+
+eslint-scope@^7.1.1:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642"
+ integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==
+ dependencies:
+ esrecurse "^4.3.0"
+ estraverse "^5.2.0"
+
+eslint-utils@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672"
+ integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==
+ dependencies:
+ eslint-visitor-keys "^2.0.0"
+
+eslint-visitor-keys@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303"
+ integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==
+
+eslint-visitor-keys@^3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826"
+ integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==
+
+eslint@8.34.0:
+ version "8.34.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.34.0.tgz#fe0ab0ef478104c1f9ebc5537e303d25a8fb22d6"
+ integrity sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg==
+ dependencies:
+ "@eslint/eslintrc" "^1.4.1"
+ "@humanwhocodes/config-array" "^0.11.8"
+ "@humanwhocodes/module-importer" "^1.0.1"
+ "@nodelib/fs.walk" "^1.2.8"
+ ajv "^6.10.0"
+ chalk "^4.0.0"
+ cross-spawn "^7.0.2"
+ debug "^4.3.2"
+ doctrine "^3.0.0"
+ escape-string-regexp "^4.0.0"
+ eslint-scope "^7.1.1"
+ eslint-utils "^3.0.0"
+ eslint-visitor-keys "^3.3.0"
+ espree "^9.4.0"
+ esquery "^1.4.0"
+ esutils "^2.0.2"
+ fast-deep-equal "^3.1.3"
+ file-entry-cache "^6.0.1"
+ find-up "^5.0.0"
+ glob-parent "^6.0.2"
+ globals "^13.19.0"
+ grapheme-splitter "^1.0.4"
+ ignore "^5.2.0"
+ import-fresh "^3.0.0"
+ imurmurhash "^0.1.4"
+ is-glob "^4.0.0"
+ is-path-inside "^3.0.3"
+ js-sdsl "^4.1.4"
+ js-yaml "^4.1.0"
+ json-stable-stringify-without-jsonify "^1.0.1"
+ levn "^0.4.1"
+ lodash.merge "^4.6.2"
+ minimatch "^3.1.2"
+ natural-compare "^1.4.0"
+ optionator "^0.9.1"
+ regexpp "^3.2.0"
+ strip-ansi "^6.0.1"
+ strip-json-comments "^3.1.0"
+ text-table "^0.2.0"
+
+espree@^9.4.0:
+ version "9.4.1"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.1.tgz#51d6092615567a2c2cff7833445e37c28c0065bd"
+ integrity sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==
+ dependencies:
+ acorn "^8.8.0"
+ acorn-jsx "^5.3.2"
+ eslint-visitor-keys "^3.3.0"
+
+esquery@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5"
+ integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==
+ dependencies:
+ estraverse "^5.1.0"
+
+esrecurse@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
+ integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
+ dependencies:
+ estraverse "^5.2.0"
+
+estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
+ integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
+
+esutils@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
+ integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
+
+eventemitter3@^3.0.0:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7"
+ integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==
+
+expand-template@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c"
+ integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==
+
+fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
+ integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+
+fast-glob@^3.2.11, fast-glob@^3.2.9:
+ version "3.2.12"
+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80"
+ integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==
+ dependencies:
+ "@nodelib/fs.stat" "^2.0.2"
+ "@nodelib/fs.walk" "^1.2.3"
+ glob-parent "^5.1.2"
+ merge2 "^1.3.0"
+ micromatch "^4.0.4"
+
+fast-json-stable-stringify@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
+ integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
+
+fast-levenshtein@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+ integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
+
+fast-memoize@^2.5.1:
+ version "2.5.2"
+ resolved "https://registry.yarnpkg.com/fast-memoize/-/fast-memoize-2.5.2.tgz#79e3bb6a4ec867ea40ba0e7146816f6cdce9b57e"
+ integrity sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw==
+
+fastq@^1.6.0:
+ version "1.15.0"
+ resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a"
+ integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==
+ dependencies:
+ reusify "^1.0.4"
+
+file-entry-cache@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
+ integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==
+ dependencies:
+ flat-cache "^3.0.4"
+
+fill-range@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
+ integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
+ dependencies:
+ to-regex-range "^5.0.1"
+
+find-up@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
+ integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
+ dependencies:
+ locate-path "^6.0.0"
+ path-exists "^4.0.0"
+
+flat-cache@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11"
+ integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==
+ dependencies:
+ flatted "^3.1.0"
+ rimraf "^3.0.2"
+
+flatted@^3.1.0:
+ version "3.2.7"
+ resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787"
+ integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==
+
+focus-group@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/focus-group/-/focus-group-0.3.1.tgz#e0f32ed86b0dabdd6ffcebdf898ecb32e47fedce"
+ integrity sha512-IA01dzk2cStQso/qnt2rWhXCFBZlBfjZmohB9mXUx9feEaJcORAK0FQGvwaApsNNGwzEnqrp/2qTR4lq8PXfnQ==
+
+for-each@^0.3.3:
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e"
+ integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==
+ dependencies:
+ is-callable "^1.1.3"
+
+fs-constants@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
+ integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+ integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
+
+fs@^0.0.1-security:
+ version "0.0.1-security"
+ resolved "https://registry.yarnpkg.com/fs/-/fs-0.0.1-security.tgz#8a7bd37186b6dddf3813f23858b57ecaaf5e41d4"
+ integrity sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==
+
+function-bind@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
+ integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
+
+function.prototype.name@^1.1.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621"
+ integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.3"
+ es-abstract "^1.19.0"
+ functions-have-names "^1.2.2"
+
+functions-have-names@^1.2.2:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834"
+ integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==
+
+get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f"
+ integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==
+ dependencies:
+ function-bind "^1.1.1"
+ has "^1.0.3"
+ has-symbols "^1.0.3"
+
+get-symbol-description@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6"
+ integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==
+ dependencies:
+ call-bind "^1.0.2"
+ get-intrinsic "^1.1.1"
+
+get-tsconfig@^4.2.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.4.0.tgz#64eee64596668a81b8fce18403f94f245ee0d4e5"
+ integrity sha512-0Gdjo/9+FzsYhXCEFueo2aY1z1tpXrxWZzP7k8ul9qt1U5o8rYJwTJYmaeHdrVosYIVYkOy2iwCJ9FdpocJhPQ==
+
+github-from-package@0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce"
+ integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==
+
+glob-parent@^5.1.2:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
+ integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
+ dependencies:
+ is-glob "^4.0.1"
+
+glob-parent@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3"
+ integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==
+ dependencies:
+ is-glob "^4.0.3"
+
+glob@7.1.7:
+ version "7.1.7"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90"
+ integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.4"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+glob@^7.1.3:
+ version "7.2.3"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
+ integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.1.1"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+globals@^11.1.0:
+ version "11.12.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
+ integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
+
+globals@^13.19.0:
+ version "13.20.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82"
+ integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==
+ dependencies:
+ type-fest "^0.20.2"
+
+globalthis@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf"
+ integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==
+ dependencies:
+ define-properties "^1.1.3"
+
+globalyzer@0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/globalyzer/-/globalyzer-0.1.0.tgz#cb76da79555669a1519d5a8edf093afaa0bf1465"
+ integrity sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==
+
+globby@^11.1.0:
+ version "11.1.0"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b"
+ integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==
+ dependencies:
+ array-union "^2.1.0"
+ dir-glob "^3.0.1"
+ fast-glob "^3.2.9"
+ ignore "^5.2.0"
+ merge2 "^1.4.1"
+ slash "^3.0.0"
+
+globby@^13.1.2:
+ version "13.1.3"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.3.tgz#f62baf5720bcb2c1330c8d4ef222ee12318563ff"
+ integrity sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==
+ dependencies:
+ dir-glob "^3.0.1"
+ fast-glob "^3.2.11"
+ ignore "^5.2.0"
+ merge2 "^1.4.1"
+ slash "^4.0.0"
+
+globrex@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098"
+ integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==
+
+gopd@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c"
+ integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==
+ dependencies:
+ get-intrinsic "^1.1.3"
+
+graceful-fs@^4.2.4:
+ version "4.2.10"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c"
+ integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==
+
+grapheme-splitter@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e"
+ integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==
+
+has-bigints@^1.0.1, has-bigints@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa"
+ integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==
+
+has-flag@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+ integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==
+
+has-flag@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
+ integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+
+has-property-descriptors@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861"
+ integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==
+ dependencies:
+ get-intrinsic "^1.1.1"
+
+has-proto@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0"
+ integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==
+
+has-symbols@^1.0.2, has-symbols@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
+ integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
+
+has-tostringtag@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25"
+ integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==
+ dependencies:
+ has-symbols "^1.0.2"
+
+has@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
+ integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
+ dependencies:
+ function-bind "^1.1.1"
+
+hoist-non-react-statics@^3.0.0, hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45"
+ integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==
+ dependencies:
+ react-is "^16.7.0"
+
+html-parse-stringify@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz#dfc1017347ce9f77c8141a507f233040c59c55d2"
+ integrity sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==
+ dependencies:
+ void-elements "3.1.0"
+
+i18next-fs-backend@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/i18next-fs-backend/-/i18next-fs-backend-2.1.1.tgz#07c6393be856c5a398e3dfc1257bf8439841cd89"
+ integrity sha512-FTnj+UmNgT3YRml5ruRv0jMZDG7odOL/OP5PF5mOqvXud2vHrPOOs68Zdk6iqzL47cnnM0ZVkK2BAvpFeDJToA==
+
+i18next@^22.4.9:
+ version "22.4.9"
+ resolved "https://registry.yarnpkg.com/i18next/-/i18next-22.4.9.tgz#98c8384c6bd41ff937da98b1e809ba03d3b41053"
+ integrity sha512-8gWMmUz460KJDQp/ob3MNUX84cVuDRY9PLFPnV8d+Qezz/6dkjxwOaH70xjrCNDO+JrUL25iXfAIN9wUkInNZw==
+ dependencies:
+ "@babel/runtime" "^7.20.6"
+
+ieee754@^1.1.13:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
+ integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
+
+ignore@^5.2.0:
+ version "5.2.4"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324"
+ integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==
+
+import-fresh@^3.0.0, import-fresh@^3.2.1:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
+ integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
+ dependencies:
+ parent-module "^1.0.0"
+ resolve-from "^4.0.0"
+
+imurmurhash@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+ integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2, inherits@^2.0.3, inherits@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+ integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
+ini@~1.3.0:
+ version "1.3.8"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
+ integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
+
+internal-slot@^1.0.3, internal-slot@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986"
+ integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==
+ dependencies:
+ get-intrinsic "^1.2.0"
+ has "^1.0.3"
+ side-channel "^1.0.4"
+
+is-arguments@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b"
+ integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==
+ dependencies:
+ call-bind "^1.0.2"
+ has-tostringtag "^1.0.0"
+
+is-array-buffer@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.1.tgz#deb1db4fcae48308d54ef2442706c0393997052a"
+ integrity sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==
+ dependencies:
+ call-bind "^1.0.2"
+ get-intrinsic "^1.1.3"
+ is-typed-array "^1.1.10"
+
+is-arrayish@^0.3.1:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03"
+ integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==
+
+is-bigint@^1.0.1:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3"
+ integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==
+ dependencies:
+ has-bigints "^1.0.1"
+
+is-boolean-object@^1.1.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719"
+ integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==
+ dependencies:
+ call-bind "^1.0.2"
+ has-tostringtag "^1.0.0"
+
+is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7:
+ version "1.2.7"
+ resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055"
+ integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==
+
+is-core-module@^2.10.0, is-core-module@^2.11.0, is-core-module@^2.9.0:
+ version "2.11.0"
+ resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144"
+ integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==
+ dependencies:
+ has "^1.0.3"
+
+is-date-object@^1.0.1, is-date-object@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f"
+ integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==
+ dependencies:
+ has-tostringtag "^1.0.0"
+
+is-docker@^2.0.0, is-docker@^2.1.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
+ integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
+
+is-extglob@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+ integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
+
+is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
+ integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
+ dependencies:
+ is-extglob "^2.1.1"
+
+is-map@^2.0.1, is-map@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127"
+ integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==
+
+is-negative-zero@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150"
+ integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==
+
+is-number-object@^1.0.4:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc"
+ integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==
+ dependencies:
+ has-tostringtag "^1.0.0"
+
+is-number@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
+ integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+
+is-path-inside@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
+ integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
+
+is-regex@^1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
+ integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==
+ dependencies:
+ call-bind "^1.0.2"
+ has-tostringtag "^1.0.0"
+
+is-set@^2.0.1, is-set@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec"
+ integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==
+
+is-shared-array-buffer@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79"
+ integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==
+ dependencies:
+ call-bind "^1.0.2"
+
+is-string@^1.0.5, is-string@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd"
+ integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==
+ dependencies:
+ has-tostringtag "^1.0.0"
+
+is-symbol@^1.0.2, is-symbol@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c"
+ integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==
+ dependencies:
+ has-symbols "^1.0.2"
+
+is-typed-array@^1.1.10, is-typed-array@^1.1.9:
+ version "1.1.10"
+ resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f"
+ integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==
+ dependencies:
+ available-typed-arrays "^1.0.5"
+ call-bind "^1.0.2"
+ for-each "^0.3.3"
+ gopd "^1.0.1"
+ has-tostringtag "^1.0.0"
+
+is-weakmap@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2"
+ integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==
+
+is-weakref@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2"
+ integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==
+ dependencies:
+ call-bind "^1.0.2"
+
+is-weakset@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d"
+ integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==
+ dependencies:
+ call-bind "^1.0.2"
+ get-intrinsic "^1.1.1"
+
+is-wsl@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
+ integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==
+ dependencies:
+ is-docker "^2.0.0"
+
+isarray@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723"
+ integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==
+
+isexe@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+ integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
+
+js-sdsl@^4.1.4:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.3.0.tgz#aeefe32a451f7af88425b11fdb5f58c90ae1d711"
+ integrity sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==
+
+"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+ integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+
+js-yaml@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
+ integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
+ dependencies:
+ argparse "^2.0.1"
+
+jsesc@^2.5.1:
+ version "2.5.2"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
+ integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
+
+json-schema-traverse@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+ integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+
+json-stable-stringify-without-jsonify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
+ integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==
+
+json2mq@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/json2mq/-/json2mq-0.2.0.tgz#b637bd3ba9eabe122c83e9720483aeb10d2c904a"
+ integrity sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==
+ dependencies:
+ string-convert "^0.2.0"
+
+json5@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593"
+ integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==
+ dependencies:
+ minimist "^1.2.0"
+
+"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.3:
+ version "3.3.3"
+ resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea"
+ integrity sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==
+ dependencies:
+ array-includes "^3.1.5"
+ object.assign "^4.1.3"
+
+language-subtag-registry@~0.3.2:
+ version "0.3.22"
+ resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d"
+ integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==
+
+language-tags@=1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a"
+ integrity sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==
+ dependencies:
+ language-subtag-registry "~0.3.2"
+
+levn@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
+ integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
+ dependencies:
+ prelude-ls "^1.2.1"
+ type-check "~0.4.0"
+
+locate-path@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
+ integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
+ dependencies:
+ p-locate "^5.0.0"
+
+lodash.debounce@^4.0.8:
+ version "4.0.8"
+ resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
+ integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==
+
+lodash.merge@^4.6.2:
+ version "4.6.2"
+ resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
+ integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
+
+lodash@^4.17.11, lodash@^4.17.15:
+ version "4.17.21"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
+ integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
+
+loose-envify@^1.1.0, loose-envify@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
+ integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
+ dependencies:
+ js-tokens "^3.0.0 || ^4.0.0"
+
+lower-case@^1.1.1:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac"
+ integrity sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==
+
+lru-cache@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
+ integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
+ dependencies:
+ yallist "^4.0.0"
+
+merge2@^1.3.0, merge2@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
+ integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
+
+micromatch@^4.0.4:
+ version "4.0.5"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
+ integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
+ dependencies:
+ braces "^3.0.2"
+ picomatch "^2.3.1"
+
+mimic-response@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9"
+ integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==
+
+minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
+ integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.6:
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
+ integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
+
+mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3:
+ version "0.5.3"
+ resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113"
+ integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==
+
+ms@2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+ integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+ms@^2.1.1:
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
+ integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
+
+nanoid@^3.3.4:
+ version "3.3.4"
+ resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab"
+ integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==
+
+napi-build-utils@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806"
+ integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==
+
+natural-compare@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
+ integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
+
+next-i18next@^13.1.5:
+ version "13.1.5"
+ resolved "https://registry.yarnpkg.com/next-i18next/-/next-i18next-13.1.5.tgz#04b824bbbe0865d2ff1e6efaf19b0dcfd63c9a93"
+ integrity sha512-gULKQNQmFYIW6C45cb5ZOHa+sw8XUkibFHTqRqrcfbAa1fcBCh3TgX1KtzA0vzeh9R93BkkvFhm+FuhO3kR9jQ==
+ dependencies:
+ "@babel/runtime" "^7.20.13"
+ "@types/hoist-non-react-statics" "^3.3.1"
+ core-js "^3"
+ hoist-non-react-statics "^3.3.2"
+ i18next-fs-backend "^2.1.1"
+
+next@13.1.6:
+ version "13.1.6"
+ resolved "https://registry.yarnpkg.com/next/-/next-13.1.6.tgz#054babe20b601f21f682f197063c9b0b32f1a27c"
+ integrity sha512-hHlbhKPj9pW+Cymvfzc15lvhaOZ54l+8sXDXJWm3OBNBzgrVj6hwGPmqqsXg40xO1Leq+kXpllzRPuncpC0Phw==
+ dependencies:
+ "@next/env" "13.1.6"
+ "@swc/helpers" "0.4.14"
+ caniuse-lite "^1.0.30001406"
+ postcss "8.4.14"
+ styled-jsx "5.1.1"
+ optionalDependencies:
+ "@next/swc-android-arm-eabi" "13.1.6"
+ "@next/swc-android-arm64" "13.1.6"
+ "@next/swc-darwin-arm64" "13.1.6"
+ "@next/swc-darwin-x64" "13.1.6"
+ "@next/swc-freebsd-x64" "13.1.6"
+ "@next/swc-linux-arm-gnueabihf" "13.1.6"
+ "@next/swc-linux-arm64-gnu" "13.1.6"
+ "@next/swc-linux-arm64-musl" "13.1.6"
+ "@next/swc-linux-x64-gnu" "13.1.6"
+ "@next/swc-linux-x64-musl" "13.1.6"
+ "@next/swc-win32-arm64-msvc" "13.1.6"
+ "@next/swc-win32-ia32-msvc" "13.1.6"
+ "@next/swc-win32-x64-msvc" "13.1.6"
+
+no-case@^2.2.0:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac"
+ integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==
+ dependencies:
+ lower-case "^1.1.1"
+
+node-abi@^3.3.0:
+ version "3.33.0"
+ resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.33.0.tgz#8b23a0cec84e1c5f5411836de6a9b84bccf26e7f"
+ integrity sha512-7GGVawqyHF4pfd0YFybhv/eM9JwTtPqx0mAanQ146O3FlSh3pA24zf9IRQTOsfTSqXTNzPSP5iagAJ94jjuVog==
+ dependencies:
+ semver "^7.3.5"
+
+node-addon-api@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-5.1.0.tgz#49da1ca055e109a23d537e9de43c09cca21eb762"
+ integrity sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==
+
+object-assign@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+ integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
+
+object-inspect@^1.12.2, object-inspect@^1.9.0:
+ version "1.12.3"
+ resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9"
+ integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==
+
+object-is@^1.1.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac"
+ integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.3"
+
+object-keys@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
+ integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
+
+object.assign@^4.1.3, object.assign@^4.1.4:
+ version "4.1.4"
+ resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f"
+ integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.4"
+ has-symbols "^1.0.3"
+ object-keys "^1.1.1"
+
+object.entries@^1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.6.tgz#9737d0e5b8291edd340a3e3264bb8a3b00d5fa23"
+ integrity sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.4"
+ es-abstract "^1.20.4"
+
+object.fromentries@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73"
+ integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.4"
+ es-abstract "^1.20.4"
+
+object.hasown@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.2.tgz#f919e21fad4eb38a57bc6345b3afd496515c3f92"
+ integrity sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==
+ dependencies:
+ define-properties "^1.1.4"
+ es-abstract "^1.20.4"
+
+object.values@^1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d"
+ integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.4"
+ es-abstract "^1.20.4"
+
+once@^1.3.0, once@^1.3.1, once@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
+ dependencies:
+ wrappy "1"
+
+open@^8.4.0:
+ version "8.4.1"
+ resolved "https://registry.yarnpkg.com/open/-/open-8.4.1.tgz#2ab3754c07f5d1f99a7a8d6a82737c95e3101cff"
+ integrity sha512-/4b7qZNhv6Uhd7jjnREh1NjnPxlTq+XNWPG88Ydkj5AILcA5m3ajvcg57pB24EQjKv0dK62XnDqk9c/hkIG5Kg==
+ dependencies:
+ define-lazy-prop "^2.0.0"
+ is-docker "^2.1.1"
+ is-wsl "^2.2.0"
+
+optionator@^0.9.1:
+ version "0.9.1"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499"
+ integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==
+ dependencies:
+ deep-is "^0.1.3"
+ fast-levenshtein "^2.0.6"
+ levn "^0.4.1"
+ prelude-ls "^1.2.1"
+ type-check "^0.4.0"
+ word-wrap "^1.2.3"
+
+p-limit@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
+ integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
+ dependencies:
+ yocto-queue "^0.1.0"
+
+p-locate@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
+ integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
+ dependencies:
+ p-limit "^3.0.2"
+
+parent-module@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
+ integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
+ dependencies:
+ callsites "^3.0.0"
+
+path-exists@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
+ integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
+
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+ integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
+
+path-key@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
+ integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
+
+path-parse@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
+ integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
+
+path-type@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
+ integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
+
+performance-now@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
+ integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==
+
+picocolors@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
+ integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
+
+picomatch@^2.3.0, picomatch@^2.3.1:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
+ integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
+
+polished@^4.2.2:
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/polished/-/polished-4.2.2.tgz#2529bb7c3198945373c52e34618c8fe7b1aa84d1"
+ integrity sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ==
+ dependencies:
+ "@babel/runtime" "^7.17.8"
+
+postcss-value-parser@^4.0.2:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
+ integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
+
+postcss@8.4.14:
+ version "8.4.14"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf"
+ integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==
+ dependencies:
+ nanoid "^3.3.4"
+ picocolors "^1.0.0"
+ source-map-js "^1.0.2"
+
+prebuild-install@^7.1.1:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.1.tgz#de97d5b34a70a0c81334fd24641f2a1702352e45"
+ integrity sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==
+ dependencies:
+ detect-libc "^2.0.0"
+ expand-template "^2.0.3"
+ github-from-package "0.0.0"
+ minimist "^1.2.3"
+ mkdirp-classic "^0.5.3"
+ napi-build-utils "^1.0.1"
+ node-abi "^3.3.0"
+ pump "^3.0.0"
+ rc "^1.2.7"
+ simple-get "^4.0.0"
+ tar-fs "^2.0.0"
+ tunnel-agent "^0.6.0"
+
+prelude-ls@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
+ integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
+
+prop-types@^15.5.0, prop-types@^15.5.10, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.8.1:
+ version "15.8.1"
+ resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
+ integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
+ dependencies:
+ loose-envify "^1.4.0"
+ object-assign "^4.1.1"
+ react-is "^16.13.1"
+
+pump@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
+ integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+punycode@^2.1.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f"
+ integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==
+
+queue-microtask@^1.2.2:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
+ integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
+
+raf@^3.0.0:
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39"
+ integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==
+ dependencies:
+ performance-now "^2.1.0"
+
+rc-collapse@^3.5.2:
+ version "3.5.2"
+ resolved "https://registry.yarnpkg.com/rc-collapse/-/rc-collapse-3.5.2.tgz#abb7d144ad55bd9cbd201fa95bc5b271da2aa7c3"
+ integrity sha512-/TNiT3DW1t3sUCiVD/DPUYooJZ3BLA93/2rZsB3eM2bGJCCla2X9D2E4tgm7LGMQGy5Atb2lMUn2FQuvQNvavQ==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ classnames "2.x"
+ rc-motion "^2.3.4"
+ rc-util "^5.27.0"
+
+rc-drawer@^6.1.3:
+ version "6.1.3"
+ resolved "https://registry.yarnpkg.com/rc-drawer/-/rc-drawer-6.1.3.tgz#4b2277db09f059be7144dc82d5afede9c2ab2191"
+ integrity sha512-AvHisO90A+xMLMKBw2zs89HxjWxusM2BUABlgK60RhweIHF8W/wk0hSOrxBlUXoA9r1F+10na3g6GZ97y1qDZA==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ "@rc-component/portal" "^1.0.0-6"
+ classnames "^2.2.6"
+ rc-motion "^2.6.1"
+ rc-util "^5.21.2"
+
+rc-motion@^2.3.4, rc-motion@^2.6.1:
+ version "2.6.3"
+ resolved "https://registry.yarnpkg.com/rc-motion/-/rc-motion-2.6.3.tgz#e6d8ca06591c2c1bcd3391a8e7a822ebc4d94e9c"
+ integrity sha512-xFLkes3/7VL/J+ah9jJruEW/Akbx5F6jVa2wG5o/ApGKQKSOd5FR3rseHLL9+xtJg4PmCwo6/1tqhDO/T+jFHA==
+ dependencies:
+ "@babel/runtime" "^7.11.1"
+ classnames "^2.2.1"
+ rc-util "^5.21.0"
+
+rc-util@^5.21.0, rc-util@^5.21.2, rc-util@^5.24.4:
+ version "5.27.2"
+ resolved "https://registry.yarnpkg.com/rc-util/-/rc-util-5.27.2.tgz#472a7bab26a62856c2c016d18dc6356e46d01012"
+ integrity sha512-8XHRbeJOWlTR2Hk1K2xLaPOf7lZu+3taskAGuqOPccA676vB3ygrz3ZgdrA3wml40CzR9RlIEHDWwI7FZT3wBQ==
+ dependencies:
+ "@babel/runtime" "^7.18.3"
+ react-is "^16.12.0"
+
+rc-util@^5.27.0:
+ version "5.28.0"
+ resolved "https://registry.yarnpkg.com/rc-util/-/rc-util-5.28.0.tgz#9e5e441d5875b8bf0ba56c2f295042a28dcff580"
+ integrity sha512-KYDjhGodswVj29v0TRciKTqRPgumIFvFDndbCD227pitQ+0Cei196rxk+OXb/blu6V8zdTRK5RjCJn+WmHLvBA==
+ dependencies:
+ "@babel/runtime" "^7.18.3"
+ react-is "^16.12.0"
+
+rc@^1.2.7:
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
+ integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
+ dependencies:
+ deep-extend "^0.6.0"
+ ini "~1.3.0"
+ minimist "^1.2.0"
+ strip-json-comments "~2.0.1"
+
+re-resizable@5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/re-resizable/-/re-resizable-5.0.1.tgz#66756a7aa0583b199e23e23f12a71c546031146d"
+ integrity sha512-Iy8v5li7bhNBDxCN1DbA4l6G2Hk8NCZtcExoI1D+5pfvKyQcH8LH2P5h3DGoEfHhs0uyyRC1Qx8bHBomfrmxgA==
+ dependencies:
+ fast-memoize "^2.5.1"
+
+react-anchor-link-smooth-scroll@^1.0.12:
+ version "1.0.12"
+ resolved "https://registry.yarnpkg.com/react-anchor-link-smooth-scroll/-/react-anchor-link-smooth-scroll-1.0.12.tgz#5cd49c73e74be6d20b4c05a5e5c72d07ebbedac7"
+ integrity sha512-aaY+9X0yh8YnC0jBfoTKpsiCLdO/Y6pCltww+VB+NnTBPDOvnIdnp1AlazajsDitc1j+cVSQ+yNtaVeTIMQbxw==
+
+react-aria-menubutton@^7.0.3:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/react-aria-menubutton/-/react-aria-menubutton-7.0.3.tgz#9f3c96e8f0b9469dc1d5dab7cf244b73069f2882"
+ integrity sha512-Ql4W3rNiZmuVJ1wQ0UUeV4OZX3IZq2evsfEqJGefSMdfkK6o8X/6Ufxrzu0wL+/Dr7JUY3xnrnIQimSCFghlCQ==
+ dependencies:
+ focus-group "^0.3.1"
+ prop-types "^15.6.0"
+ teeny-tap "^0.2.0"
+
+react-dom@18.2.0:
+ version "18.2.0"
+ resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d"
+ integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==
+ dependencies:
+ loose-envify "^1.1.0"
+ scheduler "^0.23.0"
+
+react-draggable@3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/react-draggable/-/react-draggable-3.3.0.tgz#2ed7ea3f92e7d742d747f9e6324860606cd4d997"
+ integrity sha512-U7/jD0tAW4T0S7DCPK0kkKLyL0z61sC/eqU+NUfDjnq+JtBKaYKDHpsK2wazctiA4alEzCXUnzkREoxppOySVw==
+ dependencies:
+ classnames "^2.2.5"
+ prop-types "^15.6.0"
+
+react-i18next@^12.1.5:
+ version "12.1.5"
+ resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-12.1.5.tgz#b65f5733dd2f96188a9359c009b7dbe27443f009"
+ integrity sha512-7PQAv6DA0TcStG96fle+8RfTwxVbHVlZZJPoEszwUNvDuWpGldJmNWa3ZPesEsZQZGF6GkzwvEh6p57qpFD2gQ==
+ dependencies:
+ "@babel/runtime" "^7.20.6"
+ html-parse-stringify "^3.0.1"
+
+react-icons-kit@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/react-icons-kit/-/react-icons-kit-2.0.0.tgz#9d605c687a79422705a863b5cbcf36b9892a3cc9"
+ integrity sha512-3vgaRrmJrAkRfaxBknyWJVdokvq4n8O0LexrH3hTkV2aMTxtW7VwP9MsD6BZYGC1EkVJL2GpDK8viaa4fgQejg==
+ dependencies:
+ camel-case "^3.0.0"
+ prop-types "^15.5.8"
+
+react-is@^16.12.0, react-is@^16.13.1, react-is@^16.7.0:
+ version "16.13.1"
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
+ integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
+
+react-parallax@^3.5.1:
+ version "3.5.1"
+ resolved "https://registry.yarnpkg.com/react-parallax/-/react-parallax-3.5.1.tgz#73071679371b7738e21ffac8daa0bc3cb7e5174d"
+ integrity sha512-p5zPsPsqELlIOGaPS01O0IRx8R2bxcBAtrdF/RHf9nIxxk5hijbM2y89tk4rJQBcNH6ESSLe7J2NV4/ms7FLFw==
+
+react-reveal@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/react-reveal/-/react-reveal-1.2.2.tgz#f47fbc44debc4c185ae2163a215a9e822c7adfef"
+ integrity sha512-JCv3fAoU6Z+Lcd8U48bwzm4pMZ79qsedSXYwpwt6lJNtj/v5nKJYZZbw3yhaQPPgYePo3Y0NOCoYOq/jcsisuw==
+ dependencies:
+ prop-types "^15.5.10"
+
+react-rnd@^9.0.4:
+ version "9.2.0"
+ resolved "https://registry.yarnpkg.com/react-rnd/-/react-rnd-9.2.0.tgz#0642a9f788ee2f16267d13cefe21d0e94da99668"
+ integrity sha512-Sp2vCUcvnHcdwwODbL50FJqZL6yt/ElPGVIaennOulsRWWJZ+dMWo0eJl+5qlh8uxRaLzpi9VQoq+ADTkvytsg==
+ dependencies:
+ re-resizable "5.0.1"
+ react-draggable "3.3.0"
+ tslib "1.9.3"
+
+react-scroll-motion@^0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/react-scroll-motion/-/react-scroll-motion-0.3.2.tgz#78213b0ca454352b7fa86dfcd9b6189466fed76d"
+ integrity sha512-w/6btLiY4I1wh1hxRhVKN0Vd3Hrpb+ZfSBZxxMh+mMtc9oXeR+VvfLfx2VRTNl+0JyjTCciwFxtDTK6vg09Mhw==
+
+react-scrollspy@^3.4.3:
+ version "3.4.3"
+ resolved "https://registry.yarnpkg.com/react-scrollspy/-/react-scrollspy-3.4.3.tgz#12bccebc7e2dfe228b873288b3f473904edb3854"
+ integrity sha512-c2QZpMPWxm1HF71h1EqaxBldx2zLYO0aZ24Bcuo2mUWF79T+F6qOtr7XJCzUDm99NOwhVKQD01a7A8VC6c90CQ==
+ dependencies:
+ babel-runtime "^6.26.0"
+ classnames "^2.2.5"
+ prop-types "^15.5.10"
+
+react-slick@^0.29.0:
+ version "0.29.0"
+ resolved "https://registry.yarnpkg.com/react-slick/-/react-slick-0.29.0.tgz#0bed5ea42bf75a23d40c0259b828ed27627b51bb"
+ integrity sha512-TGdOKE+ZkJHHeC4aaoH85m8RnFyWqdqRfAGkhd6dirmATXMZWAxOpTLmw2Ll/jPTQ3eEG7ercFr/sbzdeYCJXA==
+ dependencies:
+ classnames "^2.2.5"
+ enquire.js "^2.1.6"
+ json2mq "^0.2.0"
+ lodash.debounce "^4.0.8"
+ resize-observer-polyfill "^1.5.0"
+
+react-spring@^8.0.18:
+ version "8.0.27"
+ resolved "https://registry.yarnpkg.com/react-spring/-/react-spring-8.0.27.tgz#97d4dee677f41e0b2adcb696f3839680a3aa356a"
+ integrity sha512-nDpWBe3ZVezukNRandTeLSPcwwTMjNVu1IDq9qA/AMiUqHuRN4BeSWvKr3eIxxg1vtiYiOLy4FqdfCP5IoP77g==
+ dependencies:
+ "@babel/runtime" "^7.3.1"
+ prop-types "^15.5.8"
+
+react-stickynode@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/react-stickynode/-/react-stickynode-4.1.0.tgz#ecd80987f64b98f999c589cd4b992eee6bed9562"
+ integrity sha512-zylWgfad75jLfh/gYIayDcDWIDwO4weZrsZqDpjZ/axhF06zRjdCWFBgUr33Pvv2+htKWqPSFksWTyB6aMQ1ZQ==
+ dependencies:
+ classnames "^2.0.0"
+ core-js "^3.6.5"
+ prop-types "^15.6.0"
+ shallowequal "^1.0.0"
+ subscribe-ui-event "^2.0.6"
+
+react-tabs@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/react-tabs/-/react-tabs-6.0.0.tgz#328fd61ca534e0517d24f4927e37e99b29461880"
+ integrity sha512-8jKLKrlwxmn5/+xsa76yi27ZdB8E/WhlhQZw739O5UlOeUGtVoVeWnpqIewv/KbjTw7gQf/uA51zWUNt4IVygQ==
+ dependencies:
+ clsx "^1.1.0"
+ prop-types "^15.5.0"
+
+react@18.2.0:
+ version "18.2.0"
+ resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5"
+ integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==
+ dependencies:
+ loose-envify "^1.1.0"
+
+readable-stream@^3.1.1, readable-stream@^3.4.0:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
+ integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
+ dependencies:
+ inherits "^2.0.3"
+ string_decoder "^1.1.1"
+ util-deprecate "^1.0.1"
+
+regenerator-runtime@^0.11.0:
+ version "0.11.1"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
+ integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==
+
+regenerator-runtime@^0.13.11:
+ version "0.13.11"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9"
+ integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==
+
+regexp.prototype.flags@^1.4.3:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac"
+ integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.3"
+ functions-have-names "^1.2.2"
+
+regexpp@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2"
+ integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==
+
+resize-observer-polyfill@^1.5.0:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464"
+ integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==
+
+resolve-from@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
+ integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+
+resolve@^1.22.1:
+ version "1.22.1"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177"
+ integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==
+ dependencies:
+ is-core-module "^2.9.0"
+ path-parse "^1.0.7"
+ supports-preserve-symlinks-flag "^1.0.0"
+
+resolve@^2.0.0-next.4:
+ version "2.0.0-next.4"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660"
+ integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==
+ dependencies:
+ is-core-module "^2.9.0"
+ path-parse "^1.0.7"
+ supports-preserve-symlinks-flag "^1.0.0"
+
+reusify@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
+ integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
+
+rimraf@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
+ integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
+ dependencies:
+ glob "^7.1.3"
+
+run-parallel@^1.1.9:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
+ integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
+ dependencies:
+ queue-microtask "^1.2.2"
+
+safe-buffer@^5.0.1, safe-buffer@~5.2.0:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
+ integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
+
+safe-regex-test@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295"
+ integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==
+ dependencies:
+ call-bind "^1.0.2"
+ get-intrinsic "^1.1.3"
+ is-regex "^1.1.4"
+
+scheduler@^0.23.0:
+ version "0.23.0"
+ resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe"
+ integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==
+ dependencies:
+ loose-envify "^1.1.0"
+
+semver@^6.3.0:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
+ integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
+
+semver@^7.3.5, semver@^7.3.7, semver@^7.3.8:
+ version "7.3.8"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798"
+ integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==
+ dependencies:
+ lru-cache "^6.0.0"
+
+shallowequal@^1.0.0, shallowequal@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8"
+ integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==
+
+sharp@^0.31.3:
+ version "0.31.3"
+ resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.31.3.tgz#60227edc5c2be90e7378a210466c99aefcf32688"
+ integrity sha512-XcR4+FCLBFKw1bdB+GEhnUNXNXvnt0tDo4WsBsraKymuo/IAuPuCBVAL2wIkUw2r/dwFW5Q5+g66Kwl2dgDFVg==
+ dependencies:
+ color "^4.2.3"
+ detect-libc "^2.0.1"
+ node-addon-api "^5.0.0"
+ prebuild-install "^7.1.1"
+ semver "^7.3.8"
+ simple-get "^4.0.1"
+ tar-fs "^2.1.1"
+ tunnel-agent "^0.6.0"
+
+shebang-command@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
+ integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
+ dependencies:
+ shebang-regex "^3.0.0"
+
+shebang-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
+ integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+
+side-channel@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
+ integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==
+ dependencies:
+ call-bind "^1.0.0"
+ get-intrinsic "^1.0.2"
+ object-inspect "^1.9.0"
+
+simple-concat@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f"
+ integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==
+
+simple-get@^4.0.0, simple-get@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543"
+ integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==
+ dependencies:
+ decompress-response "^6.0.0"
+ once "^1.3.1"
+ simple-concat "^1.0.0"
+
+simple-swizzle@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a"
+ integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==
+ dependencies:
+ is-arrayish "^0.3.1"
+
+slash@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
+ integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
+
+slash@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7"
+ integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==
+
+source-map-js@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
+ integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
+
+stop-iteration-iterator@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4"
+ integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==
+ dependencies:
+ internal-slot "^1.0.4"
+
+string-convert@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/string-convert/-/string-convert-0.2.1.tgz#6982cc3049fbb4cd85f8b24568b9d9bf39eeff97"
+ integrity sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==
+
+string.prototype.matchall@^4.0.8:
+ version "4.0.8"
+ resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3"
+ integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.4"
+ es-abstract "^1.20.4"
+ get-intrinsic "^1.1.3"
+ has-symbols "^1.0.3"
+ internal-slot "^1.0.3"
+ regexp.prototype.flags "^1.4.3"
+ side-channel "^1.0.4"
+
+string.prototype.trimend@^1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533"
+ integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.4"
+ es-abstract "^1.20.4"
+
+string.prototype.trimstart@^1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4"
+ integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.4"
+ es-abstract "^1.20.4"
+
+string_decoder@^1.1.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
+ integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
+ dependencies:
+ safe-buffer "~5.2.0"
+
+strip-ansi@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
+ integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
+ dependencies:
+ ansi-regex "^5.0.1"
+
+strip-bom@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
+ integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==
+
+strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
+ integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
+
+strip-json-comments@~2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
+ integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==
+
+styled-components@^5.3.6:
+ version "5.3.6"
+ resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-5.3.6.tgz#27753c8c27c650bee9358e343fc927966bfd00d1"
+ integrity sha512-hGTZquGAaTqhGWldX7hhfzjnIYBZ0IXQXkCYdvF1Sq3DsUaLx6+NTHC5Jj1ooM2F68sBiVz3lvhfwQs/S3l6qg==
+ dependencies:
+ "@babel/helper-module-imports" "^7.0.0"
+ "@babel/traverse" "^7.4.5"
+ "@emotion/is-prop-valid" "^1.1.0"
+ "@emotion/stylis" "^0.8.4"
+ "@emotion/unitless" "^0.7.4"
+ babel-plugin-styled-components ">= 1.12.0"
+ css-to-react-native "^3.0.0"
+ hoist-non-react-statics "^3.0.0"
+ shallowequal "^1.1.0"
+ supports-color "^5.5.0"
+
+styled-jsx@5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.1.1.tgz#839a1c3aaacc4e735fed0781b8619ea5d0009d1f"
+ integrity sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==
+ dependencies:
+ client-only "0.0.1"
+
+styled-system@^5.1.5:
+ version "5.1.5"
+ resolved "https://registry.yarnpkg.com/styled-system/-/styled-system-5.1.5.tgz#e362d73e1dbb5641a2fd749a6eba1263dc85075e"
+ integrity sha512-7VoD0o2R3RKzOzPK0jYrVnS8iJdfkKsQJNiLRDjikOpQVqQHns/DXWaPZOH4tIKkhAT7I6wIsy9FWTWh2X3q+A==
+ dependencies:
+ "@styled-system/background" "^5.1.2"
+ "@styled-system/border" "^5.1.5"
+ "@styled-system/color" "^5.1.2"
+ "@styled-system/core" "^5.1.2"
+ "@styled-system/flexbox" "^5.1.2"
+ "@styled-system/grid" "^5.1.2"
+ "@styled-system/layout" "^5.1.2"
+ "@styled-system/position" "^5.1.2"
+ "@styled-system/shadow" "^5.1.2"
+ "@styled-system/space" "^5.1.2"
+ "@styled-system/typography" "^5.1.2"
+ "@styled-system/variant" "^5.1.5"
+ object-assign "^4.1.1"
+
+subscribe-ui-event@^2.0.6:
+ version "2.0.7"
+ resolved "https://registry.yarnpkg.com/subscribe-ui-event/-/subscribe-ui-event-2.0.7.tgz#8d18b6339c35b25246a5335775573f0e5dc461f8"
+ integrity sha512-Acrtf9XXl6lpyHAWYeRD1xTPUQHDERfL4GHeNuYAtZMc4Z8Us2iDBP0Fn3xiRvkQ1FO+hx+qRLmPEwiZxp7FDQ==
+ dependencies:
+ eventemitter3 "^3.0.0"
+ lodash "^4.17.15"
+ raf "^3.0.0"
+
+supports-color@^5.3.0, supports-color@^5.5.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+ integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+ dependencies:
+ has-flag "^3.0.0"
+
+supports-color@^7.1.0:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
+ integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
+ dependencies:
+ has-flag "^4.0.0"
+
+supports-preserve-symlinks-flag@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
+ integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
+
+synckit@^0.8.4:
+ version "0.8.5"
+ resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.5.tgz#b7f4358f9bb559437f9f167eb6bc46b3c9818fa3"
+ integrity sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==
+ dependencies:
+ "@pkgr/utils" "^2.3.1"
+ tslib "^2.5.0"
+
+tapable@^2.2.0:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0"
+ integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==
+
+tar-fs@^2.0.0, tar-fs@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784"
+ integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==
+ dependencies:
+ chownr "^1.1.1"
+ mkdirp-classic "^0.5.2"
+ pump "^3.0.0"
+ tar-stream "^2.1.4"
+
+tar-stream@^2.1.4:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287"
+ integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==
+ dependencies:
+ bl "^4.0.3"
+ end-of-stream "^1.4.1"
+ fs-constants "^1.0.0"
+ inherits "^2.0.3"
+ readable-stream "^3.1.1"
+
+teeny-tap@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/teeny-tap/-/teeny-tap-0.2.0.tgz#167e645182d06ac222d62bb2ab67947a70a58a68"
+ integrity sha512-HnA3I2sxRQe/SZgQTQgQvvA17DhfzhBJ1LfSOXZ5VUTbxGLvnAqUef84ZGNNSEbk1ZMEIDeghTHZagJ7LifAgg==
+
+text-table@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
+ integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==
+
+tiny-glob@^0.2.9:
+ version "0.2.9"
+ resolved "https://registry.yarnpkg.com/tiny-glob/-/tiny-glob-0.2.9.tgz#2212d441ac17928033b110f8b3640683129d31e2"
+ integrity sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==
+ dependencies:
+ globalyzer "0.1.0"
+ globrex "^0.1.2"
+
+to-fast-properties@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
+ integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==
+
+to-regex-range@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
+ integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
+ dependencies:
+ is-number "^7.0.0"
+
+tsconfig-paths@^3.14.1:
+ version "3.14.1"
+ resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a"
+ integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==
+ dependencies:
+ "@types/json5" "^0.0.29"
+ json5 "^1.0.1"
+ minimist "^1.2.6"
+ strip-bom "^3.0.0"
+
+tslib@1.9.3:
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286"
+ integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==
+
+tslib@^1.8.1:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
+ integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
+
+tslib@^2.4.0, tslib@^2.5.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf"
+ integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==
+
+tsutils@^3.21.0:
+ version "3.21.0"
+ resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"
+ integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==
+ dependencies:
+ tslib "^1.8.1"
+
+tunnel-agent@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
+ integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==
+ dependencies:
+ safe-buffer "^5.0.1"
+
+type-check@^0.4.0, type-check@~0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
+ integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
+ dependencies:
+ prelude-ls "^1.2.1"
+
+type-fest@^0.20.2:
+ version "0.20.2"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
+ integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
+
+typed-array-length@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb"
+ integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==
+ dependencies:
+ call-bind "^1.0.2"
+ for-each "^0.3.3"
+ is-typed-array "^1.1.9"
+
+typescript@4.9.5:
+ version "4.9.5"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a"
+ integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==
+
+unbox-primitive@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e"
+ integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==
+ dependencies:
+ call-bind "^1.0.2"
+ has-bigints "^1.0.2"
+ has-symbols "^1.0.3"
+ which-boxed-primitive "^1.0.2"
+
+upper-case@^1.1.1:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598"
+ integrity sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==
+
+uri-js@^4.2.2:
+ version "4.4.1"
+ resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
+ integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
+ dependencies:
+ punycode "^2.1.0"
+
+util-deprecate@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
+
+void-elements@3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09"
+ integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==
+
+which-boxed-primitive@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"
+ integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==
+ dependencies:
+ is-bigint "^1.0.1"
+ is-boolean-object "^1.1.0"
+ is-number-object "^1.0.4"
+ is-string "^1.0.5"
+ is-symbol "^1.0.3"
+
+which-collection@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906"
+ integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==
+ dependencies:
+ is-map "^2.0.1"
+ is-set "^2.0.1"
+ is-weakmap "^2.0.1"
+ is-weakset "^2.0.1"
+
+which-typed-array@^1.1.9:
+ version "1.1.9"
+ resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6"
+ integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==
+ dependencies:
+ available-typed-arrays "^1.0.5"
+ call-bind "^1.0.2"
+ for-each "^0.3.3"
+ gopd "^1.0.1"
+ has-tostringtag "^1.0.0"
+ is-typed-array "^1.1.10"
+
+which@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
+ integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
+ dependencies:
+ isexe "^2.0.0"
+
+word-wrap@^1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
+ integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
+
+yallist@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
+ integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
+
+yocto-queue@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
+ integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
diff --git a/scripts/bump.sh b/scripts/bump.sh
index 47c517665..ec729c568 100644
--- a/scripts/bump.sh
+++ b/scripts/bump.sh
@@ -1,7 +1,7 @@
VERSION_TYPE="${1:-patch}"
ORIG_DIR=$(pwd)
-declare -a arr=("frontend" "backend" "docs" "integration")
+declare -a arr=("frontend" "backend" "docs" "integration" "marketing")
npm config set git-tag-version false
npm config set commit-hooks false