Files
Charon/frontend/src/components/layout/PageShell.tsx
GitHub Actions 3169b05156 fix: skip incomplete system log viewer tests
- Marked 12 tests as skip pending feature implementation
- Features tracked in GitHub issue #686 (system log viewer feature completion)
- Tests cover sorting by timestamp/level/method/URI/status, pagination controls, filtering by text/level, download functionality
- Unblocks Phase 2 at 91.7% pass rate to proceed to Phase 3 security enforcement validation
- TODO comments in code reference GitHub #686 for feature completion tracking
- Tests skipped: Pagination (3), Search/Filter (2), Download (2), Sorting (1), Log Display (4)
2026-02-09 21:55:55 +00:00

48 lines
1.2 KiB
TypeScript

import * as React from 'react'
import { cn } from '../../utils/cn'
export interface PageShellProps {
title: string
description?: string
actions?: React.ReactNode
children: React.ReactNode
className?: string
}
/**
* PageShell - Consistent page wrapper component
*
* Provides standardized page layout with:
* - Title (h1, text-2xl font-bold)
* - Optional description (text-sm text-content-secondary)
* - Optional actions slot for buttons
* - Responsive flex layout (column on mobile, row on desktop)
* - Consistent page spacing
*/
export function PageShell({
title,
description,
actions,
children,
className,
}: PageShellProps) {
return (
<div className={cn('space-y-6', className)}>
<header className="flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between">
<div className="min-w-0 flex-1">
<h1 className="text-2xl font-bold text-content-primary truncate">
{title}
</h1>
{description && (
<p className="mt-1 text-sm text-content-secondary">{description}</p>
)}
</div>
{actions && (
<div className="flex shrink-0 items-center gap-3">{actions}</div>
)}
</header>
{children}
</div>
)
}