diff --git a/packages/core-components/src/components/TabbedLayout/RoutedTabs.tsx b/packages/core-components/src/components/TabbedLayout/RoutedTabs.tsx index 5debafd3f8..027d63e1a0 100644 --- a/packages/core-components/src/components/TabbedLayout/RoutedTabs.tsx +++ b/packages/core-components/src/components/TabbedLayout/RoutedTabs.tsx @@ -80,6 +80,7 @@ export function RoutedTabs(props: { routes: SubRoute[] }) { tabs={headerTabs} selectedIndex={index} onChange={onTabChange} + className="entity-page-tabs" /> diff --git a/packages/core-components/src/layout/Header/Header.tsx b/packages/core-components/src/layout/Header/Header.tsx index bb4d19b949..cb47550b6e 100644 --- a/packages/core-components/src/layout/Header/Header.tsx +++ b/packages/core-components/src/layout/Header/Header.tsx @@ -113,6 +113,7 @@ type Props = { tooltip?: string; type?: string; typeLink?: string; + className: string | ''; }; type TypeFragmentProps = { @@ -208,6 +209,7 @@ export function Header(props: PropsWithChildren) { tooltip, type, typeLink, + className, } = props; const classes = useStyles(); const configApi = useApi(configApiRef); @@ -220,7 +222,7 @@ export function Header(props: PropsWithChildren) { return ( <> -
+
void; selectedIndex?: number; + className: string | ''; }; /** @@ -76,7 +77,7 @@ type HeaderTabsProps = { * */ export function HeaderTabs(props: HeaderTabsProps) { - const { tabs, onChange, selectedIndex } = props; + const { tabs, onChange, selectedIndex, className } = props; const [selectedTab, setSelectedTab] = useState(selectedIndex ?? 0); const styles = useStyles(); @@ -104,6 +105,7 @@ export function HeaderTabs(props: HeaderTabsProps) { aria-label="scrollable auto tabs example" onChange={handleChange} value={selectedTab} + className={className} > {tabs.map((tab, index) => ( { title={} pageTitleOverride={headerTitle} type={headerType} + className="entity-page-header" > {entity && ( <> diff --git a/plugins/techdocs/src/reader/components/TechDocsReaderPageContent/dom.tsx b/plugins/techdocs/src/reader/components/TechDocsReaderPageContent/dom.tsx index 9f561bfcd3..497a3e1e5f 100644 --- a/plugins/techdocs/src/reader/components/TechDocsReaderPageContent/dom.tsx +++ b/plugins/techdocs/src/reader/components/TechDocsReaderPageContent/dom.tsx @@ -81,9 +81,25 @@ export const useTechDocsReaderDom = ( if (isMobileMedia) { element.style.top = '0px'; } else { - const domTop = dom.getBoundingClientRect().top ?? 0; + // Docs shown in entity pages should consider the entity tabs and multiple paddings at the top + const entityPageHeader = document.querySelector( + '.entity-page-header', + ); + const entityPageTabs = + document.querySelector('.entity-page-tabs'); + const entityPageHeaderTop = + entityPageHeader?.getBoundingClientRect().height ?? 0; + const entityPageTabsTop = + entityPageTabs?.getBoundingClientRect().height ?? 0; + + let domTop = dom.getBoundingClientRect().top ?? 0; const tabs = dom.querySelector('.md-container > .md-tabs'); const tabsHeight = tabs?.getBoundingClientRect().height ?? 0; + + // In entity pages the sidebars should stop at the tabs + if (domTop < entityPageHeaderTop + entityPageTabsTop) { + domTop = entityPageHeaderTop + entityPageTabsTop; + } element.style.top = `${Math.max(domTop, 0) + tabsHeight}px`; }