@carbon/charts 0.30.4 → 0.30.8

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 (151) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/build/demo/data/bar.d.ts +56 -94
  3. package/build/demo/data/bubble.d.ts +58 -13
  4. package/build/demo/data/donut.d.ts +3 -6
  5. package/build/demo/data/line.d.ts +35 -35
  6. package/build/demo/data/pie.d.ts +3 -6
  7. package/build/demo/data/scatter.d.ts +33 -20
  8. package/build/demo/data/step.d.ts +15 -16
  9. package/build/demo/data/time-series-axis.d.ts +12 -48
  10. package/build/src/charts/bar-grouped.d.ts +2 -2
  11. package/build/src/charts/bar-simple.d.ts +2 -4
  12. package/build/src/components/essentials/legend.d.ts +0 -4
  13. package/build/src/components/essentials/tooltip-bar.d.ts +1 -1
  14. package/build/src/components/essentials/tooltip-pie.d.ts +5 -0
  15. package/build/src/components/essentials/tooltip-scatter.d.ts +1 -1
  16. package/build/src/components/graphs/bar-grouped.d.ts +6 -4
  17. package/build/src/components/graphs/bar-simple.d.ts +0 -1
  18. package/build/src/components/graphs/bar-stacked.d.ts +0 -1
  19. package/build/src/components/graphs/bubble.d.ts +0 -1
  20. package/build/src/components/graphs/line.d.ts +3 -1
  21. package/build/src/components/graphs/pie.d.ts +0 -1
  22. package/build/src/components/graphs/scatter.d.ts +0 -1
  23. package/build/src/components/index.d.ts +1 -0
  24. package/build/src/interfaces/axis-scales.d.ts +4 -16
  25. package/build/src/interfaces/charts.d.ts +23 -1
  26. package/build/src/interfaces/enums.d.ts +0 -4
  27. package/build/src/interfaces/events.d.ts +29 -0
  28. package/build/src/model-pie.d.ts +1 -7
  29. package/build/src/model.d.ts +31 -13
  30. package/build/src/services/scales-cartesian.d.ts +11 -3
  31. package/build/src/tools.d.ts +2 -2
  32. package/build/stories/tutorials.stories.d.ts +1 -0
  33. package/bundle.js +1 -1
  34. package/chart.js +2 -2
  35. package/chart.js.map +1 -1
  36. package/charts/bar-grouped.d.ts +2 -2
  37. package/charts/bar-grouped.js.map +1 -1
  38. package/charts/bar-simple.d.ts +2 -4
  39. package/charts/bar-simple.js +0 -2
  40. package/charts/bar-simple.js.map +1 -1
  41. package/charts/donut.js +2 -2
  42. package/charts/donut.js.map +1 -1
  43. package/charts/pie.js +2 -2
  44. package/charts/pie.js.map +1 -1
  45. package/components/axes/grid.js +12 -19
  46. package/components/axes/grid.js.map +1 -1
  47. package/components/component.js +1 -1
  48. package/components/component.js.map +1 -1
  49. package/components/essentials/legend.d.ts +0 -4
  50. package/components/essentials/legend.js +12 -26
  51. package/components/essentials/legend.js.map +1 -1
  52. package/components/essentials/title.js +4 -4
  53. package/components/essentials/title.js.map +1 -1
  54. package/components/essentials/tooltip-bar.d.ts +1 -1
  55. package/components/essentials/tooltip-bar.js +13 -5
  56. package/components/essentials/tooltip-bar.js.map +1 -1
  57. package/components/essentials/tooltip-pie.d.ts +5 -0
  58. package/components/essentials/tooltip-pie.js +40 -0
  59. package/components/essentials/tooltip-pie.js.map +1 -0
  60. package/components/essentials/tooltip-scatter.d.ts +1 -1
  61. package/components/essentials/tooltip-scatter.js +8 -6
  62. package/components/essentials/tooltip-scatter.js.map +1 -1
  63. package/components/essentials/tooltip.js +14 -17
  64. package/components/essentials/tooltip.js.map +1 -1
  65. package/components/graphs/bar-grouped.d.ts +6 -4
  66. package/components/graphs/bar-grouped.js +64 -36
  67. package/components/graphs/bar-grouped.js.map +1 -1
  68. package/components/graphs/bar-simple.d.ts +0 -1
  69. package/components/graphs/bar-simple.js +16 -34
  70. package/components/graphs/bar-simple.js.map +1 -1
  71. package/components/graphs/bar-stacked.d.ts +0 -1
  72. package/components/graphs/bar-stacked.js +31 -112
  73. package/components/graphs/bar-stacked.js.map +1 -1
  74. package/components/graphs/bar.js.map +1 -1
  75. package/components/graphs/bubble.d.ts +0 -1
  76. package/components/graphs/bubble.js +16 -20
  77. package/components/graphs/bubble.js.map +1 -1
  78. package/components/graphs/donut.js +1 -1
  79. package/components/graphs/donut.js.map +1 -1
  80. package/components/graphs/line.d.ts +3 -1
  81. package/components/graphs/line.js +42 -31
  82. package/components/graphs/line.js.map +1 -1
  83. package/components/graphs/pie.d.ts +0 -1
  84. package/components/graphs/pie.js +15 -22
  85. package/components/graphs/pie.js.map +1 -1
  86. package/components/graphs/scatter.d.ts +0 -1
  87. package/components/graphs/scatter.js +26 -41
  88. package/components/graphs/scatter.js.map +1 -1
  89. package/components/index.d.ts +1 -0
  90. package/components/index.js +1 -0
  91. package/components/index.js.map +1 -1
  92. package/configuration.js +7 -0
  93. package/configuration.js.map +1 -1
  94. package/demo/data/bar.d.ts +56 -94
  95. package/demo/data/bar.js +106 -271
  96. package/demo/data/bar.js.map +1 -1
  97. package/demo/data/bubble.d.ts +58 -13
  98. package/demo/data/bubble.js +74 -174
  99. package/demo/data/bubble.js.map +1 -1
  100. package/demo/data/bundle.js +1 -1
  101. package/demo/data/donut.d.ts +3 -6
  102. package/demo/data/index.js +22 -4
  103. package/demo/data/index.js.map +1 -1
  104. package/demo/data/line.d.ts +35 -35
  105. package/demo/data/line.js +70 -196
  106. package/demo/data/line.js.map +1 -1
  107. package/demo/data/pie.d.ts +3 -6
  108. package/demo/data/pie.js +8 -10
  109. package/demo/data/pie.js.map +1 -1
  110. package/demo/data/scatter.d.ts +33 -20
  111. package/demo/data/scatter.js +50 -68
  112. package/demo/data/scatter.js.map +1 -1
  113. package/demo/data/step.d.ts +15 -16
  114. package/demo/data/time-series-axis.d.ts +12 -48
  115. package/demo/data/time-series-axis.js +34 -46
  116. package/demo/data/time-series-axis.js.map +1 -1
  117. package/demo/styles.css +28 -0
  118. package/demo/styles.css.map +1 -1
  119. package/demo/styles.min.css +1 -1
  120. package/demo/styles.min.css.map +1 -1
  121. package/demo/tsconfig.tsbuildinfo +38 -37
  122. package/interfaces/axis-scales.d.ts +4 -16
  123. package/interfaces/axis-scales.js.map +1 -1
  124. package/interfaces/charts.d.ts +23 -1
  125. package/interfaces/charts.js.map +1 -1
  126. package/interfaces/enums.d.ts +0 -4
  127. package/interfaces/enums.js +0 -5
  128. package/interfaces/enums.js.map +1 -1
  129. package/interfaces/events.d.ts +29 -0
  130. package/interfaces/events.js +33 -0
  131. package/interfaces/events.js.map +1 -1
  132. package/model-pie.d.ts +1 -7
  133. package/model-pie.js +2 -107
  134. package/model-pie.js.map +1 -1
  135. package/model.d.ts +31 -13
  136. package/model.js +204 -75
  137. package/model.js.map +1 -1
  138. package/package.json +3 -1
  139. package/services/essentials/dom-utils.js +3 -2
  140. package/services/essentials/dom-utils.js.map +1 -1
  141. package/services/scales-cartesian.d.ts +11 -3
  142. package/services/scales-cartesian.js +104 -122
  143. package/services/scales-cartesian.js.map +1 -1
  144. package/tools.d.ts +2 -2
  145. package/tools.js +23 -2
  146. package/tools.js.map +1 -1
  147. package/tsconfig.tsbuildinfo +93 -93
  148. package/build/src/model-simple-bar.d.ts +0 -11
  149. package/model-simple-bar.d.ts +0 -11
  150. package/model-simple-bar.js +0 -88
  151. package/model-simple-bar.js.map +0 -1
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\";\n\n// D3\nimport { scaleOrdinal } from \"d3-scale\";\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 labels that have existed within the lifetime of the chart\n\t * @type string[]\n\t */\n\tprotected allDataLabels: string[];\n\n\t// Fill scales & fill related objects\n\tprotected patternScale = {};\n\tprotected colorScale: any = {};\n\n\n\tconstructor(services: any) {\n\t\tthis.services = services;\n\t}\n\n\tsanitize(data) {\n\t\t// Sanitize all dates\n\t\tdata.datasets.forEach(dataset => {\n\t\t\tdataset.data = dataset.data.map(d => {\n\t\t\t\tif (d.date && !d.date.getTime) {\n\t\t\t\t\td.date = new Date(d.date);\n\t\t\t\t}\n\n\t\t\t\treturn d;\n\t\t\t});\n\t\t});\n\n\t\treturn data;\n\t}\n\n\tgetDisplayData() {\n\t\tconst { ACTIVE } = Configuration.legend.items.status;\n\t\tconst dataLabels = this.get(\"dataLabels\");\n\n\t\tif (!this.get(\"data\")) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Remove datasets that have been disabled\n\t\tconst displayData = Tools.clone(this.get(\"data\"));\n\t\tdisplayData.datasets = displayData.datasets.filter(dataset => {\n\t\t\treturn dataLabels[dataset.label] === ACTIVE;\n\t\t});\n\n\t\treturn displayData;\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 dataLabels = this.generateDataLabels(sanitizedData);\n\n\t\tthis.set({\n\t\t\tdata: sanitizedData,\n\t\t\tdataLabels\n\t\t});\n\n\t\treturn sanitizedData;\n\t}\n\n\tgenerateDataLabels(newData) {\n\t\tconst dataLabels = {};\n\t\tnewData.datasets.forEach(dataset => {\n\t\t\tdataLabels[dataset.label] = Configuration.legend.items.status.ACTIVE;\n\t\t});\n\n\t\treturn dataLabels;\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.updateAllDataLabels();\n\t\tthis.setColorScale();\n\n\t\tthis.services.events.dispatchEvent(\"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 dataLabels = this.get(\"dataLabels\");\n\n\t\tconst hasDeactivatedItems = Object.keys(dataLabels).some(label => dataLabels[label] === DISABLED);\n\t\tconst activeItems = Object.keys(dataLabels).filter(label => dataLabels[label] === ACTIVE);\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] === changedLabel) {\n\t\t\t\t// If every item is active, then enable \"changedLabel\" and disable all other items\n\t\t\t\tObject.keys(dataLabels).forEach(label => {\n\t\t\t\t\tdataLabels[label] = ACTIVE;\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tdataLabels[changedLabel] = dataLabels[changedLabel] === 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\tObject.keys(dataLabels).forEach(label => {\n\t\t\t\tdataLabels[label] = (label === changedLabel ? ACTIVE : DISABLED);\n\t\t\t});\n\t\t}\n\n\t\t// Update model\n\t\tthis.set({\n\t\t\tdataLabels\n\t\t});\n\t}\n\n\t/*\n\t * Fill scales\n\t*/\n\tsetColorScale() {\n\t\tif (this.getDisplayData().datasets[0].fillColors) {\n\t\t\tthis.getDisplayData().datasets.forEach(dataset => {\n\t\t\t\tthis.colorScale[dataset.label] = scaleOrdinal().range(dataset.fillColors).domain(this.allDataLabels);\n\t\t\t});\n\t\t} else {\n\t\t\tconst colors = colorPalettes.DEFAULT;\n\t\t\tthis.getData().datasets.forEach((dataset, i) => {\n\t\t\t\tthis.colorScale[dataset.label] = scaleOrdinal().range([colors[i]]).domain(this.allDataLabels);\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Should the data point be filled?\n\t * @param datasetLabel\n\t * @param label\n\t * @param value\n\t * @param defaultFilled the default for this chart\n\t */\n\tgetIsFilled(datasetLabel: any, label?: any, data?: any, defaultFilled?: boolean) {\n\t\tconst options = this.getOptions();\n\t\tif (options.getIsFilled) {\n\t\t\treturn options.getIsFilled(datasetLabel, label, data, defaultFilled);\n\t\t} else {\n\t\t\treturn defaultFilled;\n\t\t}\n\t}\n\n\tgetFillColor(datasetLabel: any, label?: any, data?: any) {\n\t\tconst options = this.getOptions();\n\t\tconst defaultFillColor = this.getFillScale()[datasetLabel](label);\n\t\tif (options.getFillColor) {\n\t\t\treturn options.getFillColor(datasetLabel, label, data, defaultFillColor);\n\t\t} else {\n\t\t\treturn defaultFillColor;\n\t\t}\n\t}\n\n\tgetStrokeColor(datasetLabel: any, label?: any, data?: any) {\n\t\tconst options = this.getOptions();\n\t\tconst defaultStrokeColor = this.colorScale[datasetLabel](label);\n\t\tif (options.getStrokeColor) {\n\t\t\treturn options.getStrokeColor(datasetLabel, label, data, defaultStrokeColor);\n\t\t} else {\n\t\t\treturn defaultStrokeColor;\n\t\t}\n\t}\n\n\tgetFillScale() {\n\t\t// Choose patternScale or colorScale based on the \"accessibility\" flag\n\t\t// return this.get(\"options\").accessibility ? this.patternScale : this.colorScale;\n\t\treturn this.colorScale;\n\t}\n\n\n\t/*\n\t * Data labels\n\t*/\n\tprotected updateAllDataLabels() {\n\t\t// If allDataLabels hasn't been initialized yet\n\t\t// Set it to the current set of chart labels\n\t\tif (!this.allDataLabels) {\n\t\t\tthis.allDataLabels = this.getDisplayData().labels;\n\t\t} else {\n\t\t\t// Loop through current chart labels\n\t\t\tthis.getDisplayData().labels.forEach(label => {\n\t\t\t\t// If label hasn't been stored yet, store it\n\t\t\t\tif (this.allDataLabels.indexOf(label) === -1) {\n\t\t\t\t\tthis.allDataLabels.push(label);\n\t\t\t\t}\n\t\t\t});\n\t\t}\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\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\tconst group = dataset.label;\n\n\t\t\t// Update each data point to the new format\n\t\t\tdataset.data.forEach((datum, i) => {\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\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\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\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 * 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\t.domain(this.allDataGroups);\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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@carbon/charts",
3
- "version": "0.30.4",
3
+ "version": "0.30.8",
4
4
  "description": "Carbon charting components",
