export type BorderStyle = "solid" | "dashed" | "dotted"; export interface BorderSides { top: boolean; right: boolean; bottom: boolean; left: boolean; } export interface BorderDraft { sides: BorderSides; style: BorderStyle; widthPx: number; hex: string; } export interface TableBorderPopoverProps { x: number; y: number; initial: BorderDraft; /** Up to 4 previously-committed border colours, most-recent first - same pattern as the other colour buckets. */ recentColors?: readonly string[]; /** Fires on every change (a side toggled, style/width picked, or a colour drag frame) - the caller live-previews it on the real cell(s), same pattern as the plain colour picker's onPreview. */ onPreview: (draft: BorderDraft) => void; /** Fires once, only from the explicit Apply button - unlike ColorPickerPopover, this composite dialog (four independent fields assembled together) commits on a deliberate action, not on any dismissal. */ onApply: (draft: BorderDraft) => void; /** Fires from Cancel, Escape, or an outside click - reverts to `initial`. */ onCancel: () => void; } export declare const BORDER_WIDTH_PRESETS: readonly [{ readonly id: "thin"; readonly label: "Thin"; readonly px: 2; }, { readonly id: "medium"; readonly label: "Medium"; readonly px: 3; }, { readonly id: "thick"; readonly label: "Thick"; readonly px: 4; }]; /** * "Border options" - one popover combining every dimension of a cell * border, replacing what used to be a separate toolbar-dropdown width *