/** * Operate admin datatable — sort, empty, search, inline cell edit. * DOM-only; no kernel imports. * Specs: trellis-admin-datatable-extract.md, trellis-admin-datatable-cell-edit.md */ export type TableEmptyState = 'hidden' | 'no-lanes' | 'no-matches'; export type CellCommitDetail = { entityId: string; col: 'branch' | 'issue'; field: string; value: string | null; }; export type AdminDatatableHandle = { applySearchQuery(q: string): void; refresh(): void; destroy(): void; }; /** Pure: compare two cell strings (numeric when both parse). */ export declare function compareCellValues(av: string, bv: string): number; /** Pure: empty veil state from row counts. */ export declare function resolveEmptyState(rowCount: number, visibleCount: number): TableEmptyState; /** Empty/whitespace OK (→ null); else must match TRL-N. */ export declare function isValidIssueId(raw: string): boolean; /** Empty → null; else canonical TRL-N (uppercase prefix). */ export declare function normalizeIssueCommit(raw: string): string | null; export declare function isValidBranchCommit(raw: string): boolean; /** * Resolve lane entity id for edit/commit. * Prefer data-entity-id; fall back to lane column text (TML may lag attrs). */ export declare function resolveLaneEntityId(tr: HTMLTableRowElement): string; export type CellEditCol = 'branch' | 'issue'; /** Last painted branch/issue per lane — TML may lag textContent on first focus/F2. */ export type CellValueCache = Map>>; /** Pure: resolve edit baseline from live cell + optional cache (Escape restore target). */ export declare function resolveCellEditPrior(td: HTMLTableCellElement, tr: HTMLTableRowElement, col: CellEditCol, cache?: Readonly): { priorRaw: string; priorDisplay: string; }; export declare function mountAdminDatatable(root: HTMLElement, opts?: { onEmptyChange?: (state: TableEmptyState) => void; onCellCommit?: (detail: CellCommitDetail) => void | Promise; }): AdminDatatableHandle; //# sourceMappingURL=admin-datatable.d.ts.map