5
5
  "main": "./bundle.js",
6
6
  "module": "./index.js",
@@ -82,6 +82,7 @@
82
82
  "extract-text-webpack-plugin": "3.0.2",
83
83
  "file-loader": "1.1.5",
84
84
  "fork-ts-checker-webpack-plugin": "^4.0.5",
85
+ "highlight.js": "9.18.1",
85
86
  "html-loader": "0.5.1",
86
87
  "html-webpack-exclude-assets-plugin": "0.0.7",
87
88
  "html-webpack-plugin": "3.2.0",
@@ -93,6 +94,7 @@
93
94
  "karma-safari-launcher": "1.0.0",
94
95
  "karma-webpack": "4.0.2",
95
96
  "lerna": "3.13.4",
97
+ "marked": "0.8.2",
96
98
  "mini-css-extract-plugin": "0.9.0",
97
99
  "raw-loader": "0.5.1",
98
100
  "react-docgen-typescript-loader": "^3.6.0",
@@ -13,11 +13,12 @@ var __extends = (this && this.__extends) || (function () {
13
13
  })();
14
14
  // Internal Imports
15
15
  import { Service } from "../service";
16
+ import { Events } from "./../../interfaces";
16
17
  // D3 Imports
17
18
  import { select } from "d3-selection";
