Skip to content

Commit 3e20912

Browse files
author
Sarah Bawabe
committed
tweak styling, remove root override, add slotting for product dropdown
1 parent d04f708 commit 3e20912

File tree

10 files changed

+103
-17
lines changed

10 files changed

+103
-17
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import "server-only";
2+
3+
import { FernNavigation } from "@fern-api/fdr-sdk";
4+
import { slugjoin } from "@fern-api/fdr-sdk/navigation";
5+
6+
import { getFernToken } from "@/app/fern-token";
7+
import { ProductDropdown } from "@/components/header/ProductDropdown";
8+
import { createCachedDocsLoader } from "@/server/docs-loader";
9+
10+
export default async function VersionSelectPage({
11+
params,
12+
}: {
13+
params: Promise<{ host: string; domain: string; slug: string }>;
14+
}) {
15+
const { host, domain, slug } = await params;
16+
const loader = await createCachedDocsLoader(
17+
host,
18+
domain,
19+
await getFernToken()
20+
);
21+
22+
const rootPromise = loader.getRoot();
23+
24+
// preload:
25+
await loader.getLayout();
26+
await loader.getAuthState();
27+
await loader.getEdgeFlags();
28+
29+
const foundNode = FernNavigation.utils.findNode(
30+
await rootPromise,
31+
slugjoin(slug)
32+
);
33+
if (foundNode.type !== "found") {
34+
return null;
35+
}
36+
37+
return <ProductDropdown loader={loader} />;
38+
}

packages/fern-docs/bundle/src/app/[host]/[domain]/dynamic/layout.tsx

