From a9394b8436ae70e1abc775d145be8dff3e4c5674 Mon Sep 17 00:00:00 2001 From: Jon Freedman Date: Sat, 21 Jul 2018 01:42:18 +0100 Subject: [PATCH] update plotly.js typing (#27355) * update typing - add missing event handlers from https://github.com/plotly/react-plotly.js/#event-handler-props - add addFrames / deleteFrames functions - use Font interface in ScatterMarker.colorbar - change Font.color type from string to Color - fix 'common mistakes': tabs to spaces * fix linting errors * use tab indentation and require in tslint --- types/plotly.js/index.d.ts | 1123 +++++++++++++++++---------- types/plotly.js/test/core-tests.ts | 95 ++- types/plotly.js/test/index-tests.ts | 95 ++- types/plotly.js/tslint.json | 3 +- 4 files changed, 892 insertions(+), 424 deletions(-) diff --git a/types/plotly.js/index.d.ts b/types/plotly.js/index.d.ts index 39ecb64d37..b8532af0a6 100644 --- a/types/plotly.js/index.d.ts +++ b/types/plotly.js/index.d.ts @@ -1,13 +1,14 @@ // Type definitions for plotly.js 1.38 // Project: https://plot.ly/javascript/ // Definitions by: Chris Gervang -// Martin Duparc -// Frederik Aalund -// taoqf -// Dadstart -// Jared Szechy -// Drew Diamantoukos -// Sooraj Pudiyadath +// Martin Duparc +// Frederik Aalund +// taoqf +// Dadstart +// Jared Szechy +// Drew Diamantoukos +// Sooraj Pudiyadath +// Jon Freedman // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // TypeScript Version: 2.3 @@ -27,14 +28,14 @@ export interface Point { } export interface PlotScatterDataPoint { - curveNumber: number; - data: ScatterData; - pointIndex: number; - pointNumber: number; - x: number; - xaxis: LayoutAxis; - y: number; - yaxis: LayoutAxis; + curveNumber: number; + data: ScatterData; + pointIndex: number; + pointNumber: number; + x: number; + xaxis: LayoutAxis; + y: number; + yaxis: LayoutAxis; } export interface PlotMouseEvent { @@ -53,8 +54,8 @@ export interface PlotSelectionEvent { } export type PlotRestyleEvent = [ - any, // update object -- attribute updated: new value - number[] // array of traces updated + any, // update object -- attribute updated: new value + number[] // array of traces updated ]; export interface PlotAxis { @@ -81,14 +82,69 @@ export interface ClickAnnotationEvent { event: MouseEvent; } +export interface FrameAnimationEvent { + name: string; + frame: Frame; + animation: { + frame: { + duration: number; + redraw: boolean; + }; + transition: Transition; + }; +} + +export interface LegendClickEvent { + event: MouseEvent; + node: PlotlyHTMLElement; + curveNumber: number; + expandedIndex: number; + data: Data[]; + layout: Partial; + frames: Frame[]; + config: Partial; + fullData: Data[]; + fullLayout: Partial; +} + +export interface SliderChangeEvent { + slider: Slider; + step: SliderStep; + interaction: boolean; + previousActive: number; +} + +export interface SliderStartEvent { + slider: Slider; +} + +export interface SliderEndEvent { + slider: Slider; + step: SliderStep; +} + +export interface BeforePlotEvent { + data: Data[]; + layout: Partial; + config: Partial; +} + export interface PlotlyHTMLElement extends HTMLElement { on(event: 'plotly_click' | 'plotly_hover' | 'plotly_unhover', callback: (event: PlotMouseEvent) => void): void; on(event: 'plotly_selecting' | 'plotly_selected', callback: (event: PlotSelectionEvent) => void): void; on(event: 'plotly_restyle', callback: (data: PlotRestyleEvent) => void): void; on(event: 'plotly_relayout', callback: (event: PlotRelayoutEvent) => void): void; on(event: 'plotly_clickannotation', callback: (event: ClickAnnotationEvent) => void): void; - // on(event: 'plotly_event', callback: (data: any) => void): void; - on(event: 'plotly_afterplot' | 'plotly_autosize' | 'plotly_deselect' | 'plotly_doubleclick' | 'plotly_redraw' | 'plotly_animated', callback: () => void): void; + on(event: 'plotly_animatingframe', callback: (event: FrameAnimationEvent) => void): void; + on(event: 'plotly_legendclick' | 'plotly_legenddoubleclick', callback: (event: LegendClickEvent) => boolean): void; + on(event: 'plotly_sliderchange', callback: (event: SliderChangeEvent) => void): void; + on(event: 'plotly_sliderend', callback: (event: SliderEndEvent) => void): void; + on(event: 'plotly_sliderstart', callback: (event: SliderStartEvent) => void): void; + on(event: 'plotly_event', callback: (data: any) => void): void; + on(event: 'plotly_beforeplot' , callback: (event: BeforePlotEvent) => boolean): void; + on(event: 'plotly_afterexport' | 'plotly_afterplot' | 'plotly_animated' | 'plotly_animationinterrupted' | 'plotly_autosize' | + 'plotly_beforeexport' | 'plotly_deselect' | 'plotly_doubleclick' | 'plotly_framework' | 'plotly_redraw' | + 'plotly_transitioning' | 'plotly_transitioninterrupted' , callback: () => void): void; } export interface ToImgopts { @@ -122,6 +178,8 @@ export function prependTraces(root: Root, update: Data | Data[], indices: number export function toImage(root: Root, opts: ToImgopts): Promise; export function downloadImage(root: Root, opts: DownloadImgopts): Promise; export function react(root: Root, data: Data[], layout?: Partial, config?: Partial): Promise; +export function addFrames(root: Root, frames: Array>): Promise; +export function deleteFrames(root: Root, frames: number[]): Promise; // Layout export interface Layout { @@ -129,11 +187,11 @@ export interface Layout { titlefont: Partial; autosize: boolean; showlegend: boolean; - paper_bgcolor: Color; - plot_bgcolor: Color; - separators: string; - hidesources: boolean; - xaxis: Partial; + paper_bgcolor: Color; + plot_bgcolor: Color; + separators: string; + hidesources: boolean; + xaxis: Partial; yaxis: Partial; yaxis2: Partial; yaxis3: Partial; @@ -148,8 +206,8 @@ export interface Layout { width: number; hovermode: 'closest' | 'x' | 'y' | false; hoverlabel: Partial