diff --git a/packages/docusaurus-theme-classic/src/theme/Tabs/index.tsx b/packages/docusaurus-theme-classic/src/theme/Tabs/index.tsx index f714a15ff1ef..19933ce069b2 100644 --- a/packages/docusaurus-theme-classic/src/theme/Tabs/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/Tabs/index.tsx @@ -5,7 +5,7 @@ * LICENSE file in the root directory of this source tree. */ -import React, {useState, Children, ReactElement} from 'react'; +import React, {useState, Children, ReactElement, useEffect} from 'react'; import useUserPreferencesContext from '@theme/hooks/useUserPreferencesContext'; import clsx from 'clsx'; @@ -15,6 +15,7 @@ import styles from './styles.module.css'; const keys = { left: 37, right: 39, + tab: 9, }; type Props = { @@ -29,6 +30,7 @@ function Tabs(props: Props): JSX.Element { const {block, children, defaultValue, values, groupId} = props; const {tabGroupChoices, setTabGroupChoices} = useUserPreferencesContext(); const [selectedValue, setSelectedValue] = useState(defaultValue); + const [keyboardPress, setKeyboardPress] = useState(false); if (groupId != null) { const relevantTabGroupChoice = tabGroupChoices[groupId]; @@ -83,6 +85,23 @@ function Tabs(props: Props): JSX.Element { } }; + const handleKeyboardEvent = (event) => { + if (event.metaKey || event.altKey || event.ctrlKey) { + return; + } + + setKeyboardPress(true); + }; + + const handleMouseEvent = () => { + setKeyboardPress(false); + }; + + useEffect(() => { + window.addEventListener('keydown', handleKeyboardEvent); + window.addEventListener('mousedown', handleMouseEvent); + }, []); + return (