@carbon/charts 0.51.2 → 0.52.1

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 (50) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/build/src/components/essentials/modal.d.ts +0 -1
  3. package/build/src/services/essentials/files.d.ts +1 -1
  4. package/bundle.js +1 -1
  5. package/chart.js +1 -0
  6. package/chart.js.map +1 -1
  7. package/charts/combo.js.map +1 -1
  8. package/components/axes/axis.js +3 -2
  9. package/components/axes/axis.js.map +1 -1
  10. package/components/component.js +6 -2
  11. package/components/component.js.map +1 -1
  12. package/components/essentials/modal.d.ts +0 -1
  13. package/components/essentials/modal.js +0 -5
  14. package/components/essentials/modal.js.map +1 -1
  15. package/components/graphs/bar-stacked.js +1 -1
  16. package/components/graphs/bar-stacked.js.map +1 -1
  17. package/demo/create-codesandbox.js +1 -1
  18. package/demo/create-codesandbox.js.map +1 -1
  19. package/demo/data/bundle.js +1 -1
  20. package/demo/data/hightlight.js +1 -1
  21. package/demo/data/hightlight.js.map +1 -1
  22. package/demo/styles.css +4 -0
  23. package/demo/styles.css.map +1 -1
  24. package/demo/styles.min.css +1 -1
  25. package/demo/styles.min.css.map +1 -1
  26. package/demo/tsconfig.tsbuildinfo +2 -2
  27. package/package.json +1 -1
  28. package/services/essentials/files.d.ts +1 -1
  29. package/services/essentials/files.js +4 -4
  30. package/services/essentials/files.js.map +1 -1
  31. package/services/service.js +6 -2
  32. package/services/service.js.map +1 -1
  33. package/styles/components/_highlights.scss +1 -0
  34. package/styles-g10.css +1 -0
  35. package/styles-g10.css.map +1 -1
  36. package/styles-g10.min.css +1 -1
  37. package/styles-g10.min.css.map +1 -1
  38. package/styles-g100.css +1 -0
  39. package/styles-g100.css.map +1 -1
  40. package/styles-g100.min.css +1 -1
  41. package/styles-g100.min.css.map +1 -1
  42. package/styles-g90.css +1 -0
  43. package/styles-g90.css.map +1 -1
  44. package/styles-g90.min.css +1 -1
  45. package/styles-g90.min.css.map +1 -1
  46. package/styles.css +1 -0
  47. package/styles.css.map +1 -1
  48. package/styles.min.css +1 -1
  49. package/styles.min.css.map +1 -1
  50. package/tsconfig.tsbuildinfo +10 -10
package/chart.js CHANGED
@@ -24,6 +24,7 @@ var Chart = /** @class */ (function () {
24
24
  canvasZoom: CanvasZoom,
25
25
  };
26
26
  this.model = new ChartModel(this.services);
27
+ // do nothing.
27
28
  }
28
29
  // Contains the code that uses properties that are overridable by the super-class
