Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion demo/docusaurus.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import { myCustomApiMdGenerator } from "./customMdGenerators";

const config: Config = {
future: {
experimental_faster: (process.env.DOCUSAURUS_FASTER ?? "true") === "true",
faster: (process.env.DOCUSAURUS_FASTER ?? "true") === "true",
v4: true,
},

Expand Down
12 changes: 6 additions & 6 deletions demo/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,13 @@
"re-gen": "yarn clean-all-versions && yarn gen-all-versions"
},
"dependencies": {
"@docusaurus/core": "3.9.2",
"@docusaurus/faster": "3.9.2",
"@docusaurus/plugin-google-gtag": "3.9.2",
"@docusaurus/preset-classic": "3.9.2",
"@docusaurus/core": "3.10.0",
"@docusaurus/faster": "3.10.0",
"@docusaurus/plugin-google-gtag": "3.10.0",
"@docusaurus/preset-classic": "3.10.0",
"clsx": "^2.1.1",
"docusaurus-plugin-openapi-docs": "^4.6.0",
"docusaurus-theme-openapi-docs": "^4.6.0",
"docusaurus-plugin-openapi-docs": "*",
"docusaurus-theme-openapi-docs": "*",
"prism-react-renderer": "^2.3.0",
"react": "^19.0.0",
"react-dom": "^19.0.0"
Expand Down
14 changes: 7 additions & 7 deletions packages/docusaurus-plugin-openapi-docs/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,10 @@
"watch": "tsc --watch"
},
"devDependencies": {
"@docusaurus/plugin-content-docs": "^3.5.0",
"@docusaurus/types": "^3.5.0",
"@docusaurus/utils": "^3.5.0",
"@docusaurus/utils-validation": "^3.5.0",
"@docusaurus/plugin-content-docs": "^3.10.0",
"@docusaurus/types": "^3.10.0",
"@docusaurus/utils": "^3.10.0",
"@docusaurus/utils-validation": "^3.10.0",
"@types/fs-extra": "^11.0.4",
"@types/json-pointer": "^1.0.34",
"@types/json-schema": "^7.0.15",
Expand All @@ -57,9 +57,9 @@
"xml-formatter": "^3.6.6"
},
"peerDependencies": {
"@docusaurus/plugin-content-docs": "^3.5.0",
"@docusaurus/utils": "^3.5.0",
"@docusaurus/utils-validation": "^3.5.0",
"@docusaurus/plugin-content-docs": "^3.10.0",
"@docusaurus/utils": "^3.10.0",
"@docusaurus/utils-validation": "^3.10.0",
"react": "^16.8.4 || ^17.0.0 || ^18.0.0 || ^19.0.0"
},
"engines": {
Expand Down
8 changes: 4 additions & 4 deletions packages/docusaurus-theme-openapi-docs/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,9 @@
"watch": "concurrently --names \"lib,lib-next,tsc\" --kill-others \"yarn babel:lib --watch\" \"yarn babel:lib-next --watch\" \"yarn tsc --watch\""
},
"devDependencies": {
"@docusaurus/theme-classic": "^3.5.0",
"@docusaurus/theme-common": "^3.5.0",
"@docusaurus/types": "^3.5.0",
"@docusaurus/theme-classic": "^3.10.0",
"@docusaurus/theme-common": "^3.10.0",
"@docusaurus/types": "^3.10.0",
"@types/crypto-js": "^4.2.2",
"@types/file-saver": "^2.0.7",
"@types/lodash": "^4.17.20",
Expand Down Expand Up @@ -73,7 +73,7 @@
"xml-formatter": "^3.6.6"
},
"peerDependencies": {
"@docusaurus/theme-common": "^3.5.0",
"@docusaurus/theme-common": "^3.10.0",
"docusaurus-plugin-openapi-docs": "^4.0.0",
"docusaurus-plugin-sass": "^0.2.3",
"react": "^16.8.4 || ^17.0.0 || ^18.0.0 || ^19.0.0",
Expand Down
26 changes: 25 additions & 1 deletion packages/docusaurus-theme-openapi-docs/src/theme-classic.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,15 @@ declare module "@docusaurus/theme-common/internal" {
import { Props as ILineProps } from "@theme/CodeBlock/Line";
import { PrismTheme } from "prism-react-renderer";

export interface TabItemProps {
readonly children: ReactNode;
readonly value: string;
readonly default?: boolean;
readonly label?: string;
readonly className?: string;
readonly attributes?: { [key: string]: unknown };
}

export interface TabProps extends ITabsProps {
length?: number;
}
Expand Down Expand Up @@ -53,12 +62,27 @@ declare module "@docusaurus/theme-common/internal" {
content: PropDocContent;
});

export function useTabs(props: TabProps): {
export function useTabsContextValue(props: TabProps): {
selectedValue: string;
selectValue: (value: string) => void;
tabValues: readonly TabValue[];
lazy: boolean;
block: boolean;
};

export function useTabs(): {
selectedValue: string;
selectValue: (value: string) => void;
tabValues: readonly TabValue[];
lazy: boolean;
block: boolean;
};

export function TabsProvider(props: {
children: ReactNode;
value: ReturnType<typeof useTabsContextValue>;
}): ReactNode;

export function parseLines(
content: string,
options: {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,12 @@ import React, { cloneElement, ReactElement, useEffect, useRef } from "react";

import {
sanitizeTabsChildren,
type TabItemProps,
type TabProps,
TabsProvider,
useScrollPositionBlocker,
useTabs,
useTabsContextValue,
} from "@docusaurus/theme-common/internal";
import { TabItemProps } from "@docusaurus/theme-common/lib/utils/tabsUtils";
import useIsBrowser from "@docusaurus/useIsBrowser";
import clsx from "clsx";

Expand Down Expand Up @@ -43,7 +44,7 @@ function TabList({
selectedValue,
selectValue,
tabValues,
}: CodeTabsProps & ReturnType<typeof useTabs>) {
}: CodeTabsProps & ReturnType<typeof useTabsContextValue>) {
const tabRefs = useRef<(HTMLLIElement | null)[]>([]);
const tabsScrollContainerRef = useRef<any>(null);
const { blockElementScrollPositionUntilNextRender } =
Expand Down Expand Up @@ -192,7 +193,8 @@ function TabContent({
lazy,
children,
selectedValue,
}: CodeTabsProps & ReturnType<typeof useTabs>): React.JSX.Element | null {
}: CodeTabsProps &
ReturnType<typeof useTabsContextValue>): React.JSX.Element | null {
const childTabs = (Array.isArray(children) ? children : [children]).filter(
Boolean
) as ReactElement<TabItemProps>[];
Expand All @@ -207,28 +209,26 @@ function TabContent({
return cloneElement(selectedTabItem, { className: "margin-top--md" });
}
return (
<div className="margin-top--md openapi-tabs__code-content">
{childTabs.map((tabItem, i) =>
cloneElement(tabItem, {
key: i,
hidden: tabItem.props.value !== selectedValue,
})
)}
</div>
<div className="margin-top--md openapi-tabs__code-content">{childTabs}</div>
);
}

function TabsComponent(props: CodeTabsProps & Props): React.JSX.Element {
const tabs = useTabs(props);
const tabs = useTabsContextValue(props);
const { className } = props;

return (
<div
className={clsx("tabs-container openapi-tabs__code-container", className)}
>
<TabList {...props} {...tabs} />
<TabContent {...props} {...tabs} />
</div>
<TabsProvider value={tabs}>
<div
className={clsx(
"tabs-container openapi-tabs__code-container",
className
)}
>
<TabList {...props} {...tabs} />
<TabContent {...props} {...tabs} />
</div>
</TabsProvider>
);
}

Expand Down
33 changes: 14 additions & 19 deletions packages/docusaurus-theme-openapi-docs/src/theme/ApiTabs/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,12 @@ import React, {

import {
sanitizeTabsChildren,
type TabItemProps,
TabProps,
TabsProvider,
useScrollPositionBlocker,
useTabs,
useTabsContextValue,
} from "@docusaurus/theme-common/internal";
import { TabItemProps } from "@docusaurus/theme-common/lib/utils/tabsUtils";
import { translate } from "@docusaurus/Translate";
import useIsBrowser from "@docusaurus/useIsBrowser";
import Heading from "@theme/Heading";
Expand All @@ -42,7 +43,7 @@ function TabList({
message: "Responses",
}),
id = "responses",
}: TabListProps & ReturnType<typeof useTabs>) {
}: TabListProps & ReturnType<typeof useTabsContextValue>) {
const tabRefs: (HTMLLIElement | null)[] = [];
const { blockElementScrollPositionUntilNextRender } =
useScrollPositionBlocker();
Expand Down Expand Up @@ -194,7 +195,8 @@ function TabContent({
lazy,
children,
selectedValue,
}: TabProps & ReturnType<typeof useTabs>): React.JSX.Element | null {
}: TabProps &
ReturnType<typeof useTabsContextValue>): React.JSX.Element | null {
const childTabs = (Array.isArray(children) ? children : [children]).filter(
Boolean
) as ReactElement<TabItemProps>[];
Expand All @@ -208,24 +210,17 @@ function TabContent({
}
return cloneElement(selectedTabItem, { className: "margin-top--md" });
}
return (
<div className="margin-top--md">
{childTabs.map((tabItem, i) =>
cloneElement(tabItem, {
key: i,
hidden: tabItem.props.value !== selectedValue,
})
)}
</div>
);
return <div className="margin-top--md">{childTabs}</div>;
}
function TabsComponent(props: TabListProps): React.JSX.Element {
const tabs = useTabs(props);
const tabs = useTabsContextValue(props);
return (
<div className="openapi-tabs__container">
<TabList {...props} {...tabs} />
<TabContent {...props} {...tabs} />
</div>
<TabsProvider value={tabs}>
<div className="openapi-tabs__container">
<TabList {...props} {...tabs} />
<TabContent {...props} {...tabs} />
</div>
</TabsProvider>
);
}
export default function ApiTabs(props: TabListProps): React.JSX.Element {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,12 @@ import React, {

import {
sanitizeTabsChildren,
type TabItemProps,
TabProps,
TabsProvider,
useScrollPositionBlocker,
useTabs,
useTabsContextValue,
} from "@docusaurus/theme-common/internal";
import { TabItemProps } from "@docusaurus/theme-common/lib/utils/tabsUtils";
import useIsBrowser from "@docusaurus/useIsBrowser";
import clsx from "clsx";
import flatten from "lodash/flatten";
Expand All @@ -30,7 +31,7 @@ function TabList({
selectedValue,
selectValue,
tabValues,
}: TabProps & ReturnType<typeof useTabs>) {
}: TabProps & ReturnType<typeof useTabsContextValue>) {
const tabRefs: (HTMLLIElement | null)[] = [];
const { blockElementScrollPositionUntilNextRender } =
useScrollPositionBlocker();
Expand Down Expand Up @@ -172,7 +173,8 @@ function TabContent({
lazy,
children,
selectedValue,
}: TabProps & ReturnType<typeof useTabs>): React.JSX.Element | null {
}: TabProps &
ReturnType<typeof useTabsContextValue>): React.JSX.Element | null {
const childTabs = (Array.isArray(children) ? children : [children]).filter(
Boolean
) as ReactElement<TabItemProps>[];
Expand All @@ -187,24 +189,17 @@ function TabContent({
}
return cloneElement(selectedTabItem, { className: "margin-top--md" });
}
return (
<div className="margin-top--md">
{childTabs.map((tabItem, i) =>
cloneElement(tabItem, {
key: i,
hidden: tabItem.props.value !== selectedValue,
})
)}
</div>
);
return <div className="margin-top--md">{childTabs}</div>;
}
function TabsComponent(props: TabProps): React.JSX.Element {
const tabs = useTabs(props);
const tabs = useTabsContextValue(props);
return (
<div className="openapi-tabs__container">
<TabList {...props} {...tabs} />
<TabContent {...props} {...tabs} />
</div>
<TabsProvider value={tabs}>
<div className="openapi-tabs__container">
<TabList {...props} {...tabs} />
<TabContent {...props} {...tabs} />
</div>
</TabsProvider>
);
}
export default function DiscriminatorTabs(props: TabProps): React.JSX.Element {
Expand Down
Loading
Loading