// Type definitions for d3Kit v1.1.0
// Project: https://www.npmjs.com/package/d3kit
// Definitions by: Morgan Benton
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
///
declare namespace d3kit {
export interface ChartMargin {
top?: number;
right?: number;
bottom?: number;
left?: number;
}
export interface ChartOptions {
margin?: ChartMargin;
offset?: [number,number];
initialWidth?: number;
initialHeight?: number;
[name: string]: any;
}
export interface ChartMixin {
[name: string]: any;
}
export class Skeleton {
constructor(selector: string|Element, options?: ChartOptions, customEvents?: Array);
// Getters
getCustomEventNames(): Array;
getDispatcher(): any; // should be d3.Dispatch but this throws error for user-created events
getInnerWidth(): number;
getInnerHeight(): number;
getLayerOrganizer(): LayerOrganizer;
getRootG(): d3.Selection;
getSvg(): d3.Selection;
// Getter/Setters
data(): any;
data(data?: any, doNotDispatch?: boolean): Skeleton;
options(): any; // wish this could be ChartOptions
options(options: ChartOptions, doNotDispatch?: boolean): Skeleton;
margin(): ChartMargin;
margin(margin: ChartMargin, doNotDispatch?: boolean): Skeleton;
offset(): [number, number];
offset(offset: Array, doNotDispatch?: boolean): Skeleton;
width(): number;
width(value: number|string, doNotDispatch?: boolean): Skeleton;
height(): number;
height(value: number|string, doNotDispatch?: boolean): Skeleton;
dimension(): [number, number];
dimension(dimension: [number|string, number|string], doNotDispatch?: boolean): Skeleton;
autoResize(mode?: string|boolean): string|boolean|void;
autoResizeDetection(method?:string): string|void;
autoResizeToAspectRatio(ratio?: number|boolean): number|boolean|void;
// Other functions
on(eventName: string, listener: (...args: Array) => void): void;
hasData(): boolean;
hasNonZeroArea(): boolean;
mixin(fn: ChartMixin): void;
resizeToFitContainer(mode: string|boolean, doNotDispatch?: boolean): void;
resizeToAspectRatio(ratio: number, doNotDispatch?: boolean): void;
}
interface ChartletPropertyCallback {
(datum?: any, datum_index?: number): any;
}
export interface ChartletEventFunction {
(sel?: d3.Selection, done?: string): (sel: d3.Selection) => void;
}
export class Chartlet {
constructor(
enterFunction?: ChartletEventFunction,
updateFunction?: ChartletEventFunction,
exitFunction?: ChartletEventFunction,
customEventName?: Array);
// Getter functions
getDispatcher(): d3.Dispatch;
getCustomEventNames(): Array;
getPropertyValue(name: string, datum: any, datum_index: number): any;
// Getter/Setter functions
property(name: string): ChartletPropertyCallback;
property(name: string, value: any): Chartlet;
// Enter/Update/Exit functions
enter( sel?: d3.Selection, done?: string): (sel: d3.Selection) => void;
update(sel?: d3.Selection, done?: string): (sel: d3.Selection) => void;
exit( sel?: d3.Selection, done?: string): (sel: d3.Selection) => void;
// Inheritance functions
inheritPropertyFrom(parent_chartlet: Chartlet, parent_property_name: string, child_property_name?: string): void;
inheritPropertiesFrom(parent_chartlet: Chartlet, parent_property_names: Array, child_property_names?: Array): void;
publishEventsTo(dispatcher: d3.Dispatch): Chartlet;
// Events
on(eventName: string, handlerFunction: ChartletEventFunction): void;
}
interface LayerConfig {
name?: string,
names?: Array,
sublayers?: LayerConfig
}
export class LayerOrganizer {
constructor(container: d3.Selection, tag?: string);
create(config: string|Array|LayerConfig|Array): d3.Selection|Array>;
get(name: string): d3.Selection;
has(name: string): boolean;
}
export namespace factory {
export function createChart(
defaultOptions: ChartOptions,
customEvents: Array,
constructor: (skeleton: Skeleton) => void
): (selector: string|Element, options?: ChartOptions, customEvents?: Array) => Skeleton;
}
export namespace helper {
export function debounce(fn: (...args: Array) => void, wait: number, immediate: boolean): (...args: Array) => void;
export function extend(target: Object, ...args: Object[]): Object;
export function deepExtend(target: Object, ...args: Object[]): Object;
export function bindMouseEventsToDispatcher(selection: d3.Selection, dispatch: d3.Dispatch, prefix: string): void;
export function removeAllChildren(selection: d3.Selection, noTransition: boolean): d3.Selection;
export function on(element: Element, type: string, listener: (...args: Array) => void): void;
export function off(element: Element, type: string, listener: (...args: Array) => void): void;
export function trim(str: string, characters: string): string;
export function dasherize(str: string): string;
export function $(s: Element|string): Element;
export function $$(s: Array|NodeList): Array;
export function isArray(value: any): boolean;
export function isNumber(value: any): boolean;
export function isObject(value: any): boolean;
export function isElement(o: any): boolean;
export function isFunction(functionToCheck: any): boolean;
}
}
declare module 'd3kit' {
export = d3kit;
}