@carbon/charts 0.30.17 → 0.30.21

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.
Files changed (111) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/build/demo/data/create-codesandbox.d.ts +37 -0
  3. package/build/demo/data/index.d.ts +6 -0
  4. package/build/demo/data/line.d.ts +21 -0
  5. package/build/demo/data/radar.d.ts +42 -0
  6. package/build/src/charts/index.d.ts +1 -0
  7. package/build/src/charts/radar.d.ts +6 -0
  8. package/build/src/components/axes/grid.d.ts +0 -4
  9. package/build/src/components/axes/ruler.d.ts +17 -0
  10. package/build/src/components/essentials/tooltip-radar.d.ts +4 -0
  11. package/build/src/components/graphs/radar.d.ts +22 -0
  12. package/build/src/components/index.d.ts +2 -0
  13. package/build/src/configuration.d.ts +2 -1
  14. package/build/src/interfaces/charts.d.ts +22 -0
  15. package/build/src/interfaces/enums.d.ts +16 -0
  16. package/build/src/interfaces/events.d.ts +9 -0
  17. package/build/src/services/angle-utils.d.ts +205 -0
  18. package/build/src/tools.d.ts +3 -0
  19. package/build/stories/tutorials/getting-started/angular.d.ts +1 -0
  20. package/build/stories/tutorials/getting-started/react.d.ts +1 -0
  21. package/build/stories/tutorials/getting-started/vanilla.d.ts +1 -0
  22. package/build/stories/tutorials/getting-started/vue.d.ts +1 -0
  23. package/build/stories/tutorials/index.d.ts +5 -0
  24. package/build/stories/tutorials/tabular-data-format.d.ts +1 -0
  25. package/bundle.js +1 -1
  26. package/charts/bubble.js +2 -1
  27. package/charts/bubble.js.map +1 -1
  28. package/charts/index.d.ts +1 -0
  29. package/charts/index.js +1 -0
  30. package/charts/index.js.map +1 -1
  31. package/charts/line.js +2 -1
  32. package/charts/line.js.map +1 -1
  33. package/charts/radar.d.ts +6 -0
  34. package/charts/radar.js +51 -0
  35. package/charts/radar.js.map +1 -0
  36. package/charts/scatter.js +2 -1
  37. package/charts/scatter.js.map +1 -1
  38. package/components/axes/grid.d.ts +0 -4
  39. package/components/axes/grid.js +0 -39
  40. package/components/axes/grid.js.map +1 -1
  41. package/components/axes/ruler.d.ts +17 -0
  42. package/components/axes/ruler.js +177 -0
  43. package/components/axes/ruler.js.map +1 -0
  44. package/components/essentials/tooltip-radar.d.ts +4 -0
  45. package/components/essentials/tooltip-radar.js +42 -0
  46. package/components/essentials/tooltip-radar.js.map +1 -0
  47. package/components/graphs/bubble.js +2 -0
  48. package/components/graphs/bubble.js.map +1 -1
  49. package/components/graphs/radar.d.ts +22 -0
  50. package/components/graphs/radar.js +397 -0
  51. package/components/graphs/radar.js.map +1 -0
  52. package/components/index.d.ts +2 -0
  53. package/components/index.js +2 -0
  54. package/components/index.js.map +1 -1
  55. package/configuration.d.ts +2 -1
  56. package/configuration.js +30 -2
  57. package/configuration.js.map +1 -1
  58. package/demo/data/bundle.js +1 -1
  59. package/demo/data/create-codesandbox.d.ts +29 -0
  60. package/demo/data/create-codesandbox.js +49 -0
  61. package/demo/data/create-codesandbox.js.map +1 -1
  62. package/demo/data/index.d.ts +6 -0
  63. package/demo/data/index.js +34 -1
  64. package/demo/data/index.js.map +1 -1
  65. package/demo/data/line.d.ts +21 -0
  66. package/demo/data/line.js +58 -0
  67. package/demo/data/line.js.map +1 -1
  68. package/demo/data/radar.d.ts +42 -0
  69. package/demo/data/radar.js +101 -0
  70. package/demo/data/radar.js.map +1 -0
  71. package/demo/styles.css +88 -0
  72. package/demo/styles.css.map +1 -1
  73. package/demo/styles.min.css +1 -1
  74. package/demo/styles.min.css.map +1 -1
  75. package/demo/tsconfig.tsbuildinfo +29 -15
  76. package/interfaces/charts.d.ts +22 -0
  77. package/interfaces/charts.js.map +1 -1
  78. package/interfaces/enums.d.ts +16 -0
  79. package/interfaces/enums.js +18 -0
  80. package/interfaces/enums.js.map +1 -1
  81. package/interfaces/events.d.ts +9 -0
  82. package/interfaces/events.js +10 -0
  83. package/interfaces/events.js.map +1 -1
  84. package/package.json +1 -1
  85. package/services/angle-utils.d.ts +16 -0
  86. package/services/angle-utils.js +55 -0
  87. package/services/angle-utils.js.map +1 -0
  88. package/styles/components/_ruler.scss +21 -0
  89. package/styles/components/index.scss +1 -0
  90. package/styles/graphs/_radar.scss +22 -0
  91. package/styles/graphs/index.scss +1 -0
  92. package/styles-g10.css +24 -0
  93. package/styles-g10.css.map +1 -1
  94. package/styles-g10.min.css +1 -1
  95. package/styles-g10.min.css.map +1 -1
  96. package/styles-g100.css +24 -0
  97. package/styles-g100.css.map +1 -1
  98. package/styles-g100.min.css +1 -1
  99. package/styles-g100.min.css.map +1 -1
  100. package/styles-g90.css +24 -0
  101. package/styles-g90.css.map +1 -1
  102. package/styles-g90.min.css +1 -1
  103. package/styles-g90.min.css.map +1 -1
  104. package/styles.css +24 -0
  105. package/styles.css.map +1 -1
  106. package/styles.min.css +1 -1
  107. package/styles.min.css.map +1 -1
  108. package/tools.d.ts +3 -0
  109. package/tools.js +4 -1
  110. package/tools.js.map +1 -1
  111. package/tsconfig.tsbuildinfo +136 -29
