/** Text ink as an alias table — the semantic layer over the palette, addressable. The palette * (`colors.zinc[600]`) holds values; this table holds the decisions every component addresses ink * through, so a role is decided once rather than re-made at call sites against a third-party ramp. It * serializes: {@link textInkTokens} emits W3C Design Tokens with aliases intact (`{color.zinc.900}`), * which Figma imports as alias variables, so re-pointing a role moves design and code together. A table, * so hand-rolled DOM can name a role without rendering a component. */ export interface InkBlend { /** Lighter first. */ readonly between: readonly [string, string]; /** Share of the first, as an sRGB mix like CSS. */ readonly at: number; } /** A palette rung, or a point between two: supporting text must recede from body ink and clear 4.5:1 on * the darkest wash, and no zinc does both (500 is 4.4:1 on a selected row; 600 is 7.7:1 and reads as * body). A blend names both rungs, so re-pointing either moves it. */ export type InkRef = string | InkBlend; export declare const TEXT_INK: { readonly default: "zinc.900"; /** All supporting text — one role. */ readonly muted: { readonly between: readonly ["zinc.500", "zinc.600"]; readonly at: 65; }; /** A disabled label, and an unfilled value ("Not set"). */ readonly inactive: "zinc.400"; /** Requires a dark ground. */ readonly onInverse: "white"; readonly danger: "red.900"; readonly warning: "amber.700"; readonly success: "emerald.700"; }; /** Derived from the table, so iteration is exhaustive and a new ink cannot ship without a contrast case. */ export type TextColor = keyof typeof TEXT_INK; export declare const TEXT_COLORS: ("danger" | "default" | "inactive" | "muted" | "onInverse" | "success" | "warning")[]; /** The role's CSS variable, never the literal, so a theme moving `--foreground` repaints body ink * everywhere; `tokens_agreement.test.ts` asserts each resolves to this table. */ export declare function getTextColor(color?: TextColor): string; /** What may paint a mark (glyph, ring, dot, spinner) per `constitution.md` §9: the ink ladder, the accent, * or the surface's ink. A role, not a colour string — a call-site shade is arbitrary in dark and no theme * moves it — so the rule is a compile error. Data colours (options, themes, series) stay strings where * the registry says so. */ export type InkColor = TextColor | "accent" | "white" | "currentColor"; /** `currentColor` inherits whatever painted the surrounding box. */ export declare function getInkColor(color: InkColor): string; /** The vocabulary in W3C DTCG format — primitives and aliases in one document for Figma Variables or * Tokens Studio. Aliases are emitted as references, never hex, since `default` being `zinc.900` is what * is worth syncing. DTCG has no mix, so a blend emits its resolved value with `$description` naming both * rungs and the share. */ export declare function textInkTokens(): string; /** Composited as CSS's `in srgb` mix. */ export declare function blendInk(ref: InkBlend): string;