import type { ButtonHTMLAttributes, ReactNode } from "react"; export interface AppHeaderProps { brand: ReactNode; brandHref?: string; brandLabel?: string; /** Opt in only for a light, single-color mark, never a full-color image. */ brandMonochrome?: boolean; left?: ReactNode; center?: ReactNode; right?: ReactNode; } export function AppHeader({ brand, brandHref, brandLabel = "NODE.DC", brandMonochrome = false, left, center, right, }: AppHeaderProps) { const brandNode = brandHref ? ( {brand} ) : ( {brand} ); return (
{brandNode}{left}
{center}
{right}
); } export interface HeaderNavigationItem { value: T; label: ReactNode; disabled?: boolean; } export interface HeaderNavigationProps { label: string; value?: T; items: readonly HeaderNavigationItem[]; onChange: (value: T) => void; } export function HeaderNavigation({ label, value, items, onChange }: HeaderNavigationProps) { return ( ); } export interface HeaderProfileProps { children: ReactNode; } export function HeaderProfile({ children }: HeaderProfileProps) { return
{children}
; } export interface HeaderProfileButtonProps extends Omit, "className" | "style"> {} export function HeaderProfileButton({ children, type = "button", ...props }: HeaderProfileButtonProps) { return ; } export interface HeaderAvatarProps { label: string; imageUrl?: string; } export function HeaderAvatar({ label, imageUrl }: HeaderAvatarProps) { return ( {imageUrl ? : label.slice(0, 2).toUpperCase()} ); } export interface HeaderWorkspaceProps { label: string; imageUrl?: string; kind?: "mark" | "avatar"; monochrome?: boolean; } export function HeaderWorkspace({ label, imageUrl, kind = "mark", monochrome = false }: HeaderWorkspaceProps) { return ( {imageUrl ? : label.slice(0, 2).toUpperCase()} ); }