From d289d829d885ca4713178df6b2f736f59e751dfb Mon Sep 17 00:00:00 2001 From: Kaylee <65376239+KayleeWilliams@users.noreply.github.com> Date: Sat, 25 Apr 2026 17:04:57 -0400 Subject: [PATCH 1/3] feat(docs): add c15t MDX compatibility for callouts, sections, details MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Make @inth/docs a drop-in target for Fumadocs-style MDX (used by c15t) without forking. Adds three remark plugins (section unwrap, details flatten, JSX-comment strip), accepts aliases, gives PackageCommandTabs a `mode` prop, gives Tabs a `groupId`, adds icon/variant props on Card. Extracts COMMANDS and resolveCommand to internal/ so component and remark plugin share one source of truth, and fixes a unist-util-visit splice-resume bug that previously skipped nested
wrappers and adjacent JSX comments. Tests: 14 new (logic + edge cases). Smoke pipeline against the c15t fixture passes (200/200 .mdx → .md). --- packages/docs/src/components/callout.tsx | 38 +++-- packages/docs/src/components/card.tsx | 9 ++ packages/docs/src/components/index.ts | 10 +- .../src/components/package-command-tabs.tsx | 33 ++--- packages/docs/src/components/tabs.tsx | 17 ++- .../docs/src/internal/callout-variant.test.ts | 40 +++++ packages/docs/src/internal/callout-variant.ts | 42 ++++++ .../src/internal/package-managers.test.ts | 56 +++++++ .../docs/src/internal/package-managers.ts | 53 +++++++ packages/docs/src/remark/index.ts | 9 ++ .../docs/src/remark/plugins/callout.remark.ts | 3 + .../docs/src/remark/plugins/details.remark.ts | 62 ++++++++ .../plugins/package-command-tabs.remark.ts | 28 +--- .../plugins/remove-jsx-comments.remark.ts | 33 +++++ .../docs/src/remark/plugins/section.remark.ts | 29 ++++ .../docs/src/remark/remark-output.test.ts | 138 ++++++++++++++++++ 16 files changed, 541 insertions(+), 59 deletions(-) create mode 100644 packages/docs/src/internal/callout-variant.test.ts create mode 100644 packages/docs/src/internal/callout-variant.ts create mode 100644 packages/docs/src/internal/package-managers.test.ts create mode 100644 packages/docs/src/internal/package-managers.ts create mode 100644 packages/docs/src/remark/plugins/details.remark.ts create mode 100644 packages/docs/src/remark/plugins/remove-jsx-comments.remark.ts create mode 100644 packages/docs/src/remark/plugins/section.remark.ts diff --git a/packages/docs/src/components/callout.tsx b/packages/docs/src/components/callout.tsx index 1d30383..e6b8f60 100644 --- a/packages/docs/src/components/callout.tsx +++ b/packages/docs/src/components/callout.tsx @@ -1,34 +1,42 @@ import type { HTMLAttributes, ReactNode } from "react"; +import { + type CalloutTypeAlias, + type CalloutVariant, + calloutTitleCase, + normalizeCalloutVariant, +} from "../internal/callout-variant"; -export type CalloutVariant = - | "info" - | "warning" - | "success" - | "error" - | "canary" - | "deprecated" - | "experimental"; +export type { + CalloutTypeAlias, + CalloutVariant, +} from "../internal/callout-variant"; export type CalloutProps = HTMLAttributes & { variant?: CalloutVariant; + /** @deprecated Use `variant` instead. Kept for Fumadocs-authored MDX compatibility. */ + type?: CalloutTypeAlias; title?: string; children?: ReactNode; }; -function titleCase(value: string): string { - return value.charAt(0).toUpperCase() + value.slice(1); -} - export function Callout({ - variant = "info", + variant, + type, title, children, ...rest }: CalloutProps) { + const resolvedVariant = normalizeCalloutVariant(variant, type); + return ( -