29
30
  Chart.prototype.init = function (holder, chartConfigs) {
package/chart.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"chart.js","sourceRoot":"","sources":["chart.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport {\n\tChartConfig,\n\tBaseChartOptions,\n\tLayoutGrowth,\n\tLayoutAlignItems,\n\tLayoutDirection,\n\tLegendOrientations,\n\tEvents as ChartEvents,\n\tRenderTypes,\n} from './interfaces';\n\n// Misc\nimport { ChartModel } from './model/model';\nimport {\n\tComponent,\n\tModal,\n\tTitle,\n\tLegend,\n\tLayoutComponent,\n\tToolbar,\n\tTooltip,\n\tSpacer,\n\tCanvasChartClip,\n} from './components';\nimport { Tools } from './tools';\n\n// Services\nimport {\n\tCanvasZoom,\n\tDOMUtils,\n\tEvents,\n\tFiles,\n\tGradientUtils,\n\tTransitions,\n} from './services/index';\n\nexport class Chart {\n\tcomponents: Component[];\n\tservices: any = {\n\t\tdomUtils: DOMUtils,\n\t\tfiles: Files,\n\t\tevents: Events,\n\t\tgradientUtils: GradientUtils,\n\t\ttransitions: Transitions,\n\t\tcanvasZoom: CanvasZoom,\n\t};\n\tmodel: ChartModel = new ChartModel(this.services);\n\n\tconstructor(holder: Element, chartConfigs: ChartConfig<BaseChartOptions>) {}\n\n\t// Contains the code that uses properties that are overridable by the super-class\n\tinit(holder: Element, chartConfigs: ChartConfig<BaseChartOptions>) {\n\t\t// Store the holder in the model\n\t\tthis.model.set({ holder }, { skipUpdate: true });\n\n\t\t// Initialize all services\n\t\tObject.keys(this.services).forEach((serviceName) => {\n\t\t\tconst serviceObj = this.services[serviceName];\n\t\t\tthis.services[serviceName] = new serviceObj(\n\t\t\t\tthis.model,\n\t\t\t\tthis.services\n\t\t\t);\n\t\t});\n\n\t\t// Call update() when model has been updated\n\t\tthis.services.events.addEventListener(ChartEvents.Model.UPDATE, (e) => {\n\t\t\tconst animate = !!Tools.getProperty(e, 'detail', 'animate');\n\t\t\tthis.update(animate);\n\t\t});\n\n\t\t// Set model data & options\n\t\tthis.model.setData(chartConfigs.data);\n\n\t\t// Set chart resize event listener\n\t\tthis.services.events.addEventListener(ChartEvents.Chart.RESIZE, () => {\n\t\t\tthis.update(false);\n\t\t});\n\n\t\tthis.components = this.getComponents();\n\n\t\tthis.update();\n\t}\n\n\tgetComponents(): any[] {\n\t\tconsole.error('getComponents() method is not implemented');\n\n\t\treturn null;\n\t}\n\n\tupdate(animate = true) {\n\t\tif (!this.components) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Update all services\n\t\tObject.keys(this.services).forEach((serviceName) => {\n\t\t\tconst serviceObj = this.services[serviceName];\n\t\t\tserviceObj.update();\n\t\t});\n\n\t\t// Render all components\n\t\tthis.components.forEach((component) => component.render(animate));\n\n\t\t// Asynchronously dispatch a \"render-finished\" event\n\t\t// This is needed because of d3-transitions\n\t\t// Since at the start of the transition\n\t\t// Elements do not hold their final size or position\n\t\tconst pendingTransitions = this.services.transitions.getPendingTransitions();\n\t\tconst promises = Object.keys(pendingTransitions).map((transitionID) => {\n\t\t\tconst transition = pendingTransitions[transitionID];\n\t\t\treturn transition.end().catch((e) => e); // Skip rejects since we don't care about those;\n\t\t});\n\n\t\tPromise.all(promises).then(() =>\n\t\t\tthis.services.events.dispatchEvent(\n\t\t\t\tChartEvents.Chart.RENDER_FINISHED\n\t\t\t)\n\t\t);\n\t}\n\n\tdestroy() {\n\t\t// Call the destroy() method on all components\n\t\tthis.components.forEach((component) => component.destroy());\n\n\t\t// Remove the chart holder\n\t\tthis.services.domUtils.getHolder().remove();\n\n\t\tthis.model.set({ destroyed: true }, { skipUpdate: true });\n\t}\n\n\tprotected getChartComponents(\n\t\tgraphFrameComponents: any[],\n\t\tconfigs?: object\n\t) {\n\t\tconst options = this.model.getOptions();\n\n\t\tconst toolbarEnabled = Tools.getProperty(options, 'toolbar', 'enabled');\n\n\t\tconst legendComponent = {\n\t\t\tid: 'legend',\n\t\t\tcomponents: [new Legend(this.model, this.services)],\n\t\t\tgrowth: LayoutGrowth.PREFERRED,\n\t\t};\n\n\t\t// if canvas zoom is enabled\n\t\tconst isZoomEnabled = Tools.getProperty(\n\t\t\toptions,\n\t\t\t'canvasZoom',\n\t\t\t'enabled'\n\t\t);\n\n\t\tif (isZoomEnabled && isZoomEnabled === true) {\n\t\t\tgraphFrameComponents.push(\n\t\t\t\tnew CanvasChartClip(this.model, this.services)\n\t\t\t);\n\t\t}\n\n\t\tconst titleAvailable = !!this.model.getOptions().title;\n\t\tconst titleComponent = {\n\t\t\tid: 'title',\n\t\t\tcomponents: [new Title(this.model, this.services)],\n\t\t\tgrowth: LayoutGrowth.STRETCH,\n\t\t};\n\n\t\tconst toolbarComponent = {\n\t\t\tid: 'toolbar',\n\t\t\tcomponents: [new Toolbar(this.model, this.services)],\n\t\t\tgrowth: LayoutGrowth.PREFERRED,\n\t\t};\n\n\t\tconst headerComponent = {\n\t\t\tid: 'header',\n\t\t\tcomponents: [\n\t\t\t\tnew LayoutComponent(\n\t\t\t\t\tthis.model,\n\t\t\t\t\tthis.services,\n\t\t\t\t\t[\n\t\t\t\t\t\t// always add title to keep layout correct\n\t\t\t\t\t\ttitleComponent,\n\t\t\t\t\t\t...(toolbarEnabled ? [toolbarComponent] : []),\n\t\t\t\t\t],\n\t\t\t\t\t{\n\t\t\t\t\t\tdirection: LayoutDirection.ROW,\n\t\t\t\t\t\talignItems: LayoutAlignItems.CENTER,\n\t\t\t\t\t}\n\t\t\t\t),\n\t\t\t],\n\t\t\tgrowth: LayoutGrowth.PREFERRED,\n\t\t};\n\n\t\tconst graphFrameComponent = {\n\t\t\tid: 'graph-frame',\n\t\t\tcomponents: graphFrameComponents,\n\t\t\tgrowth: LayoutGrowth.STRETCH,\n\t\t\trenderType:\n\t\t\t\tTools.getProperty(configs, 'graphFrameRenderType') ||\n\t\t\t\tRenderTypes.SVG,\n\t\t};\n\n\t\tconst isLegendEnabled =\n\t\t\tTools.getProperty(configs, 'excludeLegend') !== true &&\n\t\t\toptions.legend.enabled !== false;\n\t\t// TODORF - REUSE BETWEEN AXISCHART & CHART\n\t\t// Decide the position of the legend in reference to the chart\n\t\tlet fullFrameComponentDirection = LayoutDirection.COLUMN;\n\t\tif (isLegendEnabled) {\n\t\t\tconst legendPosition = Tools.getProperty(\n\t\t\t\toptions,\n\t\t\t\t'legend',\n\t\t\t\t'position'\n\t\t\t);\n\t\t\tif (legendPosition === 'left') {\n\t\t\t\tfullFrameComponentDirection = LayoutDirection.ROW;\n\n\t\t\t\tif (!options.legend.orientation) {\n\t\t\t\t\toptions.legend.orientation = LegendOrientations.VERTICAL;\n\t\t\t\t}\n\t\t\t} else if (legendPosition === 'right') {\n\t\t\t\tfullFrameComponentDirection = LayoutDirection.ROW_REVERSE;\n\n\t\t\t\tif (!options.legend.orientation) {\n\t\t\t\t\toptions.legend.orientation = LegendOrientations.VERTICAL;\n\t\t\t\t}\n\t\t\t} else if (legendPosition === 'bottom') {\n\t\t\t\tfullFrameComponentDirection = LayoutDirection.COLUMN_REVERSE;\n\t\t\t}\n\t\t}\n\n\t\tconst legendSpacerComponent = {\n\t\t\tid: 'spacer',\n\t\t\tcomponents: [new Spacer(this.model, this.services)],\n\t\t\tgrowth: LayoutGrowth.PREFERRED,\n\t\t};\n\n\t\tconst fullFrameComponent = {\n\t\t\tid: 'full-frame',\n\t\t\tcomponents: [\n\t\t\t\tnew LayoutComponent(\n\t\t\t\t\tthis.model,\n\t\t\t\t\tthis.services,\n\t\t\t\t\t[\n\t\t\t\t\t\t...(isLegendEnabled ? [legendComponent] : []),\n\t\t\t\t\t\t...(isLegendEnabled ? [legendSpacerComponent] : []),\n\t\t\t\t\t\tgraphFrameComponent,\n\t\t\t\t\t],\n\t\t\t\t\t{\n\t\t\t\t\t\tdirection: fullFrameComponentDirection,\n\t\t\t\t\t}\n\t\t\t\t),\n\t\t\t],\n\t\t\tgrowth: LayoutGrowth.STRETCH,\n\t\t};\n\n\t\t// Add chart title if it exists\n\t\tconst topLevelLayoutComponents = [];\n\n\t\tif (titleAvailable || toolbarEnabled) {\n\t\t\ttopLevelLayoutComponents.push(headerComponent);\n\n\t\t\tconst titleSpacerComponent = {\n\t\t\t\tid: 'spacer',\n\t\t\t\tcomponents: [\n\t\t\t\t\tnew Spacer(\n\t\t\t\t\t\tthis.model,\n\t\t\t\t\t\tthis.services,\n\t\t\t\t\t\ttoolbarEnabled ? { size: 15 } : undefined\n\t\t\t\t\t),\n\t\t\t\t],\n\t\t\t\tgrowth: LayoutGrowth.PREFERRED,\n\t\t\t};\n\n\t\t\ttopLevelLayoutComponents.push(titleSpacerComponent);\n\t\t}\n\t\ttopLevelLayoutComponents.push(fullFrameComponent);\n\n\t\treturn [\n\t\t\tnew Tooltip(this.model, this.services),\n\t\t\tnew Modal(this.model, this.services),\n\t\t\tnew LayoutComponent(\n\t\t\t\tthis.model,\n\t\t\t\tthis.services,\n\t\t\t\ttopLevelLayoutComponents,\n\t\t\t\t{\n\t\t\t\t\tdirection: LayoutDirection.COLUMN,\n\t\t\t\t}\n\t\t\t),\n\t\t];\n\t}\n}\n"]}
1
+ {"version":3,"file":"chart.js","sourceRoot":"","sources":["chart.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport {\n\tChartConfig,\n\tBaseChartOptions,\n\tLayoutGrowth,\n\tLayoutAlignItems,\n\tLayoutDirection,\n\tLegendOrientations,\n\tEvents as ChartEvents,\n\tRenderTypes,\n} from './interfaces';\n\n// Misc\nimport { ChartModel } from './model/model';\nimport {\n\tComponent,\n\tModal,\n\tTitle,\n\tLegend,\n\tLayoutComponent,\n\tToolbar,\n\tTooltip,\n\tSpacer,\n\tCanvasChartClip,\n} from './components';\nimport { Tools } from './tools';\n\n// Services\nimport {\n\tCanvasZoom,\n\tDOMUtils,\n\tEvents,\n\tFiles,\n\tGradientUtils,\n\tTransitions,\n} from './services/index';\n\nexport class Chart {\n\tcomponents: Component[];\n\tservices: any = {\n\t\tdomUtils: DOMUtils,\n\t\tfiles: Files,\n\t\tevents: Events,\n\t\tgradientUtils: GradientUtils,\n\t\ttransitions: Transitions,\n\t\tcanvasZoom: CanvasZoom,\n\t};\n\tmodel: ChartModel = new ChartModel(this.services);\n\n\tconstructor(holder: Element, chartConfigs: ChartConfig<BaseChartOptions>) {\n\t\t// do nothing.\n\t}\n\n\t// Contains the code that uses properties that are overridable by the super-class\n\tinit(holder: Element, chartConfigs: ChartConfig<BaseChartOptions>) {\n\t\t// Store the holder in the model\n\t\tthis.model.set({ holder }, { skipUpdate: true });\n\n\t\t// Initialize all services\n\t\tObject.keys(this.services).forEach((serviceName) => {\n\t\t\tconst serviceObj = this.services[serviceName];\n\t\t\tthis.services[serviceName] = new serviceObj(\n\t\t\t\tthis.model,\n\t\t\t\tthis.services\n\t\t\t);\n\t\t});\n\n\t\t// Call update() when model has been updated\n\t\tthis.services.events.addEventListener(ChartEvents.Model.UPDATE, (e) => {\n\t\t\tconst animate = !!Tools.getProperty(e, 'detail', 'animate');\n\t\t\tthis.update(animate);\n\t\t});\n\n\t\t// Set model data & options\n\t\tthis.model.setData(chartConfigs.data);\n\n\t\t// Set chart resize event listener\n\t\tthis.services.events.addEventListener(ChartEvents.Chart.RESIZE, () => {\n\t\t\tthis.update(false);\n\t\t});\n\n\t\tthis.components = this.getComponents();\n\n\t\tthis.update();\n\t}\n\n\tgetComponents(): any[] {\n\t\tconsole.error('getComponents() method is not implemented');\n\n\t\treturn null;\n\t}\n\n\tupdate(animate = true) {\n\t\tif (!this.components) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Update all services\n\t\tObject.keys(this.services).forEach((serviceName) => {\n\t\t\tconst serviceObj = this.services[serviceName];\n\t\t\tserviceObj.update();\n\t\t});\n\n\t\t// Render all components\n\t\tthis.components.forEach((component) => component.render(animate));\n\n\t\t// Asynchronously dispatch a \"render-finished\" event\n\t\t// This is needed because of d3-transitions\n\t\t// Since at the start of the transition\n\t\t// Elements do not hold their final size or position\n\t\tconst pendingTransitions = this.services.transitions.getPendingTransitions();\n\t\tconst promises = Object.keys(pendingTransitions).map((transitionID) => {\n\t\t\tconst transition = pendingTransitions[transitionID];\n\t\t\treturn transition.end().catch((e) => e); // Skip rejects since we don't care about those;\n\t\t});\n\n\t\tPromise.all(promises).then(() =>\n\t\t\tthis.services.events.dispatchEvent(\n\t\t\t\tChartEvents.Chart.RENDER_FINISHED\n\t\t\t)\n\t\t);\n\t}\n\n\tdestroy() {\n\t\t// Call the destroy() method on all components\n\t\tthis.components.forEach((component) => component.destroy());\n\n\t\t// Remove the chart holder\n\t\tthis.services.domUtils.getHolder().remove();\n\n\t\tthis.model.set({ destroyed: true }, { skipUpdate: true });\n\t}\n\n\tprotected getChartComponents(\n\t\tgraphFrameComponents: any[],\n\t\tconfigs?: object\n\t) {\n\t\tconst options = this.model.getOptions();\n\n\t\tconst toolbarEnabled = Tools.getProperty(options, 'toolbar', 'enabled');\n\n\t\tconst legendComponent = {\n\t\t\tid: 'legend',\n\t\t\tcomponents: [new Legend(this.model, this.services)],\n\t\t\tgrowth: LayoutGrowth.PREFERRED,\n\t\t};\n\n\t\t// if canvas zoom is enabled\n\t\tconst isZoomEnabled = Tools.getProperty(\n\t\t\toptions,\n\t\t\t'canvasZoom',\n\t\t\t'enabled'\n\t\t);\n\n\t\tif (isZoomEnabled && isZoomEnabled === true) {\n\t\t\tgraphFrameComponents.push(\n\t\t\t\tnew CanvasChartClip(this.model, this.services)\n\t\t\t);\n\t\t}\n\n\t\tconst titleAvailable = !!this.model.getOptions().title;\n\t\tconst titleComponent = {\n\t\t\tid: 'title',\n\t\t\tcomponents: [new Title(this.model, this.services)],\n\t\t\tgrowth: LayoutGrowth.STRETCH,\n\t\t};\n\n\t\tconst toolbarComponent = {\n\t\t\tid: 'toolbar',\n\t\t\tcomponents: [new Toolbar(this.model, this.services)],\n\t\t\tgrowth: LayoutGrowth.PREFERRED,\n\t\t};\n\n\t\tconst headerComponent = {\n\t\t\tid: 'header',\n\t\t\tcomponents: [\n\t\t\t\tnew LayoutComponent(\n\t\t\t\t\tthis.model,\n\t\t\t\t\tthis.services,\n\t\t\t\t\t[\n\t\t\t\t\t\t// always add title to keep layout correct\n\t\t\t\t\t\ttitleComponent,\n\t\t\t\t\t\t...(toolbarEnabled ? [toolbarComponent] : []),\n\t\t\t\t\t],\n\t\t\t\t\t{\n\t\t\t\t\t\tdirection: LayoutDirection.ROW,\n\t\t\t\t\t\talignItems: LayoutAlignItems.CENTER,\n\t\t\t\t\t}\n\t\t\t\t),\n\t\t\t],\n\t\t\tgrowth: LayoutGrowth.PREFERRED,\n\t\t};\n\n\t\tconst graphFrameComponent = {\n\t\t\tid: 'graph-frame',\n\t\t\tcomponents: graphFrameComponents,\n\t\t\tgrowth: LayoutGrowth.STRETCH,\n\t\t\trenderType:\n\t\t\t\tTools.getProperty(configs, 'graphFrameRenderType') ||\n\t\t\t\tRenderTypes.SVG,\n\t\t};\n\n\t\tconst isLegendEnabled =\n\t\t\tTools.getProperty(configs, 'excludeLegend') !== true &&\n\t\t\toptions.legend.enabled !== false;\n\t\t// TODORF - REUSE BETWEEN AXISCHART & CHART\n\t\t// Decide the position of the legend in reference to the chart\n\t\tlet fullFrameComponentDirection = LayoutDirection.COLUMN;\n\t\tif (isLegendEnabled) {\n\t\t\tconst legendPosition = Tools.getProperty(\n\t\t\t\toptions,\n\t\t\t\t'legend',\n\t\t\t\t'position'\n\t\t\t);\n\t\t\tif (legendPosition === 'left') {\n\t\t\t\tfullFrameComponentDirection = LayoutDirection.ROW;\n\n\t\t\t\tif (!options.legend.orientation) {\n\t\t\t\t\toptions.legend.orientation = LegendOrientations.VERTICAL;\n\t\t\t\t}\n\t\t\t} else if (legendPosition === 'right') {\n\t\t\t\tfullFrameComponentDirection = LayoutDirection.ROW_REVERSE;\n\n\t\t\t\tif (!options.legend.orientation) {\n\t\t\t\t\toptions.legend.orientation = LegendOrientations.VERTICAL;\n\t\t\t\t}\n\t\t\t} else if (legendPosition === 'bottom') {\n\t\t\t\tfullFrameComponentDirection = LayoutDirection.COLUMN_REVERSE;\n\t\t\t}\n\t\t}\n\n\t\tconst legendSpacerComponent = {\n\t\t\tid: 'spacer',\n\t\t\tcomponents: [new Spacer(this.model, this.services)],\n\t\t\tgrowth: LayoutGrowth.PREFERRED,\n\t\t};\n\n\t\tconst fullFrameComponent = {\n\t\t\tid: 'full-frame',\n\t\t\tcomponents: [\n\t\t\t\tnew LayoutComponent(\n\t\t\t\t\tthis.model,\n\t\t\t\t\tthis.services,\n\t\t\t\t\t[\n\t\t\t\t\t\t...(isLegendEnabled ? [legendComponent] : []),\n\t\t\t\t\t\t...(isLegendEnabled ? [legendSpacerComponent] : []),\n\t\t\t\t\t\tgraphFrameComponent,\n\t\t\t\t\t],\n\t\t\t\t\t{\n\t\t\t\t\t\tdirection: fullFrameComponentDirection,\n\t\t\t\t\t}\n\t\t\t\t),\n\t\t\t],\n\t\t\tgrowth: LayoutGrowth.STRETCH,\n\t\t};\n\n\t\t// Add chart title if it exists\n\t\tconst topLevelLayoutComponents = [];\n\n\t\tif (titleAvailable || toolbarEnabled) {\n\t\t\ttopLevelLayoutComponents.push(headerComponent);\n\n\t\t\tconst titleSpacerComponent = {\n\t\t\t\tid: 'spacer',\n\t\t\t\tcomponents: [\n\t\t\t\t\tnew Spacer(\n\t\t\t\t\t\tthis.model,\n\t\t\t\t\t\tthis.services,\n\t\t\t\t\t\ttoolbarEnabled ? { size: 15 } : undefined\n\t\t\t\t\t),\n\t\t\t\t],\n\t\t\t\tgrowth: LayoutGrowth.PREFERRED,\n\t\t\t};\n\n\t\t\ttopLevelLayoutComponents.push(titleSpacerComponent);\n\t\t}\n\t\ttopLevelLayoutComponents.push(fullFrameComponent);\n\n\t\treturn [\n\t\t\tnew Tooltip(this.model, this.services),\n\t\t\tnew Modal(this.model, this.services),\n\t\t\tnew LayoutComponent(\n\t\t\t\tthis.model,\n\t\t\t\tthis.services,\n\t\t\t\ttopLevelLayoutComponents,\n\t\t\t\t{\n\t\t\t\t\tdirection: LayoutDirection.COLUMN,\n\t\t\t\t}\n\t\t\t),\n\t\t];\n\t}\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"combo.js","sourceRoot":"","sources":["combo.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { AxisChart } from '../axis-chart';\nimport * as Configuration from '../configuration';\nimport {\n\tChartConfig,\n\tComboChartOptions,\n\tChartTypes,\n\tSkeletons,\n} from '../interfaces/index';\nimport { Tools } from '../tools';\n\n// Components\nimport {\n\tGrid,\n\tGroupedBar,\n\tSimpleBar,\n\tStackedBar,\n\tLine,\n\tTwoDimensionalAxes,\n\tZeroLine,\n\tScatter,\n\tStackedScatter,\n\tArea,\n\tStackedArea,\n\tRuler,\n\tStackedRuler,\n\t// the imports below are needed because of typescript bug (error TS4029)\n\tLegend,\n\tLayoutComponent,\n\tComponent,\n\tSkeleton,\n} from '../components/index';\n\nconst graphComponentsMap = {\n\t[ChartTypes.LINE]: [Line, Scatter],\n\t[ChartTypes.SCATTER]: [Scatter],\n\t[ChartTypes.AREA]: [Area, Line, Scatter],\n\t[ChartTypes.STACKED_AREA]: [\n\t\tStackedArea,\n\t\tLine,\n\t\tStackedScatter,\n\t\tStackedRuler,\n\t],\n\t[ChartTypes.SIMPLE_BAR]: [SimpleBar],\n\t[ChartTypes.GROUPED_BAR]: [GroupedBar, ZeroLine],\n\t[ChartTypes.STACKED_BAR]: [StackedBar, StackedRuler],\n};\n\nexport class ComboChart extends AxisChart {\n\tconstructor(holder: Element, chartConfigs: ChartConfig<ComboChartOptions>) {\n\t\tsuper(holder, chartConfigs);\n\n\t\t// Merge the default options for this chart\n\t\t// With the user provided options\n\t\tconst chartOptions = Tools.mergeDefaultChartOptions(\n\t\t\tConfiguration.options.comboChart,\n\t\t\tchartConfigs.options\n\t\t);\n\n\t\t// Warn user if no comboChartTypes defined\n\t\t// Use skeleton chart instead\n\t\tif (!chartConfigs.options.comboChartTypes) {\n\t\t\tconsole.error('No comboChartTypes defined for the Combo Chart!');\n\t\t\t// add a default chart to get an empty chart\n\t\t\tchartOptions.comboChartTypes = [\n\t\t\t\t{ type: ChartTypes.LINE, correspondingDatasets: [] },\n\t\t\t];\n\t\t}\n\n\t\t// set the global options\n\t\tthis.model.setOptions(chartOptions);\n\n\t\t// Initialize data, services, components etc.\n\t\tthis.init(holder, chartConfigs);\n\t}\n\n\tgetGraphComponents() {\n\t\tconst { comboChartTypes } = this.model.getOptions();\n\t\tlet counter = 0;\n\t\tconst graphComponents = comboChartTypes\n\t\t\t.map((graph) => {\n\t\t\t\tconst type = graph.type;\n\t\t\t\tlet options;\n\n\t\t\t\t// initializes the components using input strings with the base configs for each chart\n\t\t\t\tif (typeof graph.type === 'string') {\n\t\t\t\t\t// check if it is in the components map\n\t\t\t\t\t// if it isn't then it is not a valid carbon chart to use in combo\n\t\t\t\t\tif (!Object.keys(graphComponentsMap).includes(graph.type)) {\n\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t`Invalid chart type \"${graph.type}\" specified for combo chart. Please refer to the ComboChart tutorial for more guidance.`\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t\tlet stacked;\n\t\t\t\t\toptions = Tools.merge(\n\t\t\t\t\t\t{},\n\t\t\t\t\t\tConfiguration.options[\n\t\t\t\t\t\t\t`${Tools.camelCase(graph.type)}Chart`\n\t\t\t\t\t\t],\n\t\t\t\t\t\tthis.model.getOptions(),\n\t\t\t\t\t\tgraph.options\n\t\t\t\t\t);\n\t\t\t\t\t// if we are creating a stacked area, the contained Line chart needs to know it is stacked\n\t\t\t\t\tif (graph.type === ChartTypes.STACKED_AREA) {\n\t\t\t\t\t\tstacked = true;\n\t\t\t\t\t}\n\t\t\t\t\treturn graphComponentsMap[graph.type].map(\n\t\t\t\t\t\t(Component, i) =>\n\t\t\t\t\t\t\tnew Component(this.model, this.services, {\n\t\t\t\t\t\t\t\tgroups: graph.correspondingDatasets,\n\t\t\t\t\t\t\t\tid: counter++,\n\t\t\t\t\t\t\t\toptions: options,\n\t\t\t\t\t\t\t\tstacked,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\t// user has imported a type or custom component to instantiate\n\t\t\t\t\toptions = Tools.merge(\n\t\t\t\t\t\t{},\n\t\t\t\t\t\tthis.model.getOptions(),\n\t\t\t\t\t\tgraph.options\n\t\t\t\t\t);\n\t\t\t\t\treturn new type(this.model, this.services, {\n\t\t\t\t\t\tgroups: graph.correspondingDatasets,\n\t\t\t\t\t\tid: counter++,\n\t\t\t\t\t\toptions: options,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t})\n\t\t\t.filter((item) => item !== null);\n\n\t\treturn Tools.flatten(graphComponents);\n\t}\n\n\tgetComponents() {\n\t\tconst { comboChartTypes } = this.model.getOptions();\n\t\t// don't add the regular ruler if stacked ruler is added\n\t\tconst stackedRulerEnabled = comboChartTypes.some(\n\t\t\t(chartObject) =>\n\t\t\t\tchartObject.type === ChartTypes.STACKED_BAR ||\n\t\t\t\tchartObject.type === ChartTypes.STACKED_AREA\n\t\t);\n\n\t\t// Specify what to render inside the graph-frame\n\t\tconst graphFrameComponents = [\n\t\t\tnew TwoDimensionalAxes(this.model, this.services),\n\t\t\tnew Grid(this.model, this.services),\n\t\t\tnew Skeleton(this.model, this.services, {\n\t\t\t\tskeleton: Skeletons.GRID,\n\t\t\t}),\n\t\t\t...(stackedRulerEnabled\n\t\t\t\t? []\n\t\t\t\t: [new Ruler(this.model, this.services)]),\n\t\t\t...this.getGraphComponents(),\n\t\t];\n\n\t\tconst components: any[] = this.getAxisChartComponents(\n\t\t\tgraphFrameComponents\n\t\t);\n\n\t\treturn components;\n\t}\n}\n"]}
1
+ {"version":3,"file":"combo.js","sourceRoot":"","sources":["combo.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { AxisChart } from '../axis-chart';\nimport * as Configuration from '../configuration';\nimport {\n\tChartConfig,\n\tComboChartOptions,\n\tChartTypes,\n\tSkeletons,\n} from '../interfaces/index';\nimport { Tools } from '../tools';\n\n// Components\nimport {\n\tGrid,\n\tGroupedBar,\n\tSimpleBar,\n\tStackedBar,\n\tLine,\n\tTwoDimensionalAxes,\n\tZeroLine,\n\tScatter,\n\tStackedScatter,\n\tArea,\n\tStackedArea,\n\tRuler,\n\tStackedRuler,\n\t// the imports below are needed because of typescript bug (error TS4029)\n\tLegend,\n\tLayoutComponent,\n\tSkeleton,\n} from '../components/index';\n\nconst graphComponentsMap = {\n\t[ChartTypes.LINE]: [Line, Scatter],\n\t[ChartTypes.SCATTER]: [Scatter],\n\t[ChartTypes.AREA]: [Area, Line, Scatter],\n\t[ChartTypes.STACKED_AREA]: [\n\t\tStackedArea,\n\t\tLine,\n\t\tStackedScatter,\n\t\tStackedRuler,\n\t],\n\t[ChartTypes.SIMPLE_BAR]: [SimpleBar],\n\t[ChartTypes.GROUPED_BAR]: [GroupedBar, ZeroLine],\n\t[ChartTypes.STACKED_BAR]: [StackedBar, StackedRuler],\n};\n\nexport class ComboChart extends AxisChart {\n\tconstructor(holder: Element, chartConfigs: ChartConfig<ComboChartOptions>) {\n\t\tsuper(holder, chartConfigs);\n\n\t\t// Merge the default options for this chart\n\t\t// With the user provided options\n\t\tconst chartOptions = Tools.mergeDefaultChartOptions(\n\t\t\tConfiguration.options.comboChart,\n\t\t\tchartConfigs.options\n\t\t);\n\n\t\t// Warn user if no comboChartTypes defined\n\t\t// Use skeleton chart instead\n\t\tif (!chartConfigs.options.comboChartTypes) {\n\t\t\tconsole.error('No comboChartTypes defined for the Combo Chart!');\n\t\t\t// add a default chart to get an empty chart\n\t\t\tchartOptions.comboChartTypes = [\n\t\t\t\t{ type: ChartTypes.LINE, correspondingDatasets: [] },\n\t\t\t];\n\t\t}\n\n\t\t// set the global options\n\t\tthis.model.setOptions(chartOptions);\n\n\t\t// Initialize data, services, components etc.\n\t\tthis.init(holder, chartConfigs);\n\t}\n\n\tgetGraphComponents() {\n\t\tconst { comboChartTypes } = this.model.getOptions();\n\t\tlet counter = 0;\n\t\tconst graphComponents = comboChartTypes\n\t\t\t.map((graph) => {\n\t\t\t\tconst type = graph.type;\n\t\t\t\tlet options;\n\n\t\t\t\t// initializes the components using input strings with the base configs for each chart\n\t\t\t\tif (typeof graph.type === 'string') {\n\t\t\t\t\t// check if it is in the components map\n\t\t\t\t\t// if it isn't then it is not a valid carbon chart to use in combo\n\t\t\t\t\tif (!Object.keys(graphComponentsMap).includes(graph.type)) {\n\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t`Invalid chart type \"${graph.type}\" specified for combo chart. Please refer to the ComboChart tutorial for more guidance.`\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t\tlet stacked;\n\t\t\t\t\toptions = Tools.merge(\n\t\t\t\t\t\t{},\n\t\t\t\t\t\tConfiguration.options[\n\t\t\t\t\t\t\t`${Tools.camelCase(graph.type)}Chart`\n\t\t\t\t\t\t],\n\t\t\t\t\t\tthis.model.getOptions(),\n\t\t\t\t\t\tgraph.options\n\t\t\t\t\t);\n\t\t\t\t\t// if we are creating a stacked area, the contained Line chart needs to know it is stacked\n\t\t\t\t\tif (graph.type === ChartTypes.STACKED_AREA) {\n\t\t\t\t\t\tstacked = true;\n\t\t\t\t\t}\n\t\t\t\t\treturn graphComponentsMap[graph.type].map(\n\t\t\t\t\t\t(Component, i) =>\n\t\t\t\t\t\t\tnew Component(this.model, this.services, {\n\t\t\t\t\t\t\t\tgroups: graph.correspondingDatasets,\n\t\t\t\t\t\t\t\tid: counter++,\n\t\t\t\t\t\t\t\toptions: options,\n\t\t\t\t\t\t\t\tstacked,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\t// user has imported a type or custom component to instantiate\n\t\t\t\t\toptions = Tools.merge(\n\t\t\t\t\t\t{},\n\t\t\t\t\t\tthis.model.getOptions(),\n\t\t\t\t\t\tgraph.options\n\t\t\t\t\t);\n\t\t\t\t\treturn new type(this.model, this.services, {\n\t\t\t\t\t\tgroups: graph.correspondingDatasets,\n\t\t\t\t\t\tid: counter++,\n\t\t\t\t\t\toptions: options,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t})\n\t\t\t.filter((item) => item !== null);\n\n\t\treturn Tools.flatten(graphComponents);\n\t}\n\n\tgetComponents() {\n\t\tconst { comboChartTypes } = this.model.getOptions();\n\t\t// don't add the regular ruler if stacked ruler is added\n\t\tconst stackedRulerEnabled = comboChartTypes.some(\n\t\t\t(chartObject) =>\n\t\t\t\tchartObject.type === ChartTypes.STACKED_BAR ||\n\t\t\t\tchartObject.type === ChartTypes.STACKED_AREA\n\t\t);\n\n\t\t// Specify what to render inside the graph-frame\n\t\tconst graphFrameComponents = [\n\t\t\tnew TwoDimensionalAxes(this.model, this.services),\n\t\t\tnew Grid(this.model, this.services),\n\t\t\tnew Skeleton(this.model, this.services, {\n\t\t\t\tskeleton: Skeletons.GRID,\n\t\t\t}),\n\t\t\t...(stackedRulerEnabled\n\t\t\t\t? []\n\t\t\t\t: [new Ruler(this.model, this.services)]),\n\t\t\t...this.getGraphComponents(),\n\t\t];\n\n\t\tconst components: any[] = this.getAxisChartComponents(\n\t\t\tgraphFrameComponents\n\t\t);\n\n\t\treturn components;\n\t}\n}\n"]}
@@ -396,8 +396,9 @@ var Axis = /** @class */ (function (_super) {
396
396
  var mockTextPiece = invisibleAxisRef
397
397
  .append('text')
398
398
  .text('A');
399
- var averageLetterWidth_1 = mockTextPiece.node().getBBox()
400
- .width;
399
+ var averageLetterWidth_1 = DOMUtils.getSVGElementSize(mockTextPiece.node(), {
400
+ useBBox: true,
401
+ }).width;
401
402
  var lastStartPosition_1;
402
403
  // Find out whether any text nodes roughly collide
403
404
  invisibleAxisRef.selectAll('g.tick').each(function () {
@@ -1 +1 @@
1
- {"version":3,"file":"axis.js","sourceRoot":"","sources":["axis.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from '../component';\nimport {\n\tAxisPositions,\n\tEvents,\n\tScaleTypes,\n\tRoles,\n\tTruncationTypes,\n} from '../../interfaces';\nimport { Tools } from '../../tools';\nimport { ChartModel } from '../../model/model';\nimport { DOMUtils } from '../../services';\nimport {\n\tAxisTitleOrientations,\n\tRenderTypes,\n\tTickRotations,\n} from '../../interfaces/enums';\nimport * as Configuration from '../../configuration';\nimport {\n\tcomputeTimeIntervalName,\n\tformatTick,\n\tisTickPrimary,\n} from '../../services/time-series';\n\n// D3 Imports\nimport { select } from 'd3-selection';\nimport { axisBottom, axisLeft, axisRight, axisTop } from 'd3-axis';\n\nexport class Axis extends Component {\n\ttype = 'axes';\n\trenderType = RenderTypes.SVG;\n\n\tmargins: any;\n\n\tscale: any;\n\tscaleType: ScaleTypes;\n\n\tconstructor(model: ChartModel, services: any, configs?: any) {\n\t\tsuper(model, services, configs);\n\n\t\tif (configs) {\n\t\t\tthis.configs = configs;\n\t\t}\n\n\t\tthis.margins = this.configs.margins;\n\t}\n\n\trender(animate = true) {\n\t\tconst { position: axisPosition } = this.configs;\n\t\tconst options = this.getOptions();\n\t\tconst isAxisVisible = Tools.getProperty(\n\t\t\toptions,\n\t\t\t'axes',\n\t\t\taxisPosition,\n\t\t\t'visible'\n\t\t);\n\n\t\tconst svg = this.getComponentContainer();\n\t\tconst { width, height } = DOMUtils.getSVGElementSize(svg, {\n\t\t\tuseAttrs: true,\n\t\t});\n\n\t\t// Add axis into the parent\n\t\tconst container = DOMUtils.appendOrSelect(\n\t\t\tsvg,\n\t\t\t`g.axis.${axisPosition}`\n\t\t);\n\t\tlet startPosition, endPosition;\n\t\tif (\n\t\t\taxisPosition === AxisPositions.BOTTOM ||\n\t\t\taxisPosition === AxisPositions.TOP\n\t\t) {\n\t\t\tstartPosition = this.configs.axes[AxisPositions.LEFT]\n\t\t\t\t? this.margins.left\n\t\t\t\t: 0;\n\t\t\tendPosition = this.configs.axes[AxisPositions.RIGHT]\n\t\t\t\t? width - this.margins.right\n\t\t\t\t: width;\n\t\t} else {\n\t\t\tstartPosition = height - this.margins.bottom;\n\t\t\tendPosition = this.margins.top;\n\t\t}\n\n\t\t// Grab the scale off of the Scales service\n\t\tconst scale = this.services.cartesianScales.getScaleByPosition(\n\t\t\taxisPosition\n\t\t);\n\n\t\tif (\n\t\t\tthis.scaleType === ScaleTypes.LABELS ||\n\t\t\tthis.scaleType === ScaleTypes.LABELS_RATIO\n\t\t) {\n\t\t\tscale.rangeRound([startPosition, endPosition]);\n\t\t} else {\n\t\t\tscale.range([startPosition, endPosition]);\n\t\t}\n\n\t\t// Identify the corresponding d3 axis function\n\t\tlet axisFunction;\n\t\tswitch (axisPosition) {\n\t\t\tcase AxisPositions.LEFT:\n\t\t\t\taxisFunction = axisLeft;\n\t\t\t\tbreak;\n\t\t\tcase AxisPositions.BOTTOM:\n\t\t\t\taxisFunction = axisBottom;\n\t\t\t\tbreak;\n\t\t\tcase AxisPositions.RIGHT:\n\t\t\t\taxisFunction = axisRight;\n\t\t\t\tbreak;\n\t\t\tcase AxisPositions.TOP:\n\t\t\t\taxisFunction = axisTop;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tcontainer.attr('aria-label', `${axisPosition} axis`);\n\t\tconst axisRefExists = !container.select(`g.ticks`).empty();\n\t\tlet axisRef = DOMUtils.appendOrSelect(container, `g.ticks`);\n\t\tif (!axisRefExists) {\n\t\t\taxisRef.attr('role', `${Roles.GRAPHICS_OBJECT} ${Roles.GROUP}`);\n\t\t\taxisRef.attr('aria-label', `${axisPosition} ticks`);\n\t\t}\n\n\t\t// We draw the invisible axis because of the async nature of d3 transitions\n\t\t// To be able to tell the final width & height of the axis when initiaing the transition\n\t\t// The invisible axis is updated instantly and without a transition\n\t\tconst invisibleAxisRef = DOMUtils.appendOrSelect(\n\t\t\tcontainer,\n\t\t\t`g.ticks.invisible`\n\t\t)\n\t\t\t.style('opacity', '0')\n\t\t\t.style('pointer-events', 'none')\n\t\t\t.attr('aria-hidden', true)\n\t\t\t.attr('aria-label', `invisible ${axisPosition} ticks`);\n\n\t\tconst axisOptions = Tools.getProperty(options, 'axes', axisPosition);\n\t\tconst isTimeScaleType =\n\t\t\tthis.scaleType === ScaleTypes.TIME ||\n\t\t\taxisOptions.scaleType === ScaleTypes.TIME;\n\t\tconst isVerticalAxis =\n\t\t\taxisPosition === AxisPositions.LEFT ||\n\t\t\taxisPosition === AxisPositions.RIGHT;\n\n\t\t// if zoomDomain is available, scale type is time, and axis position isBOTTOM or TOP\n\t\t// update scale domain to zoomDomain.\n\t\tconst zoomDomain = this.model.get('zoomDomain');\n\t\tif (zoomDomain && isTimeScaleType && !isVerticalAxis) {\n\t\t\tscale.domain(zoomDomain);\n\t\t}\n\n\t\tif (!isAxisVisible) {\n\t\t\taxisRef.attr('aria-hidden', true);\n\t\t\treturn;\n\t\t}\n\n\t\tconst axisScaleType = Tools.getProperty(axisOptions, 'scaleType');\n\t\tconst isDataLoading = Tools.getProperty(options, 'data', 'loading');\n\t\tconst numberOfTicksProvided = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t'ticks',\n\t\t\t'number'\n\t\t);\n\n\t\t// user can provide custom ticks to be displayed\n\t\t// ticks need to be in the domain of the axis data\n\t\tconst userProvidedTickValues = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t'ticks',\n\t\t\t'values'\n\t\t);\n\n\t\t// get user provided custom values for truncation\n\t\tconst truncationType = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t'truncation',\n\t\t\t'type'\n\t\t);\n\t\tconst truncationThreshold = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t'truncation',\n\t\t\t'threshold'\n\t\t);\n\t\tconst truncationNumCharacter = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t'truncation',\n\t\t\t'numCharacter'\n\t\t);\n\n\t\tconst isNumberOfTicksProvided = numberOfTicksProvided !== null;\n\t\tconst timeScaleOptions = Tools.getProperty(options, 'timeScale');\n\n\t\t// Append to DOM a fake tick to get the right computed font height\n\t\tconst fakeTick = DOMUtils.appendOrSelect(invisibleAxisRef, `g.tick`);\n\t\tconst fakeTickText = DOMUtils.appendOrSelect(fakeTick, `text`).text(\n\t\t\t'0'\n\t\t);\n\t\tconst tickHeight = DOMUtils.getSVGElementSize(fakeTickText.node(), {\n\t\t\tuseBBox: true,\n\t\t}).height;\n\t\tfakeTick.remove();\n\n\t\tconst scaleType =\n\t\t\tthis.scaleType || axisOptions.scaleType || ScaleTypes.LINEAR;\n\n\t\t// Initialize axis object\n\t\tconst axis = axisFunction(scale).tickSizeOuter(0);\n\n\t\tif (scale.ticks) {\n\t\t\tlet numberOfTicks;\n\n\t\t\tif (isNumberOfTicksProvided) {\n\t\t\t\tnumberOfTicks = numberOfTicksProvided;\n\t\t\t} else {\n\t\t\t\tnumberOfTicks = Configuration.axis.ticks.number;\n\t\t\t\tif (isVerticalAxis) {\n\t\t\t\t\t// Set how many ticks based on height\n\t\t\t\t\tnumberOfTicks = this.getNumberOfFittingTicks(\n\t\t\t\t\t\theight,\n\t\t\t\t\t\ttickHeight,\n\t\t\t\t\t\tConfiguration.axis.ticks.verticalSpaceRatio\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// scale continuous\n\t\t\t// remove 0 ticks for skeleton\n\t\t\tif (scale.ticks().length === 1 && scale.ticks()[0] === 0) {\n\t\t\t\tnumberOfTicks = 0;\n\t\t\t}\n\n\t\t\taxis.ticks(numberOfTicks);\n\n\t\t\tif (isTimeScaleType) {\n\t\t\t\tif (!scale.ticks(numberOfTicks).length) {\n\t\t\t\t\taxis.tickValues([]);\n\t\t\t\t} else {\n\t\t\t\t\tconst addSpaceOnEdges = Tools.getProperty(\n\t\t\t\t\t\toptions,\n\t\t\t\t\t\t'timeScale',\n\t\t\t\t\t\t'addSpaceOnEdges'\n\t\t\t\t\t);\n\n\t\t\t\t\tconst customDomain = Tools.getProperty(\n\t\t\t\t\t\toptions,\n\t\t\t\t\t\t'axes',\n\t\t\t\t\t\taxisPosition,\n\t\t\t\t\t\t'domain'\n\t\t\t\t\t);\n\n\t\t\t\t\tlet tickValues;\n\t\t\t\t\t// scale.nice() will change scale domain which causes extra space near chart edge\n\t\t\t\t\t// so use another scale instance to avoid impacts to original scale\n\t\t\t\t\tconst tempScale = scale.copy();\n\t\t\t\t\tif (addSpaceOnEdges && !customDomain) {\n\t\t\t\t\t\ttempScale.nice(numberOfTicks);\n\t\t\t\t\t}\n\t\t\t\t\ttickValues = tempScale.ticks(numberOfTicks);\n\n\t\t\t\t\t// Remove labels on the edges\n\t\t\t\t\t// If there are more than 2 labels to show\n\t\t\t\t\tif (\n\t\t\t\t\t\taddSpaceOnEdges &&\n\t\t\t\t\t\ttickValues.length > 2 &&\n\t\t\t\t\t\t!customDomain\n\t\t\t\t\t) {\n\t\t\t\t\t\ttickValues.splice(tickValues.length - 1, 1);\n\t\t\t\t\t\ttickValues.splice(0, 1);\n\t\t\t\t\t}\n\n\t\t\t\t\taxis.tickValues(tickValues);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// create the right ticks formatter\n\t\tlet formatter;\n\t\tconst userProvidedFormatter = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t'ticks',\n\t\t\t'formatter'\n\t\t);\n\t\tif (isTimeScaleType) {\n\t\t\tconst timeInterval = computeTimeIntervalName(axis.tickValues());\n\t\t\tif (userProvidedFormatter === null) {\n\t\t\t\tformatter = (t: number, i: number) =>\n\t\t\t\t\tformatTick(\n\t\t\t\t\t\tt,\n\t\t\t\t\t\ti,\n\t\t\t\t\t\taxis.tickValues(),\n\t\t\t\t\t\ttimeInterval,\n\t\t\t\t\t\ttimeScaleOptions\n\t\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tformatter = (t: number, i: number) => {\n\t\t\t\t\tconst defaultFormattedValue = formatTick(\n\t\t\t\t\t\tt,\n\t\t\t\t\t\ti,\n\t\t\t\t\t\taxis.tickValues(),\n\t\t\t\t\t\ttimeInterval,\n\t\t\t\t\t\ttimeScaleOptions\n\t\t\t\t\t);\n\t\t\t\t\treturn userProvidedFormatter(t, i, defaultFormattedValue);\n\t\t\t\t};\n\t\t\t}\n\t\t} else {\n\t\t\tif (userProvidedFormatter === null) {\n\t\t\t\tif (scaleType === ScaleTypes.LINEAR) {\n\t\t\t\t\tformatter = (t) => t.toLocaleString();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tformatter = userProvidedFormatter;\n\t\t\t}\n\t\t}\n\n\t\t// Set ticks formatter\n\t\taxis.tickFormat(formatter);\n\n\t\t// prioritize using a custom array of values rather than number of ticks\n\t\t// if both are provided. custom tick values need to be within the domain of the scale\n\t\tconst [\n\t\t\tlowerBound,\n\t\t\tupperBound,\n\t\t] = this.services.cartesianScales\n\t\t\t.getScaleByPosition(axisPosition)\n\t\t\t.domain();\n\t\tlet validTicks;\n\t\tif (userProvidedTickValues) {\n\t\t\tif (isTimeScaleType) {\n\t\t\t\t// sanitize user-provided tick values\n\t\t\t\tuserProvidedTickValues.forEach((userProvidedTickValue, i) => {\n\t\t\t\t\tif (userProvidedTickValue.getTime === undefined) {\n\t\t\t\t\t\tuserProvidedTickValues[i] = new Date(\n\t\t\t\t\t\t\tuserProvidedTickValue\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t// check the supplied ticks are within the time domain\n\t\t\t\tvalidTicks = userProvidedTickValues.filter((tick) => {\n\t\t\t\t\tconst tickTimestamp = tick.getTime();\n\t\t\t\t\treturn (\n\t\t\t\t\t\ttickTimestamp >= new Date(lowerBound).getTime() &&\n\t\t\t\t\t\ttickTimestamp <= new Date(upperBound).getTime()\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t} else if (axisScaleType === ScaleTypes.LABELS) {\n\t\t\t\tconst discreteDomain = this.services.cartesianScales\n\t\t\t\t\t.getScaleByPosition(axisPosition)\n\t\t\t\t\t.domain();\n\t\t\t\tvalidTicks = userProvidedTickValues.filter((tick) =>\n\t\t\t\t\tdiscreteDomain.includes(tick)\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t// continuous scales\n\t\t\t\tvalidTicks = userProvidedTickValues.filter(\n\t\t\t\t\t(tick) => tick >= lowerBound && tick <= upperBound\n\t\t\t\t);\n\t\t\t}\n\n\t\t\taxis.tickValues(validTicks);\n\t\t}\n\n\t\t// Position and transition the axis\n\t\tswitch (axisPosition) {\n\t\t\tcase AxisPositions.LEFT:\n\t\t\t\taxisRef.attr('transform', `translate(${this.margins.left}, 0)`);\n\t\t\t\tbreak;\n\t\t\tcase AxisPositions.BOTTOM:\n\t\t\t\taxisRef.attr(\n\t\t\t\t\t'transform',\n\t\t\t\t\t`translate(0, ${height - this.margins.bottom})`\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase AxisPositions.RIGHT:\n\t\t\t\taxisRef.attr(\n\t\t\t\t\t'transform',\n\t\t\t\t\t`translate(${width - this.margins.right}, 0)`\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase AxisPositions.TOP:\n\t\t\t\taxisRef.attr('transform', `translate(0, ${this.margins.top})`);\n\t\t\t\tbreak;\n\t\t}\n\n\t\t// Position the axis title\n\t\t// check that data exists, if they don't, doesn't show the title axis\n\t\tconst isDataEmpty = this.model.isDataEmpty();\n\t\tif (axisOptions.title) {\n\t\t\tconst axisTitleRef = DOMUtils.appendOrSelect(\n\t\t\t\tcontainer,\n\t\t\t\t`text.axis-title`\n\t\t\t).html(isDataEmpty || isDataLoading ? '' : axisOptions.title);\n\n\t\t\t// vertical axes can have override for title orientation\n\t\t\tconst titleOrientation = Tools.getProperty(\n\t\t\t\taxisOptions,\n\t\t\t\t'titleOrientation'\n\t\t\t);\n\t\t\tswitch (axisPosition) {\n\t\t\t\tcase AxisPositions.LEFT:\n\t\t\t\t\tif (titleOrientation === AxisTitleOrientations.RIGHT) {\n\t\t\t\t\t\taxisTitleRef\n\t\t\t\t\t\t\t.attr('transform', 'rotate(90)')\n\t\t\t\t\t\t\t.attr('y', 0)\n\t\t\t\t\t\t\t.attr('x', scale.range()[0] / 2)\n\t\t\t\t\t\t\t.attr('dy', '-0.5em')\n\t\t\t\t\t\t\t.style('text-anchor', 'middle');\n\t\t\t\t\t} else {\n\t\t\t\t\t\taxisTitleRef\n\t\t\t\t\t\t\t.attr('transform', 'rotate(-90)')\n\t\t\t\t\t\t\t.attr('y', 0)\n\t\t\t\t\t\t\t.attr('x', -(scale.range()[0] / 2))\n\t\t\t\t\t\t\t.attr('dy', '0.75em')\n\t\t\t\t\t\t\t.style('text-anchor', 'middle');\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.BOTTOM:\n\t\t\t\t\taxisTitleRef\n\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t'transform',\n\t\t\t\t\t\t\t`translate(${\n\t\t\t\t\t\t\t\tthis.margins.left / 2 + scale.range()[1] / 2\n\t\t\t\t\t\t\t}, ${height + 4})`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.style('text-anchor', 'middle');\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.RIGHT:\n\t\t\t\t\tif (titleOrientation === AxisTitleOrientations.LEFT) {\n\t\t\t\t\t\taxisTitleRef\n\t\t\t\t\t\t\t.attr('transform', 'rotate(-90)')\n\t\t\t\t\t\t\t.attr('y', width)\n\t\t\t\t\t\t\t.attr('x', -(scale.range()[0] / 2))\n\t\t\t\t\t\t\t.style('text-anchor', 'middle');\n\t\t\t\t\t} else {\n\t\t\t\t\t\taxisTitleRef\n\t\t\t\t\t\t\t.attr('transform', 'rotate(90)')\n\t\t\t\t\t\t\t.attr('y', -width)\n\t\t\t\t\t\t\t.attr('x', scale.range()[0] / 2)\n\t\t\t\t\t\t\t.attr('dy', '0.75em')\n\t\t\t\t\t\t\t.style('text-anchor', 'middle');\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.TOP:\n\t\t\t\t\tconst { height: titleHeight } = DOMUtils.getSVGElementSize(\n\t\t\t\t\t\taxisTitleRef,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tuseBBox: true,\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t\taxisTitleRef\n\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t'transform',\n\t\t\t\t\t\t\t`translate(${\n\t\t\t\t\t\t\t\tthis.margins.left / 2 + scale.range()[1] / 2\n\t\t\t\t\t\t\t}, ${titleHeight / 2})`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.style('text-anchor', 'middle');\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// Apply new axis to the axis element\n\t\tif (isTimeScaleType) {\n\t\t\tconst timeInterval = computeTimeIntervalName(axis.tickValues());\n\t\t\tconst showDayName = timeScaleOptions.showDayName;\n\t\t\tconst axisRefSelection = axisRef;\n\n\t\t\tif (animate) {\n\t\t\t\taxisRef = axisRef.transition().call((t) =>\n\t\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\t\ttransition: t,\n\t\t\t\t\t\tname: 'axis-update',\n\t\t\t\t\t\tanimate,\n\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t}\n\t\t\taxisRef = axisRef.call(axis);\n\n\t\t\t// Manipulate tick labels to make bold those that are in long format\n\t\t\tconst ticks = axisRefSelection\n\t\t\t\t.selectAll('.tick')\n\t\t\t\t.data(axis.tickValues(), scale)\n\t\t\t\t.order()\n\t\t\t\t.select('text');\n\t\t\tticks.style('font-weight', (tick: number, i: number) => {\n\t\t\t\treturn isTickPrimary(\n\t\t\t\t\ttick,\n\t\t\t\t\ti,\n\t\t\t\t\taxis.tickValues(),\n\t\t\t\t\ttimeInterval,\n\t\t\t\t\tshowDayName\n\t\t\t\t)\n\t\t\t\t\t? 'bold'\n\t\t\t\t\t: 'normal';\n\t\t\t});\n\t\t} else {\n\t\t\tif (!animate || !axisRefExists) {\n\t\t\t\taxisRef = axisRef.call(axis);\n\t\t\t} else {\n\t\t\t\taxisRef = axisRef\n\t\t\t\t\t.transition()\n\t\t\t\t\t.call((t) =>\n\t\t\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\t\t\ttransition: t,\n\t\t\t\t\t\t\tname: 'axis-update',\n\t\t\t\t\t\t\tanimate,\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t\t.call(axis);\n\t\t\t}\n\t\t}\n\n\t\tinvisibleAxisRef.call(axis);\n\n\t\tif (\n\t\t\taxisPosition === AxisPositions.BOTTOM ||\n\t\t\taxisPosition === AxisPositions.TOP\n\t\t) {\n\t\t\tlet shouldRotateTicks = false;\n\t\t\t// user could decide if tick rotation is required during zoom domain changing\n\t\t\tconst tickRotation = Tools.getProperty(\n\t\t\t\taxisOptions,\n\t\t\t\t'ticks',\n\t\t\t\t'rotation'\n\t\t\t);\n\n\t\t\tif (tickRotation === TickRotations.ALWAYS) {\n\t\t\t\tshouldRotateTicks = true;\n\t\t\t} else if (tickRotation === TickRotations.NEVER) {\n\t\t\t\tshouldRotateTicks = false;\n\t\t\t} else if (!tickRotation || tickRotation === TickRotations.AUTO) {\n\t\t\t\t// if the option is not set or set to AUTO\n\n\t\t\t\t// depending on if tick rotation is necessary by calculating space\n\t\t\t\t// If we're dealing with a discrete scale type\n\t\t\t\t// We're able to grab the spacing between the ticks\n\t\t\t\tif (scale.step) {\n\t\t\t\t\tconst textNodes = invisibleAxisRef\n\t\t\t\t\t\t.selectAll('g.tick text')\n\t\t\t\t\t\t.nodes();\n\n\t\t\t\t\t// If any ticks are any larger than the scale step size\n\t\t\t\t\tshouldRotateTicks = textNodes.some(\n\t\t\t\t\t\t(textNode) =>\n\t\t\t\t\t\t\tDOMUtils.getSVGElementSize(textNode, {\n\t\t\t\t\t\t\t\tuseBBox: true,\n\t\t\t\t\t\t\t}).width >= scale.step()\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tshouldRotateTicks = false;\n\n\t\t\t\t\tconst mockTextPiece = invisibleAxisRef\n\t\t\t\t\t\t.append('text')\n\t\t\t\t\t\t.text('A');\n\n\t\t\t\t\tconst averageLetterWidth = mockTextPiece.node().getBBox()\n\t\t\t\t\t\t.width;\n\n\t\t\t\t\tlet lastStartPosition;\n\n\t\t\t\t\t// Find out whether any text nodes roughly collide\n\t\t\t\t\tinvisibleAxisRef.selectAll('g.tick').each(function () {\n\t\t\t\t\t\tconst selection = select(this);\n\t\t\t\t\t\tconst xTransformation = parseFloat(\n\t\t\t\t\t\t\tTools.getProperty(\n\t\t\t\t\t\t\t\tTools.getTranslationValues(this),\n\t\t\t\t\t\t\t\t'tx'\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\txTransformation !== null &&\n\t\t\t\t\t\t\tlastStartPosition +\n\t\t\t\t\t\t\t\tselection.text().length *\n\t\t\t\t\t\t\t\t\taverageLetterWidth *\n\t\t\t\t\t\t\t\t\t0.8 >=\n\t\t\t\t\t\t\t\txTransformation\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tshouldRotateTicks = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlastStartPosition = xTransformation;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (shouldRotateTicks) {\n\t\t\t\tif (!isNumberOfTicksProvided) {\n\t\t\t\t\taxis.ticks(\n\t\t\t\t\t\tthis.getNumberOfFittingTicks(\n\t\t\t\t\t\t\twidth,\n\t\t\t\t\t\t\ttickHeight,\n\t\t\t\t\t\t\tConfiguration.axis.ticks.horizontalSpaceRatio\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\n\t\t\t\t\tinvisibleAxisRef.call(axis);\n\t\t\t\t\taxisRef.call(axis);\n\t\t\t\t}\n\n\t\t\t\tcontainer\n\t\t\t\t\t.selectAll('g.ticks g.tick text')\n\t\t\t\t\t.attr('transform', `rotate(-45)`)\n\t\t\t\t\t.style(\n\t\t\t\t\t\t'text-anchor',\n\t\t\t\t\t\taxisPosition === AxisPositions.TOP ? 'start' : 'end'\n\t\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tcontainer\n\t\t\t\t\t.selectAll('g.ticks g.tick text')\n\t\t\t\t\t.attr('transform', null)\n\t\t\t\t\t.style('text-anchor', null);\n\t\t\t}\n\t\t}\n\n\t\t// we don't need to show axes on empty state and on skeleton state\n\t\t// because the Skeleton component draws them\n\t\tif (isDataLoading) {\n\t\t\tcontainer.attr('opacity', 0);\n\t\t} else {\n\t\t\tcontainer.attr('opacity', 1);\n\t\t}\n\n\t\taxisRef.selectAll('g.tick').attr('aria-label', (d) => d);\n\n\t\tinvisibleAxisRef.selectAll('g.tick').attr('aria-label', (d) => d);\n\n\t\t// truncate the label if it's too long\n\t\t// only applies to discrete type\n\t\tif (\n\t\t\ttruncationType !== TruncationTypes.NONE &&\n\t\t\taxisScaleType === ScaleTypes.LABELS &&\n\t\t\t!userProvidedTickValues\n\t\t) {\n\t\t\tconst axisTickLabels = this.services.cartesianScales.getScaleDomain(\n\t\t\t\taxisPosition\n\t\t\t);\n\t\t\tif (axisTickLabels.length > 0) {\n\t\t\t\tconst tick_html = svg\n\t\t\t\t\t.select(`g.axis.${axisPosition} g.ticks g.tick`)\n\t\t\t\t\t.html();\n\n\t\t\t\tcontainer.selectAll('g.ticks g.tick').html(tick_html);\n\n\t\t\t\tcontainer\n\t\t\t\t\t.selectAll('g.tick text')\n\t\t\t\t\t.data(axisTickLabels)\n\t\t\t\t\t.text(function (d) {\n\t\t\t\t\t\tif (d.length > truncationThreshold) {\n\t\t\t\t\t\t\treturn Tools.truncateLabel(\n\t\t\t\t\t\t\t\td,\n\t\t\t\t\t\t\t\ttruncationType,\n\t\t\t\t\t\t\t\ttruncationNumCharacter\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn d;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\tthis.getInvisibleAxisRef()\n\t\t\t\t\t.selectAll('g.tick text')\n\t\t\t\t\t.data(axisTickLabels)\n\t\t\t\t\t.text(function (d) {\n\t\t\t\t\t\tif (d.length > truncationThreshold) {\n\t\t\t\t\t\t\treturn Tools.truncateLabel(\n\t\t\t\t\t\t\t\td,\n\t\t\t\t\t\t\t\ttruncationType,\n\t\t\t\t\t\t\t\ttruncationNumCharacter\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn d;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\tcontainer\n\t\t\t\t\t.selectAll('g.ticks')\n\t\t\t\t\t.html(this.getInvisibleAxisRef().html());\n\n\t\t\t\tcontainer.selectAll('g.tick text').data(axisTickLabels);\n\t\t\t}\n\t\t}\n\t\t// Add event listeners to elements drawn\n\t\tthis.addEventListeners();\n\t}\n\n\taddEventListeners() {\n\t\tconst svg = this.getComponentContainer();\n\t\tconst { position: axisPosition } = this.configs;\n\t\tconst container = DOMUtils.appendOrSelect(\n\t\t\tsvg,\n\t\t\t`g.axis.${axisPosition}`\n\t\t);\n\t\tconst options = this.getOptions();\n\t\tconst axisOptions = Tools.getProperty(options, 'axes', axisPosition);\n\t\tconst axisScaleType = Tools.getProperty(axisOptions, 'scaleType');\n\t\tconst truncationThreshold = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t'truncation',\n\t\t\t'threshold'\n\t\t);\n\n\t\tconst isTimeScaleType =\n\t\t\tthis.scaleType === ScaleTypes.TIME ||\n\t\t\taxisOptions.scaleType === ScaleTypes.TIME;\n\n\t\tconst self = this;\n\t\tcontainer\n\t\t\t.selectAll('g.tick text')\n\t\t\t.on('mouseover', function (event, datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(\n\t\t\t\t\tEvents.Axis.LABEL_MOUSEOVER,\n\t\t\t\t\t{\n\t\t\t\t\t\tevent,\n\t\t\t\t\t\telement: select(this),\n\t\t\t\t\t\tdatum,\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\tif (\n\t\t\t\t\taxisScaleType === ScaleTypes.LABELS &&\n\t\t\t\t\tdatum.length > truncationThreshold\n\t\t\t\t) {\n\t\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.SHOW, {\n\t\t\t\t\t\tevent,\n\t\t\t\t\t\thoveredElement: select(this),\n\t\t\t\t\t\tcontent: datum,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on('mousemove', function (event, datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(\n\t\t\t\t\tEvents.Axis.LABEL_MOUSEMOVE,\n\t\t\t\t\t{\n\t\t\t\t\t\tevent,\n\t\t\t\t\t\telement: select(this),\n\t\t\t\t\t\tdatum,\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\tif (\n\t\t\t\t\taxisScaleType === ScaleTypes.LABELS &&\n\t\t\t\t\tdatum.length > truncationThreshold\n\t\t\t\t) {\n\t\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.MOVE, {\n\t\t\t\t\t\tevent,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on('click', function (event, datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Axis.LABEL_CLICK, {\n\t\t\t\t\tevent,\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('mouseout', function (event, datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Axis.LABEL_MOUSEOUT, {\n\t\t\t\t\tevent,\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum,\n\t\t\t\t});\n\n\t\t\t\tif (axisScaleType === ScaleTypes.LABELS) {\n\t\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.HIDE);\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\tgetInvisibleAxisRef() {\n\t\tconst { position: axisPosition } = this.configs;\n\n\t\treturn this.getComponentContainer().select(\n\t\t\t`g.axis.${axisPosition} g.ticks.invisible`\n\t\t);\n\t}\n\n\tgetTitleRef() {\n\t\tconst { position: axisPosition } = this.configs;\n\n\t\treturn this.getComponentContainer().select(\n\t\t\t`g.axis.${axisPosition} text.axis-title`\n\t\t);\n\t}\n\n\tgetNumberOfFittingTicks(size, tickSize, spaceRatio) {\n\t\tconst numberOfTicksFit = Math.floor(size / (tickSize * spaceRatio));\n\t\treturn Tools.clamp(\n\t\t\tnumberOfTicksFit,\n\t\t\t2,\n\t\t\tConfiguration.axis.ticks.number\n\t\t);\n\t}\n\n\tdestroy() {\n\t\tconst svg = this.getComponentContainer();\n\t\tconst { position: axisPosition } = this.configs;\n\t\tconst container = DOMUtils.appendOrSelect(\n\t\t\tsvg,\n\t\t\t`g.axis.${axisPosition}`\n\t\t);\n\n\t\t// Remove event listeners\n\t\tcontainer\n\t\t\t.selectAll('g.tick text')\n\t\t\t.on('mouseover', null)\n\t\t\t.on('mousemove', null)\n\t\t\t.on('mouseout', null);\n\t}\n}\n"]}
1
+ {"version":3,"file":"axis.js","sourceRoot":"","sources":["axis.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from '../component';\nimport {\n\tAxisPositions,\n\tEvents,\n\tScaleTypes,\n\tRoles,\n\tTruncationTypes,\n} from '../../interfaces';\nimport { Tools } from '../../tools';\nimport { ChartModel } from '../../model/model';\nimport { DOMUtils } from '../../services';\nimport {\n\tAxisTitleOrientations,\n\tRenderTypes,\n\tTickRotations,\n} from '../../interfaces/enums';\nimport * as Configuration from '../../configuration';\nimport {\n\tcomputeTimeIntervalName,\n\tformatTick,\n\tisTickPrimary,\n} from '../../services/time-series';\n\n// D3 Imports\nimport { select } from 'd3-selection';\nimport { axisBottom, axisLeft, axisRight, axisTop } from 'd3-axis';\n\nexport class Axis extends Component {\n\ttype = 'axes';\n\trenderType = RenderTypes.SVG;\n\n\tmargins: any;\n\n\tscale: any;\n\tscaleType: ScaleTypes;\n\n\tconstructor(model: ChartModel, services: any, configs?: any) {\n\t\tsuper(model, services, configs);\n\n\t\tif (configs) {\n\t\t\tthis.configs = configs;\n\t\t}\n\n\t\tthis.margins = this.configs.margins;\n\t}\n\n\trender(animate = true) {\n\t\tconst { position: axisPosition } = this.configs;\n\t\tconst options = this.getOptions();\n\t\tconst isAxisVisible = Tools.getProperty(\n\t\t\toptions,\n\t\t\t'axes',\n\t\t\taxisPosition,\n\t\t\t'visible'\n\t\t);\n\n\t\tconst svg = this.getComponentContainer();\n\t\tconst { width, height } = DOMUtils.getSVGElementSize(svg, {\n\t\t\tuseAttrs: true,\n\t\t});\n\n\t\t// Add axis into the parent\n\t\tconst container = DOMUtils.appendOrSelect(\n\t\t\tsvg,\n\t\t\t`g.axis.${axisPosition}`\n\t\t);\n\t\tlet startPosition, endPosition;\n\t\tif (\n\t\t\taxisPosition === AxisPositions.BOTTOM ||\n\t\t\taxisPosition === AxisPositions.TOP\n\t\t) {\n\t\t\tstartPosition = this.configs.axes[AxisPositions.LEFT]\n\t\t\t\t? this.margins.left\n\t\t\t\t: 0;\n\t\t\tendPosition = this.configs.axes[AxisPositions.RIGHT]\n\t\t\t\t? width - this.margins.right\n\t\t\t\t: width;\n\t\t} else {\n\t\t\tstartPosition = height - this.margins.bottom;\n\t\t\tendPosition = this.margins.top;\n\t\t}\n\n\t\t// Grab the scale off of the Scales service\n\t\tconst scale = this.services.cartesianScales.getScaleByPosition(\n\t\t\taxisPosition\n\t\t);\n\n\t\tif (\n\t\t\tthis.scaleType === ScaleTypes.LABELS ||\n\t\t\tthis.scaleType === ScaleTypes.LABELS_RATIO\n\t\t) {\n\t\t\tscale.rangeRound([startPosition, endPosition]);\n\t\t} else {\n\t\t\tscale.range([startPosition, endPosition]);\n\t\t}\n\n\t\t// Identify the corresponding d3 axis function\n\t\tlet axisFunction;\n\t\tswitch (axisPosition) {\n\t\t\tcase AxisPositions.LEFT:\n\t\t\t\taxisFunction = axisLeft;\n\t\t\t\tbreak;\n\t\t\tcase AxisPositions.BOTTOM:\n\t\t\t\taxisFunction = axisBottom;\n\t\t\t\tbreak;\n\t\t\tcase AxisPositions.RIGHT:\n\t\t\t\taxisFunction = axisRight;\n\t\t\t\tbreak;\n\t\t\tcase AxisPositions.TOP:\n\t\t\t\taxisFunction = axisTop;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tcontainer.attr('aria-label', `${axisPosition} axis`);\n\t\tconst axisRefExists = !container.select(`g.ticks`).empty();\n\t\tlet axisRef = DOMUtils.appendOrSelect(container, `g.ticks`);\n\t\tif (!axisRefExists) {\n\t\t\taxisRef.attr('role', `${Roles.GRAPHICS_OBJECT} ${Roles.GROUP}`);\n\t\t\taxisRef.attr('aria-label', `${axisPosition} ticks`);\n\t\t}\n\n\t\t// We draw the invisible axis because of the async nature of d3 transitions\n\t\t// To be able to tell the final width & height of the axis when initiaing the transition\n\t\t// The invisible axis is updated instantly and without a transition\n\t\tconst invisibleAxisRef = DOMUtils.appendOrSelect(\n\t\t\tcontainer,\n\t\t\t`g.ticks.invisible`\n\t\t)\n\t\t\t.style('opacity', '0')\n\t\t\t.style('pointer-events', 'none')\n\t\t\t.attr('aria-hidden', true)\n\t\t\t.attr('aria-label', `invisible ${axisPosition} ticks`);\n\n\t\tconst axisOptions = Tools.getProperty(options, 'axes', axisPosition);\n\t\tconst isTimeScaleType =\n\t\t\tthis.scaleType === ScaleTypes.TIME ||\n\t\t\taxisOptions.scaleType === ScaleTypes.TIME;\n\t\tconst isVerticalAxis =\n\t\t\taxisPosition === AxisPositions.LEFT ||\n\t\t\taxisPosition === AxisPositions.RIGHT;\n\n\t\t// if zoomDomain is available, scale type is time, and axis position isBOTTOM or TOP\n\t\t// update scale domain to zoomDomain.\n\t\tconst zoomDomain = this.model.get('zoomDomain');\n\t\tif (zoomDomain && isTimeScaleType && !isVerticalAxis) {\n\t\t\tscale.domain(zoomDomain);\n\t\t}\n\n\t\tif (!isAxisVisible) {\n\t\t\taxisRef.attr('aria-hidden', true);\n\t\t\treturn;\n\t\t}\n\n\t\tconst axisScaleType = Tools.getProperty(axisOptions, 'scaleType');\n\t\tconst isDataLoading = Tools.getProperty(options, 'data', 'loading');\n\t\tconst numberOfTicksProvided = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t'ticks',\n\t\t\t'number'\n\t\t);\n\n\t\t// user can provide custom ticks to be displayed\n\t\t// ticks need to be in the domain of the axis data\n\t\tconst userProvidedTickValues = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t'ticks',\n\t\t\t'values'\n\t\t);\n\n\t\t// get user provided custom values for truncation\n\t\tconst truncationType = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t'truncation',\n\t\t\t'type'\n\t\t);\n\t\tconst truncationThreshold = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t'truncation',\n\t\t\t'threshold'\n\t\t);\n\t\tconst truncationNumCharacter = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t'truncation',\n\t\t\t'numCharacter'\n\t\t);\n\n\t\tconst isNumberOfTicksProvided = numberOfTicksProvided !== null;\n\t\tconst timeScaleOptions = Tools.getProperty(options, 'timeScale');\n\n\t\t// Append to DOM a fake tick to get the right computed font height\n\t\tconst fakeTick = DOMUtils.appendOrSelect(invisibleAxisRef, `g.tick`);\n\t\tconst fakeTickText = DOMUtils.appendOrSelect(fakeTick, `text`).text(\n\t\t\t'0'\n\t\t);\n\t\tconst tickHeight = DOMUtils.getSVGElementSize(fakeTickText.node(), {\n\t\t\tuseBBox: true,\n\t\t}).height;\n\t\tfakeTick.remove();\n\n\t\tconst scaleType =\n\t\t\tthis.scaleType || axisOptions.scaleType || ScaleTypes.LINEAR;\n\n\t\t// Initialize axis object\n\t\tconst axis = axisFunction(scale).tickSizeOuter(0);\n\n\t\tif (scale.ticks) {\n\t\t\tlet numberOfTicks;\n\n\t\t\tif (isNumberOfTicksProvided) {\n\t\t\t\tnumberOfTicks = numberOfTicksProvided;\n\t\t\t} else {\n\t\t\t\tnumberOfTicks = Configuration.axis.ticks.number;\n\t\t\t\tif (isVerticalAxis) {\n\t\t\t\t\t// Set how many ticks based on height\n\t\t\t\t\tnumberOfTicks = this.getNumberOfFittingTicks(\n\t\t\t\t\t\theight,\n\t\t\t\t\t\ttickHeight,\n\t\t\t\t\t\tConfiguration.axis.ticks.verticalSpaceRatio\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// scale continuous\n\t\t\t// remove 0 ticks for skeleton\n\t\t\tif (scale.ticks().length === 1 && scale.ticks()[0] === 0) {\n\t\t\t\tnumberOfTicks = 0;\n\t\t\t}\n\n\t\t\taxis.ticks(numberOfTicks);\n\n\t\t\tif (isTimeScaleType) {\n\t\t\t\tif (!scale.ticks(numberOfTicks).length) {\n\t\t\t\t\taxis.tickValues([]);\n\t\t\t\t} else {\n\t\t\t\t\tconst addSpaceOnEdges = Tools.getProperty(\n\t\t\t\t\t\toptions,\n\t\t\t\t\t\t'timeScale',\n\t\t\t\t\t\t'addSpaceOnEdges'\n\t\t\t\t\t);\n\n\t\t\t\t\tconst customDomain = Tools.getProperty(\n\t\t\t\t\t\toptions,\n\t\t\t\t\t\t'axes',\n\t\t\t\t\t\taxisPosition,\n\t\t\t\t\t\t'domain'\n\t\t\t\t\t);\n\n\t\t\t\t\tlet tickValues;\n\t\t\t\t\t// scale.nice() will change scale domain which causes extra space near chart edge\n\t\t\t\t\t// so use another scale instance to avoid impacts to original scale\n\t\t\t\t\tconst tempScale = scale.copy();\n\t\t\t\t\tif (addSpaceOnEdges && !customDomain) {\n\t\t\t\t\t\ttempScale.nice(numberOfTicks);\n\t\t\t\t\t}\n\t\t\t\t\ttickValues = tempScale.ticks(numberOfTicks);\n\n\t\t\t\t\t// Remove labels on the edges\n\t\t\t\t\t// If there are more than 2 labels to show\n\t\t\t\t\tif (\n\t\t\t\t\t\taddSpaceOnEdges &&\n\t\t\t\t\t\ttickValues.length > 2 &&\n\t\t\t\t\t\t!customDomain\n\t\t\t\t\t) {\n\t\t\t\t\t\ttickValues.splice(tickValues.length - 1, 1);\n\t\t\t\t\t\ttickValues.splice(0, 1);\n\t\t\t\t\t}\n\n\t\t\t\t\taxis.tickValues(tickValues);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// create the right ticks formatter\n\t\tlet formatter;\n\t\tconst userProvidedFormatter = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t'ticks',\n\t\t\t'formatter'\n\t\t);\n\t\tif (isTimeScaleType) {\n\t\t\tconst timeInterval = computeTimeIntervalName(axis.tickValues());\n\t\t\tif (userProvidedFormatter === null) {\n\t\t\t\tformatter = (t: number, i: number) =>\n\t\t\t\t\tformatTick(\n\t\t\t\t\t\tt,\n\t\t\t\t\t\ti,\n\t\t\t\t\t\taxis.tickValues(),\n\t\t\t\t\t\ttimeInterval,\n\t\t\t\t\t\ttimeScaleOptions\n\t\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tformatter = (t: number, i: number) => {\n\t\t\t\t\tconst defaultFormattedValue = formatTick(\n\t\t\t\t\t\tt,\n\t\t\t\t\t\ti,\n\t\t\t\t\t\taxis.tickValues(),\n\t\t\t\t\t\ttimeInterval,\n\t\t\t\t\t\ttimeScaleOptions\n\t\t\t\t\t);\n\t\t\t\t\treturn userProvidedFormatter(t, i, defaultFormattedValue);\n\t\t\t\t};\n\t\t\t}\n\t\t} else {\n\t\t\tif (userProvidedFormatter === null) {\n\t\t\t\tif (scaleType === ScaleTypes.LINEAR) {\n\t\t\t\t\tformatter = (t) => t.toLocaleString();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tformatter = userProvidedFormatter;\n\t\t\t}\n\t\t}\n\n\t\t// Set ticks formatter\n\t\taxis.tickFormat(formatter);\n\n\t\t// prioritize using a custom array of values rather than number of ticks\n\t\t// if both are provided. custom tick values need to be within the domain of the scale\n\t\tconst [\n\t\t\tlowerBound,\n\t\t\tupperBound,\n\t\t] = this.services.cartesianScales\n\t\t\t.getScaleByPosition(axisPosition)\n\t\t\t.domain();\n\t\tlet validTicks;\n\t\tif (userProvidedTickValues) {\n\t\t\tif (isTimeScaleType) {\n\t\t\t\t// sanitize user-provided tick values\n\t\t\t\tuserProvidedTickValues.forEach((userProvidedTickValue, i) => {\n\t\t\t\t\tif (userProvidedTickValue.getTime === undefined) {\n\t\t\t\t\t\tuserProvidedTickValues[i] = new Date(\n\t\t\t\t\t\t\tuserProvidedTickValue\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t// check the supplied ticks are within the time domain\n\t\t\t\tvalidTicks = userProvidedTickValues.filter((tick) => {\n\t\t\t\t\tconst tickTimestamp = tick.getTime();\n\t\t\t\t\treturn (\n\t\t\t\t\t\ttickTimestamp >= new Date(lowerBound).getTime() &&\n\t\t\t\t\t\ttickTimestamp <= new Date(upperBound).getTime()\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t} else if (axisScaleType === ScaleTypes.LABELS) {\n\t\t\t\tconst discreteDomain = this.services.cartesianScales\n\t\t\t\t\t.getScaleByPosition(axisPosition)\n\t\t\t\t\t.domain();\n\t\t\t\tvalidTicks = userProvidedTickValues.filter((tick) =>\n\t\t\t\t\tdiscreteDomain.includes(tick)\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t// continuous scales\n\t\t\t\tvalidTicks = userProvidedTickValues.filter(\n\t\t\t\t\t(tick) => tick >= lowerBound && tick <= upperBound\n\t\t\t\t);\n\t\t\t}\n\n\t\t\taxis.tickValues(validTicks);\n\t\t}\n\n\t\t// Position and transition the axis\n\t\tswitch (axisPosition) {\n\t\t\tcase AxisPositions.LEFT:\n\t\t\t\taxisRef.attr('transform', `translate(${this.margins.left}, 0)`);\n\t\t\t\tbreak;\n\t\t\tcase AxisPositions.BOTTOM:\n\t\t\t\taxisRef.attr(\n\t\t\t\t\t'transform',\n\t\t\t\t\t`translate(0, ${height - this.margins.bottom})`\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase AxisPositions.RIGHT:\n\t\t\t\taxisRef.attr(\n\t\t\t\t\t'transform',\n\t\t\t\t\t`translate(${width - this.margins.right}, 0)`\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase AxisPositions.TOP:\n\t\t\t\taxisRef.attr('transform', `translate(0, ${this.margins.top})`);\n\t\t\t\tbreak;\n\t\t}\n\n\t\t// Position the axis title\n\t\t// check that data exists, if they don't, doesn't show the title axis\n\t\tconst isDataEmpty = this.model.isDataEmpty();\n\t\tif (axisOptions.title) {\n\t\t\tconst axisTitleRef = DOMUtils.appendOrSelect(\n\t\t\t\tcontainer,\n\t\t\t\t`text.axis-title`\n\t\t\t).html(isDataEmpty || isDataLoading ? '' : axisOptions.title);\n\n\t\t\t// vertical axes can have override for title orientation\n\t\t\tconst titleOrientation = Tools.getProperty(\n\t\t\t\taxisOptions,\n\t\t\t\t'titleOrientation'\n\t\t\t);\n\t\t\tswitch (axisPosition) {\n\t\t\t\tcase AxisPositions.LEFT:\n\t\t\t\t\tif (titleOrientation === AxisTitleOrientations.RIGHT) {\n\t\t\t\t\t\taxisTitleRef\n\t\t\t\t\t\t\t.attr('transform', 'rotate(90)')\n\t\t\t\t\t\t\t.attr('y', 0)\n\t\t\t\t\t\t\t.attr('x', scale.range()[0] / 2)\n\t\t\t\t\t\t\t.attr('dy', '-0.5em')\n\t\t\t\t\t\t\t.style('text-anchor', 'middle');\n\t\t\t\t\t} else {\n\t\t\t\t\t\taxisTitleRef\n\t\t\t\t\t\t\t.attr('transform', 'rotate(-90)')\n\t\t\t\t\t\t\t.attr('y', 0)\n\t\t\t\t\t\t\t.attr('x', -(scale.range()[0] / 2))\n\t\t\t\t\t\t\t.attr('dy', '0.75em')\n\t\t\t\t\t\t\t.style('text-anchor', 'middle');\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.BOTTOM:\n\t\t\t\t\taxisTitleRef\n\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t'transform',\n\t\t\t\t\t\t\t`translate(${\n\t\t\t\t\t\t\t\tthis.margins.left / 2 + scale.range()[1] / 2\n\t\t\t\t\t\t\t}, ${height + 4})`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.style('text-anchor', 'middle');\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.RIGHT:\n\t\t\t\t\tif (titleOrientation === AxisTitleOrientations.LEFT) {\n\t\t\t\t\t\taxisTitleRef\n\t\t\t\t\t\t\t.attr('transform', 'rotate(-90)')\n\t\t\t\t\t\t\t.attr('y', width)\n\t\t\t\t\t\t\t.attr('x', -(scale.range()[0] / 2))\n\t\t\t\t\t\t\t.style('text-anchor', 'middle');\n\t\t\t\t\t} else {\n\t\t\t\t\t\taxisTitleRef\n\t\t\t\t\t\t\t.attr('transform', 'rotate(90)')\n\t\t\t\t\t\t\t.attr('y', -width)\n\t\t\t\t\t\t\t.attr('x', scale.range()[0] / 2)\n\t\t\t\t\t\t\t.attr('dy', '0.75em')\n\t\t\t\t\t\t\t.style('text-anchor', 'middle');\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.TOP:\n\t\t\t\t\tconst { height: titleHeight } = DOMUtils.getSVGElementSize(\n\t\t\t\t\t\taxisTitleRef,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tuseBBox: true,\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t\taxisTitleRef\n\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t'transform',\n\t\t\t\t\t\t\t`translate(${\n\t\t\t\t\t\t\t\tthis.margins.left / 2 + scale.range()[1] / 2\n\t\t\t\t\t\t\t}, ${titleHeight / 2})`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.style('text-anchor', 'middle');\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// Apply new axis to the axis element\n\t\tif (isTimeScaleType) {\n\t\t\tconst timeInterval = computeTimeIntervalName(axis.tickValues());\n\t\t\tconst showDayName = timeScaleOptions.showDayName;\n\t\t\tconst axisRefSelection = axisRef;\n\n\t\t\tif (animate) {\n\t\t\t\taxisRef = axisRef.transition().call((t) =>\n\t\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\t\ttransition: t,\n\t\t\t\t\t\tname: 'axis-update',\n\t\t\t\t\t\tanimate,\n\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t}\n\t\t\taxisRef = axisRef.call(axis);\n\n\t\t\t// Manipulate tick labels to make bold those that are in long format\n\t\t\tconst ticks = axisRefSelection\n\t\t\t\t.selectAll('.tick')\n\t\t\t\t.data(axis.tickValues(), scale)\n\t\t\t\t.order()\n\t\t\t\t.select('text');\n\t\t\tticks.style('font-weight', (tick: number, i: number) => {\n\t\t\t\treturn isTickPrimary(\n\t\t\t\t\ttick,\n\t\t\t\t\ti,\n\t\t\t\t\taxis.tickValues(),\n\t\t\t\t\ttimeInterval,\n\t\t\t\t\tshowDayName\n\t\t\t\t)\n\t\t\t\t\t? 'bold'\n\t\t\t\t\t: 'normal';\n\t\t\t});\n\t\t} else {\n\t\t\tif (!animate || !axisRefExists) {\n\t\t\t\taxisRef = axisRef.call(axis);\n\t\t\t} else {\n\t\t\t\taxisRef = axisRef\n\t\t\t\t\t.transition()\n\t\t\t\t\t.call((t) =>\n\t\t\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\t\t\ttransition: t,\n\t\t\t\t\t\t\tname: 'axis-update',\n\t\t\t\t\t\t\tanimate,\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t\t.call(axis);\n\t\t\t}\n\t\t}\n\n\t\tinvisibleAxisRef.call(axis);\n\n\t\tif (\n\t\t\taxisPosition === AxisPositions.BOTTOM ||\n\t\t\taxisPosition === AxisPositions.TOP\n\t\t) {\n\t\t\tlet shouldRotateTicks = false;\n\t\t\t// user could decide if tick rotation is required during zoom domain changing\n\t\t\tconst tickRotation = Tools.getProperty(\n\t\t\t\taxisOptions,\n\t\t\t\t'ticks',\n\t\t\t\t'rotation'\n\t\t\t);\n\n\t\t\tif (tickRotation === TickRotations.ALWAYS) {\n\t\t\t\tshouldRotateTicks = true;\n\t\t\t} else if (tickRotation === TickRotations.NEVER) {\n\t\t\t\tshouldRotateTicks = false;\n\t\t\t} else if (!tickRotation || tickRotation === TickRotations.AUTO) {\n\t\t\t\t// if the option is not set or set to AUTO\n\n\t\t\t\t// depending on if tick rotation is necessary by calculating space\n\t\t\t\t// If we're dealing with a discrete scale type\n\t\t\t\t// We're able to grab the spacing between the ticks\n\t\t\t\tif (scale.step) {\n\t\t\t\t\tconst textNodes = invisibleAxisRef\n\t\t\t\t\t\t.selectAll('g.tick text')\n\t\t\t\t\t\t.nodes();\n\n\t\t\t\t\t// If any ticks are any larger than the scale step size\n\t\t\t\t\tshouldRotateTicks = textNodes.some(\n\t\t\t\t\t\t(textNode) =>\n\t\t\t\t\t\t\tDOMUtils.getSVGElementSize(textNode, {\n\t\t\t\t\t\t\t\tuseBBox: true,\n\t\t\t\t\t\t\t}).width >= scale.step()\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tshouldRotateTicks = false;\n\n\t\t\t\t\tconst mockTextPiece = invisibleAxisRef\n\t\t\t\t\t\t.append('text')\n\t\t\t\t\t\t.text('A');\n\n\t\t\t\t\tconst averageLetterWidth = DOMUtils.getSVGElementSize(\n\t\t\t\t\t\tmockTextPiece.node(),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tuseBBox: true,\n\t\t\t\t\t\t}\n\t\t\t\t\t).width;\n\n\t\t\t\t\tlet lastStartPosition;\n\n\t\t\t\t\t// Find out whether any text nodes roughly collide\n\t\t\t\t\tinvisibleAxisRef.selectAll('g.tick').each(function () {\n\t\t\t\t\t\tconst selection = select(this);\n\t\t\t\t\t\tconst xTransformation = parseFloat(\n\t\t\t\t\t\t\tTools.getProperty(\n\t\t\t\t\t\t\t\tTools.getTranslationValues(this),\n\t\t\t\t\t\t\t\t'tx'\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\txTransformation !== null &&\n\t\t\t\t\t\t\tlastStartPosition +\n\t\t\t\t\t\t\t\tselection.text().length *\n\t\t\t\t\t\t\t\t\taverageLetterWidth *\n\t\t\t\t\t\t\t\t\t0.8 >=\n\t\t\t\t\t\t\t\txTransformation\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tshouldRotateTicks = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlastStartPosition = xTransformation;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (shouldRotateTicks) {\n\t\t\t\tif (!isNumberOfTicksProvided) {\n\t\t\t\t\taxis.ticks(\n\t\t\t\t\t\tthis.getNumberOfFittingTicks(\n\t\t\t\t\t\t\twidth,\n\t\t\t\t\t\t\ttickHeight,\n\t\t\t\t\t\t\tConfiguration.axis.ticks.horizontalSpaceRatio\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\n\t\t\t\t\tinvisibleAxisRef.call(axis);\n\t\t\t\t\taxisRef.call(axis);\n\t\t\t\t}\n\n\t\t\t\tcontainer\n\t\t\t\t\t.selectAll('g.ticks g.tick text')\n\t\t\t\t\t.attr('transform', `rotate(-45)`)\n\t\t\t\t\t.style(\n\t\t\t\t\t\t'text-anchor',\n\t\t\t\t\t\taxisPosition === AxisPositions.TOP ? 'start' : 'end'\n\t\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tcontainer\n\t\t\t\t\t.selectAll('g.ticks g.tick text')\n\t\t\t\t\t.attr('transform', null)\n\t\t\t\t\t.style('text-anchor', null);\n\t\t\t}\n\t\t}\n\n\t\t// we don't need to show axes on empty state and on skeleton state\n\t\t// because the Skeleton component draws them\n\t\tif (isDataLoading) {\n\t\t\tcontainer.attr('opacity', 0);\n\t\t} else {\n\t\t\tcontainer.attr('opacity', 1);\n\t\t}\n\n\t\taxisRef.selectAll('g.tick').attr('aria-label', (d) => d);\n\n\t\tinvisibleAxisRef.selectAll('g.tick').attr('aria-label', (d) => d);\n\n\t\t// truncate the label if it's too long\n\t\t// only applies to discrete type\n\t\tif (\n\t\t\ttruncationType !== TruncationTypes.NONE &&\n\t\t\taxisScaleType === ScaleTypes.LABELS &&\n\t\t\t!userProvidedTickValues\n\t\t) {\n\t\t\tconst axisTickLabels = this.services.cartesianScales.getScaleDomain(\n\t\t\t\taxisPosition\n\t\t\t);\n\t\t\tif (axisTickLabels.length > 0) {\n\t\t\t\tconst tick_html = svg\n\t\t\t\t\t.select(`g.axis.${axisPosition} g.ticks g.tick`)\n\t\t\t\t\t.html();\n\n\t\t\t\tcontainer.selectAll('g.ticks g.tick').html(tick_html);\n\n\t\t\t\tcontainer\n\t\t\t\t\t.selectAll('g.tick text')\n\t\t\t\t\t.data(axisTickLabels)\n\t\t\t\t\t.text(function (d) {\n\t\t\t\t\t\tif (d.length > truncationThreshold) {\n\t\t\t\t\t\t\treturn Tools.truncateLabel(\n\t\t\t\t\t\t\t\td,\n\t\t\t\t\t\t\t\ttruncationType,\n\t\t\t\t\t\t\t\ttruncationNumCharacter\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn d;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\tthis.getInvisibleAxisRef()\n\t\t\t\t\t.selectAll('g.tick text')\n\t\t\t\t\t.data(axisTickLabels)\n\t\t\t\t\t.text(function (d) {\n\t\t\t\t\t\tif (d.length > truncationThreshold) {\n\t\t\t\t\t\t\treturn Tools.truncateLabel(\n\t\t\t\t\t\t\t\td,\n\t\t\t\t\t\t\t\ttruncationType,\n\t\t\t\t\t\t\t\ttruncationNumCharacter\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn d;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\tcontainer\n\t\t\t\t\t.selectAll('g.ticks')\n\t\t\t\t\t.html(this.getInvisibleAxisRef().html());\n\n\t\t\t\tcontainer.selectAll('g.tick text').data(axisTickLabels);\n\t\t\t}\n\t\t}\n\t\t// Add event listeners to elements drawn\n\t\tthis.addEventListeners();\n\t}\n\n\taddEventListeners() {\n\t\tconst svg = this.getComponentContainer();\n\t\tconst { position: axisPosition } = this.configs;\n\t\tconst container = DOMUtils.appendOrSelect(\n\t\t\tsvg,\n\t\t\t`g.axis.${axisPosition}`\n\t\t);\n\t\tconst options = this.getOptions();\n\t\tconst axisOptions = Tools.getProperty(options, 'axes', axisPosition);\n\t\tconst axisScaleType = Tools.getProperty(axisOptions, 'scaleType');\n\t\tconst truncationThreshold = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t'truncation',\n\t\t\t'threshold'\n\t\t);\n\n\t\tconst isTimeScaleType =\n\t\t\tthis.scaleType === ScaleTypes.TIME ||\n\t\t\taxisOptions.scaleType === ScaleTypes.TIME;\n\n\t\tconst self = this;\n\t\tcontainer\n\t\t\t.selectAll('g.tick text')\n\t\t\t.on('mouseover', function (event, datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(\n\t\t\t\t\tEvents.Axis.LABEL_MOUSEOVER,\n\t\t\t\t\t{\n\t\t\t\t\t\tevent,\n\t\t\t\t\t\telement: select(this),\n\t\t\t\t\t\tdatum,\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\tif (\n\t\t\t\t\taxisScaleType === ScaleTypes.LABELS &&\n\t\t\t\t\tdatum.length > truncationThreshold\n\t\t\t\t) {\n\t\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.SHOW, {\n\t\t\t\t\t\tevent,\n\t\t\t\t\t\thoveredElement: select(this),\n\t\t\t\t\t\tcontent: datum,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on('mousemove', function (event, datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(\n\t\t\t\t\tEvents.Axis.LABEL_MOUSEMOVE,\n\t\t\t\t\t{\n\t\t\t\t\t\tevent,\n\t\t\t\t\t\telement: select(this),\n\t\t\t\t\t\tdatum,\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\tif (\n\t\t\t\t\taxisScaleType === ScaleTypes.LABELS &&\n\t\t\t\t\tdatum.length > truncationThreshold\n\t\t\t\t) {\n\t\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.MOVE, {\n\t\t\t\t\t\tevent,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on('click', function (event, datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Axis.LABEL_CLICK, {\n\t\t\t\t\tevent,\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('mouseout', function (event, datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Axis.LABEL_MOUSEOUT, {\n\t\t\t\t\tevent,\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum,\n\t\t\t\t});\n\n\t\t\t\tif (axisScaleType === ScaleTypes.LABELS) {\n\t\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.HIDE);\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\tgetInvisibleAxisRef() {\n\t\tconst { position: axisPosition } = this.configs;\n\n\t\treturn this.getComponentContainer().select(\n\t\t\t`g.axis.${axisPosition} g.ticks.invisible`\n\t\t);\n\t}\n\n\tgetTitleRef() {\n\t\tconst { position: axisPosition } = this.configs;\n\n\t\treturn this.getComponentContainer().select(\n\t\t\t`g.axis.${axisPosition} text.axis-title`\n\t\t);\n\t}\n\n\tgetNumberOfFittingTicks(size, tickSize, spaceRatio) {\n\t\tconst numberOfTicksFit = Math.floor(size / (tickSize * spaceRatio));\n\t\treturn Tools.clamp(\n\t\t\tnumberOfTicksFit,\n\t\t\t2,\n\t\t\tConfiguration.axis.ticks.number\n\t\t);\n\t}\n\n\tdestroy() {\n\t\tconst svg = this.getComponentContainer();\n\t\tconst { position: axisPosition } = this.configs;\n\t\tconst container = DOMUtils.appendOrSelect(\n\t\t\tsvg,\n\t\t\t`g.axis.${axisPosition}`\n\t\t);\n\n\t\t// Remove event listeners\n\t\tcontainer\n\t\t\t.selectAll('g.tick text')\n\t\t\t.on('mouseover', null)\n\t\t\t.on('mousemove', null)\n\t\t\t.on('mouseout', null);\n\t}\n}\n"]}
@@ -23,12 +23,16 @@ var Component = /** @class */ (function () {
23
23
  this.setParent(select(this.services.domUtils.getMainContainer()));
24
24
  }
25
25
  }
26
- Component.prototype.init = function () { };
26
+ Component.prototype.init = function () {
27
+ // do nothing.
28
+ };
27
29
  Component.prototype.render = function (animate) {
28
30
  if (animate === void 0) { animate = true; }
29
31
  console.error('render() method is not implemented');
30
32
  };
31
- Component.prototype.destroy = function () { };
33
+ Component.prototype.destroy = function () {
34
+ // do nothing.
35
+ };
32
36
  // Used to pass down information to the components
33
37
  Component.prototype.setModel = function (newObj) {
34
38
  this.model = newObj;
@@ -1 +1 @@
1
- {"version":3,"file":"component.js","sourceRoot":"","sources":["component.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,aAAa;AACb,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,yCAAyC;AACzC,OAAO,QAAQ,MAAM,0CAA0C,CAAC;AAEhE;IAaC,mBAAY,KAAiB,EAAE,QAAa,EAAE,OAAa;QAXpD,eAAU,GAAG,WAAW,CAAC,IAAI,CAAC;QAM3B,YAAO,GAAQ,EAAE,CAAC;QAM3B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAEzB,IAAI,OAAO,EAAE;YACZ,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;YACvB,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE;gBACpB,IAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CACpC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EACvB,OAAO,EACP,QAAQ,CACR,CAAC;gBACF,IAAI,CAAC,EAAE,GAAM,WAAW,UAAK,IAAI,CAAC,OAAO,CAAC,EAAI,CAAC;aAC/C;SACD;QAED,oEAAoE;QACpE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACjB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;SAClE;IACF,CAAC;IAED,wBAAI,GAAJ,cAAQ,CAAC;IAET,0BAAM,GAAN,UAAO,OAAc;QAAd,wBAAA,EAAA,cAAc;QACpB,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACrD,CAAC;IAED,2BAAO,GAAP,cAAW,CAAC;IAEZ,kDAAkD;IAClD,4BAAQ,GAAR,UAAS,MAAM;QACd,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;IACrB,CAAC;IAED,kDAAkD;IAClD,+BAAW,GAAX,UAAY,MAAM;QACjB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC;IACxB,CAAC;IAED,6BAAS,GAAT,UAAU,MAAM;QACf,IAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,IAAI,SAAS,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE;YACpD,OAAO;SACP;QAED,IAAI,IAAI,CAAC,IAAI,EAAE;YACd,IAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CACpC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EACvB,OAAO,EACP,QAAQ,CACR,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,OAAO,CACf,QAAQ,CAAC,MAAM,UAAK,WAAW,UAAK,IAAI,CAAC,IAAM,EAClD,IAAI,CACJ,CAAC;YAEF,IAAI,SAAS,EAAE;gBACd,SAAS,CAAC,OAAO,CACb,QAAQ,CAAC,MAAM,UAAK,WAAW,UAAK,IAAI,CAAC,IAAM,EAClD,KAAK,CACL,CAAC;aACF;SACD;IACF,CAAC;IAED,6BAAS,GAAT;QACC,OAAO,IAAI,CAAC,MAAM,CAAC;IACpB,CAAC;IAED,yCAAqB,GAArB,UAAsB,OAAoC;QAApC,wBAAA,EAAA,YAAY,eAAe,EAAE,KAAK,EAAE;QACzD,IAAI,IAAI,CAAC,IAAI,EAAE;YACd,IAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CACpC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EACvB,OAAO,EACP,QAAQ,CACR,CAAC;YAEF,IAAM,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,MAAI,IAAI,CAAC,EAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAChD,IAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CACxC,IAAI,CAAC,MAAM,EACX,MACC,IAAI,CAAC,UAAU,KAAK,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IACjD,UAAU,SAAI,QAAQ,CAAC,MAAM,UAAK,WAAW,UAAK,IAAI,CAAC,IAAM,CAChE,CAAC;YAEF,IAAI,OAAO,CAAC,eAAe,EAAE;gBAC5B,mDAAmD;gBACnD,IAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;gBAElD,IAAI,WAAW,EAAE;oBAChB,IAAM,kBAAkB,GAAG,MAAM,CAAC,MAAI,WAAa,CAAC,CAAC;oBACrD,IAAM,sBAAsB,GAAG,kBAAkB,CAAC,MAAM,CACvD,MAAM,CACN,CAAC;oBAEF;;;uBAGG;oBACH,IACC,sBAAsB,CAAC,IAAI,EAAE,KAAK,CAAC;wBACnC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EACpD;wBACD,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,UAAQ,WAAW,MAAG,CAAC,CAAC;qBACpD;iBACD;aACD;YAED,OAAO,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;SAC9D;QAED,OAAO,IAAI,CAAC,MAAM,CAAC;IACpB,CAAC;IAED;;;;OAIG;IACH,8BAAU,GAAV;QACC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;YACzB,IAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAC1B,EAAE,EACF,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EACvB,IAAI,CAAC,OAAO,CAAC,OAAO,CACpB,CAAC;YACF,OAAO,OAAO,CAAC;SACf;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;IAChC,CAAC;IACF,gBAAC;AAAD,CAAC,AAlJD,IAkJC","sourcesContent":["// Internal Imports\nimport { ChartModel } from '../model/model';\nimport { DOMUtils } from '../services';\nimport { RenderTypes } from '../interfaces';\nimport { Tools } from '../tools';\n\n// D3 Imports\nimport { select } from 'd3-selection';\n\n// import the settings for the css prefix\nimport settings from 'carbon-components/es/globals/js/settings';\n\nexport class Component {\n\tpublic type: string;\n\tpublic renderType = RenderTypes.HTML;\n\n\tpublic id: string;\n\n\tprotected parent: any;\n\n\tprotected configs: any = {};\n\n\tprotected model: any;\n\tprotected services: any;\n\n\tconstructor(model: ChartModel, services: any, configs?: any) {\n\t\tthis.model = model;\n\t\tthis.services = services;\n\n\t\tif (configs) {\n\t\t\tthis.configs = configs;\n\t\t\tif (this.configs.id) {\n\t\t\t\tconst chartprefix = Tools.getProperty(\n\t\t\t\t\tthis.model.getOptions(),\n\t\t\t\t\t'style',\n\t\t\t\t\t'prefix'\n\t\t\t\t);\n\t\t\t\tthis.id = `${chartprefix}--${this.configs.id}`;\n\t\t\t}\n\t\t}\n\n\t\t// Set parent element to shell SVG if no parent exists for component\n\t\tif (!this.parent) {\n\t\t\tthis.setParent(select(this.services.domUtils.getMainContainer()));\n\t\t}\n\t}\n\n\tinit() {}\n\n\trender(animate = true) {\n\t\tconsole.error('render() method is not implemented');\n\t}\n\n\tdestroy() {}\n\n\t// Used to pass down information to the components\n\tsetModel(newObj) {\n\t\tthis.model = newObj;\n\t}\n\n\t// Used to pass down information to the components\n\tsetServices(newObj) {\n\t\tthis.services = newObj;\n\t}\n\n\tsetParent(parent) {\n\t\tconst oldParent = this.parent;\n\t\tthis.parent = parent;\n\n\t\tif (oldParent && oldParent.node() === parent.node()) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.type) {\n\t\t\tconst chartprefix = Tools.getProperty(\n\t\t\t\tthis.model.getOptions(),\n\t\t\t\t'style',\n\t\t\t\t'prefix'\n\t\t\t);\n\t\t\tthis.parent.classed(\n\t\t\t\t`${settings.prefix}--${chartprefix}--${this.type}`,\n\t\t\t\ttrue\n\t\t\t);\n\n\t\t\tif (oldParent) {\n\t\t\t\toldParent.classed(\n\t\t\t\t\t`${settings.prefix}--${chartprefix}--${this.type}`,\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tgetParent() {\n\t\treturn this.parent;\n\t}\n\n\tgetComponentContainer(configs = { withinChartClip: false }) {\n\t\tif (this.type) {\n\t\t\tconst chartprefix = Tools.getProperty(\n\t\t\t\tthis.model.getOptions(),\n\t\t\t\t'style',\n\t\t\t\t'prefix'\n\t\t\t);\n\n\t\t\tconst idSelector = this.id ? `#${this.id}` : '';\n\t\t\tconst container = DOMUtils.appendOrSelect(\n\t\t\t\tthis.parent,\n\t\t\t\t`${\n\t\t\t\t\tthis.renderType === RenderTypes.SVG ? 'svg' : 'div'\n\t\t\t\t}${idSelector}.${settings.prefix}--${chartprefix}--${this.type}`\n\t\t\t);\n\n\t\t\tif (configs.withinChartClip) {\n\t\t\t\t// get unique chartClipId int this chart from model\n\t\t\t\tconst chartClipId = this.model.get('chartClipId');\n\n\t\t\t\tif (chartClipId) {\n\t\t\t\t\tconst chartClipSelection = select(`#${chartClipId}`);\n\t\t\t\t\tconst chartClipRectSelection = chartClipSelection.select(\n\t\t\t\t\t\t'rect'\n\t\t\t\t\t);\n\n\t\t\t\t\t/*\n\t\t\t\t\t * these checks are needed because of a chrome bug\n\t\t\t\t\t * related to the rendering of the clip path\n\t\t\t\t\t */\n\t\t\t\t\tif (\n\t\t\t\t\t\tchartClipRectSelection.size() !== 0 &&\n\t\t\t\t\t\tparseFloat(chartClipRectSelection.attr('height')) > 0\n\t\t\t\t\t) {\n\t\t\t\t\t\tcontainer.attr('clip-path', `url(#${chartClipId})`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn container.attr('width', '100%').attr('height', '100%');\n\t\t}\n\n\t\treturn this.parent;\n\t}\n\n\t/**\n\t * graphs used in combo charts share a model with global options but can receive their own local options.\n\t * this function retrieves the global options and merges it with any options passed into this\n\t * component's config.options object.\n\t */\n\tgetOptions() {\n\t\tif (this.configs.options) {\n\t\t\tconst options = Tools.merge(\n\t\t\t\t{},\n\t\t\t\tthis.model.getOptions(),\n\t\t\t\tthis.configs.options\n\t\t\t);\n\t\t\treturn options;\n\t\t}\n\t\treturn this.model.getOptions();\n\t}\n}\n"]}
1
+ {"version":3,"file":"component.js","sourceRoot":"","sources":["component.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { ChartModel } from '../model/model';\nimport { DOMUtils } from '../services';\nimport { RenderTypes } from '../interfaces';\nimport { Tools } from '../tools';\n\n// D3 Imports\nimport { select } from 'd3-selection';\n\n// import the settings for the css prefix\nimport settings from 'carbon-components/es/globals/js/settings';\n\nexport class Component {\n\tpublic type: string;\n\tpublic renderType = RenderTypes.HTML;\n\n\tpublic id: string;\n\n\tprotected parent: any;\n\n\tprotected configs: any = {};\n\n\tprotected model: any;\n\tprotected services: any;\n\n\tconstructor(model: ChartModel, services: any, configs?: any) {\n\t\tthis.model = model;\n\t\tthis.services = services;\n\n\t\tif (configs) {\n\t\t\tthis.configs = configs;\n\t\t\tif (this.configs.id) {\n\t\t\t\tconst chartprefix = Tools.getProperty(\n\t\t\t\t\tthis.model.getOptions(),\n\t\t\t\t\t'style',\n\t\t\t\t\t'prefix'\n\t\t\t\t);\n\t\t\t\tthis.id = `${chartprefix}--${this.configs.id}`;\n\t\t\t}\n\t\t}\n\n\t\t// Set parent element to shell SVG if no parent exists for component\n\t\tif (!this.parent) {\n\t\t\tthis.setParent(select(this.services.domUtils.getMainContainer()));\n\t\t}\n\t}\n\n\tinit() {\n\t\t// do nothing.\n\t}\n\n\trender(animate = true) {\n\t\tconsole.error('render() method is not implemented');\n\t}\n\n\tdestroy() {\n\t\t// do nothing.\n\t}\n\n\t// Used to pass down information to the components\n\tsetModel(newObj) {\n\t\tthis.model = newObj;\n\t}\n\n\t// Used to pass down information to the components\n\tsetServices(newObj) {\n\t\tthis.services = newObj;\n\t}\n\n\tsetParent(parent) {\n\t\tconst oldParent = this.parent;\n\t\tthis.parent = parent;\n\n\t\tif (oldParent && oldParent.node() === parent.node()) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.type) {\n\t\t\tconst chartprefix = Tools.getProperty(\n\t\t\t\tthis.model.getOptions(),\n\t\t\t\t'style',\n\t\t\t\t'prefix'\n\t\t\t);\n\t\t\tthis.parent.classed(\n\t\t\t\t`${settings.prefix}--${chartprefix}--${this.type}`,\n\t\t\t\ttrue\n\t\t\t);\n\n\t\t\tif (oldParent) {\n\t\t\t\toldParent.classed(\n\t\t\t\t\t`${settings.prefix}--${chartprefix}--${this.type}`,\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tgetParent() {\n\t\treturn this.parent;\n\t}\n\n\tgetComponentContainer(configs = { withinChartClip: false }) {\n\t\tif (this.type) {\n\t\t\tconst chartprefix = Tools.getProperty(\n\t\t\t\tthis.model.getOptions(),\n\t\t\t\t'style',\n\t\t\t\t'prefix'\n\t\t\t);\n\n\t\t\tconst idSelector = this.id ? `#${this.id}` : '';\n\t\t\tconst container = DOMUtils.appendOrSelect(\n\t\t\t\tthis.parent,\n\t\t\t\t`${\n\t\t\t\t\tthis.renderType === RenderTypes.SVG ? 'svg' : 'div'\n\t\t\t\t}${idSelector}.${settings.prefix}--${chartprefix}--${this.type}`\n\t\t\t);\n\n\t\t\tif (configs.withinChartClip) {\n\t\t\t\t// get unique chartClipId int this chart from model\n\t\t\t\tconst chartClipId = this.model.get('chartClipId');\n\n\t\t\t\tif (chartClipId) {\n\t\t\t\t\tconst chartClipSelection = select(`#${chartClipId}`);\n\t\t\t\t\tconst chartClipRectSelection = chartClipSelection.select(\n\t\t\t\t\t\t'rect'\n\t\t\t\t\t);\n\n\t\t\t\t\t/*\n\t\t\t\t\t * these checks are needed because of a chrome bug\n\t\t\t\t\t * related to the rendering of the clip path\n\t\t\t\t\t */\n\t\t\t\t\tif (\n\t\t\t\t\t\tchartClipRectSelection.size() !== 0 &&\n\t\t\t\t\t\tparseFloat(chartClipRectSelection.attr('height')) > 0\n\t\t\t\t\t) {\n\t\t\t\t\t\tcontainer.attr('clip-path', `url(#${chartClipId})`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn container.attr('width', '100%').attr('height', '100%');\n\t\t}\n\n\t\treturn this.parent;\n\t}\n\n\t/**\n\t * graphs used in combo charts share a model with global options but can receive their own local options.\n\t * this function retrieves the global options and merges it with any options passed into this\n\t * component's config.options object.\n\t */\n\tgetOptions() {\n\t\tif (this.configs.options) {\n\t\t\tconst options = Tools.merge(\n\t\t\t\t{},\n\t\t\t\tthis.model.getOptions(),\n\t\t\t\tthis.configs.options\n\t\t\t);\n\t\t\treturn options;\n\t\t}\n\t\treturn this.model.getOptions();\n\t}\n}\n"]}
@@ -6,7 +6,6 @@ export declare class Modal extends Component {
6
6
  modal: any;
7
7
  constructor(model: ChartModel, services: any, configs?: any);
8
8
  handleShowModal: () => void;
9
- handleHideModal: () => void;
10
9
  addEventListeners(): void;
11
10
  removeEventListeners(): void;
12
11
  getModalHTML(): string;
@@ -37,21 +37,16 @@ var Modal = /** @class */ (function (_super) {
37
37
  var modalInstance = CarbonModalComponent.create(_this.modal.node());
38
38
  modalInstance.show();
39
39
  };
40
- _this.handleHideModal = function () { };
41
40
  _this.init();
42
41
  return _this;
43
42
  }
44
43
  Modal.prototype.addEventListeners = function () {
45
44
  // listen to show-modal Custom Events to render the modal
46
45
  this.services.events.addEventListener(Events.Modal.SHOW, this.handleShowModal);
47
- // listen to hide-modal Custom Events to hide the modal
48
- this.services.events.addEventListener(Events.Modal.HIDE, this.handleHideModal);
49
46
  };
50
47
  Modal.prototype.removeEventListeners = function () {
51
48
  // remove show-modal Custom Events
52
49
  this.services.events.removeEventListener(Events.Modal.SHOW, this.handleShowModal);
53
- // remove hide-modal Custom Events
54
- this.services.events.removeEventListener(Events.Modal.HIDE, this.handleHideModal);
55
50
  };
56
51
  Modal.prototype.getModalHTML = function () {
57
52
  var options = this.model.getOptions();
@@ -1 +1 @@
1
- {"version":3,"file":"modal.js","sourceRoot":"","sources":["modal.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component } from '../component';\nimport { Tools } from '../../tools';\nimport { DOMUtils } from '../../services';\nimport { ChartModel } from '../../model/model';\nimport { Events, ScaleTypes } from '../../interfaces';\n\n// Carbon modal\nimport { Modal as CarbonModalComponent } from 'carbon-components';\n\n// import the settings for the css prefix\nimport settings from 'carbon-components/es/globals/js/settings';\n\n// D3 Imports\nimport { select } from 'd3-selection';\n\n// date formatting\nimport { format } from 'date-fns';\n\nimport { get } from 'lodash-es';\n\nexport class Modal extends Component {\n\ttype = 'modal';\n\n\t// flag for checking whether tooltip event listener is added or not\n\tisEventListenerAdded = false;\n\tmodal: any;\n\n\tconstructor(model: ChartModel, services: any, configs?: any) {\n\t\tsuper(model, services, configs);\n\n\t\tthis.init();\n\t}\n\n\thandleShowModal = () => {\n\t\tthis.modal.html(this.getModalHTML());\n\t\tthis.modal\n\t\t\t.select('div.bx--modal-footer button.bx--btn')\n\t\t\t.on('click', () => this.model.exportToCSV());\n\n\t\tconst modalInstance = CarbonModalComponent.create(this.modal.node());\n\t\tmodalInstance.show();\n\t};\n\n\thandleHideModal = () => {};\n\n\taddEventListeners() {\n\t\t// listen to show-modal Custom Events to render the modal\n\t\tthis.services.events.addEventListener(\n\t\t\tEvents.Modal.SHOW,\n\t\t\tthis.handleShowModal\n\t\t);\n\n\t\t// listen to hide-modal Custom Events to hide the modal\n\t\tthis.services.events.addEventListener(\n\t\t\tEvents.Modal.HIDE,\n\t\t\tthis.handleHideModal\n\t\t);\n\t}\n\n\tremoveEventListeners() {\n\t\t// remove show-modal Custom Events\n\t\tthis.services.events.removeEventListener(\n\t\t\tEvents.Modal.SHOW,\n\t\t\tthis.handleShowModal\n\t\t);\n\n\t\t// remove hide-modal Custom Events\n\t\tthis.services.events.removeEventListener(\n\t\t\tEvents.Modal.HIDE,\n\t\t\tthis.handleHideModal\n\t\t);\n\t}\n\n\tgetModalHTML() {\n\t\tconst options = this.model.getOptions();\n\n\t\tconst chartprefix = Tools.getProperty(options, 'style', 'prefix');\n\n\t\tconst tableArray = this.model.getTabularDataArray();\n\n\t\treturn `\n\t\t<div class=\"bx--modal-container\">\n\t\t\t<div class=\"bx--modal-header\">\n\t\t\t\t<p class=\"bx--modal-header__label bx--type-delta\" id=\"modal-title\">Tabular representation</p>\n\t\t\t\t<p class=\"bx--modal-header__heading bx--type-beta\" id=\"modal-description\">${\n\t\t\t\t\toptions.title\n\t\t\t\t}</p>\n\t\t\t\t<button class=\"bx--modal-close\" type=\"button\" data-modal-close aria-label=\"close modal\" data-modal-primary-focus>\n\t\t\t\t\t<svg focusable=\"false\" preserveAspectRatio=\"xMidYMid meet\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"currentColor\" aria-label=\"Close\" width=\"20\" height=\"20\" viewBox=\"0 0 32 32\" role=\"img\" class=\"bx--modal-close__icon\">\n\t\t\t\t\t\t<path d=\"M24 9.4L22.6 8 16 14.6 9.4 8 8 9.4 14.6 16 8 22.6 9.4 24 16 17.4 22.6 24 24 22.6 17.4 16 24 9.4z\"></path>\n\t\t\t\t\t</svg>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t\t<div class=\"bx--modal-content\"><table class=\"bx--data-table bx--data-table--no-border\">\n\t\t\t\t\t<thead>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t${get(tableArray, 0)\n\t\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\t\t(heading) => `<th scope=\"col\">\n\t\t\t\t\t\t\t\t<div class=\"bx--table-header-label\">${heading}</div>\n\t\t\t\t\t\t\t</th>`\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t.join('')}\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</thead>\n\t\t\t\t\t<tbody>${tableArray\n\t\t\t\t\t\t.slice(1)\n\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t(row) => `\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t${row.map((column) => `<td>${column}</td>`).join('')}\n\t\t\t\t\t\t\t</tr>`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join('')}\n\t\t\t\t\t</tbody>\n\t\t\t\t</table>\n\t\t\t</div>\n\t\t\t<div class=\"bx--modal-footer\">\n\t\t\t <div class=\"${settings.prefix}--${chartprefix}-modal-footer-spacer\"></div>\n\t\t\t <button class=\"bx--btn bx--btn--primary\" type=\"button\" data-modal-primary-focus>Download as CSV</button>\n\t\t\t</div>\n\t\t</div>`;\n\t}\n\n\trender() {\n\t\tconst options = this.model.getOptions();\n\t\tif (!this.isEventListenerAdded) {\n\t\t\t// Grab the tooltip element\n\t\t\tconst holder = select(this.services.domUtils.getHolder());\n\t\t\tconst chartprefix = Tools.getProperty(options, 'style', 'prefix');\n\t\t\tthis.modal = DOMUtils.appendOrSelect(\n\t\t\t\tholder,\n\t\t\t\t`div.${settings.prefix}--${chartprefix}--modal`\n\t\t\t);\n\n\t\t\tthis.addEventListeners();\n\t\t\tthis.isEventListenerAdded = true;\n\t\t\tthis.modal\n\t\t\t\t.attr('data-modal', true)\n\t\t\t\t.attr('class', 'bx--modal')\n\t\t\t\t.attr('role', 'dialog')\n\t\t\t\t.attr('aria-modal', true)\n\t\t\t\t.attr('aria-labelledby', 'modal-title')\n\t\t\t\t.attr('aria-describedby', 'modal-description')\n\t\t\t\t.attr('tabindex', -1);\n\t\t}\n\t}\n\n\tdestroy() {\n\t\t// remove tooltip eventListener\n\t\tthis.removeEventListeners();\n\t\tthis.isEventListenerAdded = false;\n\t}\n}\n"]}
1
+ {"version":3,"file":"modal.js","sourceRoot":"","sources":["modal.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component } from '../component';\nimport { Tools } from '../../tools';\nimport { DOMUtils } from '../../services';\nimport { ChartModel } from '../../model/model';\nimport { Events } from '../../interfaces';\n\n// Carbon modal\nimport { Modal as CarbonModalComponent } from 'carbon-components';\n\n// import the settings for the css prefix\nimport settings from 'carbon-components/es/globals/js/settings';\n\n// D3 Imports\nimport { select } from 'd3-selection';\n\nimport { get } from 'lodash-es';\n\nexport class Modal extends Component {\n\ttype = 'modal';\n\n\t// flag for checking whether tooltip event listener is added or not\n\tisEventListenerAdded = false;\n\tmodal: any;\n\n\tconstructor(model: ChartModel, services: any, configs?: any) {\n\t\tsuper(model, services, configs);\n\n\t\tthis.init();\n\t}\n\n\thandleShowModal = () => {\n\t\tthis.modal.html(this.getModalHTML());\n\t\tthis.modal\n\t\t\t.select('div.bx--modal-footer button.bx--btn')\n\t\t\t.on('click', () => this.model.exportToCSV());\n\n\t\tconst modalInstance = CarbonModalComponent.create(this.modal.node());\n\t\tmodalInstance.show();\n\t};\n\n\taddEventListeners() {\n\t\t// listen to show-modal Custom Events to render the modal\n\t\tthis.services.events.addEventListener(\n\t\t\tEvents.Modal.SHOW,\n\t\t\tthis.handleShowModal\n\t\t);\n\t}\n\n\tremoveEventListeners() {\n\t\t// remove show-modal Custom Events\n\t\tthis.services.events.removeEventListener(\n\t\t\tEvents.Modal.SHOW,\n\t\t\tthis.handleShowModal\n\t\t);\n\t}\n\n\tgetModalHTML() {\n\t\tconst options = this.model.getOptions();\n\n\t\tconst chartprefix = Tools.getProperty(options, 'style', 'prefix');\n\n\t\tconst tableArray = this.model.getTabularDataArray();\n\n\t\treturn `\n\t\t<div class=\"bx--modal-container\">\n\t\t\t<div class=\"bx--modal-header\">\n\t\t\t\t<p class=\"bx--modal-header__label bx--type-delta\" id=\"modal-title\">Tabular representation</p>\n\t\t\t\t<p class=\"bx--modal-header__heading bx--type-beta\" id=\"modal-description\">${\n\t\t\t\t\toptions.title\n\t\t\t\t}</p>\n\t\t\t\t<button class=\"bx--modal-close\" type=\"button\" data-modal-close aria-label=\"close modal\" data-modal-primary-focus>\n\t\t\t\t\t<svg focusable=\"false\" preserveAspectRatio=\"xMidYMid meet\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"currentColor\" aria-label=\"Close\" width=\"20\" height=\"20\" viewBox=\"0 0 32 32\" role=\"img\" class=\"bx--modal-close__icon\">\n\t\t\t\t\t\t<path d=\"M24 9.4L22.6 8 16 14.6 9.4 8 8 9.4 14.6 16 8 22.6 9.4 24 16 17.4 22.6 24 24 22.6 17.4 16 24 9.4z\"></path>\n\t\t\t\t\t</svg>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t\t<div class=\"bx--modal-content\"><table class=\"bx--data-table bx--data-table--no-border\">\n\t\t\t\t\t<thead>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t${get(tableArray, 0)\n\t\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\t\t(heading) => `<th scope=\"col\">\n\t\t\t\t\t\t\t\t<div class=\"bx--table-header-label\">${heading}</div>\n\t\t\t\t\t\t\t</th>`\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t.join('')}\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</thead>\n\t\t\t\t\t<tbody>${tableArray\n\t\t\t\t\t\t.slice(1)\n\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t(row) => `\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t${row.map((column) => `<td>${column}</td>`).join('')}\n\t\t\t\t\t\t\t</tr>`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join('')}\n\t\t\t\t\t</tbody>\n\t\t\t\t</table>\n\t\t\t</div>\n\t\t\t<div class=\"bx--modal-footer\">\n\t\t\t <div class=\"${settings.prefix}--${chartprefix}-modal-footer-spacer\"></div>\n\t\t\t <button class=\"bx--btn bx--btn--primary\" type=\"button\" data-modal-primary-focus>Download as CSV</button>\n\t\t\t</div>\n\t\t</div>`;\n\t}\n\n\trender() {\n\t\tconst options = this.model.getOptions();\n\t\tif (!this.isEventListenerAdded) {\n\t\t\t// Grab the tooltip element\n\t\t\tconst holder = select(this.services.domUtils.getHolder());\n\t\t\tconst chartprefix = Tools.getProperty(options, 'style', 'prefix');\n\t\t\tthis.modal = DOMUtils.appendOrSelect(\n\t\t\t\tholder,\n\t\t\t\t`div.${settings.prefix}--${chartprefix}--modal`\n\t\t\t);\n\n\t\t\tthis.addEventListeners();\n\t\t\tthis.isEventListenerAdded = true;\n\t\t\tthis.modal\n\t\t\t\t.attr('data-modal', true)\n\t\t\t\t.attr('class', 'bx--modal')\n\t\t\t\t.attr('role', 'dialog')\n\t\t\t\t.attr('aria-modal', true)\n\t\t\t\t.attr('aria-labelledby', 'modal-title')\n\t\t\t\t.attr('aria-describedby', 'modal-description')\n\t\t\t\t.attr('tabindex', -1);\n\t\t}\n\t}\n\n\tdestroy() {\n\t\t// remove tooltip eventListener\n\t\tthis.removeEventListeners();\n\t\tthis.isEventListenerAdded = false;\n\t}\n}\n"]}
@@ -146,7 +146,7 @@ var StackedBar = /** @class */ (function (_super) {
146
146
  y1 += d[1] === 0 ? 2 : 1;
147
147
  }
148
148
  else {
149
- y1 -= d[1] === 0 ? 1 : 1;
149
+ y1 -= 1;
150
150
  }
151
151
  }
152
152
  else if (!barIsNegative) {
@@ -1 +1 @@
1
- {"version":3,"file":"bar-stacked.js","sourceRoot":"","sources":["bar-stacked.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,mBAAmB;AACnB,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EACN,KAAK,EACL,MAAM,EACN,qBAAqB,EACrB,mBAAmB,EACnB,WAAW,GACX,MAAM,kBAAkB,CAAC;AAE1B,aAAa;AACb,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC;IAAgC,8BAAG;IAAnC;QAAA,qEA2SC;QA1SA,UAAI,GAAG,aAAa,CAAC;QACrB,gBAAU,GAAG,WAAW,CAAC,GAAG,CAAC;QAqJ7B,wDAAwD;QACxD,yBAAmB,GAAG,UAAC,KAAkB;YAChC,IAAA,4CAAc,CAAkB;YAEhC,IAAA,uDAAW,CAAkC;YAErD,KAAI,CAAC,MAAM;iBACT,SAAS,CAAC,UAAU,CAAC;iBACrB,UAAU,CAAC,kBAAkB,CAAC;iBAC9B,IAAI,CAAC,UAAC,CAAC;gBACP,OAAA,KAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,eAAe,CAAC;oBACzC,UAAU,EAAE,CAAC;oBACb,IAAI,EAAE,kBAAkB;iBACxB,CAAC;YAHF,CAGE,CACF;iBACA,IAAI,CAAC,SAAS,EAAE,UAAC,CAAC;gBAClB,OAAA,CAAC,CAAC,WAAW,CAAC,KAAK,cAAc,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAA3D,CAA2D,CAC3D,CAAC;QACJ,CAAC,CAAC;QAEF,4BAA4B;QAC5B,0BAAoB,GAAG,UAAC,KAAkB;YACzC,KAAI,CAAC,MAAM;iBACT,SAAS,CAAC,UAAU,CAAC;iBACrB,UAAU,CAAC,qBAAqB,CAAC;iBACjC,IAAI,CAAC,UAAC,CAAC;gBACP,OAAA,KAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,eAAe,CAAC;oBACzC,UAAU,EAAE,CAAC;oBACb,IAAI,EAAE,qBAAqB;iBAC3B,CAAC;YAHF,CAGE,CACF;iBACA,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QACtB,CAAC,CAAC;;IAoHH,CAAC;IAvSA,yBAAI,GAAJ;QACC,IAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAE5C,iDAAiD;QACjD,cAAc,CAAC,gBAAgB,CAC9B,MAAM,CAAC,MAAM,CAAC,UAAU,EACxB,IAAI,CAAC,mBAAmB,CACxB,CAAC;QAEF,gDAAgD;QAChD,cAAc,CAAC,gBAAgB,CAC9B,MAAM,CAAC,MAAM,CAAC,aAAa,EAC3B,IAAI,CAAC,oBAAoB,CACzB,CAAC;IACH,CAAC;IAED,2BAAM,GAAN,UAAO,OAAgB;QAAvB,iBAiIC;QAhIA,qBAAqB;QACrB,IAAM,GAAG,GAAG,IAAI,CAAC,qBAAqB,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;QAElE,uDAAuD;QACvD,IAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,IAAA,sCAAW,CAAkB;QAErC,+DAA+D;QAC/D,IAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC;YAC3C,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;YAC3B,SAAS,EAAE,IAAI;SACf,CAAC,CAAC;QAEH,IAAM,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,uBAAuB,EAAE,CAAC;QAElE,gCAAgC;QAChC,IAAM,SAAS,GAAG,GAAG;aACnB,SAAS,CAAC,QAAQ,CAAC;aACnB,IAAI,CAAC,SAAS,EAAE,UAAC,CAAC,IAAK,OAAA,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,EAApC,CAAoC,CAAC,CAAC;QAE/D,yCAAyC;QACzC,iDAAiD;QACjD,0DAA0D;QAC1D,4BAA4B;QAC5B,SAAS,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAE7C,4CAA4C;QAC5C,SAAS;aACP,KAAK,EAAE;aACP,MAAM,CAAC,GAAG,CAAC;aACX,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC;aACrB,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC;aACzB,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAE5B,0BAA0B;QAC1B,IAAM,IAAI,GAAG,GAAG;aACd,SAAS,CAAC,QAAQ,CAAC;aACnB,SAAS,CAAC,UAAU,CAAC;aACrB,IAAI,CACJ,UAAC,CAAC,IAAK,OAAA,CAAC,EAAD,CAAC,EACR,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,IAAI,CAAC,cAAc,EAArB,CAAqB,CAC5B,CAAC;QAEH,sCAAsC;QACtC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;QAErB,IAAI,CAAC,KAAK,EAAE;aACV,MAAM,CAAC,MAAM,CAAC;aACd,KAAK,CAAC,IAAI,CAAC;aACX,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;aACpB,UAAU,EAAE;aACZ,IAAI,CAAC,UAAC,CAAC;YACP,OAAA,KAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,eAAe,CAAC;gBACzC,UAAU,EAAE,CAAC;gBACb,IAAI,EAAE,kBAAkB;gBACxB,OAAO,SAAA;aACP,CAAC;QAJF,CAIE,CACF;aACA,IAAI,CAAC,OAAO,EAAE,UAAC,CAAC;YAChB,OAAA,KAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC;gBAC5B,cAAc,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC;gBAC1C,aAAa,EAAE,CAAC,CAAC,WAAW,CAAC;gBAC7B,iBAAiB,EAAE,KAAK;aACxB,CAAC;QAJF,CAIE,CACF;aACA,KAAK,CAAC,MAAM,EAAE,UAAC,CAAC,IAAK,OAAA,KAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,EAAvC,CAAuC,CAAC;aAC7D,IAAI,CAAC,GAAG,EAAE,UAAC,CAAC,EAAE,CAAC;YACf,IAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;YAElC;;;;;eAKG;YACH,IAAM,QAAQ,GAAG,KAAI,CAAC,WAAW,EAAE,CAAC;YACpC,IAAM,EAAE,GACP,KAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,CAAC;gBACpD,QAAQ,GAAG,CAAC,CAAC;YACd,IAAM,EAAE,GAAG,EAAE,GAAG,QAAQ,CAAC;YACzB,IAAI,EAAE,GAAG,KAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9D,IAAI,EAAE,GAAG,KAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAE9D,kDAAkD;YAClD,IAAI,KAAI,CAAC,qBAAqB,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE;gBACvC,OAAO;aACP;YAED,sBAAsB;YACtB,IACC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC;gBACrB,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,EAC3C;gBACD,IAAM,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC5C,IAAI,aAAa,IAAI,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE;oBACrD,IACC,KAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,cAAc,EAAE;wBAC9C,qBAAqB,CAAC,QAAQ,EAC7B;wBACD,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;qBACzB;yBAAM;wBACN,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;qBACzB;iBACD;qBAAM,IAAI,CAAC,aAAa,EAAE;oBAC1B,IACC,KAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,cAAc,EAAE;wBAC9C,qBAAqB,CAAC,QAAQ,EAC7B;wBACD,EAAE,IAAI,CAAC,CAAC;qBACR;yBAAM;wBACN,EAAE,IAAI,CAAC,CAAC;qBACR;iBACD;aACD;YAED,OAAO,KAAK,CAAC,qBAAqB,CACjC,EAAE,EAAE,IAAA,EAAE,EAAE,IAAA,EAAE,EAAE,IAAA,EAAE,EAAE,IAAA,EAAE,EAClB,KAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,cAAc,EAAE,CAC9C,CAAC;QACH,CAAC,CAAC;aACD,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YACnB,OAAO;aACN,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,eAAe,CAAC;aACnC,IAAI,CAAC,sBAAsB,EAAE,KAAK,CAAC;aACnC,IAAI,CAAC,YAAY,EAAE,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAX,CAAW,CAAC,CAAC;QAEzC,6CAA6C;QAC7C,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC1B,CAAC;IAoCD,sCAAiB,GAAjB;QACC,IAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,IAAA,sCAAW,CAAkB;QAErC,IAAM,IAAI,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,MAAM;aACT,SAAS,CAAC,UAAU,CAAC;aACrB,EAAE,CAAC,WAAW,EAAE,UAAU,KAAK,EAAE,KAAK;;YACtC,IAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YACpC,cAAc,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAExC,uBAAuB;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE;gBAC5D,KAAK,OAAA;gBACL,OAAO,EAAE,cAAc;gBACvB,KAAK,OAAA;aACL,CAAC,CAAC;YAEH,IAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAC5C,IAAI,CAAC,OAAO,CAAC,MAAM,CACnB,CAAC;YAEF,IAAI,iBAAiB,GAAG,WAAW,CAAC,IAAI,CAAC,UAAC,CAAC;gBAC1C,IAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,mBAAmB,CACzE,CAAC,CACD,CAAC;gBACF,IAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,kBAAkB,CACvE,CAAC,CACD,CAAC;gBACF,OAAO,CACN,CAAC,CAAC,eAAe,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;oBACrD,CAAC,CAAC,gBAAgB,CAAC,CAAC,QAAQ,EAAE;wBAC7B,KAAK,CAAC,IAAI,CAAC,cAAc;oBAC1B,CAAC,CAAC,WAAW,CAAC,KAAK,KAAK,CAAC,WAAW,CAAC,CACrC,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,IAAI,iBAAiB,KAAK,SAAS,EAAE;gBACpC,uCAAuC;gBACvC,IAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,mBAAmB,EAAE,CAAC;gBAC7E,IAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,kBAAkB,EAAE,CAAC;gBAC3E,iBAAiB;oBAChB,GAAC,gBAAgB,IAAG,KAAK,CAAC,IAAI,CAAC,cAAc;oBAC7C,GAAC,eAAe,IAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;oBACjD,GAAC,WAAW,IAAG,KAAK,CAAC,WAAW,CAAC;uBACjC,CAAC;aACF;YAED,eAAe;YACf,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE;gBACvD,KAAK,OAAA;gBACL,cAAc,gBAAA;gBACd,IAAI,EAAE,CAAC,iBAAiB,CAAC;aACzB,CAAC,CAAC;QACJ,CAAC,CAAC;aACD,EAAE,CAAC,WAAW,EAAE,UAAU,KAAK,EAAE,KAAK;YACtC,IAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YAEpC,uBAAuB;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE;gBAC5D,KAAK,OAAA;gBACL,OAAO,EAAE,cAAc;gBACvB,KAAK,OAAA;aACL,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE;gBACvD,KAAK,OAAA;aACL,CAAC,CAAC;QACJ,CAAC,CAAC;aACD,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,EAAE,KAAK;YAClC,uBAAuB;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE;gBACxD,KAAK,OAAA;gBACL,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC;gBACrB,KAAK,OAAA;aACL,CAAC,CAAC;QACJ,CAAC,CAAC;aACD,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,EAAE,KAAK;YACrC,IAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YACpC,cAAc,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAEzC,uBAAuB;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE;gBAC3D,KAAK,OAAA;gBACL,OAAO,EAAE,cAAc;gBACvB,KAAK,OAAA;aACL,CAAC,CAAC;YAEH,eAAe;YACf,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE;gBACvD,cAAc,gBAAA;aACd,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,4BAAO,GAAP;QACC,yBAAyB;QACzB,IAAI,CAAC,MAAM;aACT,SAAS,CAAC,UAAU,CAAC;aACrB,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC;aACrB,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC;aACrB,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAEvB,0BAA0B;QAC1B,IAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC5C,cAAc,CAAC,mBAAmB,CACjC,MAAM,CAAC,MAAM,CAAC,UAAU,EACxB,IAAI,CAAC,mBAAmB,CACxB,CAAC;QACF,cAAc,CAAC,mBAAmB,CACjC,MAAM,CAAC,MAAM,CAAC,aAAa,EAC3B,IAAI,CAAC,oBAAoB,CACzB,CAAC;IACH,CAAC;IACF,iBAAC;AAAD,CAAC,AA3SD,CAAgC,GAAG,GA2SlC","sourcesContent":["// Internal Imports\nimport { Tools } from '../../tools';\nimport { Bar } from './bar';\nimport {\n\tRoles,\n\tEvents,\n\tCartesianOrientations,\n\tColorClassNameTypes,\n\tRenderTypes,\n} from '../../interfaces';\n\n// D3 Imports\nimport { select } from 'd3-selection';\n\nexport class StackedBar extends Bar {\n\ttype = 'stacked-bar';\n\trenderType = RenderTypes.SVG;\n\n\tinit() {\n\t\tconst eventsFragment = this.services.events;\n\n\t\t// Highlight correct circle on legend item hovers\n\t\teventsFragment.addEventListener(\n\t\t\tEvents.Legend.ITEM_HOVER,\n\t\t\tthis.handleLegendOnHover\n\t\t);\n\n\t\t// Un-highlight circles on legend item mouseouts\n\t\teventsFragment.addEventListener(\n\t\t\tEvents.Legend.ITEM_MOUSEOUT,\n\t\t\tthis.handleLegendMouseOut\n\t\t);\n\t}\n\n\trender(animate: boolean) {\n\t\t// Grab container SVG\n\t\tconst svg = this.getComponentContainer({ withinChartClip: true });\n\n\t\t// Chart options mixed with the internal configurations\n\t\tconst options = this.getOptions();\n\t\tconst { groupMapsTo } = options.data;\n\n\t\t// Create the data and keys that'll be used by the stack layout\n\t\tconst stackData = this.model.getStackedData({\n\t\t\tgroups: this.configs.groups,\n\t\t\tdivergent: true,\n\t\t});\n\n\t\tconst activeDataGroupNames = this.model.getActiveDataGroupNames();\n\n\t\t// Update data on all bar groups\n\t\tconst barGroups = svg\n\t\t\t.selectAll('g.bars')\n\t\t\t.data(stackData, (d) => Tools.getProperty(d, 0, groupMapsTo));\n\n\t\t// Remove elements that need to be exited\n\t\t// We need exit at the top here to make sure that\n\t\t// Data filters are processed before entering new elements\n\t\t// Or updating existing ones\n\t\tbarGroups.exit().attr('opacity', 0).remove();\n\n\t\t// Add bar groups that need to be introduced\n\t\tbarGroups\n\t\t\t.enter()\n\t\t\t.append('g')\n\t\t\t.classed('bars', true)\n\t\t\t.attr('role', Roles.GROUP)\n\t\t\t.attr('data-name', 'bars');\n\n\t\t// Update data on all bars\n\t\tconst bars = svg\n\t\t\t.selectAll('g.bars')\n\t\t\t.selectAll('path.bar')\n\t\t\t.data(\n\t\t\t\t(d) => d,\n\t\t\t\t(d) => d.data.sharedStackKey\n\t\t\t);\n\n\t\t// Remove bars that need to be removed\n\t\tbars.exit().remove();\n\n\t\tbars.enter()\n\t\t\t.append('path')\n\t\t\t.merge(bars)\n\t\t\t.classed('bar', true)\n\t\t\t.transition()\n\t\t\t.call((t) =>\n\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\ttransition: t,\n\t\t\t\t\tname: 'bar-update-enter',\n\t\t\t\t\tanimate,\n\t\t\t\t})\n\t\t\t)\n\t\t\t.attr('class', (d) =>\n\t\t\t\tthis.model.getColorClassName({\n\t\t\t\t\tclassNameTypes: [ColorClassNameTypes.FILL],\n\t\t\t\t\tdataGroupName: d[groupMapsTo],\n\t\t\t\t\toriginalClassName: 'bar',\n\t\t\t\t})\n\t\t\t)\n\t\t\t.style('fill', (d) => this.model.getFillColor(d[groupMapsTo]))\n\t\t\t.attr('d', (d, i) => {\n\t\t\t\tconst key = d.data.sharedStackKey;\n\n\t\t\t\t/*\n\t\t\t\t * Orientation support for horizontal/vertical bar charts\n\t\t\t\t * Determine coordinates needed for a vertical set of paths\n\t\t\t\t * to draw the bars needed, and pass those coordinates down to\n\t\t\t\t * generateSVGPathString() to decide whether it needs to flip them\n\t\t\t\t */\n\t\t\t\tconst barWidth = this.getBarWidth();\n\t\t\t\tconst x0 =\n\t\t\t\t\tthis.services.cartesianScales.getDomainValue(key, i) -\n\t\t\t\t\tbarWidth / 2;\n\t\t\t\tconst x1 = x0 + barWidth;\n\t\t\t\tlet y0 = this.services.cartesianScales.getRangeValue(d[0], i);\n\t\t\t\tlet y1 = this.services.cartesianScales.getRangeValue(d[1], i);\n\n\t\t\t\t// don't show if part of bar is out of zoom domain\n\t\t\t\tif (this.isOutsideZoomedDomain(x0, x1)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Add the divider gap\n\t\t\t\tif (\n\t\t\t\t\tMath.abs(y1 - y0) > 0 &&\n\t\t\t\t\tMath.abs(y1 - y0) > options.bars.dividerSize\n\t\t\t\t) {\n\t\t\t\t\tconst barIsNegative = d[0] < 0 && d[1] <= 0;\n\t\t\t\t\tif (barIsNegative && activeDataGroupNames.length > 1) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tthis.services.cartesianScales.getOrientation() ===\n\t\t\t\t\t\t\tCartesianOrientations.VERTICAL\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\ty1 += d[1] === 0 ? 2 : 1;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ty1 -= d[1] === 0 ? 1 : 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (!barIsNegative) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tthis.services.cartesianScales.getOrientation() ===\n\t\t\t\t\t\t\tCartesianOrientations.VERTICAL\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\ty1 += 1;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ty1 -= 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn Tools.generateSVGPathString(\n\t\t\t\t\t{ x0, x1, y0, y1 },\n\t\t\t\t\tthis.services.cartesianScales.getOrientation()\n\t\t\t\t);\n\t\t\t})\n\t\t\t.attr('opacity', 1)\n\t\t\t// a11y\n\t\t\t.attr('role', Roles.GRAPHICS_SYMBOL)\n\t\t\t.attr('aria-roledescription', 'bar')\n\t\t\t.attr('aria-label', (d) => d[1] - d[0]);\n\n\t\t// Add event listeners for the above elements\n\t\tthis.addEventListeners();\n\t}\n\n\t// Highlight elements that match the hovered legend item\n\thandleLegendOnHover = (event: CustomEvent) => {\n\t\tconst { hoveredElement } = event.detail;\n\n\t\tconst { groupMapsTo } = this.model.getOptions().data;\n\n\t\tthis.parent\n\t\t\t.selectAll('path.bar')\n\t\t\t.transition('legend-hover-bar')\n\t\t\t.call((t) =>\n\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\ttransition: t,\n\t\t\t\t\tname: 'legend-hover-bar',\n\t\t\t\t})\n\t\t\t)\n\t\t\t.attr('opacity', (d) =>\n\t\t\t\td[groupMapsTo] !== hoveredElement.datum()['name'] ? 0.3 : 1\n\t\t\t);\n\t};\n\n\t// Un-highlight all elements\n\thandleLegendMouseOut = (event: CustomEvent) => {\n\t\tthis.parent\n\t\t\t.selectAll('path.bar')\n\t\t\t.transition('legend-mouseout-bar')\n\t\t\t.call((t) =>\n\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\ttransition: t,\n\t\t\t\t\tname: 'legend-mouseout-bar',\n\t\t\t\t})\n\t\t\t)\n\t\t\t.attr('opacity', 1);\n\t};\n\n\taddEventListeners() {\n\t\tconst options = this.getOptions();\n\t\tconst { groupMapsTo } = options.data;\n\n\t\tconst self = this;\n\t\tthis.parent\n\t\t\t.selectAll('path.bar')\n\t\t\t.on('mouseover', function (event, datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\t\t\t\thoveredElement.classed('hovered', true);\n\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Bar.BAR_MOUSEOVER, {\n\t\t\t\t\tevent,\n\t\t\t\t\telement: hoveredElement,\n\t\t\t\t\tdatum,\n\t\t\t\t});\n\n\t\t\t\tconst displayData = self.model.getDisplayData(\n\t\t\t\t\tself.configs.groups\n\t\t\t\t);\n\n\t\t\t\tlet matchingDataPoint = displayData.find((d) => {\n\t\t\t\t\tconst domainIdentifier = self.services.cartesianScales.getDomainIdentifier(\n\t\t\t\t\t\td\n\t\t\t\t\t);\n\t\t\t\t\tconst rangeIdentifier = self.services.cartesianScales.getRangeIdentifier(\n\t\t\t\t\t\td\n\t\t\t\t\t);\n\t\t\t\t\treturn (\n\t\t\t\t\t\td[rangeIdentifier] === datum.data[datum[groupMapsTo]] &&\n\t\t\t\t\t\td[domainIdentifier].toString() ===\n\t\t\t\t\t\t\tdatum.data.sharedStackKey &&\n\t\t\t\t\t\td[groupMapsTo] === datum[groupMapsTo]\n\t\t\t\t\t);\n\t\t\t\t});\n\n\t\t\t\tif (matchingDataPoint === undefined) {\n\t\t\t\t\t// use the primary range and domain ids\n\t\t\t\t\tconst domainIdentifier = self.services.cartesianScales.getDomainIdentifier();\n\t\t\t\t\tconst rangeIdentifier = self.services.cartesianScales.getRangeIdentifier();\n\t\t\t\t\tmatchingDataPoint = {\n\t\t\t\t\t\t[domainIdentifier]: datum.data.sharedStackKey,\n\t\t\t\t\t\t[rangeIdentifier]: datum.data[datum[groupMapsTo]],\n\t\t\t\t\t\t[groupMapsTo]: datum[groupMapsTo],\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Show tooltip\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.SHOW, {\n\t\t\t\t\tevent,\n\t\t\t\t\thoveredElement,\n\t\t\t\t\tdata: [matchingDataPoint],\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('mousemove', function (event, datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Bar.BAR_MOUSEMOVE, {\n\t\t\t\t\tevent,\n\t\t\t\t\telement: hoveredElement,\n\t\t\t\t\tdatum,\n\t\t\t\t});\n\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.MOVE, {\n\t\t\t\t\tevent,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('click', function (event, datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Bar.BAR_CLICK, {\n\t\t\t\t\tevent,\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('mouseout', function (event, datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\t\t\t\thoveredElement.classed('hovered', false);\n\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Bar.BAR_MOUSEOUT, {\n\t\t\t\t\tevent,\n\t\t\t\t\telement: hoveredElement,\n\t\t\t\t\tdatum,\n\t\t\t\t});\n\n\t\t\t\t// Hide tooltip\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.HIDE, {\n\t\t\t\t\thoveredElement,\n\t\t\t\t});\n\t\t\t});\n\t}\n\n\tdestroy() {\n\t\t// Remove event listeners\n\t\tthis.parent\n\t\t\t.selectAll('path.bar')\n\t\t\t.on('mouseover', null)\n\t\t\t.on('mousemove', null)\n\t\t\t.on('mouseout', null);\n\n\t\t// Remove legend listeners\n\t\tconst eventsFragment = this.services.events;\n\t\teventsFragment.removeEventListener(\n\t\t\tEvents.Legend.ITEM_HOVER,\n\t\t\tthis.handleLegendOnHover\n\t\t);\n\t\teventsFragment.removeEventListener(\n\t\t\tEvents.Legend.ITEM_MOUSEOUT,\n\t\t\tthis.handleLegendMouseOut\n\t\t);\n\t}\n}\n"]}
1
+ {"version":3,"file":"bar-stacked.js","sourceRoot":"","sources":["bar-stacked.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Tools } from '../../tools';\nimport { Bar } from './bar';\nimport {\n\tRoles,\n\tEvents,\n\tCartesianOrientations,\n\tColorClassNameTypes,\n\tRenderTypes,\n} from '../../interfaces';\n\n// D3 Imports\nimport { select } from 'd3-selection';\n\nexport class StackedBar extends Bar {\n\ttype = 'stacked-bar';\n\trenderType = RenderTypes.SVG;\n\n\tinit() {\n\t\tconst eventsFragment = this.services.events;\n\n\t\t// Highlight correct circle on legend item hovers\n\t\teventsFragment.addEventListener(\n\t\t\tEvents.Legend.ITEM_HOVER,\n\t\t\tthis.handleLegendOnHover\n\t\t);\n\n\t\t// Un-highlight circles on legend item mouseouts\n\t\teventsFragment.addEventListener(\n\t\t\tEvents.Legend.ITEM_MOUSEOUT,\n\t\t\tthis.handleLegendMouseOut\n\t\t);\n\t}\n\n\trender(animate: boolean) {\n\t\t// Grab container SVG\n\t\tconst svg = this.getComponentContainer({ withinChartClip: true });\n\n\t\t// Chart options mixed with the internal configurations\n\t\tconst options = this.getOptions();\n\t\tconst { groupMapsTo } = options.data;\n\n\t\t// Create the data and keys that'll be used by the stack layout\n\t\tconst stackData = this.model.getStackedData({\n\t\t\tgroups: this.configs.groups,\n\t\t\tdivergent: true,\n\t\t});\n\n\t\tconst activeDataGroupNames = this.model.getActiveDataGroupNames();\n\n\t\t// Update data on all bar groups\n\t\tconst barGroups = svg\n\t\t\t.selectAll('g.bars')\n\t\t\t.data(stackData, (d) => Tools.getProperty(d, 0, groupMapsTo));\n\n\t\t// Remove elements that need to be exited\n\t\t// We need exit at the top here to make sure that\n\t\t// Data filters are processed before entering new elements\n\t\t// Or updating existing ones\n\t\tbarGroups.exit().attr('opacity', 0).remove();\n\n\t\t// Add bar groups that need to be introduced\n\t\tbarGroups\n\t\t\t.enter()\n\t\t\t.append('g')\n\t\t\t.classed('bars', true)\n\t\t\t.attr('role', Roles.GROUP)\n\t\t\t.attr('data-name', 'bars');\n\n\t\t// Update data on all bars\n\t\tconst bars = svg\n\t\t\t.selectAll('g.bars')\n\t\t\t.selectAll('path.bar')\n\t\t\t.data(\n\t\t\t\t(d) => d,\n\t\t\t\t(d) => d.data.sharedStackKey\n\t\t\t);\n\n\t\t// Remove bars that need to be removed\n\t\tbars.exit().remove();\n\n\t\tbars.enter()\n\t\t\t.append('path')\n\t\t\t.merge(bars)\n\t\t\t.classed('bar', true)\n\t\t\t.transition()\n\t\t\t.call((t) =>\n\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\ttransition: t,\n\t\t\t\t\tname: 'bar-update-enter',\n\t\t\t\t\tanimate,\n\t\t\t\t})\n\t\t\t)\n\t\t\t.attr('class', (d) =>\n\t\t\t\tthis.model.getColorClassName({\n\t\t\t\t\tclassNameTypes: [ColorClassNameTypes.FILL],\n\t\t\t\t\tdataGroupName: d[groupMapsTo],\n\t\t\t\t\toriginalClassName: 'bar',\n\t\t\t\t})\n\t\t\t)\n\t\t\t.style('fill', (d) => this.model.getFillColor(d[groupMapsTo]))\n\t\t\t.attr('d', (d, i) => {\n\t\t\t\tconst key = d.data.sharedStackKey;\n\n\t\t\t\t/*\n\t\t\t\t * Orientation support for horizontal/vertical bar charts\n\t\t\t\t * Determine coordinates needed for a vertical set of paths\n\t\t\t\t * to draw the bars needed, and pass those coordinates down to\n\t\t\t\t * generateSVGPathString() to decide whether it needs to flip them\n\t\t\t\t */\n\t\t\t\tconst barWidth = this.getBarWidth();\n\t\t\t\tconst x0 =\n\t\t\t\t\tthis.services.cartesianScales.getDomainValue(key, i) -\n\t\t\t\t\tbarWidth / 2;\n\t\t\t\tconst x1 = x0 + barWidth;\n\t\t\t\tlet y0 = this.services.cartesianScales.getRangeValue(d[0], i);\n\t\t\t\tlet y1 = this.services.cartesianScales.getRangeValue(d[1], i);\n\n\t\t\t\t// don't show if part of bar is out of zoom domain\n\t\t\t\tif (this.isOutsideZoomedDomain(x0, x1)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Add the divider gap\n\t\t\t\tif (\n\t\t\t\t\tMath.abs(y1 - y0) > 0 &&\n\t\t\t\t\tMath.abs(y1 - y0) > options.bars.dividerSize\n\t\t\t\t) {\n\t\t\t\t\tconst barIsNegative = d[0] < 0 && d[1] <= 0;\n\t\t\t\t\tif (barIsNegative && activeDataGroupNames.length > 1) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tthis.services.cartesianScales.getOrientation() ===\n\t\t\t\t\t\t\tCartesianOrientations.VERTICAL\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\ty1 += d[1] === 0 ? 2 : 1;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ty1 -= 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (!barIsNegative) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tthis.services.cartesianScales.getOrientation() ===\n\t\t\t\t\t\t\tCartesianOrientations.VERTICAL\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\ty1 += 1;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ty1 -= 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn Tools.generateSVGPathString(\n\t\t\t\t\t{ x0, x1, y0, y1 },\n\t\t\t\t\tthis.services.cartesianScales.getOrientation()\n\t\t\t\t);\n\t\t\t})\n\t\t\t.attr('opacity', 1)\n\t\t\t// a11y\n\t\t\t.attr('role', Roles.GRAPHICS_SYMBOL)\n\t\t\t.attr('aria-roledescription', 'bar')\n\t\t\t.attr('aria-label', (d) => d[1] - d[0]);\n\n\t\t// Add event listeners for the above elements\n\t\tthis.addEventListeners();\n\t}\n\n\t// Highlight elements that match the hovered legend item\n\thandleLegendOnHover = (event: CustomEvent) => {\n\t\tconst { hoveredElement } = event.detail;\n\n\t\tconst { groupMapsTo } = this.model.getOptions().data;\n\n\t\tthis.parent\n\t\t\t.selectAll('path.bar')\n\t\t\t.transition('legend-hover-bar')\n\t\t\t.call((t) =>\n\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\ttransition: t,\n\t\t\t\t\tname: 'legend-hover-bar',\n\t\t\t\t})\n\t\t\t)\n\t\t\t.attr('opacity', (d) =>\n\t\t\t\td[groupMapsTo] !== hoveredElement.datum()['name'] ? 0.3 : 1\n\t\t\t);\n\t};\n\n\t// Un-highlight all elements\n\thandleLegendMouseOut = (event: CustomEvent) => {\n\t\tthis.parent\n\t\t\t.selectAll('path.bar')\n\t\t\t.transition('legend-mouseout-bar')\n\t\t\t.call((t) =>\n\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\ttransition: t,\n\t\t\t\t\tname: 'legend-mouseout-bar',\n\t\t\t\t})\n\t\t\t)\n\t\t\t.attr('opacity', 1);\n\t};\n\n\taddEventListeners() {\n\t\tconst options = this.getOptions();\n\t\tconst { groupMapsTo } = options.data;\n\n\t\tconst self = this;\n\t\tthis.parent\n\t\t\t.selectAll('path.bar')\n\t\t\t.on('mouseover', function (event, datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\t\t\t\thoveredElement.classed('hovered', true);\n\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Bar.BAR_MOUSEOVER, {\n\t\t\t\t\tevent,\n\t\t\t\t\telement: hoveredElement,\n\t\t\t\t\tdatum,\n\t\t\t\t});\n\n\t\t\t\tconst displayData = self.model.getDisplayData(\n\t\t\t\t\tself.configs.groups\n\t\t\t\t);\n\n\t\t\t\tlet matchingDataPoint = displayData.find((d) => {\n\t\t\t\t\tconst domainIdentifier = self.services.cartesianScales.getDomainIdentifier(\n\t\t\t\t\t\td\n\t\t\t\t\t);\n\t\t\t\t\tconst rangeIdentifier = self.services.cartesianScales.getRangeIdentifier(\n\t\t\t\t\t\td\n\t\t\t\t\t);\n\t\t\t\t\treturn (\n\t\t\t\t\t\td[rangeIdentifier] === datum.data[datum[groupMapsTo]] &&\n\t\t\t\t\t\td[domainIdentifier].toString() ===\n\t\t\t\t\t\t\tdatum.data.sharedStackKey &&\n\t\t\t\t\t\td[groupMapsTo] === datum[groupMapsTo]\n\t\t\t\t\t);\n\t\t\t\t});\n\n\t\t\t\tif (matchingDataPoint === undefined) {\n\t\t\t\t\t// use the primary range and domain ids\n\t\t\t\t\tconst domainIdentifier = self.services.cartesianScales.getDomainIdentifier();\n\t\t\t\t\tconst rangeIdentifier = self.services.cartesianScales.getRangeIdentifier();\n\t\t\t\t\tmatchingDataPoint = {\n\t\t\t\t\t\t[domainIdentifier]: datum.data.sharedStackKey,\n\t\t\t\t\t\t[rangeIdentifier]: datum.data[datum[groupMapsTo]],\n\t\t\t\t\t\t[groupMapsTo]: datum[groupMapsTo],\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Show tooltip\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.SHOW, {\n\t\t\t\t\tevent,\n\t\t\t\t\thoveredElement,\n\t\t\t\t\tdata: [matchingDataPoint],\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('mousemove', function (event, datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Bar.BAR_MOUSEMOVE, {\n\t\t\t\t\tevent,\n\t\t\t\t\telement: hoveredElement,\n\t\t\t\t\tdatum,\n\t\t\t\t});\n\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.MOVE, {\n\t\t\t\t\tevent,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('click', function (event, datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Bar.BAR_CLICK, {\n\t\t\t\t\tevent,\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('mouseout', function (event, datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\t\t\t\thoveredElement.classed('hovered', false);\n\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Bar.BAR_MOUSEOUT, {\n\t\t\t\t\tevent,\n\t\t\t\t\telement: hoveredElement,\n\t\t\t\t\tdatum,\n\t\t\t\t});\n\n\t\t\t\t// Hide tooltip\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.HIDE, {\n\t\t\t\t\thoveredElement,\n\t\t\t\t});\n\t\t\t});\n\t}\n\n\tdestroy() {\n\t\t// Remove event listeners\n\t\tthis.parent\n\t\t\t.selectAll('path.bar')\n\t\t\t.on('mouseover', null)\n\t\t\t.on('mousemove', null)\n\t\t\t.on('mouseout', null);\n\n\t\t// Remove legend listeners\n\t\tconst eventsFragment = this.services.events;\n\t\teventsFragment.removeEventListener(\n\t\t\tEvents.Legend.ITEM_HOVER,\n\t\t\tthis.handleLegendOnHover\n\t\t);\n\t\teventsFragment.removeEventListener(\n\t\t\tEvents.Legend.ITEM_MOUSEOUT,\n\t\t\tthis.handleLegendMouseOut\n\t\t);\n\t}\n}\n"]}