import { type SafeHtml } from "./safe-html.js";
export { EMPTY_HTML, sanitizedHtml, type SafeHtml } from "./safe-html.js";
/** Escape HTML entities */
export declare function esc(s: string): string;
/** Escape for use in HTML attributes */
export declare function escAttr(s: string): string;
/**
* Render markdown-ish text to HTML (for assistant messages).
*
* Returns {@link SafeHtml}: it escapes the WHOLE input first and only ever adds markup written
* here, so the result is cleared for `SafeHtmlView`. That claim is the reason `sanitizedHtml` is
* called at the exits below rather than anywhere convenient — see safe-html.ts.
*/
export declare function renderMd(raw: string): SafeHtml;
/** Lightweight markdown for co-pilot: bold, code, bullets, linebreaks. Escapes first, like {@link renderMd}. */
export declare function mdLite(raw: string): SafeHtml;
/** Relative time label */
export declare function formatTime(iso: string): string;
/**
* Absolute date + time for a message stamp — e.g. "Jul 8, 9:01 PM", or "Jul 8, 2025, 9:01 PM"
* once the year stops being obvious. Unlike {@link formatTime} (relative "5m ago"), this always
* shows the calendar date AND clock time, for when you need to know exactly when each message
* happened. Same SQLite-UTC normalization as formatTime.
*
* ── Why the year is conditional (#426)
*
* This stamp sits at the right-hand end of a chat message header, on a 320px screen, under two
* absolutely-positioned action buttons. Measured in WebKit at `700 10px system-ui`, the year
* costs 30px of a 116px stamp — real width in the row where width is scarcest (#333).
*
* It is dropped only when it is the CURRENT year, because that is the only case where it says
* nothing: "8 Aug" on a row from this year is unambiguous, and "8 Aug" on a row from last year
* is a lie of omission. That distinction is what makes this safe for the callers outside the
* transcript — `IndexingTab`'s "Indexed …" and `SystemMessage` — which is why the option is
* made conditional rather than deleted.
*
* Note this reads the clock, so a stamp rendered on 31 Dec and left on screen over midnight
* keeps its old rendering until the component re-renders. That is a stale pixel, not a wrong
* one: the year it omits is still the year the reader is in.
*/
export declare function formatDateTime(iso: string): string;
export { renderTerminal, terminalTail } from "./terminal-render.js";
export { classifyMessage, isToolCallMessage, messageKey, toolCallSummary, type ChatMessageKind, type ChatMessageLike } from "./chat-message.js";
export { engineBin, engineInvocationMode, isClaudeEngine, missingWriteFlag, type EngineInvocationMode } from "./engine-posture.js";
//# sourceMappingURL=ui.d.ts.map