import { CoID, RawCoValue } from "cojson"; import { styled } from "goober"; import React, { type PropsWithChildren, useState } from "react"; import { Button } from "../ui/button.js"; import { Input } from "../ui/input.js"; import { Breadcrumbs } from "./breadcrumbs.js"; import { useRouter } from "../router/context.js"; import type { InspectorTab } from "../in-app.js"; export function Header({ showClose = false, onClose, activeTab, onTabChange, children, }: PropsWithChildren<{ showClose?: boolean; onClose?: () => void; activeTab?: InspectorTab; onTabChange?: (tab: InspectorTab) => void; }>) { const [coValueId, setCoValueId] = useState | "">(""); const { path, setPage } = useRouter(); const handleCoValueIdSubmit = (e: React.FormEvent) => { e.preventDefault(); if (coValueId) { setPage(coValueId); } setCoValueId(""); }; return ( {activeTab && onTabChange && ( onTabChange("inspector")} > Inspector onTabChange("performance")} > Performance )} {(activeTab === "inspector" || !activeTab) && ( <> {path.length !== 0 && (
setCoValueId(e.target.value as CoID) } /> )} )} {children} {showClose && ( )}
); } const HeaderContainer = styled("div")` display: flex; align-items: center; gap: 1rem; padding: 0 0.75rem; margin: 0.75rem 0; `; const Form = styled("form")` width: 24rem; `; const TabBar = styled("div")` display: flex; gap: 0.25rem; background-color: var(--j-foreground); border-radius: var(--j-radius-lg); padding: 0.25rem; `; const Tab = styled("button")<{ active?: boolean }>` padding: 0.375rem 0.75rem; border: none; border-radius: var(--j-radius-md); font-size: 0.875rem; font-weight: 500; cursor: pointer; transition: all 0.15s ease; ${(props) => props.active ? ` background-color: white; color: var(--j-text-color-strong); box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); @media (prefers-color-scheme: dark) { background-color: var(--j-neutral-800); } ` : ` background-color: transparent; color: var(--j-neutral-500); &:hover { color: var(--j-text-color-strong); } `} `; const Spacer = styled("div")` flex: 1; `;