18
19
  import { Tools } from "../../tools";
19
20
  // import the settings for the css prefix
20
- import settings from "carbon-components/src/globals/js/settings";
21
+ import settings from "carbon-components/es/globals/js/settings";
21
22
  // MISC
22
23
  import ResizeObserver from "resize-observer-polyfill";
23
24
  var DOMUtils = /** @class */ (function (_super) {
@@ -191,7 +192,7 @@ var DOMUtils = /** @class */ (function (_super) {
191
192
  || Math.abs(containerHeight - holder.clientHeight) > 1) {
192
193
  containerWidth = holder.clientWidth;
193
194
  containerHeight = holder.clientHeight;
194
- _this.services.events.dispatchEvent("chart-resize");
195
+ _this.services.events.dispatchEvent(Events.Chart.RESIZE);
195
196
  }
196
197
  }, 12.5);
197
198
  // Observe the behaviour of resizing on the holder
@@ -1 +1 @@
1
- {"version":3,"file":"dom-utils.js","sourceRoot":"","sources":["dom-utils.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Service } from \"../service\";\n\n// D3 Imports\nimport { select, Selection } from \"d3-selection\";\nimport { Tools } from \"../../tools\";\n\n// import the settings for the css prefix\nimport settings from \"carbon-components/src/globals/js/settings\";\n\n// MISC\nimport ResizeObserver from \"resize-observer-polyfill\";\n\nexport class DOMUtils extends Service {\n\tstatic getSVGElementSize(svgSelector: Selection<any, any, any, any>, options?: any) {\n\t\tif (!svgSelector.attr) {\n\t\t\tsvgSelector = select(svgSelector as any);\n\t\t}\n\n\t\tconst finalDimensions = {\n\t\t\twidth: 0,\n\t\t\theight: 0\n\t\t};\n\n\t\tconst validateAndSetDimensions = dimensions => {\n\t\t\tif (dimensions) {\n\t\t\t\tObject.keys(finalDimensions).forEach(dimensionKey => {\n\t\t\t\t\tif (dimensions[dimensionKey]) {\n\t\t\t\t\t\tconst dimension = dimensions[dimensionKey];\n\t\t\t\t\t\tconst dimensionNumber = parseFloat(dimension);\n\t\t\t\t\t\tif (dimension &&\n\t\t\t\t\t\t\tdimensionNumber > finalDimensions[dimensionKey] &&\n\t\t\t\t\t\t\t(\"\" + dimension).indexOf(\"%\") === -1) {\n\t\t\t\t\t\t\tfinalDimensions[dimensionKey] = dimensionNumber;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tconst attrDimensions = {\n\t\t\twidth: svgSelector.attr(\"width\"),\n\t\t\theight: svgSelector.attr(\"height\")\n\t\t};\n\n\t\tlet bbox, bboxDimensions, boundingRect, boundingRectDimensions;\n\t\t// In many versions of Firefox\n\t\t// getBBox will cause an \"NSFailure\" error\n\t\ttry {\n\t\t\tbbox = svgSelector.node().getBBox();\n\t\t\tbboxDimensions = {\n\t\t\t\twidth: bbox.width,\n\t\t\t\theight: bbox.height\n\t\t\t};\n\t\t} catch (e) {}\n\n\t\ttry {\n\t\t\tboundingRect = svgSelector.node().getBoundingClientRect();\n\t\t\tboundingRectDimensions = {\n\t\t\t\twidth: boundingRect.width,\n\t\t\t\theight: boundingRect.height\n\t\t\t};\n\t\t} catch (e) {}\n\n\t\tconst clientDimensions = {\n\t\t\twidth: svgSelector.node().clientWidth,\n\t\t\theight: svgSelector.node().clientHeight\n\t\t};\n\n\t\t// If both attribute values are numbers\n\t\t// And not percentages or NaN\n\t\tif (options) {\n\t\t\tif (options.useAttrs) {\n\t\t\t\tvalidateAndSetDimensions(attrDimensions);\n\n\t\t\t\tif (finalDimensions.width > 0 && finalDimensions.height > 0) {\n\t\t\t\t\treturn finalDimensions;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (options.useClientDimensions) {\n\t\t\t\tvalidateAndSetDimensions(clientDimensions);\n\n\t\t\t\tif (finalDimensions.width > 0 && finalDimensions.height > 0) {\n\t\t\t\t\treturn clientDimensions;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (options.useBBox) {\n\t\t\t\tvalidateAndSetDimensions(bboxDimensions);\n\n\t\t\t\tif (finalDimensions.width > 0 && finalDimensions.height > 0) {\n\t\t\t\t\treturn bboxDimensions;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (options.useBoundingRect) {\n\t\t\t\tvalidateAndSetDimensions(boundingRectDimensions);\n\n\t\t\t\tif (finalDimensions.width > 0 && finalDimensions.height > 0) {\n\t\t\t\t\treturn boundingRectDimensions;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\ttry {\n\t\t\tconst nativeDimensions = {\n\t\t\t\twidth: Tools.getProperty(svgSelector.node(), \"width\", \"baseVal\", \"value\"),\n\t\t\t\theight: Tools.getProperty(svgSelector.node(), \"height\", \"baseVal\", \"value\")\n\t\t\t};\n\t\t\t\n\t\t\tvalidateAndSetDimensions(nativeDimensions);\n\t\t} catch (e) {\n\t\t\tvalidateAndSetDimensions(clientDimensions);\n\t\t\tvalidateAndSetDimensions(bboxDimensions);\n\t\t\tvalidateAndSetDimensions(attrDimensions);\n\t\t}\n\n\t\treturn finalDimensions;\n\t}\n\n\tstatic appendOrSelect(parent, query) {\n\t\tconst querySections = query.split(\".\");\n\t\tconst elementToAppend = querySections[0];\n\n\t\tconst selection = parent.select(query);\n\t\tif (selection.empty()) {\n\t\t\treturn parent.append(elementToAppend)\n\t\t\t\t.attr(\"class\", querySections.slice(1).join(\" \"));\n\t\t}\n\n\t\treturn selection;\n\t}\n\n\tprotected svg: Element;\n\tprotected width: string;\n\tprotected height: string;\n\n\tinit() {\n\t\t// Add width & height to the chart holder if necessary, and add a classname\n\t\tthis.styleHolderElement();\n\n\t\t// Add main SVG\n\t\tthis.addSVGElement();\n\n\t\tif (this.model.getOptions().resizable) {\n\t\t\tthis.addResizeListener();\n\t\t}\n\t}\n\n\tupdate() {\n\t\tthis.styleHolderElement();\n\t}\n\n\tstyleHolderElement() {\n\t\tconst holderElement = this.getHolder() as HTMLElement;\n\n\t\t// Add class to chart holder\n\t\tselect(this.getHolder()).classed(`${settings.prefix}--chart-holder`, true);\n\n\t\t// In order for resize events to not clash with these updates\n\t\t// We'll check if the width & height values passed in options\n\t\t// Have changed, before setting them to the holder\n\t\tconst { width, height } = this.model.getOptions();\n\t\tif (width !== this.width) {\n\t\t\t// Apply formatted width attribute to chart\n\t\t\tholderElement.style.width = width;\n\n\t\t\tthis.width = width;\n\t\t}\n\n\t\tif (height !== this.height) {\n\t\t\t// Apply formatted width attribute to chart\n\t\t\tholderElement.style.height = height;\n\n\t\t\tthis.height = height;\n\t\t}\n\t}\n\n\tgetHolder() {\n\t\treturn this.model.get(\"holder\");\n\t}\n\n\taddSVGElement() {\n\t\tconst chartsprefix = Tools.getProperty(this.model.getOptions(), \"style\", \"prefix\");\n\t\tconst svg = select(this.getHolder())\n\t\t\t.append(\"svg\")\n\t\t\t.classed(`${settings.prefix}--${chartsprefix}--chart-svg`, true)\n\t\t\t.attr(\"height\", \"100%\")\n\t\t\t.attr(\"width\", \"100%\");\n\n\t\tthis.svg = svg.node();\n\t}\n\n\tgetMainSVG() {\n\t\treturn this.svg;\n\t}\n\n\taddResizeListener() {\n\t\tconst holder = this.getHolder();\n\n\t\tif (!holder) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Grab current dimensions of the chart holder\n\t\tlet containerWidth = holder.clientWidth;\n\t\tlet containerHeight = holder.clientHeight;\n\n\t\t// The resize callback function\n\t\tconst resizeCallback = Tools.debounce((entries, observer) => {\n\t\t\tif (!holder) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (Math.abs(containerWidth - holder.clientWidth) > 1\n\t\t\t\t|| Math.abs(containerHeight - holder.clientHeight) > 1) {\n\t\t\t\tcontainerWidth = holder.clientWidth;\n\t\t\t\tcontainerHeight = holder.clientHeight;\n\n\t\t\t\tthis.services.events.dispatchEvent(\"chart-resize\");\n\t\t\t}\n\t\t}, 12.5);\n\n\t\t// Observe the behaviour of resizing on the holder\n\t\tconst resizeObserver = new ResizeObserver(resizeCallback);\n\t\tresizeObserver.observe(holder);\n\t}\n}\n"]}
1
+ {"version":3,"file":"dom-utils.js","sourceRoot":"","sources":["dom-utils.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Service } from \"../service\";\nimport { Events } from \"./../../interfaces\";\n\n// D3 Imports\nimport { select, Selection } from \"d3-selection\";\nimport { Tools } from \"../../tools\";\n\n// import the settings for the css prefix\nimport settings from \"carbon-components/es/globals/js/settings\";\n\n// MISC\nimport ResizeObserver from \"resize-observer-polyfill\";\n\nexport class DOMUtils extends Service {\n\tstatic getSVGElementSize(svgSelector: Selection<any, any, any, any>, options?: any) {\n\t\tif (!svgSelector.attr) {\n\t\t\tsvgSelector = select(svgSelector as any);\n\t\t}\n\n\t\tconst finalDimensions = {\n\t\t\twidth: 0,\n\t\t\theight: 0\n\t\t};\n\n\t\tconst validateAndSetDimensions = dimensions => {\n\t\t\tif (dimensions) {\n\t\t\t\tObject.keys(finalDimensions).forEach(dimensionKey => {\n\t\t\t\t\tif (dimensions[dimensionKey]) {\n\t\t\t\t\t\tconst dimension = dimensions[dimensionKey];\n\t\t\t\t\t\tconst dimensionNumber = parseFloat(dimension);\n\t\t\t\t\t\tif (dimension &&\n\t\t\t\t\t\t\tdimensionNumber > finalDimensions[dimensionKey] &&\n\t\t\t\t\t\t\t(\"\" + dimension).indexOf(\"%\") === -1) {\n\t\t\t\t\t\t\tfinalDimensions[dimensionKey] = dimensionNumber;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tconst attrDimensions = {\n\t\t\twidth: svgSelector.attr(\"width\"),\n\t\t\theight: svgSelector.attr(\"height\")\n\t\t};\n\n\t\tlet bbox, bboxDimensions, boundingRect, boundingRectDimensions;\n\t\t// In many versions of Firefox\n\t\t// getBBox will cause an \"NSFailure\" error\n\t\ttry {\n\t\t\tbbox = svgSelector.node().getBBox();\n\t\t\tbboxDimensions = {\n\t\t\t\twidth: bbox.width,\n\t\t\t\theight: bbox.height\n\t\t\t};\n\t\t} catch (e) {}\n\n\t\ttry {\n\t\t\tboundingRect = svgSelector.node().getBoundingClientRect();\n\t\t\tboundingRectDimensions = {\n\t\t\t\twidth: boundingRect.width,\n\t\t\t\theight: boundingRect.height\n\t\t\t};\n\t\t} catch (e) {}\n\n\t\tconst clientDimensions = {\n\t\t\twidth: svgSelector.node().clientWidth,\n\t\t\theight: svgSelector.node().clientHeight\n\t\t};\n\n\t\t// If both attribute values are numbers\n\t\t// And not percentages or NaN\n\t\tif (options) {\n\t\t\tif (options.useAttrs) {\n\t\t\t\tvalidateAndSetDimensions(attrDimensions);\n\n\t\t\t\tif (finalDimensions.width > 0 && finalDimensions.height > 0) {\n\t\t\t\t\treturn finalDimensions;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (options.useClientDimensions) {\n\t\t\t\tvalidateAndSetDimensions(clientDimensions);\n\n\t\t\t\tif (finalDimensions.width > 0 && finalDimensions.height > 0) {\n\t\t\t\t\treturn clientDimensions;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (options.useBBox) {\n\t\t\t\tvalidateAndSetDimensions(bboxDimensions);\n\n\t\t\t\tif (finalDimensions.width > 0 && finalDimensions.height > 0) {\n\t\t\t\t\treturn bboxDimensions;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (options.useBoundingRect) {\n\t\t\t\tvalidateAndSetDimensions(boundingRectDimensions);\n\n\t\t\t\tif (finalDimensions.width > 0 && finalDimensions.height > 0) {\n\t\t\t\t\treturn boundingRectDimensions;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\ttry {\n\t\t\tconst nativeDimensions = {\n\t\t\t\twidth: Tools.getProperty(svgSelector.node(), \"width\", \"baseVal\", \"value\"),\n\t\t\t\theight: Tools.getProperty(svgSelector.node(), \"height\", \"baseVal\", \"value\")\n\t\t\t};\n\n\t\t\tvalidateAndSetDimensions(nativeDimensions);\n\t\t} catch (e) {\n\t\t\tvalidateAndSetDimensions(clientDimensions);\n\t\t\tvalidateAndSetDimensions(bboxDimensions);\n\t\t\tvalidateAndSetDimensions(attrDimensions);\n\t\t}\n\n\t\treturn finalDimensions;\n\t}\n\n\tstatic appendOrSelect(parent, query) {\n\t\tconst querySections = query.split(\".\");\n\t\tconst elementToAppend = querySections[0];\n\n\t\tconst selection = parent.select(query);\n\t\tif (selection.empty()) {\n\t\t\treturn parent.append(elementToAppend)\n\t\t\t\t.attr(\"class\", querySections.slice(1).join(\" \"));\n\t\t}\n\n\t\treturn selection;\n\t}\n\n\tprotected svg: Element;\n\tprotected width: string;\n\tprotected height: string;\n\n\tinit() {\n\t\t// Add width & height to the chart holder if necessary, and add a classname\n\t\tthis.styleHolderElement();\n\n\t\t// Add main SVG\n\t\tthis.addSVGElement();\n\n\t\tif (this.model.getOptions().resizable) {\n\t\t\tthis.addResizeListener();\n\t\t}\n\t}\n\n\tupdate() {\n\t\tthis.styleHolderElement();\n\t}\n\n\tstyleHolderElement() {\n\t\tconst holderElement = this.getHolder() as HTMLElement;\n\n\t\t// Add class to chart holder\n\t\tselect(this.getHolder()).classed(`${settings.prefix}--chart-holder`, true);\n\n\t\t// In order for resize events to not clash with these updates\n\t\t// We'll check if the width & height values passed in options\n\t\t// Have changed, before setting them to the holder\n\t\tconst { width, height } = this.model.getOptions();\n\t\tif (width !== this.width) {\n\t\t\t// Apply formatted width attribute to chart\n\t\t\tholderElement.style.width = width;\n\n\t\t\tthis.width = width;\n\t\t}\n\n\t\tif (height !== this.height) {\n\t\t\t// Apply formatted width attribute to chart\n\t\t\tholderElement.style.height = height;\n\n\t\t\tthis.height = height;\n\t\t}\n\t}\n\n\tgetHolder() {\n\t\treturn this.model.get(\"holder\");\n\t}\n\n\taddSVGElement() {\n\t\tconst chartsprefix = Tools.getProperty(this.model.getOptions(), \"style\", \"prefix\");\n\t\tconst svg = select(this.getHolder())\n\t\t\t.append(\"svg\")\n\t\t\t.classed(`${settings.prefix}--${chartsprefix}--chart-svg`, true)\n\t\t\t.attr(\"height\", \"100%\")\n\t\t\t.attr(\"width\", \"100%\");\n\n\t\tthis.svg = svg.node();\n\t}\n\n\tgetMainSVG() {\n\t\treturn this.svg;\n\t}\n\n\taddResizeListener() {\n\t\tconst holder = this.getHolder();\n\n\t\tif (!holder) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Grab current dimensions of the chart holder\n\t\tlet containerWidth = holder.clientWidth;\n\t\tlet containerHeight = holder.clientHeight;\n\n\t\t// The resize callback function\n\t\tconst resizeCallback = Tools.debounce((entries, observer) => {\n\t\t\tif (!holder) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (Math.abs(containerWidth - holder.clientWidth) > 1\n\t\t\t\t|| Math.abs(containerHeight - holder.clientHeight) > 1) {\n\t\t\t\tcontainerWidth = holder.clientWidth;\n\t\t\t\tcontainerHeight = holder.clientHeight;\n\n\t\t\t\tthis.services.events.dispatchEvent(Events.Chart.RESIZE);\n\t\t\t}\n\t\t}, 12.5);\n\n\t\t// Observe the behaviour of resizing on the holder\n\t\tconst resizeObserver = new ResizeObserver(resizeCallback);\n\t\tresizeObserver.observe(holder);\n\t}\n}\n"]}
@@ -18,8 +18,14 @@ export declare class CartesianScales extends Service {
18
18
  protected orientation: CartesianOrientations;
19
19
  getDomainAxisPosition(): AxisPositions;
20
20
  getRangeAxisPosition(): AxisPositions;
21
- setDefaultAxes(): void;
22
21
  update(animate?: boolean): void;
22
+ protected findMainVerticalAxisPosition(): AxisPositions.LEFT | AxisPositions.RIGHT;
23
+ protected findMainHorizontalAxisPosition(): AxisPositions.TOP | AxisPositions.BOTTOM;
24
+ protected findDomainAndRangeAxesPositions(mainVerticalAxisPosition: AxisPositions, mainHorizontalAxisPosition: AxisPositions): {
25
+ domainAxisPosition: any;
26
+ rangeAxisPosition: any;
27
+ };
28
+ findDomainAndRangeAxes(): void;
23
29
  determineOrientation(): void;
24
30
  getOrientation(): CartesianOrientations;
25
31
  getScaleByPosition(axisPosition: AxisPositions): any;
@@ -33,8 +39,10 @@ export declare class CartesianScales extends Service {
33
39
  getValueFromScale(axisPosition: AxisPositions, datum: any, index?: number): any;
34
40
  getDomainValue(d: any, i: any): any;
35
41
  getRangeValue(d: any, i: any): any;
36
- /** Uses the primary Y Axis to get data items associated with that value. */
37
- getDataFromDomain(domainValue: any): any[];
42
+ getDomainIdentifier(): any;
43
+ getRangeIdentifier(): any;
44
+ /** Uses the primary Y Axis to get data items associated with that value. */
45
+ getDataFromDomain(domainValue: any): any;
38
46
  protected getScaleDomain(axisPosition: AxisPositions): any;
39
47
  protected createScale(axisPosition: AxisPositions): any;
40
48
  }
@@ -18,7 +18,8 @@ import { AxisPositions, CartesianOrientations, ScaleTypes } from "../interfaces"
18
18
  import { Tools } from "../tools";
19
19
  // D3 Imports
20
20
  import { scaleBand, scaleLinear, scaleTime, scaleLog } from "d3-scale";
21
- import { min, extent } from "d3-array";
21
+ import { extent, sum } from "d3-array";
22
+ import { map, values } from "d3-collection";
22
23
  // Misc
23
24
  import { differenceInYears, addYears, subYears, differenceInMonths, addMonths, subMonths, differenceInDays, addDays, subDays, differenceInHours, addHours, subHours, differenceInMinutes, addMinutes, subMinutes, differenceInSeconds, subSeconds, addSeconds } from "date-fns";
24
25
  function addPaddingInDomain(_a, paddingRatio) {
@@ -55,55 +56,68 @@ var CartesianScales = /** @class */ (function (_super) {
55
56
  CartesianScales.prototype.getRangeAxisPosition = function () {
56
57
  return this.rangeAxisPosition;
57
58
  };
58
- CartesianScales.prototype.setDefaultAxes = function () {
59
- var axesOptions = Tools.getProperty(this.model.getOptions(), "axes");
60
- if (!axesOptions) {
61
- this.model.getOptions().axes = {
62
- left: {
63
- primary: true,
64
- includeZero: true,
65
- },
66
- bottom: {
67
- secondary: true,
68
- includeZero: true,
69
- scaleType: this.model.getDisplayData().labels ? ScaleTypes.LABELS : undefined
70
- }
71
- };
72
- }
73
- };
74
59
  CartesianScales.prototype.update = function (animate) {
75
60
  var _this = this;
76
61
  if (animate === void 0) { animate = true; }
77
- this.setDefaultAxes();
62
+ this.findDomainAndRangeAxes();
78
63
  this.determineOrientation();
79
64
  var axisPositions = Object.keys(AxisPositions).map(function (axisPositionKey) { return AxisPositions[axisPositionKey]; });
80
65
  axisPositions.forEach(function (axisPosition) {
81
66
  _this.scales[axisPosition] = _this.createScale(axisPosition);
82
67
  });
83
68
  };
84
- CartesianScales.prototype.determineOrientation = function () {
85
- var _this = this;
69
+ CartesianScales.prototype.findMainVerticalAxisPosition = function () {
86
70
  var options = this.model.getOptions();
87
- // Manually specifying positions here
88
- // In order to enforce a priority
89
- [
90
- AxisPositions.LEFT,
91
- AxisPositions.BOTTOM,
92
- AxisPositions.RIGHT,
93
- AxisPositions.TOP
94
- ].forEach(function (axisPosition) {
95
- var axisOptions = Tools.getProperty(options, "axes", axisPosition);
96
- if (axisOptions) {
97
- var scaleType = axisOptions.scaleType || ScaleTypes.LINEAR;
98
- _this.scaleTypes[axisPosition] = scaleType;
99
- if (scaleType === ScaleTypes.LINEAR) {
100
- _this.rangeAxisPosition = axisPosition;
101
- }
102
- else {
103
- _this.domainAxisPosition = axisPosition;
104
- }
105
- }
106
- });
71
+ var axisOptions = Tools.getProperty(options, "axes");
72
+ // If right axis has been specified as `main`
73
+ if (Tools.getProperty(axisOptions, "axes", AxisPositions.RIGHT, "main") === true) {
74
+ return AxisPositions.RIGHT;
75
+ }
76
+ return AxisPositions.LEFT;
77
+ };
78
+ CartesianScales.prototype.findMainHorizontalAxisPosition = function () {
79
+ var options = this.model.getOptions();
80
+ var axisOptions = Tools.getProperty(options, "axes");
81
+ // If top axis has been specified as `main`
82
+ if (Tools.getProperty(axisOptions, "axes", AxisPositions.TOP, "main") === true) {
83
+ return AxisPositions.TOP;
84
+ }
85
+ return AxisPositions.BOTTOM;
86
+ };
87
+ CartesianScales.prototype.findDomainAndRangeAxesPositions = function (mainVerticalAxisPosition, mainHorizontalAxisPosition) {
88
+ var options = this.model.getOptions();
89
+ var mainVerticalAxisOptions = Tools.getProperty(options, "axes", mainVerticalAxisPosition);
90
+ var mainHorizontalAxisOptions = Tools.getProperty(options, "axes", mainHorizontalAxisPosition);
91
+ var mainVerticalScaleType = mainVerticalAxisOptions.scaleType || ScaleTypes.LINEAR;
92
+ var mainHorizontalScaleType = mainHorizontalAxisOptions.scaleType || ScaleTypes.LINEAR;
93
+ var result = {
94
+ domainAxisPosition: null,
95
+ rangeAxisPosition: null
96
+ };
97
+ if (mainHorizontalScaleType === ScaleTypes.LABELS || mainHorizontalScaleType === ScaleTypes.TIME) {
98
+ result.domainAxisPosition = mainHorizontalAxisPosition;
99
+ result.rangeAxisPosition = mainVerticalAxisPosition;
100
+ }
101
+ else if (mainVerticalScaleType === ScaleTypes.LABELS || mainVerticalScaleType === ScaleTypes.TIME) {
102
+ result.domainAxisPosition = mainVerticalAxisPosition;
103
+ result.rangeAxisPosition = mainHorizontalAxisPosition;
104
+ }
105
+ else {
106
+ result.domainAxisPosition = mainHorizontalAxisPosition;
107
+ result.rangeAxisPosition = mainVerticalAxisPosition;
108
+ }
109
+ return result;
110
+ };
111
+ CartesianScales.prototype.findDomainAndRangeAxes = function () {
112
+ // find main axes between (left & right) && (bottom & top)
113
+ var mainVerticalAxisPosition = this.findMainVerticalAxisPosition();
114
+ var mainHorizontalAxisPosition = this.findMainHorizontalAxisPosition();
115
+ // Now we have horizontal & vertical main axes to choose domain & range axes from
116
+ var domainAndRangeAxesPositions = this.findDomainAndRangeAxesPositions(mainVerticalAxisPosition, mainHorizontalAxisPosition);
117
+ this.domainAxisPosition = domainAndRangeAxesPositions.domainAxisPosition;
118
+ this.rangeAxisPosition = domainAndRangeAxesPositions.rangeAxisPosition;
119
+ };
120
+ CartesianScales.prototype.determineOrientation = function () {
107
121
  if (this.rangeAxisPosition === AxisPositions.LEFT && this.domainAxisPosition === AxisPositions.BOTTOM) {
108
122
  this.orientation = CartesianOrientations.VERTICAL;
109
123
  }
@@ -145,15 +159,17 @@ var CartesianScales = /** @class */ (function (_super) {
145
159
  return this.scales[this.getMainYAxisPosition()];
146
160
  };
147
161
  CartesianScales.prototype.getValueFromScale = function (axisPosition, datum, index) {
148
- var value = isNaN(datum) ? datum.value : datum;
162
+ var options = this.model.getOptions();
163
+ var axisOptions = Tools.getProperty(options, "axes", axisPosition);
149
164
  var scaleType = this.scaleTypes[axisPosition];
150
165
  var scale = this.scales[axisPosition];
166
+ var mapsTo = axisOptions.mapsTo;
167
+ var value = datum[mapsTo] !== undefined ? datum[mapsTo] : datum;
151
168
  if (scaleType === ScaleTypes.LABELS) {
152
- var correspondingLabel = this.model.getDisplayData().labels[index];
153
- return scale(correspondingLabel) + scale.step() / 2;
169
+ return scale(value) + scale.step() / 2;
154
170
  }
155
- else if (scaleType === ScaleTypes.TIME) {
156
- return scale(new Date(datum.date || datum.label));
171
+ if (scaleType === ScaleTypes.TIME) {
172
+ return scale(new Date(value));
157
173
  }
158
174
  return scale(value);
159
175
  };
@@ -163,97 +179,63 @@ var CartesianScales = /** @class */ (function (_super) {
163
179
  CartesianScales.prototype.getRangeValue = function (d, i) {
164
180
  return this.getValueFromScale(this.rangeAxisPosition, d, i);
165
181
  };
166
- /** Uses the primary Y Axis to get data items associated with that value. */
182
+ CartesianScales.prototype.getDomainIdentifier = function () {
183
+ var options = this.model.getOptions();
184
+ var axisOptions = Tools.getProperty(options, "axes", this.domainAxisPosition);
185
+ return axisOptions.mapsTo;
186
+ };
187
+ CartesianScales.prototype.getRangeIdentifier = function () {
188
+ var options = this.model.getOptions();
189
+ var axisOptions = Tools.getProperty(options, "axes", this.rangeAxisPosition);
190
+ return axisOptions.mapsTo;
191
+ };
192
+ /** Uses the primary Y Axis to get data items associated with that value. */
167
193
  CartesianScales.prototype.getDataFromDomain = function (domainValue) {
168
194
  var displayData = this.model.getDisplayData();
169
- var activePoints = [];
195
+ var domainIdentifier = this.getDomainIdentifier();
170
196
  var scaleType = this.scaleTypes[this.domainAxisPosition];
171
- switch (scaleType) {
172
- case ScaleTypes.LABELS:
173
- // based on labels we use the index to get the associated data
174
- var index_1 = displayData.labels.indexOf(domainValue);
175
- displayData.datasets.forEach(function (dataset) {
176
- activePoints.push({
177
- datasetLabel: dataset.label,
178
- value: dataset.data[index_1],
179
- });
180
- });
181
- break;
182
- case ScaleTypes.TIME:
183
- // time series we filter using the date
184
- var domainKey_1 = Object.keys(displayData.datasets[0].data[0]).filter(function (key) { return key !== "value"; })[0];
185
- displayData.datasets.forEach(function (dataset) {
186
- var sharedLabel = dataset.label;
187
- // filter the items in each dataset for the points associated with the Domain
188
- var dataItems = dataset.data.filter(function (item) {
189
- var date1 = new Date(item[domainKey_1]);
190
- var date2 = new Date(domainValue);
191
- return date1.getTime() === date2.getTime();
192
- });
193
- // assign the shared label on the data items and add them to the array
194
- dataItems.forEach(function (item) {
195
- activePoints.push(Object.assign({
196
- datasetLabel: sharedLabel,
197
- value: item.value,
198
- }, item));
199
- });
200
- });
201
- break;
197
+ if (scaleType === ScaleTypes.TIME) {
198
+ return displayData.filter(function (datum) {
199
+ return datum[domainIdentifier].getTime() === domainValue.getTime();
200
+ });
202
201
  }
203
- return activePoints;
202
+ return displayData.filter(function (datum) {
203
+ return datum[domainIdentifier] === domainValue;
204
+ });
204
205
  };
205
206
  CartesianScales.prototype.getScaleDomain = function (axisPosition) {
206
207
  var options = this.model.getOptions();
207
208
  var axisOptions = Tools.getProperty(options, "axes", axisPosition);
208
209
  var includeZero = axisOptions.includeZero;
209
- var _a = this.model.getDisplayData(), datasets = _a.datasets, labels = _a.labels;
210
+ var scaleType = Tools.getProperty(axisOptions, "scaleType") || ScaleTypes.LINEAR;
211
+ var displayData = this.model.getDisplayData();
212
+ var mapsTo = axisOptions.mapsTo;
213
+ // If domain is specified return that domain
214
+ if (axisOptions.domain) {
215
+ return axisOptions.domain;
216
+ }
210
217
  // If scale is a LABELS scale, return some labels as the domain
211
218
  if (axisOptions && axisOptions.scaleType === ScaleTypes.LABELS) {
212
- if (labels) {
213
- return labels;
214
- }
215
- else {
216
- return this.model.getDisplayData().datasets[0].data.map(function (d, i) { return i + 1; });
217
- }
219
+ // Get unique values
220
+ return map(displayData, function (d) { return d[mapsTo]; }).keys();
218
221
  }
219
222
  // Get the extent of the domain
220
223
  var domain;
221
- // If domain is specified return that domain
222
- if (axisOptions.domain) {
223
- return axisOptions.domain;
224
- }
224
+ var allDataValues;
225
225
  // If the scale is stacked
226
226
  if (axisOptions.stacked) {
227
- domain = extent(labels.reduce(function (m, label, i) {
228
- var correspondingValues = datasets.map(function (dataset) {
229
- return !isNaN(dataset.data[i]) ? dataset.data[i] : dataset.data[i].value;
230
- });
231
- var totalValue = correspondingValues.reduce(function (a, b) { return a + b; }, 0);
232
- // Save both the total value and the minimum
233
- return m.concat(totalValue, min(correspondingValues));
234
- }, [])
235
- // Currently stack layouts in the library
236
- // Only support positive values
237
- .concat(0));
227
+ var dataValuesGroupedByKeys = this.model.getDataValuesGroupedByKeys();
228
+ allDataValues = dataValuesGroupedByKeys.map(function (dataValues) {
229
+ return sum(values(dataValues));
230
+ });
238
231
  }
239
232
  else {
240
- // Get all the chart's data values in a flat array
241
- var allDataValues = datasets.reduce(function (dataValues, dataset) {
242
- dataset.data.forEach(function (datum) {
243
- if (axisOptions.scaleType === ScaleTypes.TIME) {
244
- dataValues = dataValues.concat(datum.date);
245
- }
246
- else {
247
- dataValues = dataValues.concat(isNaN(datum) ? datum.value : datum);
248
- }
249
- });
250
- return dataValues;
251
- }, []);
252
- if (axisOptions.scaleType !== ScaleTypes.TIME && includeZero) {
253
- allDataValues = allDataValues.concat(0);
254
- }
255
- domain = extent(allDataValues);
233
+ allDataValues = displayData.map(function (datum) { return datum[mapsTo]; });
256
234
  }
235
+ if (axisOptions.scaleType !== ScaleTypes.TIME && includeZero) {
236
+ allDataValues.push(0);
237
+ }
238
+ domain = extent(allDataValues);
257
239
  if (axisOptions.scaleType === ScaleTypes.TIME) {
258
240
  var spaceToAddToEdges = Tools.getProperty(options, "timeScale", "addSpaceOnEdges");
259
241
  if (spaceToAddToEdges) {
@@ -285,12 +267,12 @@ var CartesianScales = /** @class */ (function (_super) {
285
267
  }
286
268
  return [startDate, endDate];
287
269
  }
288
- return [
289
- new Date(domain[0]),
290
- new Date(domain[1])
291
- ];
292
270
  }
293
- return addPaddingInDomain(domain, Configuration.axis.paddingRatio);
271
+ domain = addPaddingInDomain(domain, Configuration.axis.paddingRatio);
272
+ if (scaleType === ScaleTypes.TIME) {
273
+ domain = domain.map(function (d) { return new Date(d); });
274
+ }
275
+ return domain;
294
276
  };
295
277
  CartesianScales.prototype.createScale = function (axisPosition) {
296
278
  var options = this.model.getOptions();