@carbon/charts 0.30.20 → 0.30.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.
Files changed (158) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/build/demo/data/bar.d.ts +174 -0
  3. package/build/demo/data/bubble.d.ts +41 -0
  4. package/build/demo/data/donut.d.ts +23 -0
  5. package/build/demo/data/line.d.ts +70 -0
  6. package/build/demo/data/pie.d.ts +13 -0
  7. package/build/demo/data/scatter.d.ts +31 -0
  8. package/build/demo/data/step.d.ts +4 -0
  9. package/build/demo/data/time-series-axis.d.ts +55 -3
  10. package/build/src/components/axes/grid.d.ts +3 -3
  11. package/build/src/components/axes/two-dimensional-axes.d.ts +3 -0
  12. package/build/src/components/essentials/threshold.d.ts +17 -0
  13. package/build/src/components/graphs/bar.d.ts +1 -1
  14. package/build/src/components/graphs/scatter.d.ts +1 -0
  15. package/build/src/components/graphs/skeleton.d.ts +22 -0
  16. package/build/src/components/index.d.ts +2 -0
  17. package/build/src/interfaces/axis-scales.d.ts +11 -0
  18. package/build/src/interfaces/charts.d.ts +4 -0
  19. package/build/src/interfaces/components.d.ts +21 -0
  20. package/build/src/interfaces/enums.d.ts +9 -0
  21. package/build/src/interfaces/events.d.ts +7 -0
  22. package/build/src/model.d.ts +1 -0
  23. package/build/src/services/scales-cartesian.d.ts +9 -1
  24. package/build/stories/tutorials/event-listeners.d.ts +1 -0
  25. package/build/stories/tutorials/getting-started/angular.d.ts +1 -0
  26. package/build/stories/tutorials/getting-started/react.d.ts +1 -0
  27. package/build/stories/tutorials/getting-started/vanilla.d.ts +1 -0
  28. package/build/stories/tutorials/getting-started/vue.d.ts +1 -0
  29. package/build/stories/tutorials/index.d.ts +6 -0
  30. package/build/stories/tutorials/tabular-data-format.d.ts +1 -0
  31. package/bundle.js +1 -1
  32. package/charts/bar-grouped.js +4 -2
  33. package/charts/bar-grouped.js.map +1 -1
  34. package/charts/bar-simple.js +4 -2
  35. package/charts/bar-simple.js.map +1 -1
  36. package/charts/bar-stacked.js +4 -2
  37. package/charts/bar-stacked.js.map +1 -1
  38. package/charts/bubble.js +4 -2
  39. package/charts/bubble.js.map +1 -1
  40. package/charts/donut.js +4 -2
  41. package/charts/donut.js.map +1 -1
  42. package/charts/line.js +4 -2
  43. package/charts/line.js.map +1 -1
  44. package/charts/pie.js +4 -2
  45. package/charts/pie.js.map +1 -1
  46. package/charts/scatter.js +4 -2
  47. package/charts/scatter.js.map +1 -1
  48. package/components/axes/axis.js +24 -13
  49. package/components/axes/axis.js.map +1 -1
  50. package/components/axes/grid.d.ts +3 -3
  51. package/components/axes/grid.js +27 -9
  52. package/components/axes/grid.js.map +1 -1
  53. package/components/axes/two-dimensional-axes.d.ts +3 -0
  54. package/components/axes/two-dimensional-axes.js +30 -0
  55. package/components/axes/two-dimensional-axes.js.map +1 -1
  56. package/components/axes/zero-line.js +15 -1
  57. package/components/axes/zero-line.js.map +1 -1
  58. package/components/essentials/threshold.d.ts +17 -0
  59. package/components/essentials/threshold.js +165 -0
  60. package/components/essentials/threshold.js.map +1 -0
  61. package/components/graphs/bar-grouped.js +3 -1
  62. package/components/graphs/bar-grouped.js.map +1 -1
  63. package/components/graphs/bar-simple.js +1 -1
  64. package/components/graphs/bar-simple.js.map +1 -1
  65. package/components/graphs/bar-stacked.js +1 -1
  66. package/components/graphs/bar-stacked.js.map +1 -1
  67. package/components/graphs/bar.d.ts +1 -1
  68. package/components/graphs/bar.js +1 -1
  69. package/components/graphs/bar.js.map +1 -1
  70. package/components/graphs/donut.js +6 -0
  71. package/components/graphs/donut.js.map +1 -1
  72. package/components/graphs/scatter.d.ts +1 -0
  73. package/components/graphs/scatter.js +28 -0
  74. package/components/graphs/scatter.js.map +1 -1
  75. package/components/graphs/skeleton.d.ts +22 -0
  76. package/components/graphs/skeleton.js +241 -0
  77. package/components/graphs/skeleton.js.map +1 -0
  78. package/components/index.d.ts +2 -0
  79. package/components/index.js +2 -0
  80. package/components/index.js.map +1 -1
  81. package/configuration.js +2 -1
  82. package/configuration.js.map +1 -1
  83. package/demo/data/bar.d.ts +174 -0
  84. package/demo/data/bar.js +188 -2
  85. package/demo/data/bar.js.map +1 -1
  86. package/demo/data/bubble.d.ts +41 -0
  87. package/demo/data/bubble.js +43 -0
  88. package/demo/data/bubble.js.map +1 -1
  89. package/demo/data/bundle.js +1 -1
  90. package/demo/data/donut.d.ts +23 -0
  91. package/demo/data/donut.js +25 -0
  92. package/demo/data/donut.js.map +1 -1
  93. package/demo/data/index.js +177 -0
  94. package/demo/data/index.js.map +1 -1
  95. package/demo/data/line.d.ts +70 -0
  96. package/demo/data/line.js +73 -0
  97. package/demo/data/line.js.map +1 -1
  98. package/demo/data/pie.d.ts +13 -0
  99. package/demo/data/pie.js +15 -0
  100. package/demo/data/pie.js.map +1 -1
  101. package/demo/data/scatter.d.ts +31 -0
  102. package/demo/data/scatter.js +33 -0
  103. package/demo/data/scatter.js.map +1 -1
  104. package/demo/data/step.d.ts +4 -0
  105. package/demo/data/step.js +15 -0
  106. package/demo/data/step.js.map +1 -1
  107. package/demo/data/time-series-axis.d.ts +55 -3
  108. package/demo/data/time-series-axis.js +61 -3
  109. package/demo/data/time-series-axis.js.map +1 -1
  110. package/demo/styles.css +292 -0
  111. package/demo/styles.css.map +1 -1
  112. package/demo/styles.min.css +1 -1
  113. package/demo/styles.min.css.map +1 -1
  114. package/demo/tsconfig.tsbuildinfo +248 -245
  115. package/interfaces/axis-scales.d.ts +11 -0
  116. package/interfaces/axis-scales.js.map +1 -1
  117. package/interfaces/charts.d.ts +4 -0
  118. package/interfaces/charts.js.map +1 -1
  119. package/interfaces/components.d.ts +21 -0
  120. package/interfaces/components.js.map +1 -1
  121. package/interfaces/enums.d.ts +9 -0
  122. package/interfaces/enums.js +10 -0
  123. package/interfaces/enums.js.map +1 -1
  124. package/interfaces/events.d.ts +7 -0
  125. package/interfaces/events.js +8 -0
  126. package/interfaces/events.js.map +1 -1
  127. package/model.d.ts +1 -0
  128. package/model.js +3 -0
  129. package/model.js.map +1 -1
  130. package/package.json +1 -1
  131. package/services/scales-cartesian.d.ts +9 -1
  132. package/services/scales-cartesian.js +33 -0
  133. package/services/scales-cartesian.js.map +1 -1
  134. package/services/time-series.js +8 -7
  135. package/services/time-series.js.map +1 -1
  136. package/styles/components/_skeleton.scss +57 -0
  137. package/styles/components/_threshold.scss +49 -0
  138. package/styles/components/index.scss +2 -0
  139. package/styles/graphs/_scatter.scss +4 -0
  140. package/styles-g10.css +76 -0
  141. package/styles-g10.css.map +1 -1
  142. package/styles-g10.min.css +1 -1
  143. package/styles-g10.min.css.map +1 -1
  144. package/styles-g100.css +76 -0
  145. package/styles-g100.css.map +1 -1
  146. package/styles-g100.min.css +1 -1
  147. package/styles-g100.min.css.map +1 -1
  148. package/styles-g90.css +76 -0
  149. package/styles-g90.css.map +1 -1
  150. package/styles-g90.min.css +1 -1
  151. package/styles-g90.min.css.map +1 -1
  152. package/styles.css +76 -0
  153. package/styles.css.map +1 -1
  154. package/styles.min.css +1 -1
  155. package/styles.min.css.map +1 -1
  156. package/tools.js +6 -0
  157. package/tools.js.map +1 -1
  158. package/tsconfig.tsbuildinfo +145 -82
@@ -1,6 +1,7 @@
1
1
  import { ScaleTypes } from "./enums";
2
2
  import { AxisDomain } from "d3";
3
3
  import { Locale } from "date-fns";
4
+ import { ThresholdOptions } from "./components";
4
5
  /**
5
6
  * options to configure a scale. not all options are used by all scales
6
7
  */
