diff --git a/packages/website/src/components/asset-img/asset-img.module.css b/packages/website/src/components/asset-img/asset-img.module.css
new file mode 100644
index 00000000000..878bd763c05
--- /dev/null
+++ b/packages/website/src/components/asset-img/asset-img.module.css
@@ -0,0 +1,3 @@
+.img {
+ display: block;
+}
diff --git a/packages/website/src/components/asset-img/asset-img.tsx b/packages/website/src/components/asset-img/asset-img.tsx
new file mode 100644
index 00000000000..16630687af3
--- /dev/null
+++ b/packages/website/src/components/asset-img/asset-img.tsx
@@ -0,0 +1,15 @@
+import useBaseUrl from "@docusaurus/useBaseUrl";
+import style from "./asset-img.module.css";
+
+export interface AssetImgProps {
+ src: string;
+ className?: string;
+}
+
+/**
+ * Component for rendering an image resolving the relative path.
+ */
+export const AssetImg = ({ src, ...props }: AssetImgProps) => {
+ const fullSrc = useBaseUrl(`/img/${src}`);
+ return ;
+};
diff --git a/packages/website/src/components/fluent-img.tsx b/packages/website/src/components/fluent-img.tsx
index aa161cbd95b..6c27a869cc7 100644
--- a/packages/website/src/components/fluent-img.tsx
+++ b/packages/website/src/components/fluent-img.tsx
@@ -7,13 +7,17 @@ export interface FluentImgProps {
}
export type FluentImageName =
- | "checkmark"
| "chat"
+ | "checkmark"
+ | "design-layout"
| "design"
+ | "document-add"
+ | "document-cloud"
| "editor"
| "eye-dev"
| "firework"
- | "people-shield";
+ | "people-shield"
+ | "shield-blue";
/**
* Component for rendering a Fluent image.
diff --git a/packages/website/src/components/homepage/homepage.module.css b/packages/website/src/components/homepage/homepage.module.css
index c378b494e1a..4f76e423cc2 100644
--- a/packages/website/src/components/homepage/homepage.module.css
+++ b/packages/website/src/components/homepage/homepage.module.css
@@ -1,6 +1,6 @@
.intro-container {
background-repeat: no-repeat;
- width: 100vw;
+ width: 100%;
background-size: 100vw 94%;
display: flex;
diff --git a/packages/website/src/components/homepage/homepage.tsx b/packages/website/src/components/homepage/homepage.tsx
index f20437350b6..44eb96d864c 100644
--- a/packages/website/src/components/homepage/homepage.tsx
+++ b/packages/website/src/components/homepage/homepage.tsx
@@ -5,6 +5,7 @@ import { SectionedLayout } from "../sectioned-layout/sectioned-layout";
import { Feature, FeatureGroup } from "./feature/feature";
import style from "./homepage.module.css";
import { Section } from "./section/section";
+import { Links } from "@site/src/constants";
const useFluentStyles = makeStyles({
bg: { backgroundColor: tokens.colorNeutralBackground3 },
@@ -93,18 +94,19 @@ const OpenAPISection = () => {
header="Productivity"
title="Streamline your OpenAPI workflow"
description="Benefit from a huge ecosystem of OpenAPI tools for configuring API gateways, generating code, and validating your data."
+ image="illustrations/openapi3.png"
items={[
{
title: "TypeSpec for OpenAPI developers",
- description: "Description todo",
+ description: "Get started with using TypeSpec coming from OpenAPI.",
image: "design",
- link: "/openapi",
+ link: Links.gettingStartedOpenAPI,
},
{
- title: "Title",
- description: "Description todo",
- image: "checkmark",
- link: "todo",
+ title: "OpenAPI emitter reference",
+ description: "Reference documentation for the OpenAPI 3.0 emitter.",
+ image: "document-add",
+ link: "/docs/standard-library/openapi3/reference",
},
]}
/>
@@ -117,6 +119,7 @@ const EcoSystemSection = () => {
header="Ecosystem"
title="Test API endpoints as you code"
description="Build a complete JSON RPC interface for your service, call it from your web browser, and test out endpoints in a breeze."
+ image="illustrations/openapi3.png"
items={[
{
title: "TypeSpec for JSON RPC developer",
@@ -124,6 +127,12 @@ const EcoSystemSection = () => {
image: "design",
link: "/json-rpc",
},
+ {
+ title: "Validate messages with JSON Schema",
+ description: "Generate the JSON Schema for your JSON RPC message.",
+ image: "people-shield",
+ link: "/docs/standard-library/json-schema/reference",
+ },
]}
/>
);
@@ -135,6 +144,7 @@ const FlexibilitySection = () => {
header="Ecosystem"
title="Action-oriented title todo"
description="With TypeSpec, align your team around a common type vocabulary. "
+ image="illustrations/openapi3.png"
items={[
{
title: "Title todo",
diff --git a/packages/website/src/components/homepage/section/section.module.css b/packages/website/src/components/homepage/section/section.module.css
index 35e5cbd2ef0..e115283032d 100644
--- a/packages/website/src/components/homepage/section/section.module.css
+++ b/packages/website/src/components/homepage/section/section.module.css
@@ -55,19 +55,28 @@
.illustration {
width: 80vw;
- height: 70vw;
+ padding: 0;
+ overflow: hidden;
}
@media only screen and (min-width: 1200px) {
.illustration {
width: 50vw;
- height: 40vw;
}
}
.item-card {
width: 100%;
+ display: flex;
+ flex-direction: column;
+ gap: 10px;
+}
+
+.item {
+ display: flex;
+ gap: 12px
}
+
.item-image {
width: 52px;
height: 52px;
diff --git a/packages/website/src/components/homepage/section/section.tsx b/packages/website/src/components/homepage/section/section.tsx
index 7a4e93747cb..4bf40ea5715 100644
--- a/packages/website/src/components/homepage/section/section.tsx
+++ b/packages/website/src/components/homepage/section/section.tsx
@@ -1,6 +1,5 @@
import {
Caption1,
- CardHeader,
Divider,
Link,
Subtitle2,
@@ -11,6 +10,7 @@ import {
} from "@fluentui/react-components";
import { FluentImageName, FluentImg } from "../../fluent-img";
+import { AssetImg } from "../../asset-img/asset-img";
import { Card } from "../../card/card";
import style from "./section.module.css";
@@ -25,6 +25,7 @@ interface SectionProps {
header: string;
title: string;
description: string;
+ image: string;
items: SectionItem[];
layout?: "text-left" | "text-right";
}
@@ -34,7 +35,7 @@ const useFluentStyles = makeStyles({
descriptionText: { color: tokens.colorNeutralForeground3 },
});
-export const Section = ({ header, title, description, items, layout }: SectionProps) => {
+export const Section = ({ header, title, description, items, layout, image }: SectionProps) => {
const fluentStyles = useFluentStyles();
return (