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()}
);
}