+3
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ export default async function Layout({
1010
headertabs,
1111
sidebar,
1212
versionSelect,
13+
productSelect,
1314
logo,
1415
explorer,
1516
}: {
@@ -18,6 +19,7 @@ export default async function Layout({
1819
headertabs: React.ReactNode;
1920
sidebar: React.ReactNode;
2021
versionSelect: React.ReactNode;
22+
productSelect: React.ReactNode;
2123
logo: React.ReactNode;
2224
explorer: React.ReactNode;
2325
}) {
@@ -30,6 +32,7 @@ export default async function Layout({
3032
loader={loader}
3133
headertabs={headertabs}
3234
versionSelect={versionSelect}
35+
productSelect={productSelect}
3336
sidebar={sidebar}
3437
logo={logo}
3538
>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import "server-only";
2+
3+
import { FernNavigation } from "@fern-api/fdr-sdk";
4+
import { slugjoin } from "@fern-api/fdr-sdk/navigation";
5+
6+
import { getFernToken } from "@/app/fern-token";
7+
import { ProductDropdown } from "@/components/header/ProductDropdown";
8+
import { createCachedDocsLoader } from "@/server/docs-loader";
9+
10+
export default async function VersionSelectPage({
11+
params,
12+
}: {
13+
params: Promise<{ host: string; domain: string; slug: string }>;
14+
}) {
15+
const { host, domain, slug } = await params;
16+
const loader = await createCachedDocsLoader(
17+
host,
18+
domain,
19+
await getFernToken()
20+
);
21+
22+
const rootPromise = loader.getRoot();
23+
24+
// preload:
25+
await loader.getLayout();
26+
await loader.getAuthState();
27+
await loader.getEdgeFlags();
28+
29+
const foundNode = FernNavigation.utils.findNode(
30+
await rootPromise,
31+
slugjoin(slug)
32+
);
33+
if (foundNode.type !== "found") {
34+
return null;
35+
}
36+
37+
return <ProductDropdown loader={loader} />;
38+
}

packages/fern-docs/bundle/src/app/[host]/[domain]/static/layout.tsx

+3
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ export default async function Layout({
99
headertabs,
1010
sidebar,
1111
versionSelect,
12+
productSelect,
1213
logo,
1314
explorer,
1415
}: {
@@ -17,6 +18,7 @@ export default async function Layout({
1718
headertabs: React.ReactNode;
1819
sidebar: React.ReactNode;
1920
versionSelect: React.ReactNode;
21+
productSelect: React.ReactNode;
2022
logo: React.ReactNode;
2123
explorer: React.ReactNode;
2224
}) {
@@ -27,6 +29,7 @@ export default async function Layout({
2729
loader={loader}
2830
headertabs={headertabs}
2931
versionSelect={versionSelect}
32+
productSelect={productSelect}
3033
sidebar={sidebar}
3134
logo={logo}
3235
>

packages/fern-docs/bundle/src/components/header/HeaderContent.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ export function HeaderContent({
4141
>
4242
<div className="fern-header-logo-container">
4343
<div className="flex items-center gap-2">
44-
<div className="flex items-start gap-2">
44+
<div className="flex items-center gap-2 lg:items-start">
4545
{logo}
4646
{productSelect}
4747
</div>

packages/fern-docs/bundle/src/components/header/ProductDropdownClient.tsx

+3-3
Original file line numberDiff line numberDiff line change
@@ -85,10 +85,10 @@ export function ProductDropdownClient({
8585
side="bottom"
8686
align="start"
8787
>
88-
<button className="rounded-3/2 hover:bg-(color:--grayscale-a4) flex cursor-pointer items-center gap-1 self-baseline px-2 transition-[background-color]">
89-
{currentProduct?.title}
88+
<div className="product-dropdown-trigger rounded-3/2 hover:bg-(color:--grayscale-a4) flex cursor-pointer items-center gap-1 self-baseline px-2 transition-[background-color]">
89+
<p className="product-item-title">{currentProduct?.title}</p>
9090
<ChevronDown className="size-icon transition-transform data-[state=open]:rotate-180" />
91-
</button>
91+
</div>
9292
</FernProductDropdown>
9393
);
9494

packages/fern-docs/bundle/src/components/shared-layout.tsx

+3-4
Original file line numberDiff line numberDiff line change
@@ -13,21 +13,22 @@ import { DocsLoader } from "@/server/docs-loader";
1313
import { isLocal } from "@/server/isLocal";
1414
import { createCachedMdxSerializer } from "@/server/mdx-serializer";
1515

16-
import { ProductDropdown } from "./header/ProductDropdown";
1716
import { LoginButton } from "./login-button";
1817

1918
export default async function SharedLayout({
2019
children,
2120
headertabs,
2221
sidebar,
2322
versionSelect,
23+
productSelect,
2424
loader,
2525
logo,
2626
}: {
2727
children: React.ReactNode;
2828
headertabs: React.ReactNode;
2929
sidebar?: React.ReactNode;
3030
versionSelect: React.ReactNode;
31+
productSelect: React.ReactNode;
3132
loader: DocsLoader;
3233
logo: React.ReactNode;
3334
}) {
@@ -85,9 +86,7 @@ export default async function SharedLayout({
8586
<React.Suspense fallback={null}>{versionSelect}</React.Suspense>
8687
}
8788
productSelect={
88-
<React.Suspense fallback={null}>
89-
<ProductDropdown loader={loader} />
90-
</React.Suspense>
89+
<React.Suspense fallback={null}>{productSelect}</React.Suspense>
9190
}
9291
showSearchBar={layout.searchbarPlacement === "HEADER"}
9392
navbarLinks={<NavbarLinks loader={loader} />}

packages/fern-docs/bundle/src/server/docs-loader.ts

-4
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@ import { FernFonts, generateFonts } from "./generateFonts";
6060
import { getDocsUrlMetadata } from "./getDocsUrlMetadata";
6161
import { isLocal } from "./isLocal";
6262
import { loadWithUrl as uncachedLoadWithUrl } from "./loadWithUrl";
63-
import { MOCK_DATA_WITH_PRODUCTS } from "./mock-data";
6463
import { postToEngineeringNotifs } from "./slack";
6564
import { FernColorTheme, FernLayoutConfig, FileData } from "./types";
6665
import { cleanBasePath } from "./utils/clean-base-path";
@@ -597,9 +596,6 @@ const getRoot = async (
597596
root = pruneWithAuthState(authState, authConfig, root);
598597
}
599598

600-
// TODO: remove this to restore the real root. this overrides to show the mock root for testing
601-
root = MOCK_DATA_WITH_PRODUCTS;
602-
603599
FernNavigation.utils.mutableUpdatePointsTo(root);
604600

605601
return root;

packages/fern-docs/components/src/FernDropdown.scss

+12-3
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,25 @@
2020
}
2121
}
2222

23+
/* Styles for making the product dropdown trigger look like an icon button on mobile. */
24+
.product-dropdown-trigger {
25+
@apply py-2 lg:py-0;
26+
@apply rounded-2 bg-(color:--grayscale-a2) lg:bg-transparent;
27+
}
28+
.product-item-title {
29+
@apply hidden lg:block;
30+
}
31+
2332
/* We define the styles for the product dropdown item outside of the .fern-dropdown class since it is reused within
2433
multiple dropdowns. */
2534
.fern-product-item {
26-
@apply rounded-3/2 flex cursor-pointer items-center gap-2 border-none px-2 py-1;
27-
@apply max-w-[min(300px,100%)];
35+
@apply rounded-3/2 flex cursor-pointer items-center gap-2 border-none py-1 pl-1 pr-4;
36+
@apply w-full;
2837
@apply transition-all duration-200 ease-in-out;
2938

3039
.fern-product-item-icon {
3140
@apply rounded-3/2 border-(color:--grayscale-a9) border;
32-
@apply m-1 flex h-[42px] w-[42px] shrink-0 items-center justify-center p-1;
41+
@apply m-1 flex h-[56px] w-[56px] shrink-0 items-center justify-center p-1;
3342
svg {
3443
@apply block h-[60%] w-[60%];
3544
}

packages/fern-docs/components/src/FernProductItem.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ export function FernProductItem({
2525
>
2626
<div className="fern-product-item-icon">{option.icon}</div>
2727

28-
<div className="flex flex-col">
29-
<p className="text-sm font-medium leading-tight">{option.title}</p>
28+
<div className="flex flex-col gap-1">
29+
<p className="text-sm font-bold leading-tight">{option.title}</p>
3030
{option.subtitle ? (
3131
<p className="text-(color:--grayscale-a9) text-sm leading-tight">
3232
{option.subtitle}

0 commit comments

Comments
 (0)