import type { ThemeValue } from "../theme.js"; import { type InnerFillStrength } from "../glass-fill.js"; import { type GlassLayer } from "./glass-surface.shared.js"; export declare const GLASS_WASH: { /** * A field in its error state (Input, Textarea, PhoneInput): the destructive colour. A * field's prefix or suffix addon and PhoneInput's country segment paint a `soft` inner * fill over the wash, under the same muted ink, so the ink is held on that fill too. */ readonly error: { readonly token: "destructive"; readonly ceiling: 0.18; readonly inner: "soft"; }; /** * A selected card (a selected Card, a checked Radio card): the primary colour, under no * inner fill, never denser than the solid recipe's own selected tint (`SELECTED_CARD_TINT`, * read from it rather than copied), so the glass card paints what the solid one does. */ readonly selection: { readonly token: "primary"; readonly ceiling: 0.05; readonly inner: null; }; /** The contrast the muted and foreground inks keep on a wash: WCAG AA for normal-size text. */ readonly inkContrast: 4.5; /** * The headroom the cap is solved with above `inkContrast`. The material samples the real * backdrop, which runs a little lighter or darker than the page token the cap is solved * on: on the shipped pages a wash solved to exactly 4.5:1 measured 4.47:1 (the errored * field's prefix on its addon, dark glass), so the cap is solved at 4.5 plus this. */ readonly headroom: 0.1; /** The step the cap is searched in, from the ceiling down. */ readonly step: 0.01; }; /** A state wash of the glass model: `error` or `selection`. */ export type GlassWash = "error" | "selection"; /** The pane a wash lies in: its layer, and whether it is a clear (unfrosted) field. */ export interface WashPane { layer?: GlassLayer; clear?: boolean; } /** * The under-fill of a pane showing a state wash, legible by construction: the wash's colour * over the pane's own body, at the densest alpha up to its ceiling at which the muted and * foreground inks keep 4.5:1 composited on the page and on a content pane, and on the wash's * inner fill where one is painted over it. Where even the body alone misses that floor (the * layer's own legibility, not the wash's), it is the body. */ export declare function legibleWash(theme: Pick, wash: GlassWash, pane?: WashPane): string; /** * The ink tint a soft inner fill that carries text paints under glass (a field's prefix or * suffix addon, PhoneInput's country segment), capped for legibility like a wash (the * owner's GS-2 decision): `innerFill`'s tint at the densest alpha up to the strength's own at * which the muted and foreground inks keep 4.5:1 plus `GLASS_WASH.headroom`, laid over the * pane's body (a clear field's veil, or the control layer's puck) composited on the page and * on a content pane. A thinner tint of the ink only ever raises the ink's contrast, so the * fill keeps its full strength wherever that already holds, and where even the body alone * misses the floor it is no fill at all. * * The body is the tints as composited, which is what every host paints: the web's frost * and the native frost alike paint the pane's tint over their blur * (glass-surface-native-frost-self-sample-1), so every host caps the fill * (`useTextEntryMaterial`). A native frost's own light or dark veil runs a few levels lighter * or darker than the page token the cap is solved on, which only raises the ink's contrast: * on the iOS device a dark field's body is #272730 under iOS's dark control tint (white 0.05, * ios-tints.ts) and its addon keeps a faint fill (0.04) with the `$` at 5.53:1 on it. At the * native set's 0.12, which Android keeps, the body read #373740 there and the addon was capped * to no fill, its `$` at 4.91, where the full soft strength read 3.83. */ export declare function legibleInnerFill(theme: Pick, pane?: WashPane, strength?: InnerFillStrength): string; //# sourceMappingURL=glass-wash.d.ts.map