export type Point = readonly [number, number]; /** 仿射变换 `(a b c d e f)`:(x, y) → (a·x + c·y + e, b·x + d·y + f),与 SVG、canvas 的 `transform` 同一个顺序。 */ export type Matrix = [number, number, number, number, number, number]; /** * 前三名的名次色,也是圈的深端:金、银、铜。语义固定的元素不跟随主题变色。 * 取的是能在暖白纸上过正文对比度的深调,不是屏幕上那种亮闪闪的金银;名次的数字本身 * 是第二个通道,色觉障碍下丢掉颜色也还认得出第几名。即 acumen 的 `MEDALS`。 */ export declare const MEDAL_INK: readonly ["#8a640a", "#687076", "#8c5834"]; export interface MedalSpec { rank: number; /** 圈:沿中线描一道 `width` 宽的线,渐变沿左上 → 右下的对角线(用户坐标,原点在头像中心)。 */ ring: { /** 圈中线的半径。 */ radius: number; width: number; /** 圈外沿的半径。 */ outer: number; /** 渐变线的端点 `(−d, −d) → (d, d)` 中的 d。 */ diagonal: number; stops: [offset: number, color: string][]; }; /** 榜首的柔光:从半径 `from` 向外到 `to`,不透明度自 `peak` 起平方衰减;其余名次为 null。 */ glow: null | { from: number; to: number; color: string; stops: [offset: number, alpha: number][]; }; /** 榜首的小皇冠;其余名次为 null。`matrix` 把本地坐标变到以头像中心为原点的用户坐标。 */ crown: null | { matrix: Matrix; body: readonly Point[]; tips: readonly Point[]; tipRadius: number; tipColor: string; /** 帽身的渐变在本地 y 轴上从 `from`(深)走到 `to`(亮)。 */ from: number; to: number; stops: [offset: number, color: string][]; }; } /** 圈外沿的半径。 */ export declare const medalOuterRadius: (rank: number, avatarRadius: number) => number; /** * 奖牌在头像之外最远伸出多少(取整):画布要在榜首那一行的上方留出这一截, * 柔光与皇冠才不被裁掉。 */ export declare const medalReach: (avatarRadius: number) => number; /** 第 `rank` 名(从 1 起)的奖牌;四名开外没有。`avatarRadius` 是头像半径。 */ export declare function medalSpec(rank: number, avatarRadius: number): MedalSpec | null;