import {BaseTitle, SignalRef, Text, TextEncodeEntry, TitleAnchor} from 'vega';import {isArray, isString} from 'vega-util';import {ExprRef} from './expr';import {MarkConfig} from './mark';import {pick} from './util';import {MapExcludeValueRefAndReplaceSignalWith, MappedExcludeValueRef} from './vega.schema';
export type BaseTitleNoValueRefs<ES extends ExprRef | SignalRef> = MapExcludeValueRefAndReplaceSignalWith< Omit<BaseTitle, 'align' | 'baseline'>, ES> & MappedExcludeValueRef<Pick<BaseTitle, 'align' | 'baseline'>>;
export type TitleConfig<ES extends ExprRef | SignalRef> = BaseTitleNoValueRefs<ES>;
export interface TitleBase<ES extends ExprRef | SignalRef> extends BaseTitleNoValueRefs<ES> { anchor?: TitleAnchor;
style?: string | string[];
zindex?: number;
encoding?: TextEncodeEntry;}
export interface TitleParams<ES extends ExprRef | SignalRef> extends TitleBase<ES> { text: Text | ES;
subtitle?: Text;}
export function extractTitleConfig( titleConfig: TitleConfig<SignalRef>): { titleMarkConfig: MarkConfig<SignalRef>; subtitleMarkConfig: MarkConfig<SignalRef>; nonMark: BaseTitleNoValueRefs<SignalRef>; subtitle: BaseTitleNoValueRefs<SignalRef>;} { const { anchor, frame, offset, orient,
color,
subtitleColor, subtitleFont, subtitleFontSize, subtitleFontStyle, subtitleFontWeight, subtitleLineHeight, subtitlePadding,
...rest } = titleConfig;
const titleMarkConfig: MarkConfig<SignalRef> = { ...rest, ...(color ? {fill: color} : {}) };
const nonMark: BaseTitleNoValueRefs<SignalRef> = { ...(anchor ? {anchor} : {}), ...(frame ? {frame} : {}), ...(offset ? {offset} : {}), ...(orient ? {orient} : {}) };
const subtitle: BaseTitleNoValueRefs<SignalRef> = { ...(subtitleColor ? {subtitleColor} : {}), ...(subtitleFont ? {subtitleFont} : {}), ...(subtitleFontSize ? {subtitleFontSize} : {}), ...(subtitleFontStyle ? {subtitleFontStyle} : {}), ...(subtitleFontWeight ? {subtitleFontWeight} : {}), ...(subtitleLineHeight ? {subtitleLineHeight} : {}), ...(subtitlePadding ? {subtitlePadding} : {}) };
const subtitleMarkConfig = pick(titleMarkConfig, ['align', 'baseline', 'dx', 'dy', 'limit']);
return {titleMarkConfig, subtitleMarkConfig, nonMark, subtitle};}
export function isText(v: any): v is Text { return isString(v) || (isArray(v) && isString(v[0]));}