@@ -1 +1 @@
1
- {"version":3,"file":"bubble.js","sourceRoot":"","sources":["bubble.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Scatter } from \"./scatter\";\nimport { DOMUtils } from \"../../services\";\n\n// D3 Imports\nimport { Selection } from \"d3-selection\";\nimport { extent } from \"d3-array\";\nimport { scaleLinear } from \"d3-scale\";\n\nexport class Bubble extends Scatter {\n\ttype = \"bubble\";\n\n\tgetRadiusScale(selection: Selection<any, any, any, any>) {\n\t\tconst options = this.model.getOptions();\n\t\tconst { radiusMapsTo } = options.bubble;\n\n\t\tconst data = selection.data();\n\t\t// Filter out any null/undefined values\n\t\tconst allRadii = data.map(d => d[radiusMapsTo]).filter(radius => radius);\n\t\tconst chartSize = DOMUtils.getSVGElementSize(this.services.domUtils.getMainSVG(), { useAttr: true });\n\n\t\t// We need the ternary operator here in case the user\n\t\t// doesn't provide radius values in data\n\t\tconst radiusDataIsValid = allRadii.length > 0;\n\t\tconst domain = radiusDataIsValid ? extent(allRadii) : [1, 1];\n\t\treturn scaleLinear().domain(domain)\n\t\t\t.range(radiusDataIsValid ? options.bubble.radiusRange(chartSize, data) : [4, 4]);\n\t}\n\n\tstyleCircles(selection: Selection<any, any, any, any>, animate: boolean) {\n\t\t// Chart options mixed with the internal configurations\n\t\tconst options = this.model.getOptions();\n\t\tconst { radiusMapsTo } = options.bubble;\n\n\t\tconst radiusScale = this.getRadiusScale(selection);\n\n\t\tconst { groupMapsTo } = options.data;\n\t\tconst domainIdentifier = this.services.cartesianScales.getDomainIdentifier();\n\n\t\tselection.raise()\n\t\t\t.classed(\"dot\", true)\n\t\t\t.attr(\"cx\", (d, i) => this.services.cartesianScales.getDomainValue(d, i))\n\t\t\t.transition(this.services.transitions.getTransition(\"bubble-update-enter\", animate))\n\t\t\t.attr(\"cy\", (d, i) => this.services.cartesianScales.getRangeValue(d, i))\n\t\t\t// We need `|| 1` here in case the user doesn't provide radius values in data\n\t\t\t.attr(\"r\", d => radiusScale(d[radiusMapsTo] || 1))\n\t\t\t.attr(\"fill\", d => this.model.getFillColor(d[groupMapsTo], d[domainIdentifier], d))\n\t\t\t.attr(\"fill-opacity\", options.bubble.fillOpacity)\n\t\t\t.attr(\"stroke\", d => this.model.getStrokeColor(d[groupMapsTo], d[domainIdentifier], d))\n\t\t\t.attr(\"opacity\", 1);\n\t}\n}\n"]}
1
+ {"version":3,"file":"bubble.js","sourceRoot":"","sources":["bubble.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,mBAAmB;AACnB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAIzC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC;IAA4B,0BAAO;IAAnC;QAAA,qEA2CC;QA1CA,UAAI,GAAG,QAAQ,CAAC;;IA0CjB,CAAC;IAxCA,+BAAc,GAAd,UAAe,SAAwC;QACtD,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QAChC,IAAA,0CAAY,CAAoB;QAExC,IAAM,IAAI,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;QAC9B,uCAAuC;QACvC,IAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,YAAY,CAAC,EAAf,CAAe,CAAC,CAAC,MAAM,CAAC,UAAA,MAAM,IAAI,OAAA,MAAM,EAAN,CAAM,CAAC,CAAC;QACzE,IAAM,SAAS,GAAG,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAErG,qDAAqD;QACrD,wCAAwC;QACxC,IAAM,iBAAiB,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QAC9C,IAAM,MAAM,GAAG,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7D,OAAO,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;aACjC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACnF,CAAC;IAED,6BAAY,GAAZ,UAAa,SAAwC,EAAE,OAAgB;QAAvE,iBAsBC;QArBA,uDAAuD;QACvD,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QAChC,IAAA,0CAAY,CAAoB;QAExC,IAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QAE3C,IAAA,sCAAW,CAAkB;QACrC,IAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,mBAAmB,EAAE,CAAC;QAE7E,SAAS,CAAC,KAAK,EAAE;aACf,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;aACpB,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,eAAe,CAAC;aACnC,IAAI,CAAC,IAAI,EAAE,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,KAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,EAAlD,CAAkD,CAAC;aACxE,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC;aACnF,IAAI,CAAC,IAAI,EAAE,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,KAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAAjD,CAAiD,CAAC;YACxE,6EAA6E;aAC5E,IAAI,CAAC,GAAG,EAAE,UAAA,CAAC,IAAI,OAAA,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,EAAjC,CAAiC,CAAC;aACjD,IAAI,CAAC,MAAM,EAAE,UAAA,CAAC,IAAI,OAAA,KAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,EAA/D,CAA+D,CAAC;aAClF,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC;aAChD,IAAI,CAAC,QAAQ,EAAE,UAAA,CAAC,IAAI,OAAA,KAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,EAAjE,CAAiE,CAAC;aACtF,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IACtB,CAAC;IACF,aAAC;AAAD,CAAC,AA3CD,CAA4B,OAAO,GA2ClC","sourcesContent":["// Internal Imports\nimport { Scatter } from \"./scatter\";\nimport { DOMUtils } from \"../../services\";\nimport { Roles } from \"../../interfaces\";\n\n// D3 Imports\nimport { Selection } from \"d3-selection\";\nimport { extent } from \"d3-array\";\nimport { scaleLinear } from \"d3-scale\";\n\nexport class Bubble extends Scatter {\n\ttype = \"bubble\";\n\n\tgetRadiusScale(selection: Selection<any, any, any, any>) {\n\t\tconst options = this.model.getOptions();\n\t\tconst { radiusMapsTo } = options.bubble;\n\n\t\tconst data = selection.data();\n\t\t// Filter out any null/undefined values\n\t\tconst allRadii = data.map(d => d[radiusMapsTo]).filter(radius => radius);\n\t\tconst chartSize = DOMUtils.getSVGElementSize(this.services.domUtils.getMainSVG(), { useAttr: true });\n\n\t\t// We need the ternary operator here in case the user\n\t\t// doesn't provide radius values in data\n\t\tconst radiusDataIsValid = allRadii.length > 0;\n\t\tconst domain = radiusDataIsValid ? extent(allRadii) : [1, 1];\n\t\treturn scaleLinear().domain(domain)\n\t\t\t.range(radiusDataIsValid ? options.bubble.radiusRange(chartSize, data) : [4, 4]);\n\t}\n\n\tstyleCircles(selection: Selection<any, any, any, any>, animate: boolean) {\n\t\t// Chart options mixed with the internal configurations\n\t\tconst options = this.model.getOptions();\n\t\tconst { radiusMapsTo } = options.bubble;\n\n\t\tconst radiusScale = this.getRadiusScale(selection);\n\n\t\tconst { groupMapsTo } = options.data;\n\t\tconst domainIdentifier = this.services.cartesianScales.getDomainIdentifier();\n\n\t\tselection.raise()\n\t\t\t.classed(\"dot\", true)\n\t\t\t.attr(\"role\", Roles.GRAPHICS_SYMBOL)\n\t\t\t.attr(\"cx\", (d, i) => this.services.cartesianScales.getDomainValue(d, i))\n\t\t\t.transition(this.services.transitions.getTransition(\"bubble-update-enter\", animate))\n\t\t\t.attr(\"cy\", (d, i) => this.services.cartesianScales.getRangeValue(d, i))\n\t\t\t// We need `|| 1` here in case the user doesn't provide radius values in data\n\t\t\t.attr(\"r\", d => radiusScale(d[radiusMapsTo] || 1))\n\t\t\t.attr(\"fill\", d => this.model.getFillColor(d[groupMapsTo], d[domainIdentifier], d))\n\t\t\t.attr(\"fill-opacity\", options.bubble.fillOpacity)\n\t\t\t.attr(\"stroke\", d => this.model.getStrokeColor(d[groupMapsTo], d[domainIdentifier], d))\n\t\t\t.attr(\"opacity\", 1);\n\t}\n}\n"]}
@@ -0,0 +1,22 @@
1
+ import { Component } from "../component";
2
+ export declare class Radar extends Component {
3
+ type: string;
4
+ svg: SVGElement;
5
+ groupMapsTo: string;
6
+ uniqueKeys: string[];
7
+ uniqueGroups: string[];
8
+ displayDataNormalized: any;
9
+ groupedDataNormalized: any;
10
+ init(): void;
11
+ render(animate?: boolean): void;
12
+ getLabelDimensions: (label: string) => {
13
+ width: any;
14
+ height: any;
15
+ };
16
+ normalizeFlatData: (dataset: any) => any;
17
+ normalizeGroupedData: (dataset: any) => any;
18
+ handleLegendOnHover: (event: CustomEvent<any>) => void;
19
+ handleLegendMouseOut: (event: CustomEvent<any>) => void;
20
+ destroy(): void;
21
+ addEventListeners(): void;
22
+ }
@@ -0,0 +1,397 @@
1
+ var __extends = (this && this.__extends) || (function () {
2
+ var extendStatics = function (d, b) {
3
+ extendStatics = Object.setPrototypeOf ||
4
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
5
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
6
+ return extendStatics(d, b);
7
+ };
8
+ return function (d, b) {
9
+ extendStatics(d, b);
10
+ function __() { this.constructor = d; }
11
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
12
+ };
13
+ })();
14
+ // Internal Imports
15
+ import { Component } from "../component";
16
+ import { DOMUtils } from "../../services";
17
+ import { Events, TooltipTypes, Roles } from "../../interfaces";
18
+ import { Tools } from "../../tools";
19
+ import { radialLabelPlacement, radToDeg, polarToCartesianCoords, distanceBetweenPointOnCircAndVerticalDiameter } from "../../services/angle-utils";
20
+ // D3 Imports
21
+ import { select } from "d3-selection";
22
+ import { scaleBand, scaleLinear } from "d3-scale";
23
+ import { max, extent } from "d3-array";
24
+ import { lineRadial, curveLinearClosed } from "d3-shape";
25
+ // used to make transitions
26
+ var oldYScale;
27
+ var Radar = /** @class */ (function (_super) {
28
+ __extends(Radar, _super);
29
+ function Radar() {
30
+ var _this = _super !== null && _super.apply(this, arguments) || this;
31
+ _this.type = "radar";
32
+ // append temporarily the label to get the exact space that it occupies
33
+ _this.getLabelDimensions = function (label) {
34
+ var tmpTick = DOMUtils.appendOrSelect(_this.svg, "g.tmp-tick");
35
+ var tmpTickText = DOMUtils.appendOrSelect(tmpTick, "text").text(label);
36
+ var _a = DOMUtils.getSVGElementSize(tmpTickText.node(), { useBBox: true }), width = _a.width, height = _a.height;
37
+ tmpTick.remove();
38
+ return { width: width, height: height };
39
+ };
40
+ // Given a flat array of objects, if there are missing data on key,
41
+ // creates corresponding data with value = null
42
+ _this.normalizeFlatData = function (dataset) {
43
+ var options = _this.model.getOptions();
44
+ var _a = Tools.getProperty(options, "radar", "axes"), angle = _a.angle, value = _a.value;
45
+ var groupMapsTo = Tools.getProperty(options, "data", "groupMapsTo");
46
+ var completeBlankData = Tools.flatMapDeep(_this.uniqueKeys.map(function (key) {
47
+ return _this.uniqueGroups.map(function (group) {
48
+ var _a;
49
+ return (_a = {}, _a[angle] = key, _a[groupMapsTo] = group, _a[value] = null, _a);
50
+ });
51
+ }));
52
+ return Tools.merge(completeBlankData, dataset);
53
+ };
54
+ // Given a a grouped array of objects, if there are missing data on key,
55
+ // creates corresponding data with value = null
56
+ _this.normalizeGroupedData = function (dataset) {
57
+ var options = _this.model.getOptions();
58
+ var _a = Tools.getProperty(options, "radar", "axes"), angle = _a.angle, value = _a.value;
59
+ var groupMapsTo = Tools.getProperty(options, "data", "groupMapsTo");
60
+ return dataset.map(function (_a) {
61
+ var name = _a.name, data = _a.data;
62
+ var completeBlankData = _this.uniqueKeys.map(function (k) {
63
+ var _a;
64
+ return (_a = {}, _a[groupMapsTo] = name, _a[angle] = k, _a[value] = null, _a);
65
+ });
66
+ return { name: name, data: Tools.merge(completeBlankData, data) };
67
+ });
68
+ };
69
+ _this.handleLegendOnHover = function (event) {
70
+ var hoveredElement = event.detail.hoveredElement;
71
+ var opacity = Tools.getProperty(_this.model.getOptions(), "radar", "opacity");
72
+ _this.parent.selectAll("g.blobs path")
73
+ .transition(_this.services.transitions.getTransition("legend-hover-blob"))
74
+ .style("fill-opacity", function (group) {
75
+ if (group.name !== hoveredElement.datum().name) {
76
+ return Tools.getProperty(opacity, "unselected");
77
+ }
78
+ return Tools.getProperty(opacity, "selected");
79
+ });
80
+ };
81
+ _this.handleLegendMouseOut = function (event) {
82
+ var opacity = Tools.getProperty(_this.model.getOptions(), "radar", "opacity");
83
+ _this.parent.selectAll("g.blobs path")
84
+ .transition(_this.services.transitions.getTransition("legend-mouseout-blob"))
85
+ .style("fill-opacity", Tools.getProperty(opacity, "selected"));
86
+ };
87
+ return _this;
88
+ }
89
+ Radar.prototype.init = function () {
90
+ var events = this.services.events;
91
+ // Highlight correct line legend item hovers
92
+ events.addEventListener(Events.Legend.ITEM_HOVER, this.handleLegendOnHover);
93
+ // Un-highlight lines on legend item mouseouts
94
+ events.addEventListener(Events.Legend.ITEM_MOUSEOUT, this.handleLegendMouseOut);
95
+ };
96
+ Radar.prototype.render = function (animate) {
97
+ var _this = this;
98
+ if (animate === void 0) { animate = true; }
99
+ this.svg = this.getContainerSVG();
100
+ var _a = DOMUtils.getSVGElementSize(this.parent, { useAttrs: true }), width = _a.width, height = _a.height;
101
+ var data = this.model.getData();
102
+ var displayData = this.model.getDisplayData();
103
+ var groupedData = this.model.getGroupedData();
104
+ var options = this.model.getOptions();
105
+ var _b = Tools.getProperty(options, "radar", "axes"), angle = _b.angle, value = _b.value;
106
+ var groupMapsTo = Tools.getProperty(options, "data", "groupMapsTo");
107
+ var _c = Tools.getProperty(options, "radar"), xLabelPadding = _c.xLabelPadding, yLabelPadding = _c.yLabelPadding, yTicksNumber = _c.yTicksNumber, minRange = _c.minRange, xAxisRectHeight = _c.xAxisRectHeight, opacity = _c.opacity;
108
+ this.uniqueKeys = Array.from(new Set(data.map(function (d) { return d[angle]; })));
109
+ this.uniqueGroups = Array.from(new Set(data.map(function (d) { return d[groupMapsTo]; })));
110
+ this.displayDataNormalized = this.normalizeFlatData(displayData);
111
+ this.groupedDataNormalized = this.normalizeGroupedData(groupedData);
112
+ var labelHeight = this.getLabelDimensions(this.uniqueKeys[0]).height;
113
+ var margin = 2 * (labelHeight + yLabelPadding);
114
+ var size = Math.min(width, height);
115
+ var diameter = size - margin;
116
+ var radius = diameter / 2;
117
+ if (radius <= 0) {
118
+ return;
119
+ }
120
+ // given a key, return the corresponding angle in radiants
121
+ // rotated by -PI/2 because we want angle 0° at -y (12 o’clock)
122
+ var xScale = scaleBand()
123
+ .domain(this.displayDataNormalized.map(function (d) { return d[angle]; }))
124
+ .range([0, 2 * Math.PI].map(function (a) { return a - Math.PI / 2; }));
125
+ var yScale = scaleLinear()
126
+ .domain([0, max(this.displayDataNormalized.map(function (d) { return d[value]; }))])
127
+ .range([minRange, radius])
128
+ .nice(yTicksNumber);
129
+ var yTicks = yScale.ticks(yTicksNumber);
130
+ var colorScale = function (group) { return _this.model.getFillColor(group); };
131
+ // constructs a new radial line generator
132
+ // the angle accessor returns the angle in radians with 0° at -y (12 o’clock)
133
+ // so map back the angle
134
+ var radialLineGenerator = lineRadial()
135
+ .angle(function (d) { return xScale(d[angle]) + Math.PI / 2; })
136
+ .radius(function (d) { return yScale(d[value]); })
137
+ .curve(curveLinearClosed);
138
+ // this line generator is necessary in order to make a transition of a value from the
139
+ // position it occupies using the old scale to the position it occupies using the new scale
140
+ var oldRadialLineGenerator = lineRadial()
141
+ .angle(radialLineGenerator.angle())
142
+ .radius(function (d) { return oldYScale ? oldYScale(d[value]) : minRange; })
143
+ .curve(radialLineGenerator.curve());
144
+ // compute the space that each x label needs
145
+ var horizSpaceNeededByEachXLabel = this.uniqueKeys.map(function (key) {
146
+ var tickWidth = _this.getLabelDimensions(key).width;
147
+ // compute the distance between the point that the label rapresents and the vertical diameter
148
+ var distanceFromDiameter = distanceBetweenPointOnCircAndVerticalDiameter(xScale(key), radius);
149
+ // the space each label occupies is the sum of these two values
150
+ return tickWidth + distanceFromDiameter;
151
+ });
152
+ var leftPadding = max(horizSpaceNeededByEachXLabel);
153
+ // center coordinates
154
+ var c = {
155
+ x: leftPadding + xLabelPadding,
156
+ y: height / 2
157
+ };
158
+ /////////////////////////////
159
+ // Drawing the radar
160
+ /////////////////////////////
161
+ // y axes
162
+ var yAxes = DOMUtils.appendOrSelect(this.svg, "g.y-axes").attr("role", Roles.GROUP);
163
+ var yAxisUpdate = yAxes.selectAll("path").data(yTicks, function (tick) { return tick; });
164
+ // for each tick, create array of data corresponding to the points composing the shape
165
+ var shapeData = function (tick) { return _this.uniqueKeys.map(function (key) {
166
+ var _a;
167
+ return (_a = {}, _a[angle] = key, _a[value] = tick, _a);
168
+ }); };
169
+ yAxisUpdate.join(function (enter) { return enter
170
+ .append("path")
171
+ .attr("role", Roles.GRAPHICS_SYMBOL)
172
+ .attr("opacity", 0)
173
+ .attr("transform", "translate(" + c.x + ", " + c.y + ")")
174
+ .attr("fill", "none")
175
+ .attr("d", function (tick) { return oldRadialLineGenerator(shapeData(tick)); })
176
+ .call(function (selection) { return selection
177
+ .transition(_this.services.transitions.getTransition("radar_y_axes_enter", animate))
178
+ .attr("opacity", 1)
179
+ .attr("d", function (tick) { return radialLineGenerator(shapeData(tick)); }); }); }, function (update) { return update
180
+ .call(function (selection) { return selection
181
+ .transition(_this.services.transitions.getTransition("radar_y_axes_update", animate))
182
+ .attr("opacity", 1)
183
+ .attr("transform", "translate(" + c.x + ", " + c.y + ")")
184
+ .attr("d", function (tick) { return radialLineGenerator(shapeData(tick)); }); }); }, function (exit) { return exit
185
+ .call(function (selection) { return selection
186
+ .transition(_this.services.transitions.getTransition("radar_y_axes_exit", animate))
187
+ .attr("d", function (tick) { return radialLineGenerator(shapeData(tick)); })
188
+ .attr("opacity", 0)
189
+ .remove(); }); });
190
+ // y labels (show only the min and the max labels)
191
+ var yLabels = DOMUtils.appendOrSelect(this.svg, "g.y-labels").attr("role", Roles.GROUP);
192
+ var yLabelUpdate = yLabels.selectAll("text").data(extent(yTicks));
193
+ yLabelUpdate.join(function (enter) { return enter
194
+ .append("text")
195
+ .attr("opacity", 0)
196
+ .text(function (tick) { return tick; })
197
+ .attr("x", function (tick) { return polarToCartesianCoords(-Math.PI / 2, yScale(tick), c).x + yLabelPadding; })
198
+ .attr("y", function (tick) { return polarToCartesianCoords(-Math.PI / 2, yScale(tick), c).y; })
199
+ .style("text-anchor", "start")
200
+ .style("dominant-baseline", "middle")
201
+ .call(function (selection) { return selection
202
+ .transition(_this.services.transitions.getTransition("radar_y_labels_enter", animate))
203
+ .attr("opacity", 1); }); }, function (update) { return update
204
+ .call(function (selection) { return selection
205
+ .transition(_this.services.transitions.getTransition("radar_y_labels_update", animate))
206
+ .text(function (tick) { return tick; })
207
+ .attr("opacity", 1)
208
+ .attr("x", function (tick) { return polarToCartesianCoords(-Math.PI / 2, yScale(tick), c).x + yLabelPadding; })
209
+ .attr("y", function (tick) { return polarToCartesianCoords(-Math.PI / 2, yScale(tick), c).y; }); }); }, function (exit) { return exit
210
+ .call(function (selection) { return selection
211
+ .transition(_this.services.transitions.getTransition("radar_y_labels_exit", animate))
212
+ .attr("opacity", 0)
213
+ .remove(); }); });
214
+ // x axes
215
+ var xAxes = DOMUtils.appendOrSelect(this.svg, "g.x-axes").attr("role", Roles.GROUP);
216
+ var xAxisUpdate = xAxes.selectAll("line").data(this.uniqueKeys, function (key) { return key; });
217
+ xAxisUpdate.join(function (enter) { return enter
218
+ .append("line")
219
+ .attr("role", Roles.GRAPHICS_SYMBOL)
220
+ .attr("opacity", 0)
221
+ .attr("class", function (key) { return "x-axis-" + Tools.kebabCase(key); }) // replace spaces with -
222
+ .attr("stroke-dasharray", "0")
223
+ .attr("x1", function (key) { return polarToCartesianCoords(xScale(key), 0, c).x; })
224
+ .attr("y1", function (key) { return polarToCartesianCoords(xScale(key), 0, c).y; })
225
+ .attr("x2", function (key) { return polarToCartesianCoords(xScale(key), 0, c).x; })
226
+ .attr("y2", function (key) { return polarToCartesianCoords(xScale(key), 0, c).y; })
227
+ .call(function (selection) { return selection
228
+ .transition(_this.services.transitions.getTransition("radar_x_axes_enter", animate))
229
+ .attr("opacity", 1)
230
+ .attr("x1", function (key) { return polarToCartesianCoords(xScale(key), yScale.range()[0], c).x; })
231
+ .attr("y1", function (key) { return polarToCartesianCoords(xScale(key), yScale.range()[0], c).y; })
232
+ .attr("x2", function (key) { return polarToCartesianCoords(xScale(key), yScale.range()[1], c).x; })
233
+ .attr("y2", function (key) { return polarToCartesianCoords(xScale(key), yScale.range()[1], c).y; }); }); }, function (update) { return update
234
+ .call(function (selection) { return selection
235
+ .transition(_this.services.transitions.getTransition("radar_x_axes_update", animate))
236
+ .attr("opacity", 1)
237
+ .attr("x1", function (key) { return polarToCartesianCoords(xScale(key), yScale.range()[0], c).x; })
238
+ .attr("y1", function (key) { return polarToCartesianCoords(xScale(key), yScale.range()[0], c).y; })
239
+ .attr("x2", function (key) { return polarToCartesianCoords(xScale(key), yScale.range()[1], c).x; })
240
+ .attr("y2", function (key) { return polarToCartesianCoords(xScale(key), yScale.range()[1], c).y; }); }); }, function (exit) { return exit
241
+ .call(function (selection) { return selection
242
+ .transition(_this.services.transitions.getTransition("radar_x_axes_exit", animate))
243
+ .attr("opacity", 0)
244
+ .remove(); }); });
245
+ // x labels
246
+ var xLabels = DOMUtils.appendOrSelect(this.svg, "g.x-labels").attr("role", Roles.GROUP);
247
+ var xLabelUpdate = xLabels.selectAll("text").data(this.uniqueKeys);
248
+ xLabelUpdate.join(function (enter) { return enter
249
+ .append("text")
250
+ .text(function (key) { return key; })
251
+ .attr("opacity", 0)
252
+ .attr("x", function (key) { return polarToCartesianCoords(xScale(key), yScale.range()[1] + xLabelPadding, c).x; })
253
+ .attr("y", function (key) { return polarToCartesianCoords(xScale(key), yScale.range()[1] + xLabelPadding, c).y; })
254
+ .style("text-anchor", function (key) { return radialLabelPlacement(xScale(key)).textAnchor; })
255
+ .style("dominant-baseline", function (key) { return radialLabelPlacement(xScale(key)).dominantBaseline; })
256
+ .call(function (selection) { return selection
257
+ .transition(_this.services.transitions.getTransition("radar_x_labels_enter", animate))
258
+ .attr("opacity", 1); }); }, function (update) { return update
259
+ .call(function (selection) { return selection
260
+ .transition(_this.services.transitions.getTransition("radar_x_labels_update", animate))
261
+ .attr("opacity", 1)
262
+ .attr("x", function (key) { return polarToCartesianCoords(xScale(key), yScale.range()[1] + xLabelPadding, c).x; })
263
+ .attr("y", function (key) { return polarToCartesianCoords(xScale(key), yScale.range()[1] + xLabelPadding, c).y; }); }); }, function (exit) { return exit
264
+ .call(function (selection) { return selection
265
+ .transition(_this.services.transitions.getTransition("radar_x_labels_exit", animate))
266
+ .attr("opacity", 0)
267
+ .remove(); }); });
268
+ // blobs
269
+ var blobs = DOMUtils.appendOrSelect(this.svg, "g.blobs").attr("role", Roles.GROUP);
270
+ var blobUpdate = blobs.selectAll("path").data(this.groupedDataNormalized, function (group) { return group.name; });
271
+ blobUpdate.join(function (enter) { return enter
272
+ .append("path")
273
+ .attr("class", "blob")
274
+ .attr("role", Roles.GRAPHICS_SYMBOL)
275
+ .attr("opacity", 0)
276
+ .attr("transform", "translate(" + c.x + ", " + c.y + ")")
277
+ .attr("fill", function (group) { return colorScale(group.name); })
278
+ .style("fill-opacity", opacity.selected)
279
+ .attr("stroke", function (group) { return colorScale(group.name); })
280
+ .attr("d", function (group) { return oldRadialLineGenerator(group.data); })
281
+ .call(function (selection) { return selection
282
+ .transition(_this.services.transitions.getTransition("radar_blobs_enter", animate))
283
+ .attr("opacity", 1)
284
+ .attr("d", function (group) { return radialLineGenerator(group.data); }); }); }, function (update) { return update
285
+ .call(function (selection) { return selection
286
+ .transition(_this.services.transitions.getTransition("radar_blobs_update", animate))
287
+ .attr("opacity", 1)
288
+ .attr("transform", "translate(" + c.x + ", " + c.y + ")")
289
+ .attr("d", function (group) { return radialLineGenerator(group.data); }); }); }, function (exit) { return exit
290
+ .call(function (selection) { return selection
291
+ .transition(_this.services.transitions.getTransition("radar_blobs_exit", animate))
292
+ .attr("d", function (group) { return radialLineGenerator(group.data); })
293
+ .attr("opacity", 0)
294
+ .remove(); }); });
295
+ // data dots
296
+ var dots = DOMUtils.appendOrSelect(this.svg, "g.dots").attr("role", Roles.GROUP);
297
+ var dotsUpdate = dots.selectAll("circle").data(this.displayDataNormalized);
298
+ dotsUpdate.join(function (enter) { return enter.append("circle").attr("role", Roles.GRAPHICS_SYMBOL); }, function (update) { return update; }, function (exit) { return exit.remove(); })
299
+ .attr("class", function (d) { return Tools.kebabCase(d[angle]); })
300
+ .attr("cx", function (d) { return polarToCartesianCoords(xScale(d[angle]), yScale(d[value]), c).x; })
301
+ .attr("cy", function (d) { return polarToCartesianCoords(xScale(d[angle]), yScale(d[value]), c).y; })
302
+ .attr("r", 0)
303
+ .attr("opacity", 0)
304
+ .attr("fill", function (d) { return colorScale(d[groupMapsTo]); });
305
+ // rectangles
306
+ var xAxesRect = DOMUtils.appendOrSelect(this.svg, "g.x-axes-rect").attr("role", Roles.GROUP);
307
+ var xAxisRectUpdate = xAxesRect.selectAll("rect").data(this.uniqueKeys);
308
+ xAxisRectUpdate.join(function (enter) { return enter.append("rect").attr("role", Roles.GRAPHICS_SYMBOL); }, function (update) { return update; }, function (exit) { return exit.remove(); })
309
+ .attr("x", c.x)
310
+ .attr("y", c.y - xAxisRectHeight / 2)
311
+ .attr("width", yScale.range()[1])
312
+ .attr("height", xAxisRectHeight)
313
+ .attr("fill", "red")
314
+ .style("fill-opacity", 0)
315
+ .attr("transform", function (key) { return "rotate(" + radToDeg(xScale(key)) + ", " + c.x + ", " + c.y + ")"; });
316
+ // Add event listeners
317
+ this.addEventListeners();
318
+ oldYScale = yScale; // save the current scale as the old one
319
+ };
320
+ Radar.prototype.destroy = function () {
321
+ // Remove event listeners
322
+ this.parent.selectAll(".x-axes-rect > rect")
323
+ .on("mouseover", null)
324
+ .on("mousemove", null)
325
+ .on("mouseout", null);
326
+ // Remove legend listeners
327
+ var eventsFragment = this.services.events;
328
+ eventsFragment.removeEventListener(Events.Legend.ITEM_HOVER, this.handleLegendOnHover);
329
+ eventsFragment.removeEventListener(Events.Legend.ITEM_MOUSEOUT, this.handleLegendMouseOut);
330
+ };
331
+ Radar.prototype.addEventListeners = function () {
332
+ var self = this;
333
+ var _a = Tools.getProperty(this.model.getOptions(), "radar"), angle = _a.axes.angle, dotsRadius = _a.dotsRadius;
334
+ // events on x axes rects
335
+ this.parent.selectAll(".x-axes-rect > rect")
336
+ .on("mouseover", function (datum) {
337
+ // Dispatch mouse event
338
+ self.services.events.dispatchEvent(Events.Radar.X_AXIS_MOUSEOVER, {
339
+ element: select(this),
340
+ datum: datum
341
+ });
342
+ })
343
+ .on("mousemove", function (datum) {
344
+ var hoveredElement = select(this);
345
+ var axisLine = self.parent.select(".x-axes .x-axis-" + Tools.kebabCase(datum));
346
+ var dots = self.parent.selectAll(".dots circle." + Tools.kebabCase(datum));
347
+ // Change style
348
+ axisLine.classed("hovered", true)
349
+ .attr("stroke-dasharray", "4 4");
350
+ dots.classed("hovered", true)
351
+ .attr("opacity", 1)
352
+ .attr("r", dotsRadius);
353
+ // Dispatch mouse event
354
+ self.services.events.dispatchEvent(Events.Radar.X_AXIS_MOUSEMOVE, {
355
+ element: hoveredElement,
356
+ datum: datum
357
+ });
358
+ // get the items that should be highlighted
359
+ var itemsToHighlight = self.displayDataNormalized.filter(function (d) { return d[angle] === datum; });
360
+ // Show tooltip
361
+ self.services.events.dispatchEvent(Events.Tooltip.SHOW, {
362
+ hoveredElement: hoveredElement,
363
+ multidata: itemsToHighlight,
364
+ type: TooltipTypes.GRIDLINE
365
+ });
366
+ })
367
+ .on("click", function (datum) {
368
+ // Dispatch mouse event
369
+ self.services.events.dispatchEvent(Events.Radar.X_AXIS_CLICK, {
370
+ element: select(this),
371
+ datum: datum
372
+ });
373
+ })
374
+ .on("mouseout", function (datum) {
375
+ var hoveredElement = select(this);
376
+ var axisLine = self.parent.select(".x-axes .x-axis-" + Tools.kebabCase(datum));
377
+ var dots = self.parent.selectAll(".dots circle." + Tools.kebabCase(datum));
378
+ // Change style
379
+ axisLine.classed("hovered", false)
380
+ .attr("stroke-dasharray", "0");
381
+ dots.classed("hovered", false)
382
+ .attr("opacity", 0)
383
+ .attr("r", 0);
384
+ // Dispatch mouse event
385
+ self.services.events.dispatchEvent(Events.Radar.X_AXIS_MOUSEOUT, {
386
+ element: hoveredElement,
387
+ datum: datum
388
+ });
389
+ // Hide tooltip
390
+ self.services.events.dispatchEvent("hide-tooltip", { hoveredElement: hoveredElement });
391
+ self.services.events.dispatchEvent(Events.Tooltip.HIDE, { hoveredElement: hoveredElement });
392
+ });
393
+ };
394
+ return Radar;
395
+ }(Component));
396
+ export { Radar };
397
+ //# sourceMappingURL=../../../src/components/graphs/radar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"radar.js","sourceRoot":"","sources":["radar.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,mBAAmB;AACnB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAGN,oBAAoB,EACpB,QAAQ,EACR,sBAAsB,EACtB,6CAA6C,EAC7C,MAAM,4BAA4B,CAAC;AAEpC,aAAa;AACb,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAe,MAAM,UAAU,CAAC;AAC/D,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAEzD,2BAA2B;AAC3B,IAAI,SAAsC,CAAC;AAE3C;IAA2B,yBAAS;IAApC;QAAA,qEAqbC;QApbA,UAAI,GAAG,OAAO,CAAC;QA4Sf,uEAAuE;QACvE,wBAAkB,GAAG,UAAC,KAAa;YAClC,IAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,KAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;YAChE,IAAM,WAAW,GAAG,QAAQ,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnE,IAAA,sEAAqF,EAAnF,gBAAK,EAAE,kBAA4E,CAAC;YAC5F,OAAO,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO,EAAE,KAAK,OAAA,EAAE,MAAM,QAAA,EAAE,CAAC;QAC1B,CAAC,CAAA;QAED,mEAAmE;QACnE,+CAA+C;QAC/C,uBAAiB,GAAG,UAAC,OAAY;YAChC,IAAM,OAAO,GAAG,KAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;YAClC,IAAA,gDAA8D,EAA5D,gBAAK,EAAE,gBAAqD,CAAC;YACrE,IAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;YACtE,IAAM,iBAAiB,GAAG,KAAK,CAAC,WAAW,CAAC,KAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAA,GAAG;gBAClE,OAAO,KAAI,CAAC,YAAY,CAAC,GAAG,CAAC,UAAA,KAAK;;oBAAI,OAAA,UAAG,GAAC,KAAK,IAAG,GAAG,EAAE,GAAC,WAAW,IAAG,KAAK,EAAE,GAAC,KAAK,IAAG,IAAI,KAAG;gBAAvD,CAAuD,CAAC,CAAC;YAChG,CAAC,CAAC,CAAC,CAAC;YACJ,OAAO,KAAK,CAAC,KAAK,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;QAChD,CAAC,CAAA;QAED,wEAAwE;QACxE,+CAA+C;QAC/C,0BAAoB,GAAG,UAAC,OAAY;YACnC,IAAM,OAAO,GAAG,KAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;YAClC,IAAA,gDAA8D,EAA5D,gBAAK,EAAE,gBAAqD,CAAC;YACrE,IAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;YACtE,OAAO,OAAO,CAAC,GAAG,CAAC,UAAC,EAAc;oBAAZ,cAAI,EAAE,cAAI;gBAC/B,IAAM,iBAAiB,GAAG,KAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAA,CAAC;;oBAAI,OAAA,UAAG,GAAC,WAAW,IAAG,IAAI,EAAE,GAAC,KAAK,IAAG,CAAC,EAAE,GAAC,KAAK,IAAG,IAAI,KAAG;gBAApD,CAAoD,CAAC,CAAC;gBACzG,OAAO,EAAE,IAAI,MAAA,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,iBAAiB,EAAE,IAAI,CAAC,EAAE,CAAC;YAC7D,CAAC,CAAC,CAAC;QACJ,CAAC,CAAA;QAED,yBAAmB,GAAG,UAAC,KAAkB;YAChC,IAAA,4CAAc,CAAkB;YACxC,IAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC,KAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;YAC/E,KAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC;iBACnC,UAAU,CAAC,KAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC;iBACxE,KAAK,CAAC,cAAc,EAAE,UAAA,KAAK;gBAC3B,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE;oBAC/C,OAAO,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;iBAChD;gBACD,OAAO,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YAC/C,CAAC,CAAC,CAAC;QACL,CAAC,CAAA;QAED,0BAAoB,GAAG,UAAC,KAAkB;YACzC,IAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC,KAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;YAC/E,KAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC;iBACnC,UAAU,CAAC,KAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,sBAAsB,CAAC,CAAC;iBAC3E,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;QACjE,CAAC,CAAA;;IAqFF,CAAC;IA5aA,oBAAI,GAAJ;QACS,IAAA,6BAAM,CAAmB;QACjC,4CAA4C;QAC5C,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAC5E,8CAA8C;QAC9C,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACjF,CAAC;IAED,sBAAM,GAAN,UAAO,OAAc;QAArB,iBA0RC;QA1RM,wBAAA,EAAA,cAAc;QACpB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAC5B,IAAA,gEAA+E,EAA7E,gBAAK,EAAE,kBAAsE,CAAC;QAEtF,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QAClC,IAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;QAChD,IAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;QAChD,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QAClC,IAAA,gDAA8D,EAA5D,gBAAK,EAAE,gBAAqD,CAAC;QACrE,IAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;QAChE,IAAA,wCAAwH,EAAtH,gCAAa,EAAE,gCAAa,EAAE,8BAAY,EAAE,sBAAQ,EAAE,oCAAe,EAAE,oBAA+C,CAAC;QAE/H,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,KAAK,CAAC,EAAR,CAAQ,CAAC,CAAC,CAAC,CAAC;QAC/D,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,WAAW,CAAC,EAAd,CAAc,CAAC,CAAC,CAAC,CAAC;QACvE,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;QACjE,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;QAEpE,IAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACvE,IAAM,MAAM,GAAG,CAAC,GAAG,CAAC,WAAW,GAAG,aAAa,CAAC,CAAC;QACjD,IAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACrC,IAAM,QAAQ,GAAG,IAAI,GAAG,MAAM,CAAC;QAC/B,IAAM,MAAM,GAAG,QAAQ,GAAG,CAAC,CAAC;QAE5B,IAAI,MAAM,IAAI,CAAC,EAAE;YAChB,OAAO;SACP;QAED,0DAA0D;QAC1D,+DAA+D;QAC/D,IAAM,MAAM,GAAG,SAAS,EAAU;aAChC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,KAAK,CAAC,EAAR,CAAQ,CAAC,CAAC;aACrD,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,EAAf,CAAe,CAAmB,CAAC,CAAC;QAEtE,IAAM,MAAM,GAAG,WAAW,EAAE;aAC1B,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,KAAK,CAAC,EAAR,CAAQ,CAAa,CAAC,CAAC,CAAC;aAC3E,KAAK,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;aACzB,IAAI,CAAC,YAAY,CAAC,CAAC;QACrB,IAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAE1C,IAAM,UAAU,GAAG,UAAC,KAAa,IAAa,OAAA,KAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,EAA9B,CAA8B,CAAC;QAE7E,yCAAyC;QACzC,6EAA6E;QAC7E,wBAAwB;QACxB,IAAM,mBAAmB,GAAG,UAAU,EAAO;aAC3C,KAAK,CAAC,UAAA,CAAC,IAAI,OAAA,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,EAA9B,CAA8B,CAAC;aAC1C,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAhB,CAAgB,CAAC;aAC7B,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAE3B,qFAAqF;QACrF,2FAA2F;QAC3F,IAAM,sBAAsB,GAAG,UAAU,EAAO;aAC9C,KAAK,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;aAClC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAA1C,CAA0C,CAAC;aACvD,KAAK,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC,CAAC;QAErC,4CAA4C;QAC5C,IAAM,4BAA4B,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAA,GAAG;YAC3D,IAAM,SAAS,GAAG,KAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;YACrD,6FAA6F;YAC7F,IAAM,oBAAoB,GAAG,6CAA6C,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;YAChG,+DAA+D;YAC/D,OAAO,SAAS,GAAG,oBAAoB,CAAC;QACzC,CAAC,CAAC,CAAC;QACH,IAAM,WAAW,GAAG,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAEtD,qBAAqB;QACrB,IAAM,CAAC,GAAU;YAChB,CAAC,EAAE,WAAW,GAAG,aAAa;YAC9B,CAAC,EAAE,MAAM,GAAG,CAAC;SACb,CAAC;QAEF,6BAA6B;QAC7B,oBAAoB;QACpB,6BAA6B;QAE7B,SAAS;QACT,IAAM,KAAK,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QACtF,IAAM,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,UAAA,IAAI,IAAI,OAAA,IAAI,EAAJ,CAAI,CAAC,CAAC;QACvE,sFAAsF;QACtF,IAAM,SAAS,GAAG,UAAC,IAAY,IAAK,OAAA,KAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAA,GAAG;;YAAI,OAAA,UAAG,GAAC,KAAK,IAAG,GAAG,EAAE,GAAC,KAAK,IAAG,IAAI,KAAG;QAAjC,CAAiC,CAAC,EAA7D,CAA6D,CAAC;QAClG,WAAW,CAAC,IAAI,CACf,UAAA,KAAK,IAAI,OAAA,KAAK;aACZ,MAAM,CAAC,MAAM,CAAC;aACd,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,eAAe,CAAC;aACnC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;aAClB,IAAI,CAAC,WAAW,EAAE,eAAa,CAAC,CAAC,CAAC,UAAK,CAAC,CAAC,CAAC,MAAG,CAAC;aAC9C,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;aACpB,IAAI,CAAC,GAAG,EAAE,UAAA,IAAI,IAAI,OAAA,sBAAsB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAvC,CAAuC,CAAC;aAC1D,IAAI,CAAC,UAAA,SAAS,IAAI,OAAA,SAAS;aAC1B,UAAU,CAAC,KAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;aAClF,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;aAClB,IAAI,CAAC,GAAG,EAAE,UAAA,IAAI,IAAI,OAAA,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAApC,CAAoC,CAAC,EAHtC,CAGsC,CACxD,EAXO,CAWP,EACF,UAAA,MAAM,IAAI,OAAA,MAAM;aACd,IAAI,CAAC,UAAA,SAAS,IAAI,OAAA,SAAS;aAC1B,UAAU,CAAC,KAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC;aACnF,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;aAClB,IAAI,CAAC,WAAW,EAAE,eAAa,CAAC,CAAC,CAAC,UAAK,CAAC,CAAC,CAAC,MAAG,CAAC;aAC9C,IAAI,CAAC,GAAG,EAAE,UAAA,IAAI,IAAI,OAAA,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAApC,CAAoC,CAAC,EAJtC,CAIsC,CACxD,EANQ,CAMR,EACF,UAAA,IAAI,IAAI,OAAA,IAAI;aACV,IAAI,CAAC,UAAA,SAAS,IAAI,OAAA,SAAS;aAC1B,UAAU,CAAC,KAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;aACjF,IAAI,CAAC,GAAG,EAAE,UAAA,IAAI,IAAI,OAAA,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAApC,CAAoC,CAAC;aACvD,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;aAClB,MAAM,EAAE,EAJS,CAIT,CACT,EANM,CAMN,CACF,CAAC;QAEF,kDAAkD;QAClD,IAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1F,IAAM,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QACpE,YAAY,CAAC,IAAI,CAChB,UAAA,KAAK,IAAI,OAAA,KAAK;aACZ,MAAM,CAAC,MAAM,CAAC;aACd,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;aAClB,IAAI,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,EAAJ,CAAI,CAAC;aAClB,IAAI,CAAC,GAAG,EAAE,UAAA,IAAI,IAAI,OAAA,sBAAsB,CAAC,CAAE,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,aAAa,EAAxE,CAAwE,CAAC;aAC3F,IAAI,CAAC,GAAG,EAAE,UAAA,IAAI,IAAI,OAAA,sBAAsB,CAAC,CAAE,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAxD,CAAwD,CAAC;aAC3E,KAAK,CAAC,aAAa,EAAE,OAAO,CAAC;aAC7B,KAAK,CAAC,mBAAmB,EAAE,QAAQ,CAAC;aACpC,IAAI,CAAC,UAAA,SAAS,IAAI,OAAA,SAAS;aAC1B,UAAU,CAAC,KAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,sBAAsB,EAAE,OAAO,CAAC,CAAC;aACpF,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,EAFD,CAEC,CACnB,EAXO,CAWP,EACF,UAAA,MAAM,IAAI,OAAA,MAAM;aACd,IAAI,CAAC,UAAA,SAAS,IAAI,OAAA,SAAS;aAC1B,UAAU,CAAC,KAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAC;aACrF,IAAI,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,EAAJ,CAAI,CAAC;aAClB,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;aAClB,IAAI,CAAC,GAAG,EAAE,UAAA,IAAI,IAAI,OAAA,sBAAsB,CAAC,CAAE,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,aAAa,EAAxE,CAAwE,CAAC;aAC3F,IAAI,CAAC,GAAG,EAAE,UAAA,IAAI,IAAI,OAAA,sBAAsB,CAAC,CAAE,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAxD,CAAwD,CAAC,EAL1D,CAK0D,CAC5E,EAPQ,CAOR,EACF,UAAA,IAAI,IAAI,OAAA,IAAI;aACV,IAAI,CAAC,UAAA,SAAS,IAAI,OAAA,SAAS;aAC1B,UAAU,CAAC,KAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC;aACnF,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;aAClB,MAAM,EAAE,EAHS,CAGT,CACT,EALM,CAKN,CACF,CAAC;QAEF,SAAS;QACT,IAAM,KAAK,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QACtF,IAAM,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAA,GAAG,IAAI,OAAA,GAAG,EAAH,CAAG,CAAC,CAAC;QAC9E,WAAW,CAAC,IAAI,CACf,UAAA,KAAK,IAAI,OAAA,KAAK;aACZ,MAAM,CAAC,MAAM,CAAC;aACd,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,eAAe,CAAC;aACnC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;aAClB,IAAI,CAAC,OAAO,EAAE,UAAA,GAAG,IAAI,OAAA,YAAU,KAAK,CAAC,SAAS,CAAC,GAAG,CAAG,EAAhC,CAAgC,CAAC,CAAC,wBAAwB;aAC/E,IAAI,CAAC,kBAAkB,EAAE,GAAG,CAAC;aAC7B,IAAI,CAAC,IAAI,EAAE,UAAA,GAAG,IAAI,OAAA,sBAAsB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAA3C,CAA2C,CAAC;aAC9D,IAAI,CAAC,IAAI,EAAE,UAAA,GAAG,IAAI,OAAA,sBAAsB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAA3C,CAA2C,CAAC;aAC9D,IAAI,CAAC,IAAI,EAAE,UAAA,GAAG,IAAI,OAAA,sBAAsB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAA3C,CAA2C,CAAC;aAC9D,IAAI,CAAC,IAAI,EAAE,UAAA,GAAG,IAAI,OAAA,sBAAsB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAA3C,CAA2C,CAAC;aAC9D,IAAI,CAAC,UAAA,SAAS,IAAI,OAAA,SAAS;aAC1B,UAAU,CAAC,KAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;aAClF,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;aAClB,IAAI,CAAC,IAAI,EAAE,UAAA,GAAG,IAAI,OAAA,sBAAsB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAA3D,CAA2D,CAAC;aAC9E,IAAI,CAAC,IAAI,EAAE,UAAA,GAAG,IAAI,OAAA,sBAAsB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAA3D,CAA2D,CAAC;aAC9E,IAAI,CAAC,IAAI,EAAE,UAAA,GAAG,IAAI,OAAA,sBAAsB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAA3D,CAA2D,CAAC;aAC9E,IAAI,CAAC,IAAI,EAAE,UAAA,GAAG,IAAI,OAAA,sBAAsB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAA3D,CAA2D,CAAC,EAN7D,CAM6D,CAC/E,EAjBO,CAiBP,EACF,UAAA,MAAM,IAAI,OAAA,MAAM;aACf,IAAI,CAAC,UAAA,SAAS,IAAI,OAAA,SAAS;aAC1B,UAAU,CAAC,KAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC;aACnF,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;aAClB,IAAI,CAAC,IAAI,EAAE,UAAA,GAAG,IAAI,OAAA,sBAAsB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAA3D,CAA2D,CAAC;aAC9E,IAAI,CAAC,IAAI,EAAE,UAAA,GAAG,IAAI,OAAA,sBAAsB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAA3D,CAA2D,CAAC;aAC9E,IAAI,CAAC,IAAI,EAAE,UAAA,GAAG,IAAI,OAAA,sBAAsB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAA3D,CAA2D,CAAC;aAC9E,IAAI,CAAC,IAAI,EAAE,UAAA,GAAG,IAAI,OAAA,sBAAsB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAA3D,CAA2D,CAAC,EAN7D,CAM6D,CAC9E,EARQ,CAQR,EACF,UAAA,IAAI,IAAI,OAAA,IAAI;aACV,IAAI,CAAC,UAAA,SAAS,IAAI,OAAA,SAAS;aAC1B,UAAU,CAAC,KAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;aACjF,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;aAClB,MAAM,EAAE,EAHS,CAGT,CACT,EALM,CAKN,CACF,CAAC;QAEF,WAAW;QACX,IAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1F,IAAM,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACrE,YAAY,CAAC,IAAI,CAChB,UAAA,KAAK,IAAI,OAAA,KAAK;aACZ,MAAM,CAAC,MAAM,CAAC;aACd,IAAI,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,EAAH,CAAG,CAAC;aAChB,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;aAClB,IAAI,CAAC,GAAG,EAAE,UAAA,GAAG,IAAI,OAAA,sBAAsB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,EAA3E,CAA2E,CAAC;aAC7F,IAAI,CAAC,GAAG,EAAE,UAAA,GAAG,IAAI,OAAA,sBAAsB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,EAA3E,CAA2E,CAAC;aAC7F,KAAK,CAAC,aAAa,EAAE,UAAA,GAAG,IAAI,OAAA,oBAAoB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,EAA5C,CAA4C,CAAC;aACzE,KAAK,CAAC,mBAAmB,EAAE,UAAA,GAAG,IAAI,OAAA,oBAAoB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB,EAAlD,CAAkD,CAAC;aACrF,IAAI,CAAC,UAAA,SAAS,IAAI,OAAA,SAAS;aAC1B,UAAU,CAAC,KAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,sBAAsB,EAAE,OAAO,CAAC,CAAC;aACpF,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,EAFD,CAEC,CACnB,EAXO,CAWP,EACF,UAAA,MAAM,IAAI,OAAA,MAAM;aACd,IAAI,CAAC,UAAA,SAAS,IAAI,OAAA,SAAS;aAC1B,UAAU,CAAC,KAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAC;aACrF,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;aAClB,IAAI,CAAC,GAAG,EAAE,UAAA,GAAG,IAAI,OAAA,sBAAsB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,EAA3E,CAA2E,CAAC;aAC7F,IAAI,CAAC,GAAG,EAAE,UAAA,GAAG,IAAI,OAAA,sBAAsB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,EAA3E,CAA2E,CAAC,EAJ5E,CAI4E,CAC9F,EANQ,CAMR,EACF,UAAA,IAAI,IAAI,OAAA,IAAI;aACV,IAAI,CAAC,UAAA,SAAS,IAAI,OAAA,SAAS;aAC1B,UAAU,CAAC,KAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC;aACnF,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;aAClB,MAAM,EAAE,EAHS,CAGT,CACT,EALM,CAKN,CACF,CAAC;QAEF,QAAQ;QACR,IAAM,KAAK,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QACrF,IAAM,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,UAAA,KAAK,IAAI,OAAA,KAAK,CAAC,IAAI,EAAV,CAAU,CAAC,CAAC;QACjG,UAAU,CAAC,IAAI,CACd,UAAA,KAAK,IAAI,OAAA,KAAK;aACZ,MAAM,CAAC,MAAM,CAAC;aACd,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;aACrB,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,eAAe,CAAC;aACnC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;aAClB,IAAI,CAAC,WAAW,EAAE,eAAa,CAAC,CAAC,CAAC,UAAK,CAAC,CAAC,CAAC,MAAG,CAAC;aAC9C,IAAI,CAAC,MAAM,EAAE,UAAA,KAAK,IAAI,OAAA,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAtB,CAAsB,CAAC;aAC7C,KAAK,CAAC,cAAc,EAAE,OAAO,CAAC,QAAQ,CAAC;aACvC,IAAI,CAAC,QAAQ,EAAE,UAAA,KAAK,IAAI,OAAA,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAtB,CAAsB,CAAC;aAC/C,IAAI,CAAC,GAAG,EAAE,UAAA,KAAK,IAAI,OAAA,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAlC,CAAkC,CAAC;aACtD,IAAI,CAAC,UAAA,SAAS,IAAI,OAAA,SAAS;aAC1B,UAAU,CAAC,KAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;aACjF,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;aAClB,IAAI,CAAC,GAAG,EAAE,UAAA,KAAK,IAAI,OAAA,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,EAA/B,CAA+B,CAAC,EAHlC,CAGkC,CACpD,EAdO,CAcP,EACF,UAAA,MAAM,IAAI,OAAA,MAAM;aACd,IAAI,CAAC,UAAA,SAAS,IAAI,OAAA,SAAS;aAC1B,UAAU,CAAC,KAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;aAClF,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;aAClB,IAAI,CAAC,WAAW,EAAE,eAAa,CAAC,CAAC,CAAC,UAAK,CAAC,CAAC,CAAC,MAAG,CAAC;aAC9C,IAAI,CAAC,GAAG,EAAE,UAAA,KAAK,IAAI,OAAA,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,EAA/B,CAA+B,CAAC,EAJlC,CAIkC,CACpD,EANQ,CAMR,EACF,UAAA,IAAI,IAAI,OAAA,IAAI;aACV,IAAI,CAAC,UAAA,SAAS,IAAI,OAAA,SAAS;aAC1B,UAAU,CAAC,KAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;aAChF,IAAI,CAAC,GAAG,EAAE,UAAA,KAAK,IAAI,OAAA,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,EAA/B,CAA+B,CAAC;aACnD,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;aAClB,MAAM,EAAE,EAJS,CAIT,CACT,EANM,CAMN,CACF,CAAC;QAEF,YAAY;QACZ,IAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QACnF,IAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAC7E,UAAU,CAAC,IAAI,CACd,UAAA,KAAK,IAAI,OAAA,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,eAAe,CAAC,EAA1D,CAA0D,EACnE,UAAA,MAAM,IAAI,OAAA,MAAM,EAAN,CAAM,EAChB,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,MAAM,EAAE,EAAb,CAAa,CACrB;aACA,IAAI,CAAC,OAAO,EAAE,UAAA,CAAC,IAAI,OAAA,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAzB,CAAyB,CAAC;aAC7C,IAAI,CAAC,IAAI,EAAE,UAAA,CAAC,IAAI,OAAA,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAA/D,CAA+D,CAAC;aAChF,IAAI,CAAC,IAAI,EAAE,UAAA,CAAC,IAAI,OAAA,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAA/D,CAA+D,CAAC;aAChF,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;aACZ,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;aAClB,IAAI,CAAC,MAAM,EAAE,UAAA,CAAC,IAAI,OAAA,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,EAA1B,CAA0B,CAAC,CAAC;QAE/C,aAAa;QACb,IAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAC/F,IAAM,eAAe,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1E,eAAe,CAAC,IAAI,CACnB,UAAA,KAAK,IAAI,OAAA,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,eAAe,CAAC,EAAxD,CAAwD,EACjE,UAAA,MAAM,IAAI,OAAA,MAAM,EAAN,CAAM,EAChB,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,MAAM,EAAE,EAAb,CAAa,CACrB;aACA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;aACd,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,eAAe,GAAG,CAAC,CAAC;aACpC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;aAChC,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC;aAC/B,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;aACnB,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC;aACxB,IAAI,CAAC,WAAW,EAAE,UAAA,GAAG,IAAI,OAAA,YAAU,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,UAAK,CAAC,CAAC,CAAC,UAAK,CAAC,CAAC,CAAC,MAAG,EAAlD,CAAkD,CAAC,CAAC;QAE9E,sBAAsB;QACtB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,SAAS,GAAG,MAAM,CAAC,CAAC,wCAAwC;IAC7D,CAAC;IAuDD,uBAAO,GAAP;QACC,yBAAyB;QACzB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,qBAAqB,CAAC;aAC1C,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC;aACrB,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC;aACrB,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACvB,0BAA0B;QAC1B,IAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC5C,cAAc,CAAC,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACvF,cAAc,CAAC,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAC5F,CAAC;IAED,iCAAiB,GAAjB;QACC,IAAM,IAAI,GAAG,IAAI,CAAC;QACZ,IAAA,wDAAqF,EAA3E,qBAAK,EAAI,0BAAkE,CAAC;QAE5F,yBAAyB;QACzB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,qBAAqB,CAAC;aAC1C,EAAE,CAAC,WAAW,EAAE,UAAS,KAAK;YAC9B,uBAAuB;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE;gBACjE,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC;gBACrB,KAAK,OAAA;aACL,CAAC,CAAC;QACJ,CAAC,CAAC;aACD,EAAE,CAAC,WAAW,EAAE,UAAS,KAAK;YAC9B,IAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YACpC,IAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,qBAAmB,KAAK,CAAC,SAAS,CAAC,KAAK,CAAG,CAAC,CAAC;YACjF,IAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,kBAAgB,KAAK,CAAC,SAAS,CAAC,KAAK,CAAG,CAAC,CAAC;YAE7E,eAAe;YACf,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC;iBAC/B,IAAI,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;YAClC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC;iBAC3B,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;iBAClB,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;YAExB,uBAAuB;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE;gBACjE,OAAO,EAAE,cAAc;gBACvB,KAAK,OAAA;aACL,CAAC,CAAC;YAEH,2CAA2C;YAC3C,IAAM,gBAAgB,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,KAAK,CAAC,KAAK,KAAK,EAAlB,CAAkB,CAAC,CAAC;YAEpF,eAAe;YACf,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE;gBACvD,cAAc,gBAAA;gBACd,SAAS,EAAE,gBAAgB;gBAC3B,IAAI,EAAE,YAAY,CAAC,QAAQ;aAC3B,CAAC,CAAC;QACJ,CAAC,CAAC;aACD,EAAE,CAAC,OAAO,EAAE,UAAS,KAAK;YAC1B,uBAAuB;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE;gBAC7D,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC;gBACrB,KAAK,OAAA;aACL,CAAC,CAAC;QACJ,CAAC,CAAC;aACD,EAAE,CAAC,UAAU,EAAE,UAAS,KAAK;YAC7B,IAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YACpC,IAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,qBAAmB,KAAK,CAAC,SAAS,CAAC,KAAK,CAAG,CAAC,CAAC;YACjF,IAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,kBAAgB,KAAK,CAAC,SAAS,CAAC,KAAK,CAAG,CAAC,CAAC;YAE7E,eAAe;YACf,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC;iBAChC,IAAI,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;YAChC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC;iBAC5B,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;iBAClB,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAEf,uBAAuB;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE;gBAChE,OAAO,EAAE,cAAc;gBACvB,KAAK,OAAA;aACL,CAAC,CAAC;YAEH,eAAe;YACf,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,cAAc,EAAE,EAAE,cAAc,gBAAA,EAAE,CAAC,CAAC;YACvE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,cAAc,gBAAA,EAAE,CAAC,CAAC;QAC7E,CAAC,CAAC,CAAC;IACL,CAAC;IACF,YAAC;AAAD,CAAC,AArbD,CAA2B,SAAS,GAqbnC","sourcesContent":["// Internal Imports\nimport { Component } from \"../component\";\nimport { DOMUtils } from \"../../services\";\nimport { Events, TooltipTypes, Roles } from \"../../interfaces\";\nimport { Tools } from \"../../tools\";\nimport {\n\tPoint,\n\tAngle,\n\tradialLabelPlacement,\n\tradToDeg,\n\tpolarToCartesianCoords,\n\tdistanceBetweenPointOnCircAndVerticalDiameter\n} from \"../../services/angle-utils\";\n\n// D3 Imports\nimport { select } from \"d3-selection\";\nimport { scaleBand, scaleLinear, ScaleLinear } from \"d3-scale\";\nimport { max, extent } from \"d3-array\";\nimport { lineRadial, curveLinearClosed } from \"d3-shape\";\n\n// used to make transitions\nlet oldYScale: ScaleLinear<number, number>;\n\nexport class Radar extends Component {\n\ttype = \"radar\";\n\tsvg: SVGElement;\n\tgroupMapsTo: string;\n\tuniqueKeys: string[];\n\tuniqueGroups: string[];\n\tdisplayDataNormalized: any;\n\tgroupedDataNormalized: any;\n\n\tinit() {\n\t\tconst { events } = this.services;\n\t\t// Highlight correct line legend item hovers\n\t\tevents.addEventListener(Events.Legend.ITEM_HOVER, this.handleLegendOnHover);\n\t\t// Un-highlight lines on legend item mouseouts\n\t\tevents.addEventListener(Events.Legend.ITEM_MOUSEOUT, this.handleLegendMouseOut);\n\t}\n\n\trender(animate = true) {\n\t\tthis.svg = this.getContainerSVG();\n\t\tconst { width, height } = DOMUtils.getSVGElementSize(this.parent, { useAttrs: true });\n\n\t\tconst data = this.model.getData();\n\t\tconst displayData = this.model.getDisplayData();\n\t\tconst groupedData = this.model.getGroupedData();\n\t\tconst options = this.model.getOptions();\n\t\tconst { angle, value } = Tools.getProperty(options, \"radar\", \"axes\");\n\t\tconst groupMapsTo = Tools.getProperty(options, \"data\", \"groupMapsTo\");\n\t\tconst { xLabelPadding, yLabelPadding, yTicksNumber, minRange, xAxisRectHeight, opacity } = Tools.getProperty(options, \"radar\");\n\n\t\tthis.uniqueKeys = Array.from(new Set(data.map(d => d[angle])));\n\t\tthis.uniqueGroups = Array.from(new Set(data.map(d => d[groupMapsTo])));\n\t\tthis.displayDataNormalized = this.normalizeFlatData(displayData);\n\t\tthis.groupedDataNormalized = this.normalizeGroupedData(groupedData);\n\n\t\tconst labelHeight = this.getLabelDimensions(this.uniqueKeys[0]).height;\n\t\tconst margin = 2 * (labelHeight + yLabelPadding);\n\t\tconst size = Math.min(width, height);\n\t\tconst diameter = size - margin;\n\t\tconst radius = diameter / 2;\n\n\t\tif (radius <= 0) {\n\t\t\treturn;\n\t\t}\n\n\t\t// given a key, return the corresponding angle in radiants\n\t\t// rotated by -PI/2 because we want angle 0° at -y (12 o’clock)\n\t\tconst xScale = scaleBand<string>()\n\t\t\t.domain(this.displayDataNormalized.map(d => d[angle]))\n\t\t\t.range([0, 2 * Math.PI].map(a => a - Math.PI / 2) as [Angle, Angle]);\n\n\t\tconst yScale = scaleLinear()\n\t\t\t.domain([0, max(this.displayDataNormalized.map(d => d[value]) as number[])])\n\t\t\t.range([minRange, radius])\n\t\t\t.nice(yTicksNumber);\n\t\tconst yTicks = yScale.ticks(yTicksNumber);\n\n\t\tconst colorScale = (group: string): string => this.model.getFillColor(group);\n\n\t\t// constructs a new radial line generator\n\t\t// the angle accessor returns the angle in radians with 0° at -y (12 o’clock)\n\t\t// so map back the angle\n\t\tconst radialLineGenerator = lineRadial<any>()\n\t\t\t.angle(d => xScale(d[angle]) + Math.PI / 2)\n\t\t\t.radius(d => yScale(d[value]))\n\t\t\t.curve(curveLinearClosed);\n\n\t\t// this line generator is necessary in order to make a transition of a value from the\n\t\t// position it occupies using the old scale to the position it occupies using the new scale\n\t\tconst oldRadialLineGenerator = lineRadial<any>()\n\t\t\t.angle(radialLineGenerator.angle())\n\t\t\t.radius(d => oldYScale ? oldYScale(d[value]) : minRange)\n\t\t\t.curve(radialLineGenerator.curve());\n\n\t\t// compute the space that each x label needs\n\t\tconst horizSpaceNeededByEachXLabel = this.uniqueKeys.map(key => {\n\t\t\tconst tickWidth = this.getLabelDimensions(key).width;\n\t\t\t// compute the distance between the point that the label rapresents and the vertical diameter\n\t\t\tconst distanceFromDiameter = distanceBetweenPointOnCircAndVerticalDiameter(xScale(key), radius);\n\t\t\t// the space each label occupies is the sum of these two values\n\t\t\treturn tickWidth + distanceFromDiameter;\n\t\t});\n\t\tconst leftPadding = max(horizSpaceNeededByEachXLabel);\n\n\t\t// center coordinates\n\t\tconst c: Point = {\n\t\t\tx: leftPadding + xLabelPadding,\n\t\t\ty: height / 2\n\t\t};\n\n\t\t/////////////////////////////\n\t\t// Drawing the radar\n\t\t/////////////////////////////\n\n\t\t// y axes\n\t\tconst yAxes = DOMUtils.appendOrSelect(this.svg, \"g.y-axes\").attr(\"role\", Roles.GROUP);\n\t\tconst yAxisUpdate = yAxes.selectAll(\"path\").data(yTicks, tick => tick);\n\t\t// for each tick, create array of data corresponding to the points composing the shape\n\t\tconst shapeData = (tick: number) => this.uniqueKeys.map(key => ({ [angle]: key, [value]: tick }));\n\t\tyAxisUpdate.join(\n\t\t\tenter => enter\n\t\t\t\t.append(\"path\")\n\t\t\t\t.attr(\"role\", Roles.GRAPHICS_SYMBOL)\n\t\t\t\t.attr(\"opacity\", 0)\n\t\t\t\t.attr(\"transform\", `translate(${c.x}, ${c.y})`)\n\t\t\t\t.attr(\"fill\", \"none\")\n\t\t\t\t.attr(\"d\", tick => oldRadialLineGenerator(shapeData(tick)))\n\t\t\t\t.call(selection => selection\n\t\t\t\t\t.transition(this.services.transitions.getTransition(\"radar_y_axes_enter\", animate))\n\t\t\t\t\t.attr(\"opacity\", 1)\n\t\t\t\t\t.attr(\"d\", tick => radialLineGenerator(shapeData(tick)))\n\t\t\t\t),\n\t\t\tupdate => update\n\t\t\t\t.call(selection => selection\n\t\t\t\t\t.transition(this.services.transitions.getTransition(\"radar_y_axes_update\", animate))\n\t\t\t\t\t.attr(\"opacity\", 1)\n\t\t\t\t\t.attr(\"transform\", `translate(${c.x}, ${c.y})`)\n\t\t\t\t\t.attr(\"d\", tick => radialLineGenerator(shapeData(tick)))\n\t\t\t\t),\n\t\t\texit => exit\n\t\t\t\t.call(selection => selection\n\t\t\t\t\t.transition(this.services.transitions.getTransition(\"radar_y_axes_exit\", animate))\n\t\t\t\t\t.attr(\"d\", tick => radialLineGenerator(shapeData(tick)))\n\t\t\t\t\t.attr(\"opacity\", 0)\n\t\t\t\t\t.remove()\n\t\t\t\t)\n\t\t);\n\n\t\t// y labels (show only the min and the max labels)\n\t\tconst yLabels = DOMUtils.appendOrSelect(this.svg, \"g.y-labels\").attr(\"role\", Roles.GROUP);\n\t\tconst yLabelUpdate = yLabels.selectAll(\"text\").data(extent(yTicks));\n\t\tyLabelUpdate.join(\n\t\t\tenter => enter\n\t\t\t\t.append(\"text\")\n\t\t\t\t.attr(\"opacity\", 0)\n\t\t\t\t.text(tick => tick)\n\t\t\t\t.attr(\"x\", tick => polarToCartesianCoords(- Math.PI / 2, yScale(tick), c).x + yLabelPadding)\n\t\t\t\t.attr(\"y\", tick => polarToCartesianCoords(- Math.PI / 2, yScale(tick), c).y)\n\t\t\t\t.style(\"text-anchor\", \"start\")\n\t\t\t\t.style(\"dominant-baseline\", \"middle\")\n\t\t\t\t.call(selection => selection\n\t\t\t\t\t.transition(this.services.transitions.getTransition(\"radar_y_labels_enter\", animate))\n\t\t\t\t\t.attr(\"opacity\", 1)\n\t\t\t\t),\n\t\t\tupdate => update\n\t\t\t\t.call(selection => selection\n\t\t\t\t\t.transition(this.services.transitions.getTransition(\"radar_y_labels_update\", animate))\n\t\t\t\t\t.text(tick => tick)\n\t\t\t\t\t.attr(\"opacity\", 1)\n\t\t\t\t\t.attr(\"x\", tick => polarToCartesianCoords(- Math.PI / 2, yScale(tick), c).x + yLabelPadding)\n\t\t\t\t\t.attr(\"y\", tick => polarToCartesianCoords(- Math.PI / 2, yScale(tick), c).y)\n\t\t\t\t),\n\t\t\texit => exit\n\t\t\t\t.call(selection => selection\n\t\t\t\t\t.transition(this.services.transitions.getTransition(\"radar_y_labels_exit\", animate))\n\t\t\t\t\t.attr(\"opacity\", 0)\n\t\t\t\t\t.remove()\n\t\t\t\t)\n\t\t);\n\n\t\t// x axes\n\t\tconst xAxes = DOMUtils.appendOrSelect(this.svg, \"g.x-axes\").attr(\"role\", Roles.GROUP);\n\t\tconst xAxisUpdate = xAxes.selectAll(\"line\").data(this.uniqueKeys, key => key);\n\t\txAxisUpdate.join(\n\t\t\tenter => enter\n\t\t\t\t.append(\"line\")\n\t\t\t\t.attr(\"role\", Roles.GRAPHICS_SYMBOL)\n\t\t\t\t.attr(\"opacity\", 0)\n\t\t\t\t.attr(\"class\", key => `x-axis-${Tools.kebabCase(key)}`) // replace spaces with -\n\t\t\t\t.attr(\"stroke-dasharray\", \"0\")\n\t\t\t\t.attr(\"x1\", key => polarToCartesianCoords(xScale(key), 0, c).x)\n\t\t\t\t.attr(\"y1\", key => polarToCartesianCoords(xScale(key), 0, c).y)\n\t\t\t\t.attr(\"x2\", key => polarToCartesianCoords(xScale(key), 0, c).x)\n\t\t\t\t.attr(\"y2\", key => polarToCartesianCoords(xScale(key), 0, c).y)\n\t\t\t\t.call(selection => selection\n\t\t\t\t\t.transition(this.services.transitions.getTransition(\"radar_x_axes_enter\", animate))\n\t\t\t\t\t.attr(\"opacity\", 1)\n\t\t\t\t\t.attr(\"x1\", key => polarToCartesianCoords(xScale(key), yScale.range()[0], c).x)\n\t\t\t\t\t.attr(\"y1\", key => polarToCartesianCoords(xScale(key), yScale.range()[0], c).y)\n\t\t\t\t\t.attr(\"x2\", key => polarToCartesianCoords(xScale(key), yScale.range()[1], c).x)\n\t\t\t\t\t.attr(\"y2\", key => polarToCartesianCoords(xScale(key), yScale.range()[1], c).y)\n\t\t\t\t),\n\t\t\tupdate => update\n\t\t\t.call(selection => selection\n\t\t\t\t.transition(this.services.transitions.getTransition(\"radar_x_axes_update\", animate))\n\t\t\t\t.attr(\"opacity\", 1)\n\t\t\t\t.attr(\"x1\", key => polarToCartesianCoords(xScale(key), yScale.range()[0], c).x)\n\t\t\t\t.attr(\"y1\", key => polarToCartesianCoords(xScale(key), yScale.range()[0], c).y)\n\t\t\t\t.attr(\"x2\", key => polarToCartesianCoords(xScale(key), yScale.range()[1], c).x)\n\t\t\t\t.attr(\"y2\", key => polarToCartesianCoords(xScale(key), yScale.range()[1], c).y)\n\t\t\t\t),\n\t\t\texit => exit\n\t\t\t\t.call(selection => selection\n\t\t\t\t\t.transition(this.services.transitions.getTransition(\"radar_x_axes_exit\", animate))\n\t\t\t\t\t.attr(\"opacity\", 0)\n\t\t\t\t\t.remove()\n\t\t\t\t)\n\t\t);\n\n\t\t// x labels\n\t\tconst xLabels = DOMUtils.appendOrSelect(this.svg, \"g.x-labels\").attr(\"role\", Roles.GROUP);\n\t\tconst xLabelUpdate = xLabels.selectAll(\"text\").data(this.uniqueKeys);\n\t\txLabelUpdate.join(\n\t\t\tenter => enter\n\t\t\t\t.append(\"text\")\n\t\t\t\t.text(key => key)\n\t\t\t\t.attr(\"opacity\", 0)\n\t\t\t\t.attr(\"x\", key => polarToCartesianCoords(xScale(key), yScale.range()[1] + xLabelPadding, c).x)\n\t\t\t\t.attr(\"y\", key => polarToCartesianCoords(xScale(key), yScale.range()[1] + xLabelPadding, c).y)\n\t\t\t\t.style(\"text-anchor\", key => radialLabelPlacement(xScale(key)).textAnchor)\n\t\t\t\t.style(\"dominant-baseline\", key => radialLabelPlacement(xScale(key)).dominantBaseline)\n\t\t\t\t.call(selection => selection\n\t\t\t\t\t.transition(this.services.transitions.getTransition(\"radar_x_labels_enter\", animate))\n\t\t\t\t\t.attr(\"opacity\", 1)\n\t\t\t\t),\n\t\t\tupdate => update\n\t\t\t\t.call(selection => selection\n\t\t\t\t\t.transition(this.services.transitions.getTransition(\"radar_x_labels_update\", animate))\n\t\t\t\t\t.attr(\"opacity\", 1)\n\t\t\t\t\t.attr(\"x\", key => polarToCartesianCoords(xScale(key), yScale.range()[1] + xLabelPadding, c).x)\n\t\t\t\t\t.attr(\"y\", key => polarToCartesianCoords(xScale(key), yScale.range()[1] + xLabelPadding, c).y)\n\t\t\t\t),\n\t\t\texit => exit\n\t\t\t\t.call(selection => selection\n\t\t\t\t\t.transition(this.services.transitions.getTransition(\"radar_x_labels_exit\", animate))\n\t\t\t\t\t.attr(\"opacity\", 0)\n\t\t\t\t\t.remove()\n\t\t\t\t)\n\t\t);\n\n\t\t// blobs\n\t\tconst blobs = DOMUtils.appendOrSelect(this.svg, \"g.blobs\").attr(\"role\", Roles.GROUP);\n\t\tconst blobUpdate = blobs.selectAll(\"path\").data(this.groupedDataNormalized, group => group.name);\n\t\tblobUpdate.join(\n\t\t\tenter => enter\n\t\t\t\t.append(\"path\")\n\t\t\t\t.attr(\"class\", \"blob\")\n\t\t\t\t.attr(\"role\", Roles.GRAPHICS_SYMBOL)\n\t\t\t\t.attr(\"opacity\", 0)\n\t\t\t\t.attr(\"transform\", `translate(${c.x}, ${c.y})`)\n\t\t\t\t.attr(\"fill\", group => colorScale(group.name))\n\t\t\t\t.style(\"fill-opacity\", opacity.selected)\n\t\t\t\t.attr(\"stroke\", group => colorScale(group.name))\n\t\t\t\t.attr(\"d\", group => oldRadialLineGenerator(group.data))\n\t\t\t\t.call(selection => selection\n\t\t\t\t\t.transition(this.services.transitions.getTransition(\"radar_blobs_enter\", animate))\n\t\t\t\t\t.attr(\"opacity\", 1)\n\t\t\t\t\t.attr(\"d\", group => radialLineGenerator(group.data))\n\t\t\t\t),\n\t\t\tupdate => update\n\t\t\t\t.call(selection => selection\n\t\t\t\t\t.transition(this.services.transitions.getTransition(\"radar_blobs_update\", animate))\n\t\t\t\t\t.attr(\"opacity\", 1)\n\t\t\t\t\t.attr(\"transform\", `translate(${c.x}, ${c.y})`)\n\t\t\t\t\t.attr(\"d\", group => radialLineGenerator(group.data))\n\t\t\t\t),\n\t\t\texit => exit\n\t\t\t\t.call(selection => selection\n\t\t\t\t\t.transition(this.services.transitions.getTransition(\"radar_blobs_exit\", animate))\n\t\t\t\t\t.attr(\"d\", group => radialLineGenerator(group.data))\n\t\t\t\t\t.attr(\"opacity\", 0)\n\t\t\t\t\t.remove()\n\t\t\t\t)\n\t\t);\n\n\t\t// data dots\n\t\tconst dots = DOMUtils.appendOrSelect(this.svg, \"g.dots\").attr(\"role\", Roles.GROUP);\n\t\tconst dotsUpdate = dots.selectAll(\"circle\").data(this.displayDataNormalized);\n\t\tdotsUpdate.join(\n\t\t\tenter => enter.append(\"circle\").attr(\"role\", Roles.GRAPHICS_SYMBOL),\n\t\t\tupdate => update,\n\t\t\texit => exit.remove()\n\t\t)\n\t\t.attr(\"class\", d => Tools.kebabCase(d[angle]))\n\t\t.attr(\"cx\", d => polarToCartesianCoords(xScale(d[angle]), yScale(d[value]), c).x)\n\t\t.attr(\"cy\", d => polarToCartesianCoords(xScale(d[angle]), yScale(d[value]), c).y)\n\t\t.attr(\"r\", 0)\n\t\t.attr(\"opacity\", 0)\n\t\t.attr(\"fill\", d => colorScale(d[groupMapsTo]));\n\n\t\t// rectangles\n\t\tconst xAxesRect = DOMUtils.appendOrSelect(this.svg, \"g.x-axes-rect\").attr(\"role\", Roles.GROUP);\n\t\tconst xAxisRectUpdate = xAxesRect.selectAll(\"rect\").data(this.uniqueKeys);\n\t\txAxisRectUpdate.join(\n\t\t\tenter => enter.append(\"rect\").attr(\"role\", Roles.GRAPHICS_SYMBOL),\n\t\t\tupdate => update,\n\t\t\texit => exit.remove()\n\t\t)\n\t\t.attr(\"x\", c.x)\n\t\t.attr(\"y\", c.y - xAxisRectHeight / 2)\n\t\t.attr(\"width\", yScale.range()[1])\n\t\t.attr(\"height\", xAxisRectHeight)\n\t\t.attr(\"fill\", \"red\")\n\t\t.style(\"fill-opacity\", 0)\n\t\t.attr(\"transform\", key => `rotate(${radToDeg(xScale(key))}, ${c.x}, ${c.y})`);\n\n\t\t// Add event listeners\n\t\tthis.addEventListeners();\n\n\t\toldYScale = yScale; // save the current scale as the old one\n\t}\n\n\t// append temporarily the label to get the exact space that it occupies\n\tgetLabelDimensions = (label: string) => {\n\t\tconst tmpTick = DOMUtils.appendOrSelect(this.svg, `g.tmp-tick`);\n\t\tconst tmpTickText = DOMUtils.appendOrSelect(tmpTick, `text`).text(label);\n\t\tconst { width, height } = DOMUtils.getSVGElementSize(tmpTickText.node(), { useBBox: true });\n\t\ttmpTick.remove();\n\t\treturn { width, height };\n\t}\n\n\t// Given a flat array of objects, if there are missing data on key,\n\t// creates corresponding data with value = null\n\tnormalizeFlatData = (dataset: any) => {\n\t\tconst options = this.model.getOptions();\n\t\tconst { angle, value } = Tools.getProperty(options, \"radar\", \"axes\");\n\t\tconst groupMapsTo = Tools.getProperty(options, \"data\", \"groupMapsTo\");\n\t\tconst completeBlankData = Tools.flatMapDeep(this.uniqueKeys.map(key => {\n\t\t\treturn this.uniqueGroups.map(group => ({ [angle]: key, [groupMapsTo]: group, [value]: null }));\n\t\t}));\n\t\treturn Tools.merge(completeBlankData, dataset);\n\t}\n\n\t// Given a a grouped array of objects, if there are missing data on key,\n\t// creates corresponding data with value = null\n\tnormalizeGroupedData = (dataset: any) => {\n\t\tconst options = this.model.getOptions();\n\t\tconst { angle, value } = Tools.getProperty(options, \"radar\", \"axes\");\n\t\tconst groupMapsTo = Tools.getProperty(options, \"data\", \"groupMapsTo\");\n\t\treturn dataset.map(({ name, data }) => {\n\t\t\tconst completeBlankData = this.uniqueKeys.map(k => ({ [groupMapsTo]: name, [angle]: k, [value]: null }));\n\t\t\treturn { name, data: Tools.merge(completeBlankData, data) };\n\t\t});\n\t}\n\n\thandleLegendOnHover = (event: CustomEvent) => {\n\t\tconst { hoveredElement } = event.detail;\n\t\tconst opacity = Tools.getProperty(this.model.getOptions(), \"radar\", \"opacity\");\n\t\tthis.parent.selectAll(\"g.blobs path\")\n\t\t\t.transition(this.services.transitions.getTransition(\"legend-hover-blob\"))\n\t\t\t.style(\"fill-opacity\", group => {\n\t\t\t\tif (group.name !== hoveredElement.datum().name) {\n\t\t\t\t\treturn Tools.getProperty(opacity, \"unselected\");\n\t\t\t\t}\n\t\t\t\treturn Tools.getProperty(opacity, \"selected\");\n\t\t\t});\n\t}\n\n\thandleLegendMouseOut = (event: CustomEvent) => {\n\t\tconst opacity = Tools.getProperty(this.model.getOptions(), \"radar\", \"opacity\");\n\t\tthis.parent.selectAll(\"g.blobs path\")\n\t\t\t.transition(this.services.transitions.getTransition(\"legend-mouseout-blob\"))\n\t\t\t.style(\"fill-opacity\", Tools.getProperty(opacity, \"selected\"));\n\t}\n\n\tdestroy() {\n\t\t// Remove event listeners\n\t\tthis.parent.selectAll(\".x-axes-rect > rect\")\n\t\t\t.on(\"mouseover\", null)\n\t\t\t.on(\"mousemove\", null)\n\t\t\t.on(\"mouseout\", null);\n\t\t// Remove legend listeners\n\t\tconst eventsFragment = this.services.events;\n\t\teventsFragment.removeEventListener(Events.Legend.ITEM_HOVER, this.handleLegendOnHover);\n\t\teventsFragment.removeEventListener(Events.Legend.ITEM_MOUSEOUT, this.handleLegendMouseOut);\n\t}\n\n\taddEventListeners() {\n\t\tconst self = this;\n\t\tconst { axes: { angle }, dotsRadius } = Tools.getProperty(this.model.getOptions(), \"radar\");\n\n\t\t// events on x axes rects\n\t\tthis.parent.selectAll(\".x-axes-rect > rect\")\n\t\t\t.on(\"mouseover\", function(datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Radar.X_AXIS_MOUSEOVER, {\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(\"mousemove\", function(datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\t\t\t\tconst axisLine = self.parent.select(`.x-axes .x-axis-${Tools.kebabCase(datum)}`);\n\t\t\t\tconst dots = self.parent.selectAll(`.dots circle.${Tools.kebabCase(datum)}`);\n\n\t\t\t\t// Change style\n\t\t\t\taxisLine.classed(\"hovered\", true)\n\t\t\t\t\t.attr(\"stroke-dasharray\", \"4 4\");\n\t\t\t\tdots.classed(\"hovered\", true)\n\t\t\t\t\t.attr(\"opacity\", 1)\n\t\t\t\t\t.attr(\"r\", dotsRadius);\n\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Radar.X_AXIS_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// get the items that should be highlighted\n\t\t\t\tconst itemsToHighlight = self.displayDataNormalized.filter(d => d[angle] === datum);\n\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\tmultidata: itemsToHighlight,\n\t\t\t\t\ttype: TooltipTypes.GRIDLINE\n\t\t\t\t});\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.Radar.X_AXIS_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\tconst axisLine = self.parent.select(`.x-axes .x-axis-${Tools.kebabCase(datum)}`);\n\t\t\t\tconst dots = self.parent.selectAll(`.dots circle.${Tools.kebabCase(datum)}`);\n\n\t\t\t\t// Change style\n\t\t\t\taxisLine.classed(\"hovered\", false)\n\t\t\t\t\t.attr(\"stroke-dasharray\", \"0\");\n\t\t\t\tdots.classed(\"hovered\", false)\n\t\t\t\t\t.attr(\"opacity\", 0)\n\t\t\t\t\t.attr(\"r\", 0);\n\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Radar.X_AXIS_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(\"hide-tooltip\", { hoveredElement });\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.HIDE, { hoveredElement });\n\t\t\t});\n\t}\n}\n"]}
@@ -5,6 +5,7 @@ export * from "./essentials/tooltip";
5
5
  export * from "./essentials/tooltip-bar";
6
6
  export * from "./essentials/tooltip-pie";
7
7
  export * from "./essentials/tooltip-scatter";
8
+ export * from "./essentials/tooltip-radar";
8
9
  export * from "./graphs/bar-simple";
9
10
  export * from "./graphs/bar-grouped";
10
11
  export * from "./graphs/bar-stacked";
@@ -18,4 +19,5 @@ export * from "./layout/layout";
18
19
  export * from "./axes/two-dimensional-axes";
19
20
  export * from "./axes/axis";
20
21
  export * from "./axes/grid";
22
+ export * from "./axes/ruler";
21
23
  export * from "./axes/zero-line";
@@ -6,6 +6,7 @@ export * from "./essentials/tooltip";
6
6
  export * from "./essentials/tooltip-bar";
7
7
  export * from "./essentials/tooltip-pie";
8
8
  export * from "./essentials/tooltip-scatter";
9
+ export * from "./essentials/tooltip-radar";
9
10
  // GRAPHS
10
11
  export * from "./graphs/bar-simple";
11
12
  export * from "./graphs/bar-grouped";
@@ -22,5 +23,6 @@ export * from "./layout/layout";
22
23
  export * from "./axes/two-dimensional-axes";
23
24
  export * from "./axes/axis";
24
25
  export * from "./axes/grid";
26
+ export * from "./axes/ruler";
25
27
  export * from "./axes/zero-line";
26
28
  //# sourceMappingURL=../../src/components/index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAE5B,aAAa;AACb,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,8BAA8B,CAAC;AAE7C,SAAS;AACT,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAE/B,SAAS;AACT,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAEhC,OAAO;AACP,cAAc,6BAA6B,CAAC;AAC5C,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC","sourcesContent":["export * from \"./component\";\n\n// ESSENTIALS\nexport * from \"./essentials/legend\";\nexport * from \"./essentials/title\";\nexport * from \"./essentials/tooltip\";\nexport * from \"./essentials/tooltip-bar\";\nexport * from \"./essentials/tooltip-pie\";\nexport * from \"./essentials/tooltip-scatter\";\n\n// GRAPHS\nexport * from \"./graphs/bar-simple\";\nexport * from \"./graphs/bar-grouped\";\nexport * from \"./graphs/bar-stacked\";\nexport * from \"./graphs/bubble\";\nexport * from \"./graphs/line\";\nexport * from \"./graphs/scatter\";\nexport * from \"./graphs/pie\";\nexport * from \"./graphs/donut\";\n\n// Layout\nexport * from \"./layout/spacer\";\nexport * from \"./layout/layout\";\n\n// MISC\nexport * from \"./axes/two-dimensional-axes\";\nexport * from \"./axes/axis\";\nexport * from \"./axes/grid\";\nexport * from \"./axes/zero-line\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAE5B,aAAa;AACb,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAE3C,SAAS;AACT,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAE/B,SAAS;AACT,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAEhC,OAAO;AACP,cAAc,6BAA6B,CAAC;AAC5C,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC","sourcesContent":["export * from \"./component\";\n\n// ESSENTIALS\nexport * from \"./essentials/legend\";\nexport * from \"./essentials/title\";\nexport * from \"./essentials/tooltip\";\nexport * from \"./essentials/tooltip-bar\";\nexport * from \"./essentials/tooltip-pie\";\nexport * from \"./essentials/tooltip-scatter\";\nexport * from \"./essentials/tooltip-radar\";\n\n// GRAPHS\nexport * from \"./graphs/bar-simple\";\nexport * from \"./graphs/bar-grouped\";\nexport * from \"./graphs/bar-stacked\";\nexport * from \"./graphs/bubble\";\nexport * from \"./graphs/line\";\nexport * from \"./graphs/scatter\";\nexport * from \"./graphs/pie\";\nexport * from \"./graphs/donut\";\n\n// Layout\nexport * from \"./layout/spacer\";\nexport * from \"./layout/layout\";\n\n// MISC\nexport * from \"./axes/two-dimensional-axes\";\nexport * from \"./axes/axis\";\nexport * from \"./axes/grid\";\nexport * from \"./axes/ruler\";\nexport * from \"./axes/zero-line\";\n"]}
@@ -1,4 +1,4 @@
1
- import { BaseChartOptions, AxisChartOptions, ScatterChartOptions, LineChartOptions, BarChartOptions, StackedBarChartOptions, PieChartOptions, DonutChartOptions, BubbleChartOptions, GridOptions, TimeScaleOptions, TooltipOptions, AxisTooltipOptions, BarTooltipOptions, LegendOptions } from "./interfaces";
1
+ import { BaseChartOptions, AxisChartOptions, ScatterChartOptions, LineChartOptions, BarChartOptions, StackedBarChartOptions, PieChartOptions, DonutChartOptions, BubbleChartOptions, RadarChartOptions, GridOptions, TimeScaleOptions, TooltipOptions, AxisTooltipOptions, BarTooltipOptions, LegendOptions } from "./interfaces";
2
2
  /**
3
3
  * Legend options
4
4
  */
@@ -25,6 +25,7 @@ export declare const options: {
25
25
  scatterChart: ScatterChartOptions;
26
26
  pieChart: PieChartOptions;
27
27
  donutChart: DonutChartOptions;
28
+ radarChart: RadarChartOptions;
28
29
  };
29
30
  /**
30
31
  * Options for line behaviour