Function
AppPageFrame
({
children,
mainId = "page-main",
className,
surface = "studio",
mainClassName,
ariaLabelledBy,
showSkipLink = true,
}: AppPageFrameProps)
Source from the content-addressed store, hash-verified
| 22 | * Shared layout: skip link, `touch-manipulation`, and a focusable `<main>` landmark (Web Interface Guidelines). |
| 23 | */ |
| 24 | export function AppPageFrame({ |
| 25 | children, |
| 26 | mainId = "page-main", |
| 27 | className, |
| 28 | surface = "studio", |
| 29 | mainClassName, |
| 30 | ariaLabelledBy, |
| 31 | showSkipLink = true, |
| 32 | }: AppPageFrameProps) { |
| 33 | return ( |
| 34 | <div |
| 35 | className={cn( |
| 36 | "relative min-h-screen touch-manipulation", |
| 37 | surface === "studio" && "bg-gradient-to-b from-background via-background to-muted/15", |
| 38 | className, |
| 39 | )} |
| 40 | > |
| 41 | {showSkipLink ? ( |
| 42 | <a href={`#${mainId}`} className={skipToContentLinkClassName}> |
| 43 | Skip to content |
| 44 | </a> |
| 45 | ) : null} |
| 46 | <main |
| 47 | id={mainId} |
| 48 | className={cn("scroll-mt-8 outline-none", mainClassName)} |
| 49 | tabIndex={-1} |
| 50 | {...(ariaLabelledBy ? { "aria-labelledby": ariaLabelledBy } : {})} |
| 51 | > |
| 52 | {children} |
| 53 | </main> |
| 54 | </div> |
| 55 | ); |
| 56 | } |
Callers
nothing calls this directly
Tested by
no test coverage detected