@carbon/charts 0.30.21 → 0.30.25
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/CHANGELOG.md +337 -1035
- package/README.md +3 -0
- package/axis-chart.js +8 -14
- package/axis-chart.js.map +1 -1
- package/build/demo/{data/create-codesandbox.d.ts → create-codesandbox.d.ts} +16 -13
- package/build/demo/data/bar.d.ts +175 -1
- package/build/demo/data/bubble.d.ts +41 -0
- package/build/demo/data/donut.d.ts +23 -0
- package/build/demo/data/line.d.ts +70 -0
- package/build/demo/data/pie.d.ts +13 -0
- package/build/demo/data/scatter.d.ts +31 -0
- package/build/demo/data/step.d.ts +4 -0
- package/build/demo/data/time-series-axis.d.ts +55 -3
- package/build/src/components/axes/grid.d.ts +3 -3
- package/build/src/components/axes/two-dimensional-axes.d.ts +3 -0
- package/build/src/components/essentials/threshold.d.ts +17 -0
- package/build/src/components/graphs/bar.d.ts +1 -1
- package/build/src/components/graphs/scatter.d.ts +1 -0
- package/build/src/components/graphs/skeleton.d.ts +22 -0
- package/build/src/components/index.d.ts +2 -0
- package/build/src/interfaces/axis-scales.d.ts +22 -11
- package/build/src/interfaces/charts.d.ts +5 -0
- package/build/src/interfaces/components.d.ts +21 -0
- package/build/src/interfaces/enums.d.ts +9 -0
- package/build/src/interfaces/events.d.ts +7 -0
- package/build/src/model.d.ts +1 -0
- package/build/src/services/scales-cartesian.d.ts +9 -1
- package/build/stories/tutorials/event-listeners.d.ts +1 -0
- package/build/stories/tutorials/index.d.ts +2 -1
- package/bundle.js +1 -1
- package/chart.js +15 -24
- package/chart.js.map +1 -1
- package/charts/bar-grouped.js +6 -2
- package/charts/bar-grouped.js.map +1 -1
- package/charts/bar-simple.js +6 -2
- package/charts/bar-simple.js.map +1 -1
- package/charts/bar-stacked.js +6 -2
- package/charts/bar-stacked.js.map +1 -1
- package/charts/bubble.js +6 -2
- package/charts/bubble.js.map +1 -1
- package/charts/donut.js +6 -2
- package/charts/donut.js.map +1 -1
- package/charts/line.js +6 -2
- package/charts/line.js.map +1 -1
- package/charts/pie.js +6 -2
- package/charts/pie.js.map +1 -1
- package/charts/radar.js +1 -3
- package/charts/radar.js.map +1 -1
- package/charts/scatter.js +6 -2
- package/charts/scatter.js.map +1 -1
- package/components/axes/axis.js +93 -43
- package/components/axes/axis.js.map +1 -1
- package/components/axes/grid.d.ts +3 -3
- package/components/axes/grid.js +46 -23
- package/components/axes/grid.js.map +1 -1
- package/components/axes/ruler.js +7 -5
- package/components/axes/ruler.js.map +1 -1
- package/components/axes/two-dimensional-axes.d.ts +3 -0
- package/components/axes/two-dimensional-axes.js +35 -2
- package/components/axes/two-dimensional-axes.js.map +1 -1
- package/components/axes/zero-line.js +16 -1
- package/components/axes/zero-line.js.map +1 -1
- package/components/component.js +2 -4
- package/components/component.js.map +1 -1
- package/components/essentials/legend.js +46 -23
- package/components/essentials/legend.js.map +1 -1
- package/components/essentials/threshold.d.ts +17 -0
- package/components/essentials/threshold.js +171 -0
- package/components/essentials/threshold.js.map +1 -0
- package/components/essentials/title.js +6 -4
- package/components/essentials/title.js.map +1 -1
- package/components/essentials/tooltip-bar.js +39 -20
- package/components/essentials/tooltip-bar.js.map +1 -1
- package/components/essentials/tooltip-pie.js +4 -3
- package/components/essentials/tooltip-pie.js.map +1 -1
- package/components/essentials/tooltip-radar.js +6 -3
- package/components/essentials/tooltip-radar.js.map +1 -1
- package/components/essentials/tooltip-scatter.js +3 -1
- package/components/essentials/tooltip-scatter.js.map +1 -1
- package/components/essentials/tooltip.js +35 -15
- package/components/essentials/tooltip.js.map +1 -1
- package/components/graphs/bar-grouped.js +48 -20
- package/components/graphs/bar-grouped.js.map +1 -1
- package/components/graphs/bar-simple.js +39 -19
- package/components/graphs/bar-simple.js.map +1 -1
- package/components/graphs/bar-stacked.js +50 -28
- package/components/graphs/bar-stacked.js.map +1 -1
- package/components/graphs/bar.d.ts +1 -1
- package/components/graphs/bar.js +1 -1
- package/components/graphs/bar.js.map +1 -1
- package/components/graphs/bubble.js +22 -8
- package/components/graphs/bubble.js.map +1 -1
- package/components/graphs/donut.js +17 -3
- package/components/graphs/donut.js.map +1 -1
- package/components/graphs/line.js +14 -7
- package/components/graphs/line.js.map +1 -1
- package/components/graphs/pie.js +80 -44
- package/components/graphs/pie.js.map +1 -1
- package/components/graphs/radar.js +271 -140
- package/components/graphs/radar.js.map +1 -1
- package/components/graphs/scatter.d.ts +1 -0
- package/components/graphs/scatter.js +80 -19
- package/components/graphs/scatter.js.map +1 -1
- package/components/graphs/skeleton.d.ts +22 -0
- package/components/graphs/skeleton.js +256 -0
- package/components/graphs/skeleton.js.map +1 -0
- package/components/index.d.ts +2 -0
- package/components/index.js +2 -0
- package/components/index.js.map +1 -1
- package/components/layout/layout.js +38 -26
- package/components/layout/layout.js.map +1 -1
- package/components/layout/spacer.js +2 -1
- package/components/layout/spacer.js.map +1 -1
- package/configuration.js +17 -14
- package/configuration.js.map +1 -1
- package/demo/{data/create-codesandbox.d.ts → create-codesandbox.d.ts} +16 -13
- package/demo/{data/create-codesandbox.js → create-codesandbox.js} +24 -21
- package/demo/create-codesandbox.js.map +1 -0
- package/demo/data/bar.d.ts +175 -1
- package/demo/data/bar.js +189 -3
- package/demo/data/bar.js.map +1 -1
- package/demo/data/bubble.d.ts +41 -0
- package/demo/data/bubble.js +48 -3
- package/demo/data/bubble.js.map +1 -1
- package/demo/data/bundle.js +1 -1
- package/demo/data/donut.d.ts +23 -0
- package/demo/data/donut.js +25 -0
- package/demo/data/donut.js.map +1 -1
- package/demo/data/index.js +189 -7
- package/demo/data/index.js.map +1 -1
- package/demo/data/line.d.ts +70 -0
- package/demo/data/line.js +71 -0
- package/demo/data/line.js.map +1 -1
- package/demo/data/pie.d.ts +13 -0
- package/demo/data/pie.js +15 -0
- package/demo/data/pie.js.map +1 -1
- package/demo/data/radar.js.map +1 -1
- package/demo/data/scatter.d.ts +31 -0
- package/demo/data/scatter.js +33 -0
- package/demo/data/scatter.js.map +1 -1
- package/demo/data/step.d.ts +4 -0
- package/demo/data/step.js +15 -0
- package/demo/data/step.js.map +1 -1
- package/demo/data/time-series-axis.d.ts +55 -3
- package/demo/data/time-series-axis.js +62 -6
- package/demo/data/time-series-axis.js.map +1 -1
- package/demo/styles.css +342 -18
- package/demo/styles.css.map +1 -1
- package/demo/styles.min.css +1 -1
- package/demo/styles.min.css.map +1 -1
- package/demo/tsconfig.tsbuildinfo +232 -229
- package/index.js.map +1 -1
- package/interfaces/axis-scales.d.ts +22 -11
- package/interfaces/axis-scales.js.map +1 -1
- package/interfaces/charts.d.ts +5 -0
- package/interfaces/charts.js.map +1 -1
- package/interfaces/components.d.ts +21 -0
- package/interfaces/components.js.map +1 -1
- package/interfaces/enums.d.ts +9 -0
- package/interfaces/enums.js +10 -0
- package/interfaces/enums.js.map +1 -1
- package/interfaces/events.d.ts +7 -0
- package/interfaces/events.js +8 -0
- package/interfaces/events.js.map +1 -1
- package/model.d.ts +1 -0
- package/model.js +30 -16
- package/model.js.map +1 -1
- package/package.json +4 -2
- package/polyfills.js +7 -2
- package/polyfills.js.map +1 -1
- package/services/angle-utils.js +34 -9
- package/services/angle-utils.js.map +1 -1
- package/services/colors.js.map +1 -1
- package/services/curves.js +4 -2
- package/services/curves.js.map +1 -1
- package/services/essentials/dom-utils.js +4 -3
- package/services/essentials/dom-utils.js.map +1 -1
- package/services/essentials/transitions.js +3 -4
- package/services/essentials/transitions.js.map +1 -1
- package/services/scales-cartesian.d.ts +9 -1
- package/services/scales-cartesian.js +96 -23
- package/services/scales-cartesian.js.map +1 -1
- package/services/time-series.js +36 -19
- package/services/time-series.js.map +1 -1
- package/styles/components/_axis.scss +4 -0
- package/styles/components/_layout.scss +0 -1
- package/styles/components/_ruler.scss +5 -2
- package/styles/components/_skeleton.scss +56 -0
- package/styles/components/_threshold.scss +49 -0
- package/styles/components/_tooltip.scss +6 -5
- package/styles/components/index.scss +2 -0
- package/styles/graphs/_bubble.scss +1 -1
- package/styles/graphs/_radar.scss +4 -2
- package/styles/graphs/_scatter.scss +5 -1
- package/styles/mixins.scss +2 -2
- package/styles-g10.css +87 -4
- package/styles-g10.css.map +1 -1
- package/styles-g10.min.css +1 -1
- package/styles-g10.min.css.map +1 -1
- package/styles-g100.css +87 -4
- package/styles-g100.css.map +1 -1
- package/styles-g100.min.css +1 -1
- package/styles-g100.min.css.map +1 -1
- package/styles-g90.css +87 -4
- package/styles-g90.css.map +1 -1
- package/styles-g90.min.css +1 -1
- package/styles-g90.min.css.map +1 -1
- package/styles.css +87 -4
- package/styles.css.map +1 -1
- package/styles.min.css +1 -1
- package/styles.min.css.map +1 -1
- package/tools.js +25 -7
- package/tools.js.map +1 -1
- package/tsconfig.tsbuildinfo +169 -106
- package/demo/data/create-codesandbox.js.map +0 -1
package/components/axes/ruler.js
CHANGED
|
@@ -115,13 +115,15 @@ var Ruler = /** @class */ (function (_super) {
|
|
|
115
115
|
// line snaps to matching point
|
|
116
116
|
var sampleMatch = dataPointsMatchingRulerLine[0];
|
|
117
117
|
if (orientation === "horizontal") {
|
|
118
|
-
rulerLine
|
|
118
|
+
rulerLine
|
|
119
|
+
.attr("x1", yScaleStart)
|
|
119
120
|
.attr("x2", yScaleEnd)
|
|
120
121
|
.attr("y1", sampleMatch.domainValue)
|
|
121
122
|
.attr("y2", sampleMatch.domainValue);
|
|
122
123
|
}
|
|
123
124
|
else {
|
|
124
|
-
rulerLine
|
|
125
|
+
rulerLine
|
|
126
|
+
.attr("y1", yScaleStart)
|
|
125
127
|
.attr("y2", yScaleEnd)
|
|
126
128
|
.attr("x1", sampleMatch.domainValue)
|
|
127
129
|
.attr("x2", sampleMatch.domainValue);
|
|
@@ -162,14 +164,14 @@ var Ruler = /** @class */ (function (_super) {
|
|
|
162
164
|
// Get height from the grid
|
|
163
165
|
this.backdrop = DOMUtils.appendOrSelect(svg, "svg.chart-grid-backdrop");
|
|
164
166
|
var backdropRect = DOMUtils.appendOrSelect(this.backdrop, "rect.chart-grid-backdrop");
|
|
165
|
-
this.backdrop
|
|
167
|
+
this.backdrop
|
|
168
|
+
.merge(backdropRect)
|
|
166
169
|
.attr("x", xScaleStart)
|
|
167
170
|
.attr("y", yScaleStart)
|
|
168
171
|
.attr("width", xScaleEnd - xScaleStart)
|
|
169
172
|
.attr("height", yScaleEnd - yScaleStart)
|
|
170
173
|
.lower();
|
|
171
|
-
backdropRect.attr("width", "100%")
|
|
172
|
-
.attr("height", "100%");
|
|
174
|
+
backdropRect.attr("width", "100%").attr("height", "100%");
|
|
173
175
|
};
|
|
174
176
|
return Ruler;
|
|
175
177
|
}(Component));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ruler.js","sourceRoot":"","sources":["ruler.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from \"../component\";\nimport { DOMUtils } from \"../../services\";\nimport { TooltipTypes, CartesianOrientations } from \"../../interfaces\";\nimport { Tools } from \"../../tools\";\n\n// D3 Imports\nimport { mouse, Selection } from \"d3-selection\";\n\ntype GenericSvgSelection = Selection<SVGElement, any, SVGElement, any>;\n\nconst THRESHOLD = 5;\n\n/** check if x is inside threshold area extents */\nfunction pointIsWithinThreshold(dx: number, x: number) {\n\treturn dx > x - THRESHOLD && dx < x + THRESHOLD;\n}\n\nexport class Ruler extends Component {\n\ttype = \"ruler\";\n\tbackdrop: GenericSvgSelection;\n\telementsToHighlight: GenericSvgSelection;\n\n\trender() {\n\t\tthis.drawBackdrop();\n\t\tthis.addBackdropEventListeners();\n\t}\n\n\tshowRuler([x, y]: [number, number]) {\n\t\tconst svg = this.parent;\n\t\tconst orientation: CartesianOrientations = this.services.cartesianScales.getOrientation();\n\t\tconst mouseCoordinate = orientation === CartesianOrientations.HORIZONTAL ? y : x;\n\t\tconst ruler = DOMUtils.appendOrSelect(svg, \"g.ruler\");\n\t\tconst rulerLine = DOMUtils.appendOrSelect(ruler, \"line.ruler-line\");\n\t\tconst dataPointElements: GenericSvgSelection = svg.selectAll(\n\t\t\t\"[role=graphics-symbol]\"\n\t\t);\n\t\tconst displayData = this.model.getDisplayData();\n\t\tconst rangeScale = this.services.cartesianScales.getRangeScale();\n\t\tconst [yScaleEnd, yScaleStart] = rangeScale.range();\n\t\tconst scaledData: {domainValue: number, originalData: any}[] = displayData.map(d => ({\n\t\t\tdomainValue: this.services.cartesianScales.getDomainValue(d),\n\t\t\toriginalData: d\n\t\t}));\n\n\t\t/**\n\t\t * Find matches, reduce is used instead of filter\n\t\t * to only get elements which belong to the same axis coordinate\n\t\t */\n\t\tconst dataPointsMatchingRulerLine: {domainValue: number, originalData: any}[] =\n\t\t\tscaledData\n\t\t\t.filter(d => pointIsWithinThreshold(d.domainValue, mouseCoordinate))\n\t\t\t.reduce((accum, currentValue) => {\n\t\t\t\tif (accum.length === 0) {\n\t\t\t\t\taccum.push(currentValue);\n\t\t\t\t\treturn accum;\n\t\t\t\t}\n\n\t\t\t\t// store the first element of the accumulator array to compare it with current element being processed\n\t\t\t\tconst sampleAccumValue = accum[0].domainValue;\n\n\t\t\t\tconst distanceToCurrentValue = Math.abs(mouseCoordinate - currentValue.domainValue);\n\t\t\t\tconst distanceToAccumValue = Math.abs(mouseCoordinate - sampleAccumValue);\n\n\t\t\t\tif (distanceToCurrentValue > distanceToAccumValue) {\n\t\t\t\t\t// if distance with current value is bigger than already existing value in the accumulator, skip current iteration\n\t\t\t\t\treturn accum;\n\t\t\t\t} else if (distanceToCurrentValue < distanceToAccumValue) {\n\t\t\t\t\t// currentValue data point is closer to mouse inside the threshold area, so reinstantiate array\n\t\t\t\t\taccum = [currentValue];\n\t\t\t\t} else {\n\t\t\t\t\t// currentValue is equal to already stored values, which means there's another match on the same coordinate\n\t\t\t\t\taccum.push(currentValue);\n\t\t\t\t}\n\n\t\t\t\treturn accum;\n\t\t\t}, []);\n\n\t\t// some data point match\n\t\tif (dataPointsMatchingRulerLine.length > 0) {\n\t\t\tconst rangeIdentifier = this.services.cartesianScales.getRangeIdentifier();\n\t\t\tconst tooltipData = dataPointsMatchingRulerLine\n\t\t\t\t.map(d => d.originalData)\n\t\t\t\t.filter(d => {\n\t\t\t\t\tconst value = d[rangeIdentifier];\n\t\t\t\t\treturn value !== null && value !== undefined;\n\t\t\t\t});\n\n\t\t\t// get elements on which we should trigger mouse events\n\t\t\tconst domainValuesMatchingRulerLine = dataPointsMatchingRulerLine.map(d => d.domainValue);\n\t\t\tconst elementsToHighlight = dataPointElements.filter(d => {\n\t\t\t\tconst domainValue = this.services.cartesianScales.getDomainValue(d);\n\t\t\t\treturn domainValuesMatchingRulerLine.includes(domainValue);\n\t\t\t});\n\n\t\t\t/** if we pass from a trigger area to another one\n\t\t\t * mouseout on previous elements won't get dispatched\n\t\t\t * so we need to do it manually\n\t\t\t */\n\t\t\tif (\n\t\t\t\tthis.elementsToHighlight &&\n\t\t\t\tthis.elementsToHighlight.size() > 0 &&\n\t\t\t\t!Tools.isEqual(this.elementsToHighlight, elementsToHighlight)\n\t\t\t) {\n\t\t\t\tthis.hideRuler();\n\t\t\t}\n\n\t\t\telementsToHighlight.dispatch(\"mouseover\");\n\n\t\t\t// set current hovered elements\n\t\t\tthis.elementsToHighlight = elementsToHighlight;\n\n\t\t\tthis.services.events.dispatchEvent(\"show-tooltip\", {\n\t\t\t\thoveredElement: rulerLine,\n\t\t\t\tmultidata: tooltipData,\n\t\t\t\ttype: TooltipTypes.GRIDLINE\n\t\t\t});\n\n\t\t\truler.attr(\"opacity\", 1);\n\n\t\t\t// line snaps to matching point\n\t\t\tconst sampleMatch = dataPointsMatchingRulerLine[0];\n\t\t\tif (orientation === \"horizontal\") {\n\t\t\t\trulerLine.attr(\"x1\", yScaleStart)\n\t\t\t\t\t.attr(\"x2\", yScaleEnd)\n\t\t\t\t\t.attr(\"y1\", sampleMatch.domainValue)\n\t\t\t\t\t.attr(\"y2\", sampleMatch.domainValue);\n\t\t\t} else {\n\t\t\t\trulerLine.attr(\"y1\", yScaleStart)\n\t\t\t\t\t.attr(\"y2\", yScaleEnd)\n\t\t\t\t\t.attr(\"x1\", sampleMatch.domainValue)\n\t\t\t\t\t.attr(\"x2\", sampleMatch.domainValue);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.hideRuler();\n\t\t}\n\t}\n\n\thideRuler() {\n\t\tconst svg = this.parent;\n\t\tconst ruler = DOMUtils.appendOrSelect(svg, \"g.ruler\");\n\t\tconst dataPointElements = svg.selectAll(\"[role=graphics-symbol]\");\n\n\t\tdataPointElements.dispatch(\"mouseout\");\n\t\tthis.services.events.dispatchEvent(\"hide-tooltip\");\n\t\truler.attr(\"opacity\", 0);\n\t}\n\n\t/**\n\t * Adds the listener on the X grid to trigger multiple point tooltips along the x axis.\n\t */\n\taddBackdropEventListeners() {\n\t\tconst self = this;\n\n\t\tthis.backdrop\n\t\t\t.on(\"mousemove mouseover\", function() {\n\t\t\t\tconst pos = mouse(self.parent.node());\n\n\t\t\t\tself.showRuler(pos);\n\t\t\t})\n\t\t\t.on(\"mouseout\", function() {\n\t\t\t\tself.hideRuler();\n\t\t\t});\n\t}\n\n\tdrawBackdrop() {\n\t\tconst svg = this.parent;\n\n\t\tconst mainXScale = this.services.cartesianScales.getMainXScale();\n\t\tconst mainYScale = this.services.cartesianScales.getMainYScale();\n\n\t\tconst [xScaleStart, xScaleEnd] = mainXScale.range();\n\t\tconst [yScaleEnd, yScaleStart] = mainYScale.range();\n\n\t\t// Get height from the grid\n\t\tthis.backdrop = DOMUtils.appendOrSelect(svg, \"svg.chart-grid-backdrop\");\n\t\tconst backdropRect = DOMUtils.appendOrSelect(this.backdrop, \"rect.chart-grid-backdrop\");\n\n\t\tthis.backdrop.merge(backdropRect)\n\t\t\t.attr(\"x\", xScaleStart)\n\t\t\t.attr(\"y\", yScaleStart)\n\t\t\t.attr(\"width\", xScaleEnd - xScaleStart)\n\t\t\t.attr(\"height\", yScaleEnd - yScaleStart)\n\t\t\t.lower();\n\n\t\tbackdropRect.attr(\"width\", \"100%\")\n\t\t\t.attr(\"height\", \"100%\");\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ruler.js","sourceRoot":"","sources":["ruler.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from \"../component\";\nimport { DOMUtils } from \"../../services\";\nimport { TooltipTypes, CartesianOrientations } from \"../../interfaces\";\nimport { Tools } from \"../../tools\";\n\n// D3 Imports\nimport { mouse, Selection } from \"d3-selection\";\n\ntype GenericSvgSelection = Selection<SVGElement, any, SVGElement, any>;\n\nconst THRESHOLD = 5;\n\n/** check if x is inside threshold area extents */\nfunction pointIsWithinThreshold(dx: number, x: number) {\n\treturn dx > x - THRESHOLD && dx < x + THRESHOLD;\n}\n\nexport class Ruler extends Component {\n\ttype = \"ruler\";\n\tbackdrop: GenericSvgSelection;\n\telementsToHighlight: GenericSvgSelection;\n\n\trender() {\n\t\tthis.drawBackdrop();\n\t\tthis.addBackdropEventListeners();\n\t}\n\n\tshowRuler([x, y]: [number, number]) {\n\t\tconst svg = this.parent;\n\t\tconst orientation: CartesianOrientations = this.services.cartesianScales.getOrientation();\n\t\tconst mouseCoordinate =\n\t\t\torientation === CartesianOrientations.HORIZONTAL ? y : x;\n\t\tconst ruler = DOMUtils.appendOrSelect(svg, \"g.ruler\");\n\t\tconst rulerLine = DOMUtils.appendOrSelect(ruler, \"line.ruler-line\");\n\t\tconst dataPointElements: GenericSvgSelection = svg.selectAll(\n\t\t\t\"[role=graphics-symbol]\"\n\t\t);\n\t\tconst displayData = this.model.getDisplayData();\n\t\tconst rangeScale = this.services.cartesianScales.getRangeScale();\n\t\tconst [yScaleEnd, yScaleStart] = rangeScale.range();\n\t\tconst scaledData: {\n\t\t\tdomainValue: number;\n\t\t\toriginalData: any;\n\t\t}[] = displayData.map(d => ({\n\t\t\tdomainValue: this.services.cartesianScales.getDomainValue(d),\n\t\t\toriginalData: d\n\t\t}));\n\n\t\t/**\n\t\t * Find matches, reduce is used instead of filter\n\t\t * to only get elements which belong to the same axis coordinate\n\t\t */\n\t\tconst dataPointsMatchingRulerLine: {\n\t\t\tdomainValue: number;\n\t\t\toriginalData: any;\n\t\t}[] = scaledData\n\t\t\t.filter(d => pointIsWithinThreshold(d.domainValue, mouseCoordinate))\n\t\t\t.reduce((accum, currentValue) => {\n\t\t\t\tif (accum.length === 0) {\n\t\t\t\t\taccum.push(currentValue);\n\t\t\t\t\treturn accum;\n\t\t\t\t}\n\n\t\t\t\t// store the first element of the accumulator array to compare it with current element being processed\n\t\t\t\tconst sampleAccumValue = accum[0].domainValue;\n\n\t\t\t\tconst distanceToCurrentValue = Math.abs(\n\t\t\t\t\tmouseCoordinate - currentValue.domainValue\n\t\t\t\t);\n\t\t\t\tconst distanceToAccumValue = Math.abs(\n\t\t\t\t\tmouseCoordinate - sampleAccumValue\n\t\t\t\t);\n\n\t\t\t\tif (distanceToCurrentValue > distanceToAccumValue) {\n\t\t\t\t\t// if distance with current value is bigger than already existing value in the accumulator, skip current iteration\n\t\t\t\t\treturn accum;\n\t\t\t\t} else if (distanceToCurrentValue < distanceToAccumValue) {\n\t\t\t\t\t// currentValue data point is closer to mouse inside the threshold area, so reinstantiate array\n\t\t\t\t\taccum = [currentValue];\n\t\t\t\t} else {\n\t\t\t\t\t// currentValue is equal to already stored values, which means there's another match on the same coordinate\n\t\t\t\t\taccum.push(currentValue);\n\t\t\t\t}\n\n\t\t\t\treturn accum;\n\t\t\t}, []);\n\n\t\t// some data point match\n\t\tif (dataPointsMatchingRulerLine.length > 0) {\n\t\t\tconst rangeIdentifier = this.services.cartesianScales.getRangeIdentifier();\n\t\t\tconst tooltipData = dataPointsMatchingRulerLine\n\t\t\t\t.map(d => d.originalData)\n\t\t\t\t.filter(d => {\n\t\t\t\t\tconst value = d[rangeIdentifier];\n\t\t\t\t\treturn value !== null && value !== undefined;\n\t\t\t\t});\n\n\t\t\t// get elements on which we should trigger mouse events\n\t\t\tconst domainValuesMatchingRulerLine = dataPointsMatchingRulerLine.map(\n\t\t\t\td => d.domainValue\n\t\t\t);\n\t\t\tconst elementsToHighlight = dataPointElements.filter(d => {\n\t\t\t\tconst domainValue = this.services.cartesianScales.getDomainValue(\n\t\t\t\t\td\n\t\t\t\t);\n\t\t\t\treturn domainValuesMatchingRulerLine.includes(domainValue);\n\t\t\t});\n\n\t\t\t/** if we pass from a trigger area to another one\n\t\t\t * mouseout on previous elements won't get dispatched\n\t\t\t * so we need to do it manually\n\t\t\t */\n\t\t\tif (\n\t\t\t\tthis.elementsToHighlight &&\n\t\t\t\tthis.elementsToHighlight.size() > 0 &&\n\t\t\t\t!Tools.isEqual(this.elementsToHighlight, elementsToHighlight)\n\t\t\t) {\n\t\t\t\tthis.hideRuler();\n\t\t\t}\n\n\t\t\telementsToHighlight.dispatch(\"mouseover\");\n\n\t\t\t// set current hovered elements\n\t\t\tthis.elementsToHighlight = elementsToHighlight;\n\n\t\t\tthis.services.events.dispatchEvent(\"show-tooltip\", {\n\t\t\t\thoveredElement: rulerLine,\n\t\t\t\tmultidata: tooltipData,\n\t\t\t\ttype: TooltipTypes.GRIDLINE\n\t\t\t});\n\n\t\t\truler.attr(\"opacity\", 1);\n\n\t\t\t// line snaps to matching point\n\t\t\tconst sampleMatch = dataPointsMatchingRulerLine[0];\n\t\t\tif (orientation === \"horizontal\") {\n\t\t\t\trulerLine\n\t\t\t\t\t.attr(\"x1\", yScaleStart)\n\t\t\t\t\t.attr(\"x2\", yScaleEnd)\n\t\t\t\t\t.attr(\"y1\", sampleMatch.domainValue)\n\t\t\t\t\t.attr(\"y2\", sampleMatch.domainValue);\n\t\t\t} else {\n\t\t\t\trulerLine\n\t\t\t\t\t.attr(\"y1\", yScaleStart)\n\t\t\t\t\t.attr(\"y2\", yScaleEnd)\n\t\t\t\t\t.attr(\"x1\", sampleMatch.domainValue)\n\t\t\t\t\t.attr(\"x2\", sampleMatch.domainValue);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.hideRuler();\n\t\t}\n\t}\n\n\thideRuler() {\n\t\tconst svg = this.parent;\n\t\tconst ruler = DOMUtils.appendOrSelect(svg, \"g.ruler\");\n\t\tconst dataPointElements = svg.selectAll(\"[role=graphics-symbol]\");\n\n\t\tdataPointElements.dispatch(\"mouseout\");\n\t\tthis.services.events.dispatchEvent(\"hide-tooltip\");\n\t\truler.attr(\"opacity\", 0);\n\t}\n\n\t/**\n\t * Adds the listener on the X grid to trigger multiple point tooltips along the x axis.\n\t */\n\taddBackdropEventListeners() {\n\t\tconst self = this;\n\n\t\tthis.backdrop\n\t\t\t.on(\"mousemove mouseover\", function() {\n\t\t\t\tconst pos = mouse(self.parent.node());\n\n\t\t\t\tself.showRuler(pos);\n\t\t\t})\n\t\t\t.on(\"mouseout\", function() {\n\t\t\t\tself.hideRuler();\n\t\t\t});\n\t}\n\n\tdrawBackdrop() {\n\t\tconst svg = this.parent;\n\n\t\tconst mainXScale = this.services.cartesianScales.getMainXScale();\n\t\tconst mainYScale = this.services.cartesianScales.getMainYScale();\n\n\t\tconst [xScaleStart, xScaleEnd] = mainXScale.range();\n\t\tconst [yScaleEnd, yScaleStart] = mainYScale.range();\n\n\t\t// Get height from the grid\n\t\tthis.backdrop = DOMUtils.appendOrSelect(svg, \"svg.chart-grid-backdrop\");\n\t\tconst backdropRect = DOMUtils.appendOrSelect(\n\t\t\tthis.backdrop,\n\t\t\t\"rect.chart-grid-backdrop\"\n\t\t);\n\n\t\tthis.backdrop\n\t\t\t.merge(backdropRect)\n\t\t\t.attr(\"x\", xScaleStart)\n\t\t\t.attr(\"y\", yScaleStart)\n\t\t\t.attr(\"width\", xScaleEnd - xScaleStart)\n\t\t\t.attr(\"height\", yScaleEnd - yScaleStart)\n\t\t\t.lower();\n\n\t\tbackdropRect.attr(\"width\", \"100%\").attr(\"height\", \"100%\");\n\t}\n}\n"]}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { Component } from "../component";
|
|
2
|
+
import { Threshold } from "../essentials/threshold";
|
|
2
3
|
export declare class TwoDimensionalAxes extends Component {
|
|
3
4
|
type: string;
|
|
4
5
|
children: any;
|
|
6
|
+
thresholds: Threshold[];
|
|
5
7
|
margins: {
|
|
6
8
|
top: number;
|
|
7
9
|
right: number;
|
|
@@ -9,4 +11,5 @@ export declare class TwoDimensionalAxes extends Component {
|
|
|
9
11
|
left: number;
|
|
10
12
|
};
|
|
11
13
|
render(animate?: boolean): void;
|
|
14
|
+
addAxisThresholds(animate: any, axisPosition: any): void;
|
|
12
15
|
}
|
|
@@ -11,18 +11,31 @@ var __extends = (this && this.__extends) || (function () {
|
|
|
11
11
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
12
12
|
};
|
|
13
13
|
})();
|
|
14
|
+
var __assign = (this && this.__assign) || function () {
|
|
15
|
+
__assign = Object.assign || function(t) {
|
|
16
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
17
|
+
s = arguments[i];
|
|
18
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
19
|
+
t[p] = s[p];
|
|
20
|
+
}
|
|
21
|
+
return t;
|
|
22
|
+
};
|
|
23
|
+
return __assign.apply(this, arguments);
|
|
24
|
+
};
|
|
14
25
|
// Internal Imports
|
|
15
26
|
import { Component } from "../component";
|
|
16
27
|
import { AxisPositions } from "../../interfaces";
|
|
17
28
|
import { Axis } from "./axis";
|
|
18
29
|
import { Tools } from "../../tools";
|
|
19
30
|
import { DOMUtils } from "../../services";
|
|
31
|
+
import { Threshold } from "../essentials/threshold";
|
|
20
32
|
var TwoDimensionalAxes = /** @class */ (function (_super) {
|
|
21
33
|
__extends(TwoDimensionalAxes, _super);
|
|
22
34
|
function TwoDimensionalAxes() {
|
|
23
35
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
24
36
|
_this.type = "2D-axes";
|
|
25
37
|
_this.children = {};
|
|
38
|
+
_this.thresholds = [];
|
|
26
39
|
_this.margins = {
|
|
27
40
|
top: 0,
|
|
28
41
|
right: 0,
|
|
@@ -47,7 +60,8 @@ var TwoDimensionalAxes = /** @class */ (function (_super) {
|
|
|
47
60
|
// Check the configs to know which axes need to be rendered
|
|
48
61
|
axisPositions.forEach(function (axisPositionKey) {
|
|
49
62
|
var axisPosition = AxisPositions[axisPositionKey];
|
|
50
|
-
if (_this.configs.axes[axisPosition] &&
|
|
63
|
+
if (_this.configs.axes[axisPosition] &&
|
|
64
|
+
!_this.children[axisPosition]) {
|
|
51
65
|
var axisComponent = new Axis(_this.model, _this.services, {
|
|
52
66
|
position: axisPosition,
|
|
53
67
|
axes: _this.configs.axes,
|
|
@@ -80,7 +94,9 @@ var TwoDimensionalAxes = /** @class */ (function (_super) {
|
|
|
80
94
|
offset = 0;
|
|
81
95
|
}
|
|
82
96
|
else {
|
|
83
|
-
offset = DOMUtils.getSVGElementSize(child.getTitleRef(), {
|
|
97
|
+
offset = DOMUtils.getSVGElementSize(child.getTitleRef(), {
|
|
98
|
+
useBBox: true
|
|
99
|
+
}).height;
|
|
84
100
|
}
|
|
85
101
|
switch (axisPosition) {
|
|
86
102
|
case AxisPositions.TOP:
|
|
@@ -96,6 +112,8 @@ var TwoDimensionalAxes = /** @class */ (function (_super) {
|
|
|
96
112
|
margins.right = width + offset;
|
|
97
113
|
break;
|
|
98
114
|
}
|
|
115
|
+
// Add thresholds
|
|
116
|
+
_this.addAxisThresholds(animate, axisPosition);
|
|
99
117
|
});
|
|
100
118
|
// If the new margins are different than the existing ones
|
|
101
119
|
var isNotEqual = Object.keys(margins).some(function (marginKey) {
|
|
@@ -110,6 +128,21 @@ var TwoDimensionalAxes = /** @class */ (function (_super) {
|
|
|
110
128
|
this.render(true);
|
|
111
129
|
}
|
|
112
130
|
};
|
|
131
|
+
TwoDimensionalAxes.prototype.addAxisThresholds = function (animate, axisPosition) {
|
|
132
|
+
var _this = this;
|
|
133
|
+
var axesOptions = Tools.getProperty(this.model.getOptions(), "axes", axisPosition);
|
|
134
|
+
var thresholds = axesOptions.thresholds;
|
|
135
|
+
if (thresholds) {
|
|
136
|
+
thresholds.forEach(function (thresholdConfig, i) {
|
|
137
|
+
var thresholdComponent = new Threshold(_this.model, _this.services, __assign(__assign({}, thresholdConfig), { axisPosition: axisPosition, index: i }));
|
|
138
|
+
_this.thresholds.push(thresholdComponent);
|
|
139
|
+
});
|
|
140
|
+
this.thresholds.forEach(function (threshold) {
|
|
141
|
+
threshold.setParent(_this.parent);
|
|
142
|
+
threshold.render(animate);
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
};
|
|
113
146
|
return TwoDimensionalAxes;
|
|
114
147
|
}(Component));
|
|
115
148
|
export { TwoDimensionalAxes };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"two-dimensional-axes.js","sourceRoot":"","sources":["two-dimensional-axes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"two-dimensional-axes.js","sourceRoot":"","sources":["two-dimensional-axes.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from \"../component\";\nimport { AxisPositions, ScaleTypes, AxesOptions } from \"../../interfaces\";\nimport { Axis } from \"./axis\";\nimport { Tools } from \"../../tools\";\nimport { DOMUtils } from \"../../services\";\nimport { Threshold } from \"../essentials/threshold\";\n\nexport class TwoDimensionalAxes extends Component {\n\ttype = \"2D-axes\";\n\n\tchildren: any = {};\n\n\tthresholds: Threshold[] = [];\n\n\tmargins = {\n\t\ttop: 0,\n\t\tright: 0,\n\t\tbottom: 0,\n\t\tleft: 0\n\t};\n\n\trender(animate = false) {\n\t\tconst axes = {};\n\t\tconst axisPositions = Object.keys(AxisPositions);\n\t\tconst axesOptions = Tools.getProperty(this.model.getOptions(), \"axes\");\n\n\t\taxisPositions.forEach(axisPosition => {\n\t\t\tconst axisOptions = axesOptions[AxisPositions[axisPosition]];\n\t\t\tif (axisOptions) {\n\t\t\t\taxes[AxisPositions[axisPosition]] = true;\n\t\t\t}\n\t\t});\n\n\t\tthis.configs.axes = axes;\n\n\t\t// Check the configs to know which axes need to be rendered\n\t\taxisPositions.forEach(axisPositionKey => {\n\t\t\tconst axisPosition = AxisPositions[axisPositionKey];\n\t\t\tif (\n\t\t\t\tthis.configs.axes[axisPosition] &&\n\t\t\t\t!this.children[axisPosition]\n\t\t\t) {\n\t\t\t\tconst axisComponent = new Axis(this.model, this.services, {\n\t\t\t\t\tposition: axisPosition,\n\t\t\t\t\taxes: this.configs.axes,\n\t\t\t\t\tmargins: this.margins\n\t\t\t\t});\n\n\t\t\t\t// Set model, services & parent for the new axis component\n\t\t\t\taxisComponent.setModel(this.model);\n\t\t\t\taxisComponent.setServices(this.services);\n\t\t\t\taxisComponent.setParent(this.parent);\n\n\t\t\t\tthis.children[axisPosition] = axisComponent;\n\t\t\t}\n\t\t});\n\n\t\tObject.keys(this.children).forEach(childKey => {\n\t\t\tconst child = this.children[childKey];\n\t\t\tchild.render(animate);\n\t\t});\n\n\t\tconst margins = {} as any;\n\n\t\tObject.keys(this.children).forEach(childKey => {\n\t\t\tconst child = this.children[childKey];\n\t\t\tconst axisPosition = child.configs.position;\n\n\t\t\t// Grab the invisibly rendered axis' width & height, and set margins\n\t\t\t// Based off of that\n\t\t\t// We draw the invisible axis because of the async nature of d3 transitions\n\t\t\t// To be able to tell the final width & height of the axis when initiaing the transition\n\t\t\t// The invisible axis is updated instantly and without a transition\n\t\t\tconst invisibleAxisRef = child.getInvisibleAxisRef();\n\t\t\tconst {\n\t\t\t\twidth,\n\t\t\t\theight\n\t\t\t} = DOMUtils.getSVGElementSize(invisibleAxisRef, { useBBox: true });\n\n\t\t\tlet offset;\n\t\t\tif (child.getTitleRef().empty()) {\n\t\t\t\toffset = 0;\n\t\t\t} else {\n\t\t\t\toffset = DOMUtils.getSVGElementSize(child.getTitleRef(), {\n\t\t\t\t\tuseBBox: true\n\t\t\t\t}).height;\n\t\t\t}\n\n\t\t\tswitch (axisPosition) {\n\t\t\t\tcase AxisPositions.TOP:\n\t\t\t\t\tmargins.top = height + offset;\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.BOTTOM:\n\t\t\t\t\tmargins.bottom = height + offset;\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.LEFT:\n\t\t\t\t\tmargins.left = width + offset;\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.RIGHT:\n\t\t\t\t\tmargins.right = width + offset;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Add thresholds\n\t\t\tthis.addAxisThresholds(animate, axisPosition);\n\t\t});\n\n\t\t// If the new margins are different than the existing ones\n\t\tconst isNotEqual = Object.keys(margins).some(marginKey => {\n\t\t\treturn this.margins[marginKey] !== margins[marginKey];\n\t\t});\n\n\t\tif (isNotEqual) {\n\t\t\tthis.margins = Object.assign(this.margins, margins);\n\n\t\t\tObject.keys(this.children).forEach(childKey => {\n\t\t\t\tconst child = this.children[childKey];\n\t\t\t\tchild.margins = this.margins;\n\t\t\t});\n\n\t\t\tthis.render(true);\n\t\t}\n\t}\n\n\taddAxisThresholds(animate, axisPosition) {\n\t\tconst axesOptions = Tools.getProperty(\n\t\t\tthis.model.getOptions(),\n\t\t\t\"axes\",\n\t\t\taxisPosition\n\t\t);\n\t\tconst { thresholds } = axesOptions;\n\n\t\tif (thresholds) {\n\t\t\tthresholds.forEach((thresholdConfig, i) => {\n\t\t\t\tconst thresholdComponent = new Threshold(\n\t\t\t\t\tthis.model,\n\t\t\t\t\tthis.services,\n\t\t\t\t\t{ ...thresholdConfig, axisPosition, index: i }\n\t\t\t\t);\n\t\t\t\tthis.thresholds.push(thresholdComponent);\n\t\t\t});\n\n\t\t\tthis.thresholds.forEach(threshold => {\n\t\t\t\tthreshold.setParent(this.parent);\n\t\t\t\tthreshold.render(animate);\n\t\t\t});\n\t\t}\n\t}\n}\n"]}
|
|
@@ -23,11 +23,26 @@ var ZeroLine = /** @class */ (function (_super) {
|
|
|
23
23
|
return _this;
|
|
24
24
|
}
|
|
25
25
|
ZeroLine.prototype.render = function (animate) {
|
|
26
|
+
var _a = this.services.cartesianScales.getRangeScale().domain(), minDomainValue = _a[0], maxDomainValue = _a[1];
|
|
27
|
+
var drawZeroLine = (minDomainValue > 0 && maxDomainValue < 0) ||
|
|
28
|
+
(minDomainValue < 0 && maxDomainValue > 0);
|
|
29
|
+
// show zero line only if is necessary
|
|
30
|
+
if (!drawZeroLine) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
26
33
|
// Grab container SVG
|
|
27
34
|
var svg = this.getContainerSVG();
|
|
28
35
|
// Get x & y position of the line
|
|
29
|
-
var
|
|
36
|
+
var _b = this.services.cartesianScales.getDomainScale().range(), x0 = _b[0], x1 = _b[1];
|
|
30
37
|
var yPosition = +this.services.cartesianScales.getRangeValue(0) + 0.5;
|
|
38
|
+
// if scale domain contains NaN, return the first value of the range
|
|
39
|
+
// this is necessary for the zero line y position that otherwise is NaN
|
|
40
|
+
// so on the top of the chart while we want it on the bottom
|
|
41
|
+
if (!yPosition) {
|
|
42
|
+
var axisPosition = this.services.cartesianScales.getRangeAxisPosition();
|
|
43
|
+
var scale = this.services.cartesianScales.getScaleByPosition(axisPosition);
|
|
44
|
+
yPosition = scale.range()[0];
|
|
45
|
+
}
|
|
31
46
|
var lineCoordinates = Tools.flipSVGCoordinatesBasedOnOrientation({
|
|
32
47
|
x0: x0,
|
|
33
48
|
x1: x1,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zero-line.js","sourceRoot":"","sources":["zero-line.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,mBAAmB;AACnB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC;IAA8B,4BAAS;IAAvC;QAAA,
|
|
1
|
+
{"version":3,"file":"zero-line.js","sourceRoot":"","sources":["zero-line.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,mBAAmB;AACnB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC;IAA8B,4BAAS;IAAvC;QAAA,qEAsDC;QArDA,UAAI,GAAG,WAAW,CAAC;;IAqDpB,CAAC;IAnDA,yBAAM,GAAN,UAAO,OAAgB;QAChB,IAAA,2DAGoD,EAFzD,sBAAc,EACd,sBACyD,CAAC;QAC3D,IAAM,YAAY,GACjB,CAAC,cAAc,GAAG,CAAC,IAAI,cAAc,GAAG,CAAC,CAAC;YAC1C,CAAC,cAAc,GAAG,CAAC,IAAI,cAAc,GAAG,CAAC,CAAC,CAAC;QAE5C,sCAAsC;QACtC,IAAI,CAAC,YAAY,EAAE;YAClB,OAAO;SACP;QAED,qBAAqB;QACrB,IAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAEnC,iCAAiC;QAC3B,IAAA,2DAAiE,EAAhE,UAAE,EAAE,UAA4D,CAAC;QACxE,IAAI,SAAS,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QAEtE,oEAAoE;QACpE,uEAAuE;QACvE,4DAA4D;QAC5D,IAAI,CAAC,SAAS,EAAE;YACf,IAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,oBAAoB,EAAE,CAAC;YAC1E,IAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,kBAAkB,CAC7D,YAAY,CACZ,CAAC;YACF,SAAS,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;SAC7B;QAED,IAAM,eAAe,GAAG,KAAK,CAAC,oCAAoC,CACjE;YACC,EAAE,IAAA;YACF,EAAE,IAAA;YACF,EAAE,EAAE,SAAS;YACb,EAAE,EAAE,SAAS;SACb,EACD,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,cAAc,EAAE,CAC9C,CAAC;QAEF,IAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;QACzD,IAAI,CAAC,UAAU,CACd,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,kBAAkB,EAAE,OAAO,CAAC,CACpE;aACC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,CAAC;aAC9B,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,CAAC;aAC9B,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,CAAC;aAC9B,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC;IACF,eAAC;AAAD,CAAC,AAtDD,CAA8B,SAAS,GAsDtC","sourcesContent":["// Internal Imports\nimport { Component } from \"../component\";\nimport { DOMUtils } from \"../../services\";\nimport { Tools } from \"../../tools\";\n\nexport class ZeroLine extends Component {\n\ttype = \"zero-line\";\n\n\trender(animate: boolean) {\n\t\tconst [\n\t\t\tminDomainValue,\n\t\t\tmaxDomainValue\n\t\t] = this.services.cartesianScales.getRangeScale().domain();\n\t\tconst drawZeroLine =\n\t\t\t(minDomainValue > 0 && maxDomainValue < 0) ||\n\t\t\t(minDomainValue < 0 && maxDomainValue > 0);\n\n\t\t// show zero line only if is necessary\n\t\tif (!drawZeroLine) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Grab container SVG\n\t\tconst svg = this.getContainerSVG();\n\n\t\t// Get x & y position of the line\n\t\tconst [x0, x1] = this.services.cartesianScales.getDomainScale().range();\n\t\tlet yPosition = +this.services.cartesianScales.getRangeValue(0) + 0.5;\n\n\t\t// if scale domain contains NaN, return the first value of the range\n\t\t// this is necessary for the zero line y position that otherwise is NaN\n\t\t// so on the top of the chart while we want it on the bottom\n\t\tif (!yPosition) {\n\t\t\tconst axisPosition = this.services.cartesianScales.getRangeAxisPosition();\n\t\t\tconst scale = this.services.cartesianScales.getScaleByPosition(\n\t\t\t\taxisPosition\n\t\t\t);\n\t\t\tyPosition = scale.range()[0];\n\t\t}\n\n\t\tconst lineCoordinates = Tools.flipSVGCoordinatesBasedOnOrientation(\n\t\t\t{\n\t\t\t\tx0,\n\t\t\t\tx1,\n\t\t\t\ty0: yPosition,\n\t\t\t\ty1: yPosition\n\t\t\t},\n\t\t\tthis.services.cartesianScales.getOrientation()\n\t\t);\n\n\t\tconst line = DOMUtils.appendOrSelect(svg, \"line.domain\");\n\t\tline.transition(\n\t\t\tthis.services.transitions.getTransition(\"zero-line-update\", animate)\n\t\t)\n\t\t\t.attr(\"y1\", lineCoordinates.y0)\n\t\t\t.attr(\"y2\", lineCoordinates.y1)\n\t\t\t.attr(\"x1\", lineCoordinates.x0)\n\t\t\t.attr(\"x2\", lineCoordinates.x1);\n\t}\n}\n"]}
|
package/components/component.js
CHANGED
|
@@ -17,14 +17,12 @@ var Component = /** @class */ (function () {
|
|
|
17
17
|
this.setParent(select(this.services.domUtils.getMainSVG()));
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
|
-
Component.prototype.init = function () {
|
|
21
|
-
};
|
|
20
|
+
Component.prototype.init = function () { };
|
|
22
21
|
Component.prototype.render = function (animate) {
|
|
23
22
|
if (animate === void 0) { animate = true; }
|
|
24
23
|
console.error("render() method is not implemented");
|
|
25
24
|
};
|
|
26
|
-
Component.prototype.destroy = function () {
|
|
27
|
-
};
|
|
25
|
+
Component.prototype.destroy = function () { };
|
|
28
26
|
// Used to pass down information to the components
|
|
29
27
|
Component.prototype.setModel = function (newObj) {
|
|
30
28
|
this.model = newObj;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component.js","sourceRoot":"","sources":["component.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,aAAa;AACb,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,yCAAyC;AACzC,OAAO,QAAQ,MAAM,0CAA0C,CAAC;
|
|
1
|
+
{"version":3,"file":"component.js","sourceRoot":"","sources":["component.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,aAAa;AACb,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,yCAAyC;AACzC,OAAO,QAAQ,MAAM,0CAA0C,CAAC;AAEhE;IAUC,mBAAY,KAAiB,EAAE,QAAa,EAAE,OAAa;QALjD,YAAO,GAAQ,EAAE,CAAC;QAM3B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAEzB,IAAI,OAAO,EAAE;YACZ,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;SACvB;QAED,oEAAoE;QACpE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACjB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;SAC5D;IACF,CAAC;IAED,wBAAI,GAAJ,cAAQ,CAAC;IAET,0BAAM,GAAN,UAAO,OAAc;QAAd,wBAAA,EAAA,cAAc;QACpB,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACrD,CAAC;IAED,2BAAO,GAAP,cAAW,CAAC;IAEZ,kDAAkD;IAClD,4BAAQ,GAAR,UAAS,MAAM;QACd,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;IACrB,CAAC;IAED,kDAAkD;IAClD,+BAAW,GAAX,UAAY,MAAM;QACjB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC;IACxB,CAAC;IAED,6BAAS,GAAT,UAAU,MAAM;QACf,IAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,IAAI,SAAS,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE;YACpD,OAAO;SACP;QAED,IAAI,IAAI,CAAC,IAAI,EAAE;YACd,IAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CACpC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EACvB,OAAO,EACP,QAAQ,CACR,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,OAAO,CACf,QAAQ,CAAC,MAAM,UAAK,WAAW,UAAK,IAAI,CAAC,IAAM,EAClD,IAAI,CACJ,CAAC;YAEF,IAAI,SAAS,EAAE;gBACd,SAAS,CAAC,OAAO,CACb,QAAQ,CAAC,MAAM,UAAK,WAAW,UAAK,IAAI,CAAC,IAAM,EAClD,KAAK,CACL,CAAC;aACF;SACD;IACF,CAAC;IAED,6BAAS,GAAT;QACC,OAAO,IAAI,CAAC,MAAM,CAAC;IACpB,CAAC;IAED,mCAAe,GAAf;QACC,IAAI,IAAI,CAAC,IAAI,EAAE;YACd,IAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CACpC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EACvB,OAAO,EACP,QAAQ,CACR,CAAC;YACF,OAAO,QAAQ,CAAC,cAAc,CAC7B,IAAI,CAAC,MAAM,EACX,OAAK,QAAQ,CAAC,MAAM,UAAK,WAAW,UAAK,IAAI,CAAC,IAAM,CACpD,CAAC;SACF;QAED,OAAO,IAAI,CAAC,MAAM,CAAC;IACpB,CAAC;IACF,gBAAC;AAAD,CAAC,AAzFD,IAyFC","sourcesContent":["// Internal Imports\nimport { ChartModel } from \"../model\";\nimport { DOMUtils } from \"../services\";\nimport { Tools } from \"../tools\";\n\n// D3 Imports\nimport { select } from \"d3-selection\";\n\n// import the settings for the css prefix\nimport settings from \"carbon-components/es/globals/js/settings\";\n\nexport class Component {\n\tpublic type: string;\n\n\tprotected parent: any;\n\n\tprotected configs: any = {};\n\n\tprotected model: ChartModel;\n\tprotected services: any;\n\n\tconstructor(model: ChartModel, services: any, configs?: any) {\n\t\tthis.model = model;\n\t\tthis.services = services;\n\n\t\tif (configs) {\n\t\t\tthis.configs = configs;\n\t\t}\n\n\t\t// Set parent element to shell SVG if no parent exists for component\n\t\tif (!this.parent) {\n\t\t\tthis.setParent(select(this.services.domUtils.getMainSVG()));\n\t\t}\n\t}\n\n\tinit() {}\n\n\trender(animate = true) {\n\t\tconsole.error(\"render() method is not implemented\");\n\t}\n\n\tdestroy() {}\n\n\t// Used to pass down information to the components\n\tsetModel(newObj) {\n\t\tthis.model = newObj;\n\t}\n\n\t// Used to pass down information to the components\n\tsetServices(newObj) {\n\t\tthis.services = newObj;\n\t}\n\n\tsetParent(parent) {\n\t\tconst oldParent = this.parent;\n\t\tthis.parent = parent;\n\n\t\tif (oldParent && oldParent.node() === parent.node()) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.type) {\n\t\t\tconst chartprefix = Tools.getProperty(\n\t\t\t\tthis.model.getOptions(),\n\t\t\t\t\"style\",\n\t\t\t\t\"prefix\"\n\t\t\t);\n\t\t\tthis.parent.classed(\n\t\t\t\t`${settings.prefix}--${chartprefix}--${this.type}`,\n\t\t\t\ttrue\n\t\t\t);\n\n\t\t\tif (oldParent) {\n\t\t\t\toldParent.classed(\n\t\t\t\t\t`${settings.prefix}--${chartprefix}--${this.type}`,\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tgetParent() {\n\t\treturn this.parent;\n\t}\n\n\tgetContainerSVG() {\n\t\tif (this.type) {\n\t\t\tconst chartprefix = Tools.getProperty(\n\t\t\t\tthis.model.getOptions(),\n\t\t\t\t\"style\",\n\t\t\t\t\"prefix\"\n\t\t\t);\n\t\t\treturn DOMUtils.appendOrSelect(\n\t\t\t\tthis.parent,\n\t\t\t\t`g.${settings.prefix}--${chartprefix}--${this.type}`\n\t\t\t);\n\t\t}\n\n\t\treturn this.parent;\n\t}\n}\n"]}
|
|
@@ -28,15 +28,18 @@ var Legend = /** @class */ (function (_super) {
|
|
|
28
28
|
var _this = this;
|
|
29
29
|
var svg = this.getContainerSVG().attr("role", Roles.GRAPHICS_DOCUMENT);
|
|
30
30
|
var options = this.model.getOptions();
|
|
31
|
-
var legendItems = svg
|
|
31
|
+
var legendItems = svg
|
|
32
|
+
.selectAll("g.legend-item")
|
|
32
33
|
.data(this.model.getDataGroups(), function (dataGroup) { return dataGroup.name; });
|
|
33
34
|
// this.getLegendItemArray()
|
|
34
|
-
var addedLegendItems = legendItems
|
|
35
|
+
var addedLegendItems = legendItems
|
|
36
|
+
.enter()
|
|
35
37
|
.append("g")
|
|
36
38
|
.classed("legend-item", true);
|
|
37
39
|
// Configs
|
|
38
40
|
var checkboxRadius = options.legend.checkbox.radius;
|
|
39
|
-
addedLegendItems
|
|
41
|
+
addedLegendItems
|
|
42
|
+
.append("rect")
|
|
40
43
|
.classed("checkbox", true)
|
|
41
44
|
.merge(legendItems.select("rect.checkbox"))
|
|
42
45
|
.attr("width", checkboxRadius * 2)
|
|
@@ -44,17 +47,22 @@ var Legend = /** @class */ (function (_super) {
|
|
|
44
47
|
.attr("rx", 1)
|
|
45
48
|
.attr("ry", 1)
|
|
46
49
|
.style("fill", function (d) {
|
|
47
|
-
return d.status === options.legend.items.status.ACTIVE
|
|
48
|
-
|
|
50
|
+
return d.status === options.legend.items.status.ACTIVE
|
|
51
|
+
? _this.model.getStrokeColor(d.name)
|
|
52
|
+
: null;
|
|
53
|
+
})
|
|
54
|
+
.classed("active", function (d, i) {
|
|
49
55
|
return d.status === options.legend.items.status.ACTIVE;
|
|
50
56
|
});
|
|
51
|
-
addedLegendItems
|
|
57
|
+
addedLegendItems
|
|
58
|
+
.append("text")
|
|
52
59
|
.merge(legendItems.select("text"))
|
|
53
60
|
.html(function (d) { return d.name; })
|
|
54
61
|
.attr("alignment-baseline", "middle");
|
|
55
62
|
this.breakItemsIntoLines(addedLegendItems);
|
|
56
63
|
// Remove old elements as needed.
|
|
57
|
-
legendItems
|
|
64
|
+
legendItems
|
|
65
|
+
.exit()
|
|
58
66
|
.on("mouseover", null)
|
|
59
67
|
.on("click", null)
|
|
60
68
|
.on("mouseout", null)
|
|
@@ -74,7 +82,7 @@ var Legend = /** @class */ (function (_super) {
|
|
|
74
82
|
var legendItemsHorizontalSpacing = options.legend.items.horizontalSpace;
|
|
75
83
|
var legendItemsVerticalSpacing = options.legend.items.verticalSpace;
|
|
76
84
|
var legendTextYOffset = options.legend.items.textYOffset;
|
|
77
|
-
var spaceNeededForCheckbox =
|
|
85
|
+
var spaceNeededForCheckbox = checkboxRadius * 2 + options.legend.checkbox.spaceAfter;
|
|
78
86
|
// Check if there are disabled legend items
|
|
79
87
|
var DISABLED = options.legend.items.status.DISABLED;
|
|
80
88
|
var dataGroups = this.model.getDataGroups();
|
|
@@ -85,12 +93,16 @@ var Legend = /** @class */ (function (_super) {
|
|
|
85
93
|
var lineNumber = 0;
|
|
86
94
|
var itemIndexInLine = 0;
|
|
87
95
|
var lastYPosition;
|
|
88
|
-
addedLegendItems
|
|
96
|
+
addedLegendItems
|
|
97
|
+
.merge(svg.selectAll("g.legend-item"))
|
|
89
98
|
.each(function (d, i) {
|
|
90
99
|
var legendItem = select(this);
|
|
91
100
|
var previousLegendItem = select(svg.selectAll("g.legend-item").nodes()[i - 1]);
|
|
92
|
-
if (itemIndexInLine === 0 ||
|
|
93
|
-
|
|
101
|
+
if (itemIndexInLine === 0 ||
|
|
102
|
+
previousLegendItem.empty() ||
|
|
103
|
+
legendOrientation === LegendOrientations.VERTICAL) {
|
|
104
|
+
if (legendOrientation === LegendOrientations.VERTICAL &&
|
|
105
|
+
i !== 0) {
|
|
94
106
|
lineNumber++;
|
|
95
107
|
}
|
|
96
108
|
}
|
|
@@ -98,8 +110,15 @@ var Legend = /** @class */ (function (_super) {
|
|
|
98
110
|
var svgDimensions = DOMUtils.getSVGElementSize(self.parent, { useAttr: true });
|
|
99
111
|
var legendItemTextDimensions = DOMUtils.getSVGElementSize(select(this).select("text"), { useBBox: true });
|
|
100
112
|
var lastLegendItemTextDimensions = DOMUtils.getSVGElementSize(previousLegendItem.select("text"), { useBBox: true });
|
|
101
|
-
startingPoint =
|
|
102
|
-
|
|
113
|
+
startingPoint =
|
|
114
|
+
startingPoint +
|
|
115
|
+
lastLegendItemTextDimensions.width +
|
|
116
|
+
spaceNeededForCheckbox +
|
|
117
|
+
legendItemsHorizontalSpacing;
|
|
118
|
+
if (startingPoint +
|
|
119
|
+
spaceNeededForCheckbox +
|
|
120
|
+
legendItemTextDimensions.width >
|
|
121
|
+
svgDimensions.width) {
|
|
103
122
|
lineNumber++;
|
|
104
123
|
startingPoint = 0;
|
|
105
124
|
itemIndexInLine = 0;
|
|
@@ -108,28 +127,31 @@ var Legend = /** @class */ (function (_super) {
|
|
|
108
127
|
var yOffset = 0;
|
|
109
128
|
// Position checkbox
|
|
110
129
|
// TODO - Replace with layout component margins
|
|
111
|
-
legendItem
|
|
130
|
+
legendItem
|
|
131
|
+
.select("rect.checkbox")
|
|
112
132
|
.attr("x", startingPoint)
|
|
113
133
|
.attr("y", yOffset + lineNumber * legendItemsVerticalSpacing);
|
|
114
134
|
// Position text
|
|
115
135
|
// TODO - Replace with layout component margins
|
|
116
|
-
var yPosition = legendTextYOffset +
|
|
117
|
-
legendItem
|
|
136
|
+
var yPosition = legendTextYOffset + lineNumber * legendItemsVerticalSpacing;
|
|
137
|
+
legendItem
|
|
138
|
+
.select("text")
|
|
118
139
|
.attr("x", startingPoint + spaceNeededForCheckbox)
|
|
119
140
|
.attr("y", yOffset + yPosition);
|
|
120
141
|
lastYPosition = yPosition;
|
|
121
142
|
// Render checkbox check icon
|
|
122
|
-
if (hasDeactivatedItems &&
|
|
123
|
-
legendItem.
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
143
|
+
if (hasDeactivatedItems &&
|
|
144
|
+
legendItem.select("g.check").empty()) {
|
|
145
|
+
legendItem.append("g").classed("check", true).html("\n\t\t\t\t\t\t\t<svg focusable=\"false\" preserveAspectRatio=\"xMidYMid meet\"\n\t\t\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\"\n\t\t\t\t\t\t\t\tviewBox=\"0 0 32 32\" aria-hidden=\"true\"\n\t\t\t\t\t\t\t\tstyle=\"will-change: transform;\">\n\t\t\t\t\t\t\t\t<path d=\"M13 21.2l-7.1-7.1-1.4 1.4 7.1 7.1L13 24 27.1 9.9l-1.4-1.5z\"></path>\n\t\t\t\t\t\t\t\t<title>Checkmark</title>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t");
|
|
146
|
+
legendItem
|
|
147
|
+
.select("g.check svg")
|
|
127
148
|
.attr("width", checkboxRadius * 2 - 1)
|
|
128
149
|
.attr("height", checkboxRadius * 2 - 1)
|
|
129
150
|
.attr("x", parseFloat(legendItem.select("rect.checkbox").attr("x")) + 0.5)
|
|
130
151
|
.attr("y", parseFloat(legendItem.select("rect.checkbox").attr("y")) + 0.5);
|
|
131
152
|
}
|
|
132
|
-
else if (!hasDeactivatedItems &&
|
|
153
|
+
else if (!hasDeactivatedItems &&
|
|
154
|
+
!legendItem.select("g.check").empty()) {
|
|
133
155
|
legendItem.select("g.check").remove();
|
|
134
156
|
}
|
|
135
157
|
itemIndexInLine++;
|
|
@@ -147,7 +169,8 @@ var Legend = /** @class */ (function (_super) {
|
|
|
147
169
|
// Configs
|
|
148
170
|
var checkboxRadius = options.legend.checkbox.radius;
|
|
149
171
|
var hoveredItem = select(this);
|
|
150
|
-
hoveredItem
|
|
172
|
+
hoveredItem
|
|
173
|
+
.append("rect")
|
|
151
174
|
.classed("hover-stroke", true)
|
|
152
175
|
.attr("x", parseFloat(hoveredItem.select("rect.checkbox").attr("x")) - 2)
|
|
153
176
|
.attr("y", parseFloat(hoveredItem.select("rect.checkbox").attr("y")) - 2)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"legend.js","sourceRoot":"","sources":["legend.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport * as Configuration from \"../../configuration\";\nimport { Component } from \"../component\";\nimport { Tools } from \"../../tools\";\nimport {\n\tLegendOrientations,\n\tRoles,\n\tEvents\n} from \"../../interfaces\";\nimport { DOMUtils } from \"../../services\";\n\n// D3 Imports\nimport { select } from \"d3-selection\";\n\nexport class Legend extends Component {\n\ttype = \"legend\";\n\n\trender() {\n\t\tconst svg = this.getContainerSVG().attr(\"role\", Roles.GRAPHICS_DOCUMENT);\n\t\tconst options = this.model.getOptions();\n\t\tconst legendItems = svg.selectAll(\"g.legend-item\")\n\t\t\t.data(this.model.getDataGroups(), dataGroup => dataGroup.name);\n\n\t\t\t// this.getLegendItemArray()\n\n\t\tconst addedLegendItems = legendItems.enter()\n\t\t\t.append(\"g\")\n\t\t\t.classed(\"legend-item\", true);\n\n\t\t// Configs\n\t\tconst checkboxRadius = options.legend.checkbox.radius;\n\n\t\taddedLegendItems.append(\"rect\")\n\t\t\t.classed(\"checkbox\", true)\n\t\t\t.merge(legendItems.select(\"rect.checkbox\"))\n\t\t\t.attr(\"width\", checkboxRadius * 2)\n\t\t\t.attr(\"height\", checkboxRadius * 2)\n\t\t\t.attr(\"rx\", 1)\n\t\t\t.attr(\"ry\", 1)\n\t\t\t.style(\"fill\", d => {\n\t\t\t\treturn d.status === options.legend.items.status.ACTIVE ? this.model.getStrokeColor(d.name) : null;\n\t\t\t}).classed(\"active\", function (d, i) {\n\t\t\t\treturn d.status === options.legend.items.status.ACTIVE;\n\t\t\t});\n\n\t\taddedLegendItems.append(\"text\")\n\t\t\t.merge(legendItems.select(\"text\"))\n\t\t\t.html(d => d.name)\n\t\t\t.attr(\"alignment-baseline\", \"middle\");\n\n\t\tthis.breakItemsIntoLines(addedLegendItems);\n\n\t\t// Remove old elements as needed.\n\t\tlegendItems.exit()\n\t\t\t.on(\"mouseover\", null)\n\t\t\t.on(\"click\", null)\n\t\t\t.on(\"mouseout\", null)\n\t\t\t.remove();\n\n\t\tconst legendClickable = Tools.getProperty(this.model.getOptions(), \"legend\", \"clickable\");\n\t\tsvg.classed(\"clickable\", legendClickable);\n\n\t\tif (legendClickable && addedLegendItems.size() > 0) {\n\t\t\tthis.addEventListeners();\n\t\t}\n\t}\n\n\tbreakItemsIntoLines(addedLegendItems) {\n\t\tconst self = this;\n\t\tconst svg = this.getContainerSVG();\n\t\tconst options = this.model.getOptions();\n\n\t\t// Configs\n\t\tconst checkboxRadius = options.legend.checkbox.radius;\n\t\tconst legendItemsHorizontalSpacing = options.legend.items.horizontalSpace;\n\t\tconst legendItemsVerticalSpacing = options.legend.items.verticalSpace;\n\t\tconst legendTextYOffset = options.legend.items.textYOffset;\n\t\tconst spaceNeededForCheckbox = (checkboxRadius * 2) + options.legend.checkbox.spaceAfter;\n\n\t\t// Check if there are disabled legend items\n\t\tconst { DISABLED } = options.legend.items.status;\n\t\tconst dataGroups = this.model.getDataGroups();\n\t\tconst hasDeactivatedItems = dataGroups.some(dataGroup => dataGroup.status === DISABLED);\n\n\t\tconst legendOrientation = Tools.getProperty(options, \"legend\", \"orientation\");\n\n\t\t// Keep track of line numbers and positions\n\t\tlet startingPoint = 0;\n\t\tlet lineNumber = 0;\n\t\tlet itemIndexInLine = 0;\n\t\tlet lastYPosition;\n\t\taddedLegendItems.merge(svg.selectAll(\"g.legend-item\"))\n\t\t\t.each(function (d, i) {\n\t\t\t\tconst legendItem = select(this);\n\t\t\t\tconst previousLegendItem = select(svg.selectAll(\"g.legend-item\").nodes()[i - 1]);\n\n\t\t\t\tif (itemIndexInLine === 0 || previousLegendItem.empty() || legendOrientation === LegendOrientations.VERTICAL) {\n\t\t\t\t\tif (legendOrientation === LegendOrientations.VERTICAL && i !== 0) {\n\t\t\t\t\t\tlineNumber++;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst svgDimensions = DOMUtils.getSVGElementSize(self.parent, { useAttr: true });\n\t\t\t\t\tconst legendItemTextDimensions = DOMUtils.getSVGElementSize(select(this).select(\"text\"), { useBBox: true });\n\t\t\t\t\tconst lastLegendItemTextDimensions = DOMUtils.getSVGElementSize(previousLegendItem.select(\"text\"), { useBBox: true });\n\t\t\t\t\tstartingPoint = startingPoint + lastLegendItemTextDimensions.width + spaceNeededForCheckbox + legendItemsHorizontalSpacing;\n\n\t\t\t\t\tif (startingPoint + spaceNeededForCheckbox + legendItemTextDimensions.width > svgDimensions.width) {\n\t\t\t\t\t\tlineNumber++;\n\t\t\t\t\t\tstartingPoint = 0;\n\t\t\t\t\t\titemIndexInLine = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst yOffset = 0;\n\n\t\t\t\t// Position checkbox\n\t\t\t\t// TODO - Replace with layout component margins\n\t\t\t\tlegendItem.select(\"rect.checkbox\")\n\t\t\t\t\t.attr(\"x\", startingPoint)\n\t\t\t\t\t.attr(\"y\", yOffset + lineNumber * legendItemsVerticalSpacing);\n\n\t\t\t\t// Position text\n\t\t\t\t// TODO - Replace with layout component margins\n\t\t\t\tconst yPosition = legendTextYOffset + (lineNumber * legendItemsVerticalSpacing);\n\t\t\t\tlegendItem.select(\"text\")\n\t\t\t\t\t.attr(\"x\", startingPoint + spaceNeededForCheckbox)\n\t\t\t\t\t.attr(\"y\", yOffset + yPosition);\n\n\t\t\t\tlastYPosition = yPosition;\n\n\t\t\t\t// Render checkbox check icon\n\t\t\t\tif (hasDeactivatedItems && legendItem.select(\"g.check\").empty()) {\n\t\t\t\t\tlegendItem.append(\"g\")\n\t\t\t\t\t\t.classed(\"check\", true)\n\t\t\t\t\t\t.html(`\n\t\t\t\t\t\t\t<svg focusable=\"false\" preserveAspectRatio=\"xMidYMid meet\"\n\t\t\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\"\n\t\t\t\t\t\t\t\tviewBox=\"0 0 32 32\" aria-hidden=\"true\"\n\t\t\t\t\t\t\t\tstyle=\"will-change: transform;\">\n\t\t\t\t\t\t\t\t<path d=\"M13 21.2l-7.1-7.1-1.4 1.4 7.1 7.1L13 24 27.1 9.9l-1.4-1.5z\"></path>\n\t\t\t\t\t\t\t\t<title>Checkmark</title>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t`);\n\n\t\t\t\t\tlegendItem.select(\"g.check svg\")\n\t\t\t\t\t\t.attr(\"width\", checkboxRadius * 2 - 1)\n\t\t\t\t\t\t.attr(\"height\", checkboxRadius * 2 - 1)\n\t\t\t\t\t\t.attr(\"x\", parseFloat(legendItem.select(\"rect.checkbox\").attr(\"x\")) + 0.5)\n\t\t\t\t\t\t.attr(\"y\", parseFloat(legendItem.select(\"rect.checkbox\").attr(\"y\")) + 0.5);\n\n\t\t\t\t} else if (!hasDeactivatedItems && !legendItem.select(\"g.check\").empty()) {\n\t\t\t\t\tlegendItem.select(\"g.check\").remove();\n\t\t\t\t}\n\n\t\t\t\titemIndexInLine++;\n\t\t\t});\n\t}\n\n\taddEventListeners() {\n\t\tconst self = this;\n\t\tconst svg = this.getContainerSVG();\n\t\tconst options = this.model.getOptions();\n\n\t\tsvg.selectAll(\"g.legend-item\")\n\t\t\t.on(\"mouseover\", function () {\n\t\t\t\tself.services.events.dispatchEvent(Events.Legend.ITEM_HOVER, {\n\t\t\t\t\thoveredElement: select(this)\n\t\t\t\t});\n\n\t\t\t\t// Configs\n\t\t\t\tconst checkboxRadius = options.legend.checkbox.radius;\n\n\t\t\t\tconst hoveredItem = select(this);\n\t\t\t\thoveredItem.append(\"rect\")\n\t\t\t\t\t.classed(\"hover-stroke\", true)\n\t\t\t\t\t.attr(\"x\", parseFloat(hoveredItem.select(\"rect.checkbox\").attr(\"x\")) - 2)\n\t\t\t\t\t.attr(\"y\", parseFloat(hoveredItem.select(\"rect.checkbox\").attr(\"y\")) - 2)\n\t\t\t\t\t.attr(\"width\", checkboxRadius * 2 + 4)\n\t\t\t\t\t.attr(\"height\", checkboxRadius * 2 + 4)\n\t\t\t\t\t.attr(\"rx\", 3)\n\t\t\t\t\t.attr(\"ry\", 3)\n\t\t\t\t\t.lower();\n\t\t\t})\n\t\t\t.on(\"click\", function () {\n\t\t\t\tself.services.events.dispatchEvent(Events.Legend.ITEM_CLICK, {\n\t\t\t\t\tclickedElement: select(this)\n\t\t\t\t});\n\n\t\t\t\tconst clickedItem = select(this);\n\t\t\t\tconst clickedItemData = clickedItem.datum() as any;\n\n\t\t\t\tself.model.toggleDataLabel(clickedItemData.name);\n\t\t\t})\n\t\t\t.on(\"mouseout\", function () {\n\t\t\t\tconst hoveredItem = select(this);\n\t\t\t\thoveredItem.select(\"rect.hover-stroke\").remove();\n\n\t\t\t\tself.services.events.dispatchEvent(Events.Legend.ITEM_MOUSEOUT, {\n\t\t\t\t\thoveredElement: hoveredItem\n\t\t\t\t});\n\t\t\t});\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"legend.js","sourceRoot":"","sources":["legend.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport * as Configuration from \"../../configuration\";\nimport { Component } from \"../component\";\nimport { Tools } from \"../../tools\";\nimport { LegendOrientations, Roles, Events } from \"../../interfaces\";\nimport { DOMUtils } from \"../../services\";\n\n// D3 Imports\nimport { select } from \"d3-selection\";\n\nexport class Legend extends Component {\n\ttype = \"legend\";\n\n\trender() {\n\t\tconst svg = this.getContainerSVG().attr(\n\t\t\t\"role\",\n\t\t\tRoles.GRAPHICS_DOCUMENT\n\t\t);\n\t\tconst options = this.model.getOptions();\n\t\tconst legendItems = svg\n\t\t\t.selectAll(\"g.legend-item\")\n\t\t\t.data(this.model.getDataGroups(), dataGroup => dataGroup.name);\n\n\t\t// this.getLegendItemArray()\n\n\t\tconst addedLegendItems = legendItems\n\t\t\t.enter()\n\t\t\t.append(\"g\")\n\t\t\t.classed(\"legend-item\", true);\n\n\t\t// Configs\n\t\tconst checkboxRadius = options.legend.checkbox.radius;\n\n\t\taddedLegendItems\n\t\t\t.append(\"rect\")\n\t\t\t.classed(\"checkbox\", true)\n\t\t\t.merge(legendItems.select(\"rect.checkbox\"))\n\t\t\t.attr(\"width\", checkboxRadius * 2)\n\t\t\t.attr(\"height\", checkboxRadius * 2)\n\t\t\t.attr(\"rx\", 1)\n\t\t\t.attr(\"ry\", 1)\n\t\t\t.style(\"fill\", d => {\n\t\t\t\treturn d.status === options.legend.items.status.ACTIVE\n\t\t\t\t\t? this.model.getStrokeColor(d.name)\n\t\t\t\t\t: null;\n\t\t\t})\n\t\t\t.classed(\"active\", function(d, i) {\n\t\t\t\treturn d.status === options.legend.items.status.ACTIVE;\n\t\t\t});\n\n\t\taddedLegendItems\n\t\t\t.append(\"text\")\n\t\t\t.merge(legendItems.select(\"text\"))\n\t\t\t.html(d => d.name)\n\t\t\t.attr(\"alignment-baseline\", \"middle\");\n\n\t\tthis.breakItemsIntoLines(addedLegendItems);\n\n\t\t// Remove old elements as needed.\n\t\tlegendItems\n\t\t\t.exit()\n\t\t\t.on(\"mouseover\", null)\n\t\t\t.on(\"click\", null)\n\t\t\t.on(\"mouseout\", null)\n\t\t\t.remove();\n\n\t\tconst legendClickable = Tools.getProperty(\n\t\t\tthis.model.getOptions(),\n\t\t\t\"legend\",\n\t\t\t\"clickable\"\n\t\t);\n\t\tsvg.classed(\"clickable\", legendClickable);\n\n\t\tif (legendClickable && addedLegendItems.size() > 0) {\n\t\t\tthis.addEventListeners();\n\t\t}\n\t}\n\n\tbreakItemsIntoLines(addedLegendItems) {\n\t\tconst self = this;\n\t\tconst svg = this.getContainerSVG();\n\t\tconst options = this.model.getOptions();\n\n\t\t// Configs\n\t\tconst checkboxRadius = options.legend.checkbox.radius;\n\t\tconst legendItemsHorizontalSpacing =\n\t\t\toptions.legend.items.horizontalSpace;\n\t\tconst legendItemsVerticalSpacing = options.legend.items.verticalSpace;\n\t\tconst legendTextYOffset = options.legend.items.textYOffset;\n\t\tconst spaceNeededForCheckbox =\n\t\t\tcheckboxRadius * 2 + options.legend.checkbox.spaceAfter;\n\n\t\t// Check if there are disabled legend items\n\t\tconst { DISABLED } = options.legend.items.status;\n\t\tconst dataGroups = this.model.getDataGroups();\n\t\tconst hasDeactivatedItems = dataGroups.some(\n\t\t\tdataGroup => dataGroup.status === DISABLED\n\t\t);\n\n\t\tconst legendOrientation = Tools.getProperty(\n\t\t\toptions,\n\t\t\t\"legend\",\n\t\t\t\"orientation\"\n\t\t);\n\n\t\t// Keep track of line numbers and positions\n\t\tlet startingPoint = 0;\n\t\tlet lineNumber = 0;\n\t\tlet itemIndexInLine = 0;\n\t\tlet lastYPosition;\n\t\taddedLegendItems\n\t\t\t.merge(svg.selectAll(\"g.legend-item\"))\n\t\t\t.each(function(d, i) {\n\t\t\t\tconst legendItem = select(this);\n\t\t\t\tconst previousLegendItem = select(\n\t\t\t\t\tsvg.selectAll(\"g.legend-item\").nodes()[i - 1]\n\t\t\t\t);\n\n\t\t\t\tif (\n\t\t\t\t\titemIndexInLine === 0 ||\n\t\t\t\t\tpreviousLegendItem.empty() ||\n\t\t\t\t\tlegendOrientation === LegendOrientations.VERTICAL\n\t\t\t\t) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tlegendOrientation === LegendOrientations.VERTICAL &&\n\t\t\t\t\t\ti !== 0\n\t\t\t\t\t) {\n\t\t\t\t\t\tlineNumber++;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst svgDimensions = DOMUtils.getSVGElementSize(\n\t\t\t\t\t\tself.parent,\n\t\t\t\t\t\t{ useAttr: true }\n\t\t\t\t\t);\n\t\t\t\t\tconst legendItemTextDimensions = DOMUtils.getSVGElementSize(\n\t\t\t\t\t\tselect(this).select(\"text\"),\n\t\t\t\t\t\t{ useBBox: true }\n\t\t\t\t\t);\n\t\t\t\t\tconst lastLegendItemTextDimensions = DOMUtils.getSVGElementSize(\n\t\t\t\t\t\tpreviousLegendItem.select(\"text\"),\n\t\t\t\t\t\t{ useBBox: true }\n\t\t\t\t\t);\n\t\t\t\t\tstartingPoint =\n\t\t\t\t\t\tstartingPoint +\n\t\t\t\t\t\tlastLegendItemTextDimensions.width +\n\t\t\t\t\t\tspaceNeededForCheckbox +\n\t\t\t\t\t\tlegendItemsHorizontalSpacing;\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tstartingPoint +\n\t\t\t\t\t\t\tspaceNeededForCheckbox +\n\t\t\t\t\t\t\tlegendItemTextDimensions.width >\n\t\t\t\t\t\tsvgDimensions.width\n\t\t\t\t\t) {\n\t\t\t\t\t\tlineNumber++;\n\t\t\t\t\t\tstartingPoint = 0;\n\t\t\t\t\t\titemIndexInLine = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst yOffset = 0;\n\n\t\t\t\t// Position checkbox\n\t\t\t\t// TODO - Replace with layout component margins\n\t\t\t\tlegendItem\n\t\t\t\t\t.select(\"rect.checkbox\")\n\t\t\t\t\t.attr(\"x\", startingPoint)\n\t\t\t\t\t.attr(\n\t\t\t\t\t\t\"y\",\n\t\t\t\t\t\tyOffset + lineNumber * legendItemsVerticalSpacing\n\t\t\t\t\t);\n\n\t\t\t\t// Position text\n\t\t\t\t// TODO - Replace with layout component margins\n\t\t\t\tconst yPosition =\n\t\t\t\t\tlegendTextYOffset + lineNumber * legendItemsVerticalSpacing;\n\t\t\t\tlegendItem\n\t\t\t\t\t.select(\"text\")\n\t\t\t\t\t.attr(\"x\", startingPoint + spaceNeededForCheckbox)\n\t\t\t\t\t.attr(\"y\", yOffset + yPosition);\n\n\t\t\t\tlastYPosition = yPosition;\n\n\t\t\t\t// Render checkbox check icon\n\t\t\t\tif (\n\t\t\t\t\thasDeactivatedItems &&\n\t\t\t\t\tlegendItem.select(\"g.check\").empty()\n\t\t\t\t) {\n\t\t\t\t\tlegendItem.append(\"g\").classed(\"check\", true).html(`\n\t\t\t\t\t\t\t<svg focusable=\"false\" preserveAspectRatio=\"xMidYMid meet\"\n\t\t\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\"\n\t\t\t\t\t\t\t\tviewBox=\"0 0 32 32\" aria-hidden=\"true\"\n\t\t\t\t\t\t\t\tstyle=\"will-change: transform;\">\n\t\t\t\t\t\t\t\t<path d=\"M13 21.2l-7.1-7.1-1.4 1.4 7.1 7.1L13 24 27.1 9.9l-1.4-1.5z\"></path>\n\t\t\t\t\t\t\t\t<title>Checkmark</title>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t`);\n\n\t\t\t\t\tlegendItem\n\t\t\t\t\t\t.select(\"g.check svg\")\n\t\t\t\t\t\t.attr(\"width\", checkboxRadius * 2 - 1)\n\t\t\t\t\t\t.attr(\"height\", checkboxRadius * 2 - 1)\n\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t\"x\",\n\t\t\t\t\t\t\tparseFloat(\n\t\t\t\t\t\t\t\tlegendItem.select(\"rect.checkbox\").attr(\"x\")\n\t\t\t\t\t\t\t) + 0.5\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t\"y\",\n\t\t\t\t\t\t\tparseFloat(\n\t\t\t\t\t\t\t\tlegendItem.select(\"rect.checkbox\").attr(\"y\")\n\t\t\t\t\t\t\t) + 0.5\n\t\t\t\t\t\t);\n\t\t\t\t} else if (\n\t\t\t\t\t!hasDeactivatedItems &&\n\t\t\t\t\t!legendItem.select(\"g.check\").empty()\n\t\t\t\t) {\n\t\t\t\t\tlegendItem.select(\"g.check\").remove();\n\t\t\t\t}\n\n\t\t\t\titemIndexInLine++;\n\t\t\t});\n\t}\n\n\taddEventListeners() {\n\t\tconst self = this;\n\t\tconst svg = this.getContainerSVG();\n\t\tconst options = this.model.getOptions();\n\n\t\tsvg.selectAll(\"g.legend-item\")\n\t\t\t.on(\"mouseover\", function() {\n\t\t\t\tself.services.events.dispatchEvent(Events.Legend.ITEM_HOVER, {\n\t\t\t\t\thoveredElement: select(this)\n\t\t\t\t});\n\n\t\t\t\t// Configs\n\t\t\t\tconst checkboxRadius = options.legend.checkbox.radius;\n\n\t\t\t\tconst hoveredItem = select(this);\n\t\t\t\thoveredItem\n\t\t\t\t\t.append(\"rect\")\n\t\t\t\t\t.classed(\"hover-stroke\", true)\n\t\t\t\t\t.attr(\n\t\t\t\t\t\t\"x\",\n\t\t\t\t\t\tparseFloat(\n\t\t\t\t\t\t\thoveredItem.select(\"rect.checkbox\").attr(\"x\")\n\t\t\t\t\t\t) - 2\n\t\t\t\t\t)\n\t\t\t\t\t.attr(\n\t\t\t\t\t\t\"y\",\n\t\t\t\t\t\tparseFloat(\n\t\t\t\t\t\t\thoveredItem.select(\"rect.checkbox\").attr(\"y\")\n\t\t\t\t\t\t) - 2\n\t\t\t\t\t)\n\t\t\t\t\t.attr(\"width\", checkboxRadius * 2 + 4)\n\t\t\t\t\t.attr(\"height\", checkboxRadius * 2 + 4)\n\t\t\t\t\t.attr(\"rx\", 3)\n\t\t\t\t\t.attr(\"ry\", 3)\n\t\t\t\t\t.lower();\n\t\t\t})\n\t\t\t.on(\"click\", function() {\n\t\t\t\tself.services.events.dispatchEvent(Events.Legend.ITEM_CLICK, {\n\t\t\t\t\tclickedElement: select(this)\n\t\t\t\t});\n\n\t\t\t\tconst clickedItem = select(this);\n\t\t\t\tconst clickedItemData = clickedItem.datum() as any;\n\n\t\t\t\tself.model.toggleDataLabel(clickedItemData.name);\n\t\t\t})\n\t\t\t.on(\"mouseout\", function() {\n\t\t\t\tconst hoveredItem = select(this);\n\t\t\t\thoveredItem.select(\"rect.hover-stroke\").remove();\n\n\t\t\t\tself.services.events.dispatchEvent(\n\t\t\t\t\tEvents.Legend.ITEM_MOUSEOUT,\n\t\t\t\t\t{\n\t\t\t\t\t\thoveredElement: hoveredItem\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t});\n\t}\n}\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Component } from "../component";
|
|
2
|
+
import { ChartModel } from "../../model";
|
|
3
|
+
import Position from "@carbon/utils-position";
|
|
4
|
+
export declare class Threshold extends Component {
|
|
5
|
+
type: string;
|
|
6
|
+
threshold: any;
|
|
7
|
+
thresholdClass: string;
|
|
8
|
+
thresholdIdentifierClass: string;
|
|
9
|
+
label: any;
|
|
10
|
+
positionService: Position;
|
|
11
|
+
constructor(model: ChartModel, services: any, configs: any);
|
|
12
|
+
render(animate?: boolean): void;
|
|
13
|
+
getFormattedValue(): any;
|
|
14
|
+
appendThresholdLabel(): void;
|
|
15
|
+
setThresholdLabelPosition(): void;
|
|
16
|
+
addEventListeners(): void;
|
|
17
|
+
}
|