@unovis/ts 1.6.5 → 1.6.6-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/axis/config.d.ts +10 -7
- package/components/axis/config.js +1 -1
- package/components/axis/config.js.map +1 -1
- package/components/axis/index.d.ts +1 -0
- package/components/axis/index.js +44 -53
- package/components/axis/index.js.map +1 -1
- package/components/axis/style.d.ts +2 -38
- package/components/axis/style.js +28 -24
- package/components/axis/style.js.map +1 -1
- package/components/brush/config.d.ts +3 -0
- package/components/brush/config.js +1 -1
- package/components/brush/config.js.map +1 -1
- package/components/brush/index.d.ts +1 -0
- package/components/brush/index.js +7 -3
- package/components/brush/index.js.map +1 -1
- package/components/crosshair/config.d.ts +2 -0
- package/components/crosshair/config.js +1 -1
- package/components/crosshair/config.js.map +1 -1
- package/components/crosshair/index.d.ts +2 -0
- package/components/crosshair/index.js +8 -1
- package/components/crosshair/index.js.map +1 -1
- package/components/sankey/config.d.ts +2 -0
- package/components/sankey/config.js +1 -1
- package/components/sankey/config.js.map +1 -1
- package/components/sankey/index.d.ts +2 -2
- package/components/sankey/index.js +12 -5
- package/components/sankey/index.js.map +1 -1
- package/components/sankey/types.d.ts +4 -0
- package/components/sankey/types.js +7 -2
- package/components/sankey/types.js.map +1 -1
- package/components/scatter/index.js +2 -0
- package/components/scatter/index.js.map +1 -1
- package/components/timeline/config.d.ts +5 -1
- package/components/timeline/config.js +2 -2
- package/components/timeline/config.js.map +1 -1
- package/components/timeline/index.d.ts +2 -2
- package/components/timeline/index.js +64 -31
- package/components/timeline/index.js.map +1 -1
- package/components/timeline/style.d.ts +6 -1
- package/components/timeline/style.js +40 -46
- package/components/timeline/style.js.map +1 -1
- package/index.js +1 -1
- package/package.json +1 -1
- package/types/style.d.ts +1 -0
- package/types.js +1 -1
- package/utils/text.js +6 -2
- package/utils/text.js.map +1 -1
|
@@ -4,9 +4,9 @@ import { Position } from "../../types/position";
|
|
|
4
4
|
import { FitMode, TrimMode, TextAlign } from "../../types/text";
|
|
5
5
|
export interface AxisConfigInterface<Datum> extends Partial<XYComponentConfigInterface<Datum>> {
|
|
6
6
|
/** Axis position: `Position.Top`, `Position.Bottom`, `Position.Right` or `Position.Left`. Default: `undefined` */
|
|
7
|
-
position?: Position |
|
|
7
|
+
position?: Position | `${Position}`;
|
|
8
8
|
/** Axis type: `AxisType.X` or `AxisType.Y` */
|
|
9
|
-
type?: AxisType |
|
|
9
|
+
type?: AxisType | `${AxisType}`;
|
|
10
10
|
/** Extend the axis domain line to be full width or full height. Default: `true` */
|
|
11
11
|
fullSize?: boolean;
|
|
12
12
|
/** Axis label. Default: `undefined` */
|
|
@@ -16,9 +16,9 @@ export interface AxisConfigInterface<Datum> extends Partial<XYComponentConfigInt
|
|
|
16
16
|
/** Distance between the axis and the label in pixels. Default: `8` */
|
|
17
17
|
labelMargin?: number;
|
|
18
18
|
/** Label text fit mode: `FitMode.Wrap` or `FitMode.Trim`. Default: `FitMode.Wrap`. */
|
|
19
|
-
labelTextFitMode?: FitMode |
|
|
19
|
+
labelTextFitMode?: FitMode | `${FitMode}`;
|
|
20
20
|
/** Label text trim mode: `TrimMode.Start`, `TrimMode.Middle` or `TrimMode.End`. Default: `TrimMode.Middle` */
|
|
21
|
-
labelTextTrimType?: TrimMode |
|
|
21
|
+
labelTextTrimType?: TrimMode | `${TrimMode}`;
|
|
22
22
|
/** Font color of the axis label as CSS string. Default: `null` */
|
|
23
23
|
labelColor?: string | null;
|
|
24
24
|
/** Sets whether to draw the grid lines or not. Default: `true` */
|
|
@@ -42,7 +42,7 @@ export interface AxisConfigInterface<Datum> extends Partial<XYComponentConfigInt
|
|
|
42
42
|
/** Set the approximate number of axis ticks (will be passed to D3's axis constructor). Default: `undefined` */
|
|
43
43
|
numTicks?: number;
|
|
44
44
|
/** Tick text fit mode: `FitMode.Wrap` or `FitMode.Trim`. Default: `FitMode.Wrap`. */
|
|
45
|
-
tickTextFitMode?: FitMode |
|
|
45
|
+
tickTextFitMode?: FitMode | `${FitMode}`;
|
|
46
46
|
/** Maximum width in pixels for the tick text to be wrapped or trimmed. Default: `undefined` */
|
|
47
47
|
tickTextWidth?: number;
|
|
48
48
|
/** Tick text wrapping separator. String or array of strings. Default: `undefined` */
|
|
@@ -50,11 +50,11 @@ export interface AxisConfigInterface<Datum> extends Partial<XYComponentConfigInt
|
|
|
50
50
|
/** Force word break for ticks when they don't fit. Default: `false` */
|
|
51
51
|
tickTextForceWordBreak?: boolean;
|
|
52
52
|
/** Tick text trim mode: `TrimMode.Start`, `TrimMode.Middle` or `TrimMode.End`. Default: `TrimMode.Middle` */
|
|
53
|
-
tickTextTrimType?: TrimMode |
|
|
53
|
+
tickTextTrimType?: TrimMode | `${TrimMode}`;
|
|
54
54
|
/** Font size of the tick text as CSS string. Default: `null` */
|
|
55
55
|
tickTextFontSize?: string | null;
|
|
56
56
|
/** Text alignment for ticks: `TextAlign.Left`, `TextAlign.Center` or `TextAlign.Right`. Default: `undefined` */
|
|
57
|
-
tickTextAlign?: TextAlign |
|
|
57
|
+
tickTextAlign?: TextAlign | `${TextAlign}` | ((tickValue: number | Date, tickIndex: number, tickValues: number[] | Date[], tickPosition: [number, number], componentWidth: number, componentHeight: number) => TextAlign | `${TextAlign}`);
|
|
58
58
|
/** Font color of the tick text as CSS string. Default: `null` */
|
|
59
59
|
tickTextColor?: string | null;
|
|
60
60
|
/** Text rotation angle for ticks. Default: `undefined` */
|
|
@@ -66,5 +66,8 @@ export interface AxisConfigInterface<Datum> extends Partial<XYComponentConfigInt
|
|
|
66
66
|
tickTextHideOverlapping?: boolean;
|
|
67
67
|
/** The spacing in pixels between the tick and it's label. Default: `8` */
|
|
68
68
|
tickPadding?: number;
|
|
69
|
+
/** The size of the tick marks in pixels. Accepts a single number (applies to both inner and outer ticks)
|
|
70
|
+
* or a tuple `[innerTickSize, outerTickSize]`. Default: `6` */
|
|
71
|
+
tickSize?: number | [number, number];
|
|
69
72
|
}
|
|
70
73
|
export declare const AxisDefaultConfig: AxisConfigInterface<unknown>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { XYComponentDefaultConfig } from '../../core/xy-component/config.js';
|
|
2
2
|
import { FitMode, TrimMode } from '../../types/text.js';
|
|
3
3
|
|
|
4
|
-
const AxisDefaultConfig = Object.assign(Object.assign({}, XYComponentDefaultConfig), { position: undefined, type: undefined, label: undefined, labelFontSize: null, labelTextFitMode: FitMode.Wrap, labelTextTrimType: TrimMode.Middle, gridLine: true, tickLine: true, domainLine: true, numTicks: undefined, minMaxTicksOnly: false, minMaxTicksOnlyWhenWidthIsLess: 250, minMaxTicksOnlyShowGridLines: false, tickTextWidth: undefined, tickTextSeparator: undefined, tickTextForceWordBreak: false, tickTextTrimType: TrimMode.Middle, tickTextFitMode: FitMode.Wrap, tickTextFontSize: null, tickTextAlign: undefined, tickTextColor: null, tickTextAngle: undefined, labelMargin: 8, labelColor: null, tickFormat: undefined, tickValues: undefined, fullSize: true, tickPadding: 8, tickTextHideOverlapping: undefined });
|
|
4
|
+
const AxisDefaultConfig = Object.assign(Object.assign({}, XYComponentDefaultConfig), { position: undefined, type: undefined, label: undefined, labelFontSize: null, labelTextFitMode: FitMode.Wrap, labelTextTrimType: TrimMode.Middle, gridLine: true, tickLine: true, domainLine: true, numTicks: undefined, minMaxTicksOnly: false, minMaxTicksOnlyWhenWidthIsLess: 250, minMaxTicksOnlyShowGridLines: false, tickTextWidth: undefined, tickTextSeparator: undefined, tickTextForceWordBreak: false, tickTextTrimType: TrimMode.Middle, tickTextFitMode: FitMode.Wrap, tickTextFontSize: null, tickTextAlign: undefined, tickTextColor: null, tickTextAngle: undefined, labelMargin: 8, labelColor: null, tickFormat: undefined, tickValues: undefined, fullSize: true, tickPadding: 8, tickSize: 6, tickTextHideOverlapping: undefined });
|
|
5
5
|
|
|
6
6
|
export { AxisDefaultConfig };
|
|
7
7
|
//# sourceMappingURL=config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sources":["../../../src/components/axis/config.ts"],"sourcesContent":["import { XYComponentConfigInterface, XYComponentDefaultConfig } from 'core/xy-component/config'\n\n// Types\nimport { AxisType } from 'components/axis/types'\nimport { Position } from 'types/position'\nimport { FitMode, TrimMode, TextAlign } from 'types/text'\n\n// We extend partial XY config interface because x and y properties are optional for Axis\nexport interface AxisConfigInterface<Datum> extends Partial<XYComponentConfigInterface<Datum>> {\n /** Axis position: `Position.Top`, `Position.Bottom`, `Position.Right` or `Position.Left`. Default: `undefined` */\n position?: Position |
|
|
1
|
+
{"version":3,"file":"config.js","sources":["../../../src/components/axis/config.ts"],"sourcesContent":["import { XYComponentConfigInterface, XYComponentDefaultConfig } from 'core/xy-component/config'\n\n// Types\nimport { AxisType } from 'components/axis/types'\nimport { Position } from 'types/position'\nimport { FitMode, TrimMode, TextAlign } from 'types/text'\n\n// We extend partial XY config interface because x and y properties are optional for Axis\nexport interface AxisConfigInterface<Datum> extends Partial<XYComponentConfigInterface<Datum>> {\n /** Axis position: `Position.Top`, `Position.Bottom`, `Position.Right` or `Position.Left`. Default: `undefined` */\n position?: Position | `${Position}`;\n /** Axis type: `AxisType.X` or `AxisType.Y` */\n type?: AxisType | `${AxisType}`;\n /** Extend the axis domain line to be full width or full height. Default: `true` */\n fullSize?: boolean;\n /** Axis label. Default: `undefined` */\n label?: string;\n /** Font size of the axis label as CSS string. Default: `null` */\n labelFontSize?: string | null;\n /** Distance between the axis and the label in pixels. Default: `8` */\n labelMargin?: number;\n /** Label text fit mode: `FitMode.Wrap` or `FitMode.Trim`. Default: `FitMode.Wrap`. */\n labelTextFitMode?: FitMode | `${FitMode}`;\n /** Label text trim mode: `TrimMode.Start`, `TrimMode.Middle` or `TrimMode.End`. Default: `TrimMode.Middle` */\n labelTextTrimType?: TrimMode | `${TrimMode}`;\n /** Font color of the axis label as CSS string. Default: `null` */\n labelColor?: string | null;\n /** Sets whether to draw the grid lines or not. Default: `true` */\n gridLine?: boolean;\n /** Sets whether to draw the tick lines or not. Default: `true` */\n tickLine?: boolean;\n /** Sets whether to draw the domain line or not. Default: `true` */\n domainLine?: boolean;\n /** Draw only the min and max axis ticks. Default: `false` */\n minMaxTicksOnly?: boolean;\n /** Show grid lines for the min and max axis ticks. Default: `false` */\n minMaxTicksOnlyShowGridLines?: boolean;\n /** Draw only the min and max axis ticks, when the chart\n * width is less than the specified value.\n * Default: `250` */\n minMaxTicksOnlyWhenWidthIsLess?: number;\n /** Tick label formatter function. Default: `undefined` */\n tickFormat?: ((tick: number | Date, i: number, ticks: number[] | Date[]) => string);\n /** Explicitly set tick values. Default: `undefined` */\n tickValues?: number[];\n /** Set the approximate number of axis ticks (will be passed to D3's axis constructor). Default: `undefined` */\n numTicks?: number;\n /** Tick text fit mode: `FitMode.Wrap` or `FitMode.Trim`. Default: `FitMode.Wrap`. */\n tickTextFitMode?: FitMode | `${FitMode}`;\n /** Maximum width in pixels for the tick text to be wrapped or trimmed. Default: `undefined` */\n tickTextWidth?: number;\n /** Tick text wrapping separator. String or array of strings. Default: `undefined` */\n tickTextSeparator?: string | string[];\n /** Force word break for ticks when they don't fit. Default: `false` */\n tickTextForceWordBreak?: boolean;\n /** Tick text trim mode: `TrimMode.Start`, `TrimMode.Middle` or `TrimMode.End`. Default: `TrimMode.Middle` */\n tickTextTrimType?: TrimMode | `${TrimMode}`;\n /** Font size of the tick text as CSS string. Default: `null` */\n tickTextFontSize?: string | null;\n /** Text alignment for ticks: `TextAlign.Left`, `TextAlign.Center` or `TextAlign.Right`. Default: `undefined` */\n tickTextAlign?: TextAlign | `${TextAlign}` |\n ((tickValue: number | Date, tickIndex: number, tickValues: number[] | Date[], tickPosition: [number, number], componentWidth: number, componentHeight: number) => TextAlign | `${TextAlign}`);\n /** Font color of the tick text as CSS string. Default: `null` */\n tickTextColor?: string | null;\n /** Text rotation angle for ticks. Default: `undefined` */\n tickTextAngle?: number;\n /** Hide tick labels that overlap with each other.\n * To define overlapping, a simple bounding box collision detection algorithm is used.\n * Which means the result won't be accurate when `tickTextAngle` is specified.\n * Default: `undefined` */\n tickTextHideOverlapping?: boolean;\n /** The spacing in pixels between the tick and it's label. Default: `8` */\n tickPadding?: number;\n /** The size of the tick marks in pixels. Accepts a single number (applies to both inner and outer ticks)\n * or a tuple `[innerTickSize, outerTickSize]`. Default: `6` */\n tickSize?: number | [number, number];\n}\n\nexport const AxisDefaultConfig: AxisConfigInterface<unknown> = {\n ...XYComponentDefaultConfig,\n position: undefined,\n type: undefined,\n label: undefined,\n labelFontSize: null,\n labelTextFitMode: FitMode.Wrap,\n labelTextTrimType: TrimMode.Middle,\n gridLine: true,\n tickLine: true,\n domainLine: true,\n numTicks: undefined,\n minMaxTicksOnly: false,\n minMaxTicksOnlyWhenWidthIsLess: 250,\n minMaxTicksOnlyShowGridLines: false,\n tickTextWidth: undefined,\n tickTextSeparator: undefined,\n tickTextForceWordBreak: false,\n tickTextTrimType: TrimMode.Middle,\n tickTextFitMode: FitMode.Wrap,\n tickTextFontSize: null,\n tickTextAlign: undefined,\n tickTextColor: null,\n tickTextAngle: undefined,\n labelMargin: 8,\n labelColor: null,\n tickFormat: undefined,\n tickValues: undefined,\n fullSize: true,\n tickPadding: 8,\n tickSize: 6,\n tickTextHideOverlapping: undefined,\n}\n"],"names":[],"mappings":";;;AA8EO,MAAM,iBAAiB,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACzB,wBAAwB,CAAA,EAAA,EAC3B,QAAQ,EAAE,SAAS,EACnB,IAAI,EAAE,SAAS,EACf,KAAK,EAAE,SAAS,EAChB,aAAa,EAAE,IAAI,EACnB,gBAAgB,EAAE,OAAO,CAAC,IAAI,EAC9B,iBAAiB,EAAE,QAAQ,CAAC,MAAM,EAClC,QAAQ,EAAE,IAAI,EACd,QAAQ,EAAE,IAAI,EACd,UAAU,EAAE,IAAI,EAChB,QAAQ,EAAE,SAAS,EACnB,eAAe,EAAE,KAAK,EACtB,8BAA8B,EAAE,GAAG,EACnC,4BAA4B,EAAE,KAAK,EACnC,aAAa,EAAE,SAAS,EACxB,iBAAiB,EAAE,SAAS,EAC5B,sBAAsB,EAAE,KAAK,EAC7B,gBAAgB,EAAE,QAAQ,CAAC,MAAM,EACjC,eAAe,EAAE,OAAO,CAAC,IAAI,EAC7B,gBAAgB,EAAE,IAAI,EACtB,aAAa,EAAE,SAAS,EACxB,aAAa,EAAE,IAAI,EACnB,aAAa,EAAE,SAAS,EACxB,WAAW,EAAE,CAAC,EACd,UAAU,EAAE,IAAI,EAChB,UAAU,EAAE,SAAS,EACrB,UAAU,EAAE,SAAS,EACrB,QAAQ,EAAE,IAAI,EACd,WAAW,EAAE,CAAC,EACd,QAAQ,EAAE,CAAC,EACX,uBAAuB,EAAE,SAAS;;;;"}
|
|
@@ -30,6 +30,7 @@ export declare class Axis<Datum> extends XYComponentCore<Datum, AxisConfigInterf
|
|
|
30
30
|
top: number;
|
|
31
31
|
};
|
|
32
32
|
_render(duration?: number, selection?: Selection<SVGGElement, unknown, SVGGElement, unknown>): void;
|
|
33
|
+
private _getAxisGen;
|
|
33
34
|
private _buildAxis;
|
|
34
35
|
private _buildGrid;
|
|
35
36
|
private _renderAxis;
|
package/components/axis/index.js
CHANGED
|
@@ -6,7 +6,7 @@ import { Position } from '../../types/position.js';
|
|
|
6
6
|
import { VerticalAlign, FitMode, TextAlign } from '../../types/text.js';
|
|
7
7
|
import { smartTransition } from '../../utils/d3.js';
|
|
8
8
|
import { trimSVGText, renderTextToSvgTextElement, wrapSVGText, textAlignToAnchor } from '../../utils/text.js';
|
|
9
|
-
import { isEqual } from '../../utils/data.js';
|
|
9
|
+
import { isEqual, isFunction } from '../../utils/data.js';
|
|
10
10
|
import { rectIntersect } from '../../utils/misc.js';
|
|
11
11
|
import { getFontWidthToHeightRatio } from '../../styles/index.js';
|
|
12
12
|
import { AxisType } from './types.js';
|
|
@@ -23,6 +23,7 @@ class Axis extends XYComponentCore {
|
|
|
23
23
|
this.events = {};
|
|
24
24
|
if (config)
|
|
25
25
|
this.setConfig(config);
|
|
26
|
+
this.g.attr('axis-type', this.config.type);
|
|
26
27
|
this.axisGroup = this.g.append('g');
|
|
27
28
|
this.gridGroup = this.g.append('g')
|
|
28
29
|
.attr('class', grid);
|
|
@@ -32,11 +33,11 @@ class Axis extends XYComponentCore {
|
|
|
32
33
|
const { config } = this;
|
|
33
34
|
const axisRenderHelperGroup = this.g.append('g').attr('opacity', 0);
|
|
34
35
|
this._renderAxis(axisRenderHelperGroup, 0);
|
|
35
|
-
// Store axis raw BBox (without the label) for further label positioning (see _renderAxisLabel)
|
|
36
|
-
this._axisRawBBox = axisRenderHelperGroup.node().getBBox();
|
|
37
36
|
// Align tick text
|
|
38
37
|
if (config.tickTextAlign)
|
|
39
|
-
this._alignTickLabels();
|
|
38
|
+
this._alignTickLabels(axisRenderHelperGroup);
|
|
39
|
+
// Store axis raw BBox (without the label) for further label positioning (see _renderAxisLabel)
|
|
40
|
+
this._axisRawBBox = axisRenderHelperGroup.node().getBBox();
|
|
40
41
|
// Render label and store total axis size and required margins
|
|
41
42
|
this._renderAxisLabel(axisRenderHelperGroup);
|
|
42
43
|
this._axisSizeBBox = this._getAxisSize(axisRenderHelperGroup);
|
|
@@ -116,57 +117,37 @@ class Axis extends XYComponentCore {
|
|
|
116
117
|
this._alignTickLabels();
|
|
117
118
|
this._resolveTickLabelOverlap(selection);
|
|
118
119
|
}
|
|
119
|
-
|
|
120
|
-
const { config: { type, position, tickPadding } } = this;
|
|
121
|
-
const ticks = this._getNumTicks();
|
|
122
|
-
switch (type) {
|
|
123
|
-
case AxisType.X:
|
|
124
|
-
switch (position) {
|
|
125
|
-
case Position.Top: return axisTop(this.xScale).ticks(ticks).tickPadding(tickPadding);
|
|
126
|
-
case Position.Bottom:
|
|
127
|
-
default: return axisBottom(this.xScale).ticks(ticks).tickPadding(tickPadding);
|
|
128
|
-
}
|
|
129
|
-
case AxisType.Y:
|
|
130
|
-
switch (position) {
|
|
131
|
-
case Position.Right: return axisRight(this.yScale).ticks(ticks).tickPadding(tickPadding);
|
|
132
|
-
case Position.Left:
|
|
133
|
-
default: return axisLeft(this.yScale).ticks(ticks).tickPadding(tickPadding);
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
_buildGrid() {
|
|
120
|
+
_getAxisGen() {
|
|
138
121
|
const { config } = this;
|
|
139
|
-
let gridGen;
|
|
140
122
|
switch (config.type) {
|
|
141
123
|
case AxisType.X:
|
|
142
124
|
switch (config.position) {
|
|
143
|
-
case Position.Top:
|
|
144
|
-
gridGen = axisTop(this.xScale);
|
|
145
|
-
break;
|
|
146
|
-
}
|
|
125
|
+
case Position.Top: return axisTop(this.xScale);
|
|
147
126
|
case Position.Bottom:
|
|
148
|
-
default:
|
|
149
|
-
gridGen = axisBottom(this.xScale);
|
|
150
|
-
break;
|
|
151
|
-
}
|
|
127
|
+
default: return axisBottom(this.xScale);
|
|
152
128
|
}
|
|
153
|
-
gridGen.tickSize(-this._height);
|
|
154
|
-
break;
|
|
155
129
|
case AxisType.Y:
|
|
156
130
|
switch (config.position) {
|
|
157
|
-
case Position.Right:
|
|
158
|
-
gridGen = axisRight(this.yScale);
|
|
159
|
-
break;
|
|
160
|
-
}
|
|
131
|
+
case Position.Right: return axisRight(this.yScale);
|
|
161
132
|
case Position.Left:
|
|
162
|
-
default:
|
|
163
|
-
gridGen = axisLeft(this.yScale);
|
|
164
|
-
break;
|
|
165
|
-
}
|
|
133
|
+
default: return axisLeft(this.yScale);
|
|
166
134
|
}
|
|
167
|
-
gridGen.tickSize(-this._width);
|
|
168
135
|
}
|
|
136
|
+
}
|
|
137
|
+
_buildAxis() {
|
|
138
|
+
const { config: { tickPadding, tickSize } } = this;
|
|
139
|
+
const tickSizeInner = Array.isArray(tickSize) ? tickSize[0] : tickSize;
|
|
140
|
+
const tickSizeOuter = Array.isArray(tickSize) ? tickSize[1] : tickSize;
|
|
141
|
+
const ticks = this._getNumTicks();
|
|
142
|
+
const axisGen = this._getAxisGen();
|
|
143
|
+
axisGen.ticks(ticks).tickPadding(tickPadding).tickSizeInner(tickSizeInner).tickSizeOuter(tickSizeOuter);
|
|
144
|
+
return axisGen;
|
|
145
|
+
}
|
|
146
|
+
_buildGrid() {
|
|
147
|
+
const { config } = this;
|
|
148
|
+
const gridGen = this._getAxisGen();
|
|
169
149
|
gridGen
|
|
150
|
+
.tickSize(config.type === AxisType.X ? -this._height : -this._width)
|
|
170
151
|
.tickSizeOuter(0)
|
|
171
152
|
.tickFormat(() => '');
|
|
172
153
|
const numTicks = this._getNumTicks() * 2;
|
|
@@ -225,6 +206,7 @@ class Axis extends XYComponentCore {
|
|
|
225
206
|
.filter(tickValue => tickValues.some((t) => isEqual(tickValue, t))) // We use isEqual to compare Dates
|
|
226
207
|
.classed(tickLabel, true)
|
|
227
208
|
.classed(tickLabelHideable, Boolean(config.tickTextHideOverlapping))
|
|
209
|
+
.classed(tickTextExiting, false)
|
|
228
210
|
.style('fill', config.tickTextColor);
|
|
229
211
|
// Marking exiting elements
|
|
230
212
|
selection.selectAll('g.tick > text')
|
|
@@ -475,17 +457,26 @@ class Axis extends XYComponentCore {
|
|
|
475
457
|
];
|
|
476
458
|
}
|
|
477
459
|
}
|
|
478
|
-
_alignTickLabels() {
|
|
460
|
+
_alignTickLabels(axisGroup = this.axisGroup) {
|
|
479
461
|
const { config: { type, tickTextAlign, tickTextAngle, position } } = this;
|
|
480
|
-
const
|
|
481
|
-
const
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
.
|
|
488
|
-
|
|
462
|
+
const activeTickTexts = axisGroup.selectAll(`g.tick > text:not(.${tickTextExiting})`);
|
|
463
|
+
const ticksData = activeTickTexts.data();
|
|
464
|
+
activeTickTexts.each((_, i, elements) => {
|
|
465
|
+
const tickTextElement = elements[i];
|
|
466
|
+
const tickDatum = ticksData[i];
|
|
467
|
+
// Compute the tick's target position from the scale rather than reading the DOM transform,
|
|
468
|
+
// which would return an interpolated value during a transition.
|
|
469
|
+
const tickPosition = type === AxisType.X
|
|
470
|
+
? [this.xScale(tickDatum), 0]
|
|
471
|
+
: [0, this.yScale(tickDatum)];
|
|
472
|
+
const textAlign = (isFunction(tickTextAlign) ? tickTextAlign(tickDatum, i, ticksData, tickPosition, this._width, this._height) : tickTextAlign);
|
|
473
|
+
const textAnchor = textAlignToAnchor(textAlign);
|
|
474
|
+
const translateX = type === AxisType.X ? 0 : this._getYTickTextTranslate(textAlign, position);
|
|
475
|
+
const translateValue = tickTextAngle ? `translate(${translateX},0) rotate(${tickTextAngle})` : `translate(${translateX},0)`;
|
|
476
|
+
select(tickTextElement)
|
|
477
|
+
.attr('transform', translateValue)
|
|
478
|
+
.attr('text-anchor', textAnchor);
|
|
479
|
+
});
|
|
489
480
|
}
|
|
490
481
|
_getYTickTextTranslate(textAlign, axisPosition = Position.Left) {
|
|
491
482
|
var _a, _b, _c, _d;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/axis/index.ts"],"sourcesContent":["import { select, Selection } from 'd3-selection'\nimport { interrupt } from 'd3-transition'\nimport { Axis as D3Axis, axisBottom, axisLeft, axisRight, axisTop } from 'd3-axis'\nimport { NumberValue } from 'd3-scale'\n\n// Core\nimport { XYComponentCore } from 'core/xy-component'\n\n// Types\nimport { Position } from 'types/position'\nimport { ContinuousScale } from 'types/scale'\nimport { Spacing } from 'types/spacing'\nimport { FitMode, TextAlign, TrimMode, UnovisText, UnovisTextOptions, VerticalAlign } from 'types/text'\n\n// Utils\nimport { smartTransition } from 'utils/d3'\nimport { renderTextToSvgTextElement, textAlignToAnchor, trimSVGText, wrapSVGText } from 'utils/text'\nimport { isEqual } from 'utils/data'\nimport { rectIntersect } from 'utils/misc'\nimport { getFontWidthToHeightRatio } from 'styles/index'\n\n// Local Types\nimport { AxisType } from './types'\n\n// Config\nimport { AxisDefaultConfig, AxisConfigInterface } from './config'\n\n// Styles\nimport * as s from './style'\n\nexport class Axis<Datum> extends XYComponentCore<Datum, AxisConfigInterface<Datum>> {\n static selectors = s\n protected _defaultConfig: AxisConfigInterface<Datum> = AxisDefaultConfig\n public config: AxisConfigInterface<Datum> = this._defaultConfig\n private axisGroup: Selection<SVGGElement, unknown, SVGGElement, unknown>\n private gridGroup: Selection<SVGGElement, unknown, SVGGElement, unknown>\n\n private _axisRawBBox: DOMRect\n private _axisSizeBBox: SVGRect\n private _requiredMargin: Spacing\n private _defaultNumTicks = 3\n private _collideTickLabelsAnimFrameId: ReturnType<typeof requestAnimationFrame>\n private _tickTextStyleCached: {\n fontSize: number;\n fontFamily: string;\n fontWidthToHeightRatio: number;\n }\n\n protected events = {}\n\n constructor (config?: AxisConfigInterface<Datum>) {\n super()\n if (config) this.setConfig(config)\n this.axisGroup = this.g.append('g')\n this.gridGroup = this.g.append('g')\n .attr('class', s.grid)\n }\n\n /** Renders axis to an invisible grouped to calculate automatic chart margins */\n public preRender (): void {\n const { config } = this\n const axisRenderHelperGroup = this.g.append('g').attr('opacity', 0)\n\n this._renderAxis(axisRenderHelperGroup, 0)\n\n // Store axis raw BBox (without the label) for further label positioning (see _renderAxisLabel)\n this._axisRawBBox = axisRenderHelperGroup.node().getBBox()\n\n // Align tick text\n if (config.tickTextAlign) this._alignTickLabels()\n // Render label and store total axis size and required margins\n this._renderAxisLabel(axisRenderHelperGroup)\n this._axisSizeBBox = this._getAxisSize(axisRenderHelperGroup)\n this._requiredMargin = this._getRequiredMargin(this._axisSizeBBox)\n\n axisRenderHelperGroup.remove()\n }\n\n public getPosition (): Position {\n const { config: { type, position } } = this\n return (position ?? ((type === AxisType.X) ? Position.Bottom : Position.Left)) as Position\n }\n\n private _getAxisSize (selection: Selection<SVGGElement, unknown, SVGGElement, undefined>): SVGRect {\n const bBox = selection.node().getBBox()\n return bBox\n }\n\n private _getRequiredMargin (axisSize = this._axisSizeBBox): Spacing {\n const { config: { type, position } } = this\n\n switch (type) {\n case AxisType.X: {\n const tolerancePx = 1\n const xEnd = this._axisSizeBBox.x + this._axisSizeBBox.width\n\n const left = this._axisSizeBBox.x < 0 ? Math.abs(this._axisSizeBBox.x) : 0\n const right = (xEnd - this._width) > tolerancePx ? xEnd - this._width : 0\n\n switch (position) {\n case Position.Top: return { top: axisSize.height, left, right }\n case Position.Bottom: default: return { bottom: axisSize.height, left, right }\n }\n }\n case AxisType.Y: {\n const bleedY = axisSize.height > this._height ? (axisSize.height - this._height) / 2 : 0\n const top = bleedY\n const bottom = bleedY\n\n switch (position) {\n case Position.Right: return { right: axisSize.width, top, bottom }\n case Position.Left: default: return { left: axisSize.width, top, bottom }\n }\n }\n }\n }\n\n getRequiredMargin (): Spacing {\n return this._requiredMargin\n }\n\n /** Calculates axis transform:translate offset based on passed container margins */\n getOffset (containerMargin: Spacing): {left: number; top: number} {\n const { config: { type, position } } = this\n\n switch (type) {\n case AxisType.X:\n switch (position) {\n case Position.Top: return { top: containerMargin.top, left: containerMargin.left }\n case Position.Bottom: default: return { top: containerMargin.top + this._height, left: containerMargin.left }\n }\n case AxisType.Y:\n switch (position) {\n case Position.Right: return { top: containerMargin.top, left: containerMargin.left + this._width }\n case Position.Left: default: return { top: containerMargin.top, left: containerMargin.left }\n }\n }\n }\n\n public _render (duration = this.config.duration, selection = this.axisGroup): void {\n const { config } = this\n\n this._renderAxis(selection, duration)\n this._renderAxisLabel(selection)\n\n if (config.gridLine) {\n const gridGen = this._buildGrid()\n // Interrupting all active transitions first to prevent them from being stuck.\n // Somehow we see it happening in Angular apps.\n this.gridGroup.selectAll('*').interrupt()\n smartTransition(this.gridGroup, duration).call(gridGen).style('opacity', 1)\n } else {\n smartTransition(this.gridGroup, duration).style('opacity', 0)\n }\n\n if (config.tickTextAlign) this._alignTickLabels()\n this._resolveTickLabelOverlap(selection)\n }\n\n private _buildAxis (): D3Axis<any> {\n const { config: { type, position, tickPadding } } = this\n\n const ticks = this._getNumTicks()\n switch (type) {\n case AxisType.X:\n switch (position) {\n case Position.Top: return axisTop(this.xScale).ticks(ticks).tickPadding(tickPadding)\n case Position.Bottom: default: return axisBottom(this.xScale).ticks(ticks).tickPadding(tickPadding)\n }\n case AxisType.Y:\n switch (position) {\n case Position.Right: return axisRight(this.yScale).ticks(ticks).tickPadding(tickPadding)\n case Position.Left: default: return axisLeft(this.yScale).ticks(ticks).tickPadding(tickPadding)\n }\n }\n }\n\n private _buildGrid (): D3Axis<NumberValue | Date> {\n const { config } = this\n\n let gridGen: D3Axis<NumberValue | Date>\n switch (config.type) {\n case AxisType.X:\n switch (config.position) {\n case Position.Top: { gridGen = axisTop(this.xScale); break }\n case Position.Bottom: default: { gridGen = axisBottom(this.xScale); break }\n }\n gridGen.tickSize(-this._height)\n break\n case AxisType.Y:\n switch (config.position) {\n case Position.Right: { gridGen = axisRight(this.yScale); break }\n case Position.Left: default: { gridGen = axisLeft(this.yScale); break }\n }\n gridGen.tickSize(-this._width)\n }\n gridGen\n .tickSizeOuter(0)\n .tickFormat(() => '')\n\n const numTicks = this._getNumTicks() * 2\n const gridScale = gridGen.scale<ContinuousScale>()\n const scaleDomain = gridScale.domain()\n\n const getGridMinMaxTicksOnlyValues = (): number[] | Date[] => {\n if (!config.minMaxTicksOnlyShowGridLines) return scaleDomain\n\n const tickValues = gridScale.ticks(numTicks)\n if (tickValues.length < 2) return scaleDomain\n\n // If the last tick is far enough from the domain max value, we add it to the tick values to draw the grid line\n const tickValuesStep = +tickValues[1] - +tickValues[0]\n const domainMaxValue = scaleDomain[1]\n const diff = +domainMaxValue - +tickValues[tickValues.length - 1]\n\n return diff > tickValuesStep / 2 ? [...tickValues, domainMaxValue] as (number[] | Date[]) : tickValues\n }\n\n const tickValues = config.tickValues\n ? this._getConfiguredTickValues()\n : this._shouldRenderMinMaxTicksOnly()\n ? getGridMinMaxTicksOnlyValues()\n : gridScale.ticks(numTicks)\n\n gridGen.tickValues(tickValues)\n\n return gridGen\n }\n\n private _renderAxis (selection = this.axisGroup, duration = this.config.duration): void {\n const { config } = this\n\n const axisGen = this._buildAxis()\n const axisScale = axisGen.scale<ContinuousScale>()\n const tickValues: (number[] | Date[]) =\n config.tickValues\n ? this._getConfiguredTickValues()\n : this._shouldRenderMinMaxTicksOnly()\n ? axisScale.domain()\n : axisScale.ticks(this._getNumTicks())\n const tickCount = tickValues.length\n axisGen.tickValues(tickValues)\n\n // Interrupting all active transitions first to prevent them from being stuck.\n // Somehow we see it happening in Angular apps.\n selection.selectAll('*').interrupt()\n const transition = smartTransition(selection, duration).call(axisGen)\n\n // Unset D3's default y and dy attributes because we're going to set them manually in the renderTextToSvgTextElement function\n selection.selectAll<SVGTextElement, number | Date>('text')\n .attr('dy', null)\n .attr('y', null)\n\n // Resolving tick label overlap after the animation is over\n transition.on('end', () => {\n this._resolveTickLabelOverlap(selection)\n })\n\n const ticks = selection.selectAll<SVGGElement, number | Date>('g.tick')\n\n ticks\n .classed(s.tick, true)\n .style('font-size', config.tickTextFontSize)\n\n // Selecting the <text> elements of the ticks to apply formatting. By default, this selection\n // will include exiting elements, so we're filtering them out.\n const tickText = selection.selectAll<SVGTextElement, number | Date>('g.tick > text')\n .filter(tickValue => tickValues.some((t: number | Date) => isEqual(tickValue, t))) // We use isEqual to compare Dates\n .classed(s.tickLabel, true)\n .classed(s.tickLabelHideable, Boolean(config.tickTextHideOverlapping))\n .style('fill', config.tickTextColor) as Selection<SVGTextElement, number, SVGGElement, unknown> | Selection<SVGTextElement, Date, SVGGElement, unknown>\n\n // Marking exiting elements\n selection.selectAll<SVGTextElement, number | Date>('g.tick > text')\n .filter(tickValue => !tickValues.some((t: number | Date) => isEqual(tickValue, t)))\n .classed(s.tickTextExiting, true)\n\n // We interrupt the transition on tick's <text> to make it 'wrappable'\n tickText.nodes().forEach(node => interrupt(node))\n\n const tickSize = axisGen.tickSize()\n const axisPosition = this.getPosition()\n const textMaxWidth = config.tickTextWidth || (config.type === AxisType.X ? this._containerWidth / (tickCount + 1) : this._containerWidth / 5)\n tickText.each((value: number | Date, i: number, elements: ArrayLike<SVGTextElement>) => {\n let text = config.tickFormat?.(value, i, tickValues) ?? `${value}`\n const textElement = elements[i] as SVGTextElement\n\n // Get and cache the tick text style\n if (!this._tickTextStyleCached) {\n const styleDeclaration = getComputedStyle(textElement)\n this._tickTextStyleCached = {\n fontSize: Number.parseFloat(styleDeclaration.fontSize),\n fontFamily: styleDeclaration.fontFamily,\n fontWidthToHeightRatio: getFontWidthToHeightRatio(),\n }\n }\n\n // Calculate the text offset based on the axis position and the tick size\n const [textOffsetX, textOffsetY] = this._getTickTextOffset(axisPosition, tickSize, this._tickTextStyleCached.fontSize)\n\n // Prepare the Unovis text options\n const textOptions: UnovisTextOptions = {\n verticalAlign: config.type === AxisType.X ? VerticalAlign.Top : VerticalAlign.Middle,\n width: textMaxWidth,\n textRotationAngle: config.tickTextAngle,\n separator: config.tickTextSeparator,\n wordBreak: config.tickTextForceWordBreak,\n x: textOffsetX,\n y: textOffsetY,\n }\n\n if (config.tickTextFitMode === FitMode.Trim) {\n const textElementSelection = select<SVGTextElement, string>(textElement).text(text)\n trimSVGText(textElementSelection, textMaxWidth, config.tickTextTrimType as TrimMode, true, this._tickTextStyleCached.fontSize, 0.58)\n text = select<SVGTextElement, string>(textElement).text()\n }\n\n const textBlock: UnovisText = { text, ...this._tickTextStyleCached }\n const dominantBaseline = config.type === AxisType.X ? 'central' : 'hanging'\n renderTextToSvgTextElement(textElement, textBlock, textOptions, dominantBaseline)\n })\n\n selection\n .classed(s.axis, true)\n .classed(s.hideTickLine, !config.tickLine)\n .classed(s.hideDomain, !config.domainLine)\n\n if (config.fullSize) {\n const path = this._getFullDomainPath(0)\n smartTransition(selection.select('.domain'), duration).attr('d', path)\n }\n }\n\n private _resolveTickLabelOverlap (selection = this.axisGroup): void {\n const { config } = this\n const tickTextSelection = selection.selectAll<SVGTextElement, number | Date>(`g.tick > text:not(.${s.tickTextExiting})`)\n\n if (!config.tickTextHideOverlapping) {\n tickTextSelection.style('opacity', null)\n return\n }\n\n cancelAnimationFrame(this._collideTickLabelsAnimFrameId)\n // Colliding labels in the next frame to prevent forced reflow\n this._collideTickLabelsAnimFrameId = requestAnimationFrame(() => {\n this._collideTickLabels(tickTextSelection)\n })\n }\n\n private _collideTickLabels (selection: Selection<SVGTextElement, number | Date, SVGGElement, unknown>): void {\n type SVGOverlappingTextElement = SVGTextElement & {\n _visible: boolean;\n }\n\n // Reset visibility of all labels\n selection.each((d, i, elements) => {\n const node = elements[i] as SVGOverlappingTextElement\n node._visible = true\n })\n\n // We do three iterations because not all overlapping labels can be resolved in the first iteration\n const numIterations = 3\n for (let i = 0; i < numIterations; i += 1) {\n // Run collision detection and set labels visibility\n selection.each((d, i, elements) => {\n const label1 = elements[i] as SVGOverlappingTextElement\n const isLabel1Visible = label1._visible\n if (!isLabel1Visible) return\n\n // Calculate bounding rect of point's label\n const label1BoundingRect = label1.getBoundingClientRect()\n\n for (let j = i + 1; j < elements.length; j += 1) {\n if (i === j) continue\n const label2 = elements[j] as SVGOverlappingTextElement\n const isLabel2Visible = label2._visible\n if (isLabel2Visible) {\n const label2BoundingRect = label2.getBoundingClientRect()\n const intersect = rectIntersect(label1BoundingRect, label2BoundingRect, -5)\n if (intersect) {\n label2._visible = false\n break\n }\n }\n }\n })\n }\n\n // Hide the overlapping labels\n selection.each((d, i, elements) => {\n const label = elements[i] as SVGOverlappingTextElement\n select(label).style('opacity', label._visible ? 1 : 0)\n })\n }\n\n private _getNumTicks (): number {\n const { config: { type, numTicks } } = this\n\n if (numTicks) return numTicks\n\n if (type === AxisType.X) {\n const xRange = this.xScale.range() as [number, number]\n const width = xRange[1] - xRange[0]\n return Math.floor(width / 175)\n }\n\n if (type === AxisType.Y) {\n const yRange = this.yScale.range() as [number, number]\n const height = Math.abs(yRange[0] - yRange[1])\n return Math.pow(height, 0.85) / 25\n }\n\n return this._defaultNumTicks\n }\n\n private _getConfiguredTickValues (): number[] | null {\n const { config } = this\n const scale = config.type === AxisType.X ? this.xScale : this.yScale\n const scaleDomain = scale?.domain() as [number, number]\n\n if (config.tickValues) {\n return config.tickValues.filter(v => (v >= scaleDomain[0]) && (v <= scaleDomain[1]))\n }\n\n return null\n }\n\n private _shouldRenderMinMaxTicksOnly (): boolean {\n const { config } = this\n return config.minMaxTicksOnly || (config.type === AxisType.X && this._width < config.minMaxTicksOnlyWhenWidthIsLess)\n }\n\n private _getFullDomainPath (tickSize = 0): string {\n const { config: { type } } = this\n switch (type) {\n case AxisType.X: return `M0.5, ${tickSize} V0.5 H${this._width + 0.5} V${tickSize}`\n case AxisType.Y: return `M${-tickSize}, ${this._height + 0.5} H0.5 V0.5 H${-tickSize}`\n }\n }\n\n private _renderAxisLabel (selection = this.axisGroup): void {\n const { type, label, labelMargin, labelFontSize, labelTextFitMode } = this.config\n\n // Remove the old label first to calculate the axis size properly\n selection.selectAll(`.${s.label}`).remove()\n\n if (!label) return\n\n // Calculate label position and rotation\n const axisPosition = this.getPosition()\n // We always use this.axisRenderHelperGroup to calculate the size of the axis because\n // this.axisGroup will give us incorrect values due to animation\n const { width: axisWidth, height: axisHeight } = this._axisRawBBox ?? selection.node().getBBox()\n\n const rotation = type === AxisType.Y ? -90 : 0\n\n // Create the text element (without transform first)\n const textElement = selection\n .append('text')\n .attr('class', s.label)\n .attr('dy', `${this._getLabelDY()}em`)\n .style('font-size', labelFontSize)\n .style('fill', this.config.labelColor)\n\n // Set the text content\n textElement.text(label)\n\n let isWrapped = false\n if (labelTextFitMode === FitMode.Wrap) {\n // For Y-axis, use the chart height as the maximum width before rotation\n const maxWidth = type === AxisType.Y ? this._height : this._width\n const currentTextWidth = textElement.node().getComputedTextLength()\n\n if (currentTextWidth > maxWidth) {\n wrapSVGText(textElement, maxWidth)\n isWrapped = true\n }\n }\n\n // Calculate offset after wrapping to get accurate dimensions\n let labelWidth = axisWidth\n let labelHeight = axisHeight\n if (labelTextFitMode === FitMode.Wrap) {\n const labelBBox = textElement.node().getBBox()\n labelWidth = labelBBox.width\n labelHeight = labelBBox.height\n } else {\n const trimWidth = type === AxisType.X ? labelWidth : labelHeight\n const styleDeclaration = getComputedStyle(textElement.node())\n const fontSize = Number.parseFloat(styleDeclaration.fontSize)\n // Use the default fontWidthToHeightRatio\n trimSVGText(\n textElement,\n trimWidth,\n this.config.labelTextTrimType as TrimMode,\n true,\n fontSize\n )\n const trimmedBBox = textElement.node().getBBox()\n labelWidth = trimmedBBox.width\n labelHeight = trimmedBBox.height\n }\n\n /*\n we need to calculate the offset for the label based on the position and the fit mode\n for offsetX, applying Y label we need to check if it's wrap or trim, then set the offset accordingly.\n Same for offsetY, need to consider x label.\n */\n const offsetX = type === AxisType.X\n ? this._width / 2\n : type === AxisType.Y && labelTextFitMode === FitMode.Wrap && isWrapped\n ? (axisPosition === Position.Left)\n ? -axisWidth - labelHeight / 2 - 10 // there's a 10px gap between tick label and Position.Right Y label, so offset as well in the Position.Left case\n : axisWidth\n : (-1) ** (+(axisPosition === Position.Left)) * axisWidth\n const offsetY = type === AxisType.Y\n ? this._height / 2\n : type === AxisType.X && labelTextFitMode === FitMode.Wrap\n ? (axisPosition === Position.Top) ? -axisHeight - labelHeight / 2 : axisHeight\n : (-1) ** (+(axisPosition === Position.Top)) * axisHeight\n\n const marginX = type === AxisType.X ? 0 : (-1) ** (+(axisPosition === Position.Left)) * labelMargin\n const marginY = type === AxisType.X ? (-1) ** (+(axisPosition === Position.Top)) * labelMargin : 0\n\n // Apply transform and rotation after all calculations\n textElement.attr('transform', `translate(${offsetX + marginX},${offsetY + marginY}) rotate(${rotation})`)\n }\n\n private _getLabelDY (): number {\n const { type, position } = this.config\n switch (type) {\n case AxisType.X:\n switch (position) {\n case Position.Top: return 0\n case Position.Bottom: default: return 0.75\n }\n case AxisType.Y:\n switch (position) {\n case Position.Right: return 0.75\n case Position.Left: default: return -0.25\n }\n }\n }\n\n private _getTickTextOffset (axisPosition: Position, tickSize: number, fontSize: number): [number, number] {\n const { config } = this\n const angleRad = (config.tickTextAngle ?? 0) / 180 * Math.PI\n const baseOffset = tickSize + config.tickPadding\n\n if (config.type === AxisType.X) {\n const direction = axisPosition === Position.Bottom ? 1 : -1\n return [\n direction * baseOffset * Math.sin(angleRad),\n direction * (baseOffset + fontSize / 2) * Math.cos(angleRad),\n ]\n } else {\n const direction = axisPosition === Position.Right ? 1 : -1\n return [\n direction * baseOffset * Math.cos(angleRad),\n direction * baseOffset * Math.sin(angleRad),\n ]\n }\n }\n\n private _alignTickLabels (): void {\n const { config: { type, tickTextAlign, tickTextAngle, position } } = this\n const tickText = this.g.selectAll('g.tick > text')\n\n const textAnchor = textAlignToAnchor(tickTextAlign as TextAlign)\n const translateX = type === AxisType.X\n ? 0\n : this._getYTickTextTranslate(tickTextAlign as TextAlign, position as Position)\n\n const translateValue = tickTextAngle ? `translate(${translateX},0) rotate(${tickTextAngle})` : `translate(${translateX},0)`\n tickText\n .attr('transform', translateValue)\n .attr('text-anchor', textAnchor)\n }\n\n private _getYTickTextTranslate (textAlign: TextAlign, axisPosition: Position = Position.Left): number {\n /*\n Default in D3 is 9, tickPadding is the spacing in pixels between the tick and it's label. Default: `8`\n */\n const defaultTickTextSpacingPx = this.config.tickPadding + 1\n\n // this._axisRawBBox will be undefined when autoMargin is undefined\n const width = (this._axisRawBBox?.width ?? this.axisGroup.node()?.getBBox().width ?? 0) - defaultTickTextSpacingPx\n\n switch (textAlign) {\n case TextAlign.Left: return axisPosition === Position.Left ? width * -1 : 0\n case TextAlign.Right: return axisPosition === Position.Left ? 0 : width\n case TextAlign.Center: return axisPosition === Position.Left ? width * (-0.5) : width * 0.5\n default: return 0\n }\n }\n}\n"],"names":["s.grid","s.tick","s.tickLabel","s.tickLabelHideable","s.tickTextExiting","s.axis","s.hideTickLine","s.hideDomain","label","s.label","s"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/axis/index.ts"],"sourcesContent":["import { select, Selection } from 'd3-selection'\nimport { interrupt } from 'd3-transition'\nimport { Axis as D3Axis, axisBottom, axisLeft, axisRight, axisTop } from 'd3-axis'\nimport { NumberValue } from 'd3-scale'\n\n// Core\nimport { XYComponentCore } from 'core/xy-component'\n\n// Types\nimport { Position } from 'types/position'\nimport { ContinuousScale } from 'types/scale'\nimport { Spacing } from 'types/spacing'\nimport { FitMode, TextAlign, TrimMode, UnovisText, UnovisTextOptions, VerticalAlign } from 'types/text'\n\n// Utils\nimport { smartTransition } from 'utils/d3'\nimport { renderTextToSvgTextElement, textAlignToAnchor, trimSVGText, wrapSVGText } from 'utils/text'\nimport { isEqual, isFunction } from 'utils/data'\nimport { rectIntersect } from 'utils/misc'\nimport { getFontWidthToHeightRatio } from 'styles/index'\n\n// Local Types\nimport { AxisType } from './types'\n\n// Config\nimport { AxisDefaultConfig, AxisConfigInterface } from './config'\n\n// Styles\nimport * as s from './style'\n\nexport class Axis<Datum> extends XYComponentCore<Datum, AxisConfigInterface<Datum>> {\n static selectors = s\n protected _defaultConfig: AxisConfigInterface<Datum> = AxisDefaultConfig\n public config: AxisConfigInterface<Datum> = this._defaultConfig\n private axisGroup: Selection<SVGGElement, unknown, SVGGElement, unknown>\n private gridGroup: Selection<SVGGElement, unknown, SVGGElement, unknown>\n\n private _axisRawBBox: DOMRect\n private _axisSizeBBox: SVGRect\n private _requiredMargin: Spacing\n private _defaultNumTicks = 3\n private _collideTickLabelsAnimFrameId: ReturnType<typeof requestAnimationFrame>\n private _tickTextStyleCached: {\n fontSize: number;\n fontFamily: string;\n fontWidthToHeightRatio: number;\n }\n\n protected events = {}\n\n constructor (config?: AxisConfigInterface<Datum>) {\n super()\n if (config) this.setConfig(config)\n\n this.g.attr('axis-type', this.config.type)\n\n this.axisGroup = this.g.append('g')\n this.gridGroup = this.g.append('g')\n .attr('class', s.grid)\n }\n\n /** Renders axis to an invisible grouped to calculate automatic chart margins */\n public preRender (): void {\n const { config } = this\n const axisRenderHelperGroup = this.g.append('g').attr('opacity', 0)\n\n this._renderAxis(axisRenderHelperGroup, 0)\n\n // Align tick text\n if (config.tickTextAlign) this._alignTickLabels(axisRenderHelperGroup)\n\n // Store axis raw BBox (without the label) for further label positioning (see _renderAxisLabel)\n this._axisRawBBox = axisRenderHelperGroup.node().getBBox()\n\n // Render label and store total axis size and required margins\n this._renderAxisLabel(axisRenderHelperGroup)\n this._axisSizeBBox = this._getAxisSize(axisRenderHelperGroup)\n this._requiredMargin = this._getRequiredMargin(this._axisSizeBBox)\n\n axisRenderHelperGroup.remove()\n }\n\n public getPosition (): Position {\n const { config: { type, position } } = this\n return (position ?? ((type === AxisType.X) ? Position.Bottom : Position.Left)) as Position\n }\n\n private _getAxisSize (selection: Selection<SVGGElement, unknown, SVGGElement, undefined>): SVGRect {\n const bBox = selection.node().getBBox()\n return bBox\n }\n\n private _getRequiredMargin (axisSize = this._axisSizeBBox): Spacing {\n const { config: { type, position } } = this\n\n switch (type) {\n case AxisType.X: {\n const tolerancePx = 1\n const xEnd = this._axisSizeBBox.x + this._axisSizeBBox.width\n\n const left = this._axisSizeBBox.x < 0 ? Math.abs(this._axisSizeBBox.x) : 0\n const right = (xEnd - this._width) > tolerancePx ? xEnd - this._width : 0\n\n switch (position) {\n case Position.Top: return { top: axisSize.height, left, right }\n case Position.Bottom: default: return { bottom: axisSize.height, left, right }\n }\n }\n case AxisType.Y: {\n const bleedY = axisSize.height > this._height ? (axisSize.height - this._height) / 2 : 0\n const top = bleedY\n const bottom = bleedY\n\n switch (position) {\n case Position.Right: return { right: axisSize.width, top, bottom }\n case Position.Left: default: return { left: axisSize.width, top, bottom }\n }\n }\n }\n }\n\n getRequiredMargin (): Spacing {\n return this._requiredMargin\n }\n\n /** Calculates axis transform:translate offset based on passed container margins */\n getOffset (containerMargin: Spacing): {left: number; top: number} {\n const { config: { type, position } } = this\n\n switch (type) {\n case AxisType.X:\n switch (position) {\n case Position.Top: return { top: containerMargin.top, left: containerMargin.left }\n case Position.Bottom: default: return { top: containerMargin.top + this._height, left: containerMargin.left }\n }\n case AxisType.Y:\n switch (position) {\n case Position.Right: return { top: containerMargin.top, left: containerMargin.left + this._width }\n case Position.Left: default: return { top: containerMargin.top, left: containerMargin.left }\n }\n }\n }\n\n public _render (duration = this.config.duration, selection = this.axisGroup): void {\n const { config } = this\n\n this._renderAxis(selection, duration)\n this._renderAxisLabel(selection)\n\n if (config.gridLine) {\n const gridGen = this._buildGrid()\n // Interrupting all active transitions first to prevent them from being stuck.\n // Somehow we see it happening in Angular apps.\n this.gridGroup.selectAll('*').interrupt()\n smartTransition(this.gridGroup, duration).call(gridGen).style('opacity', 1)\n } else {\n smartTransition(this.gridGroup, duration).style('opacity', 0)\n }\n\n if (config.tickTextAlign) this._alignTickLabels()\n this._resolveTickLabelOverlap(selection)\n }\n\n private _getAxisGen (): D3Axis<NumberValue | Date> {\n const { config } = this\n\n switch (config.type) {\n case AxisType.X:\n switch (config.position) {\n case Position.Top: return axisTop(this.xScale)\n case Position.Bottom: default: return axisBottom(this.xScale)\n }\n case AxisType.Y:\n switch (config.position) {\n case Position.Right: return axisRight(this.yScale)\n case Position.Left: default: return axisLeft(this.yScale)\n }\n }\n }\n\n private _buildAxis (): D3Axis<NumberValue | Date> {\n const { config: { tickPadding, tickSize } } = this\n\n const tickSizeInner = Array.isArray(tickSize) ? tickSize[0] : tickSize\n const tickSizeOuter = Array.isArray(tickSize) ? tickSize[1] : tickSize\n const ticks = this._getNumTicks()\n const axisGen = this._getAxisGen()\n axisGen.ticks(ticks).tickPadding(tickPadding).tickSizeInner(tickSizeInner).tickSizeOuter(tickSizeOuter)\n\n return axisGen\n }\n\n private _buildGrid (): D3Axis<NumberValue | Date> {\n const { config } = this\n\n const gridGen = this._getAxisGen()\n gridGen\n .tickSize(config.type === AxisType.X ? -this._height : -this._width)\n .tickSizeOuter(0)\n .tickFormat(() => '')\n\n const numTicks = this._getNumTicks() * 2\n const gridScale = gridGen.scale<ContinuousScale>()\n const scaleDomain = gridScale.domain()\n\n const getGridMinMaxTicksOnlyValues = (): number[] | Date[] => {\n if (!config.minMaxTicksOnlyShowGridLines) return scaleDomain\n\n const tickValues = gridScale.ticks(numTicks)\n if (tickValues.length < 2) return scaleDomain\n\n // If the last tick is far enough from the domain max value, we add it to the tick values to draw the grid line\n const tickValuesStep = +tickValues[1] - +tickValues[0]\n const domainMaxValue = scaleDomain[1]\n const diff = +domainMaxValue - +tickValues[tickValues.length - 1]\n\n return diff > tickValuesStep / 2 ? [...tickValues, domainMaxValue] as (number[] | Date[]) : tickValues\n }\n\n const tickValues = config.tickValues\n ? this._getConfiguredTickValues()\n : this._shouldRenderMinMaxTicksOnly()\n ? getGridMinMaxTicksOnlyValues()\n : gridScale.ticks(numTicks)\n\n gridGen.tickValues(tickValues)\n\n return gridGen\n }\n\n private _renderAxis (selection = this.axisGroup, duration = this.config.duration): void {\n const { config } = this\n\n const axisGen = this._buildAxis()\n const axisScale = axisGen.scale<ContinuousScale>()\n const tickValues: (number[] | Date[]) =\n config.tickValues\n ? this._getConfiguredTickValues()\n : this._shouldRenderMinMaxTicksOnly()\n ? axisScale.domain()\n : axisScale.ticks(this._getNumTicks())\n const tickCount = tickValues.length\n axisGen.tickValues(tickValues)\n\n // Interrupting all active transitions first to prevent them from being stuck.\n // Somehow we see it happening in Angular apps.\n selection.selectAll('*').interrupt()\n const transition = smartTransition(selection, duration).call(axisGen)\n\n // Unset D3's default y and dy attributes because we're going to set them manually in the renderTextToSvgTextElement function\n selection.selectAll<SVGTextElement, number | Date>('text')\n .attr('dy', null)\n .attr('y', null)\n\n // Resolving tick label overlap after the animation is over\n transition.on('end', () => {\n this._resolveTickLabelOverlap(selection)\n })\n\n const ticks = selection.selectAll<SVGGElement, number | Date>('g.tick')\n\n ticks\n .classed(s.tick, true)\n .style('font-size', config.tickTextFontSize)\n\n // Selecting the <text> elements of the ticks to apply formatting. By default, this selection\n // will include exiting elements, so we're filtering them out.\n const tickText = selection.selectAll<SVGTextElement, number | Date>('g.tick > text')\n .filter(tickValue => tickValues.some((t: number | Date) => isEqual(tickValue, t))) // We use isEqual to compare Dates\n .classed(s.tickLabel, true)\n .classed(s.tickLabelHideable, Boolean(config.tickTextHideOverlapping))\n .classed(s.tickTextExiting, false)\n .style('fill', config.tickTextColor) as Selection<SVGTextElement, number, SVGGElement, unknown> | Selection<SVGTextElement, Date, SVGGElement, unknown>\n\n // Marking exiting elements\n selection.selectAll<SVGTextElement, number | Date>('g.tick > text')\n .filter(tickValue => !tickValues.some((t: number | Date) => isEqual(tickValue, t)))\n .classed(s.tickTextExiting, true)\n\n // We interrupt the transition on tick's <text> to make it 'wrappable'\n tickText.nodes().forEach(node => interrupt(node))\n\n const tickSize = axisGen.tickSize()\n const axisPosition = this.getPosition()\n const textMaxWidth = config.tickTextWidth || (config.type === AxisType.X ? this._containerWidth / (tickCount + 1) : this._containerWidth / 5)\n tickText.each((value: number | Date, i: number, elements: ArrayLike<SVGTextElement>) => {\n let text = config.tickFormat?.(value, i, tickValues) ?? `${value}`\n const textElement = elements[i] as SVGTextElement\n\n // Get and cache the tick text style\n if (!this._tickTextStyleCached) {\n const styleDeclaration = getComputedStyle(textElement)\n this._tickTextStyleCached = {\n fontSize: Number.parseFloat(styleDeclaration.fontSize),\n fontFamily: styleDeclaration.fontFamily,\n fontWidthToHeightRatio: getFontWidthToHeightRatio(),\n }\n }\n\n // Calculate the text offset based on the axis position and the tick size\n const [textOffsetX, textOffsetY] = this._getTickTextOffset(axisPosition, tickSize, this._tickTextStyleCached.fontSize)\n\n // Prepare the Unovis text options\n const textOptions: UnovisTextOptions = {\n verticalAlign: config.type === AxisType.X ? VerticalAlign.Top : VerticalAlign.Middle,\n width: textMaxWidth,\n textRotationAngle: config.tickTextAngle,\n separator: config.tickTextSeparator,\n wordBreak: config.tickTextForceWordBreak,\n x: textOffsetX,\n y: textOffsetY,\n }\n\n if (config.tickTextFitMode === FitMode.Trim) {\n const textElementSelection = select<SVGTextElement, string>(textElement).text(text)\n trimSVGText(textElementSelection, textMaxWidth, config.tickTextTrimType as TrimMode, true, this._tickTextStyleCached.fontSize, 0.58)\n text = select<SVGTextElement, string>(textElement).text()\n }\n\n const textBlock: UnovisText = { text, ...this._tickTextStyleCached }\n const dominantBaseline = config.type === AxisType.X ? 'central' : 'hanging'\n renderTextToSvgTextElement(textElement, textBlock, textOptions, dominantBaseline)\n })\n\n selection\n .classed(s.axis, true)\n .classed(s.hideTickLine, !config.tickLine)\n .classed(s.hideDomain, !config.domainLine)\n\n if (config.fullSize) {\n const path = this._getFullDomainPath(0)\n smartTransition(selection.select('.domain'), duration).attr('d', path)\n }\n }\n\n private _resolveTickLabelOverlap (selection = this.axisGroup): void {\n const { config } = this\n const tickTextSelection = selection.selectAll<SVGTextElement, number | Date>(`g.tick > text:not(.${s.tickTextExiting})`)\n\n if (!config.tickTextHideOverlapping) {\n tickTextSelection.style('opacity', null)\n return\n }\n\n cancelAnimationFrame(this._collideTickLabelsAnimFrameId)\n // Colliding labels in the next frame to prevent forced reflow\n this._collideTickLabelsAnimFrameId = requestAnimationFrame(() => {\n this._collideTickLabels(tickTextSelection)\n })\n }\n\n private _collideTickLabels (selection: Selection<SVGTextElement, number | Date, SVGGElement, unknown>): void {\n type SVGOverlappingTextElement = SVGTextElement & {\n _visible: boolean;\n }\n\n // Reset visibility of all labels\n selection.each((d, i, elements) => {\n const node = elements[i] as SVGOverlappingTextElement\n node._visible = true\n })\n\n // We do three iterations because not all overlapping labels can be resolved in the first iteration\n const numIterations = 3\n for (let i = 0; i < numIterations; i += 1) {\n // Run collision detection and set labels visibility\n selection.each((d, i, elements) => {\n const label1 = elements[i] as SVGOverlappingTextElement\n const isLabel1Visible = label1._visible\n if (!isLabel1Visible) return\n\n // Calculate bounding rect of point's label\n const label1BoundingRect = label1.getBoundingClientRect()\n\n for (let j = i + 1; j < elements.length; j += 1) {\n if (i === j) continue\n const label2 = elements[j] as SVGOverlappingTextElement\n const isLabel2Visible = label2._visible\n if (isLabel2Visible) {\n const label2BoundingRect = label2.getBoundingClientRect()\n const intersect = rectIntersect(label1BoundingRect, label2BoundingRect, -5)\n if (intersect) {\n label2._visible = false\n break\n }\n }\n }\n })\n }\n\n // Hide the overlapping labels\n selection.each((d, i, elements) => {\n const label = elements[i] as SVGOverlappingTextElement\n select(label).style('opacity', label._visible ? 1 : 0)\n })\n }\n\n private _getNumTicks (): number {\n const { config: { type, numTicks } } = this\n\n if (numTicks) return numTicks\n\n if (type === AxisType.X) {\n const xRange = this.xScale.range() as [number, number]\n const width = xRange[1] - xRange[0]\n return Math.floor(width / 175)\n }\n\n if (type === AxisType.Y) {\n const yRange = this.yScale.range() as [number, number]\n const height = Math.abs(yRange[0] - yRange[1])\n return Math.pow(height, 0.85) / 25\n }\n\n return this._defaultNumTicks\n }\n\n private _getConfiguredTickValues (): number[] | null {\n const { config } = this\n const scale = config.type === AxisType.X ? this.xScale : this.yScale\n const scaleDomain = scale?.domain() as [number, number]\n\n if (config.tickValues) {\n return config.tickValues.filter(v => (v >= scaleDomain[0]) && (v <= scaleDomain[1]))\n }\n\n return null\n }\n\n private _shouldRenderMinMaxTicksOnly (): boolean {\n const { config } = this\n return config.minMaxTicksOnly || (config.type === AxisType.X && this._width < config.minMaxTicksOnlyWhenWidthIsLess)\n }\n\n private _getFullDomainPath (tickSize = 0): string {\n const { config: { type } } = this\n switch (type) {\n case AxisType.X: return `M0.5, ${tickSize} V0.5 H${this._width + 0.5} V${tickSize}`\n case AxisType.Y: return `M${-tickSize}, ${this._height + 0.5} H0.5 V0.5 H${-tickSize}`\n }\n }\n\n private _renderAxisLabel (selection = this.axisGroup): void {\n const { type, label, labelMargin, labelFontSize, labelTextFitMode } = this.config\n\n // Remove the old label first to calculate the axis size properly\n selection.selectAll(`.${s.label}`).remove()\n\n if (!label) return\n\n // Calculate label position and rotation\n const axisPosition = this.getPosition()\n // We always use this.axisRenderHelperGroup to calculate the size of the axis because\n // this.axisGroup will give us incorrect values due to animation\n const { width: axisWidth, height: axisHeight } = this._axisRawBBox ?? selection.node().getBBox()\n\n const rotation = type === AxisType.Y ? -90 : 0\n\n // Create the text element (without transform first)\n const textElement = selection\n .append('text')\n .attr('class', s.label)\n .attr('dy', `${this._getLabelDY()}em`)\n .style('font-size', labelFontSize)\n .style('fill', this.config.labelColor)\n\n // Set the text content\n textElement.text(label)\n\n let isWrapped = false\n if (labelTextFitMode === FitMode.Wrap) {\n // For Y-axis, use the chart height as the maximum width before rotation\n const maxWidth = type === AxisType.Y ? this._height : this._width\n const currentTextWidth = textElement.node().getComputedTextLength()\n\n if (currentTextWidth > maxWidth) {\n wrapSVGText(textElement, maxWidth)\n isWrapped = true\n }\n }\n\n // Calculate offset after wrapping to get accurate dimensions\n let labelWidth = axisWidth\n let labelHeight = axisHeight\n if (labelTextFitMode === FitMode.Wrap) {\n const labelBBox = textElement.node().getBBox()\n labelWidth = labelBBox.width\n labelHeight = labelBBox.height\n } else {\n const trimWidth = type === AxisType.X ? labelWidth : labelHeight\n const styleDeclaration = getComputedStyle(textElement.node())\n const fontSize = Number.parseFloat(styleDeclaration.fontSize)\n // Use the default fontWidthToHeightRatio\n trimSVGText(\n textElement,\n trimWidth,\n this.config.labelTextTrimType as TrimMode,\n true,\n fontSize\n )\n const trimmedBBox = textElement.node().getBBox()\n labelWidth = trimmedBBox.width\n labelHeight = trimmedBBox.height\n }\n\n /*\n we need to calculate the offset for the label based on the position and the fit mode\n for offsetX, applying Y label we need to check if it's wrap or trim, then set the offset accordingly.\n Same for offsetY, need to consider x label.\n */\n const offsetX = type === AxisType.X\n ? this._width / 2\n : type === AxisType.Y && labelTextFitMode === FitMode.Wrap && isWrapped\n ? (axisPosition === Position.Left)\n ? -axisWidth - labelHeight / 2 - 10 // there's a 10px gap between tick label and Position.Right Y label, so offset as well in the Position.Left case\n : axisWidth\n : (-1) ** (+(axisPosition === Position.Left)) * axisWidth\n const offsetY = type === AxisType.Y\n ? this._height / 2\n : type === AxisType.X && labelTextFitMode === FitMode.Wrap\n ? (axisPosition === Position.Top) ? -axisHeight - labelHeight / 2 : axisHeight\n : (-1) ** (+(axisPosition === Position.Top)) * axisHeight\n\n const marginX = type === AxisType.X ? 0 : (-1) ** (+(axisPosition === Position.Left)) * labelMargin\n const marginY = type === AxisType.X ? (-1) ** (+(axisPosition === Position.Top)) * labelMargin : 0\n\n // Apply transform and rotation after all calculations\n textElement.attr('transform', `translate(${offsetX + marginX},${offsetY + marginY}) rotate(${rotation})`)\n }\n\n private _getLabelDY (): number {\n const { type, position } = this.config\n switch (type) {\n case AxisType.X:\n switch (position) {\n case Position.Top: return 0\n case Position.Bottom: default: return 0.75\n }\n case AxisType.Y:\n switch (position) {\n case Position.Right: return 0.75\n case Position.Left: default: return -0.25\n }\n }\n }\n\n private _getTickTextOffset (axisPosition: Position, tickSize: number, fontSize: number): [number, number] {\n const { config } = this\n const angleRad = (config.tickTextAngle ?? 0) / 180 * Math.PI\n const baseOffset = tickSize + config.tickPadding\n\n if (config.type === AxisType.X) {\n const direction = axisPosition === Position.Bottom ? 1 : -1\n return [\n direction * baseOffset * Math.sin(angleRad),\n direction * (baseOffset + fontSize / 2) * Math.cos(angleRad),\n ]\n } else {\n const direction = axisPosition === Position.Right ? 1 : -1\n return [\n direction * baseOffset * Math.cos(angleRad),\n direction * baseOffset * Math.sin(angleRad),\n ]\n }\n }\n\n private _alignTickLabels (axisGroup = this.axisGroup): void {\n const { config: { type, tickTextAlign, tickTextAngle, position } } = this\n const activeTickTexts = axisGroup.selectAll<SVGTextElement, number | Date>(`g.tick > text:not(.${s.tickTextExiting})`)\n const ticksData = activeTickTexts.data() as number[] | Date[]\n\n activeTickTexts.each((_, i, elements) => {\n const tickTextElement = elements[i] as SVGTextElement\n const tickDatum = ticksData[i]\n // Compute the tick's target position from the scale rather than reading the DOM transform,\n // which would return an interpolated value during a transition.\n const tickPosition: [number, number] = type === AxisType.X\n ? [this.xScale(tickDatum as never), 0]\n : [0, this.yScale(tickDatum as never)]\n const textAlign = (isFunction(tickTextAlign) ? tickTextAlign(tickDatum, i, ticksData, tickPosition, this._width, this._height) : tickTextAlign) as TextAlign\n const textAnchor = textAlignToAnchor(textAlign)\n const translateX = type === AxisType.X ? 0 : this._getYTickTextTranslate(textAlign, position as Position)\n\n const translateValue = tickTextAngle ? `translate(${translateX},0) rotate(${tickTextAngle})` : `translate(${translateX},0)`\n select(tickTextElement)\n .attr('transform', translateValue)\n .attr('text-anchor', textAnchor)\n })\n }\n\n private _getYTickTextTranslate (textAlign: TextAlign, axisPosition: Position = Position.Left): number {\n /*\n Default in D3 is 9, tickPadding is the spacing in pixels between the tick and it's label. Default: `8`\n */\n const defaultTickTextSpacingPx = this.config.tickPadding + 1\n\n // this._axisRawBBox will be undefined when autoMargin is undefined\n const width = (this._axisRawBBox?.width ?? this.axisGroup.node()?.getBBox().width ?? 0) - defaultTickTextSpacingPx\n\n switch (textAlign) {\n case TextAlign.Left: return axisPosition === Position.Left ? width * -1 : 0\n case TextAlign.Right: return axisPosition === Position.Left ? 0 : width\n case TextAlign.Center: return axisPosition === Position.Left ? width * (-0.5) : width * 0.5\n default: return 0\n }\n }\n}\n"],"names":["s.grid","s.tick","s.tickLabel","s.tickLabelHideable","s.tickTextExiting","s.axis","s.hideTickLine","s.hideDomain","label","s.label","s"],"mappings":"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"}
|
|
@@ -1,43 +1,7 @@
|
|
|
1
1
|
export declare const root: string;
|
|
2
|
-
export declare const cssVarDefaults:
|
|
3
|
-
'--vis-axis-tick-color': string;
|
|
4
|
-
'--vis-axis-grid-color': string;
|
|
5
|
-
'--vis-axis-grid-line-width': string;
|
|
6
|
-
'--vis-axis-grid-line-dasharray': string;
|
|
7
|
-
'--vis-axis-label-font-size': string;
|
|
8
|
-
'--vis-axis-label-color': string;
|
|
9
|
-
'--vis-axis-label-weight': string;
|
|
10
|
-
'--vis-axis-tick-label-color': string;
|
|
11
|
-
'--vis-axis-tick-label-font-size': string;
|
|
12
|
-
'--vis-axis-tick-label-weight': string;
|
|
13
|
-
'--vis-axis-tick-label-cursor': string;
|
|
14
|
-
'--vis-axis-tick-label-text-decoration': string;
|
|
15
|
-
'--vis-axis-tick-line-width': string;
|
|
16
|
-
'--vis-axis-tick-label-hide-transition': string;
|
|
17
|
-
'--vis-dark-axis-tick-color': string;
|
|
18
|
-
'--vis-dark-axis-tick-label-color': string;
|
|
19
|
-
'--vis-dark-axis-grid-color': string;
|
|
20
|
-
'--vis-dark-axis-label-color': string;
|
|
21
|
-
};
|
|
2
|
+
export declare const cssVarDefaults: Record<string, string | undefined>;
|
|
22
3
|
export declare const variables: {
|
|
23
|
-
|
|
24
|
-
axisGridColor: "--vis-axis-grid-color";
|
|
25
|
-
axisGridLineWidth: "--vis-axis-grid-line-width";
|
|
26
|
-
axisGridLineDasharray: "--vis-axis-grid-line-dasharray";
|
|
27
|
-
axisLabelFontSize: "--vis-axis-label-font-size";
|
|
28
|
-
axisLabelColor: "--vis-axis-label-color";
|
|
29
|
-
axisLabelWeight: "--vis-axis-label-weight";
|
|
30
|
-
axisTickLabelColor: "--vis-axis-tick-label-color";
|
|
31
|
-
axisTickLabelFontSize: "--vis-axis-tick-label-font-size";
|
|
32
|
-
axisTickLabelWeight: "--vis-axis-tick-label-weight";
|
|
33
|
-
axisTickLabelCursor: "--vis-axis-tick-label-cursor";
|
|
34
|
-
axisTickLabelTextDecoration: "--vis-axis-tick-label-text-decoration";
|
|
35
|
-
axisTickLineWidth: "--vis-axis-tick-line-width";
|
|
36
|
-
axisTickLabelHideTransition: "--vis-axis-tick-label-hide-transition";
|
|
37
|
-
darkAxisTickColor: "--vis-dark-axis-tick-color";
|
|
38
|
-
darkAxisTickLabelColor: "--vis-dark-axis-tick-label-color";
|
|
39
|
-
darkAxisGridColor: "--vis-dark-axis-grid-color";
|
|
40
|
-
darkAxisLabelColor: "--vis-dark-axis-label-color";
|
|
4
|
+
[x: string]: string;
|
|
41
5
|
};
|
|
42
6
|
export declare const hideTickLine: string;
|
|
43
7
|
export declare const hideDomain: string;
|