diff --git a/packages/docusaurus-theme-classic/src/theme/Tabs/__tests__/index.test.tsx b/packages/docusaurus-theme-classic/src/theme/Tabs/__tests__/index.test.tsx
index f4d59c7409..90f150b6ef 100644
--- a/packages/docusaurus-theme-classic/src/theme/Tabs/__tests__/index.test.tsx
+++ b/packages/docusaurus-theme-classic/src/theme/Tabs/__tests__/index.test.tsx
@@ -187,4 +187,16 @@ describe('Tabs', () => {
);
}).not.toThrow();
});
+
+ it('accepts a single TabItem', () => {
+ expect(() => {
+ renderer.create(
+
+
+ Val1
+
+ ,
+ );
+ }).not.toThrow();
+ });
});
diff --git a/packages/docusaurus-theme-classic/src/theme/Tabs/index.tsx b/packages/docusaurus-theme-classic/src/theme/Tabs/index.tsx
index 59103c8d07..e989d082a5 100644
--- a/packages/docusaurus-theme-classic/src/theme/Tabs/index.tsx
+++ b/packages/docusaurus-theme-classic/src/theme/Tabs/index.tsx
@@ -109,6 +109,8 @@ function TabContent({
children,
selectedValue,
}: Props & ReturnType) {
+ // eslint-disable-next-line no-param-reassign
+ children = Array.isArray(children) ? children : [children];
if (lazy) {
const selectedTabItem = children.find(
(tabItem) => tabItem.props.value === selectedValue,
diff --git a/packages/docusaurus-theme-common/src/utils/tabsUtils.tsx b/packages/docusaurus-theme-common/src/utils/tabsUtils.tsx
index 403e023ef4..9a1d47ebdb 100644
--- a/packages/docusaurus-theme-common/src/utils/tabsUtils.tsx
+++ b/packages/docusaurus-theme-common/src/utils/tabsUtils.tsx
@@ -32,7 +32,9 @@ export interface TabValue {
export interface TabsProps {
readonly lazy?: boolean;
readonly block?: boolean;
- readonly children: readonly ReactElement[];
+ readonly children:
+ | readonly ReactElement[]
+ | ReactElement;
readonly defaultValue?: string | null;
readonly values?: readonly TabValue[];
readonly groupId?: string;