/**
* A written attribute whose text is blank is written, not absent.
*
* Every per-type check below used to ask only whether the attribute NODE was
* there, so `value=""` walked past a guard meant to catch a missing list and
* each generator then improvised. Measured across the five implementations, the
* same six files disagreed:
*
* reference refused, four ports printed 4 2 8
* reference printed empty cells, four ports refused
* reference counted 0 1 2, four ports refused
*
* The line between blank and absent is not a matter of taste, and the engines
* already draw it in the one place they agree: `value=","` is two options that
* both happen to be empty, and all five accept it; `value="()"` is a pattern
* that matches the empty string, and all five accept that too. What none of them
* can honour is a list with NO options and a pattern that is NO pattern — there
* is nothing to draw from, so the value has to be invented. That is the proof a
* refusal needs, and it is why `,` and `()` stay legal while `""` does not.
*
* Whitespace counts as blank: a lone space is trimmed away before anything reads
* it, so `value=" "` names no option either.
*/
import type { AttrContext } from '../generated/TDCParser.js';
/** The attribute node by name, so a complaint can point at its value. */
export declare function findAttr(attrs: readonly AttrContext[], name: string): AttrContext | undefined;
/**
* True when the attribute text is nothing but whitespace.
*
* Written as a test on the VALUE rather than on the pair so each call site can
* keep the `!attrNode ||` it already had, and with it the narrowing that lets the
* rest of the check point at the attribute.
*/
export declare function isBlank(value: string | undefined): boolean;
//# sourceMappingURL=blank-value.d.ts.map