All files / shared / components Page.tsx

100% Statements 2/2
100% Branches 5/5
100% Functions 2/2
100% Lines 2/2

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46                                          4x                           3x                    
import type { ReactNode } from 'react'
import { Breadcrumb } from './Breadcrumb'
 
interface BreadcrumbItem {
  label: string
  href?: string
}
 
interface PageHeaderProps {
  title: ReactNode
  breadcrumbs?: BreadcrumbItem[]
  actions?: ReactNode
}
 
interface PageProps {
  header?: ReactNode
  children: ReactNode
  className?: string
}
 
function PageHeader({ title, breadcrumbs, actions }: PageHeaderProps) {
  return (
    <div className="flex items-center justify-between gap-4">
      <div>
        {breadcrumbs && breadcrumbs.length > 0 && (
          <Breadcrumb items={breadcrumbs} />
        )}
        <h1 className="text-2xl font-semibold">{title}</h1>
      </div>
      {actions && <div className="flex items-center gap-2">{actions}</div>}
    </div>
  )
}
 
function Page({ header, children, className }: PageProps) {
  return (
    <div className={className}>
      {header}
      <main>{children}</main>
    </div>
  )
}
 
export { Page, PageHeader }
export type { BreadcrumbItem, PageHeaderProps, PageProps }