@@ -31,6 +32,16 @@ export interface AxisOptions {
31
32
  * optional title for the scales
32
33
  */
33
34
  title?: string;
35
+ /**
36
+ * thresholds
37
+ * Example:
38
+ * [
39
+ * {value: 10000},
40
+ * {value: 40020, valueFormatter: (x) => x},
41
+ * {value: 55000, label: "Custom label", fillColor: "#03a9f4"},
42
+ * ]
43
+ */
44
+ thresholds?: ThresholdOptions[];
34
45
  /**
35
46
  * tick configuration
36
47
  */
@@ -1 +1 @@
1
- {"version":3,"file":"axis-scales.js","sourceRoot":"","sources":["axis-scales.ts"],"names":[],"mappings":"","sourcesContent":["import { ScaleTypes } from \"./enums\";\nimport { AxisDomain } from \"d3\";\nimport { Locale } from \"date-fns\";\n\n/**\n * options to configure a scale. not all options are used by all scales\n */\nexport interface AxisOptions {\n\t/**\n\t * type of the scale used on axis\n\t */\n\tscaleType?: ScaleTypes;\n\t/**\n\t * Whether the Axis should use the specified domain\n\t * instead of it being dynamically generated based on data extents.\n\t * The type of values should depend on the scale type.\n\t * Example for continuous axis scale: [-100, 100]\n\t * Example for discrete axis scale: ['Qty', 'More', 'Sold']\n\t */\n\tdomain?: AxisDomain[];\n\t/**\n\t* Whether the Axis should be forced to include 0 as a starting point\n\t* (or ending point, in case of all negative axis).\n\t* Default: true\n\t*/\n\tincludeZero?: boolean;\n\t/**\n\t * identifies what key within the data the axis values would map to\n\t */\n\tmapsTo?: string;\n\t/**\n\t * optional title for the scales\n\t */\n\ttitle?: string;\n\t/**\n\t * tick configuration\n\t */\n\tticks?: {\n\t\t/**\n\t\t * number of ticks to show\n\t\t */\n\t\tnumber?: number;\n\t\t/**\n\t\t * minimum tick value\n\t\t */\n\t\tmin?: number;\n\t\t/**\n\t\t * maximum tick value\n\t\t */\n\t\tmax?: number;\n\t\t/**\n\t\t * minimum width of a tick\n\t\t * before getting rotated (in pixels)\n\t\t */\n\t\trotateIfSmallerThan?: number;\n\t\t/**\n\t\t * function to format the ticks\n\t\t */\n\t\tformatter?: Function;\n\t};\n}\n\n/**\n * customize time series scales\n */\nexport interface TimeScaleOptions {\n\taddSpaceOnEdges?: number;\n\t/**\n\t * if it's true, days are shown as mon-sun,\n\t * otherwise days are shown as number 1-31\n\t */\n\tshowDayName?: boolean;\n\t/**\n\t * formats for each time interval\n\t */\n\ttimeIntervalFormats?: TimeIntervalFormats;\n\t/**\n\t * locale object, for more information see https://date-fns.org/v2.11.0/docs/Locale.\n\t * example: `import enUSLocaleObject from \"date-fns/locale/en-US/index\"`.\n\t * available locale objects are: https://github.com/date-fns/date-fns/tree/master/src/locale\n\t */\n\tlocaleObject?: Locale;\n}\n\n/**\n * time scales: customize ticks format for different time intervals\n */\nexport interface TickFormats {\n\tprimary?: string;\n\tsecondary?: string;\n}\n\n\nexport interface TimeIntervalFormats {\n\t\"15seconds\"?: TickFormats;\n\t\"minute\"?: TickFormats;\n\t\"30minutes\"?: TickFormats;\n\t\"hourly\"?: TickFormats;\n\t\"daily\"?: TickFormats;\n\t\"weekly\"?: TickFormats;\n\t\"monthly\"?: TickFormats;\n\t\"quarterly\"?: TickFormats;\n\t\"yearly\"?: TickFormats;\n}\n\n/**\n * customize the axes components\n */\nexport interface AxesOptions {\n\tleft?: AxisOptions;\n\tbottom?: AxisOptions;\n\tright?: AxisOptions;\n\ttop?: AxisOptions;\n}\n"]}
1
+ {"version":3,"file":"axis-scales.js","sourceRoot":"","sources":["axis-scales.ts"],"names":[],"mappings":"","sourcesContent":["import { ScaleTypes } from \"./enums\";\nimport { AxisDomain } from \"d3\";\nimport { Locale } from \"date-fns\";\nimport { ThresholdOptions } from \"./components\";\n\n/**\n * options to configure a scale. not all options are used by all scales\n */\nexport interface AxisOptions {\n\t/**\n\t * type of the scale used on axis\n\t */\n\tscaleType?: ScaleTypes;\n\t/**\n\t * Whether the Axis should use the specified domain\n\t * instead of it being dynamically generated based on data extents.\n\t * The type of values should depend on the scale type.\n\t * Example for continuous axis scale: [-100, 100]\n\t * Example for discrete axis scale: ['Qty', 'More', 'Sold']\n\t */\n\tdomain?: AxisDomain[];\n\t/**\n\t* Whether the Axis should be forced to include 0 as a starting point\n\t* (or ending point, in case of all negative axis).\n\t* Default: true\n\t*/\n\tincludeZero?: boolean;\n\t/**\n\t * identifies what key within the data the axis values would map to\n\t */\n\tmapsTo?: string;\n\t/**\n\t * optional title for the scales\n\t */\n\ttitle?: string;\n\t/**\n\t * thresholds\n\t * Example:\n\t * [\n\t *\t\t{value: 10000},\n\t *\t\t{value: 40020, valueFormatter: (x) => x},\n\t *\t\t{value: 55000, label: \"Custom label\", fillColor: \"#03a9f4\"},\n\t * ]\n\t */\n\tthresholds?: ThresholdOptions[];\n\t/**\n\t * tick configuration\n\t */\n\tticks?: {\n\t\t/**\n\t\t * number of ticks to show\n\t\t */\n\t\tnumber?: number;\n\t\t/**\n\t\t * minimum tick value\n\t\t */\n\t\tmin?: number;\n\t\t/**\n\t\t * maximum tick value\n\t\t */\n\t\tmax?: number;\n\t\t/**\n\t\t * minimum width of a tick\n\t\t * before getting rotated (in pixels)\n\t\t */\n\t\trotateIfSmallerThan?: number;\n\t\t/**\n\t\t * function to format the ticks\n\t\t */\n\t\tformatter?: Function;\n\t};\n}\n\n/**\n * customize time series scales\n */\nexport interface TimeScaleOptions {\n\taddSpaceOnEdges?: number;\n\t/**\n\t * if it's true, days are shown as mon-sun,\n\t * otherwise days are shown as number 1-31\n\t */\n\tshowDayName?: boolean;\n\t/**\n\t * formats for each time interval\n\t */\n\ttimeIntervalFormats?: TimeIntervalFormats;\n\t/**\n\t * locale object, for more information see https://date-fns.org/v2.11.0/docs/Locale.\n\t * example: `import enUSLocaleObject from \"date-fns/locale/en-US/index\"`.\n\t * available locale objects are: https://github.com/date-fns/date-fns/tree/master/src/locale\n\t */\n\tlocaleObject?: Locale;\n}\n\n/**\n * time scales: customize ticks format for different time intervals\n */\nexport interface TickFormats {\n\tprimary?: string;\n\tsecondary?: string;\n}\n\n\nexport interface TimeIntervalFormats {\n\t\"15seconds\"?: TickFormats;\n\t\"minute\"?: TickFormats;\n\t\"30minutes\"?: TickFormats;\n\t\"hourly\"?: TickFormats;\n\t\"daily\"?: TickFormats;\n\t\"weekly\"?: TickFormats;\n\t\"monthly\"?: TickFormats;\n\t\"quarterly\"?: TickFormats;\n\t\"yearly\"?: TickFormats;\n}\n\n/**\n * customize the axes components\n */\nexport interface AxesOptions {\n\tleft?: AxisOptions;\n\tbottom?: AxisOptions;\n\tright?: AxisOptions;\n\ttop?: AxisOptions;\n}\n"]}
@@ -57,6 +57,10 @@ export interface BaseChartOptions {
57
57
  * identifier for data groups
58
58
  */
59
59
  groupMapsTo?: string;
60
+ /**
61
+ * used to simulate data loading
62
+ */
63
+ loading?: Boolean;
60
64
  };
61
65
  /**
62
66
  * options related to color scales
@@ -1 +1 @@
1
- {"version":3,"file":"charts.js","sourceRoot":"","sources":["charts.ts"],"names":[],"mappings":"","sourcesContent":["import { LegendOptions, TooltipOptions, GridOptions, AxesOptions } from \"./index\";\nimport { AxisTooltipOptions, BarTooltipOptions, BarOptions, StackedBarOptions } from \"./components\";\n\n/**\n * Base chart options common to any chart\n */\nexport interface BaseChartOptions {\n\t/**\n\t * boolean to disable animations (enabled by default)\n\t */\n\tanimations?: boolean;\n\t/**\n\t * boolean to prevent the container from resizing\n\t */\n\tresizable?: boolean;\n\t/**\n\t * Optionally specify a width for the chart\n\t */\n\twidth?: string;\n\t/**\n\t * Optionally specify a height for the chart\n\t */\n\theight?: string;\n\t/**\n\t * tooltip configuration\n\t */\n\ttooltip?: TooltipOptions;\n\t/**\n\t * legend configuration\n\t */\n\tlegend?: LegendOptions;\n\t/**\n\t * Optional function to determine whether is filled based on datasetLabel, label, and/or data\n\t */\n\tgetIsFilled?: (datasetLabel: any, label?: any, data?: any, defaultFilled?: boolean) => boolean;\n\t/**\n\t * Optional function to generate the fill color based on datasetLabel, label, and/or data\n\t */\n\tgetFillColor?: (datasetLabel: any, label?: any, data?: any, defaultFillColor?: string) => string;\n\t/**\n\t * Optional function to generate the stroke color based on datasetLabel, label, and/or data\n\t */\n\tgetStrokeColor?: (datasetLabel: any, label?: any, data?: any, defaultStrokeColor?: string) => string;\n\t/**\n\t * stylesheet options\n\t */\n\tstyle?: {\n\t\t/**\n\t\t * optional prefixing string for css classes (defaults to 'cc')\n\t\t */\n\t\tprefix?: string;\n\t};\n\t/**\n\t * options related to charting data\n\t */\n\tdata?: {\n\t\t/**\n\t\t * identifier for data groups\n\t\t */\n\t\tgroupMapsTo?: string;\n\t};\n\t/**\n\t * options related to color scales\n\t */\n\tcolor?: {\n\t\t/**\n\t\t * e.g. { \"Dataset 1\": \"blue\" }\n\t\t */\n\t\tscale?: object;\n\t};\n}\n\n/**\n * Options common to any chart with an axis\n */\nexport interface AxisChartOptions extends BaseChartOptions {\n\taxes?: AxesOptions;\n\tgrid?: GridOptions;\n\ttooltip?: AxisTooltipOptions;\n}\n\n/**\n * options specific to bar charts\n */\nexport interface BarChartOptions extends AxisChartOptions {\n\tbars?: BarOptions;\n\ttooltip?: BarTooltipOptions;\n}\n\n/**\n * options specific to stacked bar charts\n */\nexport interface StackedBarChartOptions extends BarChartOptions {\n\tbars?: StackedBarOptions;\n}\n\n/**\n * options specific to scatter charts\n */\nexport interface ScatterChartOptions extends AxisChartOptions {\n\t/**\n\t * options for the points\n\t */\n\tpoints?: {\n\t\t/**\n\t\t * sets the radius of the point\n\t\t */\n\t\tradius: number;\n\t\tfillOpacity?: number;\n\t\tfilled?: boolean;\n\t};\n}\n\n/**\n * options specific to bubble charts\n */\nexport interface BubbleChartOptions extends AxisChartOptions {\n\t/**\n\t * options for the individual bubbles\n\t */\n\tbubble?: {\n\t\t/**\n\t\t * the key to lookup in charting data for the bubble radius value\n\t\t */\n\t\tradiusMapsTo?: string;\n\t\t/**\n\t\t * A function that would determine the range of the bubble radius to use\n\t\t * Returns an array with the 1st value being the min and the 2nd value being the max radius\n\t\t */\n\t\tradiusRange?: Function;\n\t\t/**\n\t\t * Opacity of the fills used within each circle\n\t\t */\n\t\tfillOpacity?: number;\n\t};\n}\n\n/**\n * options specific to line charts\n */\nexport interface LineChartOptions extends ScatterChartOptions {\n\t/**\n\t * options for the curve of the line\n\t */\n\tcurve?: string | {\n\t\tname: string;\n\t};\n}\n\n/**\n * options specific to pie charts\n */\nexport interface PieChartOptions extends BaseChartOptions {\n\tpie?: {\n\t\tradiusOffset?: number;\n\t\tinnerRadius?: number;\n\t\tpadAngle?: number;\n\t\thoverArc?: {\n\t\t\touterRadiusOffset?: number;\n\t\t};\n\t\txOffset?: number;\n\t\tyOffset?: number;\n\t\tyOffsetCallout?: number;\n\t\tcallout?: {\n\t\t\tminSliceDegree?: number;\n\t\t\toffsetX?: number,\n\t\t\toffsetY?: number;\n\t\t\thorizontalLineLength?: number;\n\t\t\ttextMargin?: number;\n\t\t},\n\t\tlabels?: {\n\t\t\tformatter?: Function;\n\t\t}\n\t};\n}\n\n\n\n/**\n * options specific to donut charts\n */\nexport interface DonutChartOptions extends PieChartOptions {\n\tdonut?: {\n\t\tcenter?: {\n\t\t\tnumberFontSize?: Function;\n\t\t\ttitleFontSize?: Function;\n\t\t\ttitleYPosition?: Function;\n\t\t\tnumberFormatter?: Function;\n\t\t};\n\t};\n}\n\n/**\n * options specific to radar charts\n */\nexport interface RadarChartOptions extends BaseChartOptions {\n\tradar?: {\n\t\topacity: {\n\t\t\tunselected: number,\n\t\t\tselected: number\n\t\t},\n\t\taxes: {\n\t\t\tangle: string,\n\t\t\tvalue: string\n\t\t}\n\t\txLabelPadding: number,\n\t\tyLabelPadding: number,\n\t\tyTicksNumber: number,\n\t\tminRange: number,\n\t\txAxisRectHeight: number,\n\t\tdotsRadius: number\n\t};\n}\n"]}
1
+ {"version":3,"file":"charts.js","sourceRoot":"","sources":["charts.ts"],"names":[],"mappings":"","sourcesContent":["import { LegendOptions, TooltipOptions, GridOptions, AxesOptions } from \"./index\";\nimport { AxisTooltipOptions, BarTooltipOptions, BarOptions, StackedBarOptions } from \"./components\";\n\n/**\n * Base chart options common to any chart\n */\nexport interface BaseChartOptions {\n\t/**\n\t * boolean to disable animations (enabled by default)\n\t */\n\tanimations?: boolean;\n\t/**\n\t * boolean to prevent the container from resizing\n\t */\n\tresizable?: boolean;\n\t/**\n\t * Optionally specify a width for the chart\n\t */\n\twidth?: string;\n\t/**\n\t * Optionally specify a height for the chart\n\t */\n\theight?: string;\n\t/**\n\t * tooltip configuration\n\t */\n\ttooltip?: TooltipOptions;\n\t/**\n\t * legend configuration\n\t */\n\tlegend?: LegendOptions;\n\t/**\n\t * Optional function to determine whether is filled based on datasetLabel, label, and/or data\n\t */\n\tgetIsFilled?: (datasetLabel: any, label?: any, data?: any, defaultFilled?: boolean) => boolean;\n\t/**\n\t * Optional function to generate the fill color based on datasetLabel, label, and/or data\n\t */\n\tgetFillColor?: (datasetLabel: any, label?: any, data?: any, defaultFillColor?: string) => string;\n\t/**\n\t * Optional function to generate the stroke color based on datasetLabel, label, and/or data\n\t */\n\tgetStrokeColor?: (datasetLabel: any, label?: any, data?: any, defaultStrokeColor?: string) => string;\n\t/**\n\t * stylesheet options\n\t */\n\tstyle?: {\n\t\t/**\n\t\t * optional prefixing string for css classes (defaults to 'cc')\n\t\t */\n\t\tprefix?: string;\n\t};\n\t/**\n\t * options related to charting data\n\t */\n\tdata?: {\n\t\t/**\n\t\t * identifier for data groups\n\t\t */\n\t\tgroupMapsTo?: string;\n\t\t/**\n\t\t * used to simulate data loading\n\t\t */\n\t\tloading?: Boolean;\n\t};\n\t/**\n\t * options related to color scales\n\t */\n\tcolor?: {\n\t\t/**\n\t\t * e.g. { \"Dataset 1\": \"blue\" }\n\t\t */\n\t\tscale?: object;\n\t};\n}\n\n/**\n * Options common to any chart with an axis\n */\nexport interface AxisChartOptions extends BaseChartOptions {\n\taxes?: AxesOptions;\n\tgrid?: GridOptions;\n\ttooltip?: AxisTooltipOptions;\n}\n\n/**\n * options specific to bar charts\n */\nexport interface BarChartOptions extends AxisChartOptions {\n\tbars?: BarOptions;\n\ttooltip?: BarTooltipOptions;\n}\n\n/**\n * options specific to stacked bar charts\n */\nexport interface StackedBarChartOptions extends BarChartOptions {\n\tbars?: StackedBarOptions;\n}\n\n/**\n * options specific to scatter charts\n */\nexport interface ScatterChartOptions extends AxisChartOptions {\n\t/**\n\t * options for the points\n\t */\n\tpoints?: {\n\t\t/**\n\t\t * sets the radius of the point\n\t\t */\n\t\tradius: number;\n\t\tfillOpacity?: number;\n\t\tfilled?: boolean;\n\t};\n}\n\n/**\n * options specific to bubble charts\n */\nexport interface BubbleChartOptions extends AxisChartOptions {\n\t/**\n\t * options for the individual bubbles\n\t */\n\tbubble?: {\n\t\t/**\n\t\t * the key to lookup in charting data for the bubble radius value\n\t\t */\n\t\tradiusMapsTo?: string;\n\t\t/**\n\t\t * A function that would determine the range of the bubble radius to use\n\t\t * Returns an array with the 1st value being the min and the 2nd value being the max radius\n\t\t */\n\t\tradiusRange?: Function;\n\t\t/**\n\t\t * Opacity of the fills used within each circle\n\t\t */\n\t\tfillOpacity?: number;\n\t};\n}\n\n/**\n * options specific to line charts\n */\nexport interface LineChartOptions extends ScatterChartOptions {\n\t/**\n\t * options for the curve of the line\n\t */\n\tcurve?: string | {\n\t\tname: string;\n\t};\n}\n\n/**\n * options specific to pie charts\n */\nexport interface PieChartOptions extends BaseChartOptions {\n\tpie?: {\n\t\tradiusOffset?: number;\n\t\tinnerRadius?: number;\n\t\tpadAngle?: number;\n\t\thoverArc?: {\n\t\t\touterRadiusOffset?: number;\n\t\t};\n\t\txOffset?: number;\n\t\tyOffset?: number;\n\t\tyOffsetCallout?: number;\n\t\tcallout?: {\n\t\t\tminSliceDegree?: number;\n\t\t\toffsetX?: number,\n\t\t\toffsetY?: number;\n\t\t\thorizontalLineLength?: number;\n\t\t\ttextMargin?: number;\n\t\t},\n\t\tlabels?: {\n\t\t\tformatter?: Function;\n\t\t}\n\t};\n}\n\n\n\n/**\n * options specific to donut charts\n */\nexport interface DonutChartOptions extends PieChartOptions {\n\tdonut?: {\n\t\tcenter?: {\n\t\t\tnumberFontSize?: Function;\n\t\t\ttitleFontSize?: Function;\n\t\t\ttitleYPosition?: Function;\n\t\t\tnumberFormatter?: Function;\n\t\t};\n\t};\n}\n\n/**\n * options specific to radar charts\n */\nexport interface RadarChartOptions extends BaseChartOptions {\n\tradar?: {\n\t\topacity: {\n\t\t\tunselected: number,\n\t\t\tselected: number\n\t\t},\n\t\taxes: {\n\t\t\tangle: string,\n\t\t\tvalue: string\n\t\t}\n\t\txLabelPadding: number,\n\t\tyLabelPadding: number,\n\t\tyTicksNumber: number,\n\t\tminRange: number,\n\t\txAxisRectHeight: number,\n\t\tdotsRadius: number\n\t};\n}\n"]}
@@ -86,6 +86,27 @@ export interface TooltipOptions {
86
86
  width?: number;
87
87
  };
88
88
  }
89
+ /**
90
+ * Threshold options
91
+ */
92
+ export interface ThresholdOptions {
93
+ /**
94
+ * threshold value
95
+ */
96
+ value: number | Date;
97
+ /**
98
+ * a function to format the threshold values
99
+ */
100
+ valueFormatter?: Function;
101
+ /**
102
+ * hex threshold line color
103
+ */
104
+ fillColor: string;
105
+ /**
106
+ * threshold label
107
+ */
108
+ label: string;
109
+ }
89
110
  /**
90
111
  * extends tooltip options to provide support for multiple gridline tooltips
91
112
  */
