diff --git a/fern/apis/fdr/definition/docs/latest/frontmatter.yml b/fern/apis/fdr/definition/docs/latest/frontmatter.yml index 0a5a18455e..38fca288ab 100644 --- a/fern/apis/fdr/definition/docs/latest/frontmatter.yml +++ b/fern/apis/fdr/definition/docs/latest/frontmatter.yml @@ -75,6 +75,67 @@ types: tags: type: optional docs: Tags for the page. This is used to group and filter changelog pages. + banner: + type: optional + docs: | + Displays a banner at the top of the page content. Can be set to `true` for a default warning banner, + a string for a warning banner with custom message, or an object for full customization. + beta: + availability: deprecated + type: optional + docs: | + Deprecated. Use `banner` instead. Displays a yellow warning banner at the top of the page to indicate + that the content is in beta or still being worked on. Can be set to `true` for a default message, + or provide a custom message string. + + Banner: + discriminated: false + union: + - boolean + - string + - BannerConfig + + BannerConfig: + properties: + message: + type: string + docs: The message to display in the banner. + intent: + type: optional + docs: The intent/style of the banner. Defaults to "warning". + default: warning + color: + type: optional + docs: Optional color overrides for the banner. Use with caution as custom colors may not adapt well to dark mode. + + BannerIntent: + enum: + - info + - warning + - success + - error + - note + - launch + - tip + - check + + BannerColor: + properties: + background: + type: optional + docs: Background color (CSS color value). + text: + type: optional + docs: Text color (CSS color value). + border: + type: optional + docs: Border color (CSS color value). + + BetaBanner: + discriminated: false + union: + - boolean + - string Logo: discriminated: false diff --git a/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/latest/resources/frontmatter/types/Banner.ts b/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/latest/resources/frontmatter/types/Banner.ts new file mode 100644 index 0000000000..a9be9867b4 --- /dev/null +++ b/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/latest/resources/frontmatter/types/Banner.ts @@ -0,0 +1,7 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as FernRegistry from "../../../../../../../index.js"; + +export type Banner = boolean | string | FernRegistry.docs.latest.BannerConfig; diff --git a/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/latest/resources/frontmatter/types/BannerColor.ts b/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/latest/resources/frontmatter/types/BannerColor.ts new file mode 100644 index 0000000000..fd2faca3a3 --- /dev/null +++ b/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/latest/resources/frontmatter/types/BannerColor.ts @@ -0,0 +1,12 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface BannerColor { + /** Background color (CSS color value). */ + background: string | undefined; + /** Text color (CSS color value). */ + text: string | undefined; + /** Border color (CSS color value). */ + border: string | undefined; +} diff --git a/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/latest/resources/frontmatter/types/BannerConfig.ts b/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/latest/resources/frontmatter/types/BannerConfig.ts new file mode 100644 index 0000000000..ae54ac5505 --- /dev/null +++ b/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/latest/resources/frontmatter/types/BannerConfig.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as FernRegistry from "../../../../../../../index.js"; + +export interface BannerConfig { + /** The message to display in the banner. */ + message: string; + /** The intent/style of the banner. Defaults to "warning". */ + intent: FernRegistry.docs.latest.BannerIntent | undefined; + /** Optional color overrides for the banner. Use with caution as custom colors may not adapt well to dark mode. */ + color: FernRegistry.docs.latest.BannerColor | undefined; +} diff --git a/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/latest/resources/frontmatter/types/BannerIntent.ts b/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/latest/resources/frontmatter/types/BannerIntent.ts new file mode 100644 index 0000000000..87c91b4a47 --- /dev/null +++ b/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/latest/resources/frontmatter/types/BannerIntent.ts @@ -0,0 +1,15 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type BannerIntent = "info" | "warning" | "success" | "error" | "note" | "launch" | "tip" | "check"; +export const BannerIntent = { + Info: "info", + Warning: "warning", + Success: "success", + Error: "error", + Note: "note", + Launch: "launch", + Tip: "tip", + Check: "check", +} as const; diff --git a/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/latest/resources/frontmatter/types/BetaBanner.ts b/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/latest/resources/frontmatter/types/BetaBanner.ts new file mode 100644 index 0000000000..0a50dfec5c --- /dev/null +++ b/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/latest/resources/frontmatter/types/BetaBanner.ts @@ -0,0 +1,5 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type BetaBanner = boolean | string; diff --git a/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/latest/resources/frontmatter/types/Frontmatter.ts b/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/latest/resources/frontmatter/types/Frontmatter.ts index d9cc80ad82..eb0ed9472b 100644 --- a/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/latest/resources/frontmatter/types/Frontmatter.ts +++ b/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/latest/resources/frontmatter/types/Frontmatter.ts @@ -51,4 +51,15 @@ export interface Frontmatter "canonical-url": string | undefined; /** Tags for the page. This is used to group and filter changelog pages. */ tags: FernRegistry.docs.latest.StringOrStringList | undefined; + /** + * Displays a banner at the top of the page content. Can be set to `true` for a default warning banner, + * a string for a warning banner with custom message, or an object for full customization. + */ + banner: FernRegistry.docs.latest.Banner | undefined; + /** + * Deprecated. Use `banner` instead. Displays a yellow warning banner at the top of the page to indicate + * that the content is in beta or still being worked on. Can be set to `true` for a default message, + * or provide a custom message string. + */ + beta: FernRegistry.docs.latest.BetaBanner | undefined; } diff --git a/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/latest/resources/frontmatter/types/index.ts b/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/latest/resources/frontmatter/types/index.ts index 7e58d88de8..433d17bcfb 100644 --- a/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/latest/resources/frontmatter/types/index.ts +++ b/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/latest/resources/frontmatter/types/index.ts @@ -1,4 +1,9 @@ export * from "./Frontmatter.js"; +export * from "./Banner.js"; +export * from "./BannerConfig.js"; +export * from "./BannerIntent.js"; +export * from "./BannerColor.js"; +export * from "./BetaBanner.js"; export * from "./Logo.js"; export * from "./LogoConfiguration.js"; export * from "./Layout.js"; diff --git a/packages/fdr-sdk/src/docs/frontmatter.ts b/packages/fdr-sdk/src/docs/frontmatter.ts index 0ddac57a95..f5fad99431 100644 --- a/packages/fdr-sdk/src/docs/frontmatter.ts +++ b/packages/fdr-sdk/src/docs/frontmatter.ts @@ -39,5 +39,7 @@ export const EMPTY_FRONTMATTER: Frontmatter = { "jsonld:breadcrumb": undefined, keywords: undefined, logo: undefined, - tags: undefined + tags: undefined, + banner: undefined, + beta: undefined }; diff --git a/packages/fern-docs/bundle/src/components/BetaBanner.tsx b/packages/fern-docs/bundle/src/components/BetaBanner.tsx new file mode 100644 index 0000000000..6d73d37452 --- /dev/null +++ b/packages/fern-docs/bundle/src/components/BetaBanner.tsx @@ -0,0 +1,85 @@ +import "server-only"; + +import type { FernRegistry } from "@fern-api/fdr-sdk/client/types"; +import { visitDiscriminatedUnion } from "@fern-api/ui-core-utils"; +import { cn } from "@fern-docs/components/cn"; +import { Bell, Check, CheckCircle, Info, Pin, Rocket, Star, TriangleAlert } from "lucide-react"; +import type React from "react"; +import type { CSSProperties } from "react"; + +type BannerIntent = "info" | "warning" | "success" | "error" | "note" | "launch" | "tip" | "check"; + +export interface TopBannerProps { + banner: FernRegistry.docs.latest.Banner; + className?: string; +} + +function parseBannerConfig(banner: FernRegistry.docs.latest.Banner): { + message: string; + intent: BannerIntent; + color?: { background?: string; text?: string; border?: string }; +} { + if (typeof banner === "boolean") { + return { + message: "This page is in beta and still being worked on.", + intent: "warning" + }; + } + + if (typeof banner === "string") { + return { + message: banner, + intent: "warning" + }; + } + + return { + message: banner.message, + intent: (banner.intent ?? "warning") as BannerIntent, + color: banner.color + }; +} + +function getIconForIntent(intent: BannerIntent): React.ReactElement { + return visitDiscriminatedUnion({ intent }, "intent")._visit({ + info: () => , + warning: () => , + success: () => , + error: () => , + note: () => , + launch: () => , + tip: () => , + check: () => , + _other: () => + }); +} + +export function TopBanner({ banner, className }: TopBannerProps) { + const { message, intent, color } = parseBannerConfig(banner); + + const style: CSSProperties = {}; + if (color?.background) { + style.backgroundColor = color.background; + } + if (color?.border) { + style.borderColor = color.border; + } + if (color?.text) { + style.color = color.text; + } + + return ( +
0 ? style : undefined} + > +
+
{getIconForIntent(intent)}
+
+

{message}

+
+
+
+ ); +} diff --git a/packages/fern-docs/bundle/src/components/layouts/LayoutEvaluator.tsx b/packages/fern-docs/bundle/src/components/layouts/LayoutEvaluator.tsx index 4b44c5122e..600411ddad 100644 --- a/packages/fern-docs/bundle/src/components/layouts/LayoutEvaluator.tsx +++ b/packages/fern-docs/bundle/src/components/layouts/LayoutEvaluator.tsx @@ -12,6 +12,7 @@ import { MdxContent } from "@/mdx/components/MdxContent"; import type { MdxSerializer } from "@/server/mdx-serializer"; import { asToc, getMDXExport } from "../../mdx/get-mdx-export"; +import { TopBanner } from "../BetaBanner"; import { BuiltWithFern } from "../built-with-fern"; import { constructPageOptions } from "../PageActionsDropdownOptions"; import { PageHeader } from "../PageHeader"; @@ -85,6 +86,9 @@ export async function LayoutEvaluator({ /> ); + const banner = frontmatter?.banner ?? frontmatter?.beta; + const topBanner = banner ? : null; + return ( <> {extractedStyles.length > 0 && @@ -105,6 +109,7 @@ export async function LayoutEvaluator({ footer={footer} builtWithFern={} > + {topBanner} diff --git a/servers/fdr/src/api/generated/api/resources/docs/resources/latest/resources/frontmatter/types/Banner.d.ts b/servers/fdr/src/api/generated/api/resources/docs/resources/latest/resources/frontmatter/types/Banner.d.ts new file mode 100644 index 0000000000..dde05218bb --- /dev/null +++ b/servers/fdr/src/api/generated/api/resources/docs/resources/latest/resources/frontmatter/types/Banner.d.ts @@ -0,0 +1,5 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as FernRegistry from "../../../../../../../index"; +export declare type Banner = boolean | string | FernRegistry.docs.latest.BannerConfig; diff --git a/servers/fdr/src/api/generated/api/resources/docs/resources/latest/resources/frontmatter/types/Banner.js b/servers/fdr/src/api/generated/api/resources/docs/resources/latest/resources/frontmatter/types/Banner.js new file mode 100644 index 0000000000..0b46289f5b --- /dev/null +++ b/servers/fdr/src/api/generated/api/resources/docs/resources/latest/resources/frontmatter/types/Banner.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/servers/fdr/src/api/generated/api/resources/docs/resources/latest/resources/frontmatter/types/BannerColor.d.ts b/servers/fdr/src/api/generated/api/resources/docs/resources/latest/resources/frontmatter/types/BannerColor.d.ts new file mode 100644 index 0000000000..c4d4cc436b --- /dev/null +++ b/servers/fdr/src/api/generated/api/resources/docs/resources/latest/resources/frontmatter/types/BannerColor.d.ts @@ -0,0 +1,11 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export interface BannerColor { + /** Background color (CSS color value). */ + background: string | undefined; + /** Text color (CSS color value). */ + text: string | undefined; + /** Border color (CSS color value). */ + border: string | undefined; +} diff --git a/servers/fdr/src/api/generated/api/resources/docs/resources/latest/resources/frontmatter/types/BannerColor.js b/servers/fdr/src/api/generated/api/resources/docs/resources/latest/resources/frontmatter/types/BannerColor.js new file mode 100644 index 0000000000..0b46289f5b --- /dev/null +++ b/servers/fdr/src/api/generated/api/resources/docs/resources/latest/resources/frontmatter/types/BannerColor.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/servers/fdr/src/api/generated/api/resources/docs/resources/latest/resources/frontmatter/types/BannerConfig.d.ts b/servers/fdr/src/api/generated/api/resources/docs/resources/latest/resources/frontmatter/types/BannerConfig.d.ts new file mode 100644 index 0000000000..92c83bd712 --- /dev/null +++ b/servers/fdr/src/api/generated/api/resources/docs/resources/latest/resources/frontmatter/types/BannerConfig.d.ts @@ -0,0 +1,12 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +import * as FernRegistry from "../../../../../../../index"; +export interface BannerConfig { + /** The message to display in the banner. */ + message: string; + /** The intent/style of the banner. Defaults to "warning". */ + intent: FernRegistry.docs.latest.BannerIntent | undefined; + /** Optional color overrides for the banner. Use with caution as custom colors may not adapt well to dark mode. */ + color: FernRegistry.docs.latest.BannerColor | undefined; +} diff --git a/servers/fdr/src/api/generated/api/resources/docs/resources/latest/resources/frontmatter/types/BannerConfig.js b/servers/fdr/src/api/generated/api/resources/docs/resources/latest/resources/frontmatter/types/BannerConfig.js new file mode 100644 index 0000000000..0b46289f5b --- /dev/null +++ b/servers/fdr/src/api/generated/api/resources/docs/resources/latest/resources/frontmatter/types/BannerConfig.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/servers/fdr/src/api/generated/api/resources/docs/resources/latest/resources/frontmatter/types/BannerIntent.d.ts b/servers/fdr/src/api/generated/api/resources/docs/resources/latest/resources/frontmatter/types/BannerIntent.d.ts new file mode 100644 index 0000000000..0016b5d230 --- /dev/null +++ b/servers/fdr/src/api/generated/api/resources/docs/resources/latest/resources/frontmatter/types/BannerIntent.d.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export declare type BannerIntent = "info" | "warning" | "success" | "error" | "note" | "launch" | "tip" | "check"; +export declare const BannerIntent: { + readonly Info: "info"; + readonly Warning: "warning"; + readonly Success: "success"; + readonly Error: "error"; + readonly Note: "note"; + readonly Launch: "launch"; + readonly Tip: "tip"; + readonly Check: "check"; +}; diff --git a/servers/fdr/src/api/generated/api/resources/docs/resources/latest/resources/frontmatter/types/BannerIntent.js b/servers/fdr/src/api/generated/api/resources/docs/resources/latest/resources/frontmatter/types/BannerIntent.js new file mode 100644 index 0000000000..a7a2519546 --- /dev/null +++ b/servers/fdr/src/api/generated/api/resources/docs/resources/latest/resources/frontmatter/types/BannerIntent.js @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export const BannerIntent = { + Info: "info", + Warning: "warning", + Success: "success", + Error: "error", + Note: "note", + Launch: "launch", + Tip: "tip", + Check: "check", +}; diff --git a/servers/fdr/src/api/generated/api/resources/docs/resources/latest/resources/frontmatter/types/BetaBanner.d.ts b/servers/fdr/src/api/generated/api/resources/docs/resources/latest/resources/frontmatter/types/BetaBanner.d.ts new file mode 100644 index 0000000000..bdfeadfc14 --- /dev/null +++ b/servers/fdr/src/api/generated/api/resources/docs/resources/latest/resources/frontmatter/types/BetaBanner.d.ts @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export declare type BetaBanner = boolean | string; diff --git a/servers/fdr/src/api/generated/api/resources/docs/resources/latest/resources/frontmatter/types/BetaBanner.js b/servers/fdr/src/api/generated/api/resources/docs/resources/latest/resources/frontmatter/types/BetaBanner.js new file mode 100644 index 0000000000..0b46289f5b --- /dev/null +++ b/servers/fdr/src/api/generated/api/resources/docs/resources/latest/resources/frontmatter/types/BetaBanner.js @@ -0,0 +1,4 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +export {}; diff --git a/servers/fdr/src/api/generated/api/resources/docs/resources/latest/resources/frontmatter/types/Frontmatter.d.ts b/servers/fdr/src/api/generated/api/resources/docs/resources/latest/resources/frontmatter/types/Frontmatter.d.ts index f8d80cf1b6..98524df403 100644 --- a/servers/fdr/src/api/generated/api/resources/docs/resources/latest/resources/frontmatter/types/Frontmatter.d.ts +++ b/servers/fdr/src/api/generated/api/resources/docs/resources/latest/resources/frontmatter/types/Frontmatter.d.ts @@ -47,4 +47,15 @@ export interface Frontmatter extends FernRegistry.docs.latest.WithMetadataConfig "canonical-url": string | undefined; /** Tags for the page. This is used to group and filter changelog pages. */ tags: FernRegistry.docs.latest.StringOrStringList | undefined; + /** + * Displays a banner at the top of the page content. Can be set to `true` for a default warning banner, + * a string for a warning banner with custom message, or an object for full customization. + */ + banner: FernRegistry.docs.latest.Banner | undefined; + /** + * Deprecated. Use `banner` instead. Displays a yellow warning banner at the top of the page to indicate + * that the content is in beta or still being worked on. Can be set to `true` for a default message, + * or provide a custom message string. + */ + beta: FernRegistry.docs.latest.BetaBanner | undefined; } diff --git a/servers/fdr/src/api/generated/api/resources/docs/resources/latest/resources/frontmatter/types/index.d.ts b/servers/fdr/src/api/generated/api/resources/docs/resources/latest/resources/frontmatter/types/index.d.ts index 27614c9bb0..d815e0af92 100644 --- a/servers/fdr/src/api/generated/api/resources/docs/resources/latest/resources/frontmatter/types/index.d.ts +++ b/servers/fdr/src/api/generated/api/resources/docs/resources/latest/resources/frontmatter/types/index.d.ts @@ -1,4 +1,9 @@ export * from "./Frontmatter"; +export * from "./Banner"; +export * from "./BannerConfig"; +export * from "./BannerIntent"; +export * from "./BannerColor"; +export * from "./BetaBanner"; export * from "./Logo"; export * from "./LogoConfiguration"; export * from "./Layout"; diff --git a/servers/fdr/src/api/generated/api/resources/docs/resources/latest/resources/frontmatter/types/index.js b/servers/fdr/src/api/generated/api/resources/docs/resources/latest/resources/frontmatter/types/index.js index 27614c9bb0..d815e0af92 100644 --- a/servers/fdr/src/api/generated/api/resources/docs/resources/latest/resources/frontmatter/types/index.js +++ b/servers/fdr/src/api/generated/api/resources/docs/resources/latest/resources/frontmatter/types/index.js @@ -1,4 +1,9 @@ export * from "./Frontmatter"; +export * from "./Banner"; +export * from "./BannerConfig"; +export * from "./BannerIntent"; +export * from "./BannerColor"; +export * from "./BetaBanner"; export * from "./Logo"; export * from "./LogoConfiguration"; export * from "./Layout";