/** * 对比度计算与「够读的主色」派生。 * * 背景:品牌绿 #00b96b 落在白底上只有 2.58:1,而正文文字要 4.5:1、非文本要 3:1(WCAG 2.1)。 * antd 从它派生的最深一档 colorPrimaryActive 也只有 3.90:1——够非文本,够不到文字。 * 所以菜单选中态、行内操作按钮这些「用主色写字」的地方,靠 antd 自带档位解决不了。 * * 这里按色相不变、只压明度的方式派生出刚好达标的一档:绿还是那个绿,但读得清。 * 写成纯函数而不是写死一个色值,是因为四个客户各有各的主色,写死就只对信诚成立。 * * 验收方法沿用登录页复核那套:实测计算,不看源码想当然。 * * @author nokecy */ /** hex -> [r, g, b],每项 0~255。 */ export declare function toRgb(hex: string): [number, number, number]; /** WCAG 相对亮度。 */ export declare function relativeLuminance(hex: string): number; /** WCAG 对比度,1 ~ 21。 */ export declare function contrastRatio(a: string, b: string): number; /** hex -> [h(0~360), s(0~1), l(0~1)]。 */ export declare function toHsl(hex: string): [number, number, number]; /** [h, s, l] -> hex。 */ export declare function fromHsl(h: number, s: number, l: number): string; /** * 压暗到刚好满足对比度要求的一档,色相与饱和度保持不变。 * * @param hex 起始色(通常是品牌主色) * @param against 要压在什么底色上,默认白底 * @param min 目标对比度,正文 4.5、非文本 3 */ export declare function darkenUntilContrast(hex: string, { against, min }?: { against?: string | undefined; min?: number | undefined; }): string; /** 深色表面上的文字保持色相,提亮至正文对比度。@author nokecy */ export declare function lightenUntilContrast(hex: string, { against, min }?: { against?: string | undefined; min?: number | undefined; }): string;