// Type definitions for DCJS // Project: https://github.com/dc-js/dc.js // Definitions by: hans windhoff // matt traynham // matthias jobst // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped import * as d3 from "d3"; export = dc; declare var dc: dc.Base; export as namespace dc; declare namespace dc { // helper for get/set situation export interface IGetSet { (): T; (t: T): V; } export interface IBiGetSet { (): T; (t: T, r?: R): V; } export interface IGetSetComputed { (): R; (t: T): V; } export interface Scale { (x: any): T; domain(values: any[]): Scale; domain(): any[]; range(values: T[]): Scale; range(): T[]; } export interface Accessor { (datum: T, index?: number): V; } export interface Columns { label: string; format: Accessor; } // http://dc-js.github.io/dc.js/docs/html/dc.units.html export interface UnitFunction { (start: number|Date, end: number|Date, domain?: number|Array): number | Array; } export interface FloatPointUnits { precision(precision: number): UnitFunction; } export interface Units { integers: UnitFunction; ordinal: UnitFunction; fp: FloatPointUnits; } export interface Events { trigger(fn: () => void, delay?: number): void; } export interface Errors { Exception(msg: string): void; InvalidStateException(msg: string): void; } export interface Filter { isFiltered(value: any): boolean; } export interface Filters { RangedFilter(low: any, high: any): Filter; TwoDimensionalFilter(arr: Array): Filter; RangedTwoDimensionalFilter(arr: Array): Filter; } export interface Logger { enableDebugLog: boolean; warn(msg: string): void; debug(msg: string): void; deprecate(fn: Function, msg: string): void; } export interface Printers { filters(filters: Array): string; filter(filter: any): string; } export interface Round { floor(n: number): number; ceil(n: number): number; round(n: number): number; } export interface Utils { printSingleValue(filter: any): string; add(l: any, r: any): any; subtract(l: any, r: any): any; isNumber(n: any): boolean; isFloat(n: any): boolean; isInteger(n: any): boolean; isNegligible(n: any): boolean; clamp(n: number, min: number, max: number): number; uniqueId(): number; nameToId(name: string): string; appendOrSelect(parent: d3.Selection, selector: string, tag: any): d3.Selection; safeNumber(n: any): number; } export interface Legend { x: IGetSet; y: IGetSet; gap: IGetSet; itemHeight: IGetSet; horizontal: IGetSet; legendWidth: IGetSet; legendText: IGetSet; itemWidth: IGetSet; autoItemWidth: IGetSet; render: () => void; } export interface BaseMixin { width: IGetSet; height: IGetSet; minWidth: IGetSet; minHeight: IGetSet; dimension: IGetSet; data: IGetSetComputed<(group: any) => Array, Array, T>; // http://dc-js.github.io/dc.js/docs/html/dc.baseMixin.html#group__anchor group: IBiGetSet; ordering: IGetSet, T>; filterAll(): void; select(selector: d3.Selection | string): d3.Selection; selectAll(selector: d3.Selection | string): d3.Selection; anchor(anchor: BaseMixin | d3.Selection | string, chartGroup?: string): d3.Selection; anchorName(): string; svg: IGetSet, d3.Selection>; resetSvg(): void; filterPrinter: IGetSet<(filters: Array) => string, T>; controlsUseVisibility: IGetSet; turnOnControls(): void; turnOffControls(): void; transitionDuration: IGetSet; render(): void; redraw(): void; redrawGroup(): void; hasFilterHandler: IGetSet<(filters: Array, filter: any) => boolean, T>; hasFilter(filter?: any): boolean; removeFilterHandler: IGetSet<(filters: Array) => Array, T>; addFilterHandler: IGetSet<(filters: Array) => Array, T>; resetFilterHandler: IGetSet<(filters: Array) => Array, T>; filter: IGetSet; filters(): Array; onClick(datum: any): void; filterHandler: IGetSet<(dimension: any, filter: any) => any, T>; keyAccessor: IGetSet, T>; valueAccessor: IGetSet, T>; label: IGetSet, T>; renderLabel: IGetSet; title: IGetSet, T>; renderTitle: IGetSet; chartGroup: IGetSet; expireCache(): T; legend: IGetSet; options(optionsObject: any): T; renderlet(fn: (chart: T) => any): T; useViewBoxResizing: IGetSet; on(event: "renderlet", fn: (chart: T, filter: any) => any): T; on(event: "pretransition", fn: (chart: T, filter: any) => any): T; on(event: "preRender", fn: (chart: T) => any): T; on(event: "postRender", fn: (chart: T) => any): T; on(event: "preRedraw", fn: (chart: T) => any): T; on(event: "postRedraw", fn: (chart: T) => any): T; on(event: "filtered", fn: (chart: T, filter: any) => any): T; on(event: "zoomed", fn: (chart: T, filter: any) => any): T; on(event: string, fn: (chart: T, ...args: any[]) => any): T; } export interface Margins { left: number; top: number; right: number; bottom: number; } export interface MarginMixin { margins: IGetSet } export interface ColorMixin { // http://dc-js.github.io/dc.js/docs/html/dc.colorMixin.html colors: IGetSet | Scale | string, T>; ordinalColors(r: Array): T; linearColors(r: Array): T; colorAccessor: IGetSet, T>; colorDomain: IGetSet, T>; calculateColorDomain(): void; getColor(datum: any, index?: number): string; colorCalculator: IGetSet, T>; } export interface CoordinateGridMixin extends BaseMixin, MarginMixin, ColorMixin { rangeChart: IGetSet, T>; zoomScale: IGetSet, T>; zoomOutRestrict: IGetSet; g: IGetSet, T>; mouseZoomable: IGetSet; chartBodyG(): d3.Selection; x: IGetSet<(n: any) => any, T>; xUnits: IGetSet; xAxis: IGetSet; elasticX: IGetSet; xAxisPadding: IGetSet; xUnitCount(): number; useRightYAxis: IGetSet; isOrdinal(): boolean; xAxisLabel: IBiGetSet; yAxisLabel: IBiGetSet; y: IGetSet, T>; yAxis: IGetSet; elasticY: IGetSet; renderHorizontalGridLines: IGetSet; renderVerticalGridLines: IGetSet; xAxisMin(): any; xAxisMax(): any; yAxisMin(): any; yAxisMax(): any; yAxisPadding: IGetSet; round: IGetSet<(value: any) => any, T>; clipPadding: IGetSet; focus(range?: Array): void; brushOn: IGetSet; } export interface StackMixin { stack(group: any, name?: string, accessor?: Accessor): void; hidableStacks: IGetSet; hideStack(name: string): void; showStack(name: string): void; // title(stackName: string, titleFn: Accessor); stackLayout: IGetSet, T>; } export interface CapMixin { cap: IGetSet; othersLabel: IGetSet; othersGrouper: IGetSet<(data: Array) => Array, T>; } export interface BubbleMixin extends ColorMixin { r: IGetSet, T>; radiusValueAccessor: IGetSet, T>; minRadiusWithLabel: IGetSet; maxBubbleRelativeSize: IGetSet; } export interface PieChart extends CapMixin, ColorMixin, BaseMixin { slicesCap: IGetSet; innerRadius: IGetSet; radius: IGetSet; cx: IGetSet; cy: IGetSet; minAngleForLabel: IGetSet; } export interface BarChart extends StackMixin, CoordinateGridMixin { centerBar: IGetSet; barPadding: IGetSet; outerPadding: IGetSet; gap: IGetSet; alwaysUseRounding: IGetSet; } export interface RenderDataPointOptions { fillOpacity: number; strokeOpacity: number; radius: number; } export interface LineChart extends StackMixin, CoordinateGridMixin { interpolate: IGetSet; tension: IGetSet; defined: IGetSet, LineChart>; dashStyle: IGetSet, LineChart>; renderArea: IGetSet; dotRadius: IGetSet; renderDataPoints: IGetSet; } export interface DataCountWidgetHTML { all: string; some: string; } export interface DataCountWidget extends BaseMixin { html: IGetSet; formatNumber: IGetSet, DataCountWidget>; } export interface DataTableWidget extends BaseMixin { size: IGetSet; showGroups: IGetSet; columns: IGetSet | Columns>, DataTableWidget>; sortBy: IGetSet, DataTableWidget>; order: IGetSet<(a: any, b: any) => number, DataTableWidget>; } export interface DataGridWidget extends BaseMixin { size: IGetSet; html: IGetSet, DataTableWidget>; htmlGroup: IGetSet, DataTableWidget>; sortBy: IGetSet, DataTableWidget>; order: IGetSet<(a: any, b: any) => number, DataTableWidget>; } export interface BubbleChart extends BubbleMixin, CoordinateGridMixin { elasticRadius: IGetSet; } export interface ICompositeChart extends CoordinateGridMixin { useRightAxisGridLines: IGetSet>; childOptions: IGetSet>; rightYAxisLabel: IGetSet>; compose: IGetSet>, ICompositeChart>; children(): Array>; shareColors: IGetSet>; shareTitle: IGetSet>; rightY: IGetSet<(n: any) => any, ICompositeChart>; rightYAxis: IGetSet>; } export interface CompositeChart extends ICompositeChart { } export interface SeriesChart extends ICompositeChart { chart: IGetSet<(c: any) => BaseMixin, SeriesChart>; seriesAccessor: IGetSet, SeriesChart>; seriesSort: IGetSet<(a: any, b: any) => number, SeriesChart>; valueSort: IGetSet<(a: any, b: any) => number, SeriesChart>; } export interface GeoChoroplethLayer { name: string; keyAccessor: Accessor; data: any; } export interface GeoChoroplethChart extends ColorMixin, BaseMixin { overlayGeoJson(json: any, name: string, keyAccessor: Accessor): void; projection: IGetSet; geoJsons(): Array; geoPath(): d3.geo.Path; removeGeoJson(name: string): void; } export interface BubbleOverlayChart extends BubbleMixin, BaseMixin { point(name: string, x: number, y: number): void; } export interface RowChart extends CapMixin, MarginMixin, ColorMixin, BaseMixin { x: IGetSet, RowChart>; renderTitleLabel: IGetSet; xAxis: IGetSet; fixedBarHeight: IGetSet; gap: IGetSet; elasticX: IGetSet; labelOffsetX: IGetSet; labelOffsetY: IGetSet; titleLabelOffsetX: IGetSet; } export interface ScatterPlot extends CoordinateGridMixin { existenceAccessor: IGetSet, ScatterPlot>; symbol: IGetSet, ScatterPlot>; symbolSize: IGetSet; highlightedSize: IGetSet; hiddenSize: IGetSet; } export interface NumberDisplayWidgetHTML { one: string; some: string; none: string; } export interface NumberDisplayWidget extends BaseMixin { html: IGetSet; value(): string; formatNumber: IGetSet, NumberDisplayWidget>; } export interface HeatMap extends ColorMixin, MarginMixin, BaseMixin { colsLabel: IGetSet, HeatMap>; rowsLabel: IGetSet, HeatMap>; rows: IGetSet, HeatMap>; cols: IGetSet, HeatMap>; boxOnClick: IGetSet<(d: any) => void, HeatMap>; xAxisOnClick: IGetSet<(d: any) => void, HeatMap>; yAxisOnClick: IGetSet<(d: any) => void, HeatMap>; } export interface BoxPlot extends CoordinateGridMixin { boxPadding: IGetSet; outerPadding: IGetSet; boxWidth: IGetSet; tickFormat: IGetSet, BoxPlot>; } // https://github.com/dc-js/dc.js/blob/master/src/select-menu.js export interface SelectMenu extends BaseMixin { order: IGetSet<(a: any, b: any) => number, SelectMenu>; promptText: IGetSet; filterDisplayed: IGetSet<(a: {value: any, key: any}, index: number) => boolean, SelectMenu>; multiple: IGetSet; promptValue: IGetSet; numberVisible: IGetSet; } export interface ChartRegistry { has(chart: BaseMixin): boolean; register(chart: BaseMixin, group?: string): void; deregister(chart: BaseMixin, group?: string): void; clear(group?: string): void; list(group?: string): Array>; } export interface Base { chartRegistry: ChartRegistry; registerChart(chart: BaseMixin, group?: string): void; deregisterChart(chart: BaseMixin, group?: string): void; hasChart(chart: BaseMixin): boolean; deregisterAllCharts(group?: string): void; filterAll(group?: string): void; refocusAll(group?: string): void; renderAll(group?: string): void; redrawAll(group?: string): void; disableTransitions: boolean; transition(selections: d3.Selection, duration: number, callback: (s: d3.Selection) => void): void; units: Units; events: Events; errors: Errors; instanceOfChart(object: any): boolean; logger: Logger; override(object: any, fnName: string, newFn: Function): void; printers: Printers; pluck(n: string, f?: Accessor): Accessor; round: Round; utils: Utils; // http://dc-js.github.io/dc.js/docs/html/core.js.html, Line 20 version: string; legend(): Legend; pieChart(parent: string, chartGroup?: string): PieChart; // http://dc-js.github.io/dc.js/docs/html/dc.barChart.html barChart(parent: string | CompositeChart, chartGroup?: string): BarChart; // http://dc-js.github.io/dc.js/docs/html/dc.lineChart.html lineChart(parent: string | CompositeChart, chartGroup?: string): LineChart; dataCount(parent: string, chartGroup?: string): DataCountWidget; dataTable(parent: string, chartGroup?: string): DataTableWidget; dataGrid(parent: string, chartGroup?: string): DataGridWidget; bubbleChart(parent: string, chartGroup?: string): BubbleChart; compositeChart(parent: string, chartGroup?: string): CompositeChart; seriesChart(parent: string, chartGroup?: string): SeriesChart; geoChoroplethChart(parent: string, chartGroup?: string): GeoChoroplethChart; bubbleOverlayChart(parent: string, chartGroup?: string): BubbleOverlayChart; rowChart(parent: string, chartGroup?: string): RowChart; scatterPlot(parent: string, chartGroup?: string): ScatterPlot; numberDisplay(parent: string, chartGroup?: string): NumberDisplayWidget; heatMap(parent: string, chartGroup?: string): HeatMap; boxPlot(parent: string, chartGroup?: string): BoxPlot; selectMenu(parent: string, chartGroup?: string): SelectMenu; } }