DefinitelyTyped/types/d3-brush/index.d.ts
2020-06-05 16:20:50 -07:00

264 lines
13 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Type definitions for D3JS d3-brush module 1.1
// Project: https://github.com/d3/d3-brush/, https://d3js.org/d3-brush
// Definitions by: Tom Wanzek <https://github.com/tomwanzek>, Alex Ford <https://github.com/gustavderdrache>, Boris Yankov <https://github.com/borisyankov>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
// TypeScript Version: 2.3
// Last module patch version validated against: 1.1.5
import { ArrayLike, Selection, TransitionLike, ValueFn } from 'd3-selection';
/**
* Type alias for a BrushSelection. For a two-dimensional brush, it must be defined as [[x0, y0], [x1, y1]],
* where x0 is the minimum x-value, y0 is the minimum y-value, x1 is the maximum x-value, and y1 is the maximum y-value.
* For an x-brush, it must be defined as [x0, x1]; for a y-brush, it must be defined as [y0, y1].
*/
export type BrushSelection = [[number, number], [number, number]] | [number, number];
/**
* A D3 brush behavior
*
* The generic refers to the type of the datum for the group element on which brush behavior is defined.
*/
export interface BrushBehavior<Datum> {
/**
* Applies the brush to the specified group, which must be a selection of SVG G elements.
* This function is typically not invoked directly, and is instead invoked via selection.call.
*
* For details see: {@link https://github.com/d3/d3-brush#_brush}
*
* @param group A D3 selection of SVG G elements.
* @param args Optional arguments to be passed in.
*/
(group: Selection<SVGGElement, Datum, any, any>, ...args: any[]): void;
/**
* Clear the active selection of the brush on the specified SVG G element(s) selection.
*
* @param group A D3 selection of SVG G elements.
* @param selection Use null to clear the active brush selection.
*/
move(group: Selection<SVGGElement, Datum, any, any>, selection: null): void;
/**
* Sets the active selection of the brush on the specified SVG G element(s) selection
* to the provided array.
*
* @param group A D3 selection of SVG G elements.
* @param selection An array specifying the new active brush selection. For a two-dimensional brush,
* it must be defined as [[x0, y0], [x1, y1]], where x0 is the minimum x-value, y0 is the minimum y-value,
* x1 is the maximum x-value, and y1 is the maximum y-value. For an x-brush, it must be defined as [x0, x1];
* for a y-brush, it must be defined as [y0, y1].
*/
move(group: Selection<SVGGElement, Datum, any, any>, selection: BrushSelection): void;
/**
* Sets the active selection of the brush on the specified SVG G element(s) selection
* based on the array returned by a value function invoked for each selection element.
*
* @param group A D3 selection of SVG G elements.
* @param selection A selection value function which is evaluated for each selected element,
* in order, being passed the current datum (d), the current index (i), and the current group (nodes),
* with this as the current DOM element. The function returns an array specifying the new active brush selection.
* For a two-dimensional brush, it must be defined as [[x0, y0], [x1, y1]], where x0 is the minimum x-value, y0 is the minimum y-value,
* x1 is the maximum x-value, and y1 is the maximum y-value. For an x-brush, it must be defined as [x0, x1];
* for a y-brush, it must be defined as [y0, y1].
*/
move(group: Selection<SVGGElement, Datum, any, any>, selection: ValueFn<SVGGElement, Datum, BrushSelection>): void;
/**
* Clear the active selection of the brush on the specified SVG G element(s) transition.
*
* @param group A D3 transition on SVG G elements.
* @param selection Use null to clear the active brush selection.
*/
move(group: Selection<SVGGElement, Datum, any, any>, selection: null): void;
/**
* Sets the active selection of the brush on the specified SVG G element(s) transition
* to the provided array.
*
* @param group A D3 transition on SVG G elements.
* @param selection An array specifying the new active brush selection. For a two-dimensional brush,
* it must be defined as [[x0, y0], [x1, y1]], where x0 is the minimum x-value, y0 is the minimum y-value,
* x1 is the maximum x-value, and y1 is the maximum y-value. For an x-brush, it must be defined as [x0, x1];
* for a y-brush, it must be defined as [y0, y1].
*/
move(group: TransitionLike<SVGGElement, Datum>, selection: BrushSelection): void;
/**
* Sets the active selection of the brush on the specified SVG G element(s) transition
* based on the array returned by a value function invoked for each transitioning element.
*
* @param group A D3 transition on SVG G elements.
* @param selection A selection value function which is evaluated for each selected element,
* in order, being passed the current datum (d), the current index (i), and the current group (nodes),
* with this as the current DOM element. The function returns an array specifying the new active brush selection.
* For a two-dimensional brush, it must be defined as [[x0, y0], [x1, y1]], where x0 is the minimum x-value, y0 is the minimum y-value,
* x1 is the maximum x-value, and y1 is the maximum y-value. For an x-brush, it must be defined as [x0, x1];
* for a y-brush, it must be defined as [y0, y1].
*/
move(group: TransitionLike<SVGGElement, Datum>, selection: ValueFn<SVGGElement, Datum, BrushSelection>): void;
/**
* Returns the current extent accessor.
*/
extent(): ValueFn<SVGGElement, Datum, [[number, number], [number, number]]>;
/**
* Set the brushable extent to the specified array of points and returns this brush.
*
* The brush extent determines the size of the invisible overlay and also constrains the brush selection;
* the brush selection cannot go outside the brush extent.
*
* @param extent array of points [[x0, y0], [x1, y1]], where [x0, y0] is the top-left corner
* and [x1, y1] is the bottom-right corner.
*/
extent(extent: [[number, number], [number, number]]): this;
/**
* Set the brushable extent to the specified array of points returned by the accessor function
* evaluated for each element in the selection/transition and returns this brush.
*
* The brush extent determines the size of the invisible overlay and also constrains the brush selection;
* the brush selection cannot go outside the brush extent.
*
* @param extent An extent accessor function which is evaluated for each selected element,
* in order, being passed the current datum (d), the current index (i), and the current group (nodes),
* with this as the current DOM element. The function returns an array of points [[x0, y0], [x1, y1]],
* where [x0, y0] is the top-left corner and [x1, y1] is the bottom-right corner.
*/
extent(extent: ValueFn<SVGGElement, Datum, [[number, number], [number, number]]>): this;
/**
* Returns the current filter function.
*/
filter(): ValueFn<SVGGElement, Datum, boolean>;
/**
* Sets the filter to the specified filter function and returns the brush.
*
* If the filter returns falsey, the initiating event is ignored and no brush gesture is started.
* Thus, the filter determines which input events are ignored. The default filter ignores mousedown events on secondary buttons,
* since those buttons are typically intended for other purposes, such as the context menu.
*
* @param filterFn A filter function which is evaluated for each selected element,
* in order, being passed the current datum (d), the current index (i), and the current group (nodes),
* with this as the current DOM element. The function returns a boolean value.
*/
filter(filterFn: ValueFn<SVGGElement, Datum, boolean>): this;
/**
* Returns the current key modifiers flag.
*/
keyModifiers(): boolean;
/**
* Sets the key modifiers flag and returns the brush.
*
* The key modifiers flag determines whether the brush listens to key events during brushing.
* The default value is true.
*
* @param keyModifiers New value for key modifiers flag.
*/
keyModifiers(modifiers: boolean): this;
/**
* Returns the current handle size, which defaults to six.
*/
handleSize(): number;
/**
* Sets the size of the brush handles to the specified number and returns the brush.
*
* This method must be called before applying the brush to a selection;
* changing the handle size does not affect brushes that were previously rendered.
* The default size is 6.
*
* @param size Size of the handle.
*/
handleSize(size: number): this;
/**
* Returns the first currently-assigned listener matching the specified typenames, if any.
*
* @param typenames The typenames is a string containing one or more typename separated by whitespace.
* Each typename is a type, optionally followed by a period (.) and a name, such as "brush.foo"" and "brush.bar";
* the name allows multiple listeners to be registered for the same type. The type must be one of the following:
* start (at the start of a brush gesture, such as on mousedown), brush (when the brush moves, such as on mousemove), or
* end (at the end of a brush gesture, such as on mouseup.)
*/
on(typenames: string): ValueFn<SVGGElement, Datum, void> | undefined;
/**
* Removes the current event listeners for the specified typenames, if any.
*
* @param typenames The typenames is a string containing one or more typename separated by whitespace.
* Each typename is a type, optionally followed by a period (.) and a name, such as "brush.foo"" and "brush.bar";
* the name allows multiple listeners to be registered for the same type. The type must be one of the following:
* start (at the start of a brush gesture, such as on mousedown), brush (when the brush moves, such as on mousemove), or
* end (at the end of a brush gesture, such as on mouseup.)
* @param listener Use null to remove the listener.
*/
on(typenames: string, listener: null): this;
/**
* Sets the event listener for the specified typenames and returns the brush.
* If an event listener was already registered for the same type and name,
* the existing listener is removed before the new listener is added.
* When a specified event is dispatched, each listener will be invoked with the same context and arguments as selection.on listeners.
*
* @param typenames The typenames is a string containing one or more typename separated by whitespace.
* Each typename is a type, optionally followed by a period (.) and a name, such as "brush.foo"" and "brush.bar";
* the name allows multiple listeners to be registered for the same type. The type must be one of the following:
* start (at the start of a brush gesture, such as on mousedown), brush (when the brush moves, such as on mousemove), or
* end (at the end of a brush gesture, such as on mouseup.)
* @param listener An event listener function which is evaluated for each selected element,
* in order, being passed the current datum (d), the current index (i), and the current group (nodes),
* with this as the current DOM element.
*/
on(typenames: string, listener: ValueFn<SVGGElement, Datum, void>): this;
}
/**
* Create a new two-dimensional brush.
*
* The generic "Datum" refers to the type of the data of the selected svg:g element to
* which the returned BrushBehavior will be applied.
*/
export function brush<Datum>(): BrushBehavior<Datum>;
/**
* Creates a new one-dimensional brush along the x-dimension.
*
* The generic "Datum" refers to the type of the data of the selected svg:g element to
* which the returned BrushBehavior will be applied.
*/
export function brushX<Datum>(): BrushBehavior<Datum>;
/**
* Creates a new one-dimensional brush along the y-dimension.
*
* The generic "Datum" refers to the type of the data of the selected svg:g element to
* which the returned BrushBehavior will be applied.
*/
export function brushY<Datum>(): BrushBehavior<Datum>;
/**
* Return the current brush selection for the specified node. Internally, an elements brush state is stored as element.__brush;
* however, you should use this method rather than accessing it directly. If the given node has no selection, returns null.
* Otherwise, the selection is defined as an array of numbers.
*
* @param node The node for which the brush selection should be returned.
*/
export function brushSelection(node: SVGGElement): BrushSelection | null;
/**
* D3 brush event
*
* The generic refers to the type of the datum for the group element on which brush was defined.
*/
export interface D3BrushEvent<Datum> {
/**
* The BrushBehavior associated with the event
*/
target: BrushBehavior<Datum>;
/**
* The event type for the BrushEvent
*/
type: 'start' | 'brush' | 'end' | string; // Leave failsafe string type for cases like 'brush.foo'
/**
* The current brush selection associated with the event.
* This is null when the selection is empty.
*/
selection: BrushSelection | null;
/**
* The underlying input event, such as mousemove or touchmove.
*/
sourceEvent: any;
}