@@ -1 +1 @@
1
- {"version":3,"file":"components.js","sourceRoot":"","sources":["components.ts"],"names":[],"mappings":"","sourcesContent":["import { LayoutGrowth, LegendPositions } from \"./enums\";\nimport { Component } from \"../components/component\";\n\n/**\n * customize the overlay contents\n */\nexport interface LayoutComponentChild {\n\tid: string;\n\t/**\n\t * the component that'll be rendered inside layout child\n\t */\n\tcomponents: Component[];\n\t/**\n\t * size of the layout child\n\t */\n\tsize?: number;\n\t/**\n\t * how the layout child will grow or shrink in x & y directions\n\t */\n\tgrowth?: {\n\t\tx: LayoutGrowth,\n\t\ty: LayoutGrowth\n\t};\n}\n\n\n/**\n * customize the legend component\n */\nexport interface LegendOptions {\n\tposition?: LegendPositions;\n\t/**\n\t * the clickability of legend items\n\t */\n\tclickable?: boolean;\n\t/**\n\t * is the legend visible or not\n\t */\n\tenabled?: boolean;\n\titems?: {\n\t\tstatus?: {\n\t\t\tACTIVE?: Number;\n\t\t\tDISABLED?: Number;\n\t\t};\n\t\thorizontalSpace?: Number;\n\t\tverticalSpace?: Number;\n\t\ttextYOffset?: Number;\n\t};\n\tcheckbox?: {\n\t\tradius?: Number;\n\t\tspaceAfter?: Number;\n\t};\n}\n\nexport interface TooltipOptions {\n\t/**\n\t * a function to format the tooltip values\n\t */\n\tvalueFormatter?: Function;\n\t/**\n\t * custom function for returning tooltip HTML\n\t * passed an array or object with the data, and then the default tooltip markup\n\t */\n\tcustomHTML?: Function;\n\t/**\n\t * options to configure the datapoint tooltip\n\t */\n\tdatapoint?: {\n\t\t/**\n\t\t * offset of the tooltip from the mouse position\n\t\t */\n\t\thorizontalOffset?: number;\n\t\t/**\n\t\t * toggles on/off datapoint tooltips.\n\t\t */\n\t\tenabled?: boolean;\n\t\t/**\n\t\t * vertical offset for tooltip placement\n\t\t */\n\t\tverticalOffset?: number\n\t};\n\ttitle?: {\n\t\t/**\n\t\t * vertical offset for title tooltip placement. < 0 shifts the tooltip above title, > 0 shifts vertically down\n\t\t */\n\t\tverticalOffset?: number\n\t\t/**\n\t\t * max width of title tooltip relative to the width of the chart-svg (percentage should be < 1)\n\t\t */\n\t\twidth?: number\n\t};\n}\n\n/**\n * extends tooltip options to provide support for multiple gridline tooltips\n */\nexport interface AxisTooltipOptions extends TooltipOptions {\n\t/** options for gridline event listeners */\n\tgridline?: {\n\t\t/**\n\t\t * controls whether the gridlines are active for tooltip support\n\t\t */\n\t\tenabled?: boolean,\n\t\t/**\n\t\t * optional set threshold (value between 0 and 1) for active gridlines\n\t\t */\n\t\tthreshold?: number\n\t};\n}\n\n/**\n * extends tooltip for bar tooltip\n */\nexport interface BarTooltipOptions extends TooltipOptions {\n\tdatapoint: {\n\t\t/**\n\t\t * padding between the bar items and the tooltip\n\t\t */\n\t\tverticalOffset: number;\n\t};\n}\n\nexport interface GridOptions {\n\ty?: {\n\t\tnumberOfTicks?: number;\n\t};\n\tx?: {\n\t\tnumberOfTicks?: number;\n\t};\n\tstrokeColor?: string;\n}\n\nexport interface BarOptions {\n\twidth?: number;\n\tmaxWidth?: number;\n}\n\nexport interface StackedBarOptions extends BarOptions {\n\tdividerSize?: number;\n}\n"]}
1
+ {"version":3,"file":"components.js","sourceRoot":"","sources":["components.ts"],"names":[],"mappings":"","sourcesContent":["import { LayoutGrowth, LegendPositions } from \"./enums\";\nimport { Component } from \"../components/component\";\n\n/**\n * customize the overlay contents\n */\nexport interface LayoutComponentChild {\n\tid: string;\n\t/**\n\t * the component that'll be rendered inside layout child\n\t */\n\tcomponents: Component[];\n\t/**\n\t * size of the layout child\n\t */\n\tsize?: number;\n\t/**\n\t * how the layout child will grow or shrink in x & y directions\n\t */\n\tgrowth?: {\n\t\tx: LayoutGrowth,\n\t\ty: LayoutGrowth\n\t};\n}\n\n\n/**\n * customize the legend component\n */\nexport interface LegendOptions {\n\tposition?: LegendPositions;\n\t/**\n\t * the clickability of legend items\n\t */\n\tclickable?: boolean;\n\t/**\n\t * is the legend visible or not\n\t */\n\tenabled?: boolean;\n\titems?: {\n\t\tstatus?: {\n\t\t\tACTIVE?: Number;\n\t\t\tDISABLED?: Number;\n\t\t};\n\t\thorizontalSpace?: Number;\n\t\tverticalSpace?: Number;\n\t\ttextYOffset?: Number;\n\t};\n\tcheckbox?: {\n\t\tradius?: Number;\n\t\tspaceAfter?: Number;\n\t};\n}\n\nexport interface TooltipOptions {\n\t/**\n\t * a function to format the tooltip values\n\t */\n\tvalueFormatter?: Function;\n\t/**\n\t * custom function for returning tooltip HTML\n\t * passed an array or object with the data, and then the default tooltip markup\n\t */\n\tcustomHTML?: Function;\n\t/**\n\t * options to configure the datapoint tooltip\n\t */\n\tdatapoint?: {\n\t\t/**\n\t\t * offset of the tooltip from the mouse position\n\t\t */\n\t\thorizontalOffset?: number;\n\t\t/**\n\t\t * toggles on/off datapoint tooltips.\n\t\t */\n\t\tenabled?: boolean;\n\t\t/**\n\t\t * vertical offset for tooltip placement\n\t\t */\n\t\tverticalOffset?: number\n\t};\n\ttitle?: {\n\t\t/**\n\t\t * vertical offset for title tooltip placement. < 0 shifts the tooltip above title, > 0 shifts vertically down\n\t\t */\n\t\tverticalOffset?: number\n\t\t/**\n\t\t * max width of title tooltip relative to the width of the chart-svg (percentage should be < 1)\n\t\t */\n\t\twidth?: number\n\t};\n}\n\n/**\n * Threshold options\n */\nexport interface ThresholdOptions {\n\t/**\n\t * threshold value\n\t */\n\tvalue: number | Date;\n\t/**\n\t * a function to format the threshold values\n\t */\n\tvalueFormatter?: Function;\n\t/**\n\t * hex threshold line color\n\t */\n\tfillColor: string;\n\t/**\n\t * threshold label\n\t */\n\tlabel: string;\n}\n\n/**\n * extends tooltip options to provide support for multiple gridline tooltips\n */\nexport interface AxisTooltipOptions extends TooltipOptions {\n\t/** options for gridline event listeners */\n\tgridline?: {\n\t\t/**\n\t\t * controls whether the gridlines are active for tooltip support\n\t\t */\n\t\tenabled?: boolean,\n\t\t/**\n\t\t * optional set threshold (value between 0 and 1) for active gridlines\n\t\t */\n\t\tthreshold?: number\n\t};\n}\n\n/**\n * extends tooltip for bar tooltip\n */\nexport interface BarTooltipOptions extends TooltipOptions {\n\tdatapoint: {\n\t\t/**\n\t\t * padding between the bar items and the tooltip\n\t\t */\n\t\tverticalOffset: number;\n\t};\n}\n\nexport interface GridOptions {\n\ty?: {\n\t\tnumberOfTicks?: number;\n\t};\n\tx?: {\n\t\tnumberOfTicks?: number;\n\t};\n\tstrokeColor?: string;\n}\n\nexport interface BarOptions {\n\twidth?: number;\n\tmaxWidth?: number;\n}\n\nexport interface StackedBarOptions extends BarOptions {\n\tdividerSize?: number;\n}\n"]}
@@ -93,6 +93,15 @@ export declare enum CalloutDirections {
93
93
  LEFT = "left",
94
94
  RIGHT = "right"
95
95
  }
96
+ /**
97
+ * enum of all possible skeleton/empty state types
98
+ */
99
+ export declare enum Skeletons {
100
+ GRID = "grid",
101
+ VERT_OR_HORIZ = "vertOrHoriz",
102
+ PIE = "pie",
103
+ DONUT = "donut"
104
+ }
96
105
  /**
97
106
  * enum of all possible attributes used to aling text horizontally
98
107
  */
@@ -104,6 +104,16 @@ export var CalloutDirections;
104
104
  CalloutDirections["LEFT"] = "left";
105
105
  CalloutDirections["RIGHT"] = "right";
106
106
  })(CalloutDirections || (CalloutDirections = {}));
107
+ /**
108
+ * enum of all possible skeleton/empty state types
109
+ */
110
+ export var Skeletons;
111
+ (function (Skeletons) {
112
+ Skeletons["GRID"] = "grid";
113
+ Skeletons["VERT_OR_HORIZ"] = "vertOrHoriz";
114
+ Skeletons["PIE"] = "pie";
115
+ Skeletons["DONUT"] = "donut";
116
+ })(Skeletons || (Skeletons = {}));
107
117
  /**
108
118
  * enum of all possible attributes used to aling text horizontally
109
119
  */
@@ -1 +1 @@
1
- {"version":3,"file":"enums.js","sourceRoot":"","sources":["enums.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,UAAU,CAAC;AACvC,MAAM,CAAC,IAAM,MAAM,GAAG,UAAU,CAAC;AAEjC;;GAEG;AACH,MAAM,CAAN,IAAY,UAKX;AALD,WAAY,UAAU;IACrB,iCAAmB,CAAA;IACnB,2BAAa,CAAA;IACb,yBAAW,CAAA;IACX,yBAAW,CAAA;AACZ,CAAC,EALW,UAAU,KAAV,UAAU,QAKrB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,aAKX;AALD,WAAY,aAAa;IACxB,8BAAa,CAAA;IACb,gCAAe,CAAA;IACf,4BAAW,CAAA;IACX,kCAAiB,CAAA;AAClB,CAAC,EALW,aAAa,KAAb,aAAa,QAKxB;AAED;;;;;GAKG;AACH,MAAM,CAAN,IAAY,qBAGX;AAHD,WAAY,qBAAqB;IAChC,8CAAqB,CAAA;IACrB,kDAAyB,CAAA;AAC1B,CAAC,EAHW,qBAAqB,KAArB,qBAAqB,QAGhC;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,UAKX;AALD,WAAY,UAAU;IACrB,2BAAa,CAAA;IACb,+BAAiB,CAAA;IACjB,yBAAW,CAAA;IACX,+BAAiB,CAAA;AAClB,CAAC,EALW,UAAU,KAAV,UAAU,QAKrB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,eAIX;AAJD,WAAY,eAAe;IAC1B,kCAAe,CAAA;IACf,8BAAW,CAAA;IACX,oCAAiB,CAAA;AAClB,CAAC,EAJW,eAAe,KAAf,eAAe,QAI1B;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,YAIX;AAJD,WAAY,YAAY;IACvB,uCAAuB,CAAA;IACvB,qCAAqB,CAAA;IACrB,+BAAe,CAAA;AAChB,CAAC,EAJW,YAAY,KAAZ,YAAY,QAIvB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,eAKX;AALD,WAAY,eAAe;IAC1B,kCAAe,CAAA;IACf,gCAAa,CAAA;IACb,8BAAW,CAAA;IACX,oCAAiB,CAAA;AAClB,CAAC,EALW,eAAe,KAAf,eAAe,QAK1B;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,kBAGX;AAHD,WAAY,kBAAkB;IAC7B,+CAAyB,CAAA;IACzB,2CAAqB,CAAA;AACtB,CAAC,EAHW,kBAAkB,KAAlB,kBAAkB,QAG7B;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,eAKX;AALD,WAAY,eAAe;IAC1B,8BAAW,CAAA;IACX,oCAAiB,CAAA;IACjB,8CAA2B,CAAA;IAC3B,oDAAiC,CAAA;AAClC,CAAC,EALW,eAAe,KAAf,eAAe,QAK1B;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,YAIX;AAJD,WAAY,YAAY;IACvB,+BAAe,CAAA;IACf,uCAAuB,CAAA;IACvB,mCAAmB,CAAA;AACpB,CAAC,EAJW,YAAY,KAAZ,YAAY,QAIvB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,iBAGX;AAHD,WAAY,iBAAiB;IAC5B,kCAAa,CAAA;IACb,oCAAe,CAAA;AAChB,CAAC,EAHW,iBAAiB,KAAjB,iBAAiB,QAG5B;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,UAIX;AAJD,WAAY,UAAU;IACrB,6BAAe,CAAA;IACf,+BAAiB,CAAA;IACjB,yBAAW,CAAA;AACZ,CAAC,EAJW,UAAU,KAAV,UAAU,QAIrB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,gBAIX;AAJD,WAAY,gBAAgB;IAC3B,yCAAqB,CAAA;IACrB,qCAAiB,CAAA;IACjB,uCAAmB,CAAA;AACpB,CAAC,EAJW,gBAAgB,KAAhB,gBAAgB,QAI3B","sourcesContent":["import * as EventEnums from \"./events\";\nexport const Events = EventEnums;\n\n/**\n * enum of all supported chart themes\n */\nexport enum ChartTheme {\n\tDEFAULT = \"default\",\n\tG100 = \"g100\",\n\tG90 = \"g90\",\n\tG10 = \"g10\"\n}\n\n/**\n * enum of all possible axis positions\n */\nexport enum AxisPositions {\n\tLEFT = \"left\",\n\tRIGHT = \"right\",\n\tTOP = \"top\",\n\tBOTTOM = \"bottom\"\n}\n\n/**\n * enum of all possible cartesian orientations\n * to be used for determining the orientation\n * of graphs being draw over\n * cartesian scales\n */\nexport enum CartesianOrientations {\n\tVERTICAL = \"vertical\",\n\tHORIZONTAL = \"horizontal\"\n}\n\n/**\n * enum of all possible scale types\n */\nexport enum ScaleTypes {\n\tTIME = \"time\",\n\tLINEAR = \"linear\",\n\tLOG = \"log\",\n\tLABELS = \"labels\"\n}\n\n/**\n * enum of supported tooltip position relative to\n */\nexport enum TooltipPosition {\n\tMOUSE = \"mouse\",\n\tTOP = \"top\",\n\tBOTTOM = \"bottom\"\n}\n\n/**\n * enum of tooltip types for custom tooltip event\n */\nexport enum TooltipTypes {\n\tDATAPOINT = \"datapoint\",\n\tGRIDLINE = \"gridline\",\n\tTITLE = \"title\"\n}\n\n/**\n * enum of all possible legend positions\n */\nexport enum LegendPositions {\n\tRIGHT = \"right\",\n\tLEFT = \"left\",\n\tTOP = \"top\",\n\tBOTTOM = \"bottom\"\n}\n\n/**\n * enum of all possible legend orientations\n */\nexport enum LegendOrientations {\n\tHORIZONTAL = \"horizontal\",\n\tVERTICAL = \"vertical\"\n}\n\n/**\n * enum of all possible layout directions\n */\nexport enum LayoutDirection {\n\tROW = \"row\",\n\tCOLUMN = \"column\",\n\tROW_REVERSE = \"row-reverse\",\n\tCOLUMN_REVERSE = \"column-reverse\"\n}\n\n/**\n * enum of all possible layout growth values\n */\nexport enum LayoutGrowth {\n\tFIXED = \"fixed\",\n\tPREFERRED = \"preferred\",\n\tSTRETCH = \"stretch\",\n}\n\n/**\n * enum of all possible callout directions\n */\nexport enum CalloutDirections {\n\tLEFT = \"left\",\n\tRIGHT = \"right\"\n}\n\n/**\n * enum of all possible attributes used to aling text horizontally\n */\nexport enum TextAnchor {\n\tSTART = \"start\",\n\tMIDDLE = \"middle\",\n\tEND = \"end\"\n}\n\n/**\n * enum of all possible attributes used to aling text vertically\n */\nexport enum DominantBaseline {\n\tBASELINE = \"baseline\",\n\tMIDDLE = \"middle\",\n\tHANGING = \"hanging\"\n}\n"]}
1
+ {"version":3,"file":"enums.js","sourceRoot":"","sources":["enums.ts"],"names":[],"mappings":"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","sourcesContent":["import * as EventEnums from \"./events\";\nexport const Events = EventEnums;\n\n/**\n * enum of all supported chart themes\n */\nexport enum ChartTheme {\n\tDEFAULT = \"default\",\n\tG100 = \"g100\",\n\tG90 = \"g90\",\n\tG10 = \"g10\"\n}\n\n/**\n * enum of all possible axis positions\n */\nexport enum AxisPositions {\n\tLEFT = \"left\",\n\tRIGHT = \"right\",\n\tTOP = \"top\",\n\tBOTTOM = \"bottom\"\n}\n\n/**\n * enum of all possible cartesian orientations\n * to be used for determining the orientation\n * of graphs being draw over\n * cartesian scales\n */\nexport enum CartesianOrientations {\n\tVERTICAL = \"vertical\",\n\tHORIZONTAL = \"horizontal\"\n}\n\n/**\n * enum of all possible scale types\n */\nexport enum ScaleTypes {\n\tTIME = \"time\",\n\tLINEAR = \"linear\",\n\tLOG = \"log\",\n\tLABELS = \"labels\"\n}\n\n/**\n * enum of supported tooltip position relative to\n */\nexport enum TooltipPosition {\n\tMOUSE = \"mouse\",\n\tTOP = \"top\",\n\tBOTTOM = \"bottom\"\n}\n\n/**\n * enum of tooltip types for custom tooltip event\n */\nexport enum TooltipTypes {\n\tDATAPOINT = \"datapoint\",\n\tGRIDLINE = \"gridline\",\n\tTITLE = \"title\"\n}\n\n/**\n * enum of all possible legend positions\n */\nexport enum LegendPositions {\n\tRIGHT = \"right\",\n\tLEFT = \"left\",\n\tTOP = \"top\",\n\tBOTTOM = \"bottom\"\n}\n\n/**\n * enum of all possible legend orientations\n */\nexport enum LegendOrientations {\n\tHORIZONTAL = \"horizontal\",\n\tVERTICAL = \"vertical\"\n}\n\n/**\n * enum of all possible layout directions\n */\nexport enum LayoutDirection {\n\tROW = \"row\",\n\tCOLUMN = \"column\",\n\tROW_REVERSE = \"row-reverse\",\n\tCOLUMN_REVERSE = \"column-reverse\"\n}\n\n/**\n * enum of all possible layout growth values\n */\nexport enum LayoutGrowth {\n\tFIXED = \"fixed\",\n\tPREFERRED = \"preferred\",\n\tSTRETCH = \"stretch\",\n}\n\n/**\n * enum of all possible callout directions\n */\nexport enum CalloutDirections {\n\tLEFT = \"left\",\n\tRIGHT = \"right\"\n}\n\n/**\n * enum of all possible skeleton/empty state types\n */\nexport enum Skeletons {\n\tGRID = \"grid\",\n\tVERT_OR_HORIZ = \"vertOrHoriz\",\n\tPIE = \"pie\",\n\tDONUT = \"donut\"\n}\n\n/**\n * enum of all possible attributes used to aling text horizontally\n */\nexport enum TextAnchor {\n\tSTART = \"start\",\n\tMIDDLE = \"middle\",\n\tEND = \"end\"\n}\n\n/**\n * enum of all possible attributes used to aling text vertically\n */\nexport enum DominantBaseline {\n\tBASELINE = \"baseline\",\n\tMIDDLE = \"middle\",\n\tHANGING = \"hanging\"\n}\n"]}
@@ -72,6 +72,13 @@ export declare enum Tooltip {
72
72
  SHOW = "show-tooltip",
73
73
  HIDE = "hide-tooltip"
74
74
  }
75
+ /**
76
+ * enum of all threshold events
77
+ */
78
+ export declare enum Threshold {
79
+ SHOW = "show-threshold",
80
+ HIDE = "hide-threshold"
81
+ }
75
82
  /**
76
83
  * enum of all legend related events
77
84
  */
@@ -81,6 +81,14 @@ export var Tooltip;
81
81
  Tooltip["SHOW"] = "show-tooltip";
82
82
  Tooltip["HIDE"] = "hide-tooltip";
83
83
  })(Tooltip || (Tooltip = {}));
