UNPKG

8.96 kBTypeScriptView Raw
1import { PluginListeners } from './plugins.js';
2import { CChart } from './module/cchart.js';
3import { HtmlCanvas, HtmlCanvasContext } from './htmlcanvas.js';
4import * as Data from './types/data.js';
5import * as Anim from './types/anim.js';
6import { Point, Rect, Line, TransformedRect } from './geom.js';
7export declare enum EventType {
8 click = "click",
9 pointermove = "pointermove",
10 pointerdown = "pointerdown",
11 pointerup = "pointerup",
12 pointerleave = "pointerleave",
13 wheel = "wheel",
14 update = "update",
15 drawBegin = "draw-begin",
16 drawComplete = "draw-complete",
17 backgroundDraw = "background-draw",
18 titleDraw = "title-draw",
19 subtitleDraw = "subtitle-draw",
20 captionDraw = "caption-draw",
21 logoDraw = "logo-draw",
22 legendBackgroundDraw = "legend-background-draw",
23 legendTitleDraw = "legend-title-draw",
24 legendLabelDraw = "legend-label-draw",
25 legendMarkerDraw = "legend-marker-draw",
26 legendBarDraw = "legend-bar-draw",
27 plotBackgroundDraw = "plot-background-draw",
28 plotAreaDraw = "plot-area-draw",
29 plotMarkerDraw = "plot-marker-draw",
30 plotMarkerLabelDraw = "plot-marker-label-draw",
31 plotMarkerGuideDraw = "plot-marker-guide-draw",
32 plotAxisDraw = "plot-axis-draw",
33 plotAxisTitleDraw = "plot-axis-title-draw",
34 plotAxisLabelDraw = "plot-axis-label-draw",
35 plotAxisTickDraw = "plot-axis-tick-draw",
36 plotAxisGuideDraw = "plot-axis-guide-draw",
37 plotAxisInterlacingDraw = "plot-axis-interlacing-draw",
38 animationBegin = "animation-begin",
39 animationComplete = "animation-complete"
40}
41export interface EventMap {
42 [EventType.click]: PointerEvent;
43 [EventType.pointermove]: PointerEvent;
44 [EventType.pointerdown]: PointerEvent;
45 [EventType.pointerup]: PointerEvent;
46 [EventType.pointerleave]: PointerEvent;
47 [EventType.wheel]: WheelEvent;
48 [EventType.update]: UpdateEvent;
49 [EventType.drawBegin]: Event<Element>;
50 [EventType.drawComplete]: Event<Element>;
51 [EventType.backgroundDraw]: RectDrawEvent<Root>;
52 [EventType.titleDraw]: TextDrawEvent<Title>;
53 [EventType.subtitleDraw]: TextDrawEvent<Subtitle>;
54 [EventType.captionDraw]: TextDrawEvent<Caption>;
55 [EventType.logoDraw]: RectDrawEvent<Logo>;
56 [EventType.legendBackgroundDraw]: RectDrawEvent<Legend>;
57 [EventType.legendTitleDraw]: TextDrawEvent<LegendTitle>;
58 [EventType.legendLabelDraw]: TextDrawEvent<LegendLabel>;
59 [EventType.legendMarkerDraw]: RectDrawEvent<LegendMarker>;
60 [EventType.legendBarDraw]: RectDrawEvent<LegendBar>;
61 [EventType.plotBackgroundDraw]: RectDrawEvent<Plot>;
62 [EventType.plotAreaDraw]: RectDrawEvent<Area>;
63 [EventType.plotMarkerDraw]: RectDrawEvent<Marker>;
64 [EventType.plotMarkerLabelDraw]: TextDrawEvent<MarkerLabel>;
65 [EventType.plotMarkerGuideDraw]: LineDrawEvent<MarkerGuide>;
66 [EventType.plotAxisDraw]: LineDrawEvent<Axis>;
67 [EventType.plotAxisTitleDraw]: TextDrawEvent<AxisTitle>;
68 [EventType.plotAxisLabelDraw]: TextDrawEvent<AxisLabel>;
69 [EventType.plotAxisTickDraw]: LineDrawEvent<AxisTick>;
70 [EventType.plotAxisGuideDraw]: LineDrawEvent<AxisGuide>;
71 [EventType.plotAxisInterlacingDraw]: RectDrawEvent<AxisInterlacing>;
72 [EventType.animationBegin]: Event<Element>;
73 [EventType.animationComplete]: Event<Element>;
74}
75/** Abstract Element interface for chart elements. */
76export interface Element {
77 /** Name of the chart element type. */
78 tagName: string;
79 /** Parent element of the chart element. */
80 parent?: Element;
81}
82/** Element with a string value. */
83export interface TextElement extends Element {
84 value: string;
85}
86/** Element with an orientation value. */
87export interface OrientedElement extends Element {
88 id: 'x' | 'y';
89}
90/** Root element of the chart. */
91export interface Root extends Element {
92 tagName: 'root';
93}
94/** Plot element of the chart. */
95export interface Plot extends Element {
96 tagName: 'plot';
97}
98/** Main title element of the chart. */
99export interface Title extends TextElement {
100 tagName: 'title';
101}
102/** Subtitle element of the chart. */
103export interface Subtitle extends TextElement {
104 tagName: 'subtitle';
105}
106/** Caption element of the chart. */
107export interface Caption extends TextElement {
108 tagName: 'caption';
109}
110/** Legend element of the chart. */
111export interface Legend extends Element {
112 tagName: 'legend';
113 channel: string;
114}
115/** Logo element of the chart. */
116export interface Logo extends Element {
117 tagName: 'logo';
118}
119/** Plot area element of the chart. */
120export interface Area extends Element {
121 tagName: 'plot-area';
122}
123/** Plot marker element of the chart representing a data point. */
124export interface Marker extends Element {
125 tagName: 'plot-marker';
126 categories: Data.Record;
127 values: Data.Record;
128 /** Unique index of the marker. */
129 index: number;
130}
131/** Label element of a marker element. */
132export interface MarkerLabel extends TextElement {
133 tagName: 'plot-marker-label';
134 parent: Marker;
135}
136/** Guideline element of a marker element. */
137export interface MarkerGuide extends OrientedElement {
138 tagName: 'plot-marker-guide';
139 parent: Marker;
140}
141/** Axis element of the plot. */
142export interface Axis extends OrientedElement {
143 tagName: 'plot-axis';
144}
145/** Label element of an axis element. */
146export interface AxisLabel extends TextElement {
147 tagName: 'plot-axis-label';
148 parent: Axis;
149}
150/** Guideline element of an axis element. */
151export interface AxisGuide extends Element {
152 tagName: 'plot-axis-guide';
153 parent: Axis;
154}
155/** Tick element of an axis element. */
156export interface AxisTick extends Element {
157 tagName: 'plot-axis-tick';
158 parent: Axis;
159}
160/** Title element of an axis element. */
161export interface AxisTitle extends TextElement {
162 tagName: 'plot-axis-title';
163 parent: Axis;
164}
165/** Interlacing element of an axis element. */
166export interface AxisInterlacing extends Element {
167 tagName: 'plot-axis-interlacing';
168 parent: Axis;
169}
170/** Title element of a legend element. */
171export interface LegendTitle extends TextElement {
172 tagName: 'legend-title';
173 parent: Legend;
174}
175/** Marker element of a legend element. */
176export interface LegendMarker extends Element {
177 tagName: 'legend-marker';
178 parent: Legend;
179}
180/** Label element of a legend element. */
181export interface LegendLabel extends TextElement {
182 tagName: 'legend-label';
183 parent: Legend;
184}
185/** Bar element of a legend element indicating a continous interval. */
186export interface LegendBar extends Element {
187 tagName: 'legend-bar';
188 parent: Legend;
189}
190/** The interface of the event object is passed to event handlers by the library.
191 Detail properties will vary by event type. */
192export interface Event<T> {
193 type: EventType;
194 /** The element of the chart the event triggered on. */
195 target: T | null;
196 /** If called, the default action of the event will be canceled. */
197 preventDefault(): void;
198 /** For drawing events the rendering context of the underlying
199 canvas set up for drawing the element. */
200 renderingContext?: HtmlCanvasContext;
201}
202export interface PointerDetail {
203 pointerId: number | null;
204 position: Point;
205}
206/** Event for pointer/mouse events. */
207export interface PointerEvent extends Event<Element> {
208 detail: PointerDetail;
209}
210export interface WheelDetail {
211 delta: number;
212}
213/** Event for mouse wheel change. */
214export interface WheelEvent extends Event<Element> {
215 detail: WheelDetail;
216}
217export interface UpdateDetail {
218 position: Anim.Duration;
219 progress: number;
220}
221/** Event emitted at every animation frame update. */
222export interface UpdateEvent extends Event<Element> {
223 detail: UpdateDetail;
224}
225export interface RectDrawDetail {
226 rect: Rect;
227 relative: boolean;
228}
229/** Event of drawing a rectangle or a marker
230 (in which case rect is the boundary rectangle). */
231export interface RectDrawEvent<T> extends Event<T> {
232 detail: RectDrawDetail;
233}
234export interface LineDrawDetail {
235 line: Line;
236 relative: boolean;
237}
238/** Event of drawing a line. */
239export interface LineDrawEvent<T> extends Event<T> {
240 detail: LineDrawDetail;
241}
242export interface TextDrawDetail {
243 rect: TransformedRect;
244 text: string;
245}
246/** Event of drawing a text. */
247export interface TextDrawEvent<T> extends Event<T> {
248 detail: TextDrawDetail;
249}
250export type EventHandler<Event> = (event: Event) => void;
251export declare class Events {
252 private _cChart;
253 private _canvas;
254 private _eventHandlers;
255 constructor(cChart: CChart, canvas: HtmlCanvas);
256 add<T extends EventType>(eventName: T, handler: EventHandler<EventMap[T]>): void;
257 private _getHandlers;
258 remove<T extends EventType>(eventName: T, handler: EventHandler<EventMap[T]>): void;
259 addMany(events: PluginListeners): void;
260 removeMany(events: PluginListeners): void;
261 private _invoke;
262 private _isJSEvent;
263 private _makeJSEventParam;
264 private _makeCEventParam;
265}