import type { DisplayObjectConfig } from '@antv/g'; import type { Graph } from '../runtime/graph'; import type { ElementDatum, StyleIterationContext } from '../types'; /** * 计算支持回调的动态样式 * * compute dynamic style that supports callback * @param callableStyle - 动态样式 | dynamic style * @param context - 样式计算迭代上下文 | style iteration context * @returns 静态样式 | static style */ export function computeElementCallbackStyle( callableStyle: | Record | ((this: Graph, datum: ElementDatum) => Record) | { [key: string]: (this: Graph, datum: ElementDatum) => unknown; }, context: StyleIterationContext, ) { const { datum, graph } = context; if (typeof callableStyle === 'function') return callableStyle.call(graph, datum); return Object.fromEntries( Object.entries(callableStyle).map(([key, style]) => { if (typeof style === 'function') return [key, style.call(graph, datum)]; return [key, style]; }), ); } /** * 合并图形配置项 * * Merge shape configuration * @param defaultOptions - 配置项1 | configuration 1 * @param modifiedOptions - 配置项2 | configuration 2 * @returns 合并后的配置项 | merged configuration */ export function mergeOptions( defaultOptions: DisplayObjectConfig, modifiedOptions: DisplayObjectConfig, ): DisplayObjectConfig { const s1 = defaultOptions?.style || {}; const s2 = modifiedOptions?.style || {}; for (const key in s1) { if (!(key in s2)) s2[key] = s1[key]; } return Object.assign({}, defaultOptions, modifiedOptions, { style: s2, }); } /** * 获取图形子图形样式 * * Get the style of the sub-shape of the shape * @param style - 图形样式 | shape style * @returns 子图形样式 | sub-shape style * @remarks * 从给定的属性对象中提取图形样式属性。删除特定的属性,如位置、变换和类名 * * Extracts the shape styles from a given attribute object. * Removes specific styles like position, transformation, and class name. */ export function getSubShapeStyle>( style: T, ): Omit { const { x, y, z, class: cls, className, transform, transformOrigin, zIndex, visibility, ...rest } = style; return rest; }