@unovis/ts 1.3.0-alpha.4 → 1.3.0-beta.2
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 +1 -10
- package/components/bullet-legend/config.js +11 -14
- package/components/bullet-legend/config.js.map +1 -1
- package/components/bullet-legend/index.d.ts +4 -3
- package/components/bullet-legend/index.js +5 -2
- package/components/bullet-legend/index.js.map +1 -1
- package/components/bullet-legend/modules/shape.js +7 -6
- package/components/bullet-legend/modules/shape.js.map +1 -1
- package/components/bullet-legend/style.js +4 -0
- package/components/bullet-legend/style.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 +12 -15
- 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 +5 -4
- 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 +4 -3
- 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.map +1 -1
- package/components/nested-donut/modules/label.d.ts +2 -2
- package/components/nested-donut/modules/label.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 +4 -2
- package/containers/single-container/index.js.map +1 -1
- package/containers/xy-container/config.d.ts +3 -23
- package/containers/xy-container/config.js +3 -26
- package/containers/xy-container/config.js.map +1 -1
- package/containers/xy-container/index.d.ts +5 -3
- package/containers/xy-container/index.js +5 -5
- 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 +6 -4
- package/core/container/index.js +5 -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/package.json +1 -1
- package/styles/index.js +26 -1
- package/styles/index.js.map +1 -1
- package/styles/patterns.d.ts +17 -0
- package/styles/patterns.js +53 -0
- package/styles/patterns.js.map +1 -0
- package/types/accessor.d.ts +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
|
@@ -2,7 +2,7 @@ import { XYComponentCore } from '../../core/xy-component/index.js';
|
|
|
2
2
|
import { isNumber, getValue, isNumberWithinRange } from '../../utils/data.js';
|
|
3
3
|
import { rectIntersect } from '../../utils/misc.js';
|
|
4
4
|
import { XYLabelPositioning } from './types.js';
|
|
5
|
-
import {
|
|
5
|
+
import { XYLabelsDefaultConfig } from './config.js';
|
|
6
6
|
import { removeLabels, createLabels, updateLabels, getLabelRenderProps } from './modules/label.js';
|
|
7
7
|
import * as style from './style.js';
|
|
8
8
|
import { labelGroup, cluster, label } from './style.js';
|
|
@@ -12,7 +12,8 @@ class XYLabels extends XYComponentCore {
|
|
|
12
12
|
constructor(config) {
|
|
13
13
|
super();
|
|
14
14
|
this.clippable = false;
|
|
15
|
-
this.
|
|
15
|
+
this._defaultConfig = XYLabelsDefaultConfig;
|
|
16
|
+
this.config = this._defaultConfig;
|
|
16
17
|
this.events = {
|
|
17
18
|
[XYLabels.selectors.label]: {},
|
|
18
19
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/xy-labels/index.ts"],"sourcesContent":["// Core\nimport { XYComponentCore } from 'core/xy-component'\n\n// Utils\nimport { getValue, isNumber, isNumberWithinRange } from 'utils/data'\nimport { rectIntersect } from 'utils/misc'\n\n// Local Types\nimport { XYLabelCluster, XYLabel, XYLabelPositioning } from './types'\n\n// Config\nimport {
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/xy-labels/index.ts"],"sourcesContent":["// Core\nimport { XYComponentCore } from 'core/xy-component'\n\n// Utils\nimport { getValue, isNumber, isNumberWithinRange } from 'utils/data'\nimport { rectIntersect } from 'utils/misc'\n\n// Local Types\nimport { XYLabelCluster, XYLabel, XYLabelPositioning } from './types'\n\n// Config\nimport { XYLabelsDefaultConfig, XYLabelsConfigInterface } from './config'\n\n// Modules\nimport { createLabels, updateLabels, removeLabels, getLabelRenderProps } from './modules/label'\n\n// Styles\nimport * as s from './style'\n\nexport class XYLabels<Datum> extends XYComponentCore<Datum, XYLabelsConfigInterface<Datum>> {\n static selectors = s\n clippable = false\n protected _defaultConfig = XYLabelsDefaultConfig as XYLabelsConfigInterface<Datum>\n public config: XYLabelsConfigInterface<Datum> = this._defaultConfig\n\n events = {\n [XYLabels.selectors.label]: {},\n }\n\n constructor (config?: XYLabelsConfigInterface<Datum>) {\n super()\n if (config) this.setConfig(config)\n }\n\n _render (customDuration?: number): void {\n const { config } = this\n const duration = isNumber(customDuration) ? customDuration : config.duration\n\n const labelGroups = this.g\n .selectAll<SVGGElement, XYLabel<Datum> | XYLabelCluster<Datum>>(`.${s.labelGroup}`)\n .data(this._getDataToRender())\n\n const labelGroupsExit = labelGroups.exit<XYLabel<Datum> | XYLabelCluster<Datum>>()\n removeLabels(labelGroupsExit, duration)\n\n const labelGroupsEnter = labelGroups.enter().append('g')\n .attr('class', s.labelGroup)\n .call(createLabels)\n\n const labelGroupsMerged = labelGroupsEnter\n .merge(labelGroups)\n .classed(s.cluster, d => !!(d as XYLabelCluster<Datum>).records)\n .classed(s.label, d => !(d as XYLabelCluster<Datum>).records)\n\n labelGroupsMerged.call(updateLabels, config, duration)\n }\n\n private _getDataToRender (): (XYLabel<Datum> | XYLabelCluster<Datum>)[] {\n const { config, datamodel } = this\n\n const xRange = this.xScale.range() as [number, number]\n const yRange = this.xScale.range() as [number, number]\n\n const labels = datamodel.data?.reduce<XYLabel<Datum>[]>((acc, d) => {\n const xPositioning = getValue<Datum, XYLabelPositioning>(d, config.xPositioning)\n const yPositioning = getValue<Datum, XYLabelPositioning>(d, config.yPositioning)\n const props = getLabelRenderProps(d, this.element, config, this.xScale, this.yScale)\n\n if (\n ((xPositioning !== XYLabelPositioning.DataSpace) || isNumberWithinRange(props.x, xRange)) &&\n ((yPositioning !== XYLabelPositioning.DataSpace) || isNumberWithinRange(props.y, yRange))\n ) {\n acc.push({ ...d, _screen: props })\n }\n\n return acc\n }, []) ?? []\n\n return this._getClusteredLabels(labels)\n }\n\n private _getClusteredLabels (labels: XYLabel<Datum>[]): (XYLabel<Datum> | XYLabelCluster<Datum>)[] {\n const labelsNonOverlapping = [...labels]\n const clusterMap = new Map<XYLabel<Datum>, XYLabel<Datum>[]>()\n for (let i = 0; i < labelsNonOverlapping.length; i += 1) {\n const label1 = labelsNonOverlapping[i]\n for (let j = i + 1; j < labelsNonOverlapping.length; j += 1) {\n const label2 = labelsNonOverlapping[j]\n const isIntersecting = rectIntersect(label1._screen, label2._screen)\n if (isIntersecting) {\n if (!clusterMap.has(label1)) clusterMap.set(label1, [label1])\n clusterMap.get(label1).push(label2)\n labelsNonOverlapping.splice(j, 1)\n j -= 1\n }\n }\n\n if (clusterMap.has(label1)) {\n labelsNonOverlapping.splice(i, 1)\n i -= 1\n }\n }\n\n const clusters = Array.from(clusterMap.values()).map(records => ({\n _screen: getLabelRenderProps(records, this.element, this.config, this.xScale, this.yScale),\n records,\n }))\n\n return [...labelsNonOverlapping, ...clusters]\n }\n}\n"],"names":["s.labelGroup","s.cluster","s.label","s"],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Selection } from 'd3-selection';
|
|
2
2
|
import { ContinuousScale } from "../../../types/scale";
|
|
3
|
-
import {
|
|
3
|
+
import { XYLabelsConfigInterface } from '../config';
|
|
4
4
|
import { XYLabel, XYLabelCluster, XYLabelPositioning, XYLabelRenderProps } from '../types';
|
|
5
5
|
export declare function createLabels<Datum>(selection: Selection<SVGGElement, XYLabel<Datum> | XYLabelCluster<Datum>, any, any>): void;
|
|
6
|
-
export declare function updateLabels<Datum>(selection: Selection<SVGGElement, XYLabel<Datum> | XYLabelCluster<Datum>, any, any>, config:
|
|
6
|
+
export declare function updateLabels<Datum>(selection: Selection<SVGGElement, XYLabel<Datum> | XYLabelCluster<Datum>, any, any>, config: XYLabelsConfigInterface<Datum>, duration: number): void;
|
|
7
7
|
export declare function removeLabels<Datum>(selection: Selection<SVGGElement, XYLabel<Datum> | XYLabelCluster<Datum>, any, any>, duration: number): void;
|
|
8
8
|
export declare function getLabelPosition(value: number, positioning: XYLabelPositioning, scale: ContinuousScale): number;
|
|
9
|
-
export declare function getLabelRenderProps<Datum>(data: Datum | XYLabel<Datum>[], el: SVGGraphicsElement, config:
|
|
9
|
+
export declare function getLabelRenderProps<Datum>(data: Datum | XYLabel<Datum>[], el: SVGGraphicsElement, config: XYLabelsConfigInterface<Datum>, xScale: ContinuousScale, yScale: ContinuousScale): XYLabelRenderProps;
|
|
@@ -79,7 +79,7 @@ function getLabelRenderProps(data, el, config, xScale, yScale) {
|
|
|
79
79
|
const fontSize = isCluster
|
|
80
80
|
? ((_a = getNumber(data, config.clusterFontSize)) !== null && _a !== void 0 ? _a : getCSSVariableValueInPixels('var(--vis-xy-label-cluster-font-size)', el))
|
|
81
81
|
: ((_b = getNumber(data, config.labelFontSize)) !== null && _b !== void 0 ? _b : getCSSVariableValueInPixels('var(--vis-xy-label-font-size)', el));
|
|
82
|
-
const labelText = (isCluster ? config.clusterLabel
|
|
82
|
+
const labelText = (isCluster ? getString(data, config.clusterLabel) : getString(data, config.label)) || '';
|
|
83
83
|
const backgroundHeight = fontSize * 1.7;
|
|
84
84
|
let backgroundWidth = fontSize * labelText.length * 0.7;
|
|
85
85
|
if (backgroundWidth < backgroundHeight)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"label.js","sources":["../../../../src/components/xy-labels/modules/label.ts"],"sourcesContent":["import { Selection, select } from 'd3-selection'\nimport { mean } from 'd3-array'\nimport { color } from 'd3-color'\n\n// Utils\nimport { smartTransition } from 'utils/d3'\nimport { getCSSVariableValueInPixels, getCSSVariableValue, isStringCSSVariable } from 'utils/misc'\nimport { getColor, hexToBrightness } from 'utils/color'\nimport { getNumber, getString, getValue } from 'utils/data'\n\n// Types\nimport { ContinuousScale } from 'types/scale'\n\n// Config\nimport { XYLabelsConfig } from '../config'\n\n// Local Types\nimport { XYLabel, XYLabelCluster, XYLabelPositioning, XYLabelRenderProps } from '../types'\n\nexport function createLabels<Datum> (\n selection: Selection<SVGGElement, XYLabel<Datum> | XYLabelCluster<Datum>, any, any>\n): void {\n selection.attr('transform', d => `translate(${d._screen.x},${d._screen.y})`)\n selection.append('rect').style('fill', d => d._screen.backgroundColor)\n selection.append('text')\n .style('text-anchor', 'middle')\n .style('dominant-baseline', 'central')\n .style('fill', d => d._screen.backgroundColor)\n .style('pointer-events', 'none')\n\n selection.attr('transform', d => `translate(${d._screen.x},${d._screen.y}) scale(0)`)\n}\n\nexport function updateLabels<Datum> (\n selection: Selection<SVGGElement, XYLabel<Datum> | XYLabelCluster<Datum>, any, any>,\n config: XYLabelsConfig<Datum>,\n duration: number\n): void {\n selection.each((d, i, elements) => {\n const group: Selection<SVGGElement, XYLabel<Datum> | XYLabelCluster<Datum>, any, any> = select(elements[i])\n const text = group.select('text')\n const rect = group.select('rect')\n\n const backgroundColor = d._screen.backgroundColor\n const labelText = d._screen.labelText ?? ''\n const labelFontSize = d._screen.fontSize\n let labelColor = d._screen.labelColor\n\n // Label background\n const backgroundHeight = labelFontSize * 1.7\n let backgroundWidth = labelFontSize * labelText.length * 0.7\n if (backgroundWidth < backgroundHeight) backgroundWidth = backgroundHeight\n smartTransition(rect, duration)\n .attr('width', backgroundWidth)\n .attr('height', backgroundHeight)\n .attr('x', -backgroundWidth / 2)\n .attr('y', -backgroundHeight / 2)\n .attr('rx', labelFontSize)\n .attr('ry', labelFontSize)\n .style('fill', backgroundColor)\n\n // Label\n if (!labelColor) {\n const hex = color(isStringCSSVariable(backgroundColor) ? getCSSVariableValue(backgroundColor, group.node()) : backgroundColor)?.hex()\n const brightness = hexToBrightness(hex)\n labelColor = brightness > config.labelTextBrightnessRatio\n ? 'var(--vis-xy-label-text-color-dark)'\n : 'var(--vis-xy-label-text-color-light)'\n }\n\n text.html(labelText)\n .attr('font-size', labelFontSize)\n\n smartTransition(text, duration)\n .style('fill', labelColor)\n\n rect.style('cursor', d._screen.cursor)\n })\n\n smartTransition(selection, duration)\n .attr('transform', d => `translate(${d._screen.x},${d._screen.y}) scale(1)`)\n}\n\nexport function removeLabels<Datum> (\n selection: Selection<SVGGElement, XYLabel<Datum> | XYLabelCluster<Datum>, any, any>,\n duration: number\n): void {\n smartTransition(selection, duration)\n .attr('transform', d => `translate(${d._screen.x},${d._screen.y}) scale(0)`)\n .remove()\n}\n\nexport function getLabelPosition (value: number, positioning: XYLabelPositioning, scale: ContinuousScale): number {\n switch (positioning) {\n case XYLabelPositioning.DataSpace: return scale(value) ?? 0\n case XYLabelPositioning.AbsolutePx: return value\n case XYLabelPositioning.AbsolutePercentage: {\n const scaleRange = scale.range()\n return scaleRange[0] + (scaleRange[1] - scaleRange[0]) * value / 100\n }\n }\n}\n\nexport function getLabelRenderProps<Datum> (\n data: Datum | XYLabel<Datum>[],\n el: SVGGraphicsElement,\n config: XYLabelsConfig<Datum>,\n xScale: ContinuousScale,\n yScale: ContinuousScale\n): XYLabelRenderProps {\n const isCluster = Array.isArray(data)\n const fontSize = isCluster\n ? (getNumber(data, config.clusterFontSize) ?? getCSSVariableValueInPixels('var(--vis-xy-label-cluster-font-size)', el))\n : (getNumber(data, config.labelFontSize) ?? getCSSVariableValueInPixels('var(--vis-xy-label-font-size)', el))\n\n const labelText = (isCluster ? config.clusterLabel(data as XYLabel<Datum>[]) : getString(data, config.label)) || ''\n const backgroundHeight = fontSize * 1.7\n let backgroundWidth = fontSize * labelText.length * 0.7\n if (backgroundWidth < backgroundHeight) backgroundWidth = backgroundHeight\n\n const x = isCluster\n ? mean(data as XYLabel<Datum>[], d => d._screen.x)\n : getLabelPosition(getNumber(data, config.x), getValue(data, config.xPositioning), xScale)\n\n const y = isCluster\n ? mean(data as XYLabel<Datum>[], d => d._screen.y)\n : getLabelPosition(getNumber(data, config.y), getValue(data, config.yPositioning), yScale)\n\n return {\n x,\n y,\n fontSize,\n labelText,\n labelColor: isCluster ? getColor(data, config.clusterLabelColor) : getColor(data, config.color),\n backgroundColor: isCluster ? getColor(data, config.clusterBackgroundColor) : getColor(data, config.backgroundColor),\n cursor: isCluster ? getString(data, config.clusterCursor) : getString(data, config.cursor),\n width: backgroundWidth,\n height: backgroundHeight,\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"label.js","sources":["../../../../src/components/xy-labels/modules/label.ts"],"sourcesContent":["import { Selection, select } from 'd3-selection'\nimport { mean } from 'd3-array'\nimport { color } from 'd3-color'\n\n// Utils\nimport { smartTransition } from 'utils/d3'\nimport { getCSSVariableValueInPixels, getCSSVariableValue, isStringCSSVariable } from 'utils/misc'\nimport { getColor, hexToBrightness } from 'utils/color'\nimport { getNumber, getString, getValue } from 'utils/data'\n\n// Types\nimport { ContinuousScale } from 'types/scale'\n\n// Config\nimport { XYLabelsConfigInterface } from '../config'\n\n// Local Types\nimport { XYLabel, XYLabelCluster, XYLabelPositioning, XYLabelRenderProps } from '../types'\n\nexport function createLabels<Datum> (\n selection: Selection<SVGGElement, XYLabel<Datum> | XYLabelCluster<Datum>, any, any>\n): void {\n selection.attr('transform', d => `translate(${d._screen.x},${d._screen.y})`)\n selection.append('rect').style('fill', d => d._screen.backgroundColor)\n selection.append('text')\n .style('text-anchor', 'middle')\n .style('dominant-baseline', 'central')\n .style('fill', d => d._screen.backgroundColor)\n .style('pointer-events', 'none')\n\n selection.attr('transform', d => `translate(${d._screen.x},${d._screen.y}) scale(0)`)\n}\n\nexport function updateLabels<Datum> (\n selection: Selection<SVGGElement, XYLabel<Datum> | XYLabelCluster<Datum>, any, any>,\n config: XYLabelsConfigInterface<Datum>,\n duration: number\n): void {\n selection.each((d, i, elements) => {\n const group: Selection<SVGGElement, XYLabel<Datum> | XYLabelCluster<Datum>, any, any> = select(elements[i])\n const text = group.select('text')\n const rect = group.select('rect')\n\n const backgroundColor = d._screen.backgroundColor\n const labelText = d._screen.labelText ?? ''\n const labelFontSize = d._screen.fontSize\n let labelColor = d._screen.labelColor\n\n // Label background\n const backgroundHeight = labelFontSize * 1.7\n let backgroundWidth = labelFontSize * labelText.length * 0.7\n if (backgroundWidth < backgroundHeight) backgroundWidth = backgroundHeight\n smartTransition(rect, duration)\n .attr('width', backgroundWidth)\n .attr('height', backgroundHeight)\n .attr('x', -backgroundWidth / 2)\n .attr('y', -backgroundHeight / 2)\n .attr('rx', labelFontSize)\n .attr('ry', labelFontSize)\n .style('fill', backgroundColor)\n\n // Label\n if (!labelColor) {\n const hex = color(isStringCSSVariable(backgroundColor) ? getCSSVariableValue(backgroundColor, group.node()) : backgroundColor)?.hex()\n const brightness = hexToBrightness(hex)\n labelColor = brightness > config.labelTextBrightnessRatio\n ? 'var(--vis-xy-label-text-color-dark)'\n : 'var(--vis-xy-label-text-color-light)'\n }\n\n text.html(labelText)\n .attr('font-size', labelFontSize)\n\n smartTransition(text, duration)\n .style('fill', labelColor)\n\n rect.style('cursor', d._screen.cursor)\n })\n\n smartTransition(selection, duration)\n .attr('transform', d => `translate(${d._screen.x},${d._screen.y}) scale(1)`)\n}\n\nexport function removeLabels<Datum> (\n selection: Selection<SVGGElement, XYLabel<Datum> | XYLabelCluster<Datum>, any, any>,\n duration: number\n): void {\n smartTransition(selection, duration)\n .attr('transform', d => `translate(${d._screen.x},${d._screen.y}) scale(0)`)\n .remove()\n}\n\nexport function getLabelPosition (value: number, positioning: XYLabelPositioning, scale: ContinuousScale): number {\n switch (positioning) {\n case XYLabelPositioning.DataSpace: return scale(value) ?? 0\n case XYLabelPositioning.AbsolutePx: return value\n case XYLabelPositioning.AbsolutePercentage: {\n const scaleRange = scale.range()\n return scaleRange[0] + (scaleRange[1] - scaleRange[0]) * value / 100\n }\n }\n}\n\nexport function getLabelRenderProps<Datum> (\n data: Datum | XYLabel<Datum>[],\n el: SVGGraphicsElement,\n config: XYLabelsConfigInterface<Datum>,\n xScale: ContinuousScale,\n yScale: ContinuousScale\n): XYLabelRenderProps {\n const isCluster = Array.isArray(data)\n const fontSize = isCluster\n ? (getNumber(data as XYLabel<Datum>[], config.clusterFontSize) ?? getCSSVariableValueInPixels('var(--vis-xy-label-cluster-font-size)', el))\n : (getNumber(data as Datum, config.labelFontSize) ?? getCSSVariableValueInPixels('var(--vis-xy-label-font-size)', el))\n\n const labelText = (isCluster ? getString(data as XYLabel<Datum>[], config.clusterLabel) : getString(data as Datum, config.label)) || ''\n const backgroundHeight = fontSize * 1.7\n let backgroundWidth = fontSize * labelText.length * 0.7\n if (backgroundWidth < backgroundHeight) backgroundWidth = backgroundHeight\n\n const x = isCluster\n ? mean(data as XYLabel<Datum>[], d => d._screen.x)\n : getLabelPosition(getNumber(data as Datum, config.x), getValue<Datum, XYLabelPositioning>(data as Datum, config.xPositioning), xScale)\n\n const y = isCluster\n ? mean(data as XYLabel<Datum>[], d => d._screen.y)\n : getLabelPosition(getNumber(data as Datum, config.y), getValue<Datum, XYLabelPositioning>(data as Datum, config.yPositioning), yScale)\n\n return {\n x,\n y,\n fontSize,\n labelText,\n labelColor: isCluster ? getColor(data as XYLabel<Datum>[], config.clusterLabelColor) : getColor(data as Datum, config.color),\n backgroundColor: isCluster ? getColor(data as XYLabel<Datum>[], config.clusterBackgroundColor) : getColor(data as Datum, config.backgroundColor),\n cursor: isCluster ? getString(data as XYLabel<Datum>[], config.clusterCursor) : getString(data as Datum, config.cursor),\n width: backgroundWidth,\n height: backgroundHeight,\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ContainerConfigInterface } from "../../core/container/config";
|
|
2
2
|
import { ComponentCore } from "../../core/component";
|
|
3
3
|
import { Tooltip } from "../../components/tooltip";
|
|
4
4
|
export interface SingleContainerConfigInterface<Datum> extends ContainerConfigInterface {
|
|
@@ -7,6 +7,4 @@ export interface SingleContainerConfigInterface<Datum> extends ContainerConfigIn
|
|
|
7
7
|
/** Tooltip component. Default: `undefined` */
|
|
8
8
|
tooltip?: Tooltip;
|
|
9
9
|
}
|
|
10
|
-
export declare
|
|
11
|
-
tooltip: any;
|
|
12
|
-
}
|
|
10
|
+
export declare const SingleContainerDefaultConfig: SingleContainerConfigInterface<unknown>;
|
|
@@ -1,12 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ContainerDefaultConfig } from '../../core/container/config.js';
|
|
2
2
|
|
|
3
3
|
// Core
|
|
4
|
-
|
|
5
|
-
constructor() {
|
|
6
|
-
super(...arguments);
|
|
7
|
-
this.tooltip = undefined;
|
|
8
|
-
}
|
|
9
|
-
}
|
|
4
|
+
const SingleContainerDefaultConfig = Object.assign(Object.assign({}, ContainerDefaultConfig), { tooltip: undefined });
|
|
10
5
|
|
|
11
|
-
export {
|
|
6
|
+
export { SingleContainerDefaultConfig };
|
|
12
7
|
//# sourceMappingURL=config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sources":["../../../src/containers/single-container/config.ts"],"sourcesContent":["// Core\nimport {
|
|
1
|
+
{"version":3,"file":"config.js","sources":["../../../src/containers/single-container/config.ts"],"sourcesContent":["// Core\nimport { ContainerDefaultConfig, ContainerConfigInterface } from 'core/container/config'\nimport { ComponentCore } from 'core/component'\nimport { Tooltip } from 'components/tooltip'\n\nexport interface SingleContainerConfigInterface<Datum> extends ContainerConfigInterface {\n /** Visualization component. Default: `undefined` */\n component?: ComponentCore<Datum>;\n /** Tooltip component. Default: `undefined` */\n tooltip?: Tooltip;\n}\n\nexport const SingleContainerDefaultConfig: SingleContainerConfigInterface<unknown> = {\n ...ContainerDefaultConfig,\n tooltip: undefined,\n}\n"],"names":[],"mappings":";;AAAA;AAYa,MAAA,4BAA4B,GACpC,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,sBAAsB,KACzB,OAAO,EAAE,SAAS,EAAA;;;;"}
|
|
@@ -2,10 +2,11 @@ import "../../styles/index";
|
|
|
2
2
|
import { ContainerCore } from "../../core/container";
|
|
3
3
|
import { ComponentCore } from "../../core/component";
|
|
4
4
|
import { ComponentConfigInterface } from "../../core/component/config";
|
|
5
|
-
import {
|
|
5
|
+
import { SingleContainerConfigInterface } from './config';
|
|
6
6
|
export declare class SingleContainer<Data> extends ContainerCore {
|
|
7
7
|
component: ComponentCore<Data>;
|
|
8
|
-
config:
|
|
8
|
+
config: SingleContainerConfigInterface<Data>;
|
|
9
|
+
protected _defaultConfig: SingleContainerConfigInterface<Data>;
|
|
9
10
|
constructor(element: HTMLElement, config?: SingleContainerConfigInterface<Data>, data?: Data);
|
|
10
11
|
setData(data: Data, preventRender?: boolean): void;
|
|
11
12
|
updateContainer(containerConfig: SingleContainerConfigInterface<Data>, preventRender?: boolean): void;
|
|
@@ -14,7 +15,7 @@ export declare class SingleContainer<Data> extends ContainerCore {
|
|
|
14
15
|
getFitWidthScale(): number;
|
|
15
16
|
protected _preRender(): void;
|
|
16
17
|
protected _render(duration?: number): void;
|
|
17
|
-
render(duration?:
|
|
18
|
+
render(duration?: number): void;
|
|
18
19
|
protected _onResize(): void;
|
|
19
20
|
destroy(): void;
|
|
20
21
|
}
|
|
@@ -2,14 +2,14 @@ import '../../styles/index.js';
|
|
|
2
2
|
import { ContainerCore } from '../../core/container/index.js';
|
|
3
3
|
import { smartTransition } from '../../utils/d3.js';
|
|
4
4
|
import { Sizing } from '../../types/component.js';
|
|
5
|
-
import {
|
|
5
|
+
import { SingleContainerDefaultConfig } from './config.js';
|
|
6
6
|
|
|
7
7
|
// Global CSS variables (side effects import)
|
|
8
8
|
class SingleContainer extends ContainerCore {
|
|
9
9
|
constructor(element, config, data) {
|
|
10
10
|
var _a;
|
|
11
11
|
super(element);
|
|
12
|
-
this.
|
|
12
|
+
this._defaultConfig = SingleContainerDefaultConfig;
|
|
13
13
|
if (config) {
|
|
14
14
|
this.updateContainer(config, true);
|
|
15
15
|
this.component = config.component;
|
|
@@ -43,6 +43,8 @@ class SingleContainer extends ContainerCore {
|
|
|
43
43
|
tooltip.setContainer(this._container);
|
|
44
44
|
tooltip.setComponents([this.component]);
|
|
45
45
|
}
|
|
46
|
+
// Defs
|
|
47
|
+
this.element.appendChild(this._svgDefs.node());
|
|
46
48
|
if (!preventRender)
|
|
47
49
|
this.render();
|
|
48
50
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/containers/single-container/index.ts"],"sourcesContent":["// Global CSS variables (side effects import)\nimport 'styles/index'\n\n// Core\nimport { ContainerCore } from 'core/container'\nimport { ComponentCore } from 'core/component'\nimport { ComponentConfigInterface } from 'core/component/config'\n\n// Utils\nimport { smartTransition } from 'utils/d3'\n\n// Types\nimport { Sizing, ExtendedSizeComponent } from 'types/component'\n\n// Config\nimport { SingleContainerConfig, SingleContainerConfigInterface } from './config'\n\nexport class SingleContainer<Data> extends ContainerCore {\n component: ComponentCore<Data>\n config: SingleContainerConfig<Data> = new SingleContainerConfig()\n\n constructor (element: HTMLElement, config?: SingleContainerConfigInterface<Data>, data?: Data) {\n super(element)\n\n if (config) {\n this.updateContainer(config, true)\n this.component = config.component\n }\n\n if (data) {\n this.setData(data, true)\n }\n\n // Render if component exists and has data\n if (this.component?.datamodel.data) this.render()\n }\n\n public setData (data: Data, preventRender?: boolean): void {\n const { config } = this\n\n if (this.component) this.component.setData(data)\n if (!preventRender) this.render()\n config.tooltip?.hide()\n }\n\n public updateContainer (containerConfig: SingleContainerConfigInterface<Data>, preventRender?: boolean): void {\n super.updateContainer(containerConfig)\n this._removeAllChildren()\n\n this.component = containerConfig.component\n if (containerConfig.sizing) this.component.sizing = containerConfig.sizing\n this.element.appendChild(this.component.element)\n\n const tooltip = containerConfig.tooltip\n if (tooltip) {\n if (!tooltip.hasContainer()) tooltip.setContainer(this._container)\n tooltip.setComponents([this.component])\n }\n\n if (!preventRender) this.render()\n }\n\n public updateComponent (componentConfig: ComponentConfigInterface, preventRender?: boolean): void {\n this.component.setConfig(componentConfig)\n if (!preventRender) this.render()\n }\n\n public update (\n containerConfig: SingleContainerConfigInterface<Data>,\n componentConfig?: ComponentConfigInterface,\n data?: Data\n ): void {\n if (containerConfig) this.updateContainer(containerConfig, true)\n if (componentConfig) this.updateComponent(componentConfig, true)\n if (data) this.setData(data, true)\n this.render()\n }\n\n public getFitWidthScale (): number {\n const { config, component } = this\n\n const extendedSizeComponent = component as ExtendedSizeComponent\n if (!extendedSizeComponent.getWidth) return 1\n\n const componentWidth = extendedSizeComponent.getWidth() + config.margin.left + config.margin.right\n return this.width / componentWidth\n }\n\n protected _preRender (): void {\n super._preRender()\n this.component.setSize(this.width, this.height, this.containerWidth, this.containerHeight)\n }\n\n protected _render (duration?: number): void {\n const { config, component } = this\n super._render(duration)\n\n component.g.attr('transform', `translate(${config.margin.left},${config.margin.top})`)\n component.render(duration)\n\n if (config.tooltip) config.tooltip.update()\n }\n\n // Re-defining the `render()` function to handle different sizing techniques (`Sizing.Extend` and `Sizing.FitWidth`)\n // Not calling `super.render()` because we don't want it to interfere with setting the SVG size here.\n public render (duration = this.config.duration): void {\n const { config, component } = this\n\n if (config.sizing === Sizing.Extend || config.sizing === Sizing.FitWidth) {\n const fitToWidth = config.sizing === Sizing.FitWidth\n const extendedSizeComponent = component as ExtendedSizeComponent\n\n const componentWidth = extendedSizeComponent.getWidth() + config.margin.left + config.margin.right\n const componentHeight = extendedSizeComponent.getHeight() + config.margin.top + config.margin.bottom\n const scale = fitToWidth ? this.getFitWidthScale() : 1\n\n const currentWidth = this.svg.attr('width')\n const currentHeight = this.svg.attr('height')\n const scaledWidth = componentWidth * scale\n const scaledHeight = componentHeight * scale\n const animated = currentWidth || currentHeight\n\n smartTransition(this.svg, animated ? duration : 0)\n .attr('width', scaledWidth)\n .attr('height', scaledHeight)\n .attr('viewBox', `${0} ${0} ${componentWidth} ${fitToWidth ? scaledHeight : componentHeight}`)\n .attr('preserveAspectRatio', 'xMinYMin')\n } else {\n this.svg\n .attr('width', this.config.width || this.containerWidth)\n .attr('height', this.config.height || this.containerHeight)\n }\n\n // Set up Resize Observer\n if (!this._resizeObserver) this._setUpResizeObserver()\n\n // Schedule the actual rendering in the next frame\n cancelAnimationFrame(this._requestedAnimationFrame)\n this._requestedAnimationFrame = requestAnimationFrame(() => {\n this._preRender()\n this._render(duration)\n })\n }\n\n protected _onResize (): void {\n const { config } = this\n super._onResize()\n config.tooltip?.hide()\n }\n\n public destroy (): void {\n const { component, config } = this\n super.destroy()\n\n component?.destroy()\n config.tooltip?.destroy()\n }\n}\n"],"names":[],"mappings":";;;;;;AAAA;AAiBM,MAAO,eAAsB,SAAQ,aAAa,CAAA;AAItD,IAAA,WAAA,CAAa,OAAoB,EAAE,MAA6C,EAAE,IAAW,EAAA;;QAC3F,KAAK,CAAC,OAAO,CAAC,CAAA;AAHhB,QAAA,IAAA,CAAA,MAAM,GAAgC,IAAI,qBAAqB,EAAE,CAAA;AAK/D,QAAA,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;AAClC,YAAA,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAA;AAClC,SAAA;AAED,QAAA,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;AACzB,SAAA;;AAGD,QAAA,IAAI,MAAA,IAAI,CAAC,SAAS,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,SAAS,CAAC,IAAI;YAAE,IAAI,CAAC,MAAM,EAAE,CAAA;KAClD;IAEM,OAAO,CAAE,IAAU,EAAE,aAAuB,EAAA;;AACjD,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;QAEvB,IAAI,IAAI,CAAC,SAAS;AAAE,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;AAChD,QAAA,IAAI,CAAC,aAAa;YAAE,IAAI,CAAC,MAAM,EAAE,CAAA;AACjC,QAAA,CAAA,EAAA,GAAA,MAAM,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,EAAE,CAAA;KACvB;IAEM,eAAe,CAAE,eAAqD,EAAE,aAAuB,EAAA;AACpG,QAAA,KAAK,CAAC,eAAe,CAAC,eAAe,CAAC,CAAA;QACtC,IAAI,CAAC,kBAAkB,EAAE,CAAA;AAEzB,QAAA,IAAI,CAAC,SAAS,GAAG,eAAe,CAAC,SAAS,CAAA;QAC1C,IAAI,eAAe,CAAC,MAAM;YAAE,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,eAAe,CAAC,MAAM,CAAA;QAC1E,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;AAEhD,QAAA,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAA;AACvC,QAAA,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;AAAE,gBAAA,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YAClE,OAAO,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAA;AACxC,SAAA;AAED,QAAA,IAAI,CAAC,aAAa;YAAE,IAAI,CAAC,MAAM,EAAE,CAAA;KAClC;IAEM,eAAe,CAAE,eAAyC,EAAE,aAAuB,EAAA;AACxF,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,eAAe,CAAC,CAAA;AACzC,QAAA,IAAI,CAAC,aAAa;YAAE,IAAI,CAAC,MAAM,EAAE,CAAA;KAClC;AAEM,IAAA,MAAM,CACX,eAAqD,EACrD,eAA0C,EAC1C,IAAW,EAAA;AAEX,QAAA,IAAI,eAAe;AAAE,YAAA,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,IAAI,CAAC,CAAA;AAChE,QAAA,IAAI,eAAe;AAAE,YAAA,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,IAAI,CAAC,CAAA;AAChE,QAAA,IAAI,IAAI;AAAE,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAClC,IAAI,CAAC,MAAM,EAAE,CAAA;KACd;IAEM,gBAAgB,GAAA;AACrB,QAAA,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAA;QAElC,MAAM,qBAAqB,GAAG,SAAkC,CAAA;QAChE,IAAI,CAAC,qBAAqB,CAAC,QAAQ;AAAE,YAAA,OAAO,CAAC,CAAA;AAE7C,QAAA,MAAM,cAAc,GAAG,qBAAqB,CAAC,QAAQ,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAA;AAClG,QAAA,OAAO,IAAI,CAAC,KAAK,GAAG,cAAc,CAAA;KACnC;IAES,UAAU,GAAA;QAClB,KAAK,CAAC,UAAU,EAAE,CAAA;QAClB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,eAAe,CAAC,CAAA;KAC3F;AAES,IAAA,OAAO,CAAE,QAAiB,EAAA;AAClC,QAAA,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAA;AAClC,QAAA,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;QAEvB,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAG,CAAA,CAAA,CAAC,CAAA;AACtF,QAAA,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QAE1B,IAAI,MAAM,CAAC,OAAO;AAAE,YAAA,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAA;KAC5C;;;AAIM,IAAA,MAAM,CAAE,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAA;AAC5C,QAAA,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAA;AAElC,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,QAAQ,EAAE;YACxE,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,QAAQ,CAAA;YACpD,MAAM,qBAAqB,GAAG,SAAkC,CAAA;AAEhE,YAAA,MAAM,cAAc,GAAG,qBAAqB,CAAC,QAAQ,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAA;AAClG,YAAA,MAAM,eAAe,GAAG,qBAAqB,CAAC,SAAS,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAA;AACpG,YAAA,MAAM,KAAK,GAAG,UAAU,GAAG,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAA;YAEtD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAC3C,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;AAC7C,YAAA,MAAM,WAAW,GAAG,cAAc,GAAG,KAAK,CAAA;AAC1C,YAAA,MAAM,YAAY,GAAG,eAAe,GAAG,KAAK,CAAA;AAC5C,YAAA,MAAM,QAAQ,GAAG,YAAY,IAAI,aAAa,CAAA;AAE9C,YAAA,eAAe,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,GAAG,QAAQ,GAAG,CAAC,CAAC;AAC/C,iBAAA,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC;AAC1B,iBAAA,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC;iBAC5B,IAAI,CAAC,SAAS,EAAE,CAAA,EAAG,CAAC,CAAI,CAAA,EAAA,CAAC,IAAI,cAAc,CAAA,CAAA,EAAI,UAAU,GAAG,YAAY,GAAG,eAAe,EAAE,CAAC;AAC7F,iBAAA,IAAI,CAAC,qBAAqB,EAAE,UAAU,CAAC,CAAA;AAC3C,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,GAAG;AACL,iBAAA,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC;AACvD,iBAAA,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,eAAe,CAAC,CAAA;AAC9D,SAAA;;QAGD,IAAI,CAAC,IAAI,CAAC,eAAe;YAAE,IAAI,CAAC,oBAAoB,EAAE,CAAA;;AAGtD,QAAA,oBAAoB,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;AACnD,QAAA,IAAI,CAAC,wBAAwB,GAAG,qBAAqB,CAAC,MAAK;YACzD,IAAI,CAAC,UAAU,EAAE,CAAA;AACjB,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;AACxB,SAAC,CAAC,CAAA;KACH;IAES,SAAS,GAAA;;AACjB,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;QACvB,KAAK,CAAC,SAAS,EAAE,CAAA;AACjB,QAAA,CAAA,EAAA,GAAA,MAAM,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,EAAE,CAAA;KACvB;IAEM,OAAO,GAAA;;AACZ,QAAA,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;QAClC,KAAK,CAAC,OAAO,EAAE,CAAA;AAEf,QAAA,SAAS,aAAT,SAAS,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAT,SAAS,CAAE,OAAO,EAAE,CAAA;AACpB,QAAA,CAAA,EAAA,GAAA,MAAM,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAO,EAAE,CAAA;KAC1B;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/containers/single-container/index.ts"],"sourcesContent":["// Global CSS variables (side effects import)\nimport 'styles/index'\n\n// Core\nimport { ContainerCore } from 'core/container'\nimport { ComponentCore } from 'core/component'\nimport { ComponentConfigInterface } from 'core/component/config'\n\n// Utils\nimport { smartTransition } from 'utils/d3'\n\n// Types\nimport { Sizing, ExtendedSizeComponent } from 'types/component'\n\n// Config\nimport { SingleContainerDefaultConfig, SingleContainerConfigInterface } from './config'\n\nexport class SingleContainer<Data> extends ContainerCore {\n public component: ComponentCore<Data>\n public config: SingleContainerConfigInterface<Data>\n protected _defaultConfig = SingleContainerDefaultConfig as SingleContainerConfigInterface<Data>\n\n constructor (element: HTMLElement, config?: SingleContainerConfigInterface<Data>, data?: Data) {\n super(element)\n\n if (config) {\n this.updateContainer(config, true)\n this.component = config.component\n }\n\n if (data) {\n this.setData(data, true)\n }\n\n // Render if component exists and has data\n if (this.component?.datamodel.data) this.render()\n }\n\n public setData (data: Data, preventRender?: boolean): void {\n const { config } = this\n\n if (this.component) this.component.setData(data)\n if (!preventRender) this.render()\n config.tooltip?.hide()\n }\n\n public updateContainer (containerConfig: SingleContainerConfigInterface<Data>, preventRender?: boolean): void {\n super.updateContainer(containerConfig)\n this._removeAllChildren()\n\n this.component = containerConfig.component\n if (containerConfig.sizing) this.component.sizing = containerConfig.sizing\n this.element.appendChild(this.component.element)\n\n const tooltip = containerConfig.tooltip\n if (tooltip) {\n if (!tooltip.hasContainer()) tooltip.setContainer(this._container)\n tooltip.setComponents([this.component])\n }\n\n // Defs\n this.element.appendChild(this._svgDefs.node())\n\n if (!preventRender) this.render()\n }\n\n public updateComponent (componentConfig: ComponentConfigInterface, preventRender?: boolean): void {\n this.component.setConfig(componentConfig)\n if (!preventRender) this.render()\n }\n\n public update (\n containerConfig: SingleContainerConfigInterface<Data>,\n componentConfig?: ComponentConfigInterface,\n data?: Data\n ): void {\n if (containerConfig) this.updateContainer(containerConfig, true)\n if (componentConfig) this.updateComponent(componentConfig, true)\n if (data) this.setData(data, true)\n this.render()\n }\n\n public getFitWidthScale (): number {\n const { config, component } = this\n\n const extendedSizeComponent = component as ExtendedSizeComponent\n if (!extendedSizeComponent.getWidth) return 1\n\n const componentWidth = extendedSizeComponent.getWidth() + config.margin.left + config.margin.right\n return this.width / componentWidth\n }\n\n protected _preRender (): void {\n super._preRender()\n this.component.setSize(this.width, this.height, this.containerWidth, this.containerHeight)\n }\n\n protected _render (duration?: number): void {\n const { config, component } = this\n super._render(duration)\n\n component.g.attr('transform', `translate(${config.margin.left},${config.margin.top})`)\n component.render(duration)\n\n if (config.tooltip) config.tooltip.update()\n }\n\n // Re-defining the `render()` function to handle different sizing techniques (`Sizing.Extend` and `Sizing.FitWidth`)\n // Not calling `super.render()` because we don't want it to interfere with setting the SVG size here.\n public render (duration = this.config.duration): void {\n const { config, component } = this\n\n if (config.sizing === Sizing.Extend || config.sizing === Sizing.FitWidth) {\n const fitToWidth = config.sizing === Sizing.FitWidth\n const extendedSizeComponent = component as ExtendedSizeComponent\n\n const componentWidth = extendedSizeComponent.getWidth() + config.margin.left + config.margin.right\n const componentHeight = extendedSizeComponent.getHeight() + config.margin.top + config.margin.bottom\n const scale = fitToWidth ? this.getFitWidthScale() : 1\n\n const currentWidth = this.svg.attr('width')\n const currentHeight = this.svg.attr('height')\n const scaledWidth = componentWidth * scale\n const scaledHeight = componentHeight * scale\n const animated = currentWidth || currentHeight\n\n smartTransition(this.svg, animated ? duration : 0)\n .attr('width', scaledWidth)\n .attr('height', scaledHeight)\n .attr('viewBox', `${0} ${0} ${componentWidth} ${fitToWidth ? scaledHeight : componentHeight}`)\n .attr('preserveAspectRatio', 'xMinYMin')\n } else {\n this.svg\n .attr('width', this.config.width || this.containerWidth)\n .attr('height', this.config.height || this.containerHeight)\n }\n\n // Set up Resize Observer\n if (!this._resizeObserver) this._setUpResizeObserver()\n\n // Schedule the actual rendering in the next frame\n cancelAnimationFrame(this._requestedAnimationFrame)\n this._requestedAnimationFrame = requestAnimationFrame(() => {\n this._preRender()\n this._render(duration)\n })\n }\n\n protected _onResize (): void {\n const { config } = this\n super._onResize()\n config.tooltip?.hide()\n }\n\n public destroy (): void {\n const { component, config } = this\n super.destroy()\n\n component?.destroy()\n config.tooltip?.destroy()\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { XYComponentCore } from "../../core/xy-component";
|
|
2
|
-
import {
|
|
2
|
+
import { ContainerConfigInterface } from "../../core/container/config";
|
|
3
3
|
import { Tooltip } from "../../components/tooltip";
|
|
4
4
|
import { Axis } from "../../components/axis";
|
|
5
5
|
import { Crosshair } from "../../components/crosshair";
|
|
@@ -71,31 +71,11 @@ export interface XYContainerConfigInterface<Datum> extends ContainerConfigInterf
|
|
|
71
71
|
/** Prevents the chart domain from being empty (when domain's min and max values are equal).
|
|
72
72
|
* That usually happens when all the data values are equal or when there's no data.
|
|
73
73
|
* Setting to `true` will automatically extend the domain by `+1` when the domain is empty (domain start equals domain end).
|
|
74
|
-
* Setting to `null` will extend the empty domain, but only when there's no data.
|
|
74
|
+
* Setting to `null` will extend the empty X domain, but only when there's no data.
|
|
75
75
|
* Setting to `false` will keep the domain as is.
|
|
76
76
|
* Default: `null` */
|
|
77
77
|
preventEmptyDomain?: boolean | null;
|
|
78
78
|
/** Sets the Y scale domain based on the current X scale domain (not the whole dataset). Default: `false` */
|
|
79
79
|
scaleByDomain?: boolean;
|
|
80
80
|
}
|
|
81
|
-
export declare
|
|
82
|
-
components: any[];
|
|
83
|
-
tooltip: Tooltip;
|
|
84
|
-
crosshair: Crosshair<Datum>;
|
|
85
|
-
xAxis: Axis<Datum>;
|
|
86
|
-
yAxis: Axis<Datum>;
|
|
87
|
-
autoMargin: boolean;
|
|
88
|
-
xScale: any;
|
|
89
|
-
xDomain: any;
|
|
90
|
-
xDomainMinConstraint: any;
|
|
91
|
-
xDomainMaxConstraint: any;
|
|
92
|
-
xRange: any;
|
|
93
|
-
yScale: any;
|
|
94
|
-
yDomain: any;
|
|
95
|
-
yDomainMinConstraint: any;
|
|
96
|
-
yDomainMaxConstraint: any;
|
|
97
|
-
yRange: any;
|
|
98
|
-
yDirection: Direction;
|
|
99
|
-
preventEmptyDomain: any;
|
|
100
|
-
scaleByDomain: boolean;
|
|
101
|
-
}
|
|
81
|
+
export declare const XYContainerDefaultConfig: XYContainerConfigInterface<unknown>;
|
|
@@ -1,30 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ContainerDefaultConfig } from '../../core/container/config.js';
|
|
2
2
|
import { Direction } from '../../types/direction.js';
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
constructor() {
|
|
6
|
-
super(...arguments);
|
|
7
|
-
this.components = [];
|
|
8
|
-
this.tooltip = undefined;
|
|
9
|
-
this.crosshair = undefined;
|
|
10
|
-
this.xAxis = undefined;
|
|
11
|
-
this.yAxis = undefined;
|
|
12
|
-
this.autoMargin = true;
|
|
13
|
-
this.xScale = undefined;
|
|
14
|
-
this.xDomain = undefined;
|
|
15
|
-
this.xDomainMinConstraint = undefined;
|
|
16
|
-
this.xDomainMaxConstraint = undefined;
|
|
17
|
-
this.xRange = undefined;
|
|
18
|
-
this.yScale = undefined;
|
|
19
|
-
this.yDomain = undefined;
|
|
20
|
-
this.yDomainMinConstraint = undefined;
|
|
21
|
-
this.yDomainMaxConstraint = undefined;
|
|
22
|
-
this.yRange = undefined;
|
|
23
|
-
this.yDirection = Direction.North;
|
|
24
|
-
this.preventEmptyDomain = null;
|
|
25
|
-
this.scaleByDomain = false;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
4
|
+
const XYContainerDefaultConfig = Object.assign(Object.assign({}, ContainerDefaultConfig), { components: [], tooltip: undefined, crosshair: undefined, xAxis: undefined, yAxis: undefined, autoMargin: true, xScale: undefined, xDomain: undefined, xDomainMinConstraint: undefined, xDomainMaxConstraint: undefined, xRange: undefined, yScale: undefined, yDomain: undefined, yDomainMinConstraint: undefined, yDomainMaxConstraint: undefined, yRange: undefined, yDirection: Direction.North, preventEmptyDomain: null, scaleByDomain: false });
|
|
28
5
|
|
|
29
|
-
export {
|
|
6
|
+
export { XYContainerDefaultConfig };
|
|
30
7
|
//# sourceMappingURL=config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sources":["../../../src/containers/xy-container/config.ts"],"sourcesContent":["// Core\nimport { XYComponentCore } from 'core/xy-component'\nimport {
|
|
1
|
+
{"version":3,"file":"config.js","sources":["../../../src/containers/xy-container/config.ts"],"sourcesContent":["// Core\nimport { XYComponentCore } from 'core/xy-component'\nimport { ContainerDefaultConfig, ContainerConfigInterface } from 'core/container/config'\nimport { Tooltip } from 'components/tooltip'\n\n// Components\nimport { Axis } from 'components/axis'\nimport { Crosshair } from 'components/crosshair'\n\n// Types\nimport { ContinuousScale } from 'types/scale'\nimport { Direction } from 'types/direction'\n\nexport interface XYContainerConfigInterface<Datum> extends ContainerConfigInterface {\n /** An array of visualization components. Default: `[]` */\n components?: XYComponentCore<Datum>[];\n\n /** Scale for X dimension, e.g. Scale.scaleLinear().\n * If set, this value will override the components' xScale and they will have a single shared xScale instance.\n * By default the components have their own scale instances but their `domain` and `range` values are synchronized.\n * Default: `undefined` */\n xScale?: ContinuousScale;\n /** Scale domain (data extent) for X dimension. By default this value is calculated automatically based on data. */\n xDomain?: [number | undefined, number | undefined];\n /** Constraint the minimum value of the X scale domain. Useful when the data is plotted along the X axis.\n * For example, imagine that you have a chart with dynamic data that has negative values. When values are small\n * (let's say in the range of [-0.01, 0]), you might still want the chart to display some meaningful value range (e.g. [-1, 0]). That can\n * be achieved by setting `xDomainMinConstraint` to `[undefined, -1]`. In addition to that, if you want to cut off the\n * values that are too low (let's say lower than -100), you can set the constraint to `[-100, -1]`\n * Default: `undefined` */\n xDomainMinConstraint?: [number | undefined, number | undefined];\n /** Constraint the minimum value of the X scale domain. Useful when the data is plotted along the X axis.\n * For example, imagine that you have a chart with dynamic data. When values are small\n * (let's say < 0.01), you might still want the chart to display some meaningful value range (e.g. [0, 1]). That can\n * be achieved by setting `xDomainMaxConstraint` to `[1, undefined]`. In addition to that, if you want to cut off the\n * values that are too high (let's say higher than 100), you can set the constraint to `[1, 100]`\n * Default: `undefined` */\n xDomainMaxConstraint?: [number | undefined, number | undefined];\n /** Force set the X scale range (in the screen space). By default the range is calculated automatically based on the\n * chart's set up */\n xRange?: [number, number];\n\n /** Scale for Y dimension, e.g. Scale.scaleLinear().\n * If set, this value will override the components' yScale and they will have a single shared yScale instance.\n * By default the components have their own scale instances but their `domain` and `range` values are synchronized.\n * Default: `undefined` */\n yScale?: ContinuousScale;\n /** Scale domain (data extent) for Y dimension. By default this value is calculated automatically based on data. */\n yDomain?: [number | undefined, number | undefined];\n /** Constraint the minimum value of the Y scale domain.\n * For example, imagine that you have a chart with dynamic data that has negative values. When values are small\n * (let's say in the range of [-0.01, 0]), you might still want the chart to display some meaningful value range (e.g. [-1, 0]). That can\n * be achieved by setting `yDomainMinConstraint` to `[undefined, -1]`. In addition to that, if you want to cut off the\n * values that are too low (let's say lower than -100), you can set the constraint to `[-100, -1]`\n * Default: `undefined` */\n yDomainMinConstraint?: [number | undefined, number | undefined];\n /** Constraint the minimum value of the Y scale domain.\n * For example, imagine that you have a chart with dynamic data. When values are small\n * (let's say < 0.01), you might still want the chart to display some meaningful value range (e.g. [0, 1]). That can\n * be achieved by setting `yDomainMaxConstraint` to `[1, undefined]`. In addition to that, if you want to cut off the\n * values that are too high (let's say higher than 100), you can set the constraint to `[1, 100]`\n * Default: `undefined` */\n yDomainMaxConstraint?: [number | undefined, number | undefined];\n /** Force set the Y scale range (in the screen space). By default the range is calculated automatically based on the\n * chart's set up */\n yRange?: [number, number];\n /** Y Axis direction. Default: `Direction.North` */\n yDirection?: Direction.South | Direction.North | string;\n\n /** X Axis component instance. Default: `undefined` */\n xAxis?: Axis<Datum>;\n /** Y Axis component instance. Default: `undefined` */\n yAxis?: Axis<Datum>;\n /** Enables automatic calculation of chart margins based on the size of the axes. Default: `true` */\n autoMargin?: boolean;\n /** Tooltip component. Default: `undefined` */\n tooltip?: Tooltip | undefined;\n /** Crosshair component. Default: `undefined` */\n crosshair?: Crosshair<Datum> | undefined;\n /** Prevents the chart domain from being empty (when domain's min and max values are equal).\n * That usually happens when all the data values are equal or when there's no data.\n * Setting to `true` will automatically extend the domain by `+1` when the domain is empty (domain start equals domain end).\n * Setting to `null` will extend the empty X domain, but only when there's no data.\n * Setting to `false` will keep the domain as is.\n * Default: `null` */\n preventEmptyDomain?: boolean | null;\n /** Sets the Y scale domain based on the current X scale domain (not the whole dataset). Default: `false` */\n scaleByDomain?: boolean;\n}\n\nexport const XYContainerDefaultConfig: XYContainerConfigInterface<unknown> = {\n ...ContainerDefaultConfig,\n components: [],\n tooltip: undefined,\n crosshair: undefined,\n xAxis: undefined,\n yAxis: undefined,\n autoMargin: true,\n\n xScale: undefined,\n xDomain: undefined,\n xDomainMinConstraint: undefined,\n xDomainMaxConstraint: undefined,\n xRange: undefined,\n\n yScale: undefined,\n yDomain: undefined,\n yDomainMinConstraint: undefined,\n yDomainMaxConstraint: undefined,\n yRange: undefined,\n yDirection: Direction.North,\n\n preventEmptyDomain: null,\n scaleByDomain: false,\n}\n\n"],"names":[],"mappings":";;;AA0Fa,MAAA,wBAAwB,mCAChC,sBAAsB,CAAA,EAAA,EACzB,UAAU,EAAE,EAAE,EACd,OAAO,EAAE,SAAS,EAClB,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,SAAS,EAChB,UAAU,EAAE,IAAI,EAEhB,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,SAAS,EAClB,oBAAoB,EAAE,SAAS,EAC/B,oBAAoB,EAAE,SAAS,EAC/B,MAAM,EAAE,SAAS,EAEjB,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,SAAS,EAClB,oBAAoB,EAAE,SAAS,EAC/B,oBAAoB,EAAE,SAAS,EAC/B,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,SAAS,CAAC,KAAK,EAE3B,kBAAkB,EAAE,IAAI,EACxB,aAAa,EAAE,KAAK;;;;"}
|
|
@@ -1,15 +1,17 @@
|
|
|
1
|
+
import { Selection } from 'd3-selection';
|
|
1
2
|
import "../../styles/index";
|
|
2
3
|
import { ContainerCore } from "../../core/container";
|
|
3
4
|
import { XYComponentCore } from "../../core/xy-component";
|
|
4
5
|
import { XYComponentConfigInterface } from "../../core/xy-component/config";
|
|
5
6
|
import { CoreDataModel } from "../../data-models/core";
|
|
6
|
-
import {
|
|
7
|
+
import { XYContainerConfigInterface } from './config';
|
|
7
8
|
import { AreaConfigInterface, BrushConfigInterface, LineConfigInterface, ScatterConfigInterface, StackedBarConfigInterface, TimelineConfigInterface } from '../../components';
|
|
8
9
|
export declare type XYConfigInterface<Datum> = XYComponentConfigInterface<Datum> | StackedBarConfigInterface<Datum> | LineConfigInterface<Datum> | ScatterConfigInterface<Datum> | BrushConfigInterface<Datum> | TimelineConfigInterface<Datum> | AreaConfigInterface<Datum>;
|
|
9
10
|
export declare class XYContainer<Datum> extends ContainerCore {
|
|
10
|
-
config: XYContainerConfig<Datum>;
|
|
11
11
|
datamodel: CoreDataModel<Datum[]>;
|
|
12
|
-
|
|
12
|
+
config: XYContainerConfigInterface<Datum>;
|
|
13
|
+
protected _defaultConfig: XYContainerConfigInterface<Datum>;
|
|
14
|
+
protected _svgDefs: Selection<SVGDefsElement, unknown, null, undefined>;
|
|
13
15
|
private _clipPath;
|
|
14
16
|
private _clipPathId;
|
|
15
17
|
private _axisMargin;
|
|
@@ -8,14 +8,14 @@ import { ScaleDimension } from '../../types/scale.js';
|
|
|
8
8
|
import { Direction } from '../../types/direction.js';
|
|
9
9
|
import { clamp, flatten, clean } from '../../utils/data.js';
|
|
10
10
|
import { guid } from '../../utils/misc.js';
|
|
11
|
-
import {
|
|
11
|
+
import { XYContainerDefaultConfig } from './config.js';
|
|
12
12
|
|
|
13
13
|
class XYContainer extends ContainerCore {
|
|
14
14
|
constructor(element, config, data) {
|
|
15
15
|
var _a, _b;
|
|
16
16
|
super(element);
|
|
17
|
-
this.config = new XYContainerConfig();
|
|
18
17
|
this.datamodel = new CoreDataModel();
|
|
18
|
+
this._defaultConfig = XYContainerDefaultConfig;
|
|
19
19
|
this._clipPathId = guid();
|
|
20
20
|
this._axisMargin = { top: 0, bottom: 0, left: 0, right: 0 };
|
|
21
21
|
this._firstRender = true;
|
|
@@ -30,7 +30,6 @@ class XYContainer extends ContainerCore {
|
|
|
30
30
|
this.svg.attr('class', css `
|
|
31
31
|
--highlight-filter-id: url(${baseUrl}#${highlightFilterId}); // defining a css variable
|
|
32
32
|
`);
|
|
33
|
-
this._svgDefs = this.svg.append('defs');
|
|
34
33
|
this._svgDefs.append('filter')
|
|
35
34
|
.attr('id', highlightFilterId)
|
|
36
35
|
.attr('filterUnits', 'objectBoundingBox')
|
|
@@ -232,10 +231,11 @@ class XYContainer extends ContainerCore {
|
|
|
232
231
|
clamp(domainMin, (_e = configuredDomainMinConstraint === null || configuredDomainMinConstraint === void 0 ? void 0 : configuredDomainMinConstraint[0]) !== null && _e !== void 0 ? _e : Number.NEGATIVE_INFINITY, (_f = configuredDomainMinConstraint === null || configuredDomainMinConstraint === void 0 ? void 0 : configuredDomainMinConstraint[1]) !== null && _f !== void 0 ? _f : Number.POSITIVE_INFINITY),
|
|
233
232
|
clamp(domainMax, (_g = configuredDomainMaxConstraint === null || configuredDomainMaxConstraint === void 0 ? void 0 : configuredDomainMaxConstraint[0]) !== null && _g !== void 0 ? _g : Number.NEGATIVE_INFINITY, (_h = configuredDomainMaxConstraint === null || configuredDomainMaxConstraint === void 0 ? void 0 : configuredDomainMaxConstraint[1]) !== null && _h !== void 0 ? _h : Number.POSITIVE_INFINITY),
|
|
234
233
|
];
|
|
235
|
-
// Extend the
|
|
234
|
+
// Extend the X and Y domains if they're empty and `preventEmptyDomain` was explicitly set to `true`
|
|
235
|
+
// or just the X domain if there is no data provided and `preventEmptyDomain` set to `null`
|
|
236
236
|
if (domain[0] === domain[1]) {
|
|
237
237
|
const hasDataProvided = componentsWithDomain.some(c => { var _a; return ((_a = c.datamodel.data) === null || _a === void 0 ? void 0 : _a.length) > 0; });
|
|
238
|
-
if (config.preventEmptyDomain || (config.preventEmptyDomain === null && !hasDataProvided)) {
|
|
238
|
+
if (config.preventEmptyDomain || (config.preventEmptyDomain === null && (!hasDataProvided || dimension === ScaleDimension.Y))) {
|
|
239
239
|
domain[1] = domain[0] + 1;
|
|
240
240
|
}
|
|
241
241
|
}
|