84
+ /**
85
+ * enum of all threshold events
86
+ */
87
+ export var Threshold;
88
+ (function (Threshold) {
89
+ Threshold["SHOW"] = "show-threshold";
90
+ Threshold["HIDE"] = "hide-threshold";
91
+ })(Threshold || (Threshold = {}));
84
92
  /**
85
93
  * enum of all legend related events
86
94
  */
@@ -1 +1 @@
1
- {"version":3,"file":"events.js","sourceRoot":"","sources":["events.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAN,IAAY,KAGX;AAHD,WAAY,KAAK;IAChB,4CAAmC,CAAA;IACnC,gCAAuB,CAAA;AACxB,CAAC,EAHW,KAAK,KAAL,KAAK,QAGhB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,KAEX;AAFD,WAAY,KAAK;IAChB,gCAAuB,CAAA;AACxB,CAAC,EAFW,KAAK,KAAL,KAAK,QAEhB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,IAKX;AALD,WAAY,IAAI;IACf,gDAAwC,CAAA;IACxC,gDAAwC,CAAA;IACxC,wCAAgC,CAAA;IAChC,8CAAsC,CAAA;AACvC,CAAC,EALW,IAAI,KAAJ,IAAI,QAKf;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,GAKX;AALD,WAAY,GAAG;IACd,8CAAuC,CAAA;IACvC,8CAAuC,CAAA;IACvC,sCAA+B,CAAA;IAC/B,4CAAqC,CAAA;AACtC,CAAC,EALW,GAAG,KAAH,GAAG,QAKd;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,GAKX;AALD,WAAY,GAAG;IACd,sCAA+B,CAAA;IAC/B,sCAA+B,CAAA;IAC/B,8BAAuB,CAAA;IACvB,oCAA6B,CAAA;AAC9B,CAAC,EALW,GAAG,KAAH,GAAG,QAKd;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,OAKX;AALD,WAAY,OAAO;IAClB,kDAAuC,CAAA;IACvC,kDAAuC,CAAA;IACvC,0CAA+B,CAAA;IAC/B,gDAAqC,CAAA;AACtC,CAAC,EALW,OAAO,KAAP,OAAO,QAKlB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,IAKX;AALD,WAAY,IAAI;IACf,6CAAqC,CAAA;IACrC,6CAAqC,CAAA;IACrC,qCAA6B,CAAA;IAC7B,2CAAmC,CAAA;AACpC,CAAC,EALW,IAAI,KAAJ,IAAI,QAKf;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,KAKX;AALD,WAAY,KAAK;IAChB,oDAA2C,CAAA;IAC3C,oDAA2C,CAAA;IAC3C,4CAAmC,CAAA;IACnC,kDAAyC,CAAA;AAC1C,CAAC,EALW,KAAK,KAAL,KAAK,QAKhB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,OAGX;AAHD,WAAY,OAAO;IAClB,gCAAqB,CAAA;IACrB,gCAAqB,CAAA;AACtB,CAAC,EAHW,OAAO,KAAP,OAAO,QAGlB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,MAKX;AALD,WAAY,MAAM;IACjB,4CAAkC,CAAA;IAClC,4CAAkC,CAAA;IAClC,kDAAwC,CAAA;IACxC,8CAAoC,CAAA;AACrC,CAAC,EALW,MAAM,KAAN,MAAM,QAKjB","sourcesContent":["/**\n * enum of all events related to the chart on the DOM\n */\nexport enum Chart {\n\tRENDER_FINISHED = \"render-finished\",\n\tRESIZE = \"chart-resize\"\n}\n\n/**\n * enum of all events related to the chart model\n */\nexport enum Model {\n\tUPDATE = \"model-update\"\n}\n\n/**\n * enum of all axis-related events\n */\nexport enum Axis {\n\tLABEL_MOUSEOVER = \"axis-label-mouseover\",\n\tLABEL_MOUSEMOVE = \"axis-label-mousemove\",\n\tLABEL_CLICK = \"axis-label-click\",\n\tLABEL_MOUSEOUT = \"axis-label-mouseout\"\n}\n\n/**\n * enum of all pie graph events\n */\nexport enum Pie {\n\tSLICE_MOUSEOVER = \"pie-slice-mouseover\",\n\tSLICE_MOUSEMOVE = \"pie-slice-mousemove\",\n\tSLICE_CLICK = \"pie-slice-click\",\n\tSLICE_MOUSEOUT = \"pie-slice-mouseout\"\n}\n\n/**\n * enum of all bar graph events\n */\nexport enum Bar {\n\tBAR_MOUSEOVER = \"bar-mouseover\",\n\tBAR_MOUSEMOVE = \"bar-mousemove\",\n\tBAR_CLICK = \"bar-click\",\n\tBAR_MOUSEOUT = \"bar-mouseout\"\n}\n\n/**\n * enum of all scatter graph events\n */\nexport enum Scatter {\n\tSCATTER_MOUSEOVER = \"scatter-mouseover\",\n\tSCATTER_MOUSEMOVE = \"scatter-mousemove\",\n\tSCATTER_CLICK = \"scatter-click\",\n\tSCATTER_MOUSEOUT = \"scatter-mouseout\"\n}\n\n/**\n * enum of all line graph events\n */\nexport enum Line {\n\tPOINT_MOUSEOVER = \"scatter-mouseover\",\n\tPOINT_MOUSEMOVE = \"scatter-mousemove\",\n\tPOINT_CLICK = \"scatter-click\",\n\tPOINT_MOUSEOUT = \"scatter-mouseout\"\n}\n\n/**\n * enum of all radar graph events\n */\nexport enum Radar {\n\tX_AXIS_MOUSEOVER = \"radar-x-axis-mouseover\",\n\tX_AXIS_MOUSEMOVE = \"radar-x-axis-mousemove\",\n\tX_AXIS_CLICK = \"radar-x-axis-click\",\n\tX_AXIS_MOUSEOUT = \"radar-x-axis-mouseout\"\n}\n\n/**\n * enum of all tooltip events\n */\nexport enum Tooltip {\n\tSHOW = \"show-tooltip\",\n\tHIDE = \"hide-tooltip\"\n}\n\n/**\n * enum of all legend related events\n */\nexport enum Legend {\n\tITEM_HOVER = \"legend-item-onhover\",\n\tITEM_CLICK = \"legend-item-onclick\",\n\tITEM_MOUSEOUT = \"legend-item-onmouseout\",\n\tITEMS_UPDATE = \"legend-items-update\"\n}\n"]}
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["events.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAN,IAAY,KAGX;AAHD,WAAY,KAAK;IAChB,4CAAmC,CAAA;IACnC,gCAAuB,CAAA;AACxB,CAAC,EAHW,KAAK,KAAL,KAAK,QAGhB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,KAEX;AAFD,WAAY,KAAK;IAChB,gCAAuB,CAAA;AACxB,CAAC,EAFW,KAAK,KAAL,KAAK,QAEhB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,IAKX;AALD,WAAY,IAAI;IACf,gDAAwC,CAAA;IACxC,gDAAwC,CAAA;IACxC,wCAAgC,CAAA;IAChC,8CAAsC,CAAA;AACvC,CAAC,EALW,IAAI,KAAJ,IAAI,QAKf;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,GAKX;AALD,WAAY,GAAG;IACd,8CAAuC,CAAA;IACvC,8CAAuC,CAAA;IACvC,sCAA+B,CAAA;IAC/B,4CAAqC,CAAA;AACtC,CAAC,EALW,GAAG,KAAH,GAAG,QAKd;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,GAKX;AALD,WAAY,GAAG;IACd,sCAA+B,CAAA;IAC/B,sCAA+B,CAAA;IAC/B,8BAAuB,CAAA;IACvB,oCAA6B,CAAA;AAC9B,CAAC,EALW,GAAG,KAAH,GAAG,QAKd;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,OAKX;AALD,WAAY,OAAO;IAClB,kDAAuC,CAAA;IACvC,kDAAuC,CAAA;IACvC,0CAA+B,CAAA;IAC/B,gDAAqC,CAAA;AACtC,CAAC,EALW,OAAO,KAAP,OAAO,QAKlB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,IAKX;AALD,WAAY,IAAI;IACf,6CAAqC,CAAA;IACrC,6CAAqC,CAAA;IACrC,qCAA6B,CAAA;IAC7B,2CAAmC,CAAA;AACpC,CAAC,EALW,IAAI,KAAJ,IAAI,QAKf;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,KAKX;AALD,WAAY,KAAK;IAChB,oDAA2C,CAAA;IAC3C,oDAA2C,CAAA;IAC3C,4CAAmC,CAAA;IACnC,kDAAyC,CAAA;AAC1C,CAAC,EALW,KAAK,KAAL,KAAK,QAKhB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,OAGX;AAHD,WAAY,OAAO;IAClB,gCAAqB,CAAA;IACrB,gCAAqB,CAAA;AACtB,CAAC,EAHW,OAAO,KAAP,OAAO,QAGlB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,SAGX;AAHD,WAAY,SAAS;IACpB,oCAAuB,CAAA;IACvB,oCAAuB,CAAA;AACxB,CAAC,EAHW,SAAS,KAAT,SAAS,QAGpB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,MAKX;AALD,WAAY,MAAM;IACjB,4CAAkC,CAAA;IAClC,4CAAkC,CAAA;IAClC,kDAAwC,CAAA;IACxC,8CAAoC,CAAA;AACrC,CAAC,EALW,MAAM,KAAN,MAAM,QAKjB","sourcesContent":["/**\n * enum of all events related to the chart on the DOM\n */\nexport enum Chart {\n\tRENDER_FINISHED = \"render-finished\",\n\tRESIZE = \"chart-resize\"\n}\n\n/**\n * enum of all events related to the chart model\n */\nexport enum Model {\n\tUPDATE = \"model-update\"\n}\n\n/**\n * enum of all axis-related events\n */\nexport enum Axis {\n\tLABEL_MOUSEOVER = \"axis-label-mouseover\",\n\tLABEL_MOUSEMOVE = \"axis-label-mousemove\",\n\tLABEL_CLICK = \"axis-label-click\",\n\tLABEL_MOUSEOUT = \"axis-label-mouseout\"\n}\n\n/**\n * enum of all pie graph events\n */\nexport enum Pie {\n\tSLICE_MOUSEOVER = \"pie-slice-mouseover\",\n\tSLICE_MOUSEMOVE = \"pie-slice-mousemove\",\n\tSLICE_CLICK = \"pie-slice-click\",\n\tSLICE_MOUSEOUT = \"pie-slice-mouseout\"\n}\n\n/**\n * enum of all bar graph events\n */\nexport enum Bar {\n\tBAR_MOUSEOVER = \"bar-mouseover\",\n\tBAR_MOUSEMOVE = \"bar-mousemove\",\n\tBAR_CLICK = \"bar-click\",\n\tBAR_MOUSEOUT = \"bar-mouseout\"\n}\n\n/**\n * enum of all scatter graph events\n */\nexport enum Scatter {\n\tSCATTER_MOUSEOVER = \"scatter-mouseover\",\n\tSCATTER_MOUSEMOVE = \"scatter-mousemove\",\n\tSCATTER_CLICK = \"scatter-click\",\n\tSCATTER_MOUSEOUT = \"scatter-mouseout\"\n}\n\n/**\n * enum of all line graph events\n */\nexport enum Line {\n\tPOINT_MOUSEOVER = \"scatter-mouseover\",\n\tPOINT_MOUSEMOVE = \"scatter-mousemove\",\n\tPOINT_CLICK = \"scatter-click\",\n\tPOINT_MOUSEOUT = \"scatter-mouseout\"\n}\n\n/**\n * enum of all radar graph events\n */\nexport enum Radar {\n\tX_AXIS_MOUSEOVER = \"radar-x-axis-mouseover\",\n\tX_AXIS_MOUSEMOVE = \"radar-x-axis-mousemove\",\n\tX_AXIS_CLICK = \"radar-x-axis-click\",\n\tX_AXIS_MOUSEOUT = \"radar-x-axis-mouseout\"\n}\n\n/**\n * enum of all tooltip events\n */\nexport enum Tooltip {\n\tSHOW = \"show-tooltip\",\n\tHIDE = \"hide-tooltip\"\n}\n\n/**\n * enum of all threshold events\n */\nexport enum Threshold {\n\tSHOW = \"show-threshold\",\n\tHIDE = \"hide-threshold\"\n}\n\n/**\n * enum of all legend related events\n */\nexport enum Legend {\n\tITEM_HOVER = \"legend-item-onhover\",\n\tITEM_CLICK = \"legend-item-onclick\",\n\tITEM_MOUSEOUT = \"legend-item-onmouseout\",\n\tITEMS_UPDATE = \"legend-items-update\"\n}\n"]}
package/model.d.ts CHANGED
@@ -17,6 +17,7 @@ export declare class ChartModel {
17
17
  constructor(services: any);
18
18
  getDisplayData(): any;
19
19
  getData(): any;
20
+ isDataEmpty(): boolean;
20
21
  /**
21
22
  *
22
23
  * @param newData The new raw data to be set
package/model.js CHANGED
@@ -36,6 +36,9 @@ var ChartModel = /** @class */ (function () {
36
36
  ChartModel.prototype.getData = function () {
37
37
  return this.get("data");
38
38
  };
39
+ ChartModel.prototype.isDataEmpty = function () {
40
+ return !this.getData().length;
41
+ };
39
42
  /**
40
43
  *
41
44
  * @param newData The new raw data to be set
package/model.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"model.js","sourceRoot":"","sources":["model.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport * as Configuration from \"./configuration\";\nimport { Tools } from \"./tools\";\nimport * as colorPalettes from \"./services/colorPalettes\";\nimport { Events } from \"./interfaces\";\n\n// D3\nimport { scaleOrdinal } from \"d3-scale\";\nimport { map } from \"d3-collection\";\nimport { stack } from \"d3-shape\";\n\n/** The charting model layer which includes mainly the chart data and options,\n * as well as some misc. information to be shared among components */\nexport class ChartModel {\n\t// Callbacks\n\t/**\n\t * Function to be called when data or options update within the model\n\t * @type Function\n\t */\n\tprotected updateCallback: Function;\n\tprotected services: any;\n\n\t// Internal Model state\n\tprotected state: any = {\n\t\toptions: {}\n\t};\n\n\t// Data labels\n\t/**\n\t * A list of all the data groups that have existed within the lifetime of the chart\n\t * @type string[]\n\t */\n\tprotected allDataGroups: string[];\n\n\t// Fill scales & fill related objects\n\tprotected colorScale: any = {};\n\n\tconstructor(services: any) {\n\t\tthis.services = services;\n\t}\n\n\tgetDisplayData() {\n\t\tif (!this.get(\"data\")) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst { ACTIVE } = Configuration.legend.items.status;\n\t\tconst dataGroups = this.getDataGroups();\n\n\t\t// Remove datasets that have been disabled\n\t\tconst displayData = Tools.clone(this.get(\"data\"));\n\t\tconst { groupMapsTo } = this.getOptions().data;\n\n\t\treturn displayData.filter(datum => {\n\t\t\tconst group = dataGroups.find(group => group.name === datum[groupMapsTo]);\n\n\t\t\treturn group.status === ACTIVE;\n\t\t});\n\t}\n\n\tgetData() {\n\t\treturn this.get(\"data\");\n\t}\n\n\t/**\n\t *\n\t * @param newData The new raw data to be set\n\t */\n\tsetData(newData) {\n\t\tconst sanitizedData = this.sanitize(Tools.clone(newData));\n\t\tconst dataGroups = this.generateDataGroups(sanitizedData);\n\n\t\tthis.set({\n\t\t\tdata: sanitizedData,\n\t\t\tdataGroups\n\t\t});\n\n\t\treturn sanitizedData;\n\t}\n\n\tgetDataGroups() {\n\t\treturn this.get(\"dataGroups\");\n\t}\n\n\tgetActiveDataGroups() {\n\t\tconst { ACTIVE } = Configuration.legend.items.status;\n\n\t\treturn this.getDataGroups().filter(dataGroup => dataGroup.status === ACTIVE);\n\t}\n\n\tgetDataGroupNames() {\n\t\treturn this.getDataGroups().map(dataGroup => dataGroup.name);\n\t}\n\n\tgetActiveDataGroupNames() {\n\t\treturn this.getActiveDataGroups().map(dataGroup => dataGroup.name);\n\t}\n\n\tgetGroupedData() {\n\t\tconst displayData = this.getDisplayData();\n\t\tconst groupedData = {};\n\t\tconst { groupMapsTo } = this.getOptions().data;\n\n\t\tdisplayData.map(datum => {\n\t\t\tconst group = datum[groupMapsTo];\n\t\t\tif (groupedData[group] !== null && groupedData[group] !== undefined) {\n\t\t\t\tgroupedData[group].push(datum);\n\t\t\t} else {\n\t\t\t\tgroupedData[group] = [datum];\n\t\t\t}\n\t\t});\n\n\t\treturn Object.keys(groupedData)\n\t\t\t.map(groupName => ({\n\t\t\t\tname: groupName,\n\t\t\t\tdata: groupedData[groupName]\n\t\t\t}));\n\t}\n\n\tgetDataValuesGroupedByKeys() {\n\t\tconst options = this.getOptions();\n\t\tconst { groupMapsTo } = options.data;\n\n\t\tconst displayData = this.getDisplayData();\n\t\tconst domainIdentifier = this.services.cartesianScales.getDomainIdentifier();\n\t\tconst rangeIdentifier = this.services.cartesianScales.getRangeIdentifier();\n\n\t\tconst stackKeys = map(displayData, datum => datum[domainIdentifier]).keys();\n\t\tconst dataGroupNames = this.getDataGroupNames();\n\n\t\treturn stackKeys.map(key => {\n\t\t\tconst correspondingValues = { sharedStackKey: key };\n\t\t\tdataGroupNames.forEach(dataGroupName => {\n\t\t\t\tconst correspondingDatum = displayData.find(datum => {\n\t\t\t\t\treturn datum[groupMapsTo] === dataGroupName &&\n\t\t\t\t\t\tdatum[domainIdentifier].toString() === key;\n\t\t\t\t});\n\n\t\t\t\tcorrespondingValues[dataGroupName] = correspondingDatum ? correspondingDatum[rangeIdentifier] : null;\n\t\t\t});\n\t\t\treturn correspondingValues;\n\t\t}) as any;\n\t}\n\n\tgetStackedData() {\n\t\tconst options = this.getOptions();\n\t\tconst { groupMapsTo } = options.data;\n\n\t\tconst dataGroupNames = this.getDataGroupNames();\n\t\tconst dataValuesGroupedByKeys = this.getDataValuesGroupedByKeys();\n\n\t\treturn stack().keys(dataGroupNames)(dataValuesGroupedByKeys)\n\t\t\t.map((series, i) => {\n\t\t\t\t// Add data group names to each series\n\t\t\t\treturn Object.keys(series)\n\t\t\t\t\t.filter((key: any) => !isNaN(key))\n\t\t\t\t\t.map(key => {\n\t\t\t\t\t\tconst element = series[key];\n\t\t\t\t\t\telement[groupMapsTo] = dataGroupNames[i];\n\n\t\t\t\t\t\treturn element;\n\t\t\t\t\t});\n\t\t\t});\n\t}\n\n\t/**\n\t * @return {Object} The chart's options\n\t */\n\tgetOptions() {\n\t\treturn this.state.options;\n\t}\n\n\tset(newState: any, skipUpdate = false) {\n\t\tthis.state = Object.assign({}, this.state, newState);\n\n\t\tif (!skipUpdate) {\n\t\t\tthis.update();\n\t\t}\n\t}\n\n\tget(property?: string) {\n\t\tif (property) {\n\t\t\treturn this.state[property];\n\t\t} else {\n\t\t\treturn this.state;\n\t\t}\n\t}\n\n\t/**\n\t *\n\t * @param newOptions New options to be set\n\t */\n\tsetOptions(newOptions) {\n\t\tthis.set({\n\t\t\toptions: Tools.merge(this.getOptions(), newOptions)\n\t\t});\n\t}\n\n\t/**\n\t *\n\t * Updates miscellanous information within the model\n\t * such as the color scales, or the legend data labels\n\t */\n\tupdate() {\n\t\tif (!this.getDisplayData()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.updateAllDataGroups();\n\n\t\tthis.setColorScale();\n\t\tthis.services.events.dispatchEvent(Events.Model.UPDATE);\n\t}\n\n\tsetUpdateCallback(cb: Function) {\n\t\tthis.updateCallback = cb;\n\t}\n\n\t/*\n\t * Data labels\n\t*/\n\ttoggleDataLabel(changedLabel: string) {\n\t\tconst { ACTIVE, DISABLED } = Configuration.legend.items.status;\n\t\tconst dataGroups = this.getDataGroups();\n\n\t\tconst hasDeactivatedItems = dataGroups.some(group => group.status === DISABLED);\n\t\tconst activeItems = dataGroups.filter(group => group.status === ACTIVE);\n\n\t\t// If there are deactivated items, toggle \"changedLabel\"\n\t\tif (hasDeactivatedItems) {\n\t\t\t// If the only active item is being toggled\n\t\t\t// Activate all items\n\t\t\tif (activeItems.length === 1 && activeItems[0].name === changedLabel) {\n\t\t\t\t// If every item is active, then enable \"changedLabel\" and disable all other items\n\t\t\t\tdataGroups.forEach((group, i) => {\n\t\t\t\t\tdataGroups[i].status = ACTIVE;\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst indexToChange = dataGroups.findIndex(group => group.name === changedLabel);\n\t\t\t\tdataGroups[indexToChange].status = dataGroups[indexToChange].status === DISABLED ? ACTIVE : DISABLED;\n\t\t\t}\n\t\t} else {\n\t\t\t// If every item is active, then enable \"changedLabel\" and disable all other items\n\t\t\tdataGroups.forEach((group, i) => {\n\t\t\t\tdataGroups[i].status = (group.name === changedLabel ? ACTIVE : DISABLED);\n\t\t\t});\n\t\t}\n\n\t\t// dispatch legend filtering event with the status of all the dataLabels\n\t\tthis.services.events.dispatchEvent(Events.Legend.ITEMS_UPDATE, {\n\t\t\tdataGroups\n\t\t});\n\n\t\t// Update model\n\t\tthis.set({\n\t\t\tdataGroups\n\t\t});\n\t}\n\n\t/**\n\t * Should the data point be filled?\n\t * @param group\n\t * @param key\n\t * @param value\n\t * @param defaultFilled the default for this chart\n\t */\n\tgetIsFilled(group: any, key?: any, data?: any, defaultFilled?: boolean) {\n\t\tconst options = this.getOptions();\n\t\tif (options.getIsFilled) {\n\t\t\treturn options.getIsFilled(group, key, data, defaultFilled);\n\t\t} else {\n\t\t\treturn defaultFilled;\n\t\t}\n\t}\n\n\tgetFillColor(group: any, key?: any, data?: any) {\n\t\tconst options = this.getOptions();\n\t\tconst defaultFillColor = this.getFillScale()(group);\n\t\tif (options.getFillColor) {\n\t\t\treturn options.getFillColor(group, key, data, defaultFillColor);\n\t\t} else {\n\t\t\treturn defaultFillColor;\n\t\t}\n\t}\n\n\tgetStrokeColor(group: any, key?: any, data?: any) {\n\t\tconst options = this.getOptions();\n\t\tconst defaultStrokeColor = this.colorScale(group);\n\t\tif (options.getStrokeColor) {\n\t\t\treturn options.getStrokeColor(group, key, data, defaultStrokeColor);\n\t\t} else {\n\t\t\treturn defaultStrokeColor;\n\t\t}\n\t}\n\n\tgetFillScale() {\n\t\treturn this.colorScale;\n\t}\n\n\t/**\n\t * Converts data provided in the older format to tabular\n\t *\n\t */\n\tprotected transformToTabularData(data) {\n\t\tconsole.warn(\"We've updated the charting data format to be tabular by default. The current format you're using is deprecated and will be removed in v1.0, read more here https://carbon-design-system.github.io/carbon-charts/?path=/story/tutorials--tabular-data-format\")\n\t\tconst tabularData = [];\n\t\tconst { datasets, labels } = data;\n\n\t\t// Loop through all datasets\n\t\tdatasets.forEach(dataset => {\n\t\t\t// Update each data point to the new format\n\t\t\tdataset.data.forEach((datum, i) => {\n\t\t\t\tlet group;\n\n\t\t\t\tconst datasetLabel = Tools.getProperty(dataset, \"label\");\n\t\t\t\tif (datasetLabel === null) {\n\t\t\t\t\tconst correspondingLabel = Tools.getProperty(labels, i);\n\t\t\t\t\tif (correspondingLabel) {\n\t\t\t\t\t\tgroup = correspondingLabel;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tgroup = \"Ungrouped\";\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tgroup = datasetLabel;\n\t\t\t\t}\n\n\t\t\t\tconst updatedDatum = {\n\t\t\t\t\tgroup,\n\t\t\t\t\tkey: labels[i]\n\t\t\t\t};\n\n\t\t\t\tif (isNaN(datum)) {\n\t\t\t\t\tupdatedDatum[\"value\"] = datum.value;\n\t\t\t\t\tupdatedDatum[\"date\"] = datum.date;\n\t\t\t\t} else {\n\t\t\t\t\tupdatedDatum[\"value\"] = datum;\n\t\t\t\t}\n\n\t\t\t\ttabularData.push(updatedDatum);\n\t\t\t});\n\t\t});\n\n\t\treturn tabularData;\n\t}\n\n\tprotected getTabularData(data) {\n\t\t// if data is not an array\n\t\tif (!Array.isArray(data)) {\n\t\t\treturn this.transformToTabularData(data);\n\t\t}\n\n\t\treturn data;\n\t}\n\n\tprotected sanitize(data) {\n\t\treturn this.getTabularData(data);\n\t}\n\n\t/*\n\t * Data groups\n\t*/\n\tprotected updateAllDataGroups() {\n\t\t// allDataGroups is used to generate a color scale that applies\n\t\t// to all the groups. Now when the data updates, you might remove a group,\n\t\t// and then bring it back in a newer data update, therefore\n\t\t// the order of the groups in allDataGroups matters so that you'd never\n\t\t// have an incorrect color assigned to a group.\n\n\t\t// Also, a new group should only be added to allDataGroups if\n\t\t// it doesn't currently exist\n\n\t\tif (!this.allDataGroups) {\n\t\t\tthis.allDataGroups = this.getDataGroupNames();\n\t\t} else {\n\t\t\t// Loop through current data groups\n\t\t\tthis.getDataGroupNames().forEach(dataGroupName => {\n\t\t\t\t// If group name hasn't been stored yet, store it\n\t\t\t\tif (this.allDataGroups.indexOf(dataGroupName) === -1) {\n\t\t\t\t\tthis.allDataGroups.push(dataGroupName);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tprotected generateDataGroups(data) {\n\t\tconst { groupMapsTo } = this.getOptions().data;\n\t\tconst { ACTIVE } = Configuration.legend.items.status;\n\n\t\tconst uniqueDataGroups = map(data, datum => datum[groupMapsTo]).keys();\n\t\treturn uniqueDataGroups.map(groupName => ({\n\t\t\tname: groupName,\n\t\t\tstatus: ACTIVE\n\t\t}));\n\t}\n\n\t/*\n\t * Fill scales\n\t*/\n\tprotected setColorScale() {\n\t\tlet defaultColors = colorPalettes.DEFAULT;\n\n\t\tconst options = this.getOptions();\n\t\tconst userProvidedScale = Tools.getProperty(options, \"color\", \"scale\");\n\n\t\t// If there is no valid user provided scale, use the default set of colors\n\t\tif (userProvidedScale === null || Object.keys(userProvidedScale).length === 0) {\n\t\t\tthis.colorScale = scaleOrdinal().range(defaultColors)\n\t\t\t\t.domain(this.allDataGroups);\n\n\t\t\treturn;\n\t\t}\n\n\t\t/**\n\t\t * Go through allDataGroups. If a data group has a color value provided\n\t\t * by the user, add that to the color range\n\t\t * If not, add a default color\n\t\t */\n\t\tconst colorRange = [];\n\t\tlet colorIndex = 0;\n\t\tthis.allDataGroups.forEach(dataGroup => {\n\t\t\tif (userProvidedScale[dataGroup]) {\n\t\t\t\tcolorRange.push(userProvidedScale[dataGroup]);\n\t\t\t} else {\n\t\t\t\tcolorRange.push(defaultColors[colorIndex]);\n\t\t\t}\n\n\t\t\tif (colorIndex === defaultColors.length - 1) {\n\t\t\t\tcolorIndex = 0;\n\t\t\t} else {\n\t\t\t\tcolorIndex++;\n\t\t\t}\n\t\t});\n\n\t\tthis.colorScale = scaleOrdinal().range(colorRange)\n\t\t\t.domain(this.allDataGroups);\n\t}\n}\n"]}
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["model.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport * as Configuration from \"./configuration\";\nimport { Tools } from \"./tools\";\nimport * as colorPalettes from \"./services/colorPalettes\";\nimport { Events } from \"./interfaces\";\n\n// D3\nimport { scaleOrdinal } from \"d3-scale\";\nimport { map } from \"d3-collection\";\nimport { stack } from \"d3-shape\";\n\n/** The charting model layer which includes mainly the chart data and options,\n * as well as some misc. information to be shared among components */\nexport class ChartModel {\n\t// Callbacks\n\t/**\n\t * Function to be called when data or options update within the model\n\t * @type Function\n\t */\n\tprotected updateCallback: Function;\n\tprotected services: any;\n\n\t// Internal Model state\n\tprotected state: any = {\n\t\toptions: {}\n\t};\n\n\t// Data labels\n\t/**\n\t * A list of all the data groups that have existed within the lifetime of the chart\n\t * @type string[]\n\t */\n\tprotected allDataGroups: string[];\n\n\t// Fill scales & fill related objects\n\tprotected colorScale: any = {};\n\n\tconstructor(services: any) {\n\t\tthis.services = services;\n\t}\n\n\tgetDisplayData() {\n\t\tif (!this.get(\"data\")) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst { ACTIVE } = Configuration.legend.items.status;\n\t\tconst dataGroups = this.getDataGroups();\n\n\t\t// Remove datasets that have been disabled\n\t\tconst displayData = Tools.clone(this.get(\"data\"));\n\t\tconst { groupMapsTo } = this.getOptions().data;\n\n\t\treturn displayData.filter(datum => {\n\t\t\tconst group = dataGroups.find(group => group.name === datum[groupMapsTo]);\n\n\t\t\treturn group.status === ACTIVE;\n\t\t});\n\t}\n\n\tgetData() {\n\t\treturn this.get(\"data\");\n\t}\n\n\tisDataEmpty() {\n\t\treturn !this.getData().length;\n\t}\n\n\t/**\n\t *\n\t * @param newData The new raw data to be set\n\t */\n\tsetData(newData) {\n\t\tconst sanitizedData = this.sanitize(Tools.clone(newData));\n\t\tconst dataGroups = this.generateDataGroups(sanitizedData);\n\n\t\tthis.set({\n\t\t\tdata: sanitizedData,\n\t\t\tdataGroups\n\t\t});\n\n\t\treturn sanitizedData;\n\t}\n\n\tgetDataGroups() {\n\t\treturn this.get(\"dataGroups\");\n\t}\n\n\tgetActiveDataGroups() {\n\t\tconst { ACTIVE } = Configuration.legend.items.status;\n\n\t\treturn this.getDataGroups().filter(dataGroup => dataGroup.status === ACTIVE);\n\t}\n\n\tgetDataGroupNames() {\n\t\treturn this.getDataGroups().map(dataGroup => dataGroup.name);\n\t}\n\n\tgetActiveDataGroupNames() {\n\t\treturn this.getActiveDataGroups().map(dataGroup => dataGroup.name);\n\t}\n\n\tgetGroupedData() {\n\t\tconst displayData = this.getDisplayData();\n\t\tconst groupedData = {};\n\t\tconst { groupMapsTo } = this.getOptions().data;\n\n\t\tdisplayData.map(datum => {\n\t\t\tconst group = datum[groupMapsTo];\n\t\t\tif (groupedData[group] !== null && groupedData[group] !== undefined) {\n\t\t\t\tgroupedData[group].push(datum);\n\t\t\t} else {\n\t\t\t\tgroupedData[group] = [datum];\n\t\t\t}\n\t\t});\n\n\t\treturn Object.keys(groupedData)\n\t\t\t.map(groupName => ({\n\t\t\t\tname: groupName,\n\t\t\t\tdata: groupedData[groupName]\n\t\t\t}));\n\t}\n\n\tgetDataValuesGroupedByKeys() {\n\t\tconst options = this.getOptions();\n\t\tconst { groupMapsTo } = options.data;\n\n\t\tconst displayData = this.getDisplayData();\n\t\tconst domainIdentifier = this.services.cartesianScales.getDomainIdentifier();\n\t\tconst rangeIdentifier = this.services.cartesianScales.getRangeIdentifier();\n\n\t\tconst stackKeys = map(displayData, datum => datum[domainIdentifier]).keys();\n\t\tconst dataGroupNames = this.getDataGroupNames();\n\n\t\treturn stackKeys.map(key => {\n\t\t\tconst correspondingValues = { sharedStackKey: key };\n\t\t\tdataGroupNames.forEach(dataGroupName => {\n\t\t\t\tconst correspondingDatum = displayData.find(datum => {\n\t\t\t\t\treturn datum[groupMapsTo] === dataGroupName &&\n\t\t\t\t\t\tdatum[domainIdentifier].toString() === key;\n\t\t\t\t});\n\n\t\t\t\tcorrespondingValues[dataGroupName] = correspondingDatum ? correspondingDatum[rangeIdentifier] : null;\n\t\t\t});\n\t\t\treturn correspondingValues;\n\t\t}) as any;\n\t}\n\n\tgetStackedData() {\n\t\tconst options = this.getOptions();\n\t\tconst { groupMapsTo } = options.data;\n\n\t\tconst dataGroupNames = this.getDataGroupNames();\n\t\tconst dataValuesGroupedByKeys = this.getDataValuesGroupedByKeys();\n\n\t\treturn stack().keys(dataGroupNames)(dataValuesGroupedByKeys)\n\t\t\t.map((series, i) => {\n\t\t\t\t// Add data group names to each series\n\t\t\t\treturn Object.keys(series)\n\t\t\t\t\t.filter((key: any) => !isNaN(key))\n\t\t\t\t\t.map(key => {\n\t\t\t\t\t\tconst element = series[key];\n\t\t\t\t\t\telement[groupMapsTo] = dataGroupNames[i];\n\n\t\t\t\t\t\treturn element;\n\t\t\t\t\t});\n\t\t\t});\n\t}\n\n\t/**\n\t * @return {Object} The chart's options\n\t */\n\tgetOptions() {\n\t\treturn this.state.options;\n\t}\n\n\tset(newState: any, skipUpdate = false) {\n\t\tthis.state = Object.assign({}, this.state, newState);\n\n\t\tif (!skipUpdate) {\n\t\t\tthis.update();\n\t\t}\n\t}\n\n\tget(property?: string) {\n\t\tif (property) {\n\t\t\treturn this.state[property];\n\t\t} else {\n\t\t\treturn this.state;\n\t\t}\n\t}\n\n\t/**\n\t *\n\t * @param newOptions New options to be set\n\t */\n\tsetOptions(newOptions) {\n\t\tthis.set({\n\t\t\toptions: Tools.merge(this.getOptions(), newOptions)\n\t\t});\n\t}\n\n\t/**\n\t *\n\t * Updates miscellanous information within the model\n\t * such as the color scales, or the legend data labels\n\t */\n\tupdate() {\n\t\tif (!this.getDisplayData()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.updateAllDataGroups();\n\n\t\tthis.setColorScale();\n\t\tthis.services.events.dispatchEvent(Events.Model.UPDATE);\n\t}\n\n\tsetUpdateCallback(cb: Function) {\n\t\tthis.updateCallback = cb;\n\t}\n\n\t/*\n\t * Data labels\n\t*/\n\ttoggleDataLabel(changedLabel: string) {\n\t\tconst { ACTIVE, DISABLED } = Configuration.legend.items.status;\n\t\tconst dataGroups = this.getDataGroups();\n\n\t\tconst hasDeactivatedItems = dataGroups.some(group => group.status === DISABLED);\n\t\tconst activeItems = dataGroups.filter(group => group.status === ACTIVE);\n\n\t\t// If there are deactivated items, toggle \"changedLabel\"\n\t\tif (hasDeactivatedItems) {\n\t\t\t// If the only active item is being toggled\n\t\t\t// Activate all items\n\t\t\tif (activeItems.length === 1 && activeItems[0].name === changedLabel) {\n\t\t\t\t// If every item is active, then enable \"changedLabel\" and disable all other items\n\t\t\t\tdataGroups.forEach((group, i) => {\n\t\t\t\t\tdataGroups[i].status = ACTIVE;\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst indexToChange = dataGroups.findIndex(group => group.name === changedLabel);\n\t\t\t\tdataGroups[indexToChange].status = dataGroups[indexToChange].status === DISABLED ? ACTIVE : DISABLED;\n\t\t\t}\n\t\t} else {\n\t\t\t// If every item is active, then enable \"changedLabel\" and disable all other items\n\t\t\tdataGroups.forEach((group, i) => {\n\t\t\t\tdataGroups[i].status = (group.name === changedLabel ? ACTIVE : DISABLED);\n\t\t\t});\n\t\t}\n\n\t\t// dispatch legend filtering event with the status of all the dataLabels\n\t\tthis.services.events.dispatchEvent(Events.Legend.ITEMS_UPDATE, {\n\t\t\tdataGroups\n\t\t});\n\n\t\t// Update model\n\t\tthis.set({\n\t\t\tdataGroups\n\t\t});\n\t}\n\n\t/**\n\t * Should the data point be filled?\n\t * @param group\n\t * @param key\n\t * @param value\n\t * @param defaultFilled the default for this chart\n\t */\n\tgetIsFilled(group: any, key?: any, data?: any, defaultFilled?: boolean) {\n\t\tconst options = this.getOptions();\n\t\tif (options.getIsFilled) {\n\t\t\treturn options.getIsFilled(group, key, data, defaultFilled);\n\t\t} else {\n\t\t\treturn defaultFilled;\n\t\t}\n\t}\n\n\tgetFillColor(group: any, key?: any, data?: any) {\n\t\tconst options = this.getOptions();\n\t\tconst defaultFillColor = this.getFillScale()(group);\n\t\tif (options.getFillColor) {\n\t\t\treturn options.getFillColor(group, key, data, defaultFillColor);\n\t\t} else {\n\t\t\treturn defaultFillColor;\n\t\t}\n\t}\n\n\tgetStrokeColor(group: any, key?: any, data?: any) {\n\t\tconst options = this.getOptions();\n\t\tconst defaultStrokeColor = this.colorScale(group);\n\t\tif (options.getStrokeColor) {\n\t\t\treturn options.getStrokeColor(group, key, data, defaultStrokeColor);\n\t\t} else {\n\t\t\treturn defaultStrokeColor;\n\t\t}\n\t}\n\n\tgetFillScale() {\n\t\treturn this.colorScale;\n\t}\n\n\t/**\n\t * Converts data provided in the older format to tabular\n\t *\n\t */\n\tprotected transformToTabularData(data) {\n\t\tconsole.warn(\"We've updated the charting data format to be tabular by default. The current format you're using is deprecated and will be removed in v1.0, read more here https://carbon-design-system.github.io/carbon-charts/?path=/story/tutorials--tabular-data-format\")\n\t\tconst tabularData = [];\n\t\tconst { datasets, labels } = data;\n\n\t\t// Loop through all datasets\n\t\tdatasets.forEach(dataset => {\n\t\t\t// Update each data point to the new format\n\t\t\tdataset.data.forEach((datum, i) => {\n\t\t\t\tlet group;\n\n\t\t\t\tconst datasetLabel = Tools.getProperty(dataset, \"label\");\n\t\t\t\tif (datasetLabel === null) {\n\t\t\t\t\tconst correspondingLabel = Tools.getProperty(labels, i);\n\t\t\t\t\tif (correspondingLabel) {\n\t\t\t\t\t\tgroup = correspondingLabel;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tgroup = \"Ungrouped\";\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tgroup = datasetLabel;\n\t\t\t\t}\n\n\t\t\t\tconst updatedDatum = {\n\t\t\t\t\tgroup,\n\t\t\t\t\tkey: labels[i]\n\t\t\t\t};\n\n\t\t\t\tif (isNaN(datum)) {\n\t\t\t\t\tupdatedDatum[\"value\"] = datum.value;\n\t\t\t\t\tupdatedDatum[\"date\"] = datum.date;\n\t\t\t\t} else {\n\t\t\t\t\tupdatedDatum[\"value\"] = datum;\n\t\t\t\t}\n\n\t\t\t\ttabularData.push(updatedDatum);\n\t\t\t});\n\t\t});\n\n\t\treturn tabularData;\n\t}\n\n\tprotected getTabularData(data) {\n\t\t// if data is not an array\n\t\tif (!Array.isArray(data)) {\n\t\t\treturn this.transformToTabularData(data);\n\t\t}\n\n\t\treturn data;\n\t}\n\n\tprotected sanitize(data) {\n\t\treturn this.getTabularData(data);\n\t}\n\n\t/*\n\t * Data groups\n\t*/\n\tprotected updateAllDataGroups() {\n\t\t// allDataGroups is used to generate a color scale that applies\n\t\t// to all the groups. Now when the data updates, you might remove a group,\n\t\t// and then bring it back in a newer data update, therefore\n\t\t// the order of the groups in allDataGroups matters so that you'd never\n\t\t// have an incorrect color assigned to a group.\n\n\t\t// Also, a new group should only be added to allDataGroups if\n\t\t// it doesn't currently exist\n\n\t\tif (!this.allDataGroups) {\n\t\t\tthis.allDataGroups = this.getDataGroupNames();\n\t\t} else {\n\t\t\t// Loop through current data groups\n\t\t\tthis.getDataGroupNames().forEach(dataGroupName => {\n\t\t\t\t// If group name hasn't been stored yet, store it\n\t\t\t\tif (this.allDataGroups.indexOf(dataGroupName) === -1) {\n\t\t\t\t\tthis.allDataGroups.push(dataGroupName);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tprotected generateDataGroups(data) {\n\t\tconst { groupMapsTo } = this.getOptions().data;\n\t\tconst { ACTIVE } = Configuration.legend.items.status;\n\n\t\tconst uniqueDataGroups = map(data, datum => datum[groupMapsTo]).keys();\n\t\treturn uniqueDataGroups.map(groupName => ({\n\t\t\tname: groupName,\n\t\t\tstatus: ACTIVE\n\t\t}));\n\t}\n\n\t/*\n\t * Fill scales\n\t*/\n\tprotected setColorScale() {\n\t\tlet defaultColors = colorPalettes.DEFAULT;\n\n\t\tconst options = this.getOptions();\n\t\tconst userProvidedScale = Tools.getProperty(options, \"color\", \"scale\");\n\n\t\t// If there is no valid user provided scale, use the default set of colors\n\t\tif (userProvidedScale === null || Object.keys(userProvidedScale).length === 0) {\n\t\t\tthis.colorScale = scaleOrdinal().range(defaultColors)\n\t\t\t\t.domain(this.allDataGroups);\n\n\t\t\treturn;\n\t\t}\n\n\t\t/**\n\t\t * Go through allDataGroups. If a data group has a color value provided\n\t\t * by the user, add that to the color range\n\t\t * If not, add a default color\n\t\t */\n\t\tconst colorRange = [];\n\t\tlet colorIndex = 0;\n\t\tthis.allDataGroups.forEach(dataGroup => {\n\t\t\tif (userProvidedScale[dataGroup]) {\n\t\t\t\tcolorRange.push(userProvidedScale[dataGroup]);\n\t\t\t} else {\n\t\t\t\tcolorRange.push(defaultColors[colorIndex]);\n\t\t\t}\n\n\t\t\tif (colorIndex === defaultColors.length - 1) {\n\t\t\t\tcolorIndex = 0;\n\t\t\t} else {\n\t\t\t\tcolorIndex++;\n\t\t\t}\n\t\t});\n\n\t\tthis.colorScale = scaleOrdinal().range(colorRange)\n\t\t\t.domain(this.allDataGroups);\n\t}\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@carbon/charts",
3
- "version": "0.30.20",
3
+ "version": "0.30.24",
4
4
  "description": "Carbon charting components",
5
5
  "main": "./bundle.js",
6
6
  "module": "./index.js",
@@ -1,5 +1,5 @@
1
1
  import { Service } from "./service";
2
- import { AxisPositions, CartesianOrientations } from "../interfaces";
2
+ import { AxisPositions, CartesianOrientations, ThresholdOptions } from "../interfaces";
3
3
  export declare class CartesianScales extends Service {
4
4
  protected scaleTypes: {
5
5
  top: any;
@@ -46,4 +46,12 @@ export declare class CartesianScales extends Service {
46
46
  };
47
47
  protected getScaleDomain(axisPosition: AxisPositions): any;
48
48
  protected createScale(axisPosition: AxisPositions): any;
49
+ getHighestDomainThreshold(): null | {
50
+ threshold: ThresholdOptions;
51
+ scaleValue: number;
52
+ };
53
+ getHighestRangeThreshold(): null | {
54
+ threshold: ThresholdOptions;
55
+ scaleValue: number;
56
+ };
49
57
  }
@@ -213,6 +213,9 @@ var CartesianScales = /** @class */ (function (_super) {
213
213
  var axisOptions = Tools.getProperty(options, "axes", axisPosition);
214
214
  var includeZero = axisOptions.includeZero;
215
215
  var scaleType = Tools.getProperty(axisOptions, "scaleType") || ScaleTypes.LINEAR;
216
+ if (this.model.isDataEmpty()) {
217
+ return [];
218
+ }
216
219
  var displayData = this.model.getDisplayData();
217
220
  var mapsTo = axisOptions.mapsTo;
218
221
  // If domain is specified return that domain
@@ -266,6 +269,36 @@ var CartesianScales = /** @class */ (function (_super) {
266
269
  scale.domain(this.getScaleDomain(axisPosition));
267
270
  return scale;
268
271
  };
272
+ CartesianScales.prototype.getHighestDomainThreshold = function () {
273
+ var axesOptions = Tools.getProperty(this.model.getOptions(), "axes");
274
+ var domainAxisPosition = this.getDomainAxisPosition();
275
+ var thresholds = axesOptions[domainAxisPosition].thresholds;
276
+ if (!thresholds) {
277
+ return null;
278
+ }
279
+ var domainScale = this.getDomainScale();
280
+ // Find the highest threshold for the domain
281
+ var highestThreshold = thresholds.sort(function (a, b) { return b.value - a.value; })[0];
282
+ return {
283
+ threshold: highestThreshold,
284
+ scaleValue: domainScale(highestThreshold.value)
285
+ };
286
+ };
287
+ CartesianScales.prototype.getHighestRangeThreshold = function () {
288
+ var axesOptions = Tools.getProperty(this.model.getOptions(), "axes");
289
+ var rangeAxisPosition = this.getRangeAxisPosition();
290
+ var thresholds = axesOptions[rangeAxisPosition].thresholds;
291
+ if (!thresholds) {
292
+ return null;
293
+ }
294
+ var rangeScale = this.getRangeScale();
295
+ // Find the highest threshold for the range
296
+ var highestThreshold = thresholds.sort(function (a, b) { return b.value - a.value; })[0];
297
+ return {
298
+ threshold: highestThreshold,
299
+ scaleValue: rangeScale(highestThreshold.value)
300
+ };
301
+ };
269
302
  return CartesianScales;
270
303
  }(Service));
271
304
  export { CartesianScales };
@@ -1 +1 @@
1
- {"version":3,"file":"scales-cartesian.js","sourceRoot":"","sources":["scales-cartesian.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport * as Configuration from \"../configuration\";\nimport { Service } from \"./service\";\nimport { AxisPositions, CartesianOrientations, ScaleTypes, AxesOptions } from \"../interfaces\";\nimport { Tools } from \"../tools\";\n\n// D3 Imports\nimport {\n\tscaleBand,\n\tscaleLinear,\n\tscaleTime,\n\tscaleLog\n} from \"d3-scale\";\nimport { extent, sum } from \"d3-array\";\nimport { map, values } from \"d3-collection\";\n\n// Misc\nimport {\n\tdifferenceInYears,\n\taddYears,\n\tsubYears,\n\tdifferenceInMonths,\n\taddMonths,\n\tsubMonths,\n\tdifferenceInDays,\n\taddDays,\n\tsubDays,\n\tdifferenceInHours,\n\taddHours,\n\tsubHours,\n\tdifferenceInMinutes,\n\taddMinutes,\n\tsubMinutes,\n\tdifferenceInSeconds,\n\tsubSeconds,\n\taddSeconds\n} from \"date-fns\";\n\nexport class CartesianScales extends Service {\n\tprotected scaleTypes = {\n\t\ttop: null,\n\t\tright: null,\n\t\tbottom: null,\n\t\tleft: null\n\t};\n\n\tprotected scales = {\n\t\ttop: null,\n\t\tright: null,\n\t\tbottom: null,\n\t\tleft: null\n\t};\n\n\tprotected domainAxisPosition: AxisPositions;\n\tprotected rangeAxisPosition: AxisPositions;\n\n\tprotected orientation: CartesianOrientations;\n\n\tgetDomainAxisPosition() {\n\t\treturn this.domainAxisPosition;\n\t}\n\n\tgetRangeAxisPosition() {\n\t\treturn this.rangeAxisPosition;\n\t}\n\n\tupdate(animate = true) {\n\t\tthis.findDomainAndRangeAxes();\n\t\tthis.determineOrientation();\n\t\tconst axisPositions = Object.keys(AxisPositions).map(axisPositionKey => AxisPositions[axisPositionKey]);\n\t\taxisPositions.forEach(axisPosition => {\n\t\t\tthis.scales[axisPosition] = this.createScale(axisPosition);\n\t\t});\n\t}\n\n\tfindDomainAndRangeAxes() {\n\t\t// find main axes between (left & right) && (bottom & top)\n\t\tconst mainVerticalAxisPosition = this.findMainVerticalAxisPosition();\n\t\tconst mainHorizontalAxisPosition = this.findMainHorizontalAxisPosition();\n\n\t\t// Now we have horizontal & vertical main axes to choose domain & range axes from\n\t\tconst domainAndRangeAxesPositions = this.findDomainAndRangeAxesPositions(mainVerticalAxisPosition, mainHorizontalAxisPosition);\n\n\t\tthis.domainAxisPosition = domainAndRangeAxesPositions.domainAxisPosition;\n\t\tthis.rangeAxisPosition = domainAndRangeAxesPositions.rangeAxisPosition;\n\t}\n\n\tdetermineOrientation() {\n\t\tif (this.rangeAxisPosition === AxisPositions.LEFT && this.domainAxisPosition === AxisPositions.BOTTOM) {\n\t\t\tthis.orientation = CartesianOrientations.VERTICAL;\n\t\t} else {\n\t\t\tthis.orientation = CartesianOrientations.HORIZONTAL;\n\t\t}\n\t}\n\n\tgetOrientation() {\n\t\treturn this.orientation;\n\t}\n\n\tgetScaleByPosition(axisPosition: AxisPositions) {\n\t\treturn this.scales[axisPosition];\n\t}\n\n\tgetScaleTypeByPosition(axisPosition: AxisPositions) {\n\t\treturn this.scaleTypes[axisPosition];\n\t}\n\n\tgetDomainScale() {\n\t\treturn this.scales[this.domainAxisPosition];\n\t}\n\n\tgetRangeScale() {\n\t\treturn this.scales[this.rangeAxisPosition];\n\t}\n\n\t// Find the main x-axis out of the 2 x-axis on the chart (when 2D axis is used)\n\tgetMainXAxisPosition() {\n\t\tconst possibleXAxisPositions = [AxisPositions.BOTTOM, AxisPositions.TOP];\n\n\t\treturn [this.domainAxisPosition, this.rangeAxisPosition]\n\t\t\t.find(position => possibleXAxisPositions.indexOf(position) > -1);\n\t}\n\n\t// Find the main y-axis out of the 2 y-axis on the chart (when 2D axis is used)\n\tgetMainYAxisPosition() {\n\t\tconst possibleYAxisPositions = [AxisPositions.LEFT, AxisPositions.RIGHT];\n\n\t\treturn [this.domainAxisPosition, this.rangeAxisPosition]\n\t\t\t.find(position => possibleYAxisPositions.indexOf(position) > -1);\n\t}\n\n\tgetMainXScale() {\n\t\treturn this.scales[this.getMainXAxisPosition()];\n\t}\n\n\tgetMainYScale() {\n\t\treturn this.scales[this.getMainYAxisPosition()];\n\t}\n\n\tgetValueFromScale(axisPosition: AxisPositions, datum: any, index?: number) {\n\t\tconst options = this.model.getOptions();\n\t\tconst axisOptions = Tools.getProperty(options, \"axes\", axisPosition);\n\n\t\tconst scaleType = this.scaleTypes[axisPosition];\n\t\tconst scale = this.scales[axisPosition];\n\n\t\tconst { mapsTo } = axisOptions;\n\t\tconst value = datum[mapsTo] !== undefined ? datum[mapsTo] : datum;\n\n\t\tif (scaleType === ScaleTypes.LABELS) {\n\t\t\treturn scale(value) + scale.step() / 2;\n\t\t}\n\n\t\tif (scaleType === ScaleTypes.TIME) {\n\t\t\treturn scale(new Date(value));\n\t\t}\n\n\t\treturn scale(value);\n\t}\n\n\tgetDomainValue(d, i) {\n\t\treturn this.getValueFromScale(this.domainAxisPosition, d, i);\n\t}\n\n\tgetRangeValue(d, i) {\n\t\treturn this.getValueFromScale(this.rangeAxisPosition, d, i);\n\t}\n\n\tgetDomainIdentifier() {\n\t\tconst options = this.model.getOptions();\n\t\tconst axisOptions = Tools.getProperty(options, \"axes\", this.domainAxisPosition);\n\n\t\treturn axisOptions.mapsTo;\n\t}\n\n\tgetRangeIdentifier() {\n\t\tconst options = this.model.getOptions();\n\t\tconst axisOptions = Tools.getProperty(options, \"axes\", this.rangeAxisPosition);\n\n\t\treturn axisOptions.mapsTo;\n\t}\n\n\t/** Uses the primary Y Axis to get data items associated with that value. */\n\tgetDataFromDomain(domainValue) {\n\t\tconst displayData = this.model.getDisplayData();\n\t\tconst domainIdentifier = this.getDomainIdentifier();\n\t\tconst scaleType = this.scaleTypes[this.domainAxisPosition];\n\t\tif (scaleType === ScaleTypes.TIME) {\n\t\t\treturn displayData.filter(datum => {\n\t\t\t\tlet date = datum[domainIdentifier];\n\t\t\t\tif (typeof date === \"string\" || date.getTime === undefined) {\n\t\t\t\t\tdate = new Date(date);\n\t\t\t\t}\n\n\t\t\t\treturn date.getTime() === domainValue.getTime();\n\t\t\t});\n\t\t}\n\n\t\treturn displayData.filter(datum => {\n\t\t\treturn datum[domainIdentifier] === domainValue;\n\t\t});\n\t}\n\n\textendsDomain(axisPosition: AxisPositions, domain: any) {\n\t\tconst options = this.model.getOptions();\n\t\tconst axisOptions = Tools.getProperty(options, \"axes\", axisPosition);\n\t\tif (axisOptions.scaleType === ScaleTypes.TIME) {\n\t\t\tconst spaceToAddToEdges = Tools.getProperty(options, \"timeScale\", \"addSpaceOnEdges\");\n\t\t\treturn addSpacingToTimeDomain(domain, spaceToAddToEdges);\n\t\t} else {\n\t\t\treturn addSpacingToContinuousDomain(domain, Configuration.axis.paddingRatio);\n\t\t}\n\t}\n\n\tprotected findMainVerticalAxisPosition() {\n\t\tconst options = this.model.getOptions();\n\t\tconst axisOptions = Tools.getProperty(options, \"axes\");\n\n\t\t// If right axis has been specified as `main`\n\t\tif (Tools.getProperty(axisOptions, AxisPositions.RIGHT, \"main\") === true) {\n\t\t\treturn AxisPositions.RIGHT;\n\t\t}\n\n\t\treturn AxisPositions.LEFT;\n\t}\n\n\tprotected findMainHorizontalAxisPosition() {\n\t\tconst options = this.model.getOptions();\n\t\tconst axisOptions = Tools.getProperty(options, \"axes\");\n\n\t\t// If top axis has been specified as `main`\n\t\tif (Tools.getProperty(axisOptions, AxisPositions.TOP, \"main\") === true) {\n\t\t\treturn AxisPositions.TOP;\n\t\t}\n\n\t\treturn AxisPositions.BOTTOM;\n\t}\n\n\tprotected findDomainAndRangeAxesPositions(mainVerticalAxisPosition: AxisPositions, mainHorizontalAxisPosition: AxisPositions) {\n\t\tconst options = this.model.getOptions();\n\n\t\tconst mainVerticalAxisOptions = Tools.getProperty(options, \"axes\", mainVerticalAxisPosition);\n\t\tconst mainHorizontalAxisOptions = Tools.getProperty(options, \"axes\", mainHorizontalAxisPosition);\n\n\t\tconst mainVerticalScaleType = mainVerticalAxisOptions.scaleType || ScaleTypes.LINEAR;\n\t\tconst mainHorizontalScaleType = mainHorizontalAxisOptions.scaleType || ScaleTypes.LINEAR;\n\n\t\tconst result = {\n\t\t\tdomainAxisPosition: null,\n\t\t\trangeAxisPosition: null\n\t\t};\n\t\tif (mainHorizontalScaleType === ScaleTypes.LABELS || mainHorizontalScaleType === ScaleTypes.TIME) {\n\t\t\tresult.domainAxisPosition = mainHorizontalAxisPosition;\n\t\t\tresult.rangeAxisPosition = mainVerticalAxisPosition;\n\t\t} else if (mainVerticalScaleType === ScaleTypes.LABELS || mainVerticalScaleType === ScaleTypes.TIME) {\n\t\t\tresult.domainAxisPosition = mainVerticalAxisPosition;\n\t\t\tresult.rangeAxisPosition = mainHorizontalAxisPosition;\n\t\t} else {\n\t\t\tresult.domainAxisPosition = mainHorizontalAxisPosition;\n\t\t\tresult.rangeAxisPosition = mainVerticalAxisPosition;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tprotected getScaleDomain(axisPosition: AxisPositions) {\n\t\tconst options = this.model.getOptions();\n\t\tconst axisOptions = Tools.getProperty(options, \"axes\", axisPosition);\n\t\tconst { includeZero } = axisOptions;\n\t\tconst scaleType = Tools.getProperty(axisOptions, \"scaleType\") || ScaleTypes.LINEAR;\n\n\t\tconst displayData = this.model.getDisplayData();\n\t\tconst { mapsTo } = axisOptions;\n\n\t\t// If domain is specified return that domain\n\t\tif (axisOptions.domain) {\n\t\t\treturn axisOptions.domain;\n\t\t}\n\n\t\t// If scale is a LABELS scale, return some labels as the domain\n\t\tif (axisOptions && scaleType === ScaleTypes.LABELS) {\n\t\t\t// Get unique values\n\t\t\treturn map(displayData, d => d[mapsTo]).keys();\n\t\t}\n\n\t\t// Get the extent of the domain\n\t\tlet domain;\n\t\tlet allDataValues;\n\t\t// If the scale is stacked\n\t\tif (axisOptions.stacked) {\n\t\t\tconst dataValuesGroupedByKeys = this.model.getDataValuesGroupedByKeys();\n\t\t\tallDataValues = dataValuesGroupedByKeys.map(dataValues => sum(values(dataValues) as any));\n\t\t} else {\n\t\t\tallDataValues = displayData.map(datum => datum[mapsTo]);\n\t\t}\n\n\t\tif (scaleType !== ScaleTypes.TIME && includeZero) {\n\t\t\tallDataValues.push(0);\n\t\t}\n\n\t\tdomain = extent(allDataValues);\n\t\tdomain = this.extendsDomain(axisPosition, domain);\n\n\t\treturn domain;\n\t}\n\n\tprotected createScale(axisPosition: AxisPositions) {\n\t\tconst options = this.model.getOptions();\n\t\tconst axisOptions = Tools.getProperty(options, \"axes\", axisPosition);\n\n\t\tif (!axisOptions) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst scaleType = Tools.getProperty(axisOptions, \"scaleType\") || ScaleTypes.LINEAR;\n\t\tthis.scaleTypes[axisPosition] = scaleType;\n\n\t\tlet scale;\n\t\tif (scaleType === ScaleTypes.TIME) {\n\t\t\tscale = scaleTime();\n\t\t} else if (scaleType === ScaleTypes.LOG) {\n\t\t\tscale = scaleLog().base(axisOptions.base || 10);\n\t\t} else if (scaleType === ScaleTypes.LABELS) {\n\t\t\tscale = scaleBand();\n\t\t} else {\n\t\t\tscale = scaleLinear();\n\t\t}\n\n\t\tscale.domain(this.getScaleDomain(axisPosition));\n\t\treturn scale;\n\t}\n}\n\nfunction addSpacingToTimeDomain(domain: any, spaceToAddToEdges: number) {\n\tconst startDate = new Date(domain[0]);\n\tconst endDate = new Date(domain[1]);\n\n\tif (differenceInYears(endDate, startDate) > 1) {\n\t\treturn [subYears(startDate, spaceToAddToEdges), addYears(endDate, spaceToAddToEdges)];\n\t}\n\n\tif (differenceInMonths(endDate, startDate) > 1) {\n\t\treturn [subMonths(startDate, spaceToAddToEdges), addMonths(endDate, spaceToAddToEdges)];\n\t}\n\n\tif (differenceInDays(endDate, startDate) > 1) {\n\t\treturn [subDays(startDate, spaceToAddToEdges), addDays(endDate, spaceToAddToEdges)];\n\t}\n\n\tif (differenceInHours(endDate, startDate) > 1) {\n\t\treturn [subHours(startDate, spaceToAddToEdges), addHours(endDate, spaceToAddToEdges)];\n\t}\n\n\tif (differenceInMinutes(endDate, startDate) > 30) {\n\t\treturn [subMinutes(startDate, spaceToAddToEdges * 30), addMinutes(endDate, spaceToAddToEdges * 30)];\n\t}\n\n\tif (differenceInMinutes(endDate, startDate) > 1) {\n\t\treturn [subMinutes(startDate, spaceToAddToEdges), addMinutes(endDate, spaceToAddToEdges)];\n\t}\n\n\tif (differenceInSeconds(endDate, startDate) > 15) {\n\t\treturn [subSeconds(startDate, spaceToAddToEdges * 15), addSeconds(endDate, spaceToAddToEdges * 15)];\n\t}\n\n\tif (differenceInSeconds(endDate, startDate) > 1) {\n\t\treturn [subSeconds(startDate, spaceToAddToEdges), addSeconds(endDate, spaceToAddToEdges)];\n\t}\n\n\treturn [startDate, endDate];\n}\n\nfunction addSpacingToContinuousDomain([lower, upper]: number[], paddingRatio: number) {\n\tconst domainLength = upper - lower;\n\tconst padding = domainLength * paddingRatio;\n\n\t// If padding crosses 0, keep 0 as new upper bound\n\tconst newUpper = upper <= 0 && upper + padding > 0 ? 0 : upper + padding;\n\t// If padding crosses 0, keep 0 as new lower bound\n\tconst newLower = lower >= 0 && lower - padding < 0 ? 0 : lower - padding;\n\n\treturn [newLower, newUpper];\n}\n"]}
1
+ {"version":3,"file":"scales-cartesian.js","sourceRoot":"","sources":["scales-cartesian.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport * as Configuration from \"../configuration\";\nimport { Service } from \"./service\";\nimport { AxisPositions, CartesianOrientations, ScaleTypes, AxesOptions, ThresholdOptions } from \"../interfaces\";\nimport { Tools } from \"../tools\";\n\n// D3 Imports\nimport {\n\tscaleBand,\n\tscaleLinear,\n\tscaleTime,\n\tscaleLog\n} from \"d3-scale\";\nimport { extent, sum } from \"d3-array\";\nimport { map, values } from \"d3-collection\";\n\n// Misc\nimport {\n\tdifferenceInYears,\n\taddYears,\n\tsubYears,\n\tdifferenceInMonths,\n\taddMonths,\n\tsubMonths,\n\tdifferenceInDays,\n\taddDays,\n\tsubDays,\n\tdifferenceInHours,\n\taddHours,\n\tsubHours,\n\tdifferenceInMinutes,\n\taddMinutes,\n\tsubMinutes,\n\tdifferenceInSeconds,\n\tsubSeconds,\n\taddSeconds\n} from \"date-fns\";\n\nexport class CartesianScales extends Service {\n\tprotected scaleTypes = {\n\t\ttop: null,\n\t\tright: null,\n\t\tbottom: null,\n\t\tleft: null\n\t};\n\n\tprotected scales = {\n\t\ttop: null,\n\t\tright: null,\n\t\tbottom: null,\n\t\tleft: null\n\t};\n\n\tprotected domainAxisPosition: AxisPositions;\n\tprotected rangeAxisPosition: AxisPositions;\n\n\tprotected orientation: CartesianOrientations;\n\n\tgetDomainAxisPosition() {\n\t\treturn this.domainAxisPosition;\n\t}\n\n\tgetRangeAxisPosition() {\n\t\treturn this.rangeAxisPosition;\n\t}\n\n\tupdate(animate = true) {\n\t\tthis.findDomainAndRangeAxes();\n\t\tthis.determineOrientation();\n\t\tconst axisPositions = Object.keys(AxisPositions).map(axisPositionKey => AxisPositions[axisPositionKey]);\n\t\taxisPositions.forEach(axisPosition => {\n\t\t\tthis.scales[axisPosition] = this.createScale(axisPosition);\n\t\t});\n\t}\n\n\tfindDomainAndRangeAxes() {\n\t\t// find main axes between (left & right) && (bottom & top)\n\t\tconst mainVerticalAxisPosition = this.findMainVerticalAxisPosition();\n\t\tconst mainHorizontalAxisPosition = this.findMainHorizontalAxisPosition();\n\n\t\t// Now we have horizontal & vertical main axes to choose domain & range axes from\n\t\tconst domainAndRangeAxesPositions = this.findDomainAndRangeAxesPositions(mainVerticalAxisPosition, mainHorizontalAxisPosition);\n\n\t\tthis.domainAxisPosition = domainAndRangeAxesPositions.domainAxisPosition;\n\t\tthis.rangeAxisPosition = domainAndRangeAxesPositions.rangeAxisPosition;\n\t}\n\n\tdetermineOrientation() {\n\t\tif (this.rangeAxisPosition === AxisPositions.LEFT && this.domainAxisPosition === AxisPositions.BOTTOM) {\n\t\t\tthis.orientation = CartesianOrientations.VERTICAL;\n\t\t} else {\n\t\t\tthis.orientation = CartesianOrientations.HORIZONTAL;\n\t\t}\n\t}\n\n\tgetOrientation() {\n\t\treturn this.orientation;\n\t}\n\n\tgetScaleByPosition(axisPosition: AxisPositions) {\n\t\treturn this.scales[axisPosition];\n\t}\n\n\tgetScaleTypeByPosition(axisPosition: AxisPositions) {\n\t\treturn this.scaleTypes[axisPosition];\n\t}\n\n\tgetDomainScale() {\n\t\treturn this.scales[this.domainAxisPosition];\n\t}\n\n\tgetRangeScale() {\n\t\treturn this.scales[this.rangeAxisPosition];\n\t}\n\n\t// Find the main x-axis out of the 2 x-axis on the chart (when 2D axis is used)\n\tgetMainXAxisPosition() {\n\t\tconst possibleXAxisPositions = [AxisPositions.BOTTOM, AxisPositions.TOP];\n\n\t\treturn [this.domainAxisPosition, this.rangeAxisPosition]\n\t\t\t.find(position => possibleXAxisPositions.indexOf(position) > -1);\n\t}\n\n\t// Find the main y-axis out of the 2 y-axis on the chart (when 2D axis is used)\n\tgetMainYAxisPosition() {\n\t\tconst possibleYAxisPositions = [AxisPositions.LEFT, AxisPositions.RIGHT];\n\n\t\treturn [this.domainAxisPosition, this.rangeAxisPosition]\n\t\t\t.find(position => possibleYAxisPositions.indexOf(position) > -1);\n\t}\n\n\tgetMainXScale() {\n\t\treturn this.scales[this.getMainXAxisPosition()];\n\t}\n\n\tgetMainYScale() {\n\t\treturn this.scales[this.getMainYAxisPosition()];\n\t}\n\n\tgetValueFromScale(axisPosition: AxisPositions, datum: any, index?: number) {\n\t\tconst options = this.model.getOptions();\n\t\tconst axisOptions = Tools.getProperty(options, \"axes\", axisPosition);\n\n\t\tconst scaleType = this.scaleTypes[axisPosition];\n\t\tconst scale = this.scales[axisPosition];\n\n\t\tconst { mapsTo } = axisOptions;\n\t\tconst value = datum[mapsTo] !== undefined ? datum[mapsTo] : datum;\n\n\t\tif (scaleType === ScaleTypes.LABELS) {\n\t\t\treturn scale(value) + scale.step() / 2;\n\t\t}\n\n\t\tif (scaleType === ScaleTypes.TIME) {\n\t\t\treturn scale(new Date(value));\n\t\t}\n\n\t\treturn scale(value);\n\t}\n\n\tgetDomainValue(d, i) {\n\t\treturn this.getValueFromScale(this.domainAxisPosition, d, i);\n\t}\n\n\tgetRangeValue(d, i) {\n\t\treturn this.getValueFromScale(this.rangeAxisPosition, d, i);\n\t}\n\n\tgetDomainIdentifier() {\n\t\tconst options = this.model.getOptions();\n\t\tconst axisOptions = Tools.getProperty(options, \"axes\", this.domainAxisPosition);\n\n\t\treturn axisOptions.mapsTo;\n\t}\n\n\tgetRangeIdentifier() {\n\t\tconst options = this.model.getOptions();\n\t\tconst axisOptions = Tools.getProperty(options, \"axes\", this.rangeAxisPosition);\n\n\t\treturn axisOptions.mapsTo;\n\t}\n\n\t/** Uses the primary Y Axis to get data items associated with that value. */\n\tgetDataFromDomain(domainValue) {\n\t\tconst displayData = this.model.getDisplayData();\n\t\tconst domainIdentifier = this.getDomainIdentifier();\n\t\tconst scaleType = this.scaleTypes[this.domainAxisPosition];\n\t\tif (scaleType === ScaleTypes.TIME) {\n\t\t\treturn displayData.filter(datum => {\n\t\t\t\tlet date = datum[domainIdentifier];\n\t\t\t\tif (typeof date === \"string\" || date.getTime === undefined) {\n\t\t\t\t\tdate = new Date(date);\n\t\t\t\t}\n\n\t\t\t\treturn date.getTime() === domainValue.getTime();\n\t\t\t});\n\t\t}\n\n\t\treturn displayData.filter(datum => {\n\t\t\treturn datum[domainIdentifier] === domainValue;\n\t\t});\n\t}\n\n\textendsDomain(axisPosition: AxisPositions, domain: any) {\n\t\tconst options = this.model.getOptions();\n\t\tconst axisOptions = Tools.getProperty(options, \"axes\", axisPosition);\n\t\tif (axisOptions.scaleType === ScaleTypes.TIME) {\n\t\t\tconst spaceToAddToEdges = Tools.getProperty(options, \"timeScale\", \"addSpaceOnEdges\");\n\t\t\treturn addSpacingToTimeDomain(domain, spaceToAddToEdges);\n\t\t} else {\n\t\t\treturn addSpacingToContinuousDomain(domain, Configuration.axis.paddingRatio);\n\t\t}\n\t}\n\n\tprotected findMainVerticalAxisPosition() {\n\t\tconst options = this.model.getOptions();\n\t\tconst axisOptions = Tools.getProperty(options, \"axes\");\n\n\t\t// If right axis has been specified as `main`\n\t\tif (Tools.getProperty(axisOptions, AxisPositions.RIGHT, \"main\") === true) {\n\t\t\treturn AxisPositions.RIGHT;\n\t\t}\n\n\t\treturn AxisPositions.LEFT;\n\t}\n\n\tprotected findMainHorizontalAxisPosition() {\n\t\tconst options = this.model.getOptions();\n\t\tconst axisOptions = Tools.getProperty(options, \"axes\");\n\n\t\t// If top axis has been specified as `main`\n\t\tif (Tools.getProperty(axisOptions, AxisPositions.TOP, \"main\") === true) {\n\t\t\treturn AxisPositions.TOP;\n\t\t}\n\n\t\treturn AxisPositions.BOTTOM;\n\t}\n\n\tprotected findDomainAndRangeAxesPositions(mainVerticalAxisPosition: AxisPositions, mainHorizontalAxisPosition: AxisPositions) {\n\t\tconst options = this.model.getOptions();\n\n\t\tconst mainVerticalAxisOptions = Tools.getProperty(options, \"axes\", mainVerticalAxisPosition);\n\t\tconst mainHorizontalAxisOptions = Tools.getProperty(options, \"axes\", mainHorizontalAxisPosition);\n\n\t\tconst mainVerticalScaleType = mainVerticalAxisOptions.scaleType || ScaleTypes.LINEAR;\n\t\tconst mainHorizontalScaleType = mainHorizontalAxisOptions.scaleType || ScaleTypes.LINEAR;\n\n\t\tconst result = {\n\t\t\tdomainAxisPosition: null,\n\t\t\trangeAxisPosition: null\n\t\t};\n\t\tif (mainHorizontalScaleType === ScaleTypes.LABELS || mainHorizontalScaleType === ScaleTypes.TIME) {\n\t\t\tresult.domainAxisPosition = mainHorizontalAxisPosition;\n\t\t\tresult.rangeAxisPosition = mainVerticalAxisPosition;\n\t\t} else if (mainVerticalScaleType === ScaleTypes.LABELS || mainVerticalScaleType === ScaleTypes.TIME) {\n\t\t\tresult.domainAxisPosition = mainVerticalAxisPosition;\n\t\t\tresult.rangeAxisPosition = mainHorizontalAxisPosition;\n\t\t} else {\n\t\t\tresult.domainAxisPosition = mainHorizontalAxisPosition;\n\t\t\tresult.rangeAxisPosition = mainVerticalAxisPosition;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tprotected getScaleDomain(axisPosition: AxisPositions) {\n\t\tconst options = this.model.getOptions();\n\t\tconst axisOptions = Tools.getProperty(options, \"axes\", axisPosition);\n\t\tconst { includeZero } = axisOptions;\n\t\tconst scaleType = Tools.getProperty(axisOptions, \"scaleType\") || ScaleTypes.LINEAR;\n\n\t\tif (this.model.isDataEmpty()) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst displayData = this.model.getDisplayData();\n\t\tconst { mapsTo } = axisOptions;\n\n\t\t// If domain is specified return that domain\n\t\tif (axisOptions.domain) {\n\t\t\treturn axisOptions.domain;\n\t\t}\n\n\t\t// If scale is a LABELS scale, return some labels as the domain\n\t\tif (axisOptions && scaleType === ScaleTypes.LABELS) {\n\t\t\t// Get unique values\n\t\t\treturn map(displayData, d => d[mapsTo]).keys();\n\t\t}\n\n\t\t// Get the extent of the domain\n\t\tlet domain;\n\t\tlet allDataValues;\n\t\t// If the scale is stacked\n\t\tif (axisOptions.stacked) {\n\t\t\tconst dataValuesGroupedByKeys = this.model.getDataValuesGroupedByKeys();\n\t\t\tallDataValues = dataValuesGroupedByKeys.map(dataValues => sum(values(dataValues) as any));\n\t\t} else {\n\t\t\tallDataValues = displayData.map(datum => datum[mapsTo]);\n\t\t}\n\n\t\tif (scaleType !== ScaleTypes.TIME && includeZero) {\n\t\t\tallDataValues.push(0);\n\t\t}\n\n\t\tdomain = extent(allDataValues);\n\t\tdomain = this.extendsDomain(axisPosition, domain);\n\n\t\treturn domain;\n\t}\n\n\tprotected createScale(axisPosition: AxisPositions) {\n\t\tconst options = this.model.getOptions();\n\t\tconst axisOptions = Tools.getProperty(options, \"axes\", axisPosition);\n\n\t\tif (!axisOptions) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst scaleType = Tools.getProperty(axisOptions, \"scaleType\") || ScaleTypes.LINEAR;\n\t\tthis.scaleTypes[axisPosition] = scaleType;\n\n\t\tlet scale;\n\t\tif (scaleType === ScaleTypes.TIME) {\n\t\t\tscale = scaleTime();\n\t\t} else if (scaleType === ScaleTypes.LOG) {\n\t\t\tscale = scaleLog().base(axisOptions.base || 10);\n\t\t} else if (scaleType === ScaleTypes.LABELS) {\n\t\t\tscale = scaleBand();\n\t\t} else {\n\t\t\tscale = scaleLinear();\n\t\t}\n\n\t\tscale.domain(this.getScaleDomain(axisPosition));\n\n\t\treturn scale;\n\t}\n\n\tgetHighestDomainThreshold(): null | {threshold: ThresholdOptions, scaleValue: number} {\n\t\tconst axesOptions = Tools.getProperty(this.model.getOptions(), \"axes\");\n\t\tconst domainAxisPosition = this.getDomainAxisPosition();\n\n\t\tconst { thresholds } = axesOptions[domainAxisPosition];\n\n\t\tif (!thresholds) { return null; }\n\n\t\tconst domainScale = this.getDomainScale();\n\t\t// Find the highest threshold for the domain\n\t\tconst highestThreshold = thresholds.sort((a, b) => b.value - a.value)[0];\n\n\t\treturn {\n\t\t\tthreshold: highestThreshold,\n\t\t\tscaleValue: domainScale(highestThreshold.value)\n\t\t};\n\t}\n\n\tgetHighestRangeThreshold(): null | {threshold: ThresholdOptions, scaleValue: number} {\n\t\tconst axesOptions = Tools.getProperty(this.model.getOptions(), \"axes\");\n\t\tconst rangeAxisPosition = this.getRangeAxisPosition();\n\n\t\tconst { thresholds } = axesOptions[rangeAxisPosition];\n\n\t\tif (!thresholds) { return null; }\n\n\t\tconst rangeScale = this.getRangeScale();\n\t\t// Find the highest threshold for the range\n\t\tconst highestThreshold = thresholds.sort((a, b) => b.value - a.value)[0];\n\n\t\treturn {\n\t\t\tthreshold: highestThreshold,\n\t\t\tscaleValue: rangeScale(highestThreshold.value)\n\t\t};\n\t}\n}\n\nfunction addSpacingToTimeDomain(domain: any, spaceToAddToEdges: number) {\n\tconst startDate = new Date(domain[0]);\n\tconst endDate = new Date(domain[1]);\n\n\tif (differenceInYears(endDate, startDate) > 1) {\n\t\treturn [subYears(startDate, spaceToAddToEdges), addYears(endDate, spaceToAddToEdges)];\n\t}\n\n\tif (differenceInMonths(endDate, startDate) > 1) {\n\t\treturn [subMonths(startDate, spaceToAddToEdges), addMonths(endDate, spaceToAddToEdges)];\n\t}\n\n\tif (differenceInDays(endDate, startDate) > 1) {\n\t\treturn [subDays(startDate, spaceToAddToEdges), addDays(endDate, spaceToAddToEdges)];\n\t}\n\n\tif (differenceInHours(endDate, startDate) > 1) {\n\t\treturn [subHours(startDate, spaceToAddToEdges), addHours(endDate, spaceToAddToEdges)];\n\t}\n\n\tif (differenceInMinutes(endDate, startDate) > 30) {\n\t\treturn [subMinutes(startDate, spaceToAddToEdges * 30), addMinutes(endDate, spaceToAddToEdges * 30)];\n\t}\n\n\tif (differenceInMinutes(endDate, startDate) > 1) {\n\t\treturn [subMinutes(startDate, spaceToAddToEdges), addMinutes(endDate, spaceToAddToEdges)];\n\t}\n\n\tif (differenceInSeconds(endDate, startDate) > 15) {\n\t\treturn [subSeconds(startDate, spaceToAddToEdges * 15), addSeconds(endDate, spaceToAddToEdges * 15)];\n\t}\n\n\tif (differenceInSeconds(endDate, startDate) > 1) {\n\t\treturn [subSeconds(startDate, spaceToAddToEdges), addSeconds(endDate, spaceToAddToEdges)];\n\t}\n\n\treturn [startDate, endDate];\n}\n\nfunction addSpacingToContinuousDomain([lower, upper]: number[], paddingRatio: number) {\n\tconst domainLength = upper - lower;\n\tconst padding = domainLength * paddingRatio;\n\n\t// If padding crosses 0, keep 0 as new upper bound\n\tconst newUpper = upper <= 0 && upper + padding > 0 ? 0 : upper + padding;\n\t// If padding crosses 0, keep 0 as new lower bound\n\tconst newLower = lower >= 0 && lower - padding < 0 ? 0 : lower - padding;\n\n\treturn [newLower, newUpper];\n}\n"]}
@@ -74,13 +74,14 @@ function getConsecutiveDifferences(elements) {
74
74
  }
75
75
  return elements.slice(1).map(function (elem, i) { return elem - elements[i]; });
76
76
  }
77
- // Given a number, return the closest TIME_INTERVAL name
78
- function closestTimeIntervalName(ms) {
79
- var index = TIME_INTERVALS.reduce(function (acc, _a, i) {
80
- var key = _a[0], value = _a[1];
81
- var previousSpan = Math.abs(acc - ms);
82
- var currentSpan = Math.abs(value - ms);
83
- return previousSpan < currentSpan ? acc : i;
77
+ // Given a duration in ms, return the closest TIME_INTERVAL name
78
+ function closestTimeIntervalName(duration) {
79
+ var index = TIME_INTERVALS.reduce(function (nearestIndex, _a, i) {
80
+ var intervalName = _a[0], delta = _a[1];
81
+ var deltaNearest = TIME_INTERVALS[nearestIndex][1];
82
+ var oldNearestSpan = Math.abs(deltaNearest - duration);
83
+ var currentSpan = Math.abs(delta - duration);
84
+ return oldNearestSpan < currentSpan ? nearestIndex : i;
84
85
  }, 0);
85
86
  return TIME_INTERVALS[index][0];
86
87
  }