@ -3,7 +3,7 @@ import classNames from 'classnames';
import React , { PropsWithChildren } from 'react' ;
import { GrafanaTheme2 , PageLayoutType } from '@grafana/data' ;
import { useStyles2 } from '@grafana/ui' ;
import { useStyles2 , LinkButton } from '@grafana/ui' ;
import { useGrafana } from 'app/core/context/GrafanaContext' ;
import { CommandPalette } from 'app/features/commandPalette/CommandPalette' ;
import { KioskMode } from 'app/types' ;
@ -34,34 +34,39 @@ export function AppChrome({ children }: Props) {
// doesn't get re-mounted when chromeless goes from true to false.
return (
< main className = { classNames ( 'main-view' , searchBarHidden && 'main-view--search-bar-hidden' ) } >
< div className = { classNames ( 'main-view' , searchBarHidden && 'main-view--search-bar-hidden' ) } >
{ ! state . chromeless && (
< div className = { cx ( styles . topNav ) } >
{ ! searchBarHidden && < TopSearchBar / > }
< NavToolbar
searchBarHidden = { searchBarHidden }
sectionNav = { state . sectionNav . node }
pageNav = { state . pageNav }
actions = { state . actions }
onToggleSearchBar = { chrome . onToggleSearchBar }
onToggleMegaMenu = { chrome . onToggleMegaMenu }
onToggleKioskMode = { chrome . onToggleKioskMode }
/ >
< / div >
< >
< LinkButton className = { styles . skipLink } href = "#pageContent" >
Skip to main content
< / LinkButton >
< div className = { cx ( styles . topNav ) } >
{ ! searchBarHidden && < TopSearchBar / > }
< NavToolbar
searchBarHidden = { searchBarHidden }
sectionNav = { state . sectionNav . node }
pageNav = { state . pageNav }
actions = { state . actions }
onToggleSearchBar = { chrome . onToggleSearchBar }
onToggleMegaMenu = { chrome . onToggleMegaMenu }
onToggleKioskMode = { chrome . onToggleKioskMode }
/ >
< / div >
< / >
) }
< div className = { contentClass } >
< main className = { contentClass } id = "pageContent" >
< div className = { styles . panes } >
{ state . layout === PageLayoutType . Standard && state . sectionNav && < SectionNav model = { state . sectionNav } / > }
< div className = { styles . pageContainer } > { children } < / div >
< / div >
< / div >
< / main >
{ ! state . chromeless && (
< >
< MegaMenu searchBarHidden = { searchBarHidden } onClose = { ( ) = > chrome . setMegaMenu ( false ) } / >
< CommandPalette / >
< / >
) }
< / main >
< / div >
) ;
}
@ -112,5 +117,15 @@ const getStyles = (theme: GrafanaTheme2) => {
flexGrow : 1 ,
minHeight : 0 ,
} ) ,
skipLink : css ( {
position : 'absolute' ,
top : - 1000 ,
':focus' : {
left : theme.spacing ( 1 ) ,
top : theme.spacing ( 1 ) ,
zIndex : theme.zIndex.portal ,
} ,
} ) ,
} ;
} ;