- {description}
+
+
+
+
+
+
+ {header}
+
+ {title}
+
+
+ {description}
+
+
+ {items.map((x, i) => (
+ <>
+ {i !== 0 ? : ""}
+
+ >
+ ))}
+
-
- {items.map((x, i) => (
- <>
- {i !== 0 ? : ""}
-
- >
- ))}
-
@@ -70,12 +79,12 @@ const SectionItem = ({ title, description, image, link }: SectionItem) => {
image={
}
header={
{title} }
description={
- <>
+
{description}
Learn more
- >
+
}
>
);
diff --git a/packages/website/src/components/sectioned-layout/sectioned-layout.module.css b/packages/website/src/components/sectioned-layout/sectioned-layout.module.css
new file mode 100644
index 0000000000..035739cf90
--- /dev/null
+++ b/packages/website/src/components/sectioned-layout/sectioned-layout.module.css
@@ -0,0 +1,10 @@
+.layout {
+ display: flex;
+ padding: 48px 0px 60px 0px;
+ margin: auto;
+ max-width: 1464px;
+ flex-direction: column;
+ align-items: center;
+ gap: 128px;
+ align-self: stretch;
+}
diff --git a/packages/website/src/components/sectioned-layout/sectioned-layout.tsx b/packages/website/src/components/sectioned-layout/sectioned-layout.tsx
new file mode 100644
index 0000000000..4a2509ef71
--- /dev/null
+++ b/packages/website/src/components/sectioned-layout/sectioned-layout.tsx
@@ -0,0 +1,5 @@
+import style from "./sectioned-layout.module.css";
+
+export const SectionedLayout = ({ children }) => {
+ return
{children}
;
+};
diff --git a/packages/website/src/components/use-case-feature/use-case-feature.module.css b/packages/website/src/components/use-case-feature/use-case-feature.module.css
new file mode 100644
index 0000000000..6d17e17606
--- /dev/null
+++ b/packages/website/src/components/use-case-feature/use-case-feature.module.css
@@ -0,0 +1,49 @@
+.feature-group {
+ display: flex;
+ align-items: stretch;
+ align-self: center;
+ flex-direction: column;
+ padding: 0 80px;
+}
+
+.feature {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ gap: 24px;
+ max-width: 320px;
+}
+
+.content {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ gap: 10px;
+}
+
+.image {
+ width: 64px;
+ height: 64px;
+}
+
+@media only screen and (min-width: 1200px) {
+ .feature-card {
+ width: 350px;
+ }
+}
+
+@media only screen and (min-width: 1024px) {
+ .feature-group {
+ width: 100%;
+ flex-direction: row;
+ justify-content: space-between;
+ }
+
+ .feature {
+ align-items: baseline;
+ }
+
+ .content {
+ align-items: baseline;
+ }
+}
diff --git a/packages/website/src/components/use-case-feature/use-case-feature.tsx b/packages/website/src/components/use-case-feature/use-case-feature.tsx
new file mode 100644
index 0000000000..3f3f008471
--- /dev/null
+++ b/packages/website/src/components/use-case-feature/use-case-feature.tsx
@@ -0,0 +1,26 @@
+import { Link, Subtitle1, Text } from "@fluentui/react-components";
+import { FluentImageName, FluentImg } from "../fluent-img";
+import style from "./use-case-feature.module.css";
+
+export interface UseCaseFeatureProps {
+ image: FluentImageName;
+ title: string;
+ subtitle: string;
+ link: string;
+}
+export const UseCaseFeature = ({ image, title, subtitle, link }: UseCaseFeatureProps) => {
+ return (
+
+
+
+ {title}
+ {subtitle}
+ Learn more
+
+
+ );
+};
+
+export const UseCaseFeatureGroup = ({ children }) => {
+ return
{children}
;
+};
diff --git a/packages/website/src/components/use-case-overview/use-case-overview.module.css b/packages/website/src/components/use-case-overview/use-case-overview.module.css
new file mode 100644
index 0000000000..8dc9315b51
--- /dev/null
+++ b/packages/website/src/components/use-case-overview/use-case-overview.module.css
@@ -0,0 +1,64 @@
+.container {
+ padding-top: 100px;
+ padding-bottom: 80px;
+}
+
+.overview {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ align-content: center;
+
+ margin: auto;
+}
+
+.content {
+ flex: 1;
+ padding: 80px;
+}
+
+.spacer {
+ height: 32px;
+}
+
+.title {
+ max-width: 522px;
+}
+.subtitle {
+ max-width: 522px;
+}
+
+.illustration {
+ width: 30vw;
+ height: 25vw;
+}
+
+@media only screen and (min-width: 1200px) {
+ .overview {
+ max-width: 1464px;
+ height: 600px;
+ }
+
+ .illustration {
+ width: 30vw;
+ height: 25vw;
+ }
+}
+
+@media only screen and (min-width: 1024px) {
+ .overview {
+ flex-direction: row;
+ }
+
+ .illustration {
+ width: 40vw;
+ height: 32vw;
+ }
+}
+
+@media only screen and (max-width: 1023px) {
+ .illustration {
+ display: none;
+ }
+}
diff --git a/packages/website/src/components/use-case-overview/use-case-overview.tsx b/packages/website/src/components/use-case-overview/use-case-overview.tsx
new file mode 100644
index 0000000000..0051bc8a7f
--- /dev/null
+++ b/packages/website/src/components/use-case-overview/use-case-overview.tsx
@@ -0,0 +1,32 @@
+import { Button, Title2 } from "@fluentui/react-components";
+import { Card } from "../card/card";
+import { DescriptionText } from "../description-text/secondary-text";
+import style from "./use-case-overview.module.css";
+
+export interface UseCaseOverviewProps {
+ title: string;
+ subtitle: string;
+ link: string;
+}
+
+export const UseCaseOverview = (props: UseCaseOverviewProps) => {
+ return (
+
+
+
+
+ {props.title}
+
+
+
{props.subtitle}
+
+
+ Get started
+
+
+
+
+
+
+ );
+};
diff --git a/packages/website/src/pages/data-validation.tsx b/packages/website/src/pages/data-validation.tsx
index 17ed11834e..7262105c80 100644
--- a/packages/website/src/pages/data-validation.tsx
+++ b/packages/website/src/pages/data-validation.tsx
@@ -1,5 +1,79 @@
import { FluentLayout } from "../components/fluent-layout";
+import { Section } from "../components/homepage/section/section";
+import { SectionedLayout } from "../components/sectioned-layout/sectioned-layout";
+import {
+ UseCaseFeature,
+ UseCaseFeatureGroup,
+} from "../components/use-case-feature/use-case-feature";
+import { UseCaseOverview } from "../components/use-case-overview/use-case-overview";
export default function Home() {
- return
;
+ return (
+
+
+
+ );
}
+
+const DataValidationContent = () => {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
diff --git a/packages/website/src/pages/json-rpc.tsx b/packages/website/src/pages/json-rpc.tsx
index 17ed11834e..98bce82161 100644
--- a/packages/website/src/pages/json-rpc.tsx
+++ b/packages/website/src/pages/json-rpc.tsx
@@ -1,5 +1,79 @@
import { FluentLayout } from "../components/fluent-layout";
+import { Section } from "../components/homepage/section/section";
+import { SectionedLayout } from "../components/sectioned-layout/sectioned-layout";
+import {
+ UseCaseFeature,
+ UseCaseFeatureGroup,
+} from "../components/use-case-feature/use-case-feature";
+import { UseCaseOverview } from "../components/use-case-overview/use-case-overview";
export default function Home() {
- return
;
+ return (
+
+
+
+ );
}
+
+const JsonRpcContent = () => {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
diff --git a/packages/website/src/pages/openapi.tsx b/packages/website/src/pages/openapi.tsx
index 17ed11834e..78aa48d226 100644
--- a/packages/website/src/pages/openapi.tsx
+++ b/packages/website/src/pages/openapi.tsx
@@ -1,5 +1,79 @@
import { FluentLayout } from "../components/fluent-layout";
+import { Section } from "../components/homepage/section/section";
+import { SectionedLayout } from "../components/sectioned-layout/sectioned-layout";
+import {
+ UseCaseFeature,
+ UseCaseFeatureGroup,
+} from "../components/use-case-feature/use-case-feature";
+import { UseCaseOverview } from "../components/use-case-overview/use-case-overview";
export default function Home() {
- return
;
+ return (
+
+
+
+ );
}
+
+const OpenApiContent = () => {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+};