/** @jsxImportSource @opentui/solid */
import { compressPermission } from "../compress-permission"
import { analyzeContextTokens } from "../commands/context"
import type { PluginConfig } from "../config"
import type { SessionState, WithParts } from "../state"
import { formatTokenCount } from "../ui/utils"
import { TextAttributes } from "@opentui/core"
import { formatDuration, formatRatio } from "./format"
import { ActionRow, Card, DcpFrame, Metric, Progress, PromptRow, StatusPill } from "./ui"
import type { StatsReport, TuiApi } from "./types"
export function StatusDialog(props: {
api: TuiApi
title: string
eyebrow: string
message: string
}) {
return (
{props.message}
)
}
export function ContextDialog(props: {
api: TuiApi
state: SessionState
messages: WithParts[]
onBack: () => void
}) {
const theme = props.api.theme.current
const breakdown = analyzeContextTokens(props.state, props.messages)
const total = Math.max(0, breakdown.total)
const activePruned = breakdown.prunedToolCount + breakdown.prunedMessageCount
return (
)
}
export function StatsDialog(props: { api: TuiApi; report: StatsReport; onBack: () => void }) {
const theme = props.api.theme.current
const ratio = formatRatio(props.report.sessionTokens, props.report.sessionSummaryTokens)
return (
)
}
export function PanelDialog(props: {
api: TuiApi
state: SessionState
config: PluginConfig
onContext: () => void
onStats: () => void
onManual: (enabled: boolean) => void
}) {
const theme = props.api.theme.current
const canCompress = compressPermission(props.state, props.config) !== "deny"
return (
{canCompress ? (
) : (
Compression is denied by permissions.
)}
)
}
function ManualModeToggle(props: {
api: TuiApi
state: SessionState
onToggle: (enabled: boolean) => void
}) {
const theme = props.api.theme.current
const enabled = !!props.state.manualMode
const track = enabled ? theme.success : theme.error
return (
Manual mode
props.onToggle(!enabled)}
>
{enabled ? " ■" : "■ "}
)
}