Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Types: Allow font to be partial scriptable and individually scriptable #10364

Merged
merged 8 commits into from May 25, 2022
29 changes: 20 additions & 9 deletions types/index.esm.d.ts
Expand Up @@ -38,6 +38,7 @@ export interface ScriptableLineSegmentContext {

export type Scriptable<T, TContext> = T | ((ctx: TContext, options: AnyObject) => T | undefined);
export type ScriptableOptions<T, TContext> = { [P in keyof T]: Scriptable<T[P], TContext> };
export type ScriptableAndScriptableOptions<T, TContext> = Scriptable<T, TContext> | ScriptableOptions<T, TContext>;
export type ScriptableAndArray<T, TContext> = readonly T[] | Scriptable<T, TContext>;
export type ScriptableAndArrayOptions<T, TContext> = { [P in keyof T]: ScriptableAndArray<T[P], TContext> };

Expand Down Expand Up @@ -2303,7 +2304,7 @@ export interface LegendOptions<TType extends ChartType> {
* Font of label
* @see Defaults.font
*/
font: FontSpec;
font: ScriptableAndScriptableOptions<Partial<FontSpec>, ScriptableChartContext>;
/**
* Padding between rows of colored boxes.
* @default 10
Expand Down Expand Up @@ -2364,7 +2365,7 @@ export interface LegendOptions<TType extends ChartType> {
/**
* see Fonts
*/
font: FontSpec;
font: ScriptableAndScriptableOptions<Partial<FontSpec>, ScriptableChartContext>;
position: 'center' | 'start' | 'end';
padding?: number | ChartArea;
/**
Expand Down Expand Up @@ -2398,7 +2399,7 @@ export interface TitleOptions {
* @see Defaults.color
*/
color: Color;
font: FontSpec;
font: ScriptableAndScriptableOptions<Partial<FontSpec>, ScriptableChartContext>;

/**
* Marks that this box should take the full width/height of the canvas (moving other boxes). If set to `false`, places the box above/beside the
Expand Down Expand Up @@ -2629,7 +2630,7 @@ export interface TooltipOptions<TType extends ChartType = ChartType> extends Cor
* See Fonts
* @default {weight: 'bold'}
*/
titleFont: Scriptable<FontSpec, ScriptableTooltipContext<TType>>;
titleFont: ScriptableAndScriptableOptions<Partial<FontSpec>, ScriptableTooltipContext<TType>>;
/**
* Spacing to add to top and bottom of each title line.
* @default 2
Expand Down Expand Up @@ -2659,7 +2660,7 @@ export interface TooltipOptions<TType extends ChartType = ChartType> extends Cor
* See Fonts.
* @default {}
*/
bodyFont: Scriptable<FontSpec, ScriptableTooltipContext<TType>>;
bodyFont: ScriptableAndScriptableOptions<Partial<FontSpec>, ScriptableTooltipContext<TType>>;
/**
* Horizontal alignment of the body text lines.
* @default 'left'
Expand All @@ -2684,7 +2685,7 @@ export interface TooltipOptions<TType extends ChartType = ChartType> extends Cor
* See Fonts
* @default {weight: 'bold'}
*/
footerFont: Scriptable<FontSpec, ScriptableTooltipContext<TType>>;
footerFont: ScriptableAndScriptableOptions<Partial<FontSpec>, ScriptableTooltipContext<TType>>;
/**
* Horizontal alignment of the footer text lines.
* @default 'left'
Expand Down Expand Up @@ -2919,7 +2920,7 @@ export interface TickOptions {
/**
* see Fonts
*/
font: Scriptable<FontSpec, ScriptableScaleContext>;
font: ScriptableAndScriptableOptions<Partial<FontSpec>, ScriptableScaleContext>;
/**
* Sets the offset of the tick labels from the axis
*/
Expand Down Expand Up @@ -3022,6 +3023,16 @@ export type CartesianTickOptions = TickOptions & {
maxTicksLimit: number;
}

export interface ScriptableCartesianScaleContext {
scale: keyof CartesianScaleTypeRegistry;
type: string;
}

export interface ScriptableChartContext {
chart: Chart;
type: string;
}

export interface CartesianScaleOptions extends CoreScaleOptions {
/**
* Scale boundary strategy (bypassed by min/max time options)
Expand Down Expand Up @@ -3082,7 +3093,7 @@ export interface CartesianScaleOptions extends CoreScaleOptions {
/** Color of the axis label. */
color: Color;
/** Information about the axis title font. */
font: FontSpec;
font: ScriptableAndScriptableOptions<Partial<FontSpec>, ScriptableCartesianScaleContext>;
/** Padding to apply around scale labels. */
padding: number | {
/** Padding on the (relative) top side of this axis label. */
Expand Down Expand Up @@ -3399,7 +3410,7 @@ export type RadialLinearScaleOptions = CoreScaleOptions & {
color: Scriptable<Color, ScriptableScalePointLabelContext>;
/**
*/
font: Scriptable<FontSpec, ScriptableScalePointLabelContext>;
font: ScriptableAndScriptableOptions<Partial<FontSpec>, ScriptableScalePointLabelContext>;

/**
* Callback function to transform data labels to point labels. The default implementation simply returns the current string.
Expand Down