import { Align, Axis as VgAxis, AxisEncode, AxisOrient, BaseAxis, Color, FontStyle, FontWeight, LabelOverlap, SignalRef, TextBaseline, TimeInterval, TimeIntervalStep} from 'vega';import {ConditionalPredicate, Value, ValueDef} from './channeldef';import {DateTime} from './datetime';import {ExprRef} from './expr';import {Guide, GuideEncodingEntry, TitleMixins, VlOnlyGuideConfig} from './guide';import {Flag, keys} from './util';import {MapExcludeValueRefAndReplaceSignalWith, VgEncodeChannel} from './vega.schema';
export type BaseAxisNoValueRefs<ES extends ExprRef | SignalRef> = AxisOverrideMixins<ES> & VLOnlyAxisMixins & Omit<MapExcludeValueRefAndReplaceSignalWith<BaseAxis, ES>, 'labelOverlap'>;
interface AxisOverrideMixins<ES extends ExprRef | SignalRef> {
position?: number | ES;
tickMinStep?: number | ES;
grid?: boolean;
labelFlush?: boolean | number;
labelOverlap?: LabelOverlap | ES;
offset?: number;
orient?: AxisOrient | ES;
tickCount?: number | TimeInterval | TimeIntervalStep | ES;
values?: number[] | string[] | boolean[] | DateTime[] | ES;
zindex?: number;}
interface VLOnlyAxisMixins { labelExpr?: string;
style?: string | string[];}
export type ConditionalAxisProp = | 'labelAlign' | 'labelBaseline' | 'labelColor' | 'labelFont' | 'labelFontSize' | 'labelFontStyle' | 'labelFontWeight' | 'labelOpacity' | 'labelOffset' | 'labelPadding' | 'gridColor' | 'gridDash' | 'gridDashOffset' | 'gridOpacity' | 'gridWidth' | 'tickColor' | 'tickDash' | 'tickDashOffset' | 'tickOpacity' | 'tickSize' | 'tickWidth';
export const CONDITIONAL_AXIS_PROP_INDEX: Record< ConditionalAxisProp, { part: keyof AxisEncode; vgProp: VgEncodeChannel; } | null > = { labelAlign: { part: 'labels', vgProp: 'align' }, labelBaseline: { part: 'labels', vgProp: 'baseline' }, labelColor: { part: 'labels', vgProp: 'fill' }, labelFont: { part: 'labels', vgProp: 'font' }, labelFontSize: { part: 'labels', vgProp: 'fontSize' }, labelFontStyle: { part: 'labels', vgProp: 'fontStyle' }, labelFontWeight: { part: 'labels', vgProp: 'fontWeight' }, labelOpacity: { part: 'labels', vgProp: 'opacity' }, labelOffset: null, labelPadding: null, gridColor: { part: 'grid', vgProp: 'stroke' }, gridDash: { part: 'grid', vgProp: 'strokeDash' }, gridDashOffset: { part: 'grid', vgProp: 'strokeDashOffset' }, gridOpacity: { part: 'grid', vgProp: 'opacity' }, gridWidth: { part: 'grid', vgProp: 'strokeWidth' }, tickColor: { part: 'ticks', vgProp: 'stroke' }, tickDash: { part: 'ticks', vgProp: 'strokeDash' }, tickDashOffset: { part: 'ticks', vgProp: 'strokeDashOffset' }, tickOpacity: { part: 'ticks', vgProp: 'opacity' }, tickSize: null, tickWidth: { part: 'ticks', vgProp: 'strokeWidth' }};
export type ConditionalAxisProperty<V extends Value | number[], ES extends ExprRef | SignalRef> = (ValueDef<V> | ES) & { condition: ConditionalPredicate<ValueDef<V> | ES> | ConditionalPredicate<ValueDef<V> | ES>[];};
export function isConditionalAxisValue<V extends Value | number[], ES extends ExprRef | SignalRef>( v: any): v is ConditionalAxisProperty<V, ES> { return v && v['condition'];}
export type ConditionalAxisNumber<ES extends ExprRef | SignalRef = ExprRef | SignalRef> = ConditionalAxisProperty< number | null, ES>;export type ConditionalAxisLabelAlign<ES extends ExprRef | SignalRef = ExprRef | SignalRef> = ConditionalAxisProperty< Align | null, ES>;export type ConditionalAxisLabelBaseline< ES extends ExprRef | SignalRef = ExprRef | SignalRef> = ConditionalAxisProperty<TextBaseline | null, ES>;export type ConditionalAxisColor<ES extends ExprRef | SignalRef = ExprRef | SignalRef> = ConditionalAxisProperty< Color | null, ES>;export type ConditionalAxisString<ES extends ExprRef | SignalRef = ExprRef | SignalRef> = ConditionalAxisProperty< string | null, ES>;
export type ConditionalAxisLabelFontStyle< ES extends ExprRef | SignalRef = ExprRef | SignalRef> = ConditionalAxisProperty<FontStyle | null, ES>;export type ConditionalAxisLabelFontWeight< ES extends ExprRef | SignalRef = ExprRef | SignalRef> = ConditionalAxisProperty<FontWeight | null, ES>;
export type ConditionalAxisNumberArray<ES extends ExprRef | SignalRef = ExprRef | SignalRef> = ConditionalAxisProperty< number[] | null, ES>;
export type AxisConfigBaseWithConditionalAndSignal<ES extends ExprRef | SignalRef> = Omit< BaseAxisNoValueRefs<ES>, ConditionalAxisProp | 'title'> & AxisPropsWithCondition<ES>;
export interface AxisPropsWithCondition<ES extends ExprRef | SignalRef> { labelAlign?: BaseAxisNoValueRefs<ES>['labelAlign'] | ConditionalAxisLabelAlign<ES>; labelBaseline?: BaseAxisNoValueRefs<ES>['labelBaseline'] | ConditionalAxisLabelBaseline<ES>; labelColor?: BaseAxisNoValueRefs<ES>['labelColor'] | ConditionalAxisColor<ES>; labelFont?: BaseAxisNoValueRefs<ES>['labelFont'] | ConditionalAxisString<ES>; labelFontSize?: BaseAxisNoValueRefs<ES>['labelFontSize'] | ConditionalAxisNumber<ES>; labelFontStyle?: BaseAxisNoValueRefs<ES>['labelFontStyle'] | ConditionalAxisLabelFontStyle<ES>; labelFontWeight?: BaseAxisNoValueRefs<ES>['labelFontWeight'] | ConditionalAxisLabelFontWeight<ES>; labelLineHeight?: BaseAxisNoValueRefs<ES>['labelLineHeight'] | ConditionalAxisNumber<ES>; labelOpacity?: BaseAxisNoValueRefs<ES>['labelOpacity'] | ConditionalAxisNumber<ES>; labelOffset?: BaseAxisNoValueRefs<ES>['labelOffset'] | ConditionalAxisNumber<ES>; labelPadding?: BaseAxisNoValueRefs<ES>['labelPadding'] | ConditionalAxisNumber<ES>; gridColor?: BaseAxisNoValueRefs<ES>['gridColor'] | ConditionalAxisColor<ES>; gridDash?: BaseAxisNoValueRefs<ES>['gridDash'] | ConditionalAxisNumberArray<ES>; gridDashOffset?: BaseAxisNoValueRefs<ES>['gridDashOffset'] | ConditionalAxisNumber<ES>; gridOpacity?: BaseAxisNoValueRefs<ES>['gridOpacity'] | ConditionalAxisNumber<ES>; gridWidth?: BaseAxisNoValueRefs<ES>['gridWidth'] | ConditionalAxisNumber<ES>; tickColor?: BaseAxisNoValueRefs<ES>['tickColor'] | ConditionalAxisColor<ES>; tickDash?: BaseAxisNoValueRefs<ES>['tickDash'] | ConditionalAxisNumberArray<ES>; tickDashOffset?: BaseAxisNoValueRefs<ES>['tickDashOffset'] | ConditionalAxisNumber<ES>; tickOpacity?: BaseAxisNoValueRefs<ES>['tickOpacity'] | ConditionalAxisNumber<ES>; tickSize?: BaseAxisNoValueRefs<ES>['tickSize'] | ConditionalAxisNumber<ES>; tickWidth?: BaseAxisNoValueRefs<ES>['tickWidth'] | ConditionalAxisNumber<ES>; title?: TitleMixins['title'];}
export type AxisConfig<ES extends ExprRef | SignalRef> = Guide & VlOnlyGuideConfig & AxisConfigBaseWithConditionalAndSignal<ES> & { disable?: boolean; };
export interface Axis<ES extends ExprRef | SignalRef = ExprRef | SignalRef> extends AxisConfigBaseWithConditionalAndSignal<ES>, Guide { encoding?: AxisEncoding;}
export type AxisInternal = Axis<SignalRef>;
export type AxisPart = keyof AxisEncoding;export const AXIS_PARTS: AxisPart[] = ['domain', 'grid', 'labels', 'ticks', 'title'];
export const AXIS_PROPERTY_TYPE: Record<keyof VgAxis, 'main' | 'grid' | 'both'> = { grid: 'grid', gridCap: 'grid', gridColor: 'grid', gridDash: 'grid', gridDashOffset: 'grid', gridOpacity: 'grid', gridScale: 'grid', gridWidth: 'grid',
orient: 'main',
bandPosition: 'both',
aria: 'main', description: 'main', domain: 'main', domainCap: 'main', domainColor: 'main', domainDash: 'main', domainDashOffset: 'main', domainOpacity: 'main', domainWidth: 'main', format: 'main', formatType: 'main', labelAlign: 'main', labelAngle: 'main', labelBaseline: 'main', labelBound: 'main', labelColor: 'main', labelFlush: 'main', labelFlushOffset: 'main', labelFont: 'main', labelFontSize: 'main', labelFontStyle: 'main', labelFontWeight: 'main', labelLimit: 'main', labelLineHeight: 'main', labelOffset: 'main', labelOpacity: 'main', labelOverlap: 'main', labelPadding: 'main', labels: 'main', labelSeparation: 'main', maxExtent: 'main', minExtent: 'main', offset: 'both', position: 'main', tickCap: 'main', tickColor: 'main', tickDash: 'main', tickDashOffset: 'main', tickMinStep: 'main', tickOffset: 'both', tickOpacity: 'main', tickRound: 'both', ticks: 'main', tickSize: 'main', tickWidth: 'both', title: 'main', titleAlign: 'main', titleAnchor: 'main', titleAngle: 'main', titleBaseline: 'main', titleColor: 'main', titleFont: 'main', titleFontSize: 'main', titleFontStyle: 'main', titleFontWeight: 'main', titleLimit: 'main', titleLineHeight: 'main', titleOpacity: 'main', titlePadding: 'main', titleX: 'main', titleY: 'main',
encode: 'both', scale: 'both', tickBand: 'both', tickCount: 'both', tickExtra: 'both', translate: 'both', values: 'both', zindex: 'both' };
export interface AxisEncoding { axis?: GuideEncodingEntry;
domain?: GuideEncodingEntry;
grid?: GuideEncodingEntry;
labels?: GuideEncodingEntry;
ticks?: GuideEncodingEntry;
title?: GuideEncodingEntry;}
export const COMMON_AXIS_PROPERTIES_INDEX: Flag<keyof (VgAxis | Axis<any>)> = { orient: 1,
aria: 1, bandPosition: 1, description: 1, domain: 1, domainCap: 1, domainColor: 1, domainDash: 1, domainDashOffset: 1, domainOpacity: 1, domainWidth: 1, format: 1, formatType: 1, grid: 1, gridCap: 1, gridColor: 1, gridDash: 1, gridDashOffset: 1, gridOpacity: 1, gridWidth: 1, labelAlign: 1, labelAngle: 1, labelBaseline: 1, labelBound: 1, labelColor: 1, labelFlush: 1, labelFlushOffset: 1, labelFont: 1, labelFontSize: 1, labelFontStyle: 1, labelFontWeight: 1, labelLimit: 1, labelLineHeight: 1, labelOffset: 1, labelOpacity: 1, labelOverlap: 1, labelPadding: 1, labels: 1, labelSeparation: 1, maxExtent: 1, minExtent: 1, offset: 1, position: 1, tickBand: 1, tickCap: 1, tickColor: 1, tickCount: 1, tickDash: 1, tickDashOffset: 1, tickExtra: 1, tickMinStep: 1, tickOffset: 1, tickOpacity: 1, tickRound: 1, ticks: 1, tickSize: 1, tickWidth: 1, title: 1, titleAlign: 1, titleAnchor: 1, titleAngle: 1, titleBaseline: 1, titleColor: 1, titleFont: 1, titleFontSize: 1, titleFontStyle: 1, titleFontWeight: 1, titleLimit: 1, titleLineHeight: 1, titleOpacity: 1, titlePadding: 1, titleX: 1, titleY: 1, translate: 1, values: 1, zindex: 1};
const AXIS_PROPERTIES_INDEX: Flag<keyof Axis<any>> = { ...COMMON_AXIS_PROPERTIES_INDEX, style: 1, labelExpr: 1, encoding: 1};
export function isAxisProperty(prop: string): prop is keyof Axis<any> { return !!AXIS_PROPERTIES_INDEX[prop];}
export const AXIS_PROPERTIES = keys(AXIS_PROPERTIES_INDEX);
export interface AxisConfigMixins<ES extends ExprRef | SignalRef = ExprRef | SignalRef> { axis?: AxisConfig<ES>;
axisX?: AxisConfig<ES>;
axisY?: AxisConfig<ES>;
axisLeft?: AxisConfig<ES>;
axisRight?: AxisConfig<ES>;
axisTop?: AxisConfig<ES>;
axisBottom?: AxisConfig<ES>;
axisBand?: AxisConfig<ES>;
axisPoint?: AxisConfig<ES>;
axisDiscrete?: AxisConfig<ES>;
axisQuantitative?: AxisConfig<ES>;
axisTemporal?: AxisConfig<ES>;
axisXBand?: AxisConfig<ES>;
axisXPoint?: AxisConfig<ES>;
axisXDiscrete?: AxisConfig<ES>;
axisXQuantitative?: AxisConfig<ES>;
axisXTemporal?: AxisConfig<ES>;
axisYBand?: AxisConfig<ES>;
axisYPoint?: AxisConfig<ES>;
axisYDiscrete?: AxisConfig<ES>;
axisYQuantitative?: AxisConfig<ES>;
axisYTemporal?: AxisConfig<ES>;}
const AXIS_CONFIGS_INDEX: Flag<keyof AxisConfigMixins<any>> = { axis: 1, axisBand: 1, axisBottom: 1, axisDiscrete: 1, axisLeft: 1, axisPoint: 1, axisQuantitative: 1, axisRight: 1, axisTemporal: 1, axisTop: 1, axisX: 1, axisXBand: 1, axisXDiscrete: 1, axisXPoint: 1, axisXQuantitative: 1, axisXTemporal: 1, axisY: 1, axisYBand: 1, axisYDiscrete: 1, axisYPoint: 1, axisYQuantitative: 1, axisYTemporal: 1};
export const AXIS_CONFIGS = keys(AXIS_CONFIGS_INDEX);