/** * External dependencies */ import clsx from 'clsx'; /** * Internal dependencies */ import Header from './header'; import NavigableRegion from '../navigable-region'; import { SidebarToggleFill } from './sidebar-toggle-slot'; import styles from './style.module.css'; function Page( { headingLevel, breadcrumbs, badges, visual, title, subTitle, children, className, actions, ariaLabel, hasPadding = false, showSidebarToggle = true, }: { headingLevel?: 1 | 2 | 3 | 4 | 5 | 6; breadcrumbs?: React.ReactNode; badges?: React.ReactNode; /** * Optional visual mark (icon, image, etc.) shown before the page title or breadcrumbs. * * The visual is rendered outside the page heading element and is treated as purely * decorative in the accessibility tree (the wrapper uses `aria-hidden`). Do not pass * interactive content (links, buttons, tooltips) or non-redundant text here. * * When passing an ``, use `alt=""` if the image does not add meaning beyond what is * already available in the visible title, breadcrumbs, or surrounding copy. Meaningful * images should not rely on this slot for their accessible name. */ visual?: React.ReactNode; title?: React.ReactNode; subTitle?: React.ReactNode; children: React.ReactNode; className?: string; actions?: React.ReactNode; ariaLabel?: string; hasPadding?: boolean; showSidebarToggle?: boolean; } ) { const classes = clsx( styles.page, className ); const effectiveAriaLabel = ariaLabel ?? ( typeof title === 'string' ? title : '' ); return ( { ( title || breadcrumbs || badges || actions || visual ) && (
) } { hasPadding ? (
{ children }
) : ( children ) } ); } Page.SidebarToggleFill = SidebarToggleFill; export default Page;