@unovis/ts 1.3.0-alpha.2 → 1.3.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/area/config.d.ts +6 -10
- package/components/area/config.js +3 -12
- package/components/area/config.js.map +1 -1
- package/components/area/index.d.ts +5 -6
- package/components/area/index.js +10 -9
- package/components/area/index.js.map +1 -1
- package/components/axis/config.d.ts +3 -27
- package/components/axis/config.js +3 -30
- package/components/axis/config.js.map +1 -1
- package/components/axis/index.d.ts +4 -3
- package/components/axis/index.js +7 -4
- package/components/axis/index.js.map +1 -1
- package/components/brush/config.d.ts +2 -12
- package/components/brush/config.js +11 -20
- package/components/brush/config.js.map +1 -1
- package/components/brush/index.d.ts +4 -3
- package/components/brush/index.js +4 -3
- package/components/brush/index.js.map +1 -1
- package/components/bullet-legend/config.d.ts +5 -11
- package/components/bullet-legend/config.js +12 -13
- package/components/bullet-legend/config.js.map +1 -1
- package/components/bullet-legend/index.d.ts +4 -3
- package/components/bullet-legend/index.js +11 -18
- package/components/bullet-legend/index.js.map +1 -1
- package/components/bullet-legend/modules/shape.d.ts +6 -0
- package/components/bullet-legend/modules/shape.js +58 -0
- package/components/bullet-legend/modules/shape.js.map +1 -0
- package/components/bullet-legend/style.js +6 -9
- package/components/bullet-legend/style.js.map +1 -1
- package/components/bullet-legend/types.d.ts +5 -0
- package/components/bullet-legend/types.js +7 -0
- package/components/bullet-legend/types.js.map +1 -1
- package/components/chord-diagram/config.d.ts +7 -23
- package/components/chord-diagram/config.js +3 -22
- package/components/chord-diagram/config.js.map +1 -1
- package/components/chord-diagram/index.d.ts +4 -3
- package/components/chord-diagram/index.js +7 -6
- package/components/chord-diagram/index.js.map +1 -1
- package/components/chord-diagram/modules/label.d.ts +3 -3
- package/components/chord-diagram/modules/label.js +1 -1
- package/components/chord-diagram/modules/label.js.map +1 -1
- package/components/chord-diagram/modules/link.d.ts +2 -2
- package/components/chord-diagram/modules/link.js.map +1 -1
- package/components/chord-diagram/modules/node.d.ts +2 -2
- package/components/chord-diagram/modules/node.js.map +1 -1
- package/components/chord-diagram/types.d.ts +3 -2
- package/components/chord-diagram/types.js.map +1 -1
- package/components/crosshair/config.d.ts +6 -14
- package/components/crosshair/config.js +3 -16
- package/components/crosshair/config.js.map +1 -1
- package/components/crosshair/index.d.ts +4 -3
- package/components/crosshair/index.js +4 -3
- package/components/crosshair/index.js.map +1 -1
- package/components/donut/config.d.ts +2 -19
- package/components/donut/config.js +5 -24
- package/components/donut/config.js.map +1 -1
- package/components/donut/index.d.ts +4 -3
- package/components/donut/index.js +5 -4
- package/components/donut/index.js.map +1 -1
- package/components/donut/modules/arc.d.ts +3 -3
- package/components/donut/modules/arc.js.map +1 -1
- package/components/flow-legend/config.d.ts +1 -11
- package/components/flow-legend/config.js +11 -16
- package/components/flow-legend/config.js.map +1 -1
- package/components/flow-legend/index.d.ts +4 -3
- package/components/flow-legend/index.js +5 -2
- package/components/flow-legend/index.js.map +1 -1
- package/components/free-brush/config.d.ts +2 -12
- package/components/free-brush/config.js +11 -20
- package/components/free-brush/config.js.map +1 -1
- package/components/free-brush/index.d.ts +4 -3
- package/components/free-brush/index.js +6 -5
- package/components/free-brush/index.js.map +1 -1
- package/components/graph/config.d.ts +3 -75
- package/components/graph/config.js +12 -78
- package/components/graph/config.js.map +1 -1
- package/components/graph/index.d.ts +8 -7
- package/components/graph/index.js +4 -3
- package/components/graph/index.js.map +1 -1
- package/components/graph/modules/layout.d.ts +7 -7
- package/components/graph/modules/layout.js.map +1 -1
- package/components/graph/modules/link/helper.d.ts +5 -5
- package/components/graph/modules/link/helper.js.map +1 -1
- package/components/graph/modules/link/index.d.ts +6 -6
- package/components/graph/modules/link/index.js.map +1 -1
- package/components/graph/modules/node/index.d.ts +6 -6
- package/components/graph/modules/node/index.js +2 -2
- package/components/graph/modules/node/index.js.map +1 -1
- package/components/graph/modules/panel/helper.d.ts +4 -4
- package/components/graph/modules/panel/helper.js.map +1 -1
- package/components/graph/modules/panel/index.d.ts +3 -3
- package/components/graph/modules/panel/index.js.map +1 -1
- package/components/grouped-bar/config.d.ts +5 -13
- package/components/grouped-bar/config.js +5 -16
- package/components/grouped-bar/config.js.map +1 -1
- package/components/grouped-bar/index.d.ts +4 -3
- package/components/grouped-bar/index.js +4 -3
- package/components/grouped-bar/index.js.map +1 -1
- package/components/leaflet-flow-map/config.d.ts +2 -16
- package/components/leaflet-flow-map/config.js +3 -21
- package/components/leaflet-flow-map/config.js.map +1 -1
- package/components/leaflet-flow-map/index.d.ts +4 -3
- package/components/leaflet-flow-map/index.js +3 -2
- package/components/leaflet-flow-map/index.js.map +1 -1
- package/components/leaflet-map/config.d.ts +4 -59
- package/components/leaflet-map/config.js +23 -67
- package/components/leaflet-map/config.js.map +1 -1
- package/components/leaflet-map/index.d.ts +4 -3
- package/components/leaflet-map/index.js +4 -3
- package/components/leaflet-map/index.js.map +1 -1
- package/components/leaflet-map/modules/map.d.ts +3 -3
- package/components/leaflet-map/modules/map.js.map +1 -1
- package/components/leaflet-map/modules/utils.d.ts +4 -4
- package/components/leaflet-map/modules/utils.js +6 -2
- package/components/leaflet-map/modules/utils.js.map +1 -1
- package/components/leaflet-map/renderer/mapboxgl-layer.d.ts +2 -2
- package/components/leaflet-map/renderer/mapboxgl-layer.js.map +1 -1
- package/components/line/config.d.ts +6 -11
- package/components/line/config.js +3 -13
- package/components/line/config.js.map +1 -1
- package/components/line/index.d.ts +4 -3
- package/components/line/index.js +5 -4
- package/components/line/index.js.map +1 -1
- package/components/nested-donut/config.d.ts +2 -21
- package/components/nested-donut/config.js +3 -24
- package/components/nested-donut/config.js.map +1 -1
- package/components/nested-donut/index.d.ts +4 -3
- package/components/nested-donut/index.js +15 -12
- package/components/nested-donut/index.js.map +1 -1
- package/components/nested-donut/modules/arc.d.ts +3 -3
- package/components/nested-donut/modules/arc.js +2 -1
- package/components/nested-donut/modules/arc.js.map +1 -1
- package/components/nested-donut/modules/label.d.ts +2 -2
- package/components/nested-donut/modules/label.js +9 -6
- package/components/nested-donut/modules/label.js.map +1 -1
- package/components/nested-donut/types.d.ts +1 -0
- package/components/nested-donut/types.js.map +1 -1
- package/components/sankey/config.d.ts +2 -47
- package/components/sankey/config.js +10 -57
- package/components/sankey/config.js.map +1 -1
- package/components/sankey/index.d.ts +4 -3
- package/components/sankey/index.js +3 -2
- package/components/sankey/index.js.map +1 -1
- package/components/sankey/modules/label.d.ts +7 -7
- package/components/sankey/modules/label.js.map +1 -1
- package/components/sankey/modules/link.d.ts +2 -2
- package/components/sankey/modules/link.js.map +1 -1
- package/components/sankey/modules/node.d.ts +7 -7
- package/components/sankey/modules/node.js +1 -1
- package/components/sankey/modules/node.js.map +1 -1
- package/components/scatter/config.d.ts +4 -16
- package/components/scatter/config.js +5 -19
- package/components/scatter/config.js.map +1 -1
- package/components/scatter/index.d.ts +4 -3
- package/components/scatter/index.js +5 -5
- package/components/scatter/index.js.map +1 -1
- package/components/scatter/modules/point.d.ts +2 -2
- package/components/scatter/modules/point.js.map +1 -1
- package/components/scatter/modules/utils.d.ts +2 -2
- package/components/scatter/modules/utils.js.map +1 -1
- package/components/stacked-bar/config.d.ts +5 -13
- package/components/stacked-bar/config.js +5 -16
- package/components/stacked-bar/config.js.map +1 -1
- package/components/stacked-bar/index.d.ts +4 -3
- package/components/stacked-bar/index.js +4 -3
- package/components/stacked-bar/index.js.map +1 -1
- package/components/timeline/config.d.ts +5 -16
- package/components/timeline/config.js +9 -21
- package/components/timeline/config.js.map +1 -1
- package/components/timeline/index.d.ts +4 -3
- package/components/timeline/index.js +4 -3
- package/components/timeline/index.js.map +1 -1
- package/components/tooltip/config.d.ts +1 -15
- package/components/tooltip/config.js +12 -16
- package/components/tooltip/config.js.map +1 -1
- package/components/tooltip/index.d.ts +4 -3
- package/components/tooltip/index.js +5 -3
- package/components/tooltip/index.js.map +1 -1
- package/components/topojson-map/config.d.ts +4 -36
- package/components/topojson-map/config.js +3 -38
- package/components/topojson-map/config.js.map +1 -1
- package/components/topojson-map/index.d.ts +4 -3
- package/components/topojson-map/index.js +4 -4
- package/components/topojson-map/index.js.map +1 -1
- package/components/vis-controls/config.d.ts +1 -5
- package/components/vis-controls/config.js +6 -9
- package/components/vis-controls/config.js.map +1 -1
- package/components/vis-controls/index.d.ts +3 -2
- package/components/vis-controls/index.js +5 -2
- package/components/vis-controls/index.js.map +1 -1
- package/components/xy-labels/config.d.ts +4 -16
- package/components/xy-labels/config.js +5 -20
- package/components/xy-labels/config.js.map +1 -1
- package/components/xy-labels/index.d.ts +4 -3
- package/components/xy-labels/index.js +3 -2
- package/components/xy-labels/index.js.map +1 -1
- package/components/xy-labels/modules/label.d.ts +3 -3
- package/components/xy-labels/modules/label.js +1 -1
- package/components/xy-labels/modules/label.js.map +1 -1
- package/containers/single-container/config.d.ts +2 -4
- package/containers/single-container/config.js +3 -8
- package/containers/single-container/config.js.map +1 -1
- package/containers/single-container/index.d.ts +4 -3
- package/containers/single-container/index.js +2 -2
- package/containers/single-container/index.js.map +1 -1
- package/containers/xy-container/config.d.ts +2 -22
- package/containers/xy-container/config.js +3 -26
- package/containers/xy-container/config.js.map +1 -1
- package/containers/xy-container/index.d.ts +3 -2
- package/containers/xy-container/index.js +2 -2
- package/containers/xy-container/index.js.map +1 -1
- package/core/component/config.d.ts +1 -6
- package/core/component/config.js +6 -12
- package/core/component/config.js.map +1 -1
- package/core/component/index.d.ts +7 -5
- package/core/component/index.js +8 -7
- package/core/component/index.js.map +1 -1
- package/core/container/config.d.ts +1 -21
- package/core/container/config.js +21 -25
- package/core/container/config.js.map +1 -1
- package/core/container/index.d.ts +5 -4
- package/core/container/index.js +4 -3
- package/core/container/index.js.map +1 -1
- package/core/xy-component/config.d.ts +2 -10
- package/core/xy-component/config.js +7 -16
- package/core/xy-component/config.js.map +1 -1
- package/core/xy-component/index.d.ts +5 -4
- package/core/xy-component/index.js +2 -0
- package/core/xy-component/index.js.map +1 -1
- package/data-models/map-graph.d.ts +1 -1
- package/data-models/map-graph.js +1 -1
- package/data-models/map-graph.js.map +1 -1
- package/index.js +1 -0
- package/index.js.map +1 -1
- package/package.json +1 -1
- package/types/accessor.d.ts +1 -1
- package/types.js +1 -1
- package/utils/color.d.ts +7 -3
- package/utils/color.js +18 -2
- package/utils/color.js.map +1 -1
- package/utils/data.d.ts +1 -1
- package/utils/data.js.map +1 -1
- package/core/config/index.d.ts +0 -3
- package/core/config/index.js +0 -16
- package/core/config/index.js.map +0 -1
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { BrushBehavior, D3BrushEvent } from 'd3-brush';
|
|
2
2
|
import { Selection } from 'd3-selection';
|
|
3
3
|
import { XYComponentCore } from "../../core/xy-component";
|
|
4
|
-
import {
|
|
4
|
+
import { BrushConfigInterface } from './config';
|
|
5
5
|
import { BrushHandleType } from './types';
|
|
6
6
|
import * as s from './style';
|
|
7
|
-
export declare class Brush<Datum> extends XYComponentCore<Datum,
|
|
7
|
+
export declare class Brush<Datum> extends XYComponentCore<Datum, BrushConfigInterface<Datum>> {
|
|
8
8
|
static selectors: typeof s;
|
|
9
|
+
protected _defaultConfig: BrushConfigInterface<Datum>;
|
|
9
10
|
clippable: boolean;
|
|
10
|
-
config:
|
|
11
|
+
config: BrushConfigInterface<Datum>;
|
|
11
12
|
brush: Selection<SVGGElement, unknown, SVGGElement, unknown>;
|
|
12
13
|
unselectedRange: Selection<SVGRectElement, BrushHandleType, SVGGElement, unknown>;
|
|
13
14
|
handleLines: Selection<SVGLineElement, BrushHandleType, SVGGElement, unknown>;
|
|
@@ -3,7 +3,7 @@ import { XYComponentCore } from '../../core/xy-component/index.js';
|
|
|
3
3
|
import { isNumber, clamp } from '../../utils/data.js';
|
|
4
4
|
import { smartTransition } from '../../utils/d3.js';
|
|
5
5
|
import { Arrangement } from '../../types/position.js';
|
|
6
|
-
import {
|
|
6
|
+
import { BrushDefaultConfig } from './config.js';
|
|
7
7
|
import { BrushDirection } from './types.js';
|
|
8
8
|
import * as style from './style.js';
|
|
9
9
|
import { brush, unselected, handleLine } from './style.js';
|
|
@@ -11,8 +11,9 @@ import { brush, unselected, handleLine } from './style.js';
|
|
|
11
11
|
class Brush extends XYComponentCore {
|
|
12
12
|
constructor(config) {
|
|
13
13
|
super();
|
|
14
|
+
this._defaultConfig = BrushDefaultConfig;
|
|
14
15
|
this.clippable = false; // Don't apply clipping path to this component. See XYContainer
|
|
15
|
-
this.config =
|
|
16
|
+
this.config = this._defaultConfig;
|
|
16
17
|
this.brushBehaviour = brushX();
|
|
17
18
|
this.events = {
|
|
18
19
|
[Brush.selectors.brush]: {},
|
|
@@ -20,7 +21,7 @@ class Brush extends XYComponentCore {
|
|
|
20
21
|
this._selection = null;
|
|
21
22
|
this._firstRender = true;
|
|
22
23
|
if (config)
|
|
23
|
-
this.
|
|
24
|
+
this.setConfig(config);
|
|
24
25
|
this.brush = this.g
|
|
25
26
|
.append('g')
|
|
26
27
|
.attr('class', brush);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/brush/index.ts"],"sourcesContent":["import { BrushBehavior, brushX, D3BrushEvent } from 'd3-brush'\nimport { Selection } from 'd3-selection'\n\n// Core\nimport { XYComponentCore } from 'core/xy-component'\n\n// Utils\nimport { isNumber, clamp } from 'utils/data'\nimport { smartTransition } from 'utils/d3'\n\n// Types\nimport { Arrangement } from 'types/position'\n\n// Config\nimport { BrushConfig, BrushConfigInterface } from './config'\n\n// Local Types\nimport { BrushDirection, BrushHandleType } from './types'\n\n// Styles\nimport * as s from './style'\n\nexport class Brush<Datum> extends XYComponentCore<Datum, BrushConfig<Datum>, BrushConfigInterface<Datum>> {\n static selectors = s\n clippable = false // Don't apply clipping path to this component. See XYContainer\n config: BrushConfig<Datum> = new BrushConfig()\n brush: Selection<SVGGElement, unknown, SVGGElement, unknown>\n unselectedRange: Selection<SVGRectElement, BrushHandleType, SVGGElement, unknown>\n handleLines: Selection<SVGLineElement, BrushHandleType, SVGGElement, unknown>\n brushBehaviour: BrushBehavior<unknown> = brushX()\n events = {\n [Brush.selectors.brush]: {},\n }\n\n private _selection: [number, number] | null = null\n private _firstRender = true\n\n constructor (config?: BrushConfigInterface<Datum>) {\n super()\n if (config) this.config.init(config)\n\n this.brush = this.g\n .append('g')\n .attr('class', s.brush)\n\n const directions: BrushHandleType[] = [{ type: BrushDirection.West }, { type: BrushDirection.East }]\n this.unselectedRange = this.g\n .selectAll(`.${s.unselected}`)\n .data(directions)\n .enter().append('rect')\n .attr('class', s.unselected)\n\n this.handleLines = this.g\n .selectAll(`.${s.handleLine}`)\n .data(directions)\n .enter().append('line')\n .attr('class', s.handleLine)\n }\n\n _render (customDuration?: number): void {\n const { brushBehaviour, config } = this\n const duration = isNumber(customDuration) ? customDuration : config.duration\n const xScale = this.xScale\n\n brushBehaviour\n .extent([[0, 0], [this._width, this._height]])\n .on('start', this._onBrushStart.bind(this))\n .on('brush', this._onBrushMove.bind(this))\n .on('end', this._onBrushEnd.bind(this))\n\n this.brush\n .call(brushBehaviour)\n .classed('non-draggable', !config.draggable)\n\n const yRange = [this._height, 0]\n const h = yRange[0] - yRange[1]\n\n this.g.selectAll('.handle')\n .attr('y', yRange[1])\n .attr('height', h)\n\n this.unselectedRange\n .attr('y', yRange[1])\n .attr('height', h)\n\n this.handleLines\n .attr('y1', yRange[1] + 10)\n .attr('y2', yRange[1] + h - 10)\n\n // We save the X scale range and set it to the available horizontal space to calculate the selection range in pixels correctly\n const xRange = [0, this._width]\n const xScaleRange = xScale.range()\n xScale.range(xRange)\n const selectionMin = clamp(xScale((config.selection || this._selection)?.[0]) ?? 0, xRange[0], xRange[1])\n const selectionMax = clamp(xScale((config.selection || this._selection)?.[1]) ?? 0, xRange[0], xRange[1])\n xScale.range(xScaleRange) // Restore the X scale range\n\n const selectionLength = selectionMax - selectionMin\n const brushRange = (selectionLength ? [selectionMin, selectionMax] : xRange) as [number, number]\n this._positionHandles(brushRange)\n\n smartTransition(this.brush, duration)\n .call(brushBehaviour.move, brushRange) // Sets up the brush and calls brush events\n .on('end interrupt', () => { this._firstRender = false })\n // We track the first render to not trigger user events on component initialization\n if (!duration) this._firstRender = false\n }\n\n _updateSelection (s: [number, number]): void {\n const xRange = [0, this._width]\n this.unselectedRange\n .attr('x', d => d.type === BrushDirection.West ? xRange[0] : s[1])\n .attr('width', d => {\n const length = d.type === BrushDirection.West ? s[0] - xRange[0] : xRange[1] - s[1]\n const lengthClamped = clamp(length, 0, xRange[1] - xRange[0])\n return lengthClamped\n })\n\n this._positionHandles(s)\n\n // D3 sets brush handle height to be too long, so we need to update it\n const yRange = [this._height, 0]\n const h = yRange[0] - yRange[1]\n this.g.selectAll('.handle')\n .attr('y', yRange[1])\n .attr('height', h)\n }\n\n private _positionHandles (s: [number, number]): void {\n const { config } = this\n\n this.brush.selectAll<SVGRectElement, BrushHandleType>('.handle')\n .attr('width', config.handleWidth)\n .attr('x', d => {\n if (!s) return 0\n const west = d.type === BrushDirection.West\n const inside = config.handlePosition === Arrangement.Inside\n\n if (west) return s[0] + (inside ? 0 : -config.handleWidth)\n else return s[1] + (inside ? -config.handleWidth : 0)\n })\n\n this.handleLines\n .attr('transform', d => {\n if (!s) return null\n const west = d.type === BrushDirection.West\n const inside = config.handlePosition === Arrangement.Inside\n return `translate(${west\n ? s[0] - (-1) ** Number(inside) * config.handleWidth / 2\n : s[1] + (-1) ** Number(inside) * config.handleWidth / 2},0)`\n })\n }\n\n _onBrush (event: D3BrushEvent<Datum>): void {\n const { config } = this\n const xScale = this.xScale\n const xRange = [0, this._width]\n const s = (event?.selection || xRange) as [number, number]\n const userDriven = !!event?.sourceEvent\n // Handle edge cases:\n // (event?.selection === null) happens when user clicks to reset the selection\n // (s?.[0] === s?.[1]) happens when user drags the selection out of range\n if (userDriven && (\n (event?.selection === null) || // happens when user clicks to reset the selection\n (s?.[0] === s?.[1]) || // happens when user drags the selection out of range\n (s?.[0] < xRange[0]) || //\n (s?.[0] > xRange[1]) || // happens when you drag the brush and the domain updates\n (s?.[1] < xRange[0]) || // to a smaller one and brush goes out of range\n (s?.[1] > xRange[1]) //\n )) {\n this.brush.call(this.brushBehaviour.move, xRange) // Will trigger the 'brush end' callback with `range`\n return\n }\n\n // When you reset selection by clicking on a non-selected brush area, D3 triggers the brush event twice.\n // The first call will have equal selection coordinates (e.g. [441, 441]), the second call will have the full range (e.g. [0, 700]).\n // To avoid unnecessary render from the first call we skip it\n if (s[0] !== s[1] && isNumber(s[0]) && isNumber(s[1])) {\n // We save the X scale range and set it to the available horizontal space to invert the selection correctly\n const xScaleRange = xScale.range()\n xScale.range(xRange)\n const selectedDomain = s.map(n => +xScale.invert(n)) as [number, number]\n\n if (userDriven) {\n // Constraint the selection if configured\n const xDomain = xScale.domain() as [number, number]\n const xDomainLength = Math.abs(xDomain[1] - xDomain[0])\n const selectionLength = Math.abs(selectedDomain[1] - selectedDomain[0])\n\n if (config.selectionMinLength >= xDomainLength) {\n console.warn('Unovis | Brush: Configured `selectionMinLength` is bigger than the brush domain')\n }\n\n if ((selectionLength < config.selectionMinLength) && (config.selectionMinLength < xDomainLength)) {\n const selection = config.selection ?? this._selection\n const range = [xScale(selection[0]), xScale(selection[1])] as [number, number]\n this.brush.call(this.brushBehaviour.move, range) // Will trigger the 'brush end' callback with `range`\n // Restore the X scale range\n xScale.range(xScaleRange)\n return\n } else {\n this._selection = selectedDomain\n // Restore the X scale range\n xScale.range(xScaleRange)\n }\n }\n\n this._updateSelection(s)\n if (!this._firstRender) config.onBrush(selectedDomain, event, userDriven)\n }\n }\n\n _onBrushStart (event: D3BrushEvent<Datum>): void {\n const { config } = this\n\n this._onBrush(event)\n if (!this._firstRender) config.onBrushStart(this._selection, event, !!event?.sourceEvent)\n }\n\n _onBrushMove (event: D3BrushEvent<Datum>): void {\n const { config } = this\n\n this._onBrush(event)\n if (!this._firstRender) config.onBrushMove(this._selection, event, !!event?.sourceEvent)\n }\n\n _onBrushEnd (event: D3BrushEvent<Datum>): void {\n const { config } = this\n\n this._onBrush(event)\n if (!this._firstRender) config.onBrushEnd(this._selection, event, !!event?.sourceEvent)\n }\n}\n"],"names":["s.brush","s.unselected","s.handleLine","s"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/brush/index.ts"],"sourcesContent":["import { BrushBehavior, brushX, D3BrushEvent } from 'd3-brush'\nimport { Selection } from 'd3-selection'\n\n// Core\nimport { XYComponentCore } from 'core/xy-component'\n\n// Utils\nimport { isNumber, clamp } from 'utils/data'\nimport { smartTransition } from 'utils/d3'\n\n// Types\nimport { Arrangement } from 'types/position'\n\n// Config\nimport { BrushDefaultConfig, BrushConfigInterface } from './config'\n\n// Local Types\nimport { BrushDirection, BrushHandleType } from './types'\n\n// Styles\nimport * as s from './style'\n\nexport class Brush<Datum> extends XYComponentCore<Datum, BrushConfigInterface<Datum>> {\n static selectors = s\n protected _defaultConfig = BrushDefaultConfig as BrushConfigInterface<Datum>\n clippable = false // Don't apply clipping path to this component. See XYContainer\n public config: BrushConfigInterface<Datum> = this._defaultConfig\n brush: Selection<SVGGElement, unknown, SVGGElement, unknown>\n unselectedRange: Selection<SVGRectElement, BrushHandleType, SVGGElement, unknown>\n handleLines: Selection<SVGLineElement, BrushHandleType, SVGGElement, unknown>\n brushBehaviour: BrushBehavior<unknown> = brushX()\n events = {\n [Brush.selectors.brush]: {},\n }\n\n private _selection: [number, number] | null = null\n private _firstRender = true\n\n constructor (config?: BrushConfigInterface<Datum>) {\n super()\n if (config) this.setConfig(config)\n\n this.brush = this.g\n .append('g')\n .attr('class', s.brush)\n\n const directions: BrushHandleType[] = [{ type: BrushDirection.West }, { type: BrushDirection.East }]\n this.unselectedRange = this.g\n .selectAll(`.${s.unselected}`)\n .data(directions)\n .enter().append('rect')\n .attr('class', s.unselected)\n\n this.handleLines = this.g\n .selectAll(`.${s.handleLine}`)\n .data(directions)\n .enter().append('line')\n .attr('class', s.handleLine)\n }\n\n _render (customDuration?: number): void {\n const { brushBehaviour, config } = this\n const duration = isNumber(customDuration) ? customDuration : config.duration\n const xScale = this.xScale\n\n brushBehaviour\n .extent([[0, 0], [this._width, this._height]])\n .on('start', this._onBrushStart.bind(this))\n .on('brush', this._onBrushMove.bind(this))\n .on('end', this._onBrushEnd.bind(this))\n\n this.brush\n .call(brushBehaviour)\n .classed('non-draggable', !config.draggable)\n\n const yRange = [this._height, 0]\n const h = yRange[0] - yRange[1]\n\n this.g.selectAll('.handle')\n .attr('y', yRange[1])\n .attr('height', h)\n\n this.unselectedRange\n .attr('y', yRange[1])\n .attr('height', h)\n\n this.handleLines\n .attr('y1', yRange[1] + 10)\n .attr('y2', yRange[1] + h - 10)\n\n // We save the X scale range and set it to the available horizontal space to calculate the selection range in pixels correctly\n const xRange = [0, this._width]\n const xScaleRange = xScale.range()\n xScale.range(xRange)\n const selectionMin = clamp(xScale((config.selection || this._selection)?.[0]) ?? 0, xRange[0], xRange[1])\n const selectionMax = clamp(xScale((config.selection || this._selection)?.[1]) ?? 0, xRange[0], xRange[1])\n xScale.range(xScaleRange) // Restore the X scale range\n\n const selectionLength = selectionMax - selectionMin\n const brushRange = (selectionLength ? [selectionMin, selectionMax] : xRange) as [number, number]\n this._positionHandles(brushRange)\n\n smartTransition(this.brush, duration)\n .call(brushBehaviour.move, brushRange) // Sets up the brush and calls brush events\n .on('end interrupt', () => { this._firstRender = false })\n // We track the first render to not trigger user events on component initialization\n if (!duration) this._firstRender = false\n }\n\n _updateSelection (s: [number, number]): void {\n const xRange = [0, this._width]\n this.unselectedRange\n .attr('x', d => d.type === BrushDirection.West ? xRange[0] : s[1])\n .attr('width', d => {\n const length = d.type === BrushDirection.West ? s[0] - xRange[0] : xRange[1] - s[1]\n const lengthClamped = clamp(length, 0, xRange[1] - xRange[0])\n return lengthClamped\n })\n\n this._positionHandles(s)\n\n // D3 sets brush handle height to be too long, so we need to update it\n const yRange = [this._height, 0]\n const h = yRange[0] - yRange[1]\n this.g.selectAll('.handle')\n .attr('y', yRange[1])\n .attr('height', h)\n }\n\n private _positionHandles (s: [number, number]): void {\n const { config } = this\n\n this.brush.selectAll<SVGRectElement, BrushHandleType>('.handle')\n .attr('width', config.handleWidth)\n .attr('x', d => {\n if (!s) return 0\n const west = d.type === BrushDirection.West\n const inside = config.handlePosition === Arrangement.Inside\n\n if (west) return s[0] + (inside ? 0 : -config.handleWidth)\n else return s[1] + (inside ? -config.handleWidth : 0)\n })\n\n this.handleLines\n .attr('transform', d => {\n if (!s) return null\n const west = d.type === BrushDirection.West\n const inside = config.handlePosition === Arrangement.Inside\n return `translate(${west\n ? s[0] - (-1) ** Number(inside) * config.handleWidth / 2\n : s[1] + (-1) ** Number(inside) * config.handleWidth / 2},0)`\n })\n }\n\n _onBrush (event: D3BrushEvent<Datum>): void {\n const { config } = this\n const xScale = this.xScale\n const xRange = [0, this._width]\n const s = (event?.selection || xRange) as [number, number]\n const userDriven = !!event?.sourceEvent\n // Handle edge cases:\n // (event?.selection === null) happens when user clicks to reset the selection\n // (s?.[0] === s?.[1]) happens when user drags the selection out of range\n if (userDriven && (\n (event?.selection === null) || // happens when user clicks to reset the selection\n (s?.[0] === s?.[1]) || // happens when user drags the selection out of range\n (s?.[0] < xRange[0]) || //\n (s?.[0] > xRange[1]) || // happens when you drag the brush and the domain updates\n (s?.[1] < xRange[0]) || // to a smaller one and brush goes out of range\n (s?.[1] > xRange[1]) //\n )) {\n this.brush.call(this.brushBehaviour.move, xRange) // Will trigger the 'brush end' callback with `range`\n return\n }\n\n // When you reset selection by clicking on a non-selected brush area, D3 triggers the brush event twice.\n // The first call will have equal selection coordinates (e.g. [441, 441]), the second call will have the full range (e.g. [0, 700]).\n // To avoid unnecessary render from the first call we skip it\n if (s[0] !== s[1] && isNumber(s[0]) && isNumber(s[1])) {\n // We save the X scale range and set it to the available horizontal space to invert the selection correctly\n const xScaleRange = xScale.range()\n xScale.range(xRange)\n const selectedDomain = s.map(n => +xScale.invert(n)) as [number, number]\n\n if (userDriven) {\n // Constraint the selection if configured\n const xDomain = xScale.domain() as [number, number]\n const xDomainLength = Math.abs(xDomain[1] - xDomain[0])\n const selectionLength = Math.abs(selectedDomain[1] - selectedDomain[0])\n\n if (config.selectionMinLength >= xDomainLength) {\n console.warn('Unovis | Brush: Configured `selectionMinLength` is bigger than the brush domain')\n }\n\n if ((selectionLength < config.selectionMinLength) && (config.selectionMinLength < xDomainLength)) {\n const selection = config.selection ?? this._selection\n const range = [xScale(selection[0]), xScale(selection[1])] as [number, number]\n this.brush.call(this.brushBehaviour.move, range) // Will trigger the 'brush end' callback with `range`\n // Restore the X scale range\n xScale.range(xScaleRange)\n return\n } else {\n this._selection = selectedDomain\n // Restore the X scale range\n xScale.range(xScaleRange)\n }\n }\n\n this._updateSelection(s)\n if (!this._firstRender) config.onBrush(selectedDomain, event, userDriven)\n }\n }\n\n _onBrushStart (event: D3BrushEvent<Datum>): void {\n const { config } = this\n\n this._onBrush(event)\n if (!this._firstRender) config.onBrushStart(this._selection, event, !!event?.sourceEvent)\n }\n\n _onBrushMove (event: D3BrushEvent<Datum>): void {\n const { config } = this\n\n this._onBrush(event)\n if (!this._firstRender) config.onBrushMove(this._selection, event, !!event?.sourceEvent)\n }\n\n _onBrushEnd (event: D3BrushEvent<Datum>): void {\n const { config } = this\n\n this._onBrush(event)\n if (!this._firstRender) config.onBrushEnd(this._selection, event, !!event?.sourceEvent)\n }\n}\n"],"names":["s.brush","s.unselected","s.handleLine","s"],"mappings":"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"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { BulletLegendItemInterface } from './types';
|
|
1
|
+
import { BulletLegendItemInterface, BulletShape } from './types';
|
|
3
2
|
export interface BulletLegendConfigInterface {
|
|
4
3
|
/** Legend items. Array of `BulletLegendItemInterface`:
|
|
5
4
|
* ```
|
|
@@ -21,14 +20,9 @@ export interface BulletLegendConfigInterface {
|
|
|
21
20
|
labelFontSize?: string | null;
|
|
22
21
|
/** Label text (<span> element) max-width CSS property. Default: `null` */
|
|
23
22
|
labelMaxWidth?: string | null;
|
|
24
|
-
/** Bullet
|
|
23
|
+
/** Bullet shape size, mapped to the width and height CSS properties. Default: `null` */
|
|
25
24
|
bulletSize?: string | null;
|
|
25
|
+
/** Bullet shape: `BulletShape.Circle`, `BulletShape.Line` or `BulletShape.Square`. Default: `BulletShape.Circle` */
|
|
26
|
+
bulletShape?: BulletShape;
|
|
26
27
|
}
|
|
27
|
-
export declare
|
|
28
|
-
items: BulletLegendItemInterface[];
|
|
29
|
-
labelClassName: string;
|
|
30
|
-
onLegendItemClick: any;
|
|
31
|
-
labelFontSize: any;
|
|
32
|
-
labelMaxWidth: any;
|
|
33
|
-
bulletSize: any;
|
|
34
|
-
}
|
|
28
|
+
export declare const BulletLegendDefaultConfig: BulletLegendConfigInterface;
|
|
@@ -1,16 +1,15 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { BulletShape } from './types.js';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}
|
|
3
|
+
// Local Types
|
|
4
|
+
const BulletLegendDefaultConfig = {
|
|
5
|
+
items: [],
|
|
6
|
+
labelClassName: '',
|
|
7
|
+
onLegendItemClick: undefined,
|
|
8
|
+
labelFontSize: null,
|
|
9
|
+
labelMaxWidth: null,
|
|
10
|
+
bulletSize: null,
|
|
11
|
+
bulletShape: BulletShape.Circle,
|
|
12
|
+
};
|
|
14
13
|
|
|
15
|
-
export {
|
|
14
|
+
export { BulletLegendDefaultConfig };
|
|
16
15
|
//# sourceMappingURL=config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sources":["../../../src/components/bullet-legend/config.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"config.js","sources":["../../../src/components/bullet-legend/config.ts"],"sourcesContent":["// Local Types\nimport { BulletLegendItemInterface, BulletShape } from './types'\n\nexport interface BulletLegendConfigInterface {\n /** Legend items. Array of `BulletLegendItemInterface`:\n * ```\n * {\n * name: string | number;\n * color?: string;\n * inactive?: boolean;\n * hidden?: boolean;\n * pointer?: boolean;\n * }\n * ```\n * Default: `[]` */\n items: BulletLegendItemInterface[];\n /** Apply a specific class to the labels. Default: `''` */\n labelClassName?: string;\n /** Callback function for the legend item click. Default: `undefined` */\n onLegendItemClick?: ((d: BulletLegendItemInterface, i: number) => void);\n /** Label text (<span> element) font-size CSS. Default: `null` */\n labelFontSize?: string | null;\n /** Label text (<span> element) max-width CSS property. Default: `null` */\n labelMaxWidth?: string | null;\n /** Bullet shape size, mapped to the width and height CSS properties. Default: `null` */\n bulletSize?: string | null;\n /** Bullet shape: `BulletShape.Circle`, `BulletShape.Line` or `BulletShape.Square`. Default: `BulletShape.Circle` */\n bulletShape?: BulletShape;\n}\n\nexport const BulletLegendDefaultConfig: BulletLegendConfigInterface = {\n items: [],\n labelClassName: '',\n onLegendItemClick: undefined,\n labelFontSize: null,\n labelMaxWidth: null,\n bulletSize: null,\n bulletShape: BulletShape.Circle,\n}\n"],"names":[],"mappings":";;AAAA;AA8Ba,MAAA,yBAAyB,GAAgC;AACpE,IAAA,KAAK,EAAE,EAAE;AACT,IAAA,cAAc,EAAE,EAAE;AAClB,IAAA,iBAAiB,EAAE,SAAS;AAC5B,IAAA,aAAa,EAAE,IAAI;AACnB,IAAA,aAAa,EAAE,IAAI;AACnB,IAAA,UAAU,EAAE,IAAI;IAChB,WAAW,EAAE,WAAW,CAAC,MAAM;;;;;"}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { Selection } from 'd3-selection';
|
|
2
|
-
import {
|
|
2
|
+
import { BulletLegendConfigInterface } from './config';
|
|
3
3
|
import { BulletLegendItemInterface } from './types';
|
|
4
4
|
import * as s from './style';
|
|
5
5
|
export declare class BulletLegend {
|
|
6
6
|
static selectors: typeof s;
|
|
7
|
+
protected _defaultConfig: BulletLegendConfigInterface;
|
|
8
|
+
config: BulletLegendConfigInterface;
|
|
7
9
|
div: Selection<HTMLDivElement, unknown, null, undefined>;
|
|
8
10
|
element: HTMLElement;
|
|
9
|
-
prevConfig:
|
|
10
|
-
config: BulletLegendConfig;
|
|
11
|
+
prevConfig: BulletLegendConfigInterface;
|
|
11
12
|
protected _container: HTMLElement;
|
|
12
13
|
private _colorAccessor;
|
|
13
14
|
constructor(element: HTMLElement, config?: BulletLegendConfigInterface);
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { select } from 'd3-selection';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
2
|
+
import { merge } from '../../utils/data.js';
|
|
3
|
+
import { BulletLegendDefaultConfig } from './config.js';
|
|
4
|
+
import { createBullets, updateBullets } from './modules/shape.js';
|
|
5
5
|
import * as style from './style.js';
|
|
6
6
|
import { root, item, bullet, label, clickable } from './style.js';
|
|
7
7
|
|
|
8
8
|
class BulletLegend {
|
|
9
9
|
constructor(element, config) {
|
|
10
|
+
this._defaultConfig = BulletLegendDefaultConfig;
|
|
11
|
+
this.config = this._defaultConfig;
|
|
10
12
|
this._colorAccessor = (d) => d.color;
|
|
11
13
|
this._container = element;
|
|
12
14
|
// Create SVG element for visualizations
|
|
@@ -19,7 +21,7 @@ class BulletLegend {
|
|
|
19
21
|
}
|
|
20
22
|
update(config) {
|
|
21
23
|
this.prevConfig = this.config;
|
|
22
|
-
this.config =
|
|
24
|
+
this.config = merge(this._defaultConfig, config);
|
|
23
25
|
this.render();
|
|
24
26
|
}
|
|
25
27
|
render() {
|
|
@@ -32,8 +34,7 @@ class BulletLegend {
|
|
|
32
34
|
.on('click', this._onItemClick.bind(this));
|
|
33
35
|
legendItemsEnter.append('span')
|
|
34
36
|
.attr('class', bullet)
|
|
35
|
-
.
|
|
36
|
-
.style('height', config.bulletSize);
|
|
37
|
+
.call(createBullets, config);
|
|
37
38
|
legendItemsEnter.append('span')
|
|
38
39
|
.attr('class', label)
|
|
39
40
|
.classed(config.labelClassName, true)
|
|
@@ -43,18 +44,10 @@ class BulletLegend {
|
|
|
43
44
|
legendItemsMerged
|
|
44
45
|
.classed(clickable, d => !!config.onLegendItemClick && this._isItemClickable(d))
|
|
45
46
|
.style('display', (d) => d.hidden ? 'none' : null);
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
.style('
|
|
49
|
-
|
|
50
|
-
if (d.inactive) {
|
|
51
|
-
const bulletColor = window.getComputedStyle(elements[i]).getPropertyValue('background-color');
|
|
52
|
-
const transparentColor = color(bulletColor);
|
|
53
|
-
transparentColor.opacity = 0.4;
|
|
54
|
-
select(elements[i])
|
|
55
|
-
.style('background-color', transparentColor.toString());
|
|
56
|
-
}
|
|
57
|
-
});
|
|
47
|
+
legendItemsMerged.select(`.${bullet}`)
|
|
48
|
+
.style('min-width', config.bulletSize)
|
|
49
|
+
.style('height', config.bulletSize)
|
|
50
|
+
.call(updateBullets, this.config, this._colorAccessor);
|
|
58
51
|
legendItemsMerged.select(`.${label}`)
|
|
59
52
|
.text((d) => d.name);
|
|
60
53
|
legendItems.exit().remove();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/bullet-legend/index.ts"],"sourcesContent":["import { select, Selection } from 'd3-selection'\
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/bullet-legend/index.ts"],"sourcesContent":["import { select, Selection } from 'd3-selection'\n\n// Utils\nimport { merge } from 'utils/data'\n\n// Config\nimport { BulletLegendDefaultConfig, BulletLegendConfigInterface } from './config'\n\n// Local Types\nimport { BulletLegendItemInterface } from './types'\n\n// Modules\nimport { createBullets, updateBullets } from './modules/shape'\n\n// Styles\nimport * as s from './style'\n\nexport class BulletLegend {\n static selectors = s\n protected _defaultConfig = BulletLegendDefaultConfig as BulletLegendConfigInterface\n public config: BulletLegendConfigInterface = this._defaultConfig\n\n div: Selection<HTMLDivElement, unknown, null, undefined>\n element: HTMLElement\n prevConfig: BulletLegendConfigInterface\n protected _container: HTMLElement\n\n private _colorAccessor = (d: BulletLegendItemInterface): string => d.color\n\n constructor (element: HTMLElement, config?: BulletLegendConfigInterface) {\n this._container = element\n\n // Create SVG element for visualizations\n this.div = select(this._container)\n .append('div')\n .attr('class', s.root)\n\n this.element = this.div.node()\n\n if (config) this.update(config)\n }\n\n update (config: BulletLegendConfigInterface): void {\n this.prevConfig = this.config\n this.config = merge(this._defaultConfig, config)\n this.render()\n }\n\n render (): void {\n const { config } = this\n const legendItems = this.div.selectAll<HTMLDivElement, unknown>(`.${s.item}`)\n .data(config.items)\n\n const legendItemsEnter = legendItems.enter()\n .append('div')\n .attr('class', s.item)\n .on('click', this._onItemClick.bind(this))\n\n legendItemsEnter.append('span')\n .attr('class', s.bullet)\n .call(createBullets, config)\n\n legendItemsEnter.append('span')\n .attr('class', s.label)\n .classed(config.labelClassName, true)\n .style('max-width', config.labelMaxWidth)\n .style('font-size', config.labelFontSize)\n\n const legendItemsMerged = legendItemsEnter.merge(legendItems)\n legendItemsMerged\n .classed(s.clickable, d => !!config.onLegendItemClick && this._isItemClickable(d))\n .style('display', (d: BulletLegendItemInterface) => d.hidden ? 'none' : null)\n\n legendItemsMerged.select<HTMLSpanElement>(`.${s.bullet}`)\n .style('min-width', config.bulletSize)\n .style('height', config.bulletSize)\n .call(updateBullets, this.config, this._colorAccessor)\n\n legendItemsMerged.select(`.${s.label}`)\n .text((d: BulletLegendItemInterface) => d.name)\n\n legendItems.exit().remove()\n }\n\n _isItemClickable (item: BulletLegendItemInterface): boolean {\n return item.pointer === undefined ? true : item.pointer\n }\n\n _onItemClick (event: MouseEvent, d: BulletLegendItemInterface): void {\n const { config: { onLegendItemClick } } = this\n\n const legendItems = this.div.selectAll(`.${s.item}`).nodes() as HTMLElement[]\n const index = legendItems.indexOf(event.currentTarget as HTMLElement)\n if (onLegendItemClick) onLegendItemClick(d, index)\n }\n\n public destroy (): void {\n this.div.remove()\n }\n}\n"],"names":["s.root","s.item","s.bullet","s.label","s.clickable","s"],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Selection } from 'd3-selection';
|
|
2
|
+
import { ColorAccessor } from "../../../types/accessor";
|
|
3
|
+
import { BulletLegendConfigInterface } from '../config';
|
|
4
|
+
import { BulletLegendItemInterface } from '../types';
|
|
5
|
+
export declare function createBullets(container: Selection<HTMLSpanElement, BulletLegendItemInterface, HTMLDivElement, unknown>, config: BulletLegendConfigInterface): void;
|
|
6
|
+
export declare function updateBullets(container: Selection<HTMLSpanElement, BulletLegendItemInterface, HTMLDivElement, unknown>, config: BulletLegendConfigInterface, colorAccessor: ColorAccessor<BulletLegendItemInterface>): void;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { getColor } from '../../../utils/color.js';
|
|
2
|
+
import { circlePath } from '../../../utils/path.js';
|
|
3
|
+
import { BulletShape } from '../types.js';
|
|
4
|
+
|
|
5
|
+
// Utils
|
|
6
|
+
// Size with respect to the viewBox. We use this to compute path data which is independent of the
|
|
7
|
+
// the configured size.
|
|
8
|
+
const BULLET_SIZE = 20;
|
|
9
|
+
function getWidth(shape) {
|
|
10
|
+
switch (shape) {
|
|
11
|
+
case BulletShape.Line:
|
|
12
|
+
return BULLET_SIZE * 2.5;
|
|
13
|
+
default:
|
|
14
|
+
return BULLET_SIZE;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
function getPath(shape, width, height) {
|
|
18
|
+
switch (shape) {
|
|
19
|
+
case BulletShape.Line:
|
|
20
|
+
return `M0,${height / 2} L${width / 2},${height / 2} L${width},${height / 2}`;
|
|
21
|
+
case BulletShape.Square:
|
|
22
|
+
return `M0,0 L${width},0 L${width},${height} L0,${height}Z`;
|
|
23
|
+
case BulletShape.Circle:
|
|
24
|
+
return circlePath(height / 2, height / 2, height / 2 - 1);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function createBullets(container, config) {
|
|
28
|
+
container.append('svg')
|
|
29
|
+
.attr('width', '100%')
|
|
30
|
+
.attr('height', '100%')
|
|
31
|
+
.append('path')
|
|
32
|
+
.attr('d', getPath(config.bulletShape, getWidth(config.bulletShape), BULLET_SIZE));
|
|
33
|
+
}
|
|
34
|
+
function updateBullets(container, config, colorAccessor) {
|
|
35
|
+
const height = BULLET_SIZE;
|
|
36
|
+
const width = getWidth(config.bulletShape);
|
|
37
|
+
const getOpacity = (d) => d.inactive ? 0.4 : 1;
|
|
38
|
+
const selection = container.select('svg')
|
|
39
|
+
.attr('viewBox', `0 0 ${width} ${height}`)
|
|
40
|
+
.select('path')
|
|
41
|
+
.attr('d', getPath(config.bulletShape, width, height))
|
|
42
|
+
.attr('stroke', (d, i) => getColor(d, colorAccessor, i))
|
|
43
|
+
.style('stroke-width', '1px')
|
|
44
|
+
.style('fill', (d, i) => getColor(d, colorAccessor, i))
|
|
45
|
+
.style('fill-opacity', getOpacity);
|
|
46
|
+
if (config.bulletShape === BulletShape.Line) {
|
|
47
|
+
selection
|
|
48
|
+
.style('stroke-width', `${height / 5}px`)
|
|
49
|
+
.style('opacity', getOpacity)
|
|
50
|
+
.style('fill', null)
|
|
51
|
+
.style('fill-opacity', null)
|
|
52
|
+
.style('marker-start', 'none')
|
|
53
|
+
.style('marker-end', 'none');
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export { createBullets, updateBullets };
|
|
58
|
+
//# sourceMappingURL=shape.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shape.js","sources":["../../../../src/components/bullet-legend/modules/shape.ts"],"sourcesContent":["import { Selection } from 'd3-selection'\n\n// Types\nimport { ColorAccessor } from 'types/accessor'\n\n// Utils\nimport { getColor } from 'utils/color'\nimport { circlePath } from 'utils/path'\n\n// Local types\nimport { BulletLegendConfigInterface } from '../config'\nimport { BulletShape, BulletLegendItemInterface } from '../types'\n\n// Size with respect to the viewBox. We use this to compute path data which is independent of the\n// the configured size.\nconst BULLET_SIZE = 20\n\nfunction getWidth (shape: BulletShape): number {\n switch (shape) {\n case BulletShape.Line:\n return BULLET_SIZE * 2.5\n default:\n return BULLET_SIZE\n }\n}\n\nfunction getPath (shape: BulletShape, width: number, height: number): string {\n switch (shape) {\n case BulletShape.Line:\n return `M0,${height / 2} L${width / 2},${height / 2} L${width},${height / 2}`\n case BulletShape.Square:\n return `M0,0 L${width},0 L${width},${height} L0,${height}Z`\n case BulletShape.Circle:\n return circlePath(height / 2, height / 2, height / 2 - 1)\n }\n}\n\nexport function createBullets (\n container: Selection<HTMLSpanElement, BulletLegendItemInterface, HTMLDivElement, unknown>,\n config: BulletLegendConfigInterface\n): void {\n container.append('svg')\n .attr('width', '100%')\n .attr('height', '100%')\n .append('path')\n .attr('d', getPath(config.bulletShape, getWidth(config.bulletShape), BULLET_SIZE))\n}\n\nexport function updateBullets (\n container: Selection<HTMLSpanElement, BulletLegendItemInterface, HTMLDivElement, unknown>,\n config: BulletLegendConfigInterface,\n colorAccessor: ColorAccessor<BulletLegendItemInterface>\n): void {\n const height = BULLET_SIZE\n const width = getWidth(config.bulletShape)\n\n const getOpacity = (d: BulletLegendItemInterface): number => d.inactive ? 0.4 : 1\n\n const selection = container.select('svg')\n .attr('viewBox', `0 0 ${width} ${height}`)\n .select('path')\n .attr('d', getPath(config.bulletShape, width, height))\n .attr('stroke', (d, i) => getColor(d, colorAccessor, i))\n .style('stroke-width', '1px')\n .style('fill', (d, i) => getColor(d, colorAccessor, i))\n .style('fill-opacity', getOpacity)\n\n if (config.bulletShape === BulletShape.Line) {\n selection\n .style('stroke-width', `${height / 5}px`)\n .style('opacity', getOpacity)\n .style('fill', null)\n .style('fill-opacity', null)\n .style('marker-start', 'none')\n .style('marker-end', 'none')\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -27,7 +27,8 @@ const variables = injectGlobal `
|
|
|
27
27
|
`;
|
|
28
28
|
const item = css `
|
|
29
29
|
label: legendItem;
|
|
30
|
-
display: inline;
|
|
30
|
+
display: inline-flex;
|
|
31
|
+
align-items: center;
|
|
31
32
|
font-family: var(--vis-legend-font-family, var(--vis-font-family));
|
|
32
33
|
margin-right: var(--vis-legend-item-spacing);
|
|
33
34
|
white-space: nowrap;
|
|
@@ -50,18 +51,14 @@ const label = css `
|
|
|
50
51
|
`;
|
|
51
52
|
const bullet = css `
|
|
52
53
|
label: legendItemBullet;
|
|
53
|
-
border-radius: 100%;
|
|
54
|
-
background-color: var(--vis-legend-bullet-inactive-color);
|
|
55
|
-
border: 1px solid;
|
|
56
|
-
display: inline-block;
|
|
57
54
|
margin-right: var(--vis-legend-bullet-label-spacing);
|
|
58
|
-
width: var(--vis-legend-bullet-size);
|
|
55
|
+
min-width: var(--vis-legend-bullet-size);
|
|
59
56
|
height: var(--vis-legend-bullet-size);
|
|
60
|
-
vertical-align: middle;
|
|
61
|
-
|
|
62
|
-
.inactive {
|
|
63
57
|
|
|
58
|
+
> svg {
|
|
59
|
+
display: block;
|
|
64
60
|
}
|
|
61
|
+
}
|
|
65
62
|
`;
|
|
66
63
|
|
|
67
64
|
export { bullet, clickable, item, label, root, variables };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"style.js","sources":["../../../src/components/bullet-legend/style.ts"],"sourcesContent":["import { css, injectGlobal } from '@emotion/css'\n\nexport const root = css`\n label: bullet-legend-component;\n`\n\nexport const variables = injectGlobal`\n :root {\n // Undefined by default to allow proper fallback to var(--vis-font-family)\n /* --vis-legend-font-family: */\n\n --vis-legend-label-color: #6c778c;\n --vis-legend-label-max-width: 300px;\n --vis-legend-label-font-size: 12px;\n --vis-legend-bullet-size: 9px;\n --vis-legend-bullet-inactive-color: #eee;\n --vis-legend-item-spacing: 20px;\n --vis-legend-bullet-label-spacing: 8px;\n\n --vis-dark-legend-label-color: #eee;\n --vis-dark-legend-bullet-inactive-color: #6c778c;\n }\n\n body.theme-dark ${`.${root}`} {\n --vis-legend-label-color: var(--vis-dark-legend-label-color);\n --vis-legend-bullet-inactive-color: var(--vis-dark-legend-bullet-inactive-color);\n }\n`\n\nexport const item = css`\n label: legendItem;\n display: inline;\n font-family: var(--vis-legend-font-family, var(--vis-font-family));\n margin-right: var(--vis-legend-item-spacing);\n white-space: nowrap;\n cursor: default;\n user-select: none;\n`\n\nexport const clickable = css`\n cursor: pointer;\n`\n\nexport const label = css`\n label: legendItemLabel;\n font-size: var(--vis-legend-label-font-size);\n display: inline-block;\n vertical-align: middle;\n color: var(--vis-legend-label-color);\n max-width: var(--vis-legend-label-max-width);\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n`\n\nexport const bullet = css`\n label: legendItemBullet;\n
|
|
1
|
+
{"version":3,"file":"style.js","sources":["../../../src/components/bullet-legend/style.ts"],"sourcesContent":["import { css, injectGlobal } from '@emotion/css'\n\nexport const root = css`\n label: bullet-legend-component;\n`\n\nexport const variables = injectGlobal`\n :root {\n // Undefined by default to allow proper fallback to var(--vis-font-family)\n /* --vis-legend-font-family: */\n\n --vis-legend-label-color: #6c778c;\n --vis-legend-label-max-width: 300px;\n --vis-legend-label-font-size: 12px;\n --vis-legend-bullet-size: 9px;\n --vis-legend-bullet-inactive-color: #eee;\n --vis-legend-item-spacing: 20px;\n --vis-legend-bullet-label-spacing: 8px;\n\n --vis-dark-legend-label-color: #eee;\n --vis-dark-legend-bullet-inactive-color: #6c778c;\n }\n\n body.theme-dark ${`.${root}`} {\n --vis-legend-label-color: var(--vis-dark-legend-label-color);\n --vis-legend-bullet-inactive-color: var(--vis-dark-legend-bullet-inactive-color);\n }\n`\n\nexport const item = css`\n label: legendItem;\n display: inline-flex;\n align-items: center;\n font-family: var(--vis-legend-font-family, var(--vis-font-family));\n margin-right: var(--vis-legend-item-spacing);\n white-space: nowrap;\n cursor: default;\n user-select: none;\n`\n\nexport const clickable = css`\n cursor: pointer;\n`\n\nexport const label = css`\n label: legendItemLabel;\n font-size: var(--vis-legend-label-font-size);\n display: inline-block;\n vertical-align: middle;\n color: var(--vis-legend-label-color);\n max-width: var(--vis-legend-label-max-width);\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n`\n\nexport const bullet = css`\n label: legendItemBullet;\n margin-right: var(--vis-legend-bullet-label-spacing);\n min-width: var(--vis-legend-bullet-size);\n height: var(--vis-legend-bullet-size);\n\n > svg {\n display: block;\n }\n}\n`\n"],"names":[],"mappings":";;AAEO,MAAM,IAAI,GAAG,GAAG,CAAA,CAAA;;EAEtB;AAEM,MAAM,SAAS,GAAG,YAAY,CAAA,CAAA;;;;;;;;;;;;;;;;;AAiBjB,kBAAA,EAAA,CAAA,CAAA,EAAI,IAAI,CAAE,CAAA,CAAA;;;;EAI7B;AAEM,MAAM,IAAI,GAAG,GAAG,CAAA,CAAA;;;;;;;;;EAStB;AAEM,MAAM,SAAS,GAAG,GAAG,CAAA,CAAA;;EAE3B;AAEM,MAAM,KAAK,GAAG,GAAG,CAAA,CAAA;;;;;;;;;;EAUvB;AAEM,MAAM,MAAM,GAAG,GAAG,CAAA,CAAA;;;;;;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"types.js","sources":["../../../src/components/bullet-legend/types.ts"],"sourcesContent":["export interface BulletLegendItemInterface {\n name: string | number;\n color?: string;\n inactive?: boolean;\n hidden?: boolean;\n pointer?: boolean;\n}\n\nexport enum BulletShape {\n Circle = 'circle',\n Line = 'line',\n Square = 'square',\n}\n"],"names":[],"mappings":"IAQY,YAIX;AAJD,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,WAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,WAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACnB,CAAC,EAJW,WAAW,KAAX,WAAW,GAItB,EAAA,CAAA,CAAA;;;;"}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import { ComponentConfigInterface
|
|
1
|
+
import { ComponentConfigInterface } from "../../core/component/config";
|
|
2
2
|
import { ColorAccessor, GenericAccessor, NumericAccessor, StringAccessor } from "../../types/accessor";
|
|
3
|
-
import { ChordInputLink, ChordInputNode, ChordLabelAlignment, ChordNodeDatum } from './types';
|
|
3
|
+
import { ChordInputLink, ChordInputNode, ChordLabelAlignment, ChordLinkDatum, ChordNodeDatum } from './types';
|
|
4
4
|
export interface ChordDiagramConfigInterface<N extends ChordInputNode, L extends ChordInputLink> extends ComponentConfigInterface {
|
|
5
5
|
/** Node id or index to highlight. Overrides default hover behavior if supplied. Default: `undefined` */
|
|
6
6
|
highlightedNodeId?: number | string;
|
|
7
7
|
/** Link ids or index values to highlight. Overrides default hover behavior if supplied. Default: [] */
|
|
8
8
|
highlightedLinkIds?: (number | string)[];
|
|
9
9
|
/** Link color accessor function. Default: `var(--vis-chord-diagram-link-fill-color)` */
|
|
10
|
-
linkColor?: ColorAccessor<L
|
|
10
|
+
linkColor?: ColorAccessor<ChordLinkDatum<N, L>>;
|
|
11
11
|
/** Link value accessor function. Default: `l => l.value` */
|
|
12
|
-
linkValue?: NumericAccessor<L
|
|
12
|
+
linkValue?: NumericAccessor<ChordLinkDatum<N, L>>;
|
|
13
13
|
/** Array of node hierarchy levels. Data records are supposed to have corresponding properties, e.g. ['level1', 'level2']. Default: `[]` */
|
|
14
14
|
nodeLevels?: string[];
|
|
15
15
|
/** Node width in pixels. Default: `15` */
|
|
@@ -23,28 +23,12 @@ export interface ChordDiagramConfigInterface<N extends ChordInputNode, L extends
|
|
|
23
23
|
/** Node label alignment. Default: `ChordLabelAlignment.Along` */
|
|
24
24
|
nodeLabelAlignment?: GenericAccessor<ChordLabelAlignment | string, ChordNodeDatum<N>>;
|
|
25
25
|
/** Pad angle in radians. Constant value or accessor function. Default: `0.02` */
|
|
26
|
-
padAngle?: NumericAccessor<N
|
|
26
|
+
padAngle?: NumericAccessor<ChordNodeDatum<N>>;
|
|
27
27
|
/** Corner radius constant value or accessor function. Default: `2` */
|
|
28
|
-
cornerRadius?: NumericAccessor<N
|
|
28
|
+
cornerRadius?: NumericAccessor<ChordNodeDatum<N>>;
|
|
29
29
|
/** Angular range of the diagram. Default: `[0, 2 * Math.PI]` */
|
|
30
30
|
angleRange?: [number, number];
|
|
31
31
|
/** The exponent property of the radius scale. Default: `2` */
|
|
32
32
|
radiusScaleExponent?: number;
|
|
33
33
|
}
|
|
34
|
-
export declare
|
|
35
|
-
duration: number;
|
|
36
|
-
highlightedNodeId: any;
|
|
37
|
-
highlightedLinkIds: any[];
|
|
38
|
-
linkColor: any;
|
|
39
|
-
linkValue: (d: L) => number;
|
|
40
|
-
nodeLevels: any[];
|
|
41
|
-
nodeWidth: number;
|
|
42
|
-
nodeColor: (d: ChordNodeDatum<N>) => string;
|
|
43
|
-
nodeLabel: (d: ChordNodeDatum<N>) => string;
|
|
44
|
-
nodeLabelColor: any;
|
|
45
|
-
nodeLabelAlignment: ChordLabelAlignment;
|
|
46
|
-
padAngle: number;
|
|
47
|
-
cornerRadius: number;
|
|
48
|
-
angleRange: [number, number];
|
|
49
|
-
radiusScaleExponent: number;
|
|
50
|
-
}
|
|
34
|
+
export declare const ChordDiagramDefaultConfig: ChordDiagramConfigInterface<ChordInputNode, ChordInputLink>;
|
|
@@ -1,27 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ComponentDefaultConfig } from '../../core/component/config.js';
|
|
2
2
|
import { ChordLabelAlignment } from './types.js';
|
|
3
3
|
|
|
4
4
|
/* eslint-disable dot-notation */
|
|
5
|
-
|
|
6
|
-
constructor() {
|
|
7
|
-
super(...arguments);
|
|
8
|
-
this.duration = 800;
|
|
9
|
-
this.highlightedNodeId = undefined;
|
|
10
|
-
this.highlightedLinkIds = [];
|
|
11
|
-
this.linkColor = undefined;
|
|
12
|
-
this.linkValue = (d) => d['value'];
|
|
13
|
-
this.nodeLevels = [];
|
|
14
|
-
this.nodeWidth = 15;
|
|
15
|
-
this.nodeColor = (d) => d['color'];
|
|
16
|
-
this.nodeLabel = (d) => { var _a; return (_a = d['label']) !== null && _a !== void 0 ? _a : d['key']; };
|
|
17
|
-
this.nodeLabelColor = undefined;
|
|
18
|
-
this.nodeLabelAlignment = ChordLabelAlignment.Along;
|
|
19
|
-
this.padAngle = 0.02;
|
|
20
|
-
this.cornerRadius = 2;
|
|
21
|
-
this.angleRange = [0, 2 * Math.PI];
|
|
22
|
-
this.radiusScaleExponent = 2;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
5
|
+
const ChordDiagramDefaultConfig = Object.assign(Object.assign({}, ComponentDefaultConfig), { duration: 800, highlightedNodeId: undefined, highlightedLinkIds: [], linkColor: undefined, linkValue: (d) => d['value'], nodeLevels: [], nodeWidth: 15, nodeColor: (d) => d['color'], nodeLabel: (d) => { var _a; return (_a = d['label']) !== null && _a !== void 0 ? _a : d['key']; }, nodeLabelColor: undefined, nodeLabelAlignment: ChordLabelAlignment.Along, padAngle: 0.02, cornerRadius: 2, angleRange: [0, 2 * Math.PI], radiusScaleExponent: 2 });
|
|
25
6
|
|
|
26
|
-
export {
|
|
7
|
+
export { ChordDiagramDefaultConfig };
|
|
27
8
|
//# sourceMappingURL=config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sources":["../../../src/components/chord-diagram/config.ts"],"sourcesContent":["/* eslint-disable dot-notation */\n\n// Core\nimport { ComponentConfigInterface,
|
|
1
|
+
{"version":3,"file":"config.js","sources":["../../../src/components/chord-diagram/config.ts"],"sourcesContent":["/* eslint-disable dot-notation */\n\n// Core\nimport { ComponentConfigInterface, ComponentDefaultConfig } from 'core/component/config'\n\n// Types\nimport { ColorAccessor, GenericAccessor, NumericAccessor, StringAccessor } from 'types/accessor'\n\n// Local Types\nimport { ChordInputLink, ChordInputNode, ChordLabelAlignment, ChordLinkDatum, ChordNodeDatum } from './types'\n\nexport interface ChordDiagramConfigInterface<N extends ChordInputNode, L extends ChordInputLink> extends ComponentConfigInterface {\n /** Node id or index to highlight. Overrides default hover behavior if supplied. Default: `undefined` */\n highlightedNodeId?: number | string;\n /** Link ids or index values to highlight. Overrides default hover behavior if supplied. Default: [] */\n highlightedLinkIds?: (number | string)[];\n /** Link color accessor function. Default: `var(--vis-chord-diagram-link-fill-color)` */\n linkColor?: ColorAccessor<ChordLinkDatum<N, L>>;\n /** Link value accessor function. Default: `l => l.value` */\n linkValue?: NumericAccessor<ChordLinkDatum<N, L>>;\n /** Array of node hierarchy levels. Data records are supposed to have corresponding properties, e.g. ['level1', 'level2']. Default: `[]` */\n nodeLevels?: string[];\n /** Node width in pixels. Default: `15` */\n nodeWidth?: number;\n /** Node color accessor function ot constant value. Default: `d => d.color` */\n nodeColor?: ColorAccessor<ChordNodeDatum<N>>;\n /** Node label accessor function. Default: `d => d.label ?? d.key` */\n nodeLabel?: StringAccessor<ChordNodeDatum<N>>;\n /** Node label color accessor function. Default: `undefined` */\n nodeLabelColor?: StringAccessor<ChordNodeDatum<N>>;\n /** Node label alignment. Default: `ChordLabelAlignment.Along` */\n nodeLabelAlignment?: GenericAccessor<ChordLabelAlignment | string, ChordNodeDatum<N>>;\n /** Pad angle in radians. Constant value or accessor function. Default: `0.02` */\n padAngle?: NumericAccessor<ChordNodeDatum<N>>;\n /** Corner radius constant value or accessor function. Default: `2` */\n cornerRadius?: NumericAccessor<ChordNodeDatum<N>>;\n /** Angular range of the diagram. Default: `[0, 2 * Math.PI]` */\n angleRange?: [number, number];\n /** The exponent property of the radius scale. Default: `2` */\n radiusScaleExponent?: number;\n}\n\nexport const ChordDiagramDefaultConfig: ChordDiagramConfigInterface<ChordInputNode, ChordInputLink> = {\n ...ComponentDefaultConfig,\n duration: 800,\n highlightedNodeId: undefined,\n highlightedLinkIds: [],\n linkColor: undefined,\n linkValue: <L>(d: L): number => d['value'],\n nodeLevels: [],\n nodeWidth: 15,\n nodeColor: <N>(d: ChordNodeDatum<N>): string => d['color'],\n nodeLabel: <N>(d: ChordNodeDatum<N>): string => d['label'] ?? d['key'],\n nodeLabelColor: undefined,\n nodeLabelAlignment: ChordLabelAlignment.Along,\n padAngle: 0.02,\n cornerRadius: 2,\n angleRange: [0, 2 * Math.PI],\n radiusScaleExponent: 2,\n}\n"],"names":[],"mappings":";;;AAAA;AA0Ca,MAAA,yBAAyB,GACjC,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,sBAAsB,KACzB,QAAQ,EAAE,GAAG,EACb,iBAAiB,EAAE,SAAS,EAC5B,kBAAkB,EAAE,EAAE,EACtB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,CAAI,CAAI,KAAa,CAAC,CAAC,OAAO,CAAC,EAC1C,UAAU,EAAE,EAAE,EACd,SAAS,EAAE,EAAE,EACb,SAAS,EAAE,CAAI,CAAoB,KAAa,CAAC,CAAC,OAAO,CAAC,EAC1D,SAAS,EAAE,CAAI,CAAoB,KAAY,EAAA,IAAA,EAAA,CAAA,CAAC,OAAA,CAAA,EAAA,GAAA,CAAC,CAAC,OAAO,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,CAAC,CAAC,KAAK,CAAC,CAAA,EAAA,EACtE,cAAc,EAAE,SAAS,EACzB,kBAAkB,EAAE,mBAAmB,CAAC,KAAK,EAC7C,QAAQ,EAAE,IAAI,EACd,YAAY,EAAE,CAAC,EACf,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,EAC5B,mBAAmB,EAAE,CAAC,EAAA;;;;"}
|
|
@@ -4,11 +4,12 @@ import { ComponentCore } from "../../core/component";
|
|
|
4
4
|
import { GraphData, GraphDataModel } from "../../data-models/graph";
|
|
5
5
|
import { Spacing } from "../../types/spacing";
|
|
6
6
|
import { ChordInputNode, ChordInputLink, ChordDiagramData, ChordNode, ChordRibbon } from './types';
|
|
7
|
-
import {
|
|
7
|
+
import { ChordDiagramConfigInterface } from './config';
|
|
8
8
|
import * as s from './style';
|
|
9
|
-
export declare class ChordDiagram<N extends ChordInputNode, L extends ChordInputLink> extends ComponentCore<ChordDiagramData<N, L>,
|
|
9
|
+
export declare class ChordDiagram<N extends ChordInputNode, L extends ChordInputLink> extends ComponentCore<ChordDiagramData<N, L>, ChordDiagramConfigInterface<N, L>> {
|
|
10
10
|
static selectors: typeof s;
|
|
11
|
-
|
|
11
|
+
protected _defaultConfig: ChordDiagramConfigInterface<N, L>;
|
|
12
|
+
config: ChordDiagramConfigInterface<N, L>;
|
|
12
13
|
datamodel: GraphDataModel<N, L>;
|
|
13
14
|
nodeGroup: Selection<SVGGElement, unknown, SVGGElement, unknown>;
|
|
14
15
|
linkGroup: Selection<SVGGElement, unknown, SVGGElement, unknown>;
|