import { DisplayObject, Group, HTML, Text } from '../../shapes'; import { maybeAppend, select } from '../../util'; export function getTitleShapeBBox(titleShape?: DisplayObject): { top: number; left: number; right: number; bottom: number; } { let box = { left: 0, top: 0, width: 0, height: 0 }; if (titleShape?.tagName === 'html') { const { width, height } = titleShape.style; box = { left: 0, top: 0, width: width as number, height: height as number }; } else if (titleShape) { const { min, halfExtents } = titleShape.getLocalBounds(); box = { left: min[0], top: min[1], width: halfExtents[0] * 2, height: halfExtents[1] * 2, }; } return { left: 0, top: 0, right: box.width, bottom: box.height }; } export function renderTitle(container: Group, cfg?: any): any | null { if (!cfg) { const shape = container.querySelector('.legend-title'); if (shape) shape.remove(); return null; } const { style } = cfg; const className = `legend-title`; return maybeAppend(container, `.${className}`, () => new Text({ className, style })) .call((selection) => { selection.styles({ fontSize: 12, textBaseline: 'top', text: cfg.content, }); }) .styles(style) .node(); } export function renderGroup(container: Group, className: string, x: number, y: number): Group { return maybeAppend(container, `.${className}`, 'g').styles({ className, x, y }).node(); } export function renderRect(container: Group, className: string, width: number, height: number, style: any = {}) { return select(container) .maybeAppendByClassName(className, 'rect') .styles({ zIndex: -1, width, height, ...style, }) .node(); }