import type { ShelfShareRow, ShoppingEnvelope, SkuReport } from '../shopping/index.js'; import { type TextRenderOptions } from './terminal.js'; /** * The one-line result for a product in the summary. * * Four outcomes, kept distinct on purpose: never asked and asked-but-unanswered * are an input problem and a RUN problem, and collapsing either into "not * recommended" accuses a product of losing a contest it never entered * (rule #6). */ export declare function summaryStatus(sku: SkuReport): string; /** The score cell, or a dash when there is no score to show (never a 0). */ export declare function summaryScore(sku: SkuReport): string; /** * Said once, under the summary: the products were asked DIFFERENT questions. * Without it the list reads as a head-to-head ranking, which it is not. */ export declare const SHOPPING_ORDER_NOTE = "Sorted by each product's own visibility. Products were asked different questions, so this compares how decisively each one wins its own shelf."; /** The shelf as one honest line: who the engines named, and how often. */ export declare function shelfLine(shelf: ShelfShareRow[]): string; /** The honest sampling line for a shopping run. */ export declare function shoppingSamplingLine(env: ShoppingEnvelope): string; /** The `shopping` terminal output. Ranking delta first, then each product. */ export declare function renderShoppingText(env: ShoppingEnvelope, opts?: TextRenderOptions): string; /** Stable pretty JSON of the shopping envelope for `--json` (no ANSI). */ export declare function renderShoppingJson(env: ShoppingEnvelope): string; /** Render the full self-contained HTML report for a shopping run. */ export declare function renderShoppingHtml(env: ShoppingEnvelope): string;