| |
| |
| |
| |
| import { type ReactNode, type CSSProperties } from "react"; |
|
|
| const PANEL_BG = "linear-gradient(135deg, oklch(0.12 0.016 240) 0%, oklch(0.10 0.014 240) 100%)"; |
| const PANEL_BORDER = "1px solid rgba(255,255,255,0.08)"; |
|
|
| interface PanelProps { |
| children: ReactNode; |
| className?: string; |
| style?: CSSProperties; |
| } |
|
|
| export function Panel({ children, className = "", style }: PanelProps) { |
| return ( |
| <div |
| className={className} |
| style={{ |
| background: PANEL_BG, |
| border: PANEL_BORDER, |
| borderRadius: "0.25rem", |
| ...style, |
| }} |
| > |
| {children} |
| </div> |
| ); |
| } |
|
|
| interface PanelHeaderProps { |
| children: ReactNode; |
| className?: string; |
| } |
|
|
| export function PanelHeader({ children, className = "" }: PanelHeaderProps) { |
| return ( |
| <div |
| className={`flex items-center gap-2 ${className}`} |
| style={{ |
| padding: "0.375rem 0.75rem", |
| borderBottom: "1px solid rgba(255,255,255,0.08)", |
| fontFamily: "'IBM Plex Mono', monospace", |
| fontSize: "0.65rem", |
| letterSpacing: "0.08em", |
| textTransform: "uppercase" as const, |
| color: "oklch(0.52 0.010 240)", |
| }} |
| > |
| {children} |
| </div> |
| ); |
| } |
|
|
| export function PanelDot({ color }: { color: string }) { |
| return ( |
| <span |
| style={{ |
| width: "0.375rem", |
| height: "0.375rem", |
| borderRadius: "50%", |
| background: color, |
| flexShrink: 0, |
| display: "inline-block", |
| }} |
| /> |
| ); |
| } |
|
|
| |
| export function TooltipPanel({ children }: { children: ReactNode }) { |
| return ( |
| <div |
| style={{ |
| background: PANEL_BG, |
| border: PANEL_BORDER, |
| borderRadius: "0.25rem", |
| padding: "0.375rem 0.5rem", |
| fontSize: "0.625rem", |
| fontFamily: "'IBM Plex Mono', monospace", |
| }} |
| > |
| {children} |
| </div> |
| ); |
| } |
|
|