@carbon/charts 0.41.20 → 0.41.24
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 +28 -46
- package/axis-chart.d.ts +4 -4
- package/axis-chart.js +46 -46
- package/axis-chart.js.map +1 -1
- package/build/demo/create-codesandbox.d.ts +42 -42
- package/build/demo/data/bar.d.ts +2 -2
- package/build/demo/data/index.d.ts +13 -13
- package/build/demo/data/line.d.ts +4 -4
- package/build/demo/data/meter.d.ts +1 -1
- package/build/src/axis-chart.d.ts +4 -4
- package/build/src/chart.d.ts +3 -3
- package/build/src/charts/area-stacked.d.ts +2 -2
- package/build/src/charts/area.d.ts +2 -2
- package/build/src/charts/bar-grouped.d.ts +2 -2
- package/build/src/charts/bar-simple.d.ts +2 -2
- package/build/src/charts/bar-stacked.d.ts +2 -2
- package/build/src/charts/bubble.d.ts +2 -2
- package/build/src/charts/combo.d.ts +2 -2
- package/build/src/charts/donut.d.ts +2 -2
- package/build/src/charts/gauge.d.ts +3 -3
- package/build/src/charts/index.d.ts +16 -16
- package/build/src/charts/line.d.ts +2 -2
- package/build/src/charts/lollipop.d.ts +2 -2
- package/build/src/charts/meter.d.ts +3 -3
- package/build/src/charts/pie.d.ts +3 -3
- package/build/src/charts/radar.d.ts +2 -2
- package/build/src/charts/scatter.d.ts +2 -2
- package/build/src/charts/treemap.d.ts +2 -2
- package/build/src/components/axes/axis.d.ts +3 -3
- package/build/src/components/axes/chart-clip.d.ts +2 -2
- package/build/src/components/axes/grid-brush.d.ts +1 -1
- package/build/src/components/axes/grid.d.ts +1 -1
- package/build/src/components/axes/ruler-stacked.d.ts +1 -1
- package/build/src/components/axes/ruler.d.ts +2 -2
- package/build/src/components/axes/toolbar.d.ts +2 -2
- package/build/src/components/axes/two-dimensional-axes.d.ts +2 -2
- package/build/src/components/axes/zero-line.d.ts +1 -1
- package/build/src/components/axes/zoom-bar.d.ts +2 -2
- package/build/src/components/component.d.ts +1 -1
- package/build/src/components/essentials/legend.d.ts +1 -1
- package/build/src/components/essentials/threshold.d.ts +3 -3
- package/build/src/components/essentials/title-meter.d.ts +1 -1
- package/build/src/components/essentials/title.d.ts +1 -1
- package/build/src/components/essentials/tooltip-axis.d.ts +1 -1
- package/build/src/components/essentials/tooltip.d.ts +3 -3
- package/build/src/components/graphs/area-stacked.d.ts +1 -1
- package/build/src/components/graphs/area.d.ts +1 -1
- package/build/src/components/graphs/bar-grouped.d.ts +2 -2
- package/build/src/components/graphs/bar-simple.d.ts +1 -1
- package/build/src/components/graphs/bar-stacked.d.ts +1 -1
- package/build/src/components/graphs/bar.d.ts +1 -1
- package/build/src/components/graphs/bubble.d.ts +2 -2
- package/build/src/components/graphs/donut.d.ts +1 -1
- package/build/src/components/graphs/gauge.d.ts +1 -1
- package/build/src/components/graphs/line.d.ts +1 -1
- package/build/src/components/graphs/lollipop.d.ts +1 -1
- package/build/src/components/graphs/meter.d.ts +1 -1
- package/build/src/components/graphs/pie.d.ts +1 -1
- package/build/src/components/graphs/radar.d.ts +1 -1
- package/build/src/components/graphs/scatter-stacked.d.ts +1 -1
- package/build/src/components/graphs/scatter.d.ts +2 -2
- package/build/src/components/graphs/skeleton-lines.d.ts +1 -1
- package/build/src/components/graphs/skeleton.d.ts +1 -1
- package/build/src/components/graphs/treemap.d.ts +1 -1
- package/build/src/components/index.d.ts +36 -36
- package/build/src/components/layout/layout.d.ts +3 -3
- package/build/src/components/layout/spacer.d.ts +1 -1
- package/build/src/configuration-non-customizable.d.ts +7 -7
- package/build/src/configuration.d.ts +2 -2
- package/build/src/interfaces/axis-scales.d.ts +7 -7
- package/build/src/interfaces/charts.d.ts +11 -4
- package/build/src/interfaces/components.d.ts +3 -3
- package/build/src/interfaces/enums.d.ts +1 -1
- package/build/src/interfaces/index.d.ts +7 -7
- package/build/src/interfaces/layout.d.ts +1 -1
- package/build/src/interfaces/model.d.ts +1 -1
- package/build/src/model-cartesian-charts.d.ts +1 -1
- package/build/src/model-gauge.d.ts +1 -1
- package/build/src/model-meter.d.ts +1 -1
- package/build/src/model-pie.d.ts +1 -1
- package/build/src/model.d.ts +1 -9
- package/build/src/services/angle-utils.d.ts +1 -1
- package/build/src/services/curves.d.ts +2 -2
- package/build/src/services/essentials/dom-utils.d.ts +2 -2
- package/build/src/services/essentials/events.d.ts +1 -1
- package/build/src/services/essentials/gradient-utils.d.ts +1 -1
- package/build/src/services/essentials/transitions.d.ts +2 -2
- package/build/src/services/index.d.ts +7 -7
- package/build/src/services/scales-cartesian.d.ts +2 -2
- package/build/src/services/service.d.ts +1 -1
- package/build/src/services/time-series.d.ts +1 -1
- package/build/src/services/zoom.d.ts +2 -2
- package/build/src/tools.d.ts +2 -2
- package/build/stories/all.stories.d.ts +1 -1
- package/build/stories/tutorials/index.d.ts +11 -11
- package/build/stories/tutorials.stories.d.ts +1 -1
- package/bundle.js +1 -1
- package/chart.d.ts +3 -3
- package/chart.js +35 -35
- package/chart.js.map +1 -1
- package/charts/area-stacked.d.ts +2 -2
- package/charts/area-stacked.js +8 -8
- package/charts/area-stacked.js.map +1 -1
- package/charts/area.d.ts +2 -2
- package/charts/area.js +8 -8
- package/charts/area.js.map +1 -1
- package/charts/bar-grouped.d.ts +2 -2
- package/charts/bar-grouped.js +7 -7
- package/charts/bar-grouped.js.map +1 -1
- package/charts/bar-simple.d.ts +2 -2
- package/charts/bar-simple.js +7 -7
- package/charts/bar-simple.js.map +1 -1
- package/charts/bar-stacked.d.ts +2 -2
- package/charts/bar-stacked.js +7 -7
- package/charts/bar-stacked.js.map +1 -1
- package/charts/bubble.d.ts +2 -2
- package/charts/bubble.js +7 -7
- package/charts/bubble.js.map +1 -1
- package/charts/combo.d.ts +2 -2
- package/charts/combo.js +12 -12
- package/charts/combo.js.map +1 -1
- package/charts/donut.d.ts +2 -2
- package/charts/donut.js +7 -7
- package/charts/donut.js.map +1 -1
- package/charts/gauge.d.ts +3 -3
- package/charts/gauge.js +5 -5
- package/charts/gauge.js.map +1 -1
- package/charts/index.d.ts +16 -16
- package/charts/index.js +16 -16
- package/charts/index.js.map +1 -1
- package/charts/line.d.ts +2 -2
- package/charts/line.js +5 -5
- package/charts/line.js.map +1 -1
- package/charts/lollipop.d.ts +2 -2
- package/charts/lollipop.js +7 -7
- package/charts/lollipop.js.map +1 -1
- package/charts/meter.d.ts +3 -3
- package/charts/meter.js +18 -18
- package/charts/meter.js.map +1 -1
- package/charts/pie.d.ts +3 -3
- package/charts/pie.js +8 -8
- package/charts/pie.js.map +1 -1
- package/charts/radar.d.ts +2 -2
- package/charts/radar.js +5 -5
- package/charts/radar.js.map +1 -1
- package/charts/scatter.d.ts +2 -2
- package/charts/scatter.js +7 -7
- package/charts/scatter.js.map +1 -1
- package/charts/treemap.d.ts +2 -2
- package/charts/treemap.js +4 -4
- package/charts/treemap.js.map +1 -1
- package/components/axes/axis.d.ts +3 -3
- package/components/axes/axis.js +98 -98
- package/components/axes/axis.js.map +1 -1
- package/components/axes/chart-clip.d.ts +2 -2
- package/components/axes/chart-clip.js +9 -9
- package/components/axes/chart-clip.js.map +1 -1
- package/components/axes/grid-brush.d.ts +1 -1
- package/components/axes/grid-brush.js +32 -32
- package/components/axes/grid-brush.js.map +1 -1
- package/components/axes/grid.d.ts +1 -1
- package/components/axes/grid.js +34 -34
- package/components/axes/grid.js.map +1 -1
- package/components/axes/ruler-stacked.d.ts +1 -1
- package/components/axes/ruler-stacked.js +5 -5
- package/components/axes/ruler-stacked.js.map +1 -1
- package/components/axes/ruler.d.ts +2 -2
- package/components/axes/ruler.js +36 -36
- package/components/axes/ruler.js.map +1 -1
- package/components/axes/toolbar.d.ts +2 -2
- package/components/axes/toolbar.js +85 -85
- package/components/axes/toolbar.js.map +1 -1
- package/components/axes/two-dimensional-axes.d.ts +2 -2
- package/components/axes/two-dimensional-axes.js +13 -13
- package/components/axes/two-dimensional-axes.js.map +1 -1
- package/components/axes/zero-line.d.ts +1 -1
- package/components/axes/zero-line.js +12 -12
- package/components/axes/zero-line.js.map +1 -1
- package/components/axes/zoom-bar.d.ts +2 -2
- package/components/axes/zoom-bar.js +114 -114
- package/components/axes/zoom-bar.js.map +1 -1
- package/components/component.d.ts +1 -1
- package/components/component.js +13 -13
- package/components/component.js.map +1 -1
- package/components/essentials/legend.d.ts +1 -1
- package/components/essentials/legend.js +95 -92
- package/components/essentials/legend.js.map +1 -1
- package/components/essentials/threshold.d.ts +3 -3
- package/components/essentials/threshold.js +39 -39
- package/components/essentials/threshold.js.map +1 -1
- package/components/essentials/title-meter.d.ts +1 -1
- package/components/essentials/title-meter.js +42 -42
- package/components/essentials/title-meter.js.map +1 -1
- package/components/essentials/title.d.ts +1 -1
- package/components/essentials/title.js +19 -19
- package/components/essentials/title.js.map +1 -1
- package/components/essentials/tooltip-axis.d.ts +1 -1
- package/components/essentials/tooltip-axis.js +23 -23
- package/components/essentials/tooltip-axis.js.map +1 -1
- package/components/essentials/tooltip.d.ts +3 -3
- package/components/essentials/tooltip.js +31 -31
- package/components/essentials/tooltip.js.map +1 -1
- package/components/graphs/area-stacked.d.ts +1 -1
- package/components/graphs/area-stacked.js +28 -29
- package/components/graphs/area-stacked.js.map +1 -1
- package/components/graphs/area.d.ts +1 -1
- package/components/graphs/area.js +62 -57
- package/components/graphs/area.js.map +1 -1
- package/components/graphs/bar-grouped.d.ts +2 -2
- package/components/graphs/bar-grouped.js +56 -56
- package/components/graphs/bar-grouped.js.map +1 -1
- package/components/graphs/bar-simple.d.ts +1 -1
- package/components/graphs/bar-simple.js +45 -45
- package/components/graphs/bar-simple.js.map +1 -1
- package/components/graphs/bar-stacked.d.ts +1 -1
- package/components/graphs/bar-stacked.js +50 -51
- package/components/graphs/bar-stacked.js.map +1 -1
- package/components/graphs/bar.d.ts +1 -1
- package/components/graphs/bar.js +4 -4
- package/components/graphs/bar.js.map +1 -1
- package/components/graphs/bubble.d.ts +2 -2
- package/components/graphs/bubble.js +19 -19
- package/components/graphs/bubble.js.map +1 -1
- package/components/graphs/donut.d.ts +1 -1
- package/components/graphs/donut.js +20 -20
- package/components/graphs/donut.js.map +1 -1
- package/components/graphs/gauge.d.ts +1 -1
- package/components/graphs/gauge.js +89 -87
- package/components/graphs/gauge.js.map +1 -1
- package/components/graphs/line.d.ts +1 -1
- package/components/graphs/line.js +33 -33
- package/components/graphs/line.js.map +1 -1
- package/components/graphs/lollipop.d.ts +1 -1
- package/components/graphs/lollipop.js +32 -32
- package/components/graphs/lollipop.js.map +1 -1
- package/components/graphs/meter.d.ts +1 -1
- package/components/graphs/meter.js +39 -39
- package/components/graphs/meter.js.map +1 -1
- package/components/graphs/pie.d.ts +1 -1
- package/components/graphs/pie.js +102 -100
- package/components/graphs/pie.js.map +1 -1
- package/components/graphs/radar.d.ts +1 -1
- package/components/graphs/radar.js +180 -180
- package/components/graphs/radar.js.map +1 -1
- package/components/graphs/scatter-stacked.d.ts +1 -1
- package/components/graphs/scatter-stacked.js +22 -22
- package/components/graphs/scatter-stacked.js.map +1 -1
- package/components/graphs/scatter.d.ts +2 -2
- package/components/graphs/scatter.js +67 -66
- package/components/graphs/scatter.js.map +1 -1
- package/components/graphs/skeleton-lines.d.ts +1 -1
- package/components/graphs/skeleton-lines.js +27 -27
- package/components/graphs/skeleton-lines.js.map +1 -1
- package/components/graphs/skeleton.d.ts +1 -1
- package/components/graphs/skeleton.js +85 -85
- package/components/graphs/skeleton.js.map +1 -1
- package/components/graphs/treemap.d.ts +1 -1
- package/components/graphs/treemap.js +82 -82
- package/components/graphs/treemap.js.map +1 -1
- package/components/index.d.ts +36 -36
- package/components/index.js +36 -36
- package/components/index.js.map +1 -1
- package/components/layout/layout.d.ts +3 -3
- package/components/layout/layout.js +28 -28
- package/components/layout/layout.js.map +1 -1
- package/components/layout/spacer.d.ts +1 -1
- package/components/layout/spacer.js +10 -10
- package/components/layout/spacer.js.map +1 -1
- package/configuration-non-customizable.d.ts +7 -7
- package/configuration-non-customizable.js +37 -37
- package/configuration-non-customizable.js.map +1 -1
- package/configuration.d.ts +2 -2
- package/configuration.js +81 -78
- package/configuration.js.map +1 -1
- package/demo/create-codesandbox.d.ts +42 -42
- package/demo/create-codesandbox.js +100 -100
- package/demo/create-codesandbox.js.map +1 -1
- package/demo/data/area.js +220 -190
- package/demo/data/area.js.map +1 -1
- package/demo/data/bar.d.ts +2 -2
- package/demo/data/bar.js +302 -302
- package/demo/data/bar.js.map +1 -1
- package/demo/data/bubble.js +108 -108
- package/demo/data/bubble.js.map +1 -1
- package/demo/data/combo.js +323 -323
- package/demo/data/combo.js.map +1 -1
- package/demo/data/donut.js +19 -19
- package/demo/data/donut.js.map +1 -1
- package/demo/data/gauge.js +20 -20
- package/demo/data/gauge.js.map +1 -1
- package/demo/data/high-scale.js +3 -3
- package/demo/data/high-scale.js.map +1 -1
- package/demo/data/index.d.ts +13 -13
- package/demo/data/index.js +299 -299
- package/demo/data/index.js.map +1 -1
- package/demo/data/line.d.ts +4 -4
- package/demo/data/line.js +332 -332
- package/demo/data/line.js.map +1 -1
- package/demo/data/lollipop.js +19 -19
- package/demo/data/lollipop.js.map +1 -1
- package/demo/data/meter.d.ts +1 -1
- package/demo/data/meter.js +22 -22
- package/demo/data/meter.js.map +1 -1
- package/demo/data/pie.js +17 -17
- package/demo/data/pie.js.map +1 -1
- package/demo/data/radar.js +84 -84
- package/demo/data/radar.js.map +1 -1
- package/demo/data/scatter.js +125 -125
- package/demo/data/scatter.js.map +1 -1
- package/demo/data/step.js +11 -11
- package/demo/data/step.js.map +1 -1
- package/demo/data/time-series-axis.js +164 -164
- package/demo/data/time-series-axis.js.map +1 -1
- package/demo/data/toolbar.js +15 -15
- package/demo/data/toolbar.js.map +1 -1
- package/demo/data/treemap.js +63 -63
- package/demo/data/treemap.js.map +1 -1
- package/demo/data/zoom-bar.js +65 -65
- package/demo/data/zoom-bar.js.map +1 -1
- package/demo/styles.css +1 -1
- package/demo/styles.min.css +1 -1
- package/demo/tsconfig.tsbuildinfo +45 -45
- package/index.d.ts +3 -3
- package/index.js +3 -3
- package/index.js.map +1 -1
- package/interfaces/a11y.js.map +1 -1
- package/interfaces/axis-scales.d.ts +7 -7
- package/interfaces/axis-scales.js.map +1 -1
- package/interfaces/charts.d.ts +11 -4
- package/interfaces/charts.js.map +1 -1
- package/interfaces/components.d.ts +3 -3
- package/interfaces/components.js.map +1 -1
- package/interfaces/enums.d.ts +1 -1
- package/interfaces/enums.js +1 -1
- package/interfaces/enums.js.map +1 -1
- package/interfaces/events.js.map +1 -1
- package/interfaces/index.d.ts +7 -7
- package/interfaces/index.js +2 -2
- package/interfaces/index.js.map +1 -1
- package/interfaces/layout.d.ts +1 -1
- package/interfaces/layout.js.map +1 -1
- package/interfaces/model.d.ts +1 -1
- package/interfaces/model.js.map +1 -1
- package/model-cartesian-charts.d.ts +1 -1
- package/model-cartesian-charts.js +7 -7
- package/model-cartesian-charts.js.map +1 -1
- package/model-gauge.d.ts +1 -1
- package/model-gauge.js +2 -2
- package/model-gauge.js.map +1 -1
- package/model-meter.d.ts +1 -1
- package/model-meter.js +7 -7
- package/model-meter.js.map +1 -1
- package/model-pie.d.ts +1 -1
- package/model-pie.js +1 -1
- package/model-pie.js.map +1 -1
- package/model.d.ts +1 -9
- package/model.js +31 -42
- package/model.js.map +1 -1
- package/package.json +2 -3
- package/polyfills.js +9 -9
- package/polyfills.js.map +1 -1
- package/services/angle-utils.d.ts +1 -1
- package/services/angle-utils.js +9 -9
- package/services/angle-utils.js.map +1 -1
- package/services/curves.d.ts +2 -2
- package/services/curves.js +6 -6
- package/services/curves.js.map +1 -1
- package/services/essentials/dom-utils.d.ts +2 -2
- package/services/essentials/dom-utils.js +37 -37
- package/services/essentials/dom-utils.js.map +1 -1
- package/services/essentials/events.d.ts +1 -1
- package/services/essentials/events.js +3 -3
- package/services/essentials/events.js.map +1 -1
- package/services/essentials/gradient-utils.d.ts +1 -1
- package/services/essentials/gradient-utils.js +25 -25
- package/services/essentials/gradient-utils.js.map +1 -1
- package/services/essentials/transitions.d.ts +2 -2
- package/services/essentials/transitions.js +8 -8
- package/services/essentials/transitions.js.map +1 -1
- package/services/index.d.ts +7 -7
- package/services/index.js +7 -7
- package/services/index.js.map +1 -1
- package/services/scales-cartesian.d.ts +2 -2
- package/services/scales-cartesian.js +57 -60
- package/services/scales-cartesian.js.map +1 -1
- package/services/service.d.ts +1 -1
- package/services/service.js.map +1 -1
- package/services/time-series.d.ts +1 -1
- package/services/time-series.js +27 -27
- package/services/time-series.js.map +1 -1
- package/services/zoom.d.ts +2 -2
- package/services/zoom.js +20 -20
- package/services/zoom.js.map +1 -1
- package/styles/_type.scss +7 -7
- package/styles/color-palatte.scss +218 -218
- package/styles/colors.scss +3 -3
- package/styles/components/_axis.scss +5 -5
- package/styles/components/_ruler.scss +2 -2
- package/styles/components/_threshold.scss +1 -1
- package/styles/components/_title.scss +3 -3
- package/styles/components/_toolbar.scss +1 -1
- package/styles/components/_tooltip.scss +6 -6
- package/styles/components/index.scss +16 -16
- package/styles/graphs/_bubble.scss +1 -1
- package/styles/graphs/_radar.scss +2 -2
- package/styles/graphs/_scatter.scss +1 -1
- package/styles/graphs/_treemap.scss +1 -1
- package/styles/graphs/index.scss +9 -9
- package/styles/styles-g10.scss +2 -2
- package/styles/styles-g100.scss +2 -2
- package/styles/styles-g90.scss +2 -2
- package/styles/styles-white.scss +2 -2
- package/styles/styles.scss +10 -10
- package/tools.d.ts +2 -2
- package/tools.js +26 -26
- package/tools.js.map +1 -1
- package/tsconfig.tsbuildinfo +173 -173
package/components/graphs/pie.js
CHANGED
|
@@ -12,15 +12,15 @@ var __extends = (this && this.__extends) || (function () {
|
|
|
12
12
|
};
|
|
13
13
|
})();
|
|
14
14
|
// Internal Imports
|
|
15
|
-
import { Component } from
|
|
16
|
-
import { DOMUtils } from
|
|
17
|
-
import { Tools } from
|
|
18
|
-
import { CalloutDirections, Roles, Events, Alignments, ColorClassNameTypes } from
|
|
19
|
-
import * as Configuration from
|
|
15
|
+
import { Component } from '../component';
|
|
16
|
+
import { DOMUtils } from '../../services';
|
|
17
|
+
import { Tools } from '../../tools';
|
|
18
|
+
import { CalloutDirections, Roles, Events, Alignments, ColorClassNameTypes, } from '../../interfaces';
|
|
19
|
+
import * as Configuration from '../../configuration';
|
|
20
20
|
// D3 Imports
|
|
21
|
-
import { select } from
|
|
22
|
-
import { arc, pie } from
|
|
23
|
-
import { interpolate } from
|
|
21
|
+
import { select } from 'd3-selection';
|
|
22
|
+
import { arc, pie } from 'd3-shape';
|
|
23
|
+
import { interpolate } from 'd3-interpolate';
|
|
24
24
|
// Pie slice tween function
|
|
25
25
|
function arcTween(a, arcFunc) {
|
|
26
26
|
var _this = this;
|
|
@@ -34,24 +34,24 @@ var Pie = /** @class */ (function (_super) {
|
|
|
34
34
|
__extends(Pie, _super);
|
|
35
35
|
function Pie() {
|
|
36
36
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
37
|
-
_this.type =
|
|
37
|
+
_this.type = 'pie';
|
|
38
38
|
// Highlight elements that match the hovered legend item
|
|
39
39
|
_this.handleLegendOnHover = function (event) {
|
|
40
40
|
var hoveredElement = event.detail.hoveredElement;
|
|
41
41
|
var groupMapsTo = _this.getOptions().data.groupMapsTo;
|
|
42
42
|
_this.parent
|
|
43
|
-
.selectAll(
|
|
44
|
-
.transition(_this.services.transitions.getTransition(
|
|
45
|
-
.attr(
|
|
46
|
-
return d.data[groupMapsTo] !== hoveredElement.datum()[
|
|
43
|
+
.selectAll('path.slice')
|
|
44
|
+
.transition(_this.services.transitions.getTransition('legend-hover-bar'))
|
|
45
|
+
.attr('opacity', function (d) {
|
|
46
|
+
return d.data[groupMapsTo] !== hoveredElement.datum()['name'] ? 0.3 : 1;
|
|
47
47
|
});
|
|
48
48
|
};
|
|
49
49
|
// Un-highlight all elements
|
|
50
50
|
_this.handleLegendMouseOut = function (event) {
|
|
51
51
|
_this.parent
|
|
52
|
-
.selectAll(
|
|
53
|
-
.transition(_this.services.transitions.getTransition(
|
|
54
|
-
.attr(
|
|
52
|
+
.selectAll('path.slice')
|
|
53
|
+
.transition(_this.services.transitions.getTransition('legend-mouseout-bar'))
|
|
54
|
+
.attr('opacity', 1);
|
|
55
55
|
};
|
|
56
56
|
return _this;
|
|
57
57
|
}
|
|
@@ -70,7 +70,9 @@ var Pie = /** @class */ (function (_super) {
|
|
|
70
70
|
if (animate === void 0) { animate = true; }
|
|
71
71
|
var self = this;
|
|
72
72
|
var svg = this.getContainerSVG();
|
|
73
|
-
|
|
73
|
+
// remove any slices that are valued at 0 because they dont need to be rendered and will create extra padding
|
|
74
|
+
var displayData = this.model.getDisplayData()
|
|
75
|
+
.filter(function (data) { return data.value > 0; });
|
|
74
76
|
var options = this.getOptions();
|
|
75
77
|
var groupMapsTo = options.data.groupMapsTo;
|
|
76
78
|
// Compute the outer radius needed
|
|
@@ -88,70 +90,70 @@ var Pie = /** @class */ (function (_super) {
|
|
|
88
90
|
// Sort pie layout data based off of the indecies the layout creates
|
|
89
91
|
var pieLayoutData = pieLayout(displayData).sort(function (a, b) { return a.index - b.index; });
|
|
90
92
|
// Update data on all slices
|
|
91
|
-
var slicesGroup = DOMUtils.appendOrSelect(svg,
|
|
92
|
-
.attr(
|
|
93
|
-
.attr(
|
|
93
|
+
var slicesGroup = DOMUtils.appendOrSelect(svg, 'g.slices')
|
|
94
|
+
.attr('role', Roles.GROUP)
|
|
95
|
+
.attr('data-name', 'slices');
|
|
94
96
|
var paths = slicesGroup
|
|
95
|
-
.selectAll(
|
|
97
|
+
.selectAll('path.slice')
|
|
96
98
|
.data(pieLayoutData, function (d) { return d.data[groupMapsTo]; });
|
|
97
99
|
// Remove slices that need to be exited
|
|
98
|
-
paths.exit().attr(
|
|
100
|
+
paths.exit().attr('opacity', 0).remove();
|
|
99
101
|
// Add new slices that are being introduced
|
|
100
102
|
var enteringPaths = paths
|
|
101
103
|
.enter()
|
|
102
|
-
.append(
|
|
103
|
-
.classed(
|
|
104
|
-
.attr(
|
|
104
|
+
.append('path')
|
|
105
|
+
.classed('slice', true)
|
|
106
|
+
.attr('opacity', 0);
|
|
105
107
|
// Update styles & position on existing and entering slices
|
|
106
108
|
enteringPaths
|
|
107
109
|
.merge(paths)
|
|
108
|
-
.attr(
|
|
110
|
+
.attr('class', function (d) {
|
|
109
111
|
return _this.model.getColorClassName({
|
|
110
112
|
classNameTypes: [ColorClassNameTypes.FILL],
|
|
111
113
|
dataGroupName: d.data[groupMapsTo],
|
|
112
|
-
originalClassName:
|
|
114
|
+
originalClassName: 'slice',
|
|
113
115
|
});
|
|
114
116
|
})
|
|
115
|
-
.style(
|
|
116
|
-
.attr(
|
|
117
|
-
.transition(this.services.transitions.getTransition(
|
|
118
|
-
.attr(
|
|
117
|
+
.style('fill', function (d) { return self.model.getFillColor(d.data[groupMapsTo]); })
|
|
118
|
+
.attr('d', this.arc)
|
|
119
|
+
.transition(this.services.transitions.getTransition('pie-slice-enter-update', animate))
|
|
120
|
+
.attr('opacity', 1)
|
|
119
121
|
// a11y
|
|
120
|
-
.attr(
|
|
121
|
-
.attr(
|
|
122
|
-
.attr(
|
|
123
|
-
return d.value + ", " + (Tools.convertValueToPercentage(d.data.value, displayData) +
|
|
122
|
+
.attr('role', Roles.GRAPHICS_SYMBOL)
|
|
123
|
+
.attr('aria-roledescription', 'slice')
|
|
124
|
+
.attr('aria-label', function (d) {
|
|
125
|
+
return d.value + ", " + (Tools.convertValueToPercentage(d.data.value, displayData) + '%');
|
|
124
126
|
})
|
|
125
127
|
// Tween
|
|
126
|
-
.attrTween(
|
|
128
|
+
.attrTween('d', function (a) {
|
|
127
129
|
return arcTween.bind(this)(a, self.arc);
|
|
128
130
|
});
|
|
129
131
|
// Draw the slice labels
|
|
130
132
|
var labelData = pieLayoutData.filter(function (x) { return x.value > 0; });
|
|
131
|
-
var labelsGroup = DOMUtils.appendOrSelect(svg,
|
|
132
|
-
.attr(
|
|
133
|
-
.attr(
|
|
133
|
+
var labelsGroup = DOMUtils.appendOrSelect(svg, 'g.labels')
|
|
134
|
+
.attr('role', Roles.GROUP)
|
|
135
|
+
.attr('data-name', 'labels');
|
|
134
136
|
var labels = labelsGroup
|
|
135
|
-
.selectAll(
|
|
137
|
+
.selectAll('text.pie-label')
|
|
136
138
|
.data(labelData, function (d) { return d.data[groupMapsTo]; });
|
|
137
139
|
// Remove labels that are existing
|
|
138
|
-
labels.exit().attr(
|
|
140
|
+
labels.exit().attr('opacity', 0).remove();
|
|
139
141
|
// Add labels that are being introduced
|
|
140
142
|
var enteringLabels = labels
|
|
141
143
|
.enter()
|
|
142
|
-
.append(
|
|
143
|
-
.classed(
|
|
144
|
+
.append('text')
|
|
145
|
+
.classed('pie-label', true);
|
|
144
146
|
// Update styles & position on existing & entering labels
|
|
145
147
|
var calloutData = [];
|
|
146
148
|
enteringLabels
|
|
147
149
|
.merge(labels)
|
|
148
|
-
.style(
|
|
150
|
+
.style('text-anchor', 'middle')
|
|
149
151
|
.text(function (d) {
|
|
150
152
|
if (options.pie.labels.formatter) {
|
|
151
153
|
return options.pie.labels.formatter(d);
|
|
152
154
|
}
|
|
153
155
|
return (Tools.convertValueToPercentage(d.data.value, displayData) +
|
|
154
|
-
|
|
156
|
+
'%');
|
|
155
157
|
})
|
|
156
158
|
// Calculate dimensions in order to transform
|
|
157
159
|
.datum(function (d) {
|
|
@@ -167,7 +169,7 @@ var Pie = /** @class */ (function (_super) {
|
|
|
167
169
|
(d.textOffsetY + marginedRadius) * -Math.cos(theta);
|
|
168
170
|
return d;
|
|
169
171
|
})
|
|
170
|
-
.attr(
|
|
172
|
+
.attr('transform', function (d, i) {
|
|
171
173
|
var totalSlices = labelData.length;
|
|
172
174
|
var sliceAngleDeg = (d.endAngle - d.startAngle) * (180 / Math.PI);
|
|
173
175
|
// check if last 2 slices (or just last) are < the threshold
|
|
@@ -205,12 +207,12 @@ var Pie = /** @class */ (function (_super) {
|
|
|
205
207
|
});
|
|
206
208
|
// Render pie label callouts
|
|
207
209
|
this.renderCallouts(calloutData);
|
|
208
|
-
var optionName = Tools.getProperty(options,
|
|
209
|
-
?
|
|
210
|
-
:
|
|
211
|
-
var alignment = Tools.getProperty(options, optionName,
|
|
210
|
+
var optionName = Tools.getProperty(options, 'donut')
|
|
211
|
+
? 'donut'
|
|
212
|
+
: 'pie';
|
|
213
|
+
var alignment = Tools.getProperty(options, optionName, 'alignment');
|
|
212
214
|
var width = DOMUtils.getSVGElementSize(this.getParent(), {
|
|
213
|
-
useAttr: true
|
|
215
|
+
useAttr: true,
|
|
214
216
|
}).width;
|
|
215
217
|
// Position Pie
|
|
216
218
|
var pieTranslateX = radius + Configuration.pie.xOffset;
|
|
@@ -224,24 +226,24 @@ var Pie = /** @class */ (function (_super) {
|
|
|
224
226
|
if (calloutData.length > 0) {
|
|
225
227
|
pieTranslateY += Configuration.pie.yOffsetCallout;
|
|
226
228
|
}
|
|
227
|
-
svg.attr(
|
|
229
|
+
svg.attr('transform', "translate(" + pieTranslateX + ", " + pieTranslateY + ")");
|
|
228
230
|
// Add event listeners
|
|
229
231
|
this.addEventListeners();
|
|
230
232
|
};
|
|
231
233
|
Pie.prototype.renderCallouts = function (calloutData) {
|
|
232
|
-
var svg = DOMUtils.appendOrSelect(this.getContainerSVG(),
|
|
233
|
-
.attr(
|
|
234
|
-
.attr(
|
|
234
|
+
var svg = DOMUtils.appendOrSelect(this.getContainerSVG(), 'g.callouts')
|
|
235
|
+
.attr('role', Roles.GROUP)
|
|
236
|
+
.attr('data-name', 'callouts');
|
|
235
237
|
// Update data on callouts
|
|
236
|
-
var callouts = svg.selectAll(
|
|
238
|
+
var callouts = svg.selectAll('g.callout').data(calloutData);
|
|
237
239
|
callouts.exit().remove();
|
|
238
240
|
var enteringCallouts = callouts
|
|
239
241
|
.enter()
|
|
240
|
-
.append(
|
|
241
|
-
.classed(
|
|
242
|
+
.append('g')
|
|
243
|
+
.classed('callout', true)
|
|
242
244
|
// a11y
|
|
243
|
-
.attr(
|
|
244
|
-
.attr(
|
|
245
|
+
.attr('role', Roles.GRAPHICS_SYMBOL + " " + Roles.GROUP)
|
|
246
|
+
.attr('aria-roledescription', 'label callout');
|
|
245
247
|
// Update data values for each callout
|
|
246
248
|
// For the horizontal and vertical lines to use
|
|
247
249
|
enteringCallouts.merge(callouts).datum(function (d) {
|
|
@@ -249,14 +251,14 @@ var Pie = /** @class */ (function (_super) {
|
|
|
249
251
|
if (direction === CalloutDirections.RIGHT) {
|
|
250
252
|
d.startPos = {
|
|
251
253
|
x: xPosition,
|
|
252
|
-
y: yPosition + d.textOffsetY
|
|
254
|
+
y: yPosition + d.textOffsetY,
|
|
253
255
|
};
|
|
254
256
|
// end position for the callout line
|
|
255
257
|
d.endPos = {
|
|
256
258
|
x: xPosition + Configuration.pie.callout.offsetX,
|
|
257
259
|
y: yPosition -
|
|
258
260
|
Configuration.pie.callout.offsetY +
|
|
259
|
-
d.textOffsetY
|
|
261
|
+
d.textOffsetY,
|
|
260
262
|
};
|
|
261
263
|
// the intersection point of the vertical and horizontal line
|
|
262
264
|
d.intersectPointX =
|
|
@@ -266,14 +268,14 @@ var Pie = /** @class */ (function (_super) {
|
|
|
266
268
|
// start position for the callout line
|
|
267
269
|
d.startPos = {
|
|
268
270
|
x: xPosition,
|
|
269
|
-
y: yPosition + d.textOffsetY
|
|
271
|
+
y: yPosition + d.textOffsetY,
|
|
270
272
|
};
|
|
271
273
|
// end position for the callout line should be bottom aligned to the title
|
|
272
274
|
d.endPos = {
|
|
273
275
|
x: xPosition - Configuration.pie.callout.offsetX,
|
|
274
276
|
y: yPosition -
|
|
275
277
|
Configuration.pie.callout.offsetY +
|
|
276
|
-
d.textOffsetY
|
|
278
|
+
d.textOffsetY,
|
|
277
279
|
};
|
|
278
280
|
// the intersection point of the vertical and horizontal line
|
|
279
281
|
d.intersectPointX =
|
|
@@ -284,47 +286,47 @@ var Pie = /** @class */ (function (_super) {
|
|
|
284
286
|
});
|
|
285
287
|
// draw vertical line
|
|
286
288
|
var enteringVerticalLines = enteringCallouts
|
|
287
|
-
.append(
|
|
288
|
-
.classed(
|
|
289
|
+
.append('line')
|
|
290
|
+
.classed('vertical-line', true);
|
|
289
291
|
enteringVerticalLines
|
|
290
|
-
.merge(svg.selectAll(
|
|
292
|
+
.merge(svg.selectAll('line.vertical-line'))
|
|
291
293
|
.datum(function (d) {
|
|
292
294
|
return select(this.parentNode).datum();
|
|
293
295
|
})
|
|
294
|
-
.style(
|
|
295
|
-
.attr(
|
|
296
|
-
.attr(
|
|
297
|
-
.attr(
|
|
298
|
-
.attr(
|
|
296
|
+
.style('stroke-width', '1px')
|
|
297
|
+
.attr('x1', function (d) { return d.startPos.x; })
|
|
298
|
+
.attr('y1', function (d) { return d.startPos.y; })
|
|
299
|
+
.attr('x2', function (d) { return d.intersectPointX; })
|
|
300
|
+
.attr('y2', function (d) { return d.endPos.y; });
|
|
299
301
|
// draw horizontal line
|
|
300
302
|
var enteringHorizontalLines = enteringCallouts
|
|
301
|
-
.append(
|
|
302
|
-
.classed(
|
|
303
|
+
.append('line')
|
|
304
|
+
.classed('horizontal-line', true);
|
|
303
305
|
enteringHorizontalLines
|
|
304
|
-
.merge(svg.selectAll(
|
|
306
|
+
.merge(svg.selectAll('line.horizontal-line'))
|
|
305
307
|
.datum(function (d) {
|
|
306
308
|
return select(this.parentNode).datum();
|
|
307
309
|
})
|
|
308
|
-
.style(
|
|
309
|
-
.attr(
|
|
310
|
-
.attr(
|
|
311
|
-
.attr(
|
|
312
|
-
.attr(
|
|
310
|
+
.style('stroke-width', '1px')
|
|
311
|
+
.attr('x1', function (d) { return d.intersectPointX; })
|
|
312
|
+
.attr('y1', function (d) { return d.endPos.y; })
|
|
313
|
+
.attr('x2', function (d) { return d.endPos.x; })
|
|
314
|
+
.attr('y2', function (d) { return d.endPos.y; });
|
|
313
315
|
};
|
|
314
316
|
Pie.prototype.addEventListeners = function () {
|
|
315
317
|
var self = this;
|
|
316
318
|
this.parent
|
|
317
|
-
.selectAll(
|
|
318
|
-
.on(
|
|
319
|
+
.selectAll('path.slice')
|
|
320
|
+
.on('mouseover', function (datum) {
|
|
319
321
|
var hoveredElement = select(this);
|
|
320
322
|
hoveredElement
|
|
321
|
-
.classed(
|
|
322
|
-
.transition(self.services.transitions.getTransition(
|
|
323
|
-
.attr(
|
|
323
|
+
.classed('hovered', true)
|
|
324
|
+
.transition(self.services.transitions.getTransition('pie_slice_mouseover'))
|
|
325
|
+
.attr('d', self.hoverArc);
|
|
324
326
|
// Dispatch mouse event
|
|
325
327
|
self.services.events.dispatchEvent(Events.Pie.SLICE_MOUSEOVER, {
|
|
326
328
|
element: select(this),
|
|
327
|
-
datum: datum
|
|
329
|
+
datum: datum,
|
|
328
330
|
});
|
|
329
331
|
var groupMapsTo = self.getOptions().data.groupMapsTo;
|
|
330
332
|
// Show tooltip
|
|
@@ -333,49 +335,49 @@ var Pie = /** @class */ (function (_super) {
|
|
|
333
335
|
items: [
|
|
334
336
|
{
|
|
335
337
|
label: datum.data[groupMapsTo],
|
|
336
|
-
value: datum.data.value
|
|
337
|
-
}
|
|
338
|
-
]
|
|
338
|
+
value: datum.data.value,
|
|
339
|
+
},
|
|
340
|
+
],
|
|
339
341
|
});
|
|
340
342
|
})
|
|
341
|
-
.on(
|
|
343
|
+
.on('mousemove', function (datum) {
|
|
342
344
|
var hoveredElement = select(this);
|
|
343
345
|
// Dispatch mouse event
|
|
344
346
|
self.services.events.dispatchEvent(Events.Pie.SLICE_MOUSEMOVE, {
|
|
345
347
|
element: hoveredElement,
|
|
346
|
-
datum: datum
|
|
348
|
+
datum: datum,
|
|
347
349
|
});
|
|
348
350
|
// Show tooltip
|
|
349
351
|
self.services.events.dispatchEvent(Events.Tooltip.MOVE);
|
|
350
352
|
})
|
|
351
|
-
.on(
|
|
353
|
+
.on('click', function (datum) {
|
|
352
354
|
// Dispatch mouse event
|
|
353
355
|
self.services.events.dispatchEvent(Events.Pie.SLICE_CLICK, {
|
|
354
356
|
element: select(this),
|
|
355
|
-
datum: datum
|
|
357
|
+
datum: datum,
|
|
356
358
|
});
|
|
357
359
|
})
|
|
358
|
-
.on(
|
|
360
|
+
.on('mouseout', function (datum) {
|
|
359
361
|
var hoveredElement = select(this);
|
|
360
362
|
hoveredElement
|
|
361
|
-
.classed(
|
|
362
|
-
.transition(self.services.transitions.getTransition(
|
|
363
|
-
.attr(
|
|
363
|
+
.classed('hovered', false)
|
|
364
|
+
.transition(self.services.transitions.getTransition('pie_slice_mouseover'))
|
|
365
|
+
.attr('d', self.arc);
|
|
364
366
|
// Dispatch mouse event
|
|
365
367
|
self.services.events.dispatchEvent(Events.Pie.SLICE_MOUSEOUT, {
|
|
366
368
|
element: hoveredElement,
|
|
367
|
-
datum: datum
|
|
369
|
+
datum: datum,
|
|
368
370
|
});
|
|
369
371
|
// Hide tooltip
|
|
370
372
|
self.services.events.dispatchEvent(Events.Tooltip.HIDE, {
|
|
371
|
-
hoveredElement: hoveredElement
|
|
373
|
+
hoveredElement: hoveredElement,
|
|
372
374
|
});
|
|
373
375
|
});
|
|
374
376
|
};
|
|
375
377
|
// Helper functions
|
|
376
378
|
Pie.prototype.computeRadius = function () {
|
|
377
379
|
var _a = DOMUtils.getSVGElementSize(this.parent, {
|
|
378
|
-
useAttrs: true
|
|
380
|
+
useAttrs: true,
|
|
379
381
|
}), width = _a.width, height = _a.height;
|
|
380
382
|
var radius = Math.min(width, height) / 2;
|
|
381
383
|
return radius + Configuration.pie.radiusOffset;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pie.js","sourceRoot":"","sources":["pie.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;AACpC,OAAO,EACN,iBAAiB,EACjB,KAAK,EACL,MAAM,EACN,UAAU,EACV,mBAAmB,EACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,aAAa,MAAM,qBAAqB,CAAC;AAErD,aAAa;AACb,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,2BAA2B;AAC3B,SAAS,QAAQ,CAAC,CAAC,EAAE,OAAO;IAA5B,iBAOC;IANA,IAAM,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAExC,OAAO,UAAC,CAAC;QACR,KAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACrB,OAAO,OAAO,CAAC,KAAI,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC,CAAC;AACH,CAAC;AAED;IAAyB,uBAAS;IAAlC;QAAA,qEAscC;QArcA,UAAI,GAAG,KAAK,CAAC;QAsVb,wDAAwD;QACxD,yBAAmB,GAAG,UAAC,KAAkB;YAChC,IAAA,4CAAc,CAAkB;YAChC,IAAA,iDAAW,CAA4B;YAE/C,KAAI,CAAC,MAAM;iBACT,SAAS,CAAC,YAAY,CAAC;iBACvB,UAAU,CACV,KAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAC3D;iBACA,IAAI,CAAC,SAAS,EAAE,UAAC,CAAC;gBAClB,OAAA,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,cAAc,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAAhE,CAAgE,CAChE,CAAC;QACJ,CAAC,CAAC;QAEF,4BAA4B;QAC5B,0BAAoB,GAAG,UAAC,KAAkB;YACzC,KAAI,CAAC,MAAM;iBACT,SAAS,CAAC,YAAY,CAAC;iBACvB,UAAU,CACV,KAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAC9D;iBACA,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QACtB,CAAC,CAAC;;IAwFH,CAAC;IA7bA,kBAAI,GAAJ;QACC,IAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAE5C,iDAAiD;QACjD,cAAc,CAAC,gBAAgB,CAC9B,MAAM,CAAC,MAAM,CAAC,UAAU,EACxB,IAAI,CAAC,mBAAmB,CACxB,CAAC;QAEF,gDAAgD;QAChD,cAAc,CAAC,gBAAgB,CAC9B,MAAM,CAAC,MAAM,CAAC,aAAa,EAC3B,IAAI,CAAC,oBAAoB,CACzB,CAAC;IACH,CAAC;IAED,4BAAc,GAAd;QACC,OAAO,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC;IACtC,CAAC;IAED,oBAAM,GAAN,UAAO,OAAc;QAArB,iBAkNC;QAlNM,wBAAA,EAAA,cAAc;QACpB,IAAM,IAAI,GAAG,IAAI,CAAC;QAClB,IAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAEnC,IAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;QAChD,IAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,IAAA,sCAAW,CAAkB;QAErC,kCAAkC;QAClC,IAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAEpC,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAExE,2BAA2B;QAC3B,IAAI,CAAC,QAAQ,GAAG,GAAG,EAAE;aACnB,WAAW,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;aAClC,WAAW,CAAC,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;QAErE,uBAAuB;QACvB,IAAM,SAAS,GAAG,GAAG,EAAE;aACrB,KAAK,CAAC,UAAC,CAAM,IAAK,OAAA,CAAC,CAAC,KAAK,EAAP,CAAO,CAAC;aAC1B,IAAI,CAAC,IAAI,CAAC;aACV,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAEvC,oEAAoE;QACpE,IAAM,aAAa,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC,IAAI,CAChD,UAAC,CAAM,EAAE,CAAM,IAAK,OAAA,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,EAAjB,CAAiB,CACrC,CAAC;QAEF,4BAA4B;QAC5B,IAAM,WAAW,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,EAAE,UAAU,CAAC;aAC1D,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC;aACzB,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAE9B,IAAM,KAAK,GAAG,WAAW;aACvB,SAAS,CAAC,YAAY,CAAC;aACvB,IAAI,CAAC,aAAa,EAAE,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,EAAnB,CAAmB,CAAC,CAAC;QAElD,uCAAuC;QACvC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAEzC,2CAA2C;QAC3C,IAAM,aAAa,GAAG,KAAK;aACzB,KAAK,EAAE;aACP,MAAM,CAAC,MAAM,CAAC;aACd,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;aACtB,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAErB,2DAA2D;QAC3D,aAAa;aACX,KAAK,CAAC,KAAK,CAAC;aACZ,IAAI,CAAC,OAAO,EAAE,UAAC,CAAC;YAChB,OAAA,KAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC;gBAC5B,cAAc,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC;gBAC1C,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;gBAClC,iBAAiB,EAAE,OAAO;aAC1B,CAAC;QAJF,CAIE,CACF;aACA,KAAK,CAAC,MAAM,EAAE,UAAC,CAAC,IAAK,OAAA,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,EAA5C,CAA4C,CAAC;aAClE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC;aACnB,UAAU,CACV,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CACtC,wBAAwB,EACxB,OAAO,CACP,CACD;aACA,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YACnB,OAAO;aACN,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,eAAe,CAAC;aACnC,IAAI,CAAC,sBAAsB,EAAE,OAAO,CAAC;aACrC,IAAI,CACJ,YAAY,EACZ,UAAC,CAAC;YACD,OAAG,CAAC,CAAC,KAAK,WACT,KAAK,CAAC,wBAAwB,CAC7B,CAAC,CAAC,IAAI,CAAC,KAAK,EACZ,WAAW,CACX,GAAG,GAAG,CACN;QALF,CAKE,CACH;YACD,QAAQ;aACP,SAAS,CAAC,GAAG,EAAE,UAAU,CAAC;YAC1B,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEJ,wBAAwB;QACxB,IAAM,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,KAAK,GAAG,CAAC,EAAX,CAAW,CAAC,CAAC;QAC3D,IAAM,WAAW,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,EAAE,UAAU,CAAC;aAC1D,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC;aACzB,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAE9B,IAAM,MAAM,GAAG,WAAW;aACxB,SAAS,CAAC,gBAAgB,CAAC;aAC3B,IAAI,CAAC,SAAS,EAAE,UAAC,CAAM,IAAK,OAAA,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,EAAnB,CAAmB,CAAC,CAAC;QAEnD,kCAAkC;QAClC,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAE1C,uCAAuC;QACvC,IAAM,cAAc,GAAG,MAAM;aAC3B,KAAK,EAAE;aACP,MAAM,CAAC,MAAM,CAAC;aACd,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAE7B,yDAAyD;QACzD,IAAM,WAAW,GAAG,EAAE,CAAC;QACvB,cAAc;aACZ,KAAK,CAAC,MAAM,CAAC;aACb,KAAK,CAAC,aAAa,EAAE,QAAQ,CAAC;aAC9B,IAAI,CAAC,UAAC,CAAC;YACP,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE;gBACjC,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;aACvC;YAED,OAAO,CACN,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC;gBACzD,GAAG,CACH,CAAC;QACH,CAAC,CAAC;YACF,6CAA6C;aAC5C,KAAK,CAAC,UAAU,CAAC;YACjB,IAAM,cAAc,GAAG,MAAM,GAAG,CAAC,CAAC;YAElC,IAAM,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC;YAC7D,IAAM,GAAG,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;YAEpC,IAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAChD,CAAC,CAAC,WAAW,GAAG,UAAU,GAAG,CAAC,CAAC;YAC/B,CAAC,CAAC,WAAW,GAAG,GAAG,GAAG,EAAE,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAE/C,CAAC,CAAC,SAAS;gBACV,CAAC,CAAC,CAAC,WAAW,GAAG,cAAc,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACpD,CAAC,CAAC,SAAS;gBACV,CAAC,CAAC,CAAC,WAAW,GAAG,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAErD,OAAO,CAAC,CAAC;QACV,CAAC,CAAC;aACD,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,CAAC;YAChC,IAAM,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC;YACrC,IAAM,aAAa,GAClB,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;YAE/C,4DAA4D;YAC5D,IAAI,CAAC,IAAI,WAAW,GAAG,CAAC,EAAE;gBACzB,IACC,aAAa,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,EACvD;oBACD,IAAI,eAAe,SAAA,EAAE,eAAe,SAAA,CAAC;oBACrC,IAAI,CAAC,CAAC,KAAK,KAAK,WAAW,GAAG,CAAC,EAAE;wBAChC,eAAe;4BACd,CAAC,CAAC,SAAS;gCACX,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO;gCACjC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU;gCACpC,CAAC,CAAC,WAAW,CAAC;wBACf,eAAe;4BACd,CAAC,CAAC,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;wBAEjD,2BAA2B;wBAC3B,CAAC,CAAC,SAAS,GAAG,iBAAiB,CAAC,KAAK,CAAC;wBACtC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;qBACpB;yBAAM;wBACN,eAAe;4BACd,CAAC,CAAC,SAAS;gCACX,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO;gCACjC,CAAC,CAAC,WAAW;gCACb,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC;wBACtC,eAAe;4BACd,CAAC,CAAC,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;wBAEjD,2BAA2B;wBAC3B,CAAC,CAAC,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC;wBACrC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;qBACpB;oBAED,OAAO,eAAa,eAAe,UAAK,eAAe,MAAG,CAAC;iBAC3D;aACD;YAED,OAAO,eAAa,CAAC,CAAC,SAAS,UAAK,CAAC,CAAC,SAAS,MAAG,CAAC;QACpD,CAAC,CAAC,CAAC;QAEJ,4BAA4B;QAC5B,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QAEjC,IAAM,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC;YACrD,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,KAAK,CAAC;QACT,IAAM,SAAS,GAAG,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;QAE9D,IAAA;;gBAAK,CAEV;QAEH,eAAe;QACf,IAAI,aAAa,GAAG,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC;QACvD,IAAI,SAAS,KAAK,UAAU,CAAC,MAAM,EAAE;YACpC,aAAa,GAAG,KAAK,GAAG,CAAC,CAAC;SAC1B;aAAM,IAAI,SAAS,KAAK,UAAU,CAAC,KAAK,EAAE;YAC1C,aAAa,GAAG,KAAK,GAAG,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC;SAC3D;QAED,IAAI,aAAa,GAAG,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC;QACvD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3B,aAAa,IAAI,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC;SAClD;QAED,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,eAAa,aAAa,UAAK,aAAa,MAAG,CAAC,CAAC;QAEvE,sBAAsB;QACtB,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC1B,CAAC;IAED,4BAAc,GAAd,UAAe,WAAkB;QAChC,IAAM,GAAG,GAAG,QAAQ,CAAC,cAAc,CAClC,IAAI,CAAC,eAAe,EAAE,EACtB,YAAY,CACZ;aACC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC;aACzB,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QAEhC,0BAA0B;QAC1B,IAAM,QAAQ,GAAG,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAE9D,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;QAEzB,IAAM,gBAAgB,GAAG,QAAQ;aAC/B,KAAK,EAAE;aACP,MAAM,CAAC,GAAG,CAAC;aACX,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC;YACzB,OAAO;aACN,IAAI,CAAC,MAAM,EAAK,KAAK,CAAC,eAAe,SAAI,KAAK,CAAC,KAAO,CAAC;aACvD,IAAI,CAAC,sBAAsB,EAAE,eAAe,CAAC,CAAC;QAEhD,sCAAsC;QACtC,+CAA+C;QAC/C,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC;YACzC,IAAA,uBAAS,EAAE,uBAAS,EAAE,uBAAS,CAAO;YAE9C,IAAI,SAAS,KAAK,iBAAiB,CAAC,KAAK,EAAE;gBAC1C,CAAC,CAAC,QAAQ,GAAG;oBACZ,CAAC,EAAE,SAAS;oBACZ,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,WAAW;iBAC5B,CAAC;gBAEF,oCAAoC;gBACpC,CAAC,CAAC,MAAM,GAAG;oBACV,CAAC,EAAE,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO;oBAChD,CAAC,EACA,SAAS;wBACT,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO;wBACjC,CAAC,CAAC,WAAW;iBACd,CAAC;gBAEF,6DAA6D;gBAC7D,CAAC,CAAC,eAAe;oBAChB,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,oBAAoB,CAAC;aAC7D;iBAAM;gBACN,sCAAsC;gBACtC,CAAC,CAAC,QAAQ,GAAG;oBACZ,CAAC,EAAE,SAAS;oBACZ,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,WAAW;iBAC5B,CAAC;gBAEF,0EAA0E;gBAC1E,CAAC,CAAC,MAAM,GAAG;oBACV,CAAC,EAAE,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO;oBAChD,CAAC,EACA,SAAS;wBACT,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO;wBACjC,CAAC,CAAC,WAAW;iBACd,CAAC;gBAEF,6DAA6D;gBAC7D,CAAC,CAAC,eAAe;oBAChB,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,oBAAoB,CAAC;aAC7D;YAED,8CAA8C;YAC9C,OAAO,CAAC,CAAC;QACV,CAAC,CAAC,CAAC;QAEH,qBAAqB;QACrB,IAAM,qBAAqB,GAAG,gBAAgB;aAC5C,MAAM,CAAC,MAAM,CAAC;aACd,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;QAEjC,qBAAqB;aACnB,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;aAC1C,KAAK,CAAC,UAAU,CAAM;YACtB,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,CAAC;QACxC,CAAC,CAAC;aACD,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC;aAC5B,IAAI,CAAC,IAAI,EAAE,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAZ,CAAY,CAAC;aAC/B,IAAI,CAAC,IAAI,EAAE,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAZ,CAAY,CAAC;aAC/B,IAAI,CAAC,IAAI,EAAE,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,eAAe,EAAjB,CAAiB,CAAC;aACpC,IAAI,CAAC,IAAI,EAAE,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,MAAM,CAAC,CAAC,EAAV,CAAU,CAAC,CAAC;QAEhC,uBAAuB;QACvB,IAAM,uBAAuB,GAAG,gBAAgB;aAC9C,MAAM,CAAC,MAAM,CAAC;aACd,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;QAEnC,uBAAuB;aACrB,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;aAC5C,KAAK,CAAC,UAAU,CAAM;YACtB,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,CAAC;QACxC,CAAC,CAAC;aACD,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC;aAC5B,IAAI,CAAC,IAAI,EAAE,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,eAAe,EAAjB,CAAiB,CAAC;aACpC,IAAI,CAAC,IAAI,EAAE,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,MAAM,CAAC,CAAC,EAAV,CAAU,CAAC;aAC7B,IAAI,CAAC,IAAI,EAAE,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,MAAM,CAAC,CAAC,EAAV,CAAU,CAAC;aAC7B,IAAI,CAAC,IAAI,EAAE,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,MAAM,CAAC,CAAC,EAAV,CAAU,CAAC,CAAC;IACjC,CAAC;IA2BD,+BAAiB,GAAjB;QACC,IAAM,IAAI,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,MAAM;aACT,SAAS,CAAC,YAAY,CAAC;aACvB,EAAE,CAAC,WAAW,EAAE,UAAU,KAAK;YAC/B,IAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YAEpC,cAAc;iBACZ,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC;iBACxB,UAAU,CACV,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CACtC,qBAAqB,CACrB,CACD;iBACA,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAE3B,uBAAuB;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE;gBAC9D,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC;gBACrB,KAAK,OAAA;aACL,CAAC,CAAC;YAEK,IAAA,gDAAW,CAA4B;YAC/C,eAAe;YACf,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE;gBACvD,cAAc,gBAAA;gBACd,KAAK,EAAE;oBACN;wBACC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;wBAC9B,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK;qBACvB;iBACD;aACD,CAAC,CAAC;QACJ,CAAC,CAAC;aACD,EAAE,CAAC,WAAW,EAAE,UAAU,KAAK;YAC/B,IAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YAEpC,uBAAuB;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE;gBAC9D,OAAO,EAAE,cAAc;gBACvB,KAAK,OAAA;aACL,CAAC,CAAC;YAEH,eAAe;YACf,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACzD,CAAC,CAAC;aACD,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK;YAC3B,uBAAuB;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE;gBAC1D,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC;gBACrB,KAAK,OAAA;aACL,CAAC,CAAC;QACJ,CAAC,CAAC;aACD,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK;YAC9B,IAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YACpC,cAAc;iBACZ,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC;iBACzB,UAAU,CACV,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CACtC,qBAAqB,CACrB,CACD;iBACA,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YAEtB,uBAAuB;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE;gBAC7D,OAAO,EAAE,cAAc;gBACvB,KAAK,OAAA;aACL,CAAC,CAAC;YAEH,eAAe;YACf,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE;gBACvD,cAAc,gBAAA;aACd,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,mBAAmB;IACT,2BAAa,GAAvB;QACO,IAAA;;UAEJ,EAFM,gBAAK,EAAE,kBAEb,CAAC;QACH,IAAM,MAAM,GAAW,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QAEnD,OAAO,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC;IAChD,CAAC;IACF,UAAC;AAAD,CAAC,AAtcD,CAAyB,SAAS,GAscjC","sourcesContent":["// Internal Imports\nimport { Component } from \"../component\";\nimport { DOMUtils } from \"../../services\";\nimport { Tools } from \"../../tools\";\nimport {\n\tCalloutDirections,\n\tRoles,\n\tEvents,\n\tAlignments,\n\tColorClassNameTypes\n} from \"../../interfaces\";\nimport * as Configuration from \"../../configuration\";\n\n// D3 Imports\nimport { select } from \"d3-selection\";\nimport { arc, pie } from \"d3-shape\";\nimport { interpolate } from \"d3-interpolate\";\n\n// Pie slice tween function\nfunction arcTween(a, arcFunc) {\n\tconst i = interpolate(this._current, a);\n\n\treturn (t) => {\n\t\tthis._current = i(t);\n\t\treturn arcFunc(this._current);\n\t};\n}\n\nexport class Pie extends Component {\n\ttype = \"pie\";\n\n\t// We need to store our arcs\n\t// So that addEventListeners()\n\t// Can access them\n\tarc: any;\n\thoverArc: any;\n\n\tinit() {\n\t\tconst eventsFragment = this.services.events;\n\n\t\t// Highlight correct circle on legend item hovers\n\t\teventsFragment.addEventListener(\n\t\t\tEvents.Legend.ITEM_HOVER,\n\t\t\tthis.handleLegendOnHover\n\t\t);\n\n\t\t// Un-highlight circles on legend item mouseouts\n\t\teventsFragment.addEventListener(\n\t\t\tEvents.Legend.ITEM_MOUSEOUT,\n\t\t\tthis.handleLegendMouseOut\n\t\t);\n\t}\n\n\tgetInnerRadius() {\n\t\treturn Configuration.pie.innerRadius;\n\t}\n\n\trender(animate = true) {\n\t\tconst self = this;\n\t\tconst svg = this.getContainerSVG();\n\n\t\tconst displayData = this.model.getDisplayData();\n\t\tconst options = this.getOptions();\n\t\tconst { groupMapsTo } = options.data;\n\n\t\t// Compute the outer radius needed\n\t\tconst radius = this.computeRadius();\n\n\t\tthis.arc = arc().innerRadius(this.getInnerRadius()).outerRadius(radius);\n\n\t\t// Set the hover arc radius\n\t\tthis.hoverArc = arc()\n\t\t\t.innerRadius(this.getInnerRadius())\n\t\t\t.outerRadius(radius + Configuration.pie.hoverArc.outerRadiusOffset);\n\n\t\t// Setup the pie layout\n\t\tconst pieLayout = pie()\n\t\t\t.value((d: any) => d.value)\n\t\t\t.sort(null)\n\t\t\t.padAngle(Configuration.pie.padAngle);\n\n\t\t// Sort pie layout data based off of the indecies the layout creates\n\t\tconst pieLayoutData = pieLayout(displayData).sort(\n\t\t\t(a: any, b: any) => a.index - b.index\n\t\t);\n\n\t\t// Update data on all slices\n\t\tconst slicesGroup = DOMUtils.appendOrSelect(svg, \"g.slices\")\n\t\t\t.attr(\"role\", Roles.GROUP)\n\t\t\t.attr(\"data-name\", \"slices\");\n\n\t\tconst paths = slicesGroup\n\t\t\t.selectAll(\"path.slice\")\n\t\t\t.data(pieLayoutData, (d) => d.data[groupMapsTo]);\n\n\t\t// Remove slices that need to be exited\n\t\tpaths.exit().attr(\"opacity\", 0).remove();\n\n\t\t// Add new slices that are being introduced\n\t\tconst enteringPaths = paths\n\t\t\t.enter()\n\t\t\t.append(\"path\")\n\t\t\t.classed(\"slice\", true)\n\t\t\t.attr(\"opacity\", 0);\n\n\t\t// Update styles & position on existing and entering slices\n\t\tenteringPaths\n\t\t\t.merge(paths)\n\t\t\t.attr(\"class\", (d) =>\n\t\t\t\tthis.model.getColorClassName({\n\t\t\t\t\tclassNameTypes: [ColorClassNameTypes.FILL],\n\t\t\t\t\tdataGroupName: d.data[groupMapsTo],\n\t\t\t\t\toriginalClassName: \"slice\"\n\t\t\t\t})\n\t\t\t)\n\t\t\t.style(\"fill\", (d) => self.model.getFillColor(d.data[groupMapsTo]))\n\t\t\t.attr(\"d\", this.arc)\n\t\t\t.transition(\n\t\t\t\tthis.services.transitions.getTransition(\n\t\t\t\t\t\"pie-slice-enter-update\",\n\t\t\t\t\tanimate\n\t\t\t\t)\n\t\t\t)\n\t\t\t.attr(\"opacity\", 1)\n\t\t\t// a11y\n\t\t\t.attr(\"role\", Roles.GRAPHICS_SYMBOL)\n\t\t\t.attr(\"aria-roledescription\", \"slice\")\n\t\t\t.attr(\n\t\t\t\t\"aria-label\",\n\t\t\t\t(d) =>\n\t\t\t\t\t`${d.value}, ${\n\t\t\t\t\t\tTools.convertValueToPercentage(\n\t\t\t\t\t\t\td.data.value,\n\t\t\t\t\t\t\tdisplayData\n\t\t\t\t\t\t) + \"%\"\n\t\t\t\t\t}`\n\t\t\t)\n\t\t\t// Tween\n\t\t\t.attrTween(\"d\", function (a) {\n\t\t\t\treturn arcTween.bind(this)(a, self.arc);\n\t\t\t});\n\n\t\t// Draw the slice labels\n\t\tconst labelData = pieLayoutData.filter((x) => x.value > 0);\n\t\tconst labelsGroup = DOMUtils.appendOrSelect(svg, \"g.labels\")\n\t\t\t.attr(\"role\", Roles.GROUP)\n\t\t\t.attr(\"data-name\", \"labels\");\n\n\t\tconst labels = labelsGroup\n\t\t\t.selectAll(\"text.pie-label\")\n\t\t\t.data(labelData, (d: any) => d.data[groupMapsTo]);\n\n\t\t// Remove labels that are existing\n\t\tlabels.exit().attr(\"opacity\", 0).remove();\n\n\t\t// Add labels that are being introduced\n\t\tconst enteringLabels = labels\n\t\t\t.enter()\n\t\t\t.append(\"text\")\n\t\t\t.classed(\"pie-label\", true);\n\n\t\t// Update styles & position on existing & entering labels\n\t\tconst calloutData = [];\n\t\tenteringLabels\n\t\t\t.merge(labels)\n\t\t\t.style(\"text-anchor\", \"middle\")\n\t\t\t.text((d) => {\n\t\t\t\tif (options.pie.labels.formatter) {\n\t\t\t\t\treturn options.pie.labels.formatter(d);\n\t\t\t\t}\n\n\t\t\t\treturn (\n\t\t\t\t\tTools.convertValueToPercentage(d.data.value, displayData) +\n\t\t\t\t\t\"%\"\n\t\t\t\t);\n\t\t\t})\n\t\t\t// Calculate dimensions in order to transform\n\t\t\t.datum(function (d) {\n\t\t\t\tconst marginedRadius = radius + 7;\n\n\t\t\t\tconst theta = (d.endAngle - d.startAngle) / 2 + d.startAngle;\n\t\t\t\tconst deg = (theta / Math.PI) * 180;\n\n\t\t\t\tconst textLength = this.getComputedTextLength();\n\t\t\t\td.textOffsetX = textLength / 2;\n\t\t\t\td.textOffsetY = deg > 90 && deg < 270 ? 10 : 0;\n\n\t\t\t\td.xPosition =\n\t\t\t\t\t(d.textOffsetX + marginedRadius) * Math.sin(theta);\n\t\t\t\td.yPosition =\n\t\t\t\t\t(d.textOffsetY + marginedRadius) * -Math.cos(theta);\n\n\t\t\t\treturn d;\n\t\t\t})\n\t\t\t.attr(\"transform\", function (d, i) {\n\t\t\t\tconst totalSlices = labelData.length;\n\t\t\t\tconst sliceAngleDeg =\n\t\t\t\t\t(d.endAngle - d.startAngle) * (180 / Math.PI);\n\n\t\t\t\t// check if last 2 slices (or just last) are < the threshold\n\t\t\t\tif (i >= totalSlices - 2) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tsliceAngleDeg < Configuration.pie.callout.minSliceDegree\n\t\t\t\t\t) {\n\t\t\t\t\t\tlet labelTranslateX, labelTranslateY;\n\t\t\t\t\t\tif (d.index === totalSlices - 1) {\n\t\t\t\t\t\t\tlabelTranslateX =\n\t\t\t\t\t\t\t\td.xPosition +\n\t\t\t\t\t\t\t\tConfiguration.pie.callout.offsetX +\n\t\t\t\t\t\t\t\tConfiguration.pie.callout.textMargin +\n\t\t\t\t\t\t\t\td.textOffsetX;\n\t\t\t\t\t\t\tlabelTranslateY =\n\t\t\t\t\t\t\t\td.yPosition - Configuration.pie.callout.offsetY;\n\n\t\t\t\t\t\t\t// Set direction of callout\n\t\t\t\t\t\t\td.direction = CalloutDirections.RIGHT;\n\t\t\t\t\t\t\tcalloutData.push(d);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlabelTranslateX =\n\t\t\t\t\t\t\t\td.xPosition -\n\t\t\t\t\t\t\t\tConfiguration.pie.callout.offsetX -\n\t\t\t\t\t\t\t\td.textOffsetX -\n\t\t\t\t\t\t\t\tConfiguration.pie.callout.textMargin;\n\t\t\t\t\t\t\tlabelTranslateY =\n\t\t\t\t\t\t\t\td.yPosition - Configuration.pie.callout.offsetY;\n\n\t\t\t\t\t\t\t// Set direction of callout\n\t\t\t\t\t\t\td.direction = CalloutDirections.LEFT;\n\t\t\t\t\t\t\tcalloutData.push(d);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn `translate(${labelTranslateX}, ${labelTranslateY})`;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn `translate(${d.xPosition}, ${d.yPosition})`;\n\t\t\t});\n\n\t\t// Render pie label callouts\n\t\tthis.renderCallouts(calloutData);\n\n\t\tconst optionName = Tools.getProperty(options, \"donut\")\n\t\t\t? \"donut\"\n\t\t\t: \"pie\";\n\t\tconst alignment = Tools.getProperty(options, optionName, \"alignment\");\n\n\t\tconst { width } = DOMUtils.getSVGElementSize(this.getParent(), {\n\t\t\tuseAttr: true\n\t\t});\n\n\t\t// Position Pie\n\t\tlet pieTranslateX = radius + Configuration.pie.xOffset;\n\t\tif (alignment === Alignments.CENTER) {\n\t\t\tpieTranslateX = width / 2;\n\t\t} else if (alignment === Alignments.RIGHT) {\n\t\t\tpieTranslateX = width - radius - Configuration.pie.xOffset;\n\t\t}\n\n\t\tlet pieTranslateY = radius + Configuration.pie.yOffset;\n\t\tif (calloutData.length > 0) {\n\t\t\tpieTranslateY += Configuration.pie.yOffsetCallout;\n\t\t}\n\n\t\tsvg.attr(\"transform\", `translate(${pieTranslateX}, ${pieTranslateY})`);\n\n\t\t// Add event listeners\n\t\tthis.addEventListeners();\n\t}\n\n\trenderCallouts(calloutData: any[]) {\n\t\tconst svg = DOMUtils.appendOrSelect(\n\t\t\tthis.getContainerSVG(),\n\t\t\t\"g.callouts\"\n\t\t)\n\t\t\t.attr(\"role\", Roles.GROUP)\n\t\t\t.attr(\"data-name\", \"callouts\");\n\n\t\t// Update data on callouts\n\t\tconst callouts = svg.selectAll(\"g.callout\").data(calloutData);\n\n\t\tcallouts.exit().remove();\n\n\t\tconst enteringCallouts = callouts\n\t\t\t.enter()\n\t\t\t.append(\"g\")\n\t\t\t.classed(\"callout\", true)\n\t\t\t// a11y\n\t\t\t.attr(\"role\", `${Roles.GRAPHICS_SYMBOL} ${Roles.GROUP}`)\n\t\t\t.attr(\"aria-roledescription\", \"label callout\");\n\n\t\t// Update data values for each callout\n\t\t// For the horizontal and vertical lines to use\n\t\tenteringCallouts.merge(callouts).datum(function (d) {\n\t\t\tconst { xPosition, yPosition, direction } = d;\n\n\t\t\tif (direction === CalloutDirections.RIGHT) {\n\t\t\t\td.startPos = {\n\t\t\t\t\tx: xPosition,\n\t\t\t\t\ty: yPosition + d.textOffsetY\n\t\t\t\t};\n\n\t\t\t\t// end position for the callout line\n\t\t\t\td.endPos = {\n\t\t\t\t\tx: xPosition + Configuration.pie.callout.offsetX,\n\t\t\t\t\ty:\n\t\t\t\t\t\tyPosition -\n\t\t\t\t\t\tConfiguration.pie.callout.offsetY +\n\t\t\t\t\t\td.textOffsetY\n\t\t\t\t};\n\n\t\t\t\t// the intersection point of the vertical and horizontal line\n\t\t\t\td.intersectPointX =\n\t\t\t\t\td.endPos.x - Configuration.pie.callout.horizontalLineLength;\n\t\t\t} else {\n\t\t\t\t// start position for the callout line\n\t\t\t\td.startPos = {\n\t\t\t\t\tx: xPosition,\n\t\t\t\t\ty: yPosition + d.textOffsetY\n\t\t\t\t};\n\n\t\t\t\t// end position for the callout line should be bottom aligned to the title\n\t\t\t\td.endPos = {\n\t\t\t\t\tx: xPosition - Configuration.pie.callout.offsetX,\n\t\t\t\t\ty:\n\t\t\t\t\t\tyPosition -\n\t\t\t\t\t\tConfiguration.pie.callout.offsetY +\n\t\t\t\t\t\td.textOffsetY\n\t\t\t\t};\n\n\t\t\t\t// the intersection point of the vertical and horizontal line\n\t\t\t\td.intersectPointX =\n\t\t\t\t\td.endPos.x + Configuration.pie.callout.horizontalLineLength;\n\t\t\t}\n\n\t\t\t// Store the necessary data in the DOM element\n\t\t\treturn d;\n\t\t});\n\n\t\t// draw vertical line\n\t\tconst enteringVerticalLines = enteringCallouts\n\t\t\t.append(\"line\")\n\t\t\t.classed(\"vertical-line\", true);\n\n\t\tenteringVerticalLines\n\t\t\t.merge(svg.selectAll(\"line.vertical-line\"))\n\t\t\t.datum(function (d: any) {\n\t\t\t\treturn select(this.parentNode).datum();\n\t\t\t})\n\t\t\t.style(\"stroke-width\", \"1px\")\n\t\t\t.attr(\"x1\", (d) => d.startPos.x)\n\t\t\t.attr(\"y1\", (d) => d.startPos.y)\n\t\t\t.attr(\"x2\", (d) => d.intersectPointX)\n\t\t\t.attr(\"y2\", (d) => d.endPos.y);\n\n\t\t// draw horizontal line\n\t\tconst enteringHorizontalLines = enteringCallouts\n\t\t\t.append(\"line\")\n\t\t\t.classed(\"horizontal-line\", true);\n\n\t\tenteringHorizontalLines\n\t\t\t.merge(svg.selectAll(\"line.horizontal-line\"))\n\t\t\t.datum(function (d: any) {\n\t\t\t\treturn select(this.parentNode).datum();\n\t\t\t})\n\t\t\t.style(\"stroke-width\", \"1px\")\n\t\t\t.attr(\"x1\", (d) => d.intersectPointX)\n\t\t\t.attr(\"y1\", (d) => d.endPos.y)\n\t\t\t.attr(\"x2\", (d) => d.endPos.x)\n\t\t\t.attr(\"y2\", (d) => d.endPos.y);\n\t}\n\n\t// Highlight elements that match the hovered legend item\n\thandleLegendOnHover = (event: CustomEvent) => {\n\t\tconst { hoveredElement } = event.detail;\n\t\tconst { groupMapsTo } = this.getOptions().data;\n\n\t\tthis.parent\n\t\t\t.selectAll(\"path.slice\")\n\t\t\t.transition(\n\t\t\t\tthis.services.transitions.getTransition(\"legend-hover-bar\")\n\t\t\t)\n\t\t\t.attr(\"opacity\", (d) =>\n\t\t\t\td.data[groupMapsTo] !== hoveredElement.datum()[\"name\"] ? 0.3 : 1\n\t\t\t);\n\t};\n\n\t// Un-highlight all elements\n\thandleLegendMouseOut = (event: CustomEvent) => {\n\t\tthis.parent\n\t\t\t.selectAll(\"path.slice\")\n\t\t\t.transition(\n\t\t\t\tthis.services.transitions.getTransition(\"legend-mouseout-bar\")\n\t\t\t)\n\t\t\t.attr(\"opacity\", 1);\n\t};\n\n\taddEventListeners() {\n\t\tconst self = this;\n\t\tthis.parent\n\t\t\t.selectAll(\"path.slice\")\n\t\t\t.on(\"mouseover\", function (datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\n\t\t\t\thoveredElement\n\t\t\t\t\t.classed(\"hovered\", true)\n\t\t\t\t\t.transition(\n\t\t\t\t\t\tself.services.transitions.getTransition(\n\t\t\t\t\t\t\t\"pie_slice_mouseover\"\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t.attr(\"d\", self.hoverArc);\n\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Pie.SLICE_MOUSEOVER, {\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum\n\t\t\t\t});\n\n\t\t\t\tconst { groupMapsTo } = self.getOptions().data;\n\t\t\t\t// Show tooltip\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.SHOW, {\n\t\t\t\t\thoveredElement,\n\t\t\t\t\titems: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: datum.data[groupMapsTo],\n\t\t\t\t\t\t\tvalue: datum.data.value\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on(\"mousemove\", function (datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Pie.SLICE_MOUSEMOVE, {\n\t\t\t\t\telement: hoveredElement,\n\t\t\t\t\tdatum\n\t\t\t\t});\n\n\t\t\t\t// Show tooltip\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.MOVE);\n\t\t\t})\n\t\t\t.on(\"click\", function (datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Pie.SLICE_CLICK, {\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on(\"mouseout\", function (datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\t\t\t\thoveredElement\n\t\t\t\t\t.classed(\"hovered\", false)\n\t\t\t\t\t.transition(\n\t\t\t\t\t\tself.services.transitions.getTransition(\n\t\t\t\t\t\t\t\"pie_slice_mouseover\"\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t.attr(\"d\", self.arc);\n\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Pie.SLICE_MOUSEOUT, {\n\t\t\t\t\telement: hoveredElement,\n\t\t\t\t\tdatum\n\t\t\t\t});\n\n\t\t\t\t// Hide tooltip\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.HIDE, {\n\t\t\t\t\thoveredElement\n\t\t\t\t});\n\t\t\t});\n\t}\n\n\t// Helper functions\n\tprotected computeRadius() {\n\t\tconst { width, height } = DOMUtils.getSVGElementSize(this.parent, {\n\t\t\tuseAttrs: true\n\t\t});\n\t\tconst radius: number = Math.min(width, height) / 2;\n\n\t\treturn radius + Configuration.pie.radiusOffset;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"pie.js","sourceRoot":"","sources":["pie.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from '../component';\nimport { DOMUtils } from '../../services';\nimport { Tools } from '../../tools';\nimport {\n\tCalloutDirections,\n\tRoles,\n\tEvents,\n\tAlignments,\n\tColorClassNameTypes,\n} from '../../interfaces';\nimport * as Configuration from '../../configuration';\n\n// D3 Imports\nimport { select } from 'd3-selection';\nimport { arc, pie } from 'd3-shape';\nimport { interpolate } from 'd3-interpolate';\n\n// Pie slice tween function\nfunction arcTween(a, arcFunc) {\n\tconst i = interpolate(this._current, a);\n\n\treturn (t) => {\n\t\tthis._current = i(t);\n\t\treturn arcFunc(this._current);\n\t};\n}\n\nexport class Pie extends Component {\n\ttype = 'pie';\n\n\t// We need to store our arcs\n\t// So that addEventListeners()\n\t// Can access them\n\tarc: any;\n\thoverArc: any;\n\n\tinit() {\n\t\tconst eventsFragment = this.services.events;\n\n\t\t// Highlight correct circle on legend item hovers\n\t\teventsFragment.addEventListener(\n\t\t\tEvents.Legend.ITEM_HOVER,\n\t\t\tthis.handleLegendOnHover\n\t\t);\n\n\t\t// Un-highlight circles on legend item mouseouts\n\t\teventsFragment.addEventListener(\n\t\t\tEvents.Legend.ITEM_MOUSEOUT,\n\t\t\tthis.handleLegendMouseOut\n\t\t);\n\t}\n\n\tgetInnerRadius() {\n\t\treturn Configuration.pie.innerRadius;\n\t}\n\n\trender(animate = true) {\n\t\tconst self = this;\n\t\tconst svg = this.getContainerSVG();\n\n\t\t// remove any slices that are valued at 0 because they dont need to be rendered and will create extra padding\n\t\tconst displayData = this.model.getDisplayData()\n\t\t\t.filter(data => data.value > 0);\n\t\tconst options = this.getOptions();\n\t\tconst { groupMapsTo } = options.data;\n\n\t\t// Compute the outer radius needed\n\t\tconst radius = this.computeRadius();\n\n\t\tthis.arc = arc().innerRadius(this.getInnerRadius()).outerRadius(radius);\n\n\t\t// Set the hover arc radius\n\t\tthis.hoverArc = arc()\n\t\t\t.innerRadius(this.getInnerRadius())\n\t\t\t.outerRadius(radius + Configuration.pie.hoverArc.outerRadiusOffset);\n\n\t\t// Setup the pie layout\n\t\tconst pieLayout = pie()\n\t\t\t.value((d: any) => d.value)\n\t\t\t.sort(null)\n\t\t\t.padAngle(Configuration.pie.padAngle);\n\n\t\t// Sort pie layout data based off of the indecies the layout creates\n\t\tconst pieLayoutData = pieLayout(displayData).sort(\n\t\t\t(a: any, b: any) => a.index - b.index\n\t\t);\n\n\t\t// Update data on all slices\n\t\tconst slicesGroup = DOMUtils.appendOrSelect(svg, 'g.slices')\n\t\t\t.attr('role', Roles.GROUP)\n\t\t\t.attr('data-name', 'slices');\n\n\t\tconst paths = slicesGroup\n\t\t\t.selectAll('path.slice')\n\t\t\t.data(pieLayoutData, (d) => d.data[groupMapsTo]);\n\n\t\t// Remove slices that need to be exited\n\t\tpaths.exit().attr('opacity', 0).remove();\n\n\t\t// Add new slices that are being introduced\n\t\tconst enteringPaths = paths\n\t\t\t.enter()\n\t\t\t.append('path')\n\t\t\t.classed('slice', true)\n\t\t\t.attr('opacity', 0);\n\n\t\t// Update styles & position on existing and entering slices\n\t\tenteringPaths\n\t\t\t.merge(paths)\n\t\t\t.attr('class', (d) =>\n\t\t\t\tthis.model.getColorClassName({\n\t\t\t\t\tclassNameTypes: [ColorClassNameTypes.FILL],\n\t\t\t\t\tdataGroupName: d.data[groupMapsTo],\n\t\t\t\t\toriginalClassName: 'slice',\n\t\t\t\t})\n\t\t\t)\n\t\t\t.style('fill', (d) => self.model.getFillColor(d.data[groupMapsTo]))\n\t\t\t.attr('d', this.arc)\n\t\t\t.transition(\n\t\t\t\tthis.services.transitions.getTransition(\n\t\t\t\t\t'pie-slice-enter-update',\n\t\t\t\t\tanimate\n\t\t\t\t)\n\t\t\t)\n\t\t\t.attr('opacity', 1)\n\t\t\t// a11y\n\t\t\t.attr('role', Roles.GRAPHICS_SYMBOL)\n\t\t\t.attr('aria-roledescription', 'slice')\n\t\t\t.attr(\n\t\t\t\t'aria-label',\n\t\t\t\t(d) =>\n\t\t\t\t\t`${d.value}, ${\n\t\t\t\t\t\tTools.convertValueToPercentage(\n\t\t\t\t\t\t\td.data.value,\n\t\t\t\t\t\t\tdisplayData\n\t\t\t\t\t\t) + '%'\n\t\t\t\t\t}`\n\t\t\t)\n\t\t\t// Tween\n\t\t\t.attrTween('d', function (a) {\n\t\t\t\treturn arcTween.bind(this)(a, self.arc);\n\t\t\t});\n\n\t\t// Draw the slice labels\n\t\tconst labelData = pieLayoutData.filter((x) => x.value > 0);\n\t\tconst labelsGroup = DOMUtils.appendOrSelect(svg, 'g.labels')\n\t\t\t.attr('role', Roles.GROUP)\n\t\t\t.attr('data-name', 'labels');\n\n\t\tconst labels = labelsGroup\n\t\t\t.selectAll('text.pie-label')\n\t\t\t.data(labelData, (d: any) => d.data[groupMapsTo]);\n\n\t\t// Remove labels that are existing\n\t\tlabels.exit().attr('opacity', 0).remove();\n\n\t\t// Add labels that are being introduced\n\t\tconst enteringLabels = labels\n\t\t\t.enter()\n\t\t\t.append('text')\n\t\t\t.classed('pie-label', true);\n\n\t\t// Update styles & position on existing & entering labels\n\t\tconst calloutData = [];\n\t\tenteringLabels\n\t\t\t.merge(labels)\n\t\t\t.style('text-anchor', 'middle')\n\t\t\t.text((d) => {\n\t\t\t\tif (options.pie.labels.formatter) {\n\t\t\t\t\treturn options.pie.labels.formatter(d);\n\t\t\t\t}\n\n\t\t\t\treturn (\n\t\t\t\t\tTools.convertValueToPercentage(d.data.value, displayData) +\n\t\t\t\t\t'%'\n\t\t\t\t);\n\t\t\t})\n\t\t\t// Calculate dimensions in order to transform\n\t\t\t.datum(function (d) {\n\t\t\t\tconst marginedRadius = radius + 7;\n\n\t\t\t\tconst theta = (d.endAngle - d.startAngle) / 2 + d.startAngle;\n\t\t\t\tconst deg = (theta / Math.PI) * 180;\n\n\t\t\t\tconst textLength = this.getComputedTextLength();\n\t\t\t\td.textOffsetX = textLength / 2;\n\t\t\t\td.textOffsetY = deg > 90 && deg < 270 ? 10 : 0;\n\n\t\t\t\td.xPosition =\n\t\t\t\t\t(d.textOffsetX + marginedRadius) * Math.sin(theta);\n\t\t\t\td.yPosition =\n\t\t\t\t\t(d.textOffsetY + marginedRadius) * -Math.cos(theta);\n\n\t\t\t\treturn d;\n\t\t\t})\n\t\t\t.attr('transform', function (d, i) {\n\t\t\t\tconst totalSlices = labelData.length;\n\t\t\t\tconst sliceAngleDeg =\n\t\t\t\t\t(d.endAngle - d.startAngle) * (180 / Math.PI);\n\n\t\t\t\t// check if last 2 slices (or just last) are < the threshold\n\t\t\t\tif (i >= totalSlices - 2) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tsliceAngleDeg < Configuration.pie.callout.minSliceDegree\n\t\t\t\t\t) {\n\t\t\t\t\t\tlet labelTranslateX, labelTranslateY;\n\t\t\t\t\t\tif (d.index === totalSlices - 1) {\n\t\t\t\t\t\t\tlabelTranslateX =\n\t\t\t\t\t\t\t\td.xPosition +\n\t\t\t\t\t\t\t\tConfiguration.pie.callout.offsetX +\n\t\t\t\t\t\t\t\tConfiguration.pie.callout.textMargin +\n\t\t\t\t\t\t\t\td.textOffsetX;\n\t\t\t\t\t\t\tlabelTranslateY =\n\t\t\t\t\t\t\t\td.yPosition - Configuration.pie.callout.offsetY;\n\n\t\t\t\t\t\t\t// Set direction of callout\n\t\t\t\t\t\t\td.direction = CalloutDirections.RIGHT;\n\t\t\t\t\t\t\tcalloutData.push(d);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlabelTranslateX =\n\t\t\t\t\t\t\t\td.xPosition -\n\t\t\t\t\t\t\t\tConfiguration.pie.callout.offsetX -\n\t\t\t\t\t\t\t\td.textOffsetX -\n\t\t\t\t\t\t\t\tConfiguration.pie.callout.textMargin;\n\t\t\t\t\t\t\tlabelTranslateY =\n\t\t\t\t\t\t\t\td.yPosition - Configuration.pie.callout.offsetY;\n\n\t\t\t\t\t\t\t// Set direction of callout\n\t\t\t\t\t\t\td.direction = CalloutDirections.LEFT;\n\t\t\t\t\t\t\tcalloutData.push(d);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn `translate(${labelTranslateX}, ${labelTranslateY})`;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn `translate(${d.xPosition}, ${d.yPosition})`;\n\t\t\t});\n\n\t\t// Render pie label callouts\n\t\tthis.renderCallouts(calloutData);\n\n\t\tconst optionName = Tools.getProperty(options, 'donut')\n\t\t\t? 'donut'\n\t\t\t: 'pie';\n\t\tconst alignment = Tools.getProperty(options, optionName, 'alignment');\n\n\t\tconst { width } = DOMUtils.getSVGElementSize(this.getParent(), {\n\t\t\tuseAttr: true,\n\t\t});\n\n\t\t// Position Pie\n\t\tlet pieTranslateX = radius + Configuration.pie.xOffset;\n\t\tif (alignment === Alignments.CENTER) {\n\t\t\tpieTranslateX = width / 2;\n\t\t} else if (alignment === Alignments.RIGHT) {\n\t\t\tpieTranslateX = width - radius - Configuration.pie.xOffset;\n\t\t}\n\n\t\tlet pieTranslateY = radius + Configuration.pie.yOffset;\n\t\tif (calloutData.length > 0) {\n\t\t\tpieTranslateY += Configuration.pie.yOffsetCallout;\n\t\t}\n\n\t\tsvg.attr('transform', `translate(${pieTranslateX}, ${pieTranslateY})`);\n\n\t\t// Add event listeners\n\t\tthis.addEventListeners();\n\t}\n\n\trenderCallouts(calloutData: any[]) {\n\t\tconst svg = DOMUtils.appendOrSelect(\n\t\t\tthis.getContainerSVG(),\n\t\t\t'g.callouts'\n\t\t)\n\t\t\t.attr('role', Roles.GROUP)\n\t\t\t.attr('data-name', 'callouts');\n\n\t\t// Update data on callouts\n\t\tconst callouts = svg.selectAll('g.callout').data(calloutData);\n\n\t\tcallouts.exit().remove();\n\n\t\tconst enteringCallouts = callouts\n\t\t\t.enter()\n\t\t\t.append('g')\n\t\t\t.classed('callout', true)\n\t\t\t// a11y\n\t\t\t.attr('role', `${Roles.GRAPHICS_SYMBOL} ${Roles.GROUP}`)\n\t\t\t.attr('aria-roledescription', 'label callout');\n\n\t\t// Update data values for each callout\n\t\t// For the horizontal and vertical lines to use\n\t\tenteringCallouts.merge(callouts).datum(function (d) {\n\t\t\tconst { xPosition, yPosition, direction } = d;\n\n\t\t\tif (direction === CalloutDirections.RIGHT) {\n\t\t\t\td.startPos = {\n\t\t\t\t\tx: xPosition,\n\t\t\t\t\ty: yPosition + d.textOffsetY,\n\t\t\t\t};\n\n\t\t\t\t// end position for the callout line\n\t\t\t\td.endPos = {\n\t\t\t\t\tx: xPosition + Configuration.pie.callout.offsetX,\n\t\t\t\t\ty:\n\t\t\t\t\t\tyPosition -\n\t\t\t\t\t\tConfiguration.pie.callout.offsetY +\n\t\t\t\t\t\td.textOffsetY,\n\t\t\t\t};\n\n\t\t\t\t// the intersection point of the vertical and horizontal line\n\t\t\t\td.intersectPointX =\n\t\t\t\t\td.endPos.x - Configuration.pie.callout.horizontalLineLength;\n\t\t\t} else {\n\t\t\t\t// start position for the callout line\n\t\t\t\td.startPos = {\n\t\t\t\t\tx: xPosition,\n\t\t\t\t\ty: yPosition + d.textOffsetY,\n\t\t\t\t};\n\n\t\t\t\t// end position for the callout line should be bottom aligned to the title\n\t\t\t\td.endPos = {\n\t\t\t\t\tx: xPosition - Configuration.pie.callout.offsetX,\n\t\t\t\t\ty:\n\t\t\t\t\t\tyPosition -\n\t\t\t\t\t\tConfiguration.pie.callout.offsetY +\n\t\t\t\t\t\td.textOffsetY,\n\t\t\t\t};\n\n\t\t\t\t// the intersection point of the vertical and horizontal line\n\t\t\t\td.intersectPointX =\n\t\t\t\t\td.endPos.x + Configuration.pie.callout.horizontalLineLength;\n\t\t\t}\n\n\t\t\t// Store the necessary data in the DOM element\n\t\t\treturn d;\n\t\t});\n\n\t\t// draw vertical line\n\t\tconst enteringVerticalLines = enteringCallouts\n\t\t\t.append('line')\n\t\t\t.classed('vertical-line', true);\n\n\t\tenteringVerticalLines\n\t\t\t.merge(svg.selectAll('line.vertical-line'))\n\t\t\t.datum(function (d: any) {\n\t\t\t\treturn select(this.parentNode).datum();\n\t\t\t})\n\t\t\t.style('stroke-width', '1px')\n\t\t\t.attr('x1', (d) => d.startPos.x)\n\t\t\t.attr('y1', (d) => d.startPos.y)\n\t\t\t.attr('x2', (d) => d.intersectPointX)\n\t\t\t.attr('y2', (d) => d.endPos.y);\n\n\t\t// draw horizontal line\n\t\tconst enteringHorizontalLines = enteringCallouts\n\t\t\t.append('line')\n\t\t\t.classed('horizontal-line', true);\n\n\t\tenteringHorizontalLines\n\t\t\t.merge(svg.selectAll('line.horizontal-line'))\n\t\t\t.datum(function (d: any) {\n\t\t\t\treturn select(this.parentNode).datum();\n\t\t\t})\n\t\t\t.style('stroke-width', '1px')\n\t\t\t.attr('x1', (d) => d.intersectPointX)\n\t\t\t.attr('y1', (d) => d.endPos.y)\n\t\t\t.attr('x2', (d) => d.endPos.x)\n\t\t\t.attr('y2', (d) => d.endPos.y);\n\t}\n\n\t// Highlight elements that match the hovered legend item\n\thandleLegendOnHover = (event: CustomEvent) => {\n\t\tconst { hoveredElement } = event.detail;\n\t\tconst { groupMapsTo } = this.getOptions().data;\n\n\t\tthis.parent\n\t\t\t.selectAll('path.slice')\n\t\t\t.transition(\n\t\t\t\tthis.services.transitions.getTransition('legend-hover-bar')\n\t\t\t)\n\t\t\t.attr('opacity', (d) =>\n\t\t\t\td.data[groupMapsTo] !== hoveredElement.datum()['name'] ? 0.3 : 1\n\t\t\t);\n\t};\n\n\t// Un-highlight all elements\n\thandleLegendMouseOut = (event: CustomEvent) => {\n\t\tthis.parent\n\t\t\t.selectAll('path.slice')\n\t\t\t.transition(\n\t\t\t\tthis.services.transitions.getTransition('legend-mouseout-bar')\n\t\t\t)\n\t\t\t.attr('opacity', 1);\n\t};\n\n\taddEventListeners() {\n\t\tconst self = this;\n\t\tthis.parent\n\t\t\t.selectAll('path.slice')\n\t\t\t.on('mouseover', function (datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\n\t\t\t\thoveredElement\n\t\t\t\t\t.classed('hovered', true)\n\t\t\t\t\t.transition(\n\t\t\t\t\t\tself.services.transitions.getTransition(\n\t\t\t\t\t\t\t'pie_slice_mouseover'\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t.attr('d', self.hoverArc);\n\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Pie.SLICE_MOUSEOVER, {\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum,\n\t\t\t\t});\n\n\t\t\t\tconst { groupMapsTo } = self.getOptions().data;\n\t\t\t\t// Show tooltip\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.SHOW, {\n\t\t\t\t\thoveredElement,\n\t\t\t\t\titems: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: datum.data[groupMapsTo],\n\t\t\t\t\t\t\tvalue: datum.data.value,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('mousemove', function (datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Pie.SLICE_MOUSEMOVE, {\n\t\t\t\t\telement: hoveredElement,\n\t\t\t\t\tdatum,\n\t\t\t\t});\n\n\t\t\t\t// Show tooltip\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.MOVE);\n\t\t\t})\n\t\t\t.on('click', function (datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Pie.SLICE_CLICK, {\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('mouseout', function (datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\t\t\t\thoveredElement\n\t\t\t\t\t.classed('hovered', false)\n\t\t\t\t\t.transition(\n\t\t\t\t\t\tself.services.transitions.getTransition(\n\t\t\t\t\t\t\t'pie_slice_mouseover'\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t.attr('d', self.arc);\n\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Pie.SLICE_MOUSEOUT, {\n\t\t\t\t\telement: hoveredElement,\n\t\t\t\t\tdatum,\n\t\t\t\t});\n\n\t\t\t\t// Hide tooltip\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.HIDE, {\n\t\t\t\t\thoveredElement,\n\t\t\t\t});\n\t\t\t});\n\t}\n\n\t// Helper functions\n\tprotected computeRadius() {\n\t\tconst { width, height } = DOMUtils.getSVGElementSize(this.parent, {\n\t\t\tuseAttrs: true,\n\t\t});\n\t\tconst radius: number = Math.min(width, height) / 2;\n\n\t\treturn radius + Configuration.pie.radiusOffset;\n\t}\n}\n"]}
|