diff --git a/.github/workflows/alpha.yml b/.github/workflows/alpha.yml
index 81fd2c55e..1d3c0e14e 100644
--- a/.github/workflows/alpha.yml
+++ b/.github/workflows/alpha.yml
@@ -2,7 +2,7 @@ name: 'Alpha Build'
on:
push:
- branches: [v5000/backend-fix]
+ branches: [v5000/multi-pages]
jobs:
frontend:
diff --git a/.github/workflows/marketing.yml b/.github/workflows/marketing.yml
index 9eea9132c..88998cc33 100644
--- a/.github/workflows/marketing.yml
+++ b/.github/workflows/marketing.yml
@@ -2,7 +2,7 @@ name: 'Marketing Build'
on:
push:
- branches: [v5000/marketing-content]
+ branches: [v5000/multi-page]
jobs:
marketing:
diff --git a/Makefile b/Makefile
index e36ff3532..54e22252b 100644
--- a/Makefile
+++ b/Makefile
@@ -47,4 +47,11 @@ trivy:
translate:
crowdin push sources
crowdin pre-translate --method=mt --engine-id=316468 -l=fr -l=nl -l=ar -l=de -l=it -l=ja -l=uk
- crowdin download
\ No newline at end of file
+ crowdin download
+
+run-local:
+ docker build -f ./frontend/Dockerfile -t retrospected/frontend:local ./frontend
+ docker run \
+ --env BACKEND_HOST=localhost \
+ --env BACKEND_PORT=8081 \
+ -it --rm -p 3100:80 retrospected/frontend:local
\ No newline at end of file
diff --git a/README.md b/README.md
index 964383e06..c5500af00 100644
--- a/README.md
+++ b/README.md
@@ -740,6 +740,8 @@ Special thanks to [@andresin87](https://github.com/andresin87) for pointing the
Another special thanks to Browserstack, as they allow me to test this project in other browsers.
+Thanks to [UnDraw](https://undraw.co/) for some of the illustrations.
+
Please make your PRs from the **develop** branch, not **master**.
diff --git a/docs/docs/self-hosting/optionals.md b/docs/docs/self-hosting/optionals.md
index e9b646d30..9a6c8c14d 100644
--- a/docs/docs/self-hosting/optionals.md
+++ b/docs/docs/self-hosting/optionals.md
@@ -111,6 +111,7 @@ services:
SENTRY_URL: '' # Optional, Sentry URL (https://1234567890abcdef12345@sentry.io/1234567)
GIPHY_API_KEY: '' # Optional, can be obtained here: https://developers.giphy.com/
DEFAULT_LANGUAGE: 'en-GB' # Set the default language for new users
+ MARKETING_ROOT: 'https://www.retrospected.com' # URL of the marketing website
# -- Do Not Change --
BACKEND_HOST: backend # This should be the name of the backend service
diff --git a/frontend/.env b/frontend/.env
index e69de29bb..a7517dd86 100644
--- a/frontend/.env
+++ b/frontend/.env
@@ -0,0 +1 @@
+VITE_VERSION=$npm_package_version
diff --git a/frontend/docker/frontend-entrypoint.sh b/frontend/docker/frontend-entrypoint.sh
index 889f50d47..11b8605b0 100644
--- a/frontend/docker/frontend-entrypoint.sh
+++ b/frontend/docker/frontend-entrypoint.sh
@@ -11,5 +11,6 @@ sed -i "s#NO_SENTRY#${SENTRY_URL:-}#g" /usr/share/nginx/html/index.html
sed -i "s#NO_GIPHY#${GIPHY_API_KEY:-}#g" /usr/share/nginx/html/index.html
sed -i "s#NO_STRIPE#${STRIPE_KEY:-}#g" /usr/share/nginx/html/index.html
sed -i "s#NO_DEFAULT_LANGUAGE#${DEFAULT_LANGUAGE:-en-GB}#g" /usr/share/nginx/html/index.html
+sed -i "s#NO_MARKETING_ROOT#${MARKETING_ROOT:-https://www.retrospected.com}#g" /usr/share/nginx/html/index.html
exec "$@"
\ No newline at end of file
diff --git a/frontend/index.html b/frontend/index.html
index c6daf9fe0..b96518c23 100644
--- a/frontend/index.html
+++ b/frontend/index.html
@@ -28,6 +28,7 @@
GIPHY_API_KEY: 'NO_GIPHY',
STRIPE_KEY: 'NO_STRIPE',
DEFAULT_LANGUAGE: 'NO_DEFAULT_LANGUAGE',
+ MARKETING_ROOT: 'NO_MARKETING_ROOT',
};
diff --git a/frontend/src/Layout.tsx b/frontend/src/Layout.tsx
index 0fa50d6bc..5200c0519 100644
--- a/frontend/src/Layout.tsx
+++ b/frontend/src/Layout.tsx
@@ -40,14 +40,7 @@ const SubscribePageOuter = lazy(
);
const ResetPasswordPage = lazy(() => import('./views/Reset'));
const ValidatePage = lazy(() => import('./views/Validate'));
-const DisclaimerPage = lazy(() => import('./views/policies/Disclaimer'));
-const AcceptableUsePolicyPage = lazy(
- () => import('./views/policies/AcceptableUse')
-);
-const CookiesPolicyPage = lazy(() => import('./views/policies/Cookies'));
-const TermsAndConditionsPage = lazy(() => import('./views/policies/Terms'));
const Invite = lazy(() => import('./views/layout/Invite'));
-const PrivacyPolicyPage = lazy(() => import('./views/policies/Privacy'));
const Panel = lazy(() => import('./views/Panel'));
const EncryptionDoc = lazy(() => import('./views/home/Encryption'));
const AdminPage = lazy(() => import('./views/admin/AdminPage'));
@@ -153,11 +146,6 @@ function App() {
} />
} />
- } />
- } />
- } />
- } />
- } />
} />
diff --git a/frontend/src/utils/getConfig.ts b/frontend/src/utils/getConfig.ts
index 257bfbe34..8de3c8978 100644
--- a/frontend/src/utils/getConfig.ts
+++ b/frontend/src/utils/getConfig.ts
@@ -5,6 +5,7 @@ interface HtmlConfig {
STRIPE_KEY: string;
DEFAULT_LANGUAGE: string;
VERSION: string;
+ MARKETING_ROOT: string;
}
interface Config {
@@ -17,6 +18,7 @@ interface Config {
StripeKey: string;
defaultLanguage: string;
version: string;
+ marketingRoot: string;
}
declare global {
@@ -33,6 +35,7 @@ function getKey(
| 'SENTRY_URL'
| 'GIPHY_API_KEY'
| 'STRIPE_KEY'
+ | 'MARKETING_ROOT'
| 'DEFAULT_LANGUAGE',
noValue: string,
defaultValue?: string
@@ -51,6 +54,7 @@ function getConfig(): Config {
const sentryUrl = getKey('SENTRY_URL', 'NO_SENTRY');
const giphyApiKey = getKey('GIPHY_API_KEY', 'NO_GIPHY');
const stripeKey = getKey('STRIPE_KEY', 'NO_STRIPE');
+ const marketingRoot = getKey('MARKETING_ROOT', 'NO_MARKETING_ROOT');
let defaultLanguage = getKey(
'DEFAULT_LANGUAGE',
'NO_DEFAULT_LANGUAGE',
@@ -74,6 +78,7 @@ function getConfig(): Config {
StripeKey: stripeKey,
defaultLanguage: defaultLanguage,
version: APP_VERSION,
+ marketingRoot,
};
}
diff --git a/frontend/src/views/Panel.tsx b/frontend/src/views/Panel.tsx
index 120ec73e3..e9824bf83 100644
--- a/frontend/src/views/Panel.tsx
+++ b/frontend/src/views/Panel.tsx
@@ -1,8 +1,6 @@
import styled from '@emotion/styled';
-import { Link as RouterLink } from 'react-router-dom';
import { colors } from '@mui/material';
import Drawer from '@mui/material/Drawer';
-import Link from '@mui/material/Link';
import Typography from '@mui/material/Typography';
import { useLanguage } from '../translations';
import LanguagePicker from '../components/LanguagePicker';
@@ -17,11 +15,11 @@ interface Policy {
}
const policies: Policy[] = [
- { name: 'Privacy policy', url: '/privacy' },
- { name: 'Terms & Conditions', url: '/terms' },
- { name: 'Disclaimer', url: '/disclaimer' },
- { name: 'Cookies Policy', url: '/cookies' },
- { name: 'Acceptable Use Policy', url: '/acceptable-use' },
+ { name: 'Privacy policy', url: '/legal/privacy' },
+ { name: 'Terms & Conditions', url: '/legal/terms' },
+ { name: 'Disclaimer', url: '/legal/disclaimer' },
+ { name: 'Cookies Policy', url: '/legal/cookies' },
+ { name: 'Acceptable Use Policy', url: '/legal/acceptable-use' },
];
function Panel() {
@@ -62,11 +60,13 @@ function Panel() {
Legal Stuff
{policies.map((policy) => (
-
+ >
+ {policy.name}
+
))}
@@ -82,27 +82,6 @@ function Panel() {
);
}
-type PanelLinkProps = {
- url: string;
- name: string;
-};
-
-function PanelLink({ url, name }: PanelLinkProps) {
- return (
-
- {name}
-
- );
-}
-
const ExternalLink = styled.a`
text-decoration: none;
:hover {
diff --git a/frontend/src/views/policies/AcceptableUse.tsx b/frontend/src/views/policies/AcceptableUse.tsx
deleted file mode 100644
index eab35c9d0..000000000
--- a/frontend/src/views/policies/AcceptableUse.tsx
+++ /dev/null
@@ -1,8 +0,0 @@
-import aup from './acceptable-use.md';
-import GenericPolicy from './Policy';
-
-const AcceptableUsePolicyPage = () => {
- return ;
-};
-
-export default AcceptableUsePolicyPage;
diff --git a/frontend/src/views/policies/Cookies.tsx b/frontend/src/views/policies/Cookies.tsx
deleted file mode 100644
index 98fcbcaee..000000000
--- a/frontend/src/views/policies/Cookies.tsx
+++ /dev/null
@@ -1,8 +0,0 @@
-import cookies from './cookies.md';
-import GenericPolicy from './Policy';
-
-const CookiesPolicyPage = () => {
- return ;
-};
-
-export default CookiesPolicyPage;
diff --git a/frontend/src/views/policies/Disclaimer.tsx b/frontend/src/views/policies/Disclaimer.tsx
deleted file mode 100644
index a31ace6a8..000000000
--- a/frontend/src/views/policies/Disclaimer.tsx
+++ /dev/null
@@ -1,8 +0,0 @@
-import disclaimer from './disclaimer.md';
-import GenericPolicy from './Policy';
-
-const DisclaimerPage = () => {
- return ;
-};
-
-export default DisclaimerPage;
diff --git a/frontend/src/views/policies/Policy.tsx b/frontend/src/views/policies/Policy.tsx
deleted file mode 100644
index c1bb3c170..000000000
--- a/frontend/src/views/policies/Policy.tsx
+++ /dev/null
@@ -1,24 +0,0 @@
-import styled from '@emotion/styled';
-import Markdown from 'react-markdown';
-import useMd from '../../hooks/useMd';
-
-interface GenericPolicyProps {
- url: string;
-}
-
-const GenericPolicy = ({ url }: GenericPolicyProps) => {
- const content = useMd(url);
- return content !== null ? (
-
- {content}
-
- ) : (
-
- );
-};
-
-const Container = styled.div`
- padding: 50px;
-`;
-
-export default GenericPolicy;
diff --git a/frontend/src/views/policies/Privacy.tsx b/frontend/src/views/policies/Privacy.tsx
deleted file mode 100644
index 5f8cfca60..000000000
--- a/frontend/src/views/policies/Privacy.tsx
+++ /dev/null
@@ -1,8 +0,0 @@
-import privacy from './privacy.md';
-import GenericPolicy from './Policy';
-
-const PrivacyPolicyPage = () => {
- return ;
-};
-
-export default PrivacyPolicyPage;
diff --git a/frontend/src/views/policies/Terms.tsx b/frontend/src/views/policies/Terms.tsx
deleted file mode 100644
index 3692acb18..000000000
--- a/frontend/src/views/policies/Terms.tsx
+++ /dev/null
@@ -1,8 +0,0 @@
-import terms from './terms.md';
-import GenericPolicy from './Policy';
-
-const TermsAndConditionsPage = () => {
- return ;
-};
-
-export default TermsAndConditionsPage;
diff --git a/marketing/README.md b/marketing/README.md
index 965a1228c..de3ac065a 100644
--- a/marketing/README.md
+++ b/marketing/README.md
@@ -1,38 +1,3 @@
-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).
+# Marketing Website
-## 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.
+https://github.com/vercel/next.js/blob/canary/examples/blog-starter/pages/posts/%5Bslug%5D.tsx
\ No newline at end of file
diff --git a/marketing/package.json b/marketing/package.json
index e5026216f..835787df6 100644
--- a/marketing/package.json
+++ b/marketing/package.json
@@ -26,6 +26,7 @@
"eslint": "8.34.0",
"eslint-config-next": "13.1.6",
"fs": "^0.0.1-security",
+ "gray-matter": "^4.0.3",
"i18next": "^22.4.9",
"next": "13.1.6",
"next-i18next": "^13.1.5",
@@ -46,6 +47,8 @@
"react-slick": "^0.29.0",
"react-stickynode": "^4.1.0",
"react-tabs": "^6.0.0",
+ "remark": "^14.0.2",
+ "remark-html": "^15.0.2",
"sharp": "^0.31.3",
"styled-components": "^5.3.6",
"styled-system": "^5.1.5",
diff --git a/marketing/public/locales/en/common.json b/marketing/public/locales/en/common.json
index e21351cea..1dff00257 100644
--- a/marketing/public/locales/en/common.json
+++ b/marketing/public/locales/en/common.json
@@ -170,6 +170,7 @@
"hint": "This will change your life!"
},
"Footer": {
+ "legal": "Legal Stuff",
"copyright": "Copyright © 2023 - Retrospected Ltd. All rights reserved.",
"about": "We create software with Love, from London, UK"
},
diff --git a/marketing/src/common/components/Markdown/PostBody.tsx b/marketing/src/common/components/Markdown/PostBody.tsx
new file mode 100644
index 000000000..89112dabe
--- /dev/null
+++ b/marketing/src/common/components/Markdown/PostBody.tsx
@@ -0,0 +1,18 @@
+import styled from 'styled-components';
+
+type Props = {
+ content: string;
+};
+
+const PostBody = ({ content }: Props) => {
+ return (
+
+ );
+};
+
+const Container = styled.div``;
+
+export default PostBody;
diff --git a/marketing/src/common/components/ScrollSpyMenu/index.tsx b/marketing/src/common/components/ScrollSpyMenu/index.tsx
index 4104175a1..7df1e5fee 100755
--- a/marketing/src/common/components/ScrollSpyMenu/index.tsx
+++ b/marketing/src/common/components/ScrollSpyMenu/index.tsx
@@ -1,5 +1,4 @@
import React, { useContext } from 'react';
-import PropTypes from 'prop-types';
import Scrollspy from 'react-scrollspy';
import AnchorLink from 'react-anchor-link-smooth-scroll';
@@ -7,6 +6,7 @@ import { DrawerContext } from '../../contexts/DrawerContext';
import NextImage from '../NextImage';
import { MenuItem } from '@/types';
import { useTranslation } from 'next-i18next';
+import Link from 'next/link';
type ScrollSpyMenuProps = {
/** className of the ScrollSpyMenu. */
@@ -35,7 +35,7 @@ type ScrollSpyMenuProps = {
/** Name of the element of scrollable container that can be used with querySelector [optional]. */
rootEl?: string;
- drawerClose?: boolean;
+ drawer?: boolean;
/**
* Function to be executed when the active item has been updated [optional].
@@ -64,7 +64,7 @@ const RenderLinkWithIcon = ({ menu }: { menu: MenuItem }) => {
const ScrollSpyMenu = ({
className,
menuItems,
- drawerClose,
+ drawer,
componentTag = 'ul',
currentClassName = 'is-current',
...props
@@ -102,29 +102,38 @@ const ScrollSpyMenu = ({
componentTag={componentTag}
{...props}
>
- {menuItems.map((menu, index) => (
-
- {menu.staticLink ? (
-
- ) : (
- <>
- {drawerClose ? (
-
- {t(menu.label)}
-
- ) : (
-
- {t(menu.label)}
-
- )}
- >
- )}
-
- ))}
+ {menuItems.map((menu, index) => {
+ const isAnchor = menu.path.startsWith('#');
+ return (
+
+ {menu.staticLink ? (
+
+ ) : (
+ <>
+ {drawer ? (
+
+ {t(menu.label)}
+
+ ) : (
+ <>
+ {isAnchor ? (
+
+ {t(menu.label)}
+
+ ) : (
+ {t(menu.label)}
+ )}
+ >
+ )}
+ >
+ )}
+
+ );
+ })}
);
};
diff --git a/marketing/src/common/data/WebAppCreative/index.js b/marketing/src/common/data/WebAppCreative/index.js
index d60c1a47a..c169827af 100755
--- a/marketing/src/common/data/WebAppCreative/index.js
+++ b/marketing/src/common/data/WebAppCreative/index.js
@@ -1,39 +1,39 @@
-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 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';
+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];
diff --git a/frontend/src/views/policies/acceptable-use.md b/marketing/src/common/documents/legal/acceptable-use.md
similarity index 99%
rename from frontend/src/views/policies/acceptable-use.md
rename to marketing/src/common/documents/legal/acceptable-use.md
index 3a4322fba..be05d5f96 100644
--- a/frontend/src/views/policies/acceptable-use.md
+++ b/marketing/src/common/documents/legal/acceptable-use.md
@@ -1,3 +1,7 @@
+---
+title: 'Acceptable use policy'
+---
+
# Acceptable use policy
These acceptable use policy ("Acceptable Use Policy", "AUP", "Policy") is an agreement between Website Operator ("Website Operator", "us", "we" or "our") and you ("User", "you" or "your"). This Policy sets forth the general guidelines and acceptable and prohibited uses of the [retrospected.com](https://www.retrospected.com) website and any of its products or services (collectively, "Website" or "Services").
diff --git a/frontend/src/views/policies/cookies.md b/marketing/src/common/documents/legal/cookies.md
similarity index 99%
rename from frontend/src/views/policies/cookies.md
rename to marketing/src/common/documents/legal/cookies.md
index 91805d56b..9240f51a7 100644
--- a/frontend/src/views/policies/cookies.md
+++ b/marketing/src/common/documents/legal/cookies.md
@@ -1,3 +1,7 @@
+---
+title: 'Cookie Policy'
+---
+
# Cookie policy
This cookie policy ("Policy") describes what cookies are and how Website Operator ("Website Operator", "we", "us" or "our") uses them on the [retrospected.com](https://www.retrospected.com) website and any of its products or services (collectively, "Website" or "Services").
diff --git a/frontend/src/views/policies/disclaimer.md b/marketing/src/common/documents/legal/disclaimer.md
similarity index 99%
rename from frontend/src/views/policies/disclaimer.md
rename to marketing/src/common/documents/legal/disclaimer.md
index 9e41be530..f142656d4 100644
--- a/frontend/src/views/policies/disclaimer.md
+++ b/marketing/src/common/documents/legal/disclaimer.md
@@ -1,3 +1,7 @@
+---
+title: 'Disclaimer'
+---
+
# Disclaimer
This disclaimer ("Disclaimer", "Agreement") is an agreement between Website Operator ("Website Operator", "us", "we" or "our") and you ("User", "you" or "your"). This Disclaimer sets forth the general guidelines, terms and conditions of your use of the [retrospected.com](https://www.retrospected.com) website and any of its products or services (collectively, "Website" or "Services").
diff --git a/frontend/src/views/policies/privacy.md b/marketing/src/common/documents/legal/privacy.md
similarity index 99%
rename from frontend/src/views/policies/privacy.md
rename to marketing/src/common/documents/legal/privacy.md
index 8372eb1d9..86c178e1d 100644
--- a/frontend/src/views/policies/privacy.md
+++ b/marketing/src/common/documents/legal/privacy.md
@@ -1,3 +1,7 @@
+---
+title: 'Privacy Policy'
+---
+
# Privacy policy
This privacy policy ("Policy") describes how Website Operator ("Website Operator", "we", "us" or "our") collects, protects and uses the personally identifiable information ("Personal Information") you ("User", "you" or "your") may provide on the [retrospected.com](https://www.retrospected.com) website and any of its products or services (collectively, "Website" or "Services").
diff --git a/frontend/src/views/policies/terms.md b/marketing/src/common/documents/legal/terms.md
similarity index 99%
rename from frontend/src/views/policies/terms.md
rename to marketing/src/common/documents/legal/terms.md
index f141e486a..e089fb08f 100644
--- a/frontend/src/views/policies/terms.md
+++ b/marketing/src/common/documents/legal/terms.md
@@ -1,3 +1,7 @@
+---
+title: 'Terms and conditions'
+---
+
# Terms and conditions
These terms and conditions ("Terms", "Agreement") are an agreement between Website Operator ("Website Operator", "us", "we" or "our") and you ("User", "you" or "your"). This Agreement sets forth the general terms and conditions of your use of the [retrospected.com](https://www.retrospected.com) website and any of its products or services (collectively, "Website" or "Services").
diff --git a/marketing/src/containers/WebAppCreative/AnalyticsTool/analytics.style.tsx b/marketing/src/containers/AnalyticsTool/analytics.style.tsx
similarity index 96%
rename from marketing/src/containers/WebAppCreative/AnalyticsTool/analytics.style.tsx
rename to marketing/src/containers/AnalyticsTool/analytics.style.tsx
index 51b93c99d..7aba4eace 100755
--- a/marketing/src/containers/WebAppCreative/AnalyticsTool/analytics.style.tsx
+++ b/marketing/src/containers/AnalyticsTool/analytics.style.tsx
@@ -2,8 +2,8 @@ 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';
+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; */
diff --git a/marketing/src/containers/WebAppCreative/AnalyticsTool/index.tsx b/marketing/src/containers/AnalyticsTool/index.tsx
similarity index 79%
rename from marketing/src/containers/WebAppCreative/AnalyticsTool/index.tsx
rename to marketing/src/containers/AnalyticsTool/index.tsx
index 07991432b..17417cc91 100755
--- a/marketing/src/containers/WebAppCreative/AnalyticsTool/index.tsx
+++ b/marketing/src/containers/AnalyticsTool/index.tsx
@@ -3,15 +3,15 @@ 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 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 parallaxBg from '@/common/assets/image/webAppCreative/parallax-1.png';
import { useTranslation } from 'next-i18next';
const AnalyticsTool = () => {
diff --git a/marketing/src/containers/WebAppCreative/AnalyticsTool/server-secure.svg b/marketing/src/containers/AnalyticsTool/server-secure.svg
similarity index 100%
rename from marketing/src/containers/WebAppCreative/AnalyticsTool/server-secure.svg
rename to marketing/src/containers/AnalyticsTool/server-secure.svg
diff --git a/marketing/src/containers/WebAppCreative/Banner/banner.style.tsx b/marketing/src/containers/Banner/banner.style.tsx
similarity index 100%
rename from marketing/src/containers/WebAppCreative/Banner/banner.style.tsx
rename to marketing/src/containers/Banner/banner.style.tsx
diff --git a/marketing/src/containers/WebAppCreative/Banner/index.tsx b/marketing/src/containers/Banner/index.tsx
similarity index 80%
rename from marketing/src/containers/WebAppCreative/Banner/index.tsx
rename to marketing/src/containers/Banner/index.tsx
index b89988305..47d9658da 100755
--- a/marketing/src/containers/WebAppCreative/Banner/index.tsx
+++ b/marketing/src/containers/Banner/index.tsx
@@ -1,8 +1,8 @@
-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 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,
@@ -12,7 +12,7 @@ import Section, {
import screenshot from './mockup-1-02.webp';
import { useTranslation } from 'next-i18next';
import { useConfig } from '@/common/hooks/useConfig';
-import dashboardPattern from '../../../common/assets/image/webAppCreative/dashboard-pattern.png';
+import dashboardPattern from '@/common/assets/image/webAppCreative/dashboard-pattern.png';
const Banner = () => {
const { t } = useTranslation('common');
diff --git a/marketing/src/containers/WebAppCreative/Banner/mockup-1-02.webp b/marketing/src/containers/Banner/mockup-1-02.webp
similarity index 100%
rename from marketing/src/containers/WebAppCreative/Banner/mockup-1-02.webp
rename to marketing/src/containers/Banner/mockup-1-02.webp
diff --git a/marketing/src/containers/WebAppCreative/CallToAction/cta.style.tsx b/marketing/src/containers/CallToAction/cta.style.tsx
similarity index 100%
rename from marketing/src/containers/WebAppCreative/CallToAction/cta.style.tsx
rename to marketing/src/containers/CallToAction/cta.style.tsx
diff --git a/marketing/src/containers/WebAppCreative/CallToAction/index.tsx b/marketing/src/containers/CallToAction/index.tsx
similarity index 75%
rename from marketing/src/containers/WebAppCreative/CallToAction/index.tsx
rename to marketing/src/containers/CallToAction/index.tsx
index 4adfa2dc5..cdc93978d 100755
--- a/marketing/src/containers/WebAppCreative/CallToAction/index.tsx
+++ b/marketing/src/containers/CallToAction/index.tsx
@@ -1,9 +1,9 @@
-import Container from '../../../common/components/UI/Container';
-import Heading from '../../../common/components/Heading';
-import Text from '../../../common/components/Text';
+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 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';
diff --git a/marketing/src/containers/WebAppCreative/Clients/adidas.png b/marketing/src/containers/Clients/adidas.png
similarity index 100%
rename from marketing/src/containers/WebAppCreative/Clients/adidas.png
rename to marketing/src/containers/Clients/adidas.png
diff --git a/marketing/src/containers/WebAppCreative/Clients/amazon.png b/marketing/src/containers/Clients/amazon.png
similarity index 100%
rename from marketing/src/containers/WebAppCreative/Clients/amazon.png
rename to marketing/src/containers/Clients/amazon.png
diff --git a/marketing/src/containers/WebAppCreative/Clients/barclays.png b/marketing/src/containers/Clients/barclays.png
similarity index 100%
rename from marketing/src/containers/WebAppCreative/Clients/barclays.png
rename to marketing/src/containers/Clients/barclays.png
diff --git a/marketing/src/containers/WebAppCreative/Clients/clients.style.tsx b/marketing/src/containers/Clients/clients.style.tsx
similarity index 100%
rename from marketing/src/containers/WebAppCreative/Clients/clients.style.tsx
rename to marketing/src/containers/Clients/clients.style.tsx
diff --git a/marketing/src/containers/WebAppCreative/Clients/db.png b/marketing/src/containers/Clients/db.png
similarity index 100%
rename from marketing/src/containers/WebAppCreative/Clients/db.png
rename to marketing/src/containers/Clients/db.png
diff --git a/marketing/src/containers/WebAppCreative/Clients/db.svg b/marketing/src/containers/Clients/db.svg
similarity index 100%
rename from marketing/src/containers/WebAppCreative/Clients/db.svg
rename to marketing/src/containers/Clients/db.svg
diff --git a/marketing/src/containers/WebAppCreative/Clients/deloitte.png b/marketing/src/containers/Clients/deloitte.png
similarity index 100%
rename from marketing/src/containers/WebAppCreative/Clients/deloitte.png
rename to marketing/src/containers/Clients/deloitte.png
diff --git a/marketing/src/containers/WebAppCreative/Clients/delta.png b/marketing/src/containers/Clients/delta.png
similarity index 100%
rename from marketing/src/containers/WebAppCreative/Clients/delta.png
rename to marketing/src/containers/Clients/delta.png
diff --git a/marketing/src/containers/WebAppCreative/Clients/expedia.png b/marketing/src/containers/Clients/expedia.png
similarity index 100%
rename from marketing/src/containers/WebAppCreative/Clients/expedia.png
rename to marketing/src/containers/Clients/expedia.png
diff --git a/marketing/src/containers/WebAppCreative/Clients/ibm.png b/marketing/src/containers/Clients/ibm.png
similarity index 100%
rename from marketing/src/containers/WebAppCreative/Clients/ibm.png
rename to marketing/src/containers/Clients/ibm.png
diff --git a/marketing/src/containers/WebAppCreative/Clients/index.tsx b/marketing/src/containers/Clients/index.tsx
similarity index 93%
rename from marketing/src/containers/WebAppCreative/Clients/index.tsx
rename to marketing/src/containers/Clients/index.tsx
index a9c19ddae..b15a26dbf 100755
--- a/marketing/src/containers/WebAppCreative/Clients/index.tsx
+++ b/marketing/src/containers/Clients/index.tsx
@@ -1,8 +1,8 @@
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 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';
diff --git a/marketing/src/containers/WebAppCreative/Clients/natwest.png b/marketing/src/containers/Clients/natwest.png
similarity index 100%
rename from marketing/src/containers/WebAppCreative/Clients/natwest.png
rename to marketing/src/containers/Clients/natwest.png
diff --git a/marketing/src/containers/WebAppCreative/Clients/novartis.png b/marketing/src/containers/Clients/novartis.png
similarity index 100%
rename from marketing/src/containers/WebAppCreative/Clients/novartis.png
rename to marketing/src/containers/Clients/novartis.png
diff --git a/marketing/src/containers/WebAppCreative/Clients/pwc.png b/marketing/src/containers/Clients/pwc.png
similarity index 100%
rename from marketing/src/containers/WebAppCreative/Clients/pwc.png
rename to marketing/src/containers/Clients/pwc.png
diff --git a/marketing/src/containers/WebAppCreative/Clients/siemens.png b/marketing/src/containers/Clients/siemens.png
similarity index 100%
rename from marketing/src/containers/WebAppCreative/Clients/siemens.png
rename to marketing/src/containers/Clients/siemens.png
diff --git a/marketing/src/containers/WebAppCreative/Clients/target.png b/marketing/src/containers/Clients/target.png
similarity index 100%
rename from marketing/src/containers/WebAppCreative/Clients/target.png
rename to marketing/src/containers/Clients/target.png
diff --git a/marketing/src/containers/WebAppCreative/Clients/vodafone.png b/marketing/src/containers/Clients/vodafone.png
similarity index 100%
rename from marketing/src/containers/WebAppCreative/Clients/vodafone.png
rename to marketing/src/containers/Clients/vodafone.png
diff --git a/marketing/src/containers/WebAppCreative/Dashboard/dashboard.style.tsx b/marketing/src/containers/Dashboard/dashboard.style.tsx
similarity index 96%
rename from marketing/src/containers/WebAppCreative/Dashboard/dashboard.style.tsx
rename to marketing/src/containers/Dashboard/dashboard.style.tsx
index 9a9d32140..9d4c546e4 100755
--- a/marketing/src/containers/WebAppCreative/Dashboard/dashboard.style.tsx
+++ b/marketing/src/containers/Dashboard/dashboard.style.tsx
@@ -1,8 +1,8 @@
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';
+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;
diff --git a/marketing/src/containers/WebAppCreative/Dashboard/feature1.webp b/marketing/src/containers/Dashboard/feature1.webp
similarity index 100%
rename from marketing/src/containers/WebAppCreative/Dashboard/feature1.webp
rename to marketing/src/containers/Dashboard/feature1.webp
diff --git a/marketing/src/containers/WebAppCreative/Dashboard/feature2.png b/marketing/src/containers/Dashboard/feature2.png
similarity index 100%
rename from marketing/src/containers/WebAppCreative/Dashboard/feature2.png
rename to marketing/src/containers/Dashboard/feature2.png
diff --git a/marketing/src/containers/WebAppCreative/Dashboard/feature3.png b/marketing/src/containers/Dashboard/feature3.png
similarity index 100%
rename from marketing/src/containers/WebAppCreative/Dashboard/feature3.png
rename to marketing/src/containers/Dashboard/feature3.png
diff --git a/marketing/src/containers/WebAppCreative/Dashboard/feature4.png b/marketing/src/containers/Dashboard/feature4.png
similarity index 100%
rename from marketing/src/containers/WebAppCreative/Dashboard/feature4.png
rename to marketing/src/containers/Dashboard/feature4.png
diff --git a/marketing/src/containers/WebAppCreative/Dashboard/index.tsx b/marketing/src/containers/Dashboard/index.tsx
similarity index 89%
rename from marketing/src/containers/WebAppCreative/Dashboard/index.tsx
rename to marketing/src/containers/Dashboard/index.tsx
index c11b23a29..9eee2855a 100755
--- a/marketing/src/containers/WebAppCreative/Dashboard/index.tsx
+++ b/marketing/src/containers/Dashboard/index.tsx
@@ -1,9 +1,9 @@
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 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,
diff --git a/marketing/src/containers/WebAppCreative/Faq/faq.style.tsx b/marketing/src/containers/Faq/faq.style.tsx
similarity index 100%
rename from marketing/src/containers/WebAppCreative/Faq/faq.style.tsx
rename to marketing/src/containers/Faq/faq.style.tsx
diff --git a/marketing/src/containers/WebAppCreative/Faq/index.tsx b/marketing/src/containers/Faq/index.tsx
similarity index 93%
rename from marketing/src/containers/WebAppCreative/Faq/index.tsx
rename to marketing/src/containers/Faq/index.tsx
index 78681c843..f4d71b973 100755
--- a/marketing/src/containers/WebAppCreative/Faq/index.tsx
+++ b/marketing/src/containers/Faq/index.tsx
@@ -1,6 +1,6 @@
import { useState, Fragment } from 'react';
-import Heading from '../../../common/components/Heading';
-import Container from '../../../common/components/UI/Container';
+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';
diff --git a/marketing/src/containers/WebAppCreative/Faq/motion-util.ts b/marketing/src/containers/Faq/motion-util.ts
similarity index 100%
rename from marketing/src/containers/WebAppCreative/Faq/motion-util.ts
rename to marketing/src/containers/Faq/motion-util.ts
diff --git a/marketing/src/containers/WebAppCreative/Footer/footer.style.tsx b/marketing/src/containers/Footer/footer.style.tsx
similarity index 96%
rename from marketing/src/containers/WebAppCreative/Footer/footer.style.tsx
rename to marketing/src/containers/Footer/footer.style.tsx
index 252fbc538..3978e4bb2 100755
--- a/marketing/src/containers/WebAppCreative/Footer/footer.style.tsx
+++ b/marketing/src/containers/Footer/footer.style.tsx
@@ -8,14 +8,14 @@ export const Section = styled.footer`
export const Grid = styled.div`
display: grid;
- grid-template-columns: repeat(2, 1fr);
+ grid-template-columns: repeat(3, 1fr);
@media screen and (max-width: 768px) {
gap: 30px 30px;
- grid-template-columns: repeat(2, 1fr);
+ grid-template-columns: repeat(3, 1fr);
}
@media screen and (max-width: 480px) {
gap: 20px 0px;
- grid-template-columns: repeat(2, 50%);
+ grid-template-columns: repeat(3, 50%);
}
`;
diff --git a/marketing/src/containers/WebAppCreative/Footer/index.tsx b/marketing/src/containers/Footer/index.tsx
similarity index 84%
rename from marketing/src/containers/WebAppCreative/Footer/index.tsx
rename to marketing/src/containers/Footer/index.tsx
index 9a0e28b00..6ed554fd1 100755
--- a/marketing/src/containers/WebAppCreative/Footer/index.tsx
+++ b/marketing/src/containers/Footer/index.tsx
@@ -2,11 +2,11 @@ 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 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,
@@ -20,10 +20,16 @@ import {
} 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 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';
+import { LegalDocumentMetadata } from '@/lib/getLegal';
+import NextLink from 'next/link';
+
+type FooterProps = {
+ legals: LegalDocumentMetadata[];
+};
export const footerTop = {
about: {
@@ -180,7 +186,7 @@ export const footer = {
],
};
-const Footer = () => {
+export default function Footer({ legals }: FooterProps) {
const { t } = useTranslation();
return (
@@ -202,6 +208,16 @@ const Footer = () => {
))} */}
+
+ {t('Footer.legal')}
+
+ {legals.map((doc) => (
+
+ {doc.title}
+
+ ))}
+
+
@@ -253,6 +269,4 @@ const Footer = () => {
);
-};
-
-export default Footer;
+}
diff --git a/marketing/src/containers/WebAppCreative/HowItWorks/howItWorks.style.tsx b/marketing/src/containers/HowItWorks/howItWorks.style.tsx
similarity index 100%
rename from marketing/src/containers/WebAppCreative/HowItWorks/howItWorks.style.tsx
rename to marketing/src/containers/HowItWorks/howItWorks.style.tsx
diff --git a/marketing/src/containers/WebAppCreative/HowItWorks/index.tsx b/marketing/src/containers/HowItWorks/index.tsx
similarity index 69%
rename from marketing/src/containers/WebAppCreative/HowItWorks/index.tsx
rename to marketing/src/containers/HowItWorks/index.tsx
index 07f03e52b..c902e1eaf 100755
--- a/marketing/src/containers/WebAppCreative/HowItWorks/index.tsx
+++ b/marketing/src/containers/HowItWorks/index.tsx
@@ -1,16 +1,16 @@
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 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 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 = {
diff --git a/marketing/src/containers/WebAppCreative/Integrations/index.tsx b/marketing/src/containers/Integrations/index.tsx
similarity index 75%
rename from marketing/src/containers/WebAppCreative/Integrations/index.tsx
rename to marketing/src/containers/Integrations/index.tsx
index 8fc847cf5..23f1ae011 100755
--- a/marketing/src/containers/WebAppCreative/Integrations/index.tsx
+++ b/marketing/src/containers/Integrations/index.tsx
@@ -1,12 +1,12 @@
-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 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 github from '../../../common/assets/image/webAppCreative/icons/github.png';
-import googleCloud from '../../../common/assets/image/webAppCreative/icons/google-cloud.png';
-import slack2 from '../../../common/assets/image/webAppCreative/icons/slack.png';
-import twitter from '../../../common/assets/image/webAppCreative/icons/twitter.png';
+import github from '@/common/assets/image/webAppCreative/icons/github.png';
+import googleCloud from '@/common/assets/image/webAppCreative/icons/google-cloud.png';
+import slack2 from '@/common/assets/image/webAppCreative/icons/slack.png';
+import twitter from '@/common/assets/image/webAppCreative/icons/twitter.png';
import markdown from './markdown.png';
import microsoft from './microsoft.png';
import okta from './okta.png';
diff --git a/marketing/src/containers/WebAppCreative/Integrations/integration.style.tsx b/marketing/src/containers/Integrations/integration.style.tsx
similarity index 100%
rename from marketing/src/containers/WebAppCreative/Integrations/integration.style.tsx
rename to marketing/src/containers/Integrations/integration.style.tsx
diff --git a/marketing/src/containers/WebAppCreative/Integrations/markdown.png b/marketing/src/containers/Integrations/markdown.png
similarity index 100%
rename from marketing/src/containers/WebAppCreative/Integrations/markdown.png
rename to marketing/src/containers/Integrations/markdown.png
diff --git a/marketing/src/containers/WebAppCreative/Integrations/microsoft.png b/marketing/src/containers/Integrations/microsoft.png
similarity index 100%
rename from marketing/src/containers/WebAppCreative/Integrations/microsoft.png
rename to marketing/src/containers/Integrations/microsoft.png
diff --git a/marketing/src/containers/WebAppCreative/Integrations/okta.png b/marketing/src/containers/Integrations/okta.png
similarity index 100%
rename from marketing/src/containers/WebAppCreative/Integrations/okta.png
rename to marketing/src/containers/Integrations/okta.png
diff --git a/marketing/src/containers/Layout/Layout.tsx b/marketing/src/containers/Layout/Layout.tsx
new file mode 100644
index 000000000..58e063301
--- /dev/null
+++ b/marketing/src/containers/Layout/Layout.tsx
@@ -0,0 +1,44 @@
+import React, { Fragment } from 'react';
+import styled, { ThemeProvider } from 'styled-components';
+import Sticky from 'react-stickynode';
+import 'animate.css';
+import { useTranslation } from 'next-i18next';
+import { LegalDocumentMetadata } from '@/lib/getLegal';
+import ResetCSS from '@/common/assets/css/style';
+import { ContentWrapper, GlobalStyle } from '../webAppCreative.style';
+import { DrawerProvider } from '@/common/contexts/DrawerContext';
+import Navbar from '../Navbar';
+import { theme } from '@/common/theme/webAppCreative';
+import Footer from '../Footer';
+import { MenuItem } from '@/types';
+
+type HomePageProps = {
+ legals: LegalDocumentMetadata[];
+ menuItems: MenuItem[];
+ children: React.ReactNode;
+};
+
+export default function Layout({ legals, menuItems, children }: HomePageProps) {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+ {children}
+
+
+
+
+ );
+}
+
+const Content = styled.div`
+ margin-top: 108px;
+`;
diff --git a/marketing/src/containers/Legal/LegalContent.tsx b/marketing/src/containers/Legal/LegalContent.tsx
new file mode 100644
index 000000000..dac188f59
--- /dev/null
+++ b/marketing/src/containers/Legal/LegalContent.tsx
@@ -0,0 +1,32 @@
+import PostBody from '@/common/components/Markdown/PostBody';
+import NextImage from '@/common/components/NextImage';
+import styled from 'styled-components';
+import background from './background.svg';
+
+type LegalContent = {
+ content: string;
+};
+
+export default function LegalContent({ content }: LegalContent) {
+ return (
+
+
+
+
+ );
+}
+
+const Container = styled.div`
+ margin: 30px;
+ padding: 20px;
+ box-shadow: rgba(0, 0, 0, 0.15) 0px 2px 8px;
+ position: relative;
+
+ img {
+ z-index: -1;
+ position: absolute;
+ top: 20px;
+ right: 10px;
+ opacity: 0.1;
+ }
+`;
diff --git a/marketing/src/containers/Legal/background.svg b/marketing/src/containers/Legal/background.svg
new file mode 100644
index 000000000..385548e33
--- /dev/null
+++ b/marketing/src/containers/Legal/background.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/marketing/src/containers/WebAppCreative/Navbar/LanguagePicker.tsx b/marketing/src/containers/Navbar/LanguagePicker.tsx
similarity index 91%
rename from marketing/src/containers/WebAppCreative/Navbar/LanguagePicker.tsx
rename to marketing/src/containers/Navbar/LanguagePicker.tsx
index 88457d7cd..95b7b0024 100644
--- a/marketing/src/containers/WebAppCreative/Navbar/LanguagePicker.tsx
+++ b/marketing/src/containers/Navbar/LanguagePicker.tsx
@@ -8,7 +8,7 @@ const mappings: Record = {
};
export function LanguagePicker({}: {}) {
- const { push, locale, locales } = useRouter();
+ const { push, locale, locales, pathname, asPath, query } = useRouter();
const [open, setOpen] = useState(false);
const handleChange = (
@@ -18,7 +18,8 @@ export function LanguagePicker({}: {}) {
e.preventDefault();
e.stopPropagation();
setOpen(false);
- push('/' + loc, '/' + loc, { locale: loc });
+
+ push({ pathname, query }, asPath, { locale: loc });
};
if (!locale || !locales) return null;
diff --git a/marketing/src/containers/WebAppCreative/Navbar/index.tsx b/marketing/src/containers/Navbar/index.tsx
similarity index 68%
rename from marketing/src/containers/WebAppCreative/Navbar/index.tsx
rename to marketing/src/containers/Navbar/index.tsx
index ca8b83652..1201dcca0 100755
--- a/marketing/src/containers/WebAppCreative/Navbar/index.tsx
+++ b/marketing/src/containers/Navbar/index.tsx
@@ -1,13 +1,13 @@
import React, { useContext } from 'react';
-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 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';
@@ -15,45 +15,13 @@ import { useConfig } from '@/common/hooks/useConfig';
import { LanguagePicker } from './LanguagePicker';
import styled from 'styled-components';
-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;
+ items: MenuItem[];
};
const Navbar = ({
@@ -75,6 +43,7 @@ const Navbar = ({
flexBox: true,
alignItems: 'center',
},
+ items,
}: NavbarProps) => {
const { state, dispatch } = useContext(DrawerContext);
const { t } = useTranslation();
@@ -103,7 +72,7 @@ const Navbar = ({
diff --git a/marketing/src/containers/WebAppCreative/Navbar/logo.png b/marketing/src/containers/Navbar/logo.png
similarity index 100%
rename from marketing/src/containers/WebAppCreative/Navbar/logo.png
rename to marketing/src/containers/Navbar/logo.png
diff --git a/marketing/src/containers/WebAppCreative/NewsFeed/index.tsx b/marketing/src/containers/NewsFeed/index.tsx
similarity index 75%
rename from marketing/src/containers/WebAppCreative/NewsFeed/index.tsx
rename to marketing/src/containers/NewsFeed/index.tsx
index e255a8151..58948e5e6 100755
--- a/marketing/src/containers/WebAppCreative/NewsFeed/index.tsx
+++ b/marketing/src/containers/NewsFeed/index.tsx
@@ -2,13 +2,13 @@ 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 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 { posts } from '@/common/data/WebAppCreative';
import { Section, SectionHeading, Grid, Article } from './newsFeed.style';
import { useTranslation } from 'next-i18next';
diff --git a/marketing/src/containers/WebAppCreative/NewsFeed/newsFeed.style.tsx b/marketing/src/containers/NewsFeed/newsFeed.style.tsx
similarity index 100%
rename from marketing/src/containers/WebAppCreative/NewsFeed/newsFeed.style.tsx
rename to marketing/src/containers/NewsFeed/newsFeed.style.tsx
diff --git a/marketing/src/containers/WebAppCreative/Pricing/index.tsx b/marketing/src/containers/Pricing/index.tsx
similarity index 94%
rename from marketing/src/containers/WebAppCreative/Pricing/index.tsx
rename to marketing/src/containers/Pricing/index.tsx
index 897cd49f6..5d103a16d 100755
--- a/marketing/src/containers/WebAppCreative/Pricing/index.tsx
+++ b/marketing/src/containers/Pricing/index.tsx
@@ -1,10 +1,10 @@
import { useState } from 'react';
import Fade from 'react-reveal/Fade';
-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 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 pricingFree from './pricing-free.svg';
import pricingPro from './pricing-team.svg';
import pricingUnlimited from './pricing-unlimited.svg';
diff --git a/marketing/src/containers/WebAppCreative/Pricing/pricing-free.svg b/marketing/src/containers/Pricing/pricing-free.svg
similarity index 100%
rename from marketing/src/containers/WebAppCreative/Pricing/pricing-free.svg
rename to marketing/src/containers/Pricing/pricing-free.svg
diff --git a/marketing/src/containers/WebAppCreative/Pricing/pricing-self-hosted.svg b/marketing/src/containers/Pricing/pricing-self-hosted.svg
similarity index 100%
rename from marketing/src/containers/WebAppCreative/Pricing/pricing-self-hosted.svg
rename to marketing/src/containers/Pricing/pricing-self-hosted.svg
diff --git a/marketing/src/containers/WebAppCreative/Pricing/pricing-team.svg b/marketing/src/containers/Pricing/pricing-team.svg
similarity index 100%
rename from marketing/src/containers/WebAppCreative/Pricing/pricing-team.svg
rename to marketing/src/containers/Pricing/pricing-team.svg
diff --git a/marketing/src/containers/WebAppCreative/Pricing/pricing-unlimited.svg b/marketing/src/containers/Pricing/pricing-unlimited.svg
similarity index 100%
rename from marketing/src/containers/WebAppCreative/Pricing/pricing-unlimited.svg
rename to marketing/src/containers/Pricing/pricing-unlimited.svg
diff --git a/marketing/src/containers/WebAppCreative/Pricing/pricing.style.tsx b/marketing/src/containers/Pricing/pricing.style.tsx
similarity index 100%
rename from marketing/src/containers/WebAppCreative/Pricing/pricing.style.tsx
rename to marketing/src/containers/Pricing/pricing.style.tsx
diff --git a/marketing/src/containers/WebAppCreative/Testimonials/db.png b/marketing/src/containers/Testimonials/db.png
similarity index 100%
rename from marketing/src/containers/WebAppCreative/Testimonials/db.png
rename to marketing/src/containers/Testimonials/db.png
diff --git a/marketing/src/containers/WebAppCreative/Testimonials/deloitte.png b/marketing/src/containers/Testimonials/deloitte.png
similarity index 100%
rename from marketing/src/containers/WebAppCreative/Testimonials/deloitte.png
rename to marketing/src/containers/Testimonials/deloitte.png
diff --git a/marketing/src/containers/WebAppCreative/Testimonials/delta.png b/marketing/src/containers/Testimonials/delta.png
similarity index 100%
rename from marketing/src/containers/WebAppCreative/Testimonials/delta.png
rename to marketing/src/containers/Testimonials/delta.png
diff --git a/marketing/src/containers/WebAppCreative/Testimonials/expedia.png b/marketing/src/containers/Testimonials/expedia.png
similarity index 100%
rename from marketing/src/containers/WebAppCreative/Testimonials/expedia.png
rename to marketing/src/containers/Testimonials/expedia.png
diff --git a/marketing/src/containers/WebAppCreative/Testimonials/index.tsx b/marketing/src/containers/Testimonials/index.tsx
similarity index 90%
rename from marketing/src/containers/WebAppCreative/Testimonials/index.tsx
rename to marketing/src/containers/Testimonials/index.tsx
index a81a4998a..15f5aaaf6 100755
--- a/marketing/src/containers/WebAppCreative/Testimonials/index.tsx
+++ b/marketing/src/containers/Testimonials/index.tsx
@@ -1,8 +1,8 @@
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 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,
diff --git a/marketing/src/containers/WebAppCreative/Testimonials/siemens.png b/marketing/src/containers/Testimonials/siemens.png
similarity index 100%
rename from marketing/src/containers/WebAppCreative/Testimonials/siemens.png
rename to marketing/src/containers/Testimonials/siemens.png
diff --git a/marketing/src/containers/WebAppCreative/Testimonials/testimonials.style.tsx b/marketing/src/containers/Testimonials/testimonials.style.tsx
similarity index 100%
rename from marketing/src/containers/WebAppCreative/Testimonials/testimonials.style.tsx
rename to marketing/src/containers/Testimonials/testimonials.style.tsx
diff --git a/marketing/src/containers/WebAppCreative/webAppCreative.style.tsx b/marketing/src/containers/webAppCreative.style.tsx
similarity index 94%
rename from marketing/src/containers/WebAppCreative/webAppCreative.style.tsx
rename to marketing/src/containers/webAppCreative.style.tsx
index 1a2755098..22b76232d 100755
--- a/marketing/src/containers/WebAppCreative/webAppCreative.style.tsx
+++ b/marketing/src/containers/webAppCreative.style.tsx
@@ -1,9 +1,9 @@
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';
+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% {
@@ -306,7 +306,8 @@ export const CombinedSection = styled.section`
`;
export const CornerPattern = styled.div`
- background: url(${pattern5?.src}) left top no-repeat, url(${pattern6?.src}) right top no-repeat,
+ 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;
diff --git a/marketing/src/lib/getLegal.ts b/marketing/src/lib/getLegal.ts
new file mode 100644
index 000000000..46a0dbe43
--- /dev/null
+++ b/marketing/src/lib/getLegal.ts
@@ -0,0 +1,38 @@
+import fs from 'fs';
+import { join } from 'path';
+import matter from 'gray-matter';
+
+export type LegalDocumentMetadata = {
+ title: string;
+ slug: string;
+};
+
+export type LegalDocument = LegalDocumentMetadata & {
+ content: string;
+};
+
+const legalDirectory = join(process.cwd(), 'src/common/documents/legal');
+
+export function getPostSlugs() {
+ return fs.readdirSync(legalDirectory);
+}
+
+export function getLegalByName(slug: string): LegalDocument {
+ const realSlug = slug.replace(/\.md$/, '');
+ const fullPath = join(legalDirectory, `${realSlug}.md`);
+ const fileContents = fs.readFileSync(fullPath, 'utf8');
+ const { data, content } = matter(fileContents);
+
+ const document = { ...data, slug: realSlug, content } as LegalDocument;
+
+ return document;
+}
+
+export function getAllLegalDocuments(): LegalDocumentMetadata[] {
+ const slugs = getPostSlugs();
+ const posts = slugs
+ .map(getLegalByName)
+ .map(({ title, slug }) => ({ title, slug }));
+
+ return posts;
+}
diff --git a/marketing/src/lib/mdToHtml.tsx b/marketing/src/lib/mdToHtml.tsx
new file mode 100644
index 000000000..04c416e4e
--- /dev/null
+++ b/marketing/src/lib/mdToHtml.tsx
@@ -0,0 +1,7 @@
+import { remark } from 'remark';
+import html from 'remark-html';
+
+export default async function markdownToHtml(markdown: string) {
+ const result = await remark().use(html).process(markdown);
+ return result.toString();
+}
diff --git a/marketing/src/pages/index.tsx b/marketing/src/pages/index.tsx
index 8ccfa13eb..1019d13fa 100755
--- a/marketing/src/pages/index.tsx
+++ b/marketing/src/pages/index.tsx
@@ -1,76 +1,95 @@
-import React, { Fragment } from 'react';
+import React 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 Banner from '../containers/Banner';
+import Clients from '../containers/Clients';
+import HowItWorks from '../containers/HowItWorks';
+import AnalyticsTool from '../containers/AnalyticsTool';
+import Dashboard from '../containers/Dashboard';
+import Testimonials from '../containers/Testimonials';
+import Integrations from '../containers/Integrations';
+import Pricing from '../containers/Pricing';
+import NewsFeed from '../containers/NewsFeed';
+import Faq from '../containers/Faq';
+import CallToAction from '../containers/CallToAction';
import {
- GlobalStyle,
- ContentWrapper,
CombinedSection,
CornerPattern,
-} from '../containers/WebAppCreative/webAppCreative.style';
-import 'animate.css';
+} from '../containers/webAppCreative.style';
import { serverSideTranslations } from 'next-i18next/serverSideTranslations';
import { useTranslation } from 'next-i18next';
+import { getAllLegalDocuments, LegalDocumentMetadata } from '@/lib/getLegal';
+import { MenuItem } from '@/types';
+import Layout from '@/containers/Layout/Layout';
-const WebAppCreative = () => {
+type HomePageProps = {
+ legals: LegalDocumentMetadata[];
+};
+
+export default function HomePage({ legals }: HomePageProps) {
const { t } = useTranslation();
return (
-
-
-
- {t('SEO.title')}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {/* */}
-
-
-
-
-
- {/* */}
-
-
-
-
-
-
+
+
+ {t('SEO.title')}
+
+
+
+
+
+
+ {/* */}
+
+
+
+
+
+ {/* */}
+
+
+
);
-};
+}
-export const getStaticProps = async ({ locale }: { locale?: string }) => ({
- props: {
- ...(await serverSideTranslations(locale ?? 'en', ['common'])),
+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',
+ },
+];
+
+export async function getStaticProps({ locale }: { locale?: string }) {
+ const legals = getAllLegalDocuments();
-export default WebAppCreative;
+ return {
+ props: {
+ legals,
+ ...(await serverSideTranslations(locale ?? 'en', ['common'])),
+ },
+ };
+}
diff --git a/marketing/src/pages/legal/[slug].tsx b/marketing/src/pages/legal/[slug].tsx
new file mode 100644
index 000000000..fc8b7000a
--- /dev/null
+++ b/marketing/src/pages/legal/[slug].tsx
@@ -0,0 +1,92 @@
+import { useRouter } from 'next/router';
+import ErrorPage from 'next/error';
+import Head from 'next/head';
+import markdownToHtml from '@/lib/mdToHtml';
+import {
+ getAllLegalDocuments,
+ getLegalByName,
+ LegalDocument,
+ LegalDocumentMetadata,
+} from '@/lib/getLegal';
+import Layout from '@/containers/Layout/Layout';
+import { serverSideTranslations } from 'next-i18next/serverSideTranslations';
+import { MenuItem } from '@/types';
+import LegalContent from '@/containers/Legal/LegalContent';
+
+type Props = {
+ document: LegalDocument;
+ legals: LegalDocumentMetadata[];
+};
+
+export const menuItems: MenuItem[] = [
+ {
+ label: 'Nav.home',
+ path: '/',
+ offset: '70',
+ },
+];
+
+export default function Legal({ document, legals }: Props) {
+ const router = useRouter();
+
+ const title = `${document.title} | Retrospected`;
+ if (!router.isFallback && !document) {
+ return ;
+ }
+ return (
+
+
+
+ {title}
+
+
+
+
+ );
+}
+
+type Params = {
+ locale?: string;
+ params: {
+ slug: string;
+ };
+};
+
+export async function getStaticProps({ params, locale }: Params) {
+ const legals = getAllLegalDocuments();
+ const document = getLegalByName(params.slug);
+ const content = await markdownToHtml(document.content || '');
+
+ return {
+ props: {
+ legals,
+ document: {
+ ...document,
+ content,
+ },
+ ...(await serverSideTranslations(locale ?? 'en', ['common'])),
+ },
+ };
+}
+
+export async function getStaticPaths({ locales }: { locales: string[] }) {
+ const posts = getAllLegalDocuments();
+
+ const paths = {
+ paths: locales
+ .map((locale) => {
+ return posts.map((post) => {
+ return {
+ params: {
+ slug: post.slug,
+ },
+ locale,
+ };
+ });
+ })
+ .flat(),
+ fallback: false,
+ };
+
+ return paths;
+}
diff --git a/marketing/src/pages/self-hosting.tsx b/marketing/src/pages/self-hosting.tsx
new file mode 100644
index 000000000..7105f3af0
--- /dev/null
+++ b/marketing/src/pages/self-hosting.tsx
@@ -0,0 +1,43 @@
+import React from 'react';
+import { serverSideTranslations } from 'next-i18next/serverSideTranslations';
+import { useTranslation } from 'next-i18next';
+import AnalyticsTool from '@/containers/AnalyticsTool';
+import { getAllLegalDocuments, LegalDocumentMetadata } from '@/lib/getLegal';
+import Layout from '@/containers/Layout/Layout';
+import { MenuItem } from '@/types';
+import Head from 'next/head';
+
+export default function SelfHostingPage({
+ legals,
+}: {
+ legals: LegalDocumentMetadata[];
+}) {
+ const { t } = useTranslation();
+ return (
+
+
+ {t('SelfHosted.title')}
+
+
+
+ );
+}
+
+export const menuItems: MenuItem[] = [
+ {
+ label: 'Nav.home',
+ path: '/',
+ offset: '70',
+ },
+];
+
+export async function getStaticProps({ locale }: { locale?: string }) {
+ const legals = getAllLegalDocuments();
+
+ return {
+ props: {
+ legals,
+ ...(await serverSideTranslations(locale ?? 'en', ['common'])),
+ },
+ };
+}
diff --git a/marketing/tsconfig.json b/marketing/tsconfig.json
index 39235c560..5651cf8ea 100644
--- a/marketing/tsconfig.json
+++ b/marketing/tsconfig.json
@@ -19,6 +19,6 @@
"@/*": ["./src/*"]
}
},
- "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "src/containers/WebAppCreative/Banner/index.tsx"],
+ "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "src/containers/Banner/index.tsx"],
"exclude": ["node_modules"]
}
diff --git a/marketing/yarn.lock b/marketing/yarn.lock
index 33adcc9ca..cd1bf4237 100644
--- a/marketing/yarn.lock
+++ b/marketing/yarn.lock
@@ -445,6 +445,20 @@
dependencies:
tslib "^2.4.0"
+"@types/debug@^4.0.0":
+ version "4.1.7"
+ resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.7.tgz#7cc0ea761509124709b8b2d1090d8f6c17aadb82"
+ integrity sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==
+ dependencies:
+ "@types/ms" "*"
+
+"@types/hast@^2.0.0":
+ version "2.3.4"
+ resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.4.tgz#8aa5ef92c117d20d974a82bdfb6a648b08c0bafc"
+ integrity sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==
+ dependencies:
+ "@types/unist" "*"
+
"@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"
@@ -458,11 +472,28 @@
resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==
+"@types/mdast@^3.0.0":
+ version "3.0.10"
+ resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.10.tgz#4724244a82a4598884cbbe9bcfd73dff927ee8af"
+ integrity sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==
+ dependencies:
+ "@types/unist" "*"
+
+"@types/ms@*":
+ version "0.7.31"
+ resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197"
+ integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==
+
"@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/parse5@^6.0.0":
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-6.0.3.tgz#705bb349e789efa06f43f128cef51240753424cb"
+ integrity sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==
+
"@types/prop-types@*":
version "15.7.5"
resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf"
@@ -545,6 +576,11 @@
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==
+"@types/unist@*", "@types/unist@^2.0.0":
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d"
+ integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==
+
"@typescript-eslint/parser@^5.42.0":
version "5.52.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.52.0.tgz#73c136df6c0133f1d7870de7131ccf356f5be5a4"
@@ -633,6 +669,13 @@ ansi-styles@^4.1.0:
dependencies:
color-convert "^2.0.1"
+argparse@^1.0.7:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
+ integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
+ dependencies:
+ sprintf-js "~1.0.2"
+
argparse@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
@@ -738,6 +781,11 @@ babel-runtime@^6.26.0:
core-js "^2.4.0"
regenerator-runtime "^0.11.0"
+bail@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/bail/-/bail-2.0.2.tgz#d26f5cd8fe5d6f832a31517b9f7c356040ba6d5d"
+ integrity sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==
+
balanced-match@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
@@ -811,6 +859,11 @@ caniuse-lite@^1.0.30001406:
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001452.tgz#dff7b8bb834b3a91808f0a9ff0453abb1fbba02a"
integrity sha512-Lkp0vFjMkBB3GTpLR8zk4NwW5EdRdnitwYJHDOOKIU85x4ckYCPQ+9WlVvSVClHxVReefkUMtWZH2l9KGlD51w==
+ccount@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5"
+ integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==
+
chalk@^2.0.0:
version "2.4.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
@@ -828,6 +881,21 @@ chalk@^4.0.0:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
+character-entities-html4@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-2.1.0.tgz#1f1adb940c971a4b22ba39ddca6b618dc6e56b2b"
+ integrity sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==
+
+character-entities-legacy@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz#76bc83a90738901d7bc223a9e93759fdd560125b"
+ integrity sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==
+
+character-entities@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-2.0.2.tgz#2d09c2e72cd9523076ccb21157dff66ad43fcc22"
+ integrity sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==
+
chownr@^1.1.1:
version "1.1.4"
resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
@@ -888,6 +956,11 @@ color@^4.2.3:
color-convert "^2.0.1"
color-string "^1.9.0"
+comma-separated-tokens@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee"
+ integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==
+
concat-map@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
@@ -943,13 +1016,20 @@ debug@^3.2.7:
dependencies:
ms "^2.1.1"
-debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4:
+debug@^4.0.0, 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"
+decode-named-character-reference@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz#daabac9690874c394c81e4162a0304b35d824f0e"
+ integrity sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==
+ dependencies:
+ character-entities "^2.0.0"
+
decompress-response@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc"
@@ -1003,11 +1083,21 @@ define-properties@^1.1.3, define-properties@^1.1.4:
has-property-descriptors "^1.0.0"
object-keys "^1.1.1"
+dequal@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be"
+ integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==
+
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==
+diff@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/diff/-/diff-5.1.0.tgz#bc52d298c5ea8df9194800224445ed43ffc87e40"
+ integrity sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==
+
dir-glob@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
@@ -1335,6 +1425,11 @@ espree@^9.4.0:
acorn-jsx "^5.3.2"
eslint-visitor-keys "^3.3.0"
+esprima@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
+ integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
+
esquery@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5"
@@ -1369,6 +1464,18 @@ expand-template@^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==
+extend-shallow@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
+ integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==
+ dependencies:
+ is-extendable "^0.1.0"
+
+extend@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
+ integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
+
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"
@@ -1618,6 +1725,16 @@ grapheme-splitter@^1.0.4:
resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e"
integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==
+gray-matter@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.3.tgz#e893c064825de73ea1f5f7d88c7a9f7274288798"
+ integrity sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==
+ dependencies:
+ js-yaml "^3.13.1"
+ kind-of "^6.0.2"
+ section-matter "^1.0.0"
+ strip-bom-string "^1.0.0"
+
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"
@@ -1664,6 +1781,95 @@ has@^1.0.3:
dependencies:
function-bind "^1.1.1"
+hast-util-from-parse5@^7.0.0:
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-7.1.2.tgz#aecfef73e3ceafdfa4550716443e4eb7b02e22b0"
+ integrity sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw==
+ dependencies:
+ "@types/hast" "^2.0.0"
+ "@types/unist" "^2.0.0"
+ hastscript "^7.0.0"
+ property-information "^6.0.0"
+ vfile "^5.0.0"
+ vfile-location "^4.0.0"
+ web-namespaces "^2.0.0"
+
+hast-util-parse-selector@^3.0.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-3.1.1.tgz#25ab00ae9e75cbc62cf7a901f68a247eade659e2"
+ integrity sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==
+ dependencies:
+ "@types/hast" "^2.0.0"
+
+hast-util-raw@^7.0.0:
+ version "7.2.3"
+ resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-7.2.3.tgz#dcb5b22a22073436dbdc4aa09660a644f4991d99"
+ integrity sha512-RujVQfVsOrxzPOPSzZFiwofMArbQke6DJjnFfceiEbFh7S05CbPt0cYN+A5YeD3pso0JQk6O1aHBnx9+Pm2uqg==
+ dependencies:
+ "@types/hast" "^2.0.0"
+ "@types/parse5" "^6.0.0"
+ hast-util-from-parse5 "^7.0.0"
+ hast-util-to-parse5 "^7.0.0"
+ html-void-elements "^2.0.0"
+ parse5 "^6.0.0"
+ unist-util-position "^4.0.0"
+ unist-util-visit "^4.0.0"
+ vfile "^5.0.0"
+ web-namespaces "^2.0.0"
+ zwitch "^2.0.0"
+
+hast-util-sanitize@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/hast-util-sanitize/-/hast-util-sanitize-4.1.0.tgz#d90f8521f5083547095c5c63a7e03150303e0286"
+ integrity sha512-Hd9tU0ltknMGRDv+d6Ro/4XKzBqQnP/EZrpiTbpFYfXv/uOhWeKc+2uajcbEvAEH98VZd7eII2PiXm13RihnLw==
+ dependencies:
+ "@types/hast" "^2.0.0"
+
+hast-util-to-html@^8.0.0:
+ version "8.0.4"
+ resolved "https://registry.yarnpkg.com/hast-util-to-html/-/hast-util-to-html-8.0.4.tgz#0269ef33fa3f6599b260a8dc94f733b8e39e41fc"
+ integrity sha512-4tpQTUOr9BMjtYyNlt0P50mH7xj0Ks2xpo8M943Vykljf99HW6EzulIoJP1N3eKOSScEHzyzi9dm7/cn0RfGwA==
+ dependencies:
+ "@types/hast" "^2.0.0"
+ "@types/unist" "^2.0.0"
+ ccount "^2.0.0"
+ comma-separated-tokens "^2.0.0"
+ hast-util-raw "^7.0.0"
+ hast-util-whitespace "^2.0.0"
+ html-void-elements "^2.0.0"
+ property-information "^6.0.0"
+ space-separated-tokens "^2.0.0"
+ stringify-entities "^4.0.0"
+ zwitch "^2.0.4"
+
+hast-util-to-parse5@^7.0.0:
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-7.1.0.tgz#c49391bf8f151973e0c9adcd116b561e8daf29f3"
+ integrity sha512-YNRgAJkH2Jky5ySkIqFXTQiaqcAtJyVE+D5lkN6CdtOqrnkLfGYYrEcKuHOJZlp+MwjSwuD3fZuawI+sic/RBw==
+ dependencies:
+ "@types/hast" "^2.0.0"
+ comma-separated-tokens "^2.0.0"
+ property-information "^6.0.0"
+ space-separated-tokens "^2.0.0"
+ web-namespaces "^2.0.0"
+ zwitch "^2.0.0"
+
+hast-util-whitespace@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz#0ec64e257e6fc216c7d14c8a1b74d27d650b4557"
+ integrity sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==
+
+hastscript@^7.0.0:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-7.2.0.tgz#0eafb7afb153d047077fa2a833dc9b7ec604d10b"
+ integrity sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==
+ dependencies:
+ "@types/hast" "^2.0.0"
+ comma-separated-tokens "^2.0.0"
+ hast-util-parse-selector "^3.0.0"
+ property-information "^6.0.0"
+ space-separated-tokens "^2.0.0"
+
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"
@@ -1678,6 +1884,11 @@ html-parse-stringify@^3.0.1:
dependencies:
void-elements "3.1.0"
+html-void-elements@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-2.0.1.tgz#29459b8b05c200b6c5ee98743c41b979d577549f"
+ integrity sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==
+
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"
@@ -1777,6 +1988,11 @@ is-boolean-object@^1.1.0:
call-bind "^1.0.2"
has-tostringtag "^1.0.0"
+is-buffer@^2.0.0:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191"
+ integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==
+
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"
@@ -1801,6 +2017,11 @@ is-docker@^2.0.0, is-docker@^2.1.1:
resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
+is-extendable@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+ integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==
+
is-extglob@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
@@ -1840,6 +2061,11 @@ is-path-inside@^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-plain-obj@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0"
+ integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==
+
is-regex@^1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
@@ -1932,6 +2158,14 @@ js-sdsl@^4.1.4:
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+js-yaml@^3.13.1:
+ version "3.14.1"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"
+ integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==
+ dependencies:
+ argparse "^1.0.7"
+ esprima "^4.0.0"
+
js-yaml@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
@@ -1976,6 +2210,16 @@ json5@^1.0.1:
array-includes "^3.1.5"
object.assign "^4.1.3"
+kind-of@^6.0.0, kind-of@^6.0.2:
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
+ integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
+
+kleur@^4.0.3:
+ version "4.1.5"
+ resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780"
+ integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==
+
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"
@@ -2018,6 +2262,11 @@ lodash@^4.17.11, lodash@^4.17.15:
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
+longest-streak@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-3.1.0.tgz#62fa67cd958742a1574af9f39866364102d90cd4"
+ integrity sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==
+
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"
@@ -2037,11 +2286,276 @@ lru-cache@^6.0.0:
dependencies:
yallist "^4.0.0"
+mdast-util-definitions@^5.0.0:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-5.1.2.tgz#9910abb60ac5d7115d6819b57ae0bcef07a3f7a7"
+ integrity sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==
+ dependencies:
+ "@types/mdast" "^3.0.0"
+ "@types/unist" "^2.0.0"
+ unist-util-visit "^4.0.0"
+
+mdast-util-from-markdown@^1.0.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.0.tgz#0214124154f26154a2b3f9d401155509be45e894"
+ integrity sha512-HN3W1gRIuN/ZW295c7zi7g9lVBllMgZE40RxCX37wrTPWXCWtpvOZdfnuK+1WNpvZje6XuJeI3Wnb4TJEUem+g==
+ dependencies:
+ "@types/mdast" "^3.0.0"
+ "@types/unist" "^2.0.0"
+ decode-named-character-reference "^1.0.0"
+ mdast-util-to-string "^3.1.0"
+ micromark "^3.0.0"
+ micromark-util-decode-numeric-character-reference "^1.0.0"
+ micromark-util-decode-string "^1.0.0"
+ micromark-util-normalize-identifier "^1.0.0"
+ micromark-util-symbol "^1.0.0"
+ micromark-util-types "^1.0.0"
+ unist-util-stringify-position "^3.0.0"
+ uvu "^0.5.0"
+
+mdast-util-phrasing@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/mdast-util-phrasing/-/mdast-util-phrasing-3.0.1.tgz#c7c21d0d435d7fb90956038f02e8702781f95463"
+ integrity sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==
+ dependencies:
+ "@types/mdast" "^3.0.0"
+ unist-util-is "^5.0.0"
+
+mdast-util-to-hast@^12.0.0:
+ version "12.3.0"
+ resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-12.3.0.tgz#045d2825fb04374e59970f5b3f279b5700f6fb49"
+ integrity sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==
+ dependencies:
+ "@types/hast" "^2.0.0"
+ "@types/mdast" "^3.0.0"
+ mdast-util-definitions "^5.0.0"
+ micromark-util-sanitize-uri "^1.1.0"
+ trim-lines "^3.0.0"
+ unist-util-generated "^2.0.0"
+ unist-util-position "^4.0.0"
+ unist-util-visit "^4.0.0"
+
+mdast-util-to-markdown@^1.0.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-1.5.0.tgz#c13343cb3fc98621911d33b5cd42e7d0731171c6"
+ integrity sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==
+ dependencies:
+ "@types/mdast" "^3.0.0"
+ "@types/unist" "^2.0.0"
+ longest-streak "^3.0.0"
+ mdast-util-phrasing "^3.0.0"
+ mdast-util-to-string "^3.0.0"
+ micromark-util-decode-string "^1.0.0"
+ unist-util-visit "^4.0.0"
+ zwitch "^2.0.0"
+
+mdast-util-to-string@^3.0.0, mdast-util-to-string@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-3.1.1.tgz#db859050d79d48cf9896d294de06f3ede7474d16"
+ integrity sha512-tGvhT94e+cVnQt8JWE9/b3cUQZWS732TJxXHktvP+BYo62PpYD53Ls/6cC60rW21dW+txxiM4zMdc6abASvZKA==
+ dependencies:
+ "@types/mdast" "^3.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==
+micromark-core-commonmark@^1.0.1:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-1.0.6.tgz#edff4c72e5993d93724a3c206970f5a15b0585ad"
+ integrity sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==
+ dependencies:
+ decode-named-character-reference "^1.0.0"
+ micromark-factory-destination "^1.0.0"
+ micromark-factory-label "^1.0.0"
+ micromark-factory-space "^1.0.0"
+ micromark-factory-title "^1.0.0"
+ micromark-factory-whitespace "^1.0.0"
+ micromark-util-character "^1.0.0"
+ micromark-util-chunked "^1.0.0"
+ micromark-util-classify-character "^1.0.0"
+ micromark-util-html-tag-name "^1.0.0"
+ micromark-util-normalize-identifier "^1.0.0"
+ micromark-util-resolve-all "^1.0.0"
+ micromark-util-subtokenize "^1.0.0"
+ micromark-util-symbol "^1.0.0"
+ micromark-util-types "^1.0.1"
+ uvu "^0.5.0"
+
+micromark-factory-destination@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz#fef1cb59ad4997c496f887b6977aa3034a5a277e"
+ integrity sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==
+ dependencies:
+ micromark-util-character "^1.0.0"
+ micromark-util-symbol "^1.0.0"
+ micromark-util-types "^1.0.0"
+
+micromark-factory-label@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/micromark-factory-label/-/micromark-factory-label-1.0.2.tgz#6be2551fa8d13542fcbbac478258fb7a20047137"
+ integrity sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg==
+ dependencies:
+ micromark-util-character "^1.0.0"
+ micromark-util-symbol "^1.0.0"
+ micromark-util-types "^1.0.0"
+ uvu "^0.5.0"
+
+micromark-factory-space@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz#cebff49968f2b9616c0fcb239e96685cb9497633"
+ integrity sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==
+ dependencies:
+ micromark-util-character "^1.0.0"
+ micromark-util-types "^1.0.0"
+
+micromark-factory-title@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/micromark-factory-title/-/micromark-factory-title-1.0.2.tgz#7e09287c3748ff1693930f176e1c4a328382494f"
+ integrity sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A==
+ dependencies:
+ micromark-factory-space "^1.0.0"
+ micromark-util-character "^1.0.0"
+ micromark-util-symbol "^1.0.0"
+ micromark-util-types "^1.0.0"
+ uvu "^0.5.0"
+
+micromark-factory-whitespace@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/micromark-factory-whitespace/-/micromark-factory-whitespace-1.0.0.tgz#e991e043ad376c1ba52f4e49858ce0794678621c"
+ integrity sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==
+ dependencies:
+ micromark-factory-space "^1.0.0"
+ micromark-util-character "^1.0.0"
+ micromark-util-symbol "^1.0.0"
+ micromark-util-types "^1.0.0"
+
+micromark-util-character@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-1.1.0.tgz#d97c54d5742a0d9611a68ca0cd4124331f264d86"
+ integrity sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==
+ dependencies:
+ micromark-util-symbol "^1.0.0"
+ micromark-util-types "^1.0.0"
+
+micromark-util-chunked@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-chunked/-/micromark-util-chunked-1.0.0.tgz#5b40d83f3d53b84c4c6bce30ed4257e9a4c79d06"
+ integrity sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==
+ dependencies:
+ micromark-util-symbol "^1.0.0"
+
+micromark-util-classify-character@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-classify-character/-/micromark-util-classify-character-1.0.0.tgz#cbd7b447cb79ee6997dd274a46fc4eb806460a20"
+ integrity sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==
+ dependencies:
+ micromark-util-character "^1.0.0"
+ micromark-util-symbol "^1.0.0"
+ micromark-util-types "^1.0.0"
+
+micromark-util-combine-extensions@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.0.0.tgz#91418e1e74fb893e3628b8d496085639124ff3d5"
+ integrity sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==
+ dependencies:
+ micromark-util-chunked "^1.0.0"
+ micromark-util-types "^1.0.0"
+
+micromark-util-decode-numeric-character-reference@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.0.0.tgz#dcc85f13b5bd93ff8d2868c3dba28039d490b946"
+ integrity sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==
+ dependencies:
+ micromark-util-symbol "^1.0.0"
+
+micromark-util-decode-string@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/micromark-util-decode-string/-/micromark-util-decode-string-1.0.2.tgz#942252ab7a76dec2dbf089cc32505ee2bc3acf02"
+ integrity sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q==
+ dependencies:
+ decode-named-character-reference "^1.0.0"
+ micromark-util-character "^1.0.0"
+ micromark-util-decode-numeric-character-reference "^1.0.0"
+ micromark-util-symbol "^1.0.0"
+
+micromark-util-encode@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-1.0.1.tgz#2c1c22d3800870ad770ece5686ebca5920353383"
+ integrity sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA==
+
+micromark-util-html-tag-name@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.1.0.tgz#eb227118befd51f48858e879b7a419fc0df20497"
+ integrity sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA==
+
+micromark-util-normalize-identifier@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz#4a3539cb8db954bbec5203952bfe8cedadae7828"
+ integrity sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==
+ dependencies:
+ micromark-util-symbol "^1.0.0"
+
+micromark-util-resolve-all@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-resolve-all/-/micromark-util-resolve-all-1.0.0.tgz#a7c363f49a0162e931960c44f3127ab58f031d88"
+ integrity sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==
+ dependencies:
+ micromark-util-types "^1.0.0"
+
+micromark-util-sanitize-uri@^1.0.0, micromark-util-sanitize-uri@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.1.0.tgz#f12e07a85106b902645e0364feb07cf253a85aee"
+ integrity sha512-RoxtuSCX6sUNtxhbmsEFQfWzs8VN7cTctmBPvYivo98xb/kDEoTCtJQX5wyzIYEmk/lvNFTat4hL8oW0KndFpg==
+ dependencies:
+ micromark-util-character "^1.0.0"
+ micromark-util-encode "^1.0.0"
+ micromark-util-symbol "^1.0.0"
+
+micromark-util-subtokenize@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-1.0.2.tgz#ff6f1af6ac836f8bfdbf9b02f40431760ad89105"
+ integrity sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA==
+ dependencies:
+ micromark-util-chunked "^1.0.0"
+ micromark-util-symbol "^1.0.0"
+ micromark-util-types "^1.0.0"
+ uvu "^0.5.0"
+
+micromark-util-symbol@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-1.0.1.tgz#b90344db62042ce454f351cf0bebcc0a6da4920e"
+ integrity sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ==
+
+micromark-util-types@^1.0.0, micromark-util-types@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-1.0.2.tgz#f4220fdb319205812f99c40f8c87a9be83eded20"
+ integrity sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w==
+
+micromark@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/micromark/-/micromark-3.1.0.tgz#eeba0fe0ac1c9aaef675157b52c166f125e89f62"
+ integrity sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==
+ dependencies:
+ "@types/debug" "^4.0.0"
+ debug "^4.0.0"
+ decode-named-character-reference "^1.0.0"
+ micromark-core-commonmark "^1.0.1"
+ micromark-factory-space "^1.0.0"
+ micromark-util-character "^1.0.0"
+ micromark-util-chunked "^1.0.0"
+ micromark-util-combine-extensions "^1.0.0"
+ micromark-util-decode-numeric-character-reference "^1.0.0"
+ micromark-util-encode "^1.0.0"
+ micromark-util-normalize-identifier "^1.0.0"
+ micromark-util-resolve-all "^1.0.0"
+ micromark-util-sanitize-uri "^1.0.0"
+ micromark-util-subtokenize "^1.0.0"
+ micromark-util-symbol "^1.0.0"
+ micromark-util-types "^1.0.1"
+ uvu "^0.5.0"
+
micromatch@^4.0.4:
version "4.0.5"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
@@ -2072,6 +2586,11 @@ mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3:
resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113"
integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==
+mri@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b"
+ integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==
+
ms@2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
@@ -2269,6 +2788,11 @@ parent-module@^1.0.0:
dependencies:
callsites "^3.0.0"
+parse5@^6.0.0:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b"
+ integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==
+
path-exists@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
@@ -2362,6 +2886,11 @@ prop-types@^15.5.0, prop-types@^15.5.10, prop-types@^15.5.8, prop-types@^15.6.0,
object-assign "^4.1.1"
react-is "^16.13.1"
+property-information@^6.0.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.2.0.tgz#b74f522c31c097b5149e3c3cb8d7f3defd986a1d"
+ integrity sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==
+
pump@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
@@ -2587,6 +3116,45 @@ regexpp@^3.2.0:
resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2"
integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==
+remark-html@^15.0.2:
+ version "15.0.2"
+ resolved "https://registry.yarnpkg.com/remark-html/-/remark-html-15.0.2.tgz#44ff77c876f037658b406662b5ce15e26ed34d80"
+ integrity sha512-/CIOI7wzHJzsh48AiuIyIe1clxVkUtreul73zcCXLub0FmnevQE0UMFDQm7NUx8/3rl/4zCshlMfqBdWScQthw==
+ dependencies:
+ "@types/mdast" "^3.0.0"
+ hast-util-sanitize "^4.0.0"
+ hast-util-to-html "^8.0.0"
+ mdast-util-to-hast "^12.0.0"
+ unified "^10.0.0"
+
+remark-parse@^10.0.0:
+ version "10.0.1"
+ resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-10.0.1.tgz#6f60ae53edbf0cf38ea223fe643db64d112e0775"
+ integrity sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==
+ dependencies:
+ "@types/mdast" "^3.0.0"
+ mdast-util-from-markdown "^1.0.0"
+ unified "^10.0.0"
+
+remark-stringify@^10.0.0:
+ version "10.0.2"
+ resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-10.0.2.tgz#50414a6983f5008eb9e72eed05f980582d1f69d7"
+ integrity sha512-6wV3pvbPvHkbNnWB0wdDvVFHOe1hBRAx1Q/5g/EpH4RppAII6J8Gnwe7VbHuXaoKIF6LAg6ExTel/+kNqSQ7lw==
+ dependencies:
+ "@types/mdast" "^3.0.0"
+ mdast-util-to-markdown "^1.0.0"
+ unified "^10.0.0"
+
+remark@^14.0.2:
+ version "14.0.2"
+ resolved "https://registry.yarnpkg.com/remark/-/remark-14.0.2.tgz#4a1833f7441a5c29e44b37bb1843fb820797b40f"
+ integrity sha512-A3ARm2V4BgiRXaUo5K0dRvJ1lbogrbXnhkJRmD0yw092/Yl0kOCZt1k9ZeElEwkZsWGsMumz6qL5MfNJH9nOBA==
+ dependencies:
+ "@types/mdast" "^3.0.0"
+ remark-parse "^10.0.0"
+ remark-stringify "^10.0.0"
+ unified "^10.0.0"
+
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"
@@ -2634,6 +3202,13 @@ run-parallel@^1.1.9:
dependencies:
queue-microtask "^1.2.2"
+sade@^1.7.3:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/sade/-/sade-1.8.1.tgz#0a78e81d658d394887be57d2a409bf703a3b2701"
+ integrity sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==
+ dependencies:
+ mri "^1.1.0"
+
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"
@@ -2655,6 +3230,14 @@ scheduler@^0.23.0:
dependencies:
loose-envify "^1.1.0"
+section-matter@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167"
+ integrity sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==
+ dependencies:
+ extend-shallow "^2.0.1"
+ kind-of "^6.0.0"
+
semver@^6.3.0:
version "6.3.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
@@ -2743,6 +3326,16 @@ source-map-js@^1.0.2:
resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
+space-separated-tokens@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz#1ecd9d2350a3844572c3f4a312bceb018348859f"
+ integrity sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==
+
+sprintf-js@~1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+ integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==
+
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"
@@ -2794,6 +3387,14 @@ string_decoder@^1.1.1:
dependencies:
safe-buffer "~5.2.0"
+stringify-entities@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-4.0.3.tgz#cfabd7039d22ad30f3cc435b0ca2c1574fc88ef8"
+ integrity sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==
+ dependencies:
+ character-entities-html4 "^2.0.0"
+ character-entities-legacy "^3.0.0"
+
strip-ansi@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
@@ -2801,6 +3402,11 @@ strip-ansi@^6.0.1:
dependencies:
ansi-regex "^5.0.1"
+strip-bom-string@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92"
+ integrity sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==
+
strip-bom@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
@@ -2950,6 +3556,16 @@ to-regex-range@^5.0.1:
dependencies:
is-number "^7.0.0"
+trim-lines@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338"
+ integrity sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==
+
+trough@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/trough/-/trough-2.1.0.tgz#0f7b511a4fde65a46f18477ab38849b22c554876"
+ integrity sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==
+
tsconfig-paths@^3.14.1:
version "3.14.1"
resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a"
@@ -3020,6 +3636,60 @@ unbox-primitive@^1.0.2:
has-symbols "^1.0.3"
which-boxed-primitive "^1.0.2"
+unified@^10.0.0:
+ version "10.1.2"
+ resolved "https://registry.yarnpkg.com/unified/-/unified-10.1.2.tgz#b1d64e55dafe1f0b98bb6c719881103ecf6c86df"
+ integrity sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==
+ dependencies:
+ "@types/unist" "^2.0.0"
+ bail "^2.0.0"
+ extend "^3.0.0"
+ is-buffer "^2.0.0"
+ is-plain-obj "^4.0.0"
+ trough "^2.0.0"
+ vfile "^5.0.0"
+
+unist-util-generated@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-2.0.1.tgz#e37c50af35d3ed185ac6ceacb6ca0afb28a85cae"
+ integrity sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==
+
+unist-util-is@^5.0.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-5.2.0.tgz#37eed0617b76c114fd34d44c201aa96fd928b309"
+ integrity sha512-Glt17jWwZeyqrFqOK0pF1Ded5U3yzJnFr8CG1GMjCWTp9zDo2p+cmD6pWbZU8AgM5WU3IzRv6+rBwhzsGh6hBQ==
+
+unist-util-position@^4.0.0:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-4.0.4.tgz#93f6d8c7d6b373d9b825844645877c127455f037"
+ integrity sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==
+ dependencies:
+ "@types/unist" "^2.0.0"
+
+unist-util-stringify-position@^3.0.0:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz#03ad3348210c2d930772d64b489580c13a7db39d"
+ integrity sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==
+ dependencies:
+ "@types/unist" "^2.0.0"
+
+unist-util-visit-parents@^5.1.1:
+ version "5.1.3"
+ resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz#b4520811b0ca34285633785045df7a8d6776cfeb"
+ integrity sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==
+ dependencies:
+ "@types/unist" "^2.0.0"
+ unist-util-is "^5.0.0"
+
+unist-util-visit@^4.0.0:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-4.1.2.tgz#125a42d1eb876283715a3cb5cceaa531828c72e2"
+ integrity sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==
+ dependencies:
+ "@types/unist" "^2.0.0"
+ unist-util-is "^5.0.0"
+ unist-util-visit-parents "^5.1.1"
+
upper-case@^1.1.1:
version "1.1.3"
resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598"
@@ -3037,11 +3707,52 @@ util-deprecate@^1.0.1:
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
+uvu@^0.5.0:
+ version "0.5.6"
+ resolved "https://registry.yarnpkg.com/uvu/-/uvu-0.5.6.tgz#2754ca20bcb0bb59b64e9985e84d2e81058502df"
+ integrity sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==
+ dependencies:
+ dequal "^2.0.0"
+ diff "^5.0.0"
+ kleur "^4.0.3"
+ sade "^1.7.3"
+
+vfile-location@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-4.1.0.tgz#69df82fb9ef0a38d0d02b90dd84620e120050dd0"
+ integrity sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw==
+ dependencies:
+ "@types/unist" "^2.0.0"
+ vfile "^5.0.0"
+
+vfile-message@^3.0.0:
+ version "3.1.4"
+ resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-3.1.4.tgz#15a50816ae7d7c2d1fa87090a7f9f96612b59dea"
+ integrity sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==
+ dependencies:
+ "@types/unist" "^2.0.0"
+ unist-util-stringify-position "^3.0.0"
+
+vfile@^5.0.0:
+ version "5.3.7"
+ resolved "https://registry.yarnpkg.com/vfile/-/vfile-5.3.7.tgz#de0677e6683e3380fafc46544cfe603118826ab7"
+ integrity sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==
+ dependencies:
+ "@types/unist" "^2.0.0"
+ is-buffer "^2.0.0"
+ unist-util-stringify-position "^3.0.0"
+ vfile-message "^3.0.0"
+
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==
+web-namespaces@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-2.0.1.tgz#1010ff7c650eccb2592cebeeaf9a1b253fd40692"
+ integrity sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==
+
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"
@@ -3101,3 +3812,8 @@ 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==
+
+zwitch@^2.0.0, zwitch@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7"
+ integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==
diff --git a/self-hosting/docker-compose.full.yml b/self-hosting/docker-compose.full.yml
index f26984a43..746d7618f 100644
--- a/self-hosting/docker-compose.full.yml
+++ b/self-hosting/docker-compose.full.yml
@@ -139,6 +139,7 @@ services:
SENTRY_URL: '' # Optional, Sentry URL (https://1234567890abcdef12345@sentry.io/1234567)
GIPHY_API_KEY: '' # Optional, can be obtained here: https://developers.giphy.com/
DEFAULT_LANGUAGE: 'en-GB' # Set the default language for new users
+ MARKETING_ROOT: 'https://www.retrospected.com' # URL of the marketing website
# -- Do Not Change --
BACKEND_HOST: backend # This should be the name of the backend service