import { colors } from "@gradio/theme"; export function name_to_rgba( name: string, a: number, ctx: CanvasRenderingContext2D | null ): string { if (!ctx) { var canvas = document.createElement("canvas"); ctx = canvas.getContext("2d")!; } ctx.fillStyle = name; ctx.fillRect(0, 0, 1, 1); const [r, g, b] = ctx.getImageData(0, 0, 1, 1).data; ctx.clearRect(0, 0, 1, 1); return `rgba(${r}, ${g}, ${b}, ${255 / a})`; } export function correct_color_map( color_map: Record, _color_map: Record, browser: any, ctx: CanvasRenderingContext2D | null ): void { for (const col in color_map) { const _c = color_map[col].trim(); if (_c in colors) { _color_map[col] = colors[_c as keyof typeof colors]; } else { _color_map[col] = { primary: browser ? name_to_rgba(color_map[col], 1, ctx) : color_map[col], secondary: browser ? name_to_rgba(color_map[col], 0.5, ctx) : color_map[col] }; } } } export function merge_elements( value: { token: string; class_or_confidence: string | number | null }[], mergeMode: "empty" | "equal" ): { token: string; class_or_confidence: string | number | null }[] { let result: typeof value = []; let tempStr: string | null = null; let tempVal: string | number | null = null; for (const val of value) { if ( (mergeMode === "empty" && val.class_or_confidence === null) || (mergeMode === "equal" && tempVal === val.class_or_confidence) ) { tempStr = tempStr ? tempStr + val.token : val.token; } else { if (tempStr !== null) { result.push({ token: tempStr, class_or_confidence: tempVal }); } tempStr = val.token; tempVal = val.class_or_confidence; } } if (tempStr !== null) { result.push({ token: tempStr, class_or_confidence: tempVal }); } return result; }