From c4728e8c20f006d8addc6ea3cdfd3fd41c1f49b1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Patrycja=20Kali=C5=84ska?=
<59940332+patrycjakalinska@users.noreply.github.com>
Date: Mon, 12 Aug 2024 16:41:58 +0200
Subject: [PATCH] docs: Add landing page for React Native Screens (#2240)
This PR adds landing page for React Native Screens with the use of
@swmansion/t-rex-ui component library.
The mobile view right now is done without proper design - let me know
have some ideas on it!
It's open for testing but keep in mind mentioned to-be-fixed things.
- [x] Add favicon
- [x] Add og-image
- [x] Add hero animation
- [x] Add Multiplatform tile animation
- [ ] (optional) Waiting for proper mobile designs
- [x] Bump @swmansion/t-rex-ui to latest
Laptop:
https://github.com/software-mansion/react-native-screens/assets/59940332/486b82cd-e2c6-4e33-b72e-cfc3de44a08c
Mobile:
https://github.com/software-mansion/react-native-screens/assets/59940332/af8cd946-b814-4071-97a8-8650de139312
Animacja na hero:
https://github.com/user-attachments/assets/fe506eb7-098d-4c70-b403-1a70e4374f2b
(cherry picked from commit 23770ad30a147ad6393c2c2ea756fa3174bf0f05)
---
docs/.gitignore | 20 +
docs/README.md | 19 +
docs/babel.config.js | 3 +
docs/docs/intro.md | 0
docs/docusaurus.config.js | 80 +
docs/package.json | 48 +
docs/sidebars.js | 33 +
docs/src/components/Downloads/index.tsx | 24 +
.../components/Downloads/styles.module.css | 63 +
.../src/components/FooterBackground/index.tsx | 12 +
.../FooterBackground/styles.module.css | 75 +
.../Hero/LandingBackground/index.tsx | 15 +
.../Hero/LandingBackground/styles.module.css | 23 +
.../Hero/ScreenSequence/Sequence/index.tsx | 148 +
.../ScreenSequence/Sequence/styles.module.css | 22 +
.../components/Hero/ScreenSequence/index.tsx | 14 +
.../Hero/ScreenSequence/styles.module.css | 38 +
.../src/components/Hero/StartScreen/index.tsx | 31 +
.../Hero/StartScreen/styles.module.css | 106 +
docs/src/components/HomepageButton/index.tsx | 49 +
.../HomepageButton/styles.module.css | 137 +
docs/src/components/LearnMore/index.tsx | 26 +
.../components/LearnMore/styles.module.css | 35 +
.../Overview/Multiplatform/index.tsx | 48 +
.../Overview/Multiplatform/styles.module.css | 61 +
.../Overview/OverviewTile/index.tsx | 34 +
.../Overview/OverviewTile/styles.module.css | 69 +
docs/src/components/Overview/index.tsx | 44 +
.../src/components/Overview/styles.module.css | 22 +
docs/src/components/Sponsors/index.tsx | 34 +
.../src/components/Sponsors/styles.module.css | 39 +
.../TestimonialItem/QuoteIcon/index.tsx | 23 +
.../Testimonials/TestimonialItem/index.tsx | 36 +
.../TestimonialItem/styles.module.css | 111 +
.../Testimonials/TestimonialList/index.tsx | 129 +
.../TestimonialList/styles.module.css | 53 +
docs/src/components/Testimonials/index.tsx | 16 +
.../components/Testimonials/styles.module.css | 53 +
docs/src/css/colors.css | 472 +
docs/src/css/custom.css | 3 +
docs/src/css/overrides.css | 107 +
docs/src/css/typography.css | 179 +
docs/src/hooks/usePageType.tsx | 14 +
docs/src/hooks/useScreenSize.tsx | 32 +
docs/src/pages/index.js | 38 +
docs/src/pages/styles.module.css | 20 +
docs/src/theme/Footer/index.js | 3 +
docs/src/theme/Navbar/index.js | 12 +
docs/src/theme/Root.js | 13 +
docs/src/theme/muiTheme.tsx | 59 +
docs/static/fonts/Aeonik-Bold.otf | Bin 0 -> 119176 bytes
docs/static/fonts/Aeonik-Medium.otf | Bin 0 -> 122080 bytes
docs/static/fonts/Aeonik-Regular.otf | Bin 0 -> 118852 bytes
docs/static/fonts/DMMono-Regular.ttf | Bin 0 -> 48852 bytes
docs/static/img/arrow-right-hero.svg | 4 +
docs/static/img/expo-dark.svg | 14 +
docs/static/img/expo-router.svg | 9 +
docs/static/img/expo.svg | 14 +
docs/static/img/favicon.ico | Bin 0 -> 763 bytes
docs/static/img/github.svg | 3 +
docs/static/img/laptop.svg | 8 +
docs/static/img/logo-dark.svg | 25 +
docs/static/img/logo.svg | 24 +
docs/static/img/og-image.png | Bin 0 -> 49331 bytes
docs/static/img/overview-customisable.png | Bin 0 -> 13441 bytes
docs/static/img/overview-multiplatform.png | Bin 0 -> 9087 bytes
docs/static/img/overview-native.png | Bin 0 -> 18107 bytes
docs/static/img/phone.svg | 5 +
docs/static/img/react-navigation.svg | 3 +
docs/static/img/shopify-dark.svg | 19 +
docs/static/img/shopify.svg | 12 +
docs/static/img/tv.svg | 5 +
docs/static/img/vr.svg | 6 +
docs/yarn.lock | 11555 ++++++++++++++++
74 files changed, 14451 insertions(+)
create mode 100644 docs/.gitignore
create mode 100644 docs/README.md
create mode 100644 docs/babel.config.js
create mode 100644 docs/docs/intro.md
create mode 100644 docs/docusaurus.config.js
create mode 100644 docs/package.json
create mode 100644 docs/sidebars.js
create mode 100644 docs/src/components/Downloads/index.tsx
create mode 100644 docs/src/components/Downloads/styles.module.css
create mode 100644 docs/src/components/FooterBackground/index.tsx
create mode 100644 docs/src/components/FooterBackground/styles.module.css
create mode 100644 docs/src/components/Hero/LandingBackground/index.tsx
create mode 100644 docs/src/components/Hero/LandingBackground/styles.module.css
create mode 100644 docs/src/components/Hero/ScreenSequence/Sequence/index.tsx
create mode 100644 docs/src/components/Hero/ScreenSequence/Sequence/styles.module.css
create mode 100644 docs/src/components/Hero/ScreenSequence/index.tsx
create mode 100644 docs/src/components/Hero/ScreenSequence/styles.module.css
create mode 100644 docs/src/components/Hero/StartScreen/index.tsx
create mode 100644 docs/src/components/Hero/StartScreen/styles.module.css
create mode 100644 docs/src/components/HomepageButton/index.tsx
create mode 100644 docs/src/components/HomepageButton/styles.module.css
create mode 100644 docs/src/components/LearnMore/index.tsx
create mode 100644 docs/src/components/LearnMore/styles.module.css
create mode 100644 docs/src/components/Overview/Multiplatform/index.tsx
create mode 100644 docs/src/components/Overview/Multiplatform/styles.module.css
create mode 100644 docs/src/components/Overview/OverviewTile/index.tsx
create mode 100644 docs/src/components/Overview/OverviewTile/styles.module.css
create mode 100644 docs/src/components/Overview/index.tsx
create mode 100644 docs/src/components/Overview/styles.module.css
create mode 100644 docs/src/components/Sponsors/index.tsx
create mode 100644 docs/src/components/Sponsors/styles.module.css
create mode 100644 docs/src/components/Testimonials/TestimonialItem/QuoteIcon/index.tsx
create mode 100644 docs/src/components/Testimonials/TestimonialItem/index.tsx
create mode 100644 docs/src/components/Testimonials/TestimonialItem/styles.module.css
create mode 100644 docs/src/components/Testimonials/TestimonialList/index.tsx
create mode 100644 docs/src/components/Testimonials/TestimonialList/styles.module.css
create mode 100644 docs/src/components/Testimonials/index.tsx
create mode 100644 docs/src/components/Testimonials/styles.module.css
create mode 100644 docs/src/css/colors.css
create mode 100644 docs/src/css/custom.css
create mode 100644 docs/src/css/overrides.css
create mode 100644 docs/src/css/typography.css
create mode 100644 docs/src/hooks/usePageType.tsx
create mode 100644 docs/src/hooks/useScreenSize.tsx
create mode 100644 docs/src/pages/index.js
create mode 100644 docs/src/pages/styles.module.css
create mode 100644 docs/src/theme/Footer/index.js
create mode 100644 docs/src/theme/Navbar/index.js
create mode 100644 docs/src/theme/Root.js
create mode 100644 docs/src/theme/muiTheme.tsx
create mode 100644 docs/static/fonts/Aeonik-Bold.otf
create mode 100644 docs/static/fonts/Aeonik-Medium.otf
create mode 100644 docs/static/fonts/Aeonik-Regular.otf
create mode 100644 docs/static/fonts/DMMono-Regular.ttf
create mode 100644 docs/static/img/arrow-right-hero.svg
create mode 100644 docs/static/img/expo-dark.svg
create mode 100644 docs/static/img/expo-router.svg
create mode 100644 docs/static/img/expo.svg
create mode 100644 docs/static/img/favicon.ico
create mode 100644 docs/static/img/github.svg
create mode 100644 docs/static/img/laptop.svg
create mode 100644 docs/static/img/logo-dark.svg
create mode 100644 docs/static/img/logo.svg
create mode 100644 docs/static/img/og-image.png
create mode 100644 docs/static/img/overview-customisable.png
create mode 100644 docs/static/img/overview-multiplatform.png
create mode 100644 docs/static/img/overview-native.png
create mode 100644 docs/static/img/phone.svg
create mode 100644 docs/static/img/react-navigation.svg
create mode 100644 docs/static/img/shopify-dark.svg
create mode 100644 docs/static/img/shopify.svg
create mode 100644 docs/static/img/tv.svg
create mode 100644 docs/static/img/vr.svg
create mode 100644 docs/yarn.lock
diff --git a/docs/.gitignore b/docs/.gitignore
new file mode 100644
index 0000000000..b2d6de3062
--- /dev/null
+++ b/docs/.gitignore
@@ -0,0 +1,20 @@
+# Dependencies
+/node_modules
+
+# Production
+/build
+
+# Generated files
+.docusaurus
+.cache-loader
+
+# Misc
+.DS_Store
+.env.local
+.env.development.local
+.env.test.local
+.env.production.local
+
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
diff --git a/docs/README.md b/docs/README.md
new file mode 100644
index 0000000000..4ea010d365
--- /dev/null
+++ b/docs/README.md
@@ -0,0 +1,19 @@
+# Screens Documentation
+
+๐ Landing: [https://docs.swmansion.com/react-native-screens/](https://docs.swmansion.com/react-native-screens/)
+๐ Documentation: [https://reactnavigation.org/docs/native-stack-navigator/](https://reactnavigation.org/docs/native-stack-navigator/)
+
+## How can I help?
+
+Glad you asked! You can help the project in many ways e.g. by:
+
+- _Reading and sharing_ the docs with friends and co-workers
+- _Sending feedback_ in the discussion or issues on GitHub
+- _Submitting PRs_ with fixes and improvements to the docs content and styles
+
+All feedback in all forms ranging from general to tiny fixes is highly appreciated!
+
+## Meet the docs team
+
+- [Balbina Fabia](https://dribbble.com/balbina): design
+- [Patrycja Kaliลska](https://x.com/patkalinska): site development
diff --git a/docs/babel.config.js b/docs/babel.config.js
new file mode 100644
index 0000000000..e00595dae7
--- /dev/null
+++ b/docs/babel.config.js
@@ -0,0 +1,3 @@
+module.exports = {
+ presets: [require.resolve('@docusaurus/core/lib/babel/preset')],
+};
diff --git a/docs/docs/intro.md b/docs/docs/intro.md
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js
new file mode 100644
index 0000000000..97d81ff656
--- /dev/null
+++ b/docs/docusaurus.config.js
@@ -0,0 +1,80 @@
+// @ts-check
+// Note: type annotations allow type checking and IDEs autocompletion
+
+/** @type {import('@docusaurus/types').Config} */
+const config = {
+ title: 'React Native Screens',
+ favicon: 'img/favicon.ico',
+
+ url: 'https://docs.swmansion.com',
+
+ baseUrl: '/react-native-screens/',
+
+ organizationName: 'software-mansion',
+ projectName: 'react-native-screens',
+
+ onBrokenLinks: 'throw',
+ onBrokenMarkdownLinks: 'throw',
+
+ i18n: {
+ defaultLocale: 'en',
+ locales: ['en'],
+ },
+
+ presets: [
+ [
+ 'classic',
+ /** @type {import('@docusaurus/preset-classic').Options} */
+ ({
+ docs: {
+ breadcrumbs: false,
+ sidebarPath: require.resolve('./sidebars.js'),
+ sidebarCollapsible: false,
+ },
+ theme: {
+ customCss: require.resolve('./src/css/custom.css'),
+ },
+ }),
+ ],
+ ],
+
+ themeConfig:
+ /** @type {import('@docusaurus/preset-classic').ThemeConfig} */
+ ({
+ image: 'img/og-image.png',
+ metadata: [
+ { name: 'og:image:width', content: '1200' },
+ { name: 'og:image:height', content: '630' },
+ ],
+ navbar: {
+ hideOnScroll: true,
+ logo: {
+ alt: 'React Native Screens logo',
+ src: 'img/logo.svg',
+ srcDark: 'img/logo-dark.svg',
+ },
+ items: [
+ {
+ to: 'https://reactnavigation.org/docs/7.x/native-stack-navigator/',
+ activeBasePath: 'docs',
+ label: 'Docs',
+ position: 'right',
+ },
+ {
+ href: 'https://github.com/software-mansion/react-native-screens/',
+ position: 'right',
+ className: 'header-github',
+ 'aria-label': 'GitHub repository',
+ },
+ ],
+ },
+ footer: {
+ style: 'light',
+ links: [],
+ copyright:
+ 'All trademarks and copyrights belong to their respective owners.',
+ },
+ }),
+};
+
+module.exports = config;
diff --git a/docs/package.json b/docs/package.json
new file mode 100644
index 0000000000..795c4cfe5d
--- /dev/null
+++ b/docs/package.json
@@ -0,0 +1,48 @@
+{
+ "name": "docs",
+ "version": "0.0.0",
+ "private": true,
+ "scripts": {
+ "docusaurus": "docusaurus",
+ "start": "docusaurus start",
+ "build": "docusaurus build",
+ "swizzle": "docusaurus swizzle",
+ "deploy": "docusaurus deploy",
+ "clear": "docusaurus clear",
+ "serve": "docusaurus serve",
+ "write-translations": "docusaurus write-translations",
+ "write-heading-ids": "docusaurus write-heading-ids"
+ },
+ "dependencies": {
+ "@docusaurus/core": "2.4.3",
+ "@docusaurus/preset-classic": "2.4.3",
+ "@emotion/react": "^11.11.4",
+ "@emotion/styled": "^11.11.5",
+ "@mdx-js/react": "^1.6.22",
+ "@mui/material": "^5.16.0",
+ "@swmansion/t-rex-ui": "^0.0.13",
+ "clsx": "^1.2.1",
+ "prettier": "^2.8.4",
+ "prism-react-renderer": "^1.3.5",
+ "react": "^17.0.2",
+ "react-dom": "^17.0.2"
+ },
+ "devDependencies": {
+ "@docusaurus/module-type-aliases": "2.4.3"
+ },
+ "browserslist": {
+ "production": [
+ ">0.5%",
+ "not dead",
+ "not op_mini all"
+ ],
+ "development": [
+ "last 1 chrome version",
+ "last 1 firefox version",
+ "last 1 safari version"
+ ]
+ },
+ "engines": {
+ "node": ">=16.14"
+ }
+}
diff --git a/docs/sidebars.js b/docs/sidebars.js
new file mode 100644
index 0000000000..ef1bd11a19
--- /dev/null
+++ b/docs/sidebars.js
@@ -0,0 +1,33 @@
+/**
+ * Creating a sidebar enables you to:
+ - create an ordered group of docs
+ - render a sidebar for each doc of that group
+ - provide next/previous navigation
+
+ The sidebars can be generated from the filesystem, or explicitly defined here.
+
+ Create as many sidebars as you want.
+ */
+
+// @ts-check
+
+/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */
+const sidebars = {
+ // By default, Docusaurus generates a sidebar from the docs folder structure
+ tutorialSidebar: [{ type: 'autogenerated', dirName: '.' }],
+
+ // But you can create a sidebar manually
+ /*
+ tutorialSidebar: [
+ 'intro',
+ 'hello',
+ {
+ type: 'category',
+ label: 'Tutorial',
+ items: ['tutorial-basics/create-a-document'],
+ },
+ ],
+ */
+};
+
+module.exports = sidebars;
diff --git a/docs/src/components/Downloads/index.tsx b/docs/src/components/Downloads/index.tsx
new file mode 100644
index 0000000000..f23bd401aa
--- /dev/null
+++ b/docs/src/components/Downloads/index.tsx
@@ -0,0 +1,24 @@
+import React from 'react';
+import styles from './styles.module.css';
+
+const Downloads = () => {
+ return (
+
+
+
+1 000 000 / week
+
+ React Native Screens is directly used in the React Navigation and Expo
+ Router libraries, some of the most popular libraries in the React
+ Native ecosystem. That's why nearly every second project uses React
+ Native Screens in React Native applications.
+
+
+
+
+
+
+
+ );
+};
+
+export default Downloads;
diff --git a/docs/src/components/Downloads/styles.module.css b/docs/src/components/Downloads/styles.module.css
new file mode 100644
index 0000000000..41037d5e7e
--- /dev/null
+++ b/docs/src/components/Downloads/styles.module.css
@@ -0,0 +1,63 @@
+.title {
+ font-size: 48px;
+ font-weight: 700;
+ text-align: center;
+ color: var(--swm-navy-light-100);
+}
+
+.content {
+ font-size: 20px;
+ line-height: 32px;
+ color: var(--swm-navy-light-100);
+ text-align: center;
+ text-wrap: balance;
+}
+
+.brandContainer {
+ display: flex;
+ flex-direction: row;
+ justify-content: center;
+ gap: 4rem;
+}
+
+.brandContainer img {
+ width: 100px;
+ height: auto;
+}
+
+.downloadsWrapper {
+ background-color: var(--swm-blue-light-40);
+ margin: 6.5rem 0;
+}
+
+[data-theme='dark'] .downloadsWrapper {
+ background-color: var(--swm-blue-dark-80);
+}
+
+.downloadsContainer {
+ width: 60%;
+ margin: 5rem auto 7.5rem;
+ position: relative;
+ display: flex;
+ flex-direction: column;
+ gap: 2rem;
+}
+
+@media (max-width: 1440px) {
+ .downloadsContainer {
+ width: 75%;
+ }
+}
+
+@media (max-width: 996px) {
+ .downloadsContainer {
+ width: 85%;
+ gap: 3.5rem;
+ }
+ .title {
+ font-size: 40px;
+ }
+ .brandContainer {
+ gap: 2.5rem;
+ }
+}
diff --git a/docs/src/components/FooterBackground/index.tsx b/docs/src/components/FooterBackground/index.tsx
new file mode 100644
index 0000000000..fca3fb5242
--- /dev/null
+++ b/docs/src/components/FooterBackground/index.tsx
@@ -0,0 +1,12 @@
+import React from 'react';
+import styles from './styles.module.css';
+
+const FooterBackground = () => {
+ return (
+
+ );
+};
+
+export default FooterBackground;
diff --git a/docs/src/components/FooterBackground/styles.module.css b/docs/src/components/FooterBackground/styles.module.css
new file mode 100644
index 0000000000..bc6fa39753
--- /dev/null
+++ b/docs/src/components/FooterBackground/styles.module.css
@@ -0,0 +1,75 @@
+.footerBackground {
+ position: absolute;
+ bottom: 0;
+ left: 0;
+
+ background: linear-gradient(
+ 180deg,
+ var(--swm-white) 0%,
+ rgba(252, 252, 255, 0) 150.5%
+ ),
+ linear-gradient(
+ 180deg,
+ var(--swm-blue-light-40) 35%,
+ var(--swm-blue-light-60) 100%
+ );
+ width: 100%;
+ height: 50vh;
+ overflow: hidden;
+
+ z-index: -100;
+}
+
+.container {
+ position: relative;
+ margin-top: 107px;
+}
+
+footer {
+ margin-top: -107px;
+}
+
+@media (max-width: 996px) {
+ .container {
+ margin-top: 122px;
+ }
+ footer {
+ margin-top: -122px;
+ }
+}
+
+@media (max-width: 700px) {
+ .container {
+ margin-top: 147px;
+ }
+ footer {
+ margin-top: -147px;
+ }
+}
+
+@media (max-width: 375px) {
+ .container {
+ margin-top: 173px;
+ }
+ footer {
+ margin-top: -173px;
+ }
+}
+
+[data-theme='dark'] .footerBackground {
+ background: linear-gradient(
+ 180deg,
+ var(--swm-white) 0%,
+ rgba(252, 252, 255, 0) 150.5%
+ ),
+ linear-gradient(
+ 180deg,
+ var(--swm-blue-dark-120) 35%,
+ var(--swm-navy-dark-140) 100%
+ );
+ background: linear-gradient(
+ 180deg,
+ var(--swm-navy-dark-140) 0%,
+ var(--swm-blue-dark-120) 100%
+ );
+}
diff --git a/docs/src/components/Hero/LandingBackground/index.tsx b/docs/src/components/Hero/LandingBackground/index.tsx
new file mode 100644
index 0000000000..2612fda0ac
--- /dev/null
+++ b/docs/src/components/Hero/LandingBackground/index.tsx
@@ -0,0 +1,15 @@
+import React from 'react';
+import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment';
+import ScreenSequence from '@site/src/components/Hero/ScreenSequence';
+import styles from './styles.module.css';
+
+const LandingBackground = () => {
+ return (
+ <>
+
+ {ExecutionEnvironment.canUseViewport && }
+ >
+ );
+};
+
+export default LandingBackground;
diff --git a/docs/src/components/Hero/LandingBackground/styles.module.css b/docs/src/components/Hero/LandingBackground/styles.module.css
new file mode 100644
index 0000000000..06d77545f6
--- /dev/null
+++ b/docs/src/components/Hero/LandingBackground/styles.module.css
@@ -0,0 +1,23 @@
+.heroBackground {
+ position: absolute;
+ top: 0;
+
+ background: linear-gradient(
+ 180deg,
+ var(--swm-blue-light-40) 0%,
+ var(--swm-blue-light-20) 10%,
+ var(--swm-white) 26%
+ );
+ width: 100%;
+ height: 100vh;
+ overflow: hidden;
+ z-index: -20;
+}
+
+[data-theme='dark'] .heroBackground {
+ background: linear-gradient(
+ 180deg,
+ var(--swm-blue-dark-120) 0%,
+ var(--swm-navy-dark-140) 46%
+ );
+}
diff --git a/docs/src/components/Hero/ScreenSequence/Sequence/index.tsx b/docs/src/components/Hero/ScreenSequence/Sequence/index.tsx
new file mode 100644
index 0000000000..c6fedf8f23
--- /dev/null
+++ b/docs/src/components/Hero/ScreenSequence/Sequence/index.tsx
@@ -0,0 +1,148 @@
+import React, { useState } from 'react';
+import clsx from 'clsx';
+import useScreenSize from '@site/src/hooks/useScreenSize';
+import styles from './styles.module.css';
+
+const SCREENS = [
+ [
+ {
+ fill: '#C1C6E5',
+ d: 'M354.51 5.757c0-4.708 2.839-6.616 6.341-4.262l128.22 86.192c3.502 2.354 6.34 8.08 6.34 12.787v290.783c0 4.708-2.838 6.616-6.34 4.262l-128.22-86.193c-3.502-2.354-6.341-8.079-6.341-12.787V5.757z',
+ },
+ {
+ fill: '#C1C6E5',
+ d: 'M495.411 157.305v-56.831c0-4.708-2.838-10.433-6.34-12.787L360.851 1.495c-3.502-2.354-6.341-.446-6.341 4.262v56.83l140.901 94.718z',
+ },
+ {
+ fill: '#C1C6E5',
+ d: 'M379.982 30.775c.894 1.803.894 3.752 0 4.353l-8.949 6.016 8.949 18.046c.894 1.803.894 3.753 0 4.354-.894.6-2.344-.374-3.238-2.177l-10.568-21.311c-.894-1.804-.894-3.753 0-4.354l10.568-7.104c.894-.6 2.344.374 3.238 2.177z',
+ },
+ ],
+ [
+ {
+ fill: '#919FCF',
+ d: 'M283.608 5.757c0-4.708 2.839-6.616 6.341-4.262l128.22 86.192c3.501 2.354 6.34 8.08 6.34 12.787v290.783c0 4.708-2.839 6.616-6.34 4.262l-128.221-86.193c-3.501-2.354-6.34-8.079-6.34-12.787V5.757z',
+ },
+ {
+ fill: '#919FCF',
+ d: 'M424.508 157.305l.001-56.831c0-4.708-2.839-10.433-6.34-12.787L289.949 1.495c-3.502-2.354-6.341-.446-6.341 4.262l-.001 56.83 140.901 94.718z',
+ },
+ {
+ fill: '#919FCF',
+ d: 'M309.079 30.775c.895 1.803.895 3.752 0 4.353l-8.948 6.016 8.948 18.046c.895 1.803.895 3.753 0 4.354-.894.6-2.344-.374-3.238-2.177l-10.567-21.311c-.894-1.804-.894-3.753 0-4.354l10.567-7.104c.894-.6 2.344.374 3.238 2.177z',
+ },
+ ],
+ [
+ {
+ fill: '#6676AA',
+ d: 'M212.706 5.757c0-4.708 2.839-6.616 6.34-4.262l128.22 86.192c3.502 2.354 6.341 8.08 6.341 12.787v290.783c0 4.708-2.839 6.616-6.341 4.262l-128.22-86.193c-3.502-2.354-6.34-8.079-6.34-12.787V5.757z',
+ },
+ {
+ fill: '#6676AA',
+ d: 'M353.606 157.305l.001-56.831c0-4.708-2.839-10.433-6.341-12.787L219.046 1.495c-3.501-2.354-6.34-.446-6.34 4.262l-.001 56.83 140.901 94.718z',
+ },
+ {
+ fill: '#6676AA',
+ d: 'M238.177 30.775c.894 1.803.894 3.752 0 4.353l-8.949 6.016 8.949 18.046c.894 1.803.894 3.753 0 4.354-.894.6-2.344-.374-3.238-2.177l-10.568-21.311c-.894-1.804-.894-3.753 0-4.354l10.568-7.104c.894-.6 2.344.374 3.238 2.177z',
+ },
+ ],
+ [
+ {
+ fill: '#33488E',
+ d: 'M141.804 5.757c0-4.708 2.839-6.616 6.341-4.262l128.22 86.192c3.502 2.354 6.34 8.08 6.34 12.787v290.783c0 4.708-2.838 6.616-6.34 4.262l-128.22-86.193c-3.502-2.354-6.341-8.079-6.341-12.787V5.757z',
+ },
+ {
+ fill: '#33488E',
+ d: 'M282.705 157.305v-56.831c0-4.708-2.838-10.433-6.34-12.787L148.145 1.495c-3.502-2.354-6.341-.446-6.341 4.262v56.83l140.901 94.718z',
+ },
+ {
+ fill: '#33488E',
+ d: 'M167.276 30.775c.894 1.803.894 3.752 0 4.353l-8.949 6.016 8.949 18.046c.894 1.803.894 3.753 0 4.354-.895.6-2.344-.374-3.238-2.177L153.47 40.056c-.894-1.804-.894-3.753 0-4.354l10.568-7.104c.894-.6 2.343.374 3.238 2.177z',
+ },
+ ],
+ [
+ {
+ fill: '#001A72',
+ d: 'M70.903 5.757c0-4.708 2.839-6.616 6.34-4.262l128.22 86.192c3.502 2.354 6.341 8.08 6.341 12.787v290.783c0 4.708-2.839 6.616-6.341 4.262l-128.22-86.193c-3.501-2.354-6.34-8.079-6.34-12.787V5.757z',
+ },
+ {
+ fill: '#001A72',
+ d: 'M211.803 157.305l.001-56.831c0-4.708-2.839-10.433-6.341-12.787L77.243 1.495c-3.501-2.354-6.34-.446-6.34 4.262v56.83l140.9 94.718z',
+ },
+ {
+ fill: '#001A72',
+ d: 'M96.374 30.775c.894 1.803.894 3.752 0 4.353l-8.948 6.016 8.948 18.046c.894 1.803.894 3.753 0 4.354-.894.6-2.344-.374-3.238-2.177L82.57 40.056c-.895-1.804-.895-3.753 0-4.354l10.567-7.104c.894-.6 2.344.374 3.238 2.177z',
+ },
+ ],
+ [
+ {
+ fill: '#76C7FA',
+ d: 'M0 5.757C0 1.049 2.84-.86 6.342 1.495l128.22 86.192c3.502 2.354 6.341 8.08 6.341 12.787v290.783c0 4.708-2.839 6.616-6.341 4.262L6.341 309.326c-3.502-2.354-6.34-8.079-6.34-12.787V5.757z',
+ },
+ {
+ fill: '#A6DBFC',
+ d: 'M140.901 157.305l.001-56.831c0-4.708-2.839-10.433-6.341-12.787L6.341 1.495C2.84-.86.001 1.049.001 5.757L0 62.587l140.901 94.718z',
+ },
+ {
+ fill: '#1A30AD',
+ d: 'M25.472 30.775c.894 1.803.894 3.752 0 4.353l-8.949 6.016 8.949 18.046c.894 1.803.894 3.753 0 4.354-.894.6-2.344-.374-3.238-2.177L11.666 40.056c-.894-1.804-.894-3.753 0-4.354l10.568-7.104c.894-.6 2.344.374 3.238 2.177z',
+ },
+ ],
+];
+
+const Sequence = () => {
+ const [hoveredIndex, setHoveredIndex] = useState(null);
+ const { windowWidth } = useScreenSize();
+
+ return (
+
+ {SCREENS.map((screen, index) => (
+ setHoveredIndex(index)}
+ onMouseLeave={() => setHoveredIndex(null)}>
+ {screen.map((path, i) => (
+ 996
+ ? 'transparent'
+ : path.fill
+ }
+ stroke={
+ hoveredIndex === index && windowWidth > 996 ? path.fill : 'none'
+ }
+ strokeWidth={hoveredIndex === index ? 2 : 0}
+ d={path.d}
+ />
+ ))}
+
+ ))}
+
+ );
+};
+
+export default Sequence;
diff --git a/docs/src/components/Hero/ScreenSequence/Sequence/styles.module.css b/docs/src/components/Hero/ScreenSequence/Sequence/styles.module.css
new file mode 100644
index 0000000000..1d6f8d436b
--- /dev/null
+++ b/docs/src/components/Hero/ScreenSequence/Sequence/styles.module.css
@@ -0,0 +1,22 @@
+.screenGroup {
+ transition: transform 0.3s ease;
+}
+.hovered {
+ transform: translateY(-2rem);
+ z-index: 1;
+}
+.neighbourHovered {
+ transform: translateY(-1rem);
+}
+.svg {
+ overflow: visible;
+}
+
+@media (max-width: 996px) {
+ .hovered {
+ transform: none;
+ }
+ .neighbourHovered {
+ transform: none;
+ }
+}
diff --git a/docs/src/components/Hero/ScreenSequence/index.tsx b/docs/src/components/Hero/ScreenSequence/index.tsx
new file mode 100644
index 0000000000..b0e18eab0d
--- /dev/null
+++ b/docs/src/components/Hero/ScreenSequence/index.tsx
@@ -0,0 +1,14 @@
+import React from 'react';
+import styles from './styles.module.css';
+import Sequence from '@site/src/components/Hero/ScreenSequence/Sequence';
+import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment';
+
+const ScreenSequence = () => {
+ return (
+
+ {ExecutionEnvironment.canUseViewport && }
+
+ );
+};
+
+export default ScreenSequence;
diff --git a/docs/src/components/Hero/ScreenSequence/styles.module.css b/docs/src/components/Hero/ScreenSequence/styles.module.css
new file mode 100644
index 0000000000..2651a9ebfd
--- /dev/null
+++ b/docs/src/components/Hero/ScreenSequence/styles.module.css
@@ -0,0 +1,38 @@
+.screens {
+ position: absolute;
+ top: 2rem;
+ right: 0;
+ overflow: hidden;
+ min-height: 55%;
+ display: flex;
+ align-items: center;
+}
+
+@media (max-width: 2000px) {
+ .screens {
+ top: 4rem;
+ min-height: 70%;
+ }
+}
+
+@media (max-width: 1350px) {
+ .screens {
+ top: 9rem;
+ min-height: 60%;
+ }
+}
+
+@media (max-width: 996px) {
+ .screens {
+ top: 2rem;
+ }
+}
+
+@media (max-width: 768px) {
+ .screens {
+ position: relative;
+ top: 2rem;
+ display: flex;
+ justify-content: center;
+ }
+}
diff --git a/docs/src/components/Hero/StartScreen/index.tsx b/docs/src/components/Hero/StartScreen/index.tsx
new file mode 100644
index 0000000000..e8d5929055
--- /dev/null
+++ b/docs/src/components/Hero/StartScreen/index.tsx
@@ -0,0 +1,31 @@
+import React from 'react';
+import styles from './styles.module.css';
+import useBaseUrl from '@docusaurus/useBaseUrl';
+import HomepageButton from '@site/src/components/HomepageButton';
+
+const StartScreen = () => {
+ return (
+
+
+
+
+ React Native
+ Screens
+
+
+ Native Navigation primitives for your React Native app.
+
+
+
+
+
+
+
+ );
+};
+
+export default StartScreen;
diff --git a/docs/src/components/Hero/StartScreen/styles.module.css b/docs/src/components/Hero/StartScreen/styles.module.css
new file mode 100644
index 0000000000..6804223a85
--- /dev/null
+++ b/docs/src/components/Hero/StartScreen/styles.module.css
@@ -0,0 +1,106 @@
+.hero {
+ display: flex;
+ flex-direction: column;
+ margin-bottom: 6rem;
+}
+
+.heading {
+ margin-top: 12.25rem;
+}
+
+.headingLabel {
+ display: flex;
+ flex-direction: row;
+ font-family: var(--swm-title-landing-font);
+ font-size: 64px;
+ font-weight: 700;
+ gap: 10px;
+
+ line-height: 1.1;
+ letter-spacing: 0;
+ color: var(--swm-landing-heading);
+}
+
+.headingLabel :nth-child(2) {
+ color: var(--swm-blue-light-80);
+}
+
+[data-theme='dark'] .headingLabel :nth-child(2) {
+ color: var(--swm-blue-dark-80);
+}
+
+@media (max-width: 1350px) {
+ .headingLabel {
+ display: flex;
+ flex-direction: column;
+ }
+}
+
+.subheadingLabel {
+ font-family: var(--swm-h2-font-size);
+ font-size: var(--swm-h2-font-size);
+ font-weight: 400;
+ line-height: 1.15;
+ letter-spacing: var(--swm-heading-letter-spacing-bigger);
+
+ margin-top: 3rem;
+ margin-bottom: 4rem;
+ width: 70%;
+ color: var(--swm-landing-heading);
+ text-wrap: balance;
+}
+
+.buttonContainer {
+ display: flex;
+ justify-content: flex-start;
+}
+
+@media (min-width: 2920px) {
+ .hero {
+ flex-direction: row-reverse;
+ margin-bottom: 0;
+ align-items: center;
+ }
+ .subheadingLabel {
+ width: 100%;
+ }
+ .heading {
+ margin: 0;
+ }
+}
+
+@media (max-width: 996px) {
+ .hero {
+ margin-bottom: 1rem;
+ }
+ .heading {
+ margin-top: 4rem;
+ }
+ .headingLabel {
+ font-size: 48px;
+ }
+ .subheadingLabel {
+ margin: 2rem 0 3.5rem 0;
+ font-size: 26px;
+ width: 70%;
+ }
+}
+
+@media (max-width: 768px) {
+ .subheadingLabel {
+ width: 100%;
+ }
+}
+
+@media (max-width: 420px) {
+ .hero {
+ margin-bottom: 0;
+ }
+ .headingLabel {
+ font-size: 26px;
+ }
+ .subheadingLabel {
+ margin: 1rem 0 2rem 0;
+ font-size: 20px;
+ }
+}
diff --git a/docs/src/components/HomepageButton/index.tsx b/docs/src/components/HomepageButton/index.tsx
new file mode 100644
index 0000000000..a6f985971e
--- /dev/null
+++ b/docs/src/components/HomepageButton/index.tsx
@@ -0,0 +1,49 @@
+import React from 'react';
+import styles from './styles.module.css';
+
+import ArrowRight from '@site/static/img/arrow-right-hero.svg';
+import clsx from 'clsx';
+
+export const ButtonStyling = {
+ TO_NAVY: styles.buttonTransparentStyling,
+ TO_TRANSPARENT: styles.buttonNavyStyling,
+};
+
+export const BorderStyling = {
+ NAVY: styles.buttonNavyBorderStyling,
+ TRANSPARENT: styles.buttonTransparentBorderStyling,
+};
+
+const HomepageButton: React.FC<{
+ title: string;
+ href: string;
+ target?: '_blank' | '_parent' | '_self' | '_top';
+ backgroundStyling?: string;
+ borderStyling?: string;
+ enlarged?: boolean;
+}> = ({
+ title,
+ href,
+ target = '_self',
+ backgroundStyling = ButtonStyling.TO_TRANSPARENT,
+ borderStyling = BorderStyling.NAVY,
+}) => {
+ return (
+
+
+
+ );
+};
+
+export default HomepageButton;
diff --git a/docs/src/components/HomepageButton/styles.module.css b/docs/src/components/HomepageButton/styles.module.css
new file mode 100644
index 0000000000..64377934f8
--- /dev/null
+++ b/docs/src/components/HomepageButton/styles.module.css
@@ -0,0 +1,137 @@
+.homepageButton {
+ height: 60px;
+ padding: 1em 1.5em 1em 1em;
+
+ font-weight: 500;
+ font-size: 20px;
+ text-wrap: nowrap;
+
+ color: var(--swm-off-white);
+ background-color: var(--swm-landing-button);
+
+ cursor: pointer;
+ transition: background-color 0.3s, color 0.3s;
+}
+
+[data-theme='dark'] .homepageButton {
+ color: var(--swm-navy-dark-100);
+}
+
+a.homepageButtonLink:hover {
+ text-decoration: none !important;
+}
+
+.homepageButton {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+@media (max-width: 768px) {
+ .homepageButton,
+ .homepageButtonLink {
+ width: 100%;
+ }
+ .homepageButton {
+ font-size: 18px;
+ }
+}
+
+.homepageButton p {
+ margin: 0 0 2px 0;
+}
+
+.homepageButton svg {
+ stroke-width: 1.5;
+ stroke-linecap: round;
+ stroke-linejoin: round;
+}
+
+.arrow {
+ transition: left 0.3s;
+}
+
+.arrow {
+ left: 8px;
+}
+
+.homepageButton svg {
+ transition: stroke 0.3s;
+}
+
+.homepageButton:hover .arrow {
+ left: 16px;
+}
+
+/* Button - transparent styling */
+
+.buttonTransparentStyling {
+ background-color: transparent;
+ color: var(--swm-landing-button);
+}
+
+[data-theme='dark'] .buttonTransparentStyling {
+ color: var(--swm-off-white);
+}
+
+.buttonTransparentStyling svg {
+ stroke: var(--swm-landing-button);
+}
+
+[data-theme='dark'] .buttonTransparentStyling svg {
+ stroke: var(--swm-off-white);
+}
+
+.buttonTransparentStyling:hover {
+ background-color: var(--swm-landing-button);
+ color: var(--swm-off-white);
+}
+
+.buttonTransparentStyling:hover svg {
+ stroke: var(--swm-off-white);
+}
+
+/* Button - navy styling */
+
+.buttonNavyStyling {
+ background-color: var(--swm-landing-button);
+ color: var(--swm-off-white);
+}
+
+.buttonNavyStyling svg {
+ stroke: var(--swm-off-white);
+}
+[data-theme='dark'] .buttonNavyStyling svg {
+ stroke: var(--swm-navy-dark-100);
+}
+
+.buttonNavyStyling:hover {
+ background-color: transparent;
+ color: var(--swm-landing-button);
+}
+
+.buttonNavyStyling:hover svg {
+ stroke: var(--swm-landing-button);
+}
+
+.buttonNavyBorderStyling {
+ border: 1px solid var(--swm-landing-button);
+}
+
+.buttonTransparentBorderStyling {
+ border: 1px solid var(--swm-landing-button);
+}
+
+[data-theme='dark'] .buttonTransparentBorderStyling {
+ border: 1px solid var(--swm-off-white) !important;
+}
+
+.arrow {
+ position: relative;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+
+ width: 24px;
+ height: 24px;
+}
diff --git a/docs/src/components/LearnMore/index.tsx b/docs/src/components/LearnMore/index.tsx
new file mode 100644
index 0000000000..737fbd0f81
--- /dev/null
+++ b/docs/src/components/LearnMore/index.tsx
@@ -0,0 +1,26 @@
+import React from 'react';
+import styles from './styles.module.css';
+import HomepageButton, {
+ ButtonStyling,
+ BorderStyling,
+} from '@site/src/components/HomepageButton';
+
+const LearnMore = () => {
+ return (
+
+
+
React Native Screens is the first library migrated to Fabric!
+
Learn more about the new architecture in React Native Screens.
+
+
+
+ );
+};
+
+export default LearnMore;
diff --git a/docs/src/components/LearnMore/styles.module.css b/docs/src/components/LearnMore/styles.module.css
new file mode 100644
index 0000000000..05b3ae793a
--- /dev/null
+++ b/docs/src/components/LearnMore/styles.module.css
@@ -0,0 +1,35 @@
+.learnMoreContainer {
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+}
+
+.learnMoreContent {
+ display: flex;
+ flex-direction: column;
+ gap: 0.5rem;
+ width: 75%;
+ text-wrap: balance;
+}
+
+.learnMoreContent > h4 {
+ font-weight: 500;
+ font-size: 24px;
+}
+
+.learnMoreContent > p {
+ font-size: 20px;
+ font-weight: 400;
+}
+
+@media (max-width: 996px) {
+ .learnMoreContainer {
+ flex-direction: column;
+ }
+
+ .learnMoreContent {
+ width: 100%;
+ align-items: center;
+ margin-bottom: 0.5rem;
+ }
+}
diff --git a/docs/src/components/Overview/Multiplatform/index.tsx b/docs/src/components/Overview/Multiplatform/index.tsx
new file mode 100644
index 0000000000..88c5708f5d
--- /dev/null
+++ b/docs/src/components/Overview/Multiplatform/index.tsx
@@ -0,0 +1,48 @@
+import React from 'react';
+import styles from './styles.module.css';
+import VR from '@site/static/img/vr.svg';
+import TV from '@site/static/img/TV.svg';
+import Phone from '@site/static/img/phone.svg';
+import Laptop from '@site/static/img/laptop.svg';
+
+const MultiplatformCarousel = () => {
+ return (
+
+ );
+};
+
+export default MultiplatformCarousel;
diff --git a/docs/src/components/Overview/Multiplatform/styles.module.css b/docs/src/components/Overview/Multiplatform/styles.module.css
new file mode 100644
index 0000000000..2dfd0d49fb
--- /dev/null
+++ b/docs/src/components/Overview/Multiplatform/styles.module.css
@@ -0,0 +1,61 @@
+.multiplatformContainer {
+ background-color: var(--swm-navy-dark-40);
+ border-radius: 16px;
+ /* height and width of other media */
+ padding: 3.5rem 0;
+ position: relative;
+ overflow: hidden;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+
+.marquee {
+ position: relative;
+ display: flex;
+ overflow: hidden;
+ gap: 3rem;
+}
+
+.content {
+ flex-shrink: 0;
+ display: flex;
+ justify-content: space-around;
+ gap: 3rem;
+ min-width: 100%;
+ padding: 0;
+ margin-bottom: 0;
+}
+
+.content svg {
+ width: 100%;
+ object-fit: contain;
+}
+
+.marqueeItem {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+
+@keyframes marquee {
+ 0% {
+ transform: translateX(0);
+ }
+ 100% {
+ /* we need to do full full translate minus gap */
+ transform: translateX(calc(-100% - 3rem));
+ }
+}
+
+.animation .content {
+ animation: marquee 15s linear infinite;
+}
+
+@media (max-width: 500px) {
+ .multiplatformContainer {
+ width: 100%;
+ height: 350px;
+ padding: 1rem 0;
+ }
+}
diff --git a/docs/src/components/Overview/OverviewTile/index.tsx b/docs/src/components/Overview/OverviewTile/index.tsx
new file mode 100644
index 0000000000..c37f5b4570
--- /dev/null
+++ b/docs/src/components/Overview/OverviewTile/index.tsx
@@ -0,0 +1,34 @@
+import React from 'react';
+import clsx from 'clsx';
+import styles from './styles.module.css';
+import MultiplatformCarousel from '@site/src/components/Overview/Multiplatform';
+
+interface OverviewProps {
+ title: string;
+ content: string;
+ src?: string;
+ reversed?: boolean;
+ multiplatform?: boolean;
+}
+
+const OverviewTile = ({
+ title,
+ content,
+ src,
+ reversed = false,
+ multiplatform = false,
+}: OverviewProps) => {
+ return (
+
+
+
+ {!multiplatform ?
:
}
+
+
+ );
+};
+
+export default OverviewTile;
diff --git a/docs/src/components/Overview/OverviewTile/styles.module.css b/docs/src/components/Overview/OverviewTile/styles.module.css
new file mode 100644
index 0000000000..6fc246d550
--- /dev/null
+++ b/docs/src/components/Overview/OverviewTile/styles.module.css
@@ -0,0 +1,69 @@
+.overviewTile {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ column-gap: 1.5rem;
+ align-items: center;
+}
+
+.tileReversed {
+ grid-template-columns: 1fr 1fr;
+}
+
+@media (min-width: 2000px) {
+ .overviewTile {
+ column-gap: 6rem;
+ }
+}
+
+.contentContainer {
+ grid-column: 1;
+}
+
+.contentContainer h3 {
+ margin-bottom: 1rem;
+}
+
+.imageContainer {
+ grid-column: 2;
+
+ max-width: 456px;
+ max-height: 345px;
+}
+
+.tileReversed .contentContainer {
+ grid-column: 2;
+}
+
+.tileReversed .imageContainer {
+ grid-column: 1;
+ grid-row: 1;
+}
+
+.contentContainer h3 {
+ font-size: 32px;
+ line-height: 36px;
+ font-weight: 500;
+}
+
+.contentContainer p {
+ font-size: 20px;
+ text-wrap: balance;
+}
+
+@media (max-width: 996px) {
+ .overviewTile {
+ display: flex;
+ flex-direction: column;
+ }
+ .imageContainer {
+ display: flex;
+ justify-content: center;
+ }
+ .contentContainer h3 {
+ font-size: 24px;
+ }
+ .contentContainer p {
+ font-size: 18px;
+ margin-bottom: 2rem;
+ }
+}
diff --git a/docs/src/components/Overview/index.tsx b/docs/src/components/Overview/index.tsx
new file mode 100644
index 0000000000..62591e9db0
--- /dev/null
+++ b/docs/src/components/Overview/index.tsx
@@ -0,0 +1,44 @@
+import React from 'react';
+import OverviewTile from '@site/src/components/Overview/OverviewTile';
+import styles from './styles.module.css';
+
+const TILES = [
+ {
+ title: 'Truly native',
+ content:
+ 'This navigator uses the native APIs and "Fragment" on Android so that navigation will behave exactly the same and have the same performance characteristics as apps built natively on top of those APIs.',
+ src: 'img/overview-native.png',
+ },
+ {
+ title: 'Customisable',
+ content:
+ 'You can freely change the appearance of the defined paths. Choosing the orientation, animation of the transit, or even the type of presentation - you are one property away from changing what you want.',
+ src: 'img/overview-customisable.png',
+ reversed: true,
+ },
+ {
+ title: 'Multiplatform',
+ content:
+ 'Forget about being limited to the chosen platform. With React Native Screens, you can freely navigate between screens on iOS, Android, Web, tvOS, Windows or Vision Pro.',
+ multiplatform: true,
+ },
+];
+
+const Overview = () => {
+ return (
+
+
What does it do?
+ {TILES.map(tile => (
+
+ ))}
+
+ );
+};
+
+export default Overview;
diff --git a/docs/src/components/Overview/styles.module.css b/docs/src/components/Overview/styles.module.css
new file mode 100644
index 0000000000..8019b25f07
--- /dev/null
+++ b/docs/src/components/Overview/styles.module.css
@@ -0,0 +1,22 @@
+.title {
+ font-size: 48px;
+ font-weight: 700;
+ line-height: 56px;
+}
+
+.overviewContainer {
+ display: grid;
+ grid-template-columns: 1fr;
+ gap: 6.5rem;
+}
+
+@media (max-width: 996px) {
+ .overviewContainer {
+ display: flex !important;
+ flex-direction: column;
+ gap: 3.5rem;
+ }
+ .title {
+ font-size: 40px;
+ }
+}
diff --git a/docs/src/components/Sponsors/index.tsx b/docs/src/components/Sponsors/index.tsx
new file mode 100644
index 0000000000..e2fd54f71d
--- /dev/null
+++ b/docs/src/components/Sponsors/index.tsx
@@ -0,0 +1,34 @@
+import React from 'react';
+import styles from './styles.module.css';
+
+import ThemedImage from '@theme/ThemedImage';
+import useBaseUrl from '@docusaurus/useBaseUrl';
+import usePageType from '@site/src/hooks/usePageType';
+
+const Sponsors = () => {
+ const sponsorsLogos = {
+ expo: {
+ light: useBaseUrl('img/expo.svg'),
+ dark: useBaseUrl('img/expo-dark.svg'),
+ },
+ shopify: {
+ light: useBaseUrl('img/shopify.svg'),
+ dark: useBaseUrl('img/shopify-dark.svg'),
+ },
+ };
+
+ return (
+
+ );
+};
+
+export default Sponsors;
diff --git a/docs/src/components/Sponsors/styles.module.css b/docs/src/components/Sponsors/styles.module.css
new file mode 100644
index 0000000000..8beabb9c8f
--- /dev/null
+++ b/docs/src/components/Sponsors/styles.module.css
@@ -0,0 +1,39 @@
+.sponsorsTitle {
+ font-size: 48px;
+ margin-bottom: 4rem;
+ text-align: center;
+}
+
+.sponsorsBrand {
+ margin-top: 5rem;
+ display: flex;
+ justify-content: center;
+ gap: 4rem;
+}
+
+@media (max-width: 996px) {
+ .sponsorsTitle {
+ font-size: 40px;
+ }
+ .sponsorsBrand {
+ margin: 2.5rem auto 5.5rem;
+ gap: 3rem;
+ }
+ .sponsor {
+ width: 170px;
+ height: auto;
+ }
+}
+
+@media (max-width: 420px) {
+ .sponsorsTitle {
+ font-size: 24px;
+ }
+ .sponsorsBrand {
+ gap: 2.5rem;
+ }
+ .sponsor {
+ width: 120px;
+ height: auto;
+ }
+}
diff --git a/docs/src/components/Testimonials/TestimonialItem/QuoteIcon/index.tsx b/docs/src/components/Testimonials/TestimonialItem/QuoteIcon/index.tsx
new file mode 100644
index 0000000000..95bd060fbb
--- /dev/null
+++ b/docs/src/components/Testimonials/TestimonialItem/QuoteIcon/index.tsx
@@ -0,0 +1,23 @@
+import React from 'react';
+
+interface Props {
+ color: string;
+ className?: string;
+}
+function QuoteIcon({ color, className }: Props) {
+ return (
+
+
+
+ );
+}
+
+export default QuoteIcon;
diff --git a/docs/src/components/Testimonials/TestimonialItem/index.tsx b/docs/src/components/Testimonials/TestimonialItem/index.tsx
new file mode 100644
index 0000000000..ad869248ea
--- /dev/null
+++ b/docs/src/components/Testimonials/TestimonialItem/index.tsx
@@ -0,0 +1,36 @@
+import React, { PropsWithChildren } from 'react';
+import clsx from 'clsx';
+import styles from './styles.module.css';
+import QuoteIcon from './QuoteIcon';
+import { useColorMode } from '@docusaurus/theme-common';
+
+interface ImageProps {
+ alt: string;
+ src: string;
+}
+interface Props extends PropsWithChildren {
+ author: string;
+ company?: string;
+ link: string;
+ image: ImageProps;
+}
+
+const TestimonialItem = ({ author, company, image, link, children }: Props) => {
+ return (
+
+
+
+
+
+
+
+
{author}
+ {company}
+
+
+ โ{children}โ
+
+ );
+};
+
+export default TestimonialItem;
diff --git a/docs/src/components/Testimonials/TestimonialItem/styles.module.css b/docs/src/components/Testimonials/TestimonialItem/styles.module.css
new file mode 100644
index 0000000000..80a64f7f57
--- /dev/null
+++ b/docs/src/components/Testimonials/TestimonialItem/styles.module.css
@@ -0,0 +1,111 @@
+.testimonialItem {
+ background-color: var(--swm-off-white);
+ box-shadow: -12px 12px 0px var(--swm-navy-light-60);
+ padding: 1.5em;
+ position: relative;
+ width: 100%;
+ display: flex;
+ gap: 1rem;
+ flex-direction: column;
+ /* max width of tile minus gap of parent */
+ max-width: calc(50% - 3.5rem / 2);
+ transition: 0.2s ease-in-out;
+}
+
+@media (max-width: 996px) {
+ .testimonialItem {
+ max-width: 100%;
+ min-height: 0;
+ }
+}
+.testimonialItem:hover {
+ text-decoration: none;
+ background-color: var(--swm-navy-light-10);
+ box-shadow: -12px 12px 0px var(--swm-navy-light-80);
+}
+
+.testimonialItem:hover .testimonialAuthorPhoto {
+ background-color: black;
+}
+.testimonialItem:hover .testimonialAuthorPhoto > img {
+ opacity: 0.8;
+}
+
+.testimonialBody {
+ margin: 0;
+}
+
+.quoteIcon {
+ position: absolute;
+ right: 0;
+ top: 0;
+ transform: translate(10%, -20%);
+}
+
+@media (max-width: 420px) {
+ .quoteIcon {
+ scale: 0.8;
+ transform: translate(30%, -40%);
+ }
+}
+
+[data-theme='dark'] .testimonialItem {
+ background-color: var(--swm-navy-light-10);
+}
+[data-theme='dark'] .testimonialItem:hover {
+ background-color: var(--swm-navy-dark-20);
+}
+
+[data-theme='dark'] .testimonialAuthorName,
+[data-theme='dark'] .testimonialBody {
+ color: var(--swm-navy-light-100);
+}
+
+.testimonialAuthor {
+ display: flex;
+ flex-direction: row;
+ gap: 1rem;
+}
+
+.testimonialAuthorInfo {
+ display: flex;
+ flex-direction: column;
+ gap: 0.5rem;
+}
+
+.testimonialAuthorName {
+ font-size: 20px;
+ font-weight: 600;
+}
+
+.testimonialAuthorPhoto {
+ flex-shrink: 0;
+ background-color: black;
+}
+
+.testimonialAuthorPhoto,
+.testimonialAuthorPhoto > img {
+ border-radius: 50%;
+ width: 4rem;
+ height: 4rem;
+}
+
+.testimonialAuthorPhoto > img {
+ object-fit: cover;
+ opacity: 1;
+ transition: 0.2s ease-in-out;
+ object-position: top center;
+}
+
+.testimonialCompany {
+ font-weight: 500;
+ font-size: 14px;
+ color: var(--swm-navy-light-60);
+ text-transform: uppercase;
+}
+
+@media (max-width: 420px) {
+ .featureTitle {
+ font-size: 20px;
+ }
+}
diff --git a/docs/src/components/Testimonials/TestimonialList/index.tsx b/docs/src/components/Testimonials/TestimonialList/index.tsx
new file mode 100644
index 0000000000..2a008f021c
--- /dev/null
+++ b/docs/src/components/Testimonials/TestimonialList/index.tsx
@@ -0,0 +1,129 @@
+import React, { useState, useEffect } from 'react';
+import clsx from 'clsx';
+import styles from './styles.module.css';
+import TestimonialItem from '@site/src/components/Testimonials/TestimonialItem';
+
+const items = [
+ {
+ author: 'Test author',
+ company: 'Test',
+ body: 'Screens are the best ever and ever - I love using it!',
+ link: 'https://test.com/',
+ image: {
+ alt: 'test',
+ src: '/img/logo.svg',
+ },
+ },
+ {
+ author: 'Test author',
+ company: 'Test',
+ body: 'Screens are the best ever and ever - I love using it!',
+ link: 'https://test.com/',
+ image: {
+ alt: 'test',
+ src: '/img/logo.svg',
+ },
+ },
+ {
+ author: 'Test author',
+ company: 'Test',
+ body: 'Screens are the best ever and ever - I love using it!',
+ link: 'https://test.com/',
+ image: {
+ alt: 'test',
+ src: '/img/logo.svg',
+ },
+ },
+];
+
+const TestimonialList = () => {
+ const [activeIndex, setActiveIndex] = useState(0);
+
+ useEffect(() => {
+ const updateHeight = () => {
+ const testimonialContainer = document.querySelector(
+ `.testimonialContainer-${activeIndex}`
+ );
+ const testimonialSlides =
+ document.querySelector('.testimonialSlides');
+ if (
+ testimonialContainer.childElementCount === 1 &&
+ testimonialSlides.offsetHeight > testimonialContainer.offsetHeight
+ ) {
+ return;
+ }
+ testimonialSlides.style.height = `${testimonialContainer.offsetHeight}px`;
+ };
+
+ updateHeight();
+
+ window.addEventListener('resize', updateHeight);
+ return () => {
+ window.removeEventListener('resize', updateHeight);
+ };
+ }, [activeIndex]);
+
+ const handleDotClick = index => {
+ setActiveIndex(index);
+ };
+
+ const renderedItems = [];
+ for (let i = 0; i < items.length; i += 2) {
+ renderedItems.push(
+
+
+ {items[i].body}
+
+ {i + 1 < items.length && (
+
+ {items[i + 1].body}
+
+ )}
+
+ );
+ }
+
+ return (
+
+
+ {renderedItems.map((item, idx) => (
+
+ {item}
+
+ ))}
+
+
+ {renderedItems.map((_, idx) => (
+ handleDotClick(idx)}
+ />
+ ))}
+
+
+ );
+};
+
+export default TestimonialList;
diff --git a/docs/src/components/Testimonials/TestimonialList/styles.module.css b/docs/src/components/Testimonials/TestimonialList/styles.module.css
new file mode 100644
index 0000000000..e5d98b5678
--- /dev/null
+++ b/docs/src/components/Testimonials/TestimonialList/styles.module.css
@@ -0,0 +1,53 @@
+.testimonialSlides {
+ display: flex;
+ flex-direction: column;
+}
+
+.testimonialSlide {
+ opacity: 0;
+ visibility: hidden;
+ transition: visibility 0.4s, opacity 0.4s ease-in-out;
+}
+
+.activeTestimonialSlide {
+ visibility: visible !important;
+ opacity: 1 !important;
+}
+
+.testimonialPair {
+ position: absolute;
+ display: flex;
+ flex-direction: row;
+ gap: 3.5rem;
+ width: 100%;
+}
+
+.dotsContainer {
+ display: flex;
+ flex-direction: row;
+ gap: 1.5rem;
+ width: 100%;
+ margin-top: 2.5rem;
+ justify-content: center;
+}
+
+.dot {
+ cursor: pointer;
+ height: 12px;
+ width: 12px;
+ background-color: var(--swm-navy-light-transparent);
+ border-radius: 50%;
+ display: inline-block;
+ transition: background-color 0.4s ease;
+}
+
+.activeDot,
+.dot:hover {
+ background-color: var(--swm-navy-light-100);
+}
+
+@media (max-width: 996px) {
+ .testimonialPair {
+ flex-direction: column;
+ }
+}
diff --git a/docs/src/components/Testimonials/index.tsx b/docs/src/components/Testimonials/index.tsx
new file mode 100644
index 0000000000..169c2e72aa
--- /dev/null
+++ b/docs/src/components/Testimonials/index.tsx
@@ -0,0 +1,16 @@
+import React from 'react';
+import styles from './styles.module.css';
+import TestimonialList from '@site/src/components/Testimonials/TestimonialList';
+
+const Testimonals = () => {
+ return (
+
+ );
+};
+
+export default Testimonals;
diff --git a/docs/src/components/Testimonials/styles.module.css b/docs/src/components/Testimonials/styles.module.css
new file mode 100644
index 0000000000..69e4be7862
--- /dev/null
+++ b/docs/src/components/Testimonials/styles.module.css
@@ -0,0 +1,53 @@
+.title {
+ font-size: var(--swm-h2-font-size);
+}
+
+@media (max-width: 768px) {
+ .testimonialsContainer {
+ gap: 1.5rem;
+ }
+}
+
+@media (max-width: 420px) {
+ .title {
+ font-size: 24px;
+ }
+}
+
+.testimonialsWrapper {
+ background-color: var(--swm-blue-light-40);
+ margin: 6.5rem 0;
+}
+
+[data-theme='dark'] .testimonialsWrapper {
+ background-color: var(--swm-blue-dark-80);
+}
+
+[data-theme='dark'] .title {
+ color: var(--swm-navy-light-100);
+}
+
+.testimonialsContainer {
+ width: 60%;
+ margin: 5rem auto 7.5rem;
+ position: relative;
+ display: flex;
+ flex-direction: column;
+ gap: 6.5rem;
+}
+
+@media (max-width: 1440px) {
+ .testimonialsContainer {
+ width: 75%;
+ }
+}
+
+@media (max-width: 996px) {
+ .testimonialsContainer {
+ width: 85%;
+ gap: 3.5rem;
+ }
+ .testimonialsWrapper {
+ margin: 3.5rem 0;
+ }
+}
diff --git a/docs/src/css/colors.css b/docs/src/css/colors.css
new file mode 100644
index 0000000000..39317a46f8
--- /dev/null
+++ b/docs/src/css/colors.css
@@ -0,0 +1,472 @@
+:root {
+ --swm-navy-light-100: #001a72;
+ --swm-navy-light-80: #33488e;
+ --swm-navy-light-60: #6676aa;
+ --swm-navy-light-40: #919fcf;
+ --swm-navy-light-20: #c1c6e5;
+ --swm-navy-light-10: #eef0ff;
+ --swm-navy-light-transparent: #33488e40;
+
+ --swm-navy-dark-140: #1b2445;
+ --swm-navy-dark-120: #122154;
+ --swm-navy-dark-100: #001a72;
+ --swm-navy-dark-80: #0a2688;
+ --swm-navy-dark-70: #33488e;
+ --swm-navy-dark-60: #7485bd;
+ --swm-navy-dark-40: #abbcf5;
+ --swm-navy-dark-20: #c1c6e5;
+
+ --swm-purple-light-100: #782aeb;
+ --swm-purple-light-80: #b58df1;
+ --swm-purple-light-60: #d1bbf3;
+ --swm-purple-light-40: #e8dafc;
+ --swm-purple-light-20: #f5eeff;
+ --swm-purple-light-transparent: #f5eeff40;
+
+ --swm-purple-dark-140: #473d68;
+ --swm-purple-dark-120: #6a539a;
+ --swm-purple-dark-100: #b07eff;
+ --swm-purple-dark-80: #c49ffe;
+ --swm-purple-dark-60: #d0b2ff;
+ --swm-purple-dark-40: #e9dbff;
+ --swm-purple-dark-transparent: #473d6840;
+
+ --swm-blue-light-100: #38acdd;
+ --swm-blue-light-80: #5bb9e0;
+ --swm-blue-light-60: #87cce8;
+ --swm-blue-light-40: #b5e1f1;
+ --swm-blue-light-20: #e1f3fa;
+
+ --swm-blue-dark-140: #1b4865;
+ --swm-blue-dark-120: #126893;
+ --swm-blue-dark-100: #00a9f0;
+ --swm-blue-dark-80: #6fcef5;
+ --swm-blue-dark-60: #a8dbf0;
+ --swm-blue-dark-40: #d7f0fa;
+
+ --swm-green-light-100: #57b495;
+ --swm-green-light-80: #82cab2;
+ --swm-green-light-60: #b1dfd0;
+ --swm-green-light-40: #dff2ec;
+ --swm-green-light-20: #ebfcf7;
+
+ --swm-green-dark-140: #2a4f4a;
+ --swm-green-dark-120: #31775d;
+ --swm-green-dark-100: #3fc684;
+ --swm-green-dark-80: #7adead;
+ --swm-green-dark-60: #a0dfc0;
+ --swm-green-dark-40: #d3f5e4;
+
+ --swm-red-light-100: #ff6259;
+ --swm-red-light-80: #fa7f7c;
+ --swm-red-light-60: #ffa3a1;
+ --swm-red-light-40: #ffd2d7;
+ --swm-red-light-20: #ffedf0;
+
+ --swm-red-dark-140: #5a3b46;
+ --swm-red-dark-120: #914f55;
+ --swm-red-dark-110: #c86364;
+ --swm-red-dark-100: #ff7774;
+ --swm-red-dark-80: #ff8b88;
+ --swm-red-dark-60: #ffb4b2;
+ --swm-red-dark-40: #ffdcdb;
+
+ --swm-yellow-light-100: #ffd61e;
+ --swm-yellow-light-80: #ffe04b;
+ --swm-yellow-light-60: #ffe780;
+ --swm-yellow-light-40: #fff1b2;
+ --swm-yellow-light-20: #fffae1;
+
+ --swm-yellow-dark-140: #5a553a;
+ --swm-yellow-dark-120: #91823d;
+ --swm-yellow-dark-100: #ffdd44;
+ --swm-yellow-dark-80: #ffe678;
+ --swm-yellow-dark-60: #fff1b2;
+ --swm-yellow-dark-40: #fff9db;
+
+ /* Black & White palette, mainly for background settings */
+ --swm-off-white: #f8f9ff;
+ --swm-white: #fcfcff;
+ --swm-white-transparent-light: #fcfcff40;
+ --swm-white-transparent-dark: #fcfcff80;
+
+ --swm-light-off-navy: #30354a;
+ --swm-off-navy: #272b3c;
+ --swm-navy: #232736;
+
+ /* Infima main colors */
+ --ifm-color-primary: var(--swm-navy-light-100);
+ --ifm-color-primary-dark: var(--swm-navy-dark-80);
+ --ifm-color-primary-darker: var(--swm-navy-dark-100);
+ --ifm-color-primary-darkest: var(--swm-navy-dark-120);
+ --ifm-color-primary-light: var(--swm-navy-light-100);
+ --ifm-color-primary-lighter: var(--swm-navy-light-80);
+ --ifm-color-primary-lightest: var(--swm-navy-light-40);
+
+ /* Main site settings */
+ --swm-background: var(--swm-white);
+ --swm-off-background: var(--swm-off-white);
+
+ --ifm-background-color: var(--swm-background);
+ --ifm-navbar-background-color: var(--swm-background);
+
+ /* Color Mode */
+ --swm-color-mode-enabled: var(--swm-navy-light-20);
+ --swm-color-mode-disabled-color: var(--swm-navy-light-20);
+
+ --swm-color-mode-enabled-landing: var(--swm-navy-light-100);
+ --swm-color-mode-enabled-color-landing: var(--swm-off-white);
+ --swm-color-mode-disabled-color-landing: var(--swm-navy-light-100);
+
+ /* Typography */
+ --ifm-heading-color: var(--ifm-color-primary);
+ --ifm-font-color-base: var(--swm-navy-light-100);
+
+ /* Tabs */
+ --swm-tab: var(--swm-navy-light-20);
+ --swm-tab-hover: var(--swm-purple-light-80);
+ --swm-tab-active: var(--swm-purple-light-100);
+
+ /* Table of Contents */
+ --ifm-toc-border-color: transparent;
+ --ifm-toc-link-color: var(--swm-navy-light-60);
+ --ifm-toc-link-color-active: var(--swm-navy-light-100);
+
+ /* Details section */
+ --swm-details-foreground: var(--swm-purple-light-20);
+ --swm-details-background: var(--swm-purple-light-100);
+
+ /* Admonitions */
+ --swm-admonition-color-secondary: var(--swm-navy-light-10);
+ --swm-admonition-color-success: var(--swm-green-light-20);
+ --swm-admonition-color-danger: var(--swm-red-light-20);
+ --swm-admonition-color-info: var(--swm-blue-light-20);
+ --swm-admonition-color-caution: var(--swm-yellow-light-20);
+
+ --swm-admonition-color-secondary-shadow: var(--swm-navy-light-80);
+ --swm-admonition-color-success-shadow: var(--swm-green-light-100);
+ --swm-admonition-color-danger-shadow: var(--swm-red-light-100);
+ --swm-admonition-color-info-shadow: var(--swm-blue-light-100);
+ --swm-admonition-color-caution-shadow: var(--swm-yellow-light-100);
+
+ /* Details */
+ --swm-details-color: var(--swm-navy-light-100);
+
+ /* Quotes */
+ --swm-background-quote: var(--swm-navy-light-10);
+ --swm-background-quote-secondary: var(--swm-navy-light-20);
+ --swm-background-quote-blue: var(--swm-blue-light-40);
+ --swm-background-quote-green: var(--swm-green-light-40);
+ --swm-background-quote-red: var(--swm-red-light-40);
+ --swm-background-quote-yellow: var(--swm-yellow-light-40);
+ --swm-background-quote-purple: var(--swm-purple-light-40);
+
+ /* Code snippets */
+ --swm-border: var(--swm-navy-light-20);
+ --docusaurus-highlighted-code-line-bg: var(--swm-blue-light-20);
+ /* --swm-navy-light-40 in rgba */
+ --swm-code-lines-buttons-background: rgba(145, 159, 207, 0.2);
+
+ /* Interactive Examples */
+ --swm-interactive-button-color: var(--swm-navy-light-60);
+ --swm-interactive-button-active: var(--ifm-font-color-base);
+
+ --swm-interactive-slider: var(--swm-purple-light-100);
+ --swm-interactive-slider-rail: var(--swm-navy-light-20);
+
+ /* --swm-navy-light-100 in rgba */
+ --swm-interactive-copy-button-off: rgba(0, 26, 114, 0);
+ --swm-interactive-copy-button-on: rgba(0, 26, 114, 1);
+
+ /* Table */
+ --swm-table-border-color: var(--swm-navy-light-20);
+
+ --ifm-table-head-background: var(--swm-off-background);
+ --ifm-table-stripe-background: var(--swm-off-background) !important;
+ --ifm-table-border-color: var(--swm-table-border-color);
+
+ /* Pagination */
+ --swm-paginator-sublabel: var(--swm-navy-light-100);
+ --swm-paginator-label: var(--swm-purple-light-80);
+ --swm-paginator-label-hover: var(--swm-purple-light-100);
+
+ /* Footer */
+ --swm-brand-copyright-color: var(--swm-navy-light-100);
+ --swm-copyright-color: var(--swm-navy-light-60);
+
+ --swm-brand-copyright-color-landing: var(--swm-brand-copyright-color);
+ --swm-copyright-color-landing: var(--swm-copyright-color);
+
+ /* Search */
+ --docsearch-text-color: var(--swm-searchbar-text-color);
+
+ --swm-searchbar-text-color: var(--swm-navy-light-60);
+ --swm-searchbar-background: var(--swm-background);
+ --swm-searchbar-border: var(--swm-navy-light-20);
+ --swm-searchbar-border-hover: var(--swm-purple-light-100);
+
+ --swm-search-hit-background: var(--swm-purple-light-20);
+ --swm-search-hit-background-hover: var(--swm-purple-light-80);
+ --swm-search-hit-border: var(--swm-purple-light-40);
+ --swm-search-hit-border-hover: var(--swm-purple-light-100);
+ --swm-search-hit-active-color: var(--swm-off-white);
+
+ --swm-docsearch-hit-source-color: var(--swm-navy-light-100);
+
+ --swm-search-hit-results-color: var(--swm-navy-light-40);
+
+ --swm-search-page-query-text-color: var(--swm-navy-light-100);
+
+ /* Sidebar */
+ --swm-sidebar-background: var(--swm-off-white);
+ --swm-sidebar-menu-color: var(--swm-navy-light-60);
+
+ /* Mobile sidebar */
+ /* --swm-navy-light-100 in rgba */
+ --swm-sidebar-backdrop: rgba(0, 26, 114, 0.5);
+
+ /* Landing */
+ --swm-landing-heading: var(--ifm-font-color-base);
+ --swm-landing-heading-selected: var(--swm-purple-light-100);
+ --swm-landing-heading-selected-border: var(--swm-navy-light-100);
+
+ --swm-landing-horse: var(--swm-navy-light-100);
+
+ --swm-landing-button: var(--swm-navy-light-100);
+
+ --swm-landing-feature-item: var(--swm-purple-light-40);
+ --swm-landing-feature-item-shadow: var(--swm-purple-light-100);
+
+ --swm-landing-sponsors-color: var(--ifm-font-color-base);
+
+ /* Hire Us Section */
+
+ --swm-hire-us-section-title: var(--swm-blue-light-80);
+ --swm-hire-us-section: var(--swm-navy-light-100);
+ --swm-hire-us-section-color: var(--swm-off-white);
+
+ /* Cards */
+ --swm-card-background: var(--swm-background);
+ --swm-card-border: var(--swm-navy-light-20);
+ --swm-card-border-hover: var(--swm-purple-light-100);
+
+ /* Sidebar label*/
+ --swm-sidebar-label-text-new: var(--swm-off-white);
+ --swm-sidebar-label-background-new: var(--swm-purple-light-100);
+
+ --swm-sidebar-label-text-experimental: var(--swm-navy-light-100);
+ --swm-sidebar-label-background-experimental: var(--swm-yellow-light-40);
+
+ /* Mobile sidebar versions */
+ --swm-sidebar-elements-version-text: var(--swm-navy-light-100);
+ --swm-sidebar-elements-version-inactive: var(--swm-navy-dark-40);
+ --swm-sidebar-elements-background: var(--swm-white);
+
+ /* Versions dropdown */
+ --swm-dropdown-versions-background: var(--swm-off-white);
+ --swm-dropdown-versions-item: var(--swm-navy-light-100);
+ --swm-dropdown-versions-item-border: var(--swm-purple-light-40);
+ --swm-dropdown-versions-item-background: var(--swm-purple-light-20);
+
+ --swm-dropdown-versions-item-active: var(--swm-off-white);
+ --swm-dropdown-versions-item-border-active: var(--swm-purple-light-100);
+ --swm-dropdown-versions-item-background-active: var(--swm-purple-light-80);
+
+ --swm-dropdown-versions-item-hover: var(--swm-navy-light-100);
+ --swm-dropdown-versions-item-active-hover: var(--swm-navy-light-100);
+
+ /* Version badge */
+ --swm-version-badge: var(--swm-navy-light-100);
+ --swm-version-badge-background: var(--swm-navy-light-10);
+
+ /* Compatibility table */
+ --swm-compatibility-supported-background: var(--swm-green-light-80);
+ --swm-compatibility-not-supported-background: var(--swm-red-light-80);
+ --swm-compatibility-text-color: var(--swm-white);
+}
+
+:root[data-theme='dark'] {
+ /* Infima main colors */
+ --ifm-color-primary: var(--swm-navy-light-10);
+
+ /* Main site settings */
+ --swm-background: var(--swm-navy-dark-140);
+ --swm-off-background: var(--swm-off-navy);
+
+ --ifm-background-color: var(--swm-background);
+ --ifm-navbar-background-color: var(--swm-background);
+
+ /* Color Mode */
+ --swm-color-mode-enabled: var(--swm-off-white);
+ --swm-color-mode-enabled-landing: var(--swm-off-white);
+ --swm-color-mode-enabled-color-landing: var(--swm-navy-dark-140);
+ --swm-color-mode-disabled-color: var(--swm-off-white);
+ --swm-color-mode-disabled-color-landing: var(--swm-off-white);
+
+ /* Typography */
+ --ifm-font-color-base: var(--swm-navy-light-10);
+
+ /* Tabs */
+ --swm-tab: var(--swm-navy-light-60);
+ --swm-tab-hover: var(--swm-purple-dark-60);
+ --swm-tab-active: var(--swm-purple-light-80);
+
+ /* Table of Contents */
+ --ifm-toc-border-color: transparent;
+ --ifm-toc-link-color: var(--swm-navy-light-40);
+ --ifm-toc-link-color-active: var(--swm-off-white);
+
+ /* Details section */
+ --swm-details-foreground: var(--swm-purple-dark-120);
+ --swm-details-background: var(--swm-purple-dark-140);
+
+ /* Admonitions */
+ --swm-admonition-color-secondary: var(--swm-navy-dark-70);
+ --swm-admonition-color-success: var(--swm-green-dark-120);
+ --swm-admonition-color-danger: var(--swm-red-dark-120);
+ --swm-admonition-color-info: var(--swm-blue-dark-120);
+ --swm-admonition-color-caution: var(--swm-yellow-dark-120);
+
+ --swm-admonition-color-secondary-shadow: var(--swm-navy-dark-100);
+ --swm-admonition-color-success-shadow: var(--swm-green-dark-140);
+ --swm-admonition-color-danger-shadow: var(--swm-red-dark-140);
+ --swm-admonition-color-info-shadow: var(--swm-blue-dark-140);
+ --swm-admonition-color-caution-shadow: var(--swm-yellow-dark-140);
+
+ /* Details */
+ --swm-details-color: var(--swm-off-white);
+
+ /* Quotes */
+ --swm-background-quote: var(--swm-light-off-navy);
+ --swm-background-quote-secondary: var(--swm-navy-dark-120);
+ --swm-background-quote-blue: var(--swm-blue-dark-140);
+ --swm-background-quote-green: var(--swm-green-dark-140);
+ --swm-background-quote-red: var(--swm-red-dark-140);
+ --swm-background-quote-yellow: var(--swm-yellow-dark-140);
+ --swm-background-quote-purple: var(--swm-purple-dark-140);
+
+ /* Code snippets */
+ --swm-border: var(--swm-navy-light-60);
+ --docusaurus-highlighted-code-line-bg: var(--swm-blue-dark-140);
+
+ /* Interactive Examples */
+ --swm-interactive-button-color: var(--swm-navy-light-40);
+
+ --swm-interactive-slider: var(--swm-purple-light-80);
+ --swm-interactive-slider-rail: var(--swm-navy-light-20);
+
+ /* --swm-navy-light-20 in rgba schema */
+ --swm-interactive-copy-button-off: rgba(193, 198, 229, 0);
+ --swm-interactive-copy-button-on: rgba(193, 198, 229, 1);
+
+ /* Table */
+ --swm-table-border-color: var(--swm-navy-light-60);
+
+ /* Pagination */
+ --swm-paginator-sublabel: var(--swm-navy-light-20);
+ --swm-paginator-label: var(--swm-purple-light-60);
+ --swm-paginator-label-hover: var(--swm-purple-light-40);
+
+ /* Footer */
+ --swm-brand-copyright-color: var(--swm-navy-light-20);
+ --swm-copyright-color: var(--swm-navy-light-40);
+
+ --swm-brand-copyright-color-landing: var(--swm-navy-light-20);
+ --swm-copyright-color-landing: var(--swm-off-white);
+
+ /* Search */
+ --swm-searchbar-text-color: var(--swm-navy-dark-40);
+ --swm-searchbar-border: var(--swm-navy-dark-60);
+ --swm-searchbar-border-hover: var(--swm-purple-dark-80);
+
+ --swm-search-hit-background: var(--swm-purple-dark-120);
+ --swm-search-hit-background-hover: var(--swm-purple-dark-40);
+ --swm-search-hit-border: var(--swm-purple-dark-120);
+ --swm-search-hit-border-hover: var(--swm-purple-dark-40);
+ --swm-search-hit-active-color: var(--swm-navy-light-100);
+
+ --swm-docsearch-hit-source-color: var(--swm-navy-light-10);
+
+ --swm-search-hit-results-color: var(--swm-navy-light-20);
+
+ --swm-search-page-query-text-color: var(--swm-navy-light-10);
+
+ /* Sidebar */
+ --swm-sidebar-background: var(--swm-navy);
+ --swm-sidebar-elements-background: var(--swm-off-navy);
+ --swm-sidebar-menu-color: var(--swm-navy-light-20);
+
+ /* Mobile sidebar */
+ /* --swm-navy in rgba */
+ --swm-sidebar-backdrop: rgba(35, 39, 54, 0.5);
+
+ /* Landing */
+ --swm-landing-heading: var(--swm-off-white);
+ --swm-landing-heading-selected: var(--swm-purple-dark-40);
+ --swm-landing-heading-selected-border: var(--swm-navy-light-20);
+
+ --swm-landing-horse: var(--swm-off-white);
+
+ --swm-landing-button: var(--swm-blue-dark-80);
+
+ --swm-landing-feature-item: var(--swm-purple-dark-100);
+ --swm-landing-feature-item-shadow: var(--swm-purple-dark-140);
+
+ --swm-landing-sponsors-color: var(--swm-off-white);
+
+ /* Hire Us Section */
+
+ --swm-hire-us-section-title: var(--swm-blue-dark-80);
+ --swm-hire-us-section: var(--swm-blue-dark-80);
+ --swm-hire-us-section-color: var(--swm-navy-light-100);
+
+ /* Cards */
+ --swm-card-background: var(--swm-navy);
+ --swm-card-border: var(--swm-navy-dark-60);
+ --swm-card-border-hover: var(--swm-purple-dark-80);
+
+ /* Sidebar label*/
+ --swm-sidebar-label-text-new: var(--swm-off-white);
+ --swm-sidebar-label-background-new: var(--swm-purple-dark-120);
+
+ --swm-sidebar-label-text-experimental: var(--swm-off-white);
+ --swm-sidebar-label-background-experimental: var(--swm-yellow-dark-120);
+
+ /* Mobile sidebar versions */
+ --swm-sidebar-elements-version-text: var(--swm-navy-dark-20);
+ --swm-sidebar-elements-version-inactive: var(--swm-navy-dark-60);
+ --swm-sidebar-elements-background: var(--swm-light-off-navy);
+
+ /* Versions dropdown */
+
+ --swm-dropdown-versions-background: var(--swm-off-navy);
+ --swm-dropdown-versions-item: var(--swm-off-white);
+ --swm-dropdown-versions-item-border: var(--swm-purple-dark-40);
+ --swm-dropdown-versions-item-background: var(--swm-purple-dark-40);
+
+ --swm-dropdown-versions-item-active: var(--swm-off-white);
+ --swm-dropdown-versions-item-border-active: var(--swm-purple-dark-120);
+ --swm-dropdown-versions-item-background-active: var(--swm-purple-dark-120);
+
+ --swm-dropdown-versions-item-hover: var(--swm-navy-dark-100);
+ --swm-dropdown-versions-item-active-hover: var(--swm-navy-dark-100);
+
+ /* Version badge */
+ --swm-version-badge: var(--swm-off-white);
+ --swm-version-badge-background: var(--swm-light-off-navy);
+
+ /* Compatibility table */
+ --swm-compatibility-supported-background: var(--swm-green-dark-120);
+ --swm-compatibility-not-supported-background: var(--swm-red-dark-120);
+ --swm-compatibility-text-color: var(--swm-navy-dark-20);
+}
+
+code {
+ background-color: var(--swm-background-quote);
+ border: none;
+}
+
+/* Styling for quote blocks (labels surrounded by ` sign) in details tag */
+details code {
+ background-color: var(--swm-background-quote-purple);
+}
diff --git a/docs/src/css/custom.css b/docs/src/css/custom.css
new file mode 100644
index 0000000000..7e701e6d52
--- /dev/null
+++ b/docs/src/css/custom.css
@@ -0,0 +1,3 @@
+@import 'colors.css';
+@import 'typography.css';
+@import 'overrides.css';
diff --git a/docs/src/css/overrides.css b/docs/src/css/overrides.css
new file mode 100644
index 0000000000..7be49d2b9f
--- /dev/null
+++ b/docs/src/css/overrides.css
@@ -0,0 +1,107 @@
+:root {
+ --swm-expandable-transition: transform 200ms ease;
+ --swm-logo-height: 36px;
+}
+
+table {
+ display: table;
+ width: 100%;
+}
+
+@media (max-width: 1280px) {
+ table {
+ display: block;
+ width: 100%;
+ }
+}
+
+table thead tr {
+ border-bottom: 1px solid var(--ifm-table-border-color);
+}
+
+.platform-compatibility table {
+ display: table;
+ width: 100%;
+ table-layout: fixed;
+}
+
+.compatibility {
+ overflow-x: auto;
+}
+
+.compatibility table {
+ display: table;
+ width: 100%;
+ white-space: nowrap;
+}
+
+.compatibility td {
+ padding: 0;
+ border: transparent 2px solid;
+ background: var(--ifm-background-color);
+}
+
+.compatibility th {
+ background: var(--ifm-background-color);
+ border: transparent 2px solid;
+}
+
+.header-github {
+ margin-left: 1.5em;
+}
+
+.header-github:before {
+ display: flex;
+ height: 24px;
+ width: 24px;
+
+ mask: url(/static/img/github.svg) no-repeat 100% 100%;
+ mask-size: cover;
+ content: '';
+
+ background-color: var(--ifm-navbar-link-color);
+}
+
+@media (max-height: 768px) {
+ .header-github:before {
+ height: 20px;
+ width: 20px;
+ }
+}
+
+.header-github:hover:before {
+ background-color: var(--ifm-navbar-link-hover-color);
+}
+
+[class*='codeBlockContent'] pre {
+ border: 1px solid var(--swm-border);
+}
+
+[class*='codeBlockContent'] pre,
+[class*='codeBlockContent'] code {
+ border-radius: 0;
+ background-color: var(--swm-off-background);
+}
+
+/* Add small padding, when some of the lines are too long in a code block */
+[class*='codeBlockLines'] span:last-of-type {
+ margin-right: 1em;
+}
+
+.theme-doc-version-badge {
+ color: var(--swm-version-badge);
+ background: var(--swm-version-badge-background);
+ padding: 6px;
+ border-radius: 8px;
+ border: none;
+ margin-bottom: 8px;
+}
+
+.snack-link {
+ display: inline-block;
+ margin-bottom: 25px;
+}
+
+[class*='DocCategoryGeneratedIndexPage'][class*='title'] {
+ font-size: var(--swm-h1-font-size);
+}
diff --git a/docs/src/css/typography.css b/docs/src/css/typography.css
new file mode 100644
index 0000000000..0d94325c1d
--- /dev/null
+++ b/docs/src/css/typography.css
@@ -0,0 +1,179 @@
+@font-face {
+ font-family: 'Aeonik';
+ src: url('/static/fonts/Aeonik-Regular.otf') format('opentype');
+ font-weight: 400;
+}
+
+@font-face {
+ font-family: 'Aeonik';
+ src: url('/static/fonts/Aeonik-Medium.otf') format('opentype');
+ font-weight: 500;
+}
+
+@font-face {
+ font-family: 'Aeonik';
+ src: url('/static/fonts/Aeonik-Bold.otf') format('opentype');
+ font-weight: 600;
+}
+
+@font-face {
+ font-family: 'DM Mono';
+ src: url('/static/fonts/DMMono-Regular.ttf') format('truetype');
+ font-weight: 400;
+}
+
+:root {
+ --swm-title-landing-font: 'Aeonik';
+ --swm-title-font: 'Aeonik';
+ --swm-body-font: 'Aeonik';
+ --swm-code-font: 'DM Mono';
+
+ --ifm-font-family-base: var(--swm-body-font);
+ --ifm-font-family-bold: var(--swm-body-font);
+
+ /* Heading */
+ --swm-h1-font-size: 42px;
+ --swm-h2-font-size: 32px;
+ --swm-h3-font-size: 22px;
+ --swm-heading-font-size-smaller: 18px;
+ --ifm-code-font-size: 90%;
+
+ --ifm-heading-font-family: var(--swm-title-font);
+ --ifm-heading-margin-bottom: 0;
+
+ --swm-heading-font-weight: 600;
+ --swm-h1-line-height: 1.15;
+ --swm-h2-line-height: 1.2;
+ --swm-heading-line-height-default: 1.3;
+
+ --swm-heading-letter-spacing-bigger: 0.02em;
+ --swm-heading-letter-spacing-smaller: 0.01em;
+
+ /* Admonitions */
+ --swm-admonition-heading-font-family: var(--swm-body-font);
+ --swm-admonition-heading-font-weight: 500;
+
+ /* Paginator */
+ --swm-paginator-sublabel-font-size: 14px;
+ --swm-paginator-sublabel-text-transform: uppercase;
+
+ --swm-paginator-label-font-size: 20px;
+ --swm-paginator-label-font-weight: 500;
+
+ /* Search page */
+ --swm-search-page-heading-font-weight: 600;
+ --swm-search-page-summary-font-size: 14px;
+}
+
+/* Remove all heading rules, prioritized by Docusaurus */
+:root,
+.markdown h1:first-child,
+.markdown > h1,
+.markdown > h2,
+.markdown > h3,
+.markdown > h4,
+.markdown > h5,
+.markdown > h6 {
+ --ifm-h1-font-size: var(--swm-h1-font-size);
+ --ifm-h2-font-size: var(--swm-h2-font-size);
+ --ifm-h3-font-size: var(--swm-h3-font-size);
+ --ifm-h4-font-size: var(--swm-heading-font-size-smaller);
+ --ifm-h5-font-size: var(--swm-heading-font-size-smaller);
+ --ifm-h6-font-size: var(--swm-heading-font-size-smaller);
+
+ --ifm-h1-vertical-rhythm-top: 3.75;
+ --ifm-h2-vertical-rhythm-top: 2.5;
+ --ifm-h3-vertical-rhythm-top: 1.75;
+ --ifm-heading-vertical-rhythm-top: 1.5;
+ --ifm-h1-vertical-rhythm-bottom: 1.5;
+ --ifm-heading-vertical-rhythm-bottom: 1.25;
+}
+
+@media (max-width: 996px) {
+ :root,
+ .markdown h1:first-child,
+ .markdown > h1,
+ .markdown > h2,
+ .markdown > h3,
+ .markdown > h4,
+ .markdown > h5,
+ .markdown > h6 {
+ --swm-heading-font-size-smaller-mobile: 16px;
+
+ /* Decrease the font size on mobile devices */
+ --ifm-h1-font-size: var(--swm-h2-font-size);
+ --ifm-h2-font-size: var(--swm-h3-font-size);
+ --ifm-h3-font-size: var(--swm-heading-font-size-smaller);
+ --ifm-h4-font-size: var(--swm-heading-font-size-smaller-mobile);
+ --ifm-h5-font-size: var(--swm-heading-font-size-smaller-mobile);
+ --ifm-h6-font-size: var(--swm-heading-font-size-smaller-mobile);
+ }
+}
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+ font-weight: var(--swm-heading-font-weight);
+ letter-spacing: var(--swm-heading-letter-spacing-smaller);
+}
+
+h1 {
+ line-height: var(--swm-h1-line-height);
+ letter-spacing: var(--swm-heading-letter-spacing-bigger);
+}
+
+@media (max-width: 996px) {
+ h1 {
+ letter-spacing: var(--swm-heading-letter-spacing-smaller);
+ }
+}
+
+h2 {
+ line-height: var(--swm-h2-line-height);
+}
+
+h3,
+h4,
+h5 {
+ line-height: var(--swm-heading-line-height-default);
+}
+
+h6 {
+ font-family: var(--swm-code-font);
+}
+
+p {
+ line-height: 1.6;
+}
+
+ul[role='tablist'] {
+ font-family: var(--swm-title-font);
+}
+
+code {
+ font-family: var(--swm-code-font);
+ font-weight: 400;
+ padding: 0.25rem;
+}
+
+.markdown a code {
+ text-decoration: underline;
+ text-underline-offset: 2px;
+}
+
+.markdown a {
+ font-weight: 500;
+ text-decoration: none;
+
+ border-bottom: 1px solid var(--ifm-font-color-base);
+}
+
+/* Sidebar */
+[class*='menu__list-item-collapsible'] a {
+ font-family: var(--swm-title-font);
+ font-weight: 600;
+ font-size: 18px;
+}
diff --git a/docs/src/hooks/usePageType.tsx b/docs/src/hooks/usePageType.tsx
new file mode 100644
index 0000000000..75577cac88
--- /dev/null
+++ b/docs/src/hooks/usePageType.tsx
@@ -0,0 +1,14 @@
+import { useLocation } from '@docusaurus/router';
+import useBaseUrl from '@docusaurus/useBaseUrl';
+
+const usePageType = () => {
+ const location = useLocation();
+ const baseUrl = useBaseUrl('/');
+
+ return {
+ isDocumentation: location.pathname.startsWith(`${baseUrl}docs`),
+ isLanding: location.pathname === baseUrl,
+ };
+};
+
+export default usePageType;
diff --git a/docs/src/hooks/useScreenSize.tsx b/docs/src/hooks/useScreenSize.tsx
new file mode 100644
index 0000000000..816db7ff5e
--- /dev/null
+++ b/docs/src/hooks/useScreenSize.tsx
@@ -0,0 +1,32 @@
+import React, { useEffect, useState } from 'react';
+
+/*
+ * Caution - read before use!
+ * As this hook uses innerWidth prop, which belongs to the window object,
+ * it requires to use the viewport. Thus, building the production build of the
+ * application may fail, as the Docusaurus is using SSR to serve it.
+ * Remember to verify if user can use the viewport by using
+ * `ExecutionEnvironment.canUseViewport` method, `` component or
+ * `useIsBrowser` hook.
+ */
+const useScreenSize = () => {
+ const [windowWidth, setWindowWidth] = useState(window.innerWidth);
+
+ useEffect(() => {
+ const handleWindowResize = () => {
+ setWindowWidth(window.innerWidth);
+ };
+
+ window.addEventListener('resize', handleWindowResize);
+
+ return () => {
+ window.removeEventListener('resize', handleWindowResize);
+ };
+ }, []);
+
+ return {
+ windowWidth,
+ };
+};
+
+export default useScreenSize;
diff --git a/docs/src/pages/index.js b/docs/src/pages/index.js
new file mode 100644
index 0000000000..f069abd432
--- /dev/null
+++ b/docs/src/pages/index.js
@@ -0,0 +1,38 @@
+import React from 'react';
+import Layout from '@theme/Layout';
+import LandingBackground from '@site/src/components/Hero/LandingBackground';
+import FooterBackground from '@site/src/components/FooterBackground';
+import HomepageStartScreen from '@site/src/components/Hero/StartScreen';
+import Downloads from '@site/src/components/Downloads';
+import Overview from '@site/src/components/Overview';
+import LearnMore from '@site/src/components/LearnMore';
+import Testimonals from '@site/src/components/Testimonials';
+import Sponsors from '@site/src/components/Sponsors';
+import { HireUsSection } from '@swmansion/t-rex-ui';
+import styles from './styles.module.css';
+
+export default function Home() {
+ return (
+
+
+
+
+
+
+
+
+
+ {/*
+
+ */}
+
+
+
+
+
+ );
+}
diff --git a/docs/src/pages/styles.module.css b/docs/src/pages/styles.module.css
new file mode 100644
index 0000000000..1967288a8f
--- /dev/null
+++ b/docs/src/pages/styles.module.css
@@ -0,0 +1,20 @@
+.container {
+ width: 60%;
+ margin: 0 auto;
+ display: flex;
+ flex-direction: column;
+ gap: 6.5rem;
+}
+
+@media (max-width: 1440px) {
+ .container {
+ width: 75%;
+ }
+}
+
+@media (max-width: 996px) {
+ .container {
+ width: 85%;
+ gap: 3.5rem;
+ }
+}
diff --git a/docs/src/theme/Footer/index.js b/docs/src/theme/Footer/index.js
new file mode 100644
index 0000000000..9e9ef474cd
--- /dev/null
+++ b/docs/src/theme/Footer/index.js
@@ -0,0 +1,3 @@
+import { Footer } from '@swmansion/t-rex-ui';
+
+export default Footer;
diff --git a/docs/src/theme/Navbar/index.js b/docs/src/theme/Navbar/index.js
new file mode 100644
index 0000000000..7345b6c313
--- /dev/null
+++ b/docs/src/theme/Navbar/index.js
@@ -0,0 +1,12 @@
+import React from 'react';
+import { Navbar } from '@swmansion/t-rex-ui';
+
+export default function NavbarWrapper(props) {
+ return (
+
+ );
+}
diff --git a/docs/src/theme/Root.js b/docs/src/theme/Root.js
new file mode 100644
index 0000000000..24920bd923
--- /dev/null
+++ b/docs/src/theme/Root.js
@@ -0,0 +1,13 @@
+import React from 'react';
+import { getInitColorSchemeScript } from '@mui/material/styles';
+import { Experimental_CssVarsProvider as CssVarsProvider } from '@mui/material/styles';
+import theme from '@site/src/theme/muiTheme';
+
+export default function Root({ children }) {
+ return (
+ <>
+ {getInitColorSchemeScript()}
+ {children}
+ >
+ );
+}
diff --git a/docs/src/theme/muiTheme.tsx b/docs/src/theme/muiTheme.tsx
new file mode 100644
index 0000000000..cfd068f3ec
--- /dev/null
+++ b/docs/src/theme/muiTheme.tsx
@@ -0,0 +1,59 @@
+import { experimental_extendTheme as extendTheme } from '@mui/material/styles';
+
+import Aeonik from '../../static/fonts/Aeonik-Regular.otf';
+
+// General MUI theme
+const extTheme = extendTheme({
+ typography: {
+ fontFamily: 'Aeonik, Arial',
+ },
+ colorSchemes: {
+ light: {
+ palette: {
+ text: {
+ secondary: '#6676aa',
+ },
+ primary: {
+ main: '#001a72', //--swm-navy-light-100
+ },
+ secondary: {
+ main: '#782aeb', //--swm-purple-light-100
+ },
+ background: {
+ default: '#fcfcff',
+ paper: '#f8f9ff',
+ },
+ },
+ },
+ dark: {
+ palette: {
+ text: {
+ secondary: '#919fcf',
+ },
+ primary: {
+ main: '#eef0ff', //--swm-navy-light-10
+ },
+ secondary: {
+ main: '#b58df1', //--swm-purple-light-80
+ },
+ background: {
+ default: '#232736',
+ paper: '#272b3c',
+ },
+ },
+ },
+ },
+ components: {
+ MuiCssBaseline: {
+ styleOverrides: `
+ @font-face {
+ font-family: 'Aeonik';
+ font-style: normal;
+ font-display: swap;
+ font-weight: 400;
+ src: local('Aeonik'), local('Aeonik-Regular'), url(${Aeonik}) format('otf');
+ `,
+ },
+ },
+});
+export default extTheme;
diff --git a/docs/static/fonts/Aeonik-Bold.otf b/docs/static/fonts/Aeonik-Bold.otf
new file mode 100644
index 0000000000000000000000000000000000000000..dec59f31d5cad5cdeac934d997120969af069372
GIT binary patch
literal 119176
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