@carbon/charts 1.6.13 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/axis-chart.js +1 -1
- package/axis-chart.js.map +1 -1
- package/build/src/interfaces/charts.d.ts +6 -0
- package/build/src/tools.d.ts +2420 -151
- package/bundle.js +1 -1
- package/chart.js +1 -1
- package/chart.js.map +1 -1
- package/charts/alluvial.js +1 -1
- package/charts/alluvial.js.map +1 -1
- package/charts/area-stacked.js +1 -1
- package/charts/area-stacked.js.map +1 -1
- package/charts/area.js +1 -1
- package/charts/area.js.map +1 -1
- package/charts/bar-grouped.js +1 -1
- package/charts/bar-grouped.js.map +1 -1
- package/charts/bar-simple.js +1 -1
- package/charts/bar-simple.js.map +1 -1
- package/charts/bar-stacked.js +1 -1
- package/charts/bar-stacked.js.map +1 -1
- package/charts/boxplot.js +1 -1
- package/charts/boxplot.js.map +1 -1
- package/charts/bubble.js +1 -1
- package/charts/bubble.js.map +1 -1
- package/charts/bullet.js +1 -1
- package/charts/bullet.js.map +1 -1
- package/charts/circle-pack.js +1 -1
- package/charts/circle-pack.js.map +1 -1
- package/charts/combo.js +1 -1
- package/charts/combo.js.map +1 -1
- package/charts/donut.js +1 -1
- package/charts/donut.js.map +1 -1
- package/charts/gauge.js +1 -1
- package/charts/gauge.js.map +1 -1
- package/charts/heatmap.js +1 -1
- package/charts/heatmap.js.map +1 -1
- package/charts/histogram.js +1 -1
- package/charts/histogram.js.map +1 -1
- package/charts/line.js +1 -1
- package/charts/line.js.map +1 -1
- package/charts/lollipop.js +1 -1
- package/charts/lollipop.js.map +1 -1
- package/charts/meter.js +1 -1
- package/charts/meter.js.map +1 -1
- package/charts/pie.js +1 -1
- package/charts/pie.js.map +1 -1
- package/charts/radar.js +1 -1
- package/charts/radar.js.map +1 -1
- package/charts/scatter.js +1 -1
- package/charts/scatter.js.map +1 -1
- package/charts/tree.js +1 -1
- package/charts/tree.js.map +1 -1
- package/charts/treemap.js +1 -1
- package/charts/treemap.js.map +1 -1
- package/charts/wordcloud.js +1 -1
- package/charts/wordcloud.js.map +1 -1
- package/components/axes/axis.js +1 -1
- package/components/axes/axis.js.map +1 -1
- package/components/axes/grid.js +1 -1
- package/components/axes/grid.js.map +1 -1
- package/components/axes/hover-axis.js +1 -1
- package/components/axes/hover-axis.js.map +1 -1
- package/components/axes/ruler-binned.js +1 -1
- package/components/axes/ruler-binned.js.map +1 -1
- package/components/axes/ruler.js +1 -1
- package/components/axes/ruler.js.map +1 -1
- package/components/axes/toolbar.js +1 -1
- package/components/axes/toolbar.js.map +1 -1
- package/components/axes/two-dimensional-axes.js +1 -1
- package/components/axes/two-dimensional-axes.js.map +1 -1
- package/components/axes/zero-line.js +1 -1
- package/components/axes/zero-line.js.map +1 -1
- package/components/axes/zoom-bar.js +1 -1
- package/components/axes/zoom-bar.js.map +1 -1
- package/components/component.js +1 -1
- package/components/component.js.map +1 -1
- package/components/essentials/color-scale-legend.js +1 -1
- package/components/essentials/color-scale-legend.js.map +1 -1
- package/components/essentials/highlights.js +1 -1
- package/components/essentials/highlights.js.map +1 -1
- package/components/essentials/legend.js +1 -1
- package/components/essentials/legend.js.map +1 -1
- package/components/essentials/modal.js +1 -1
- package/components/essentials/modal.js.map +1 -1
- package/components/essentials/threshold.js +1 -1
- package/components/essentials/threshold.js.map +1 -1
- package/components/essentials/title-meter.js +1 -1
- package/components/essentials/title-meter.js.map +1 -1
- package/components/essentials/title.js +1 -1
- package/components/essentials/title.js.map +1 -1
- package/components/essentials/tooltip-axis.js +1 -1
- package/components/essentials/tooltip-axis.js.map +1 -1
- package/components/essentials/tooltip.js +1 -1
- package/components/essentials/tooltip.js.map +1 -1
- package/components/graphs/alluvial.js +1 -1
- package/components/graphs/alluvial.js.map +1 -1
- package/components/graphs/area-stacked.js +1 -1
- package/components/graphs/area-stacked.js.map +1 -1
- package/components/graphs/area.js +1 -1
- package/components/graphs/area.js.map +1 -1
- package/components/graphs/bar-grouped.js +1 -1
- package/components/graphs/bar-grouped.js.map +1 -1
- package/components/graphs/bar-simple.js +1 -1
- package/components/graphs/bar-simple.js.map +1 -1
- package/components/graphs/bar-stacked.js +1 -1
- package/components/graphs/bar-stacked.js.map +1 -1
- package/components/graphs/bar.js +1 -1
- package/components/graphs/bar.js.map +1 -1
- package/components/graphs/boxplot.js +1 -1
- package/components/graphs/boxplot.js.map +1 -1
- package/components/graphs/bubble.js +1 -1
- package/components/graphs/bubble.js.map +1 -1
- package/components/graphs/bullet.js +1 -1
- package/components/graphs/bullet.js.map +1 -1
- package/components/graphs/circle-pack.js +1 -1
- package/components/graphs/circle-pack.js.map +1 -1
- package/components/graphs/donut.js +1 -1
- package/components/graphs/donut.js.map +1 -1
- package/components/graphs/gauge.js +1 -1
- package/components/graphs/gauge.js.map +1 -1
- package/components/graphs/heatmap.js +1 -1
- package/components/graphs/heatmap.js.map +1 -1
- package/components/graphs/histogram.js +1 -1
- package/components/graphs/histogram.js.map +1 -1
- package/components/graphs/line.js +1 -1
- package/components/graphs/line.js.map +1 -1
- package/components/graphs/lollipop.js +1 -1
- package/components/graphs/lollipop.js.map +1 -1
- package/components/graphs/meter.js +1 -1
- package/components/graphs/meter.js.map +1 -1
- package/components/graphs/pie.js +1 -1
- package/components/graphs/pie.js.map +1 -1
- package/components/graphs/radar.js +1 -1
- package/components/graphs/radar.js.map +1 -1
- package/components/graphs/scatter-stacked.js +1 -1
- package/components/graphs/scatter-stacked.js.map +1 -1
- package/components/graphs/scatter.js +1 -1
- package/components/graphs/scatter.js.map +1 -1
- package/components/graphs/skeleton-lines.js +1 -1
- package/components/graphs/skeleton-lines.js.map +1 -1
- package/components/graphs/skeleton.js +1 -1
- package/components/graphs/skeleton.js.map +1 -1
- package/components/graphs/tree.js +1 -1
- package/components/graphs/tree.js.map +1 -1
- package/components/graphs/treemap.js +1 -1
- package/components/graphs/treemap.js.map +1 -1
- package/components/graphs/wordcloud.js +1 -1
- package/components/graphs/wordcloud.js.map +1 -1
- package/components/layout/layout.js +1 -1
- package/components/layout/layout.js.map +1 -1
- package/configuration.js +1 -1
- package/configuration.js.map +1 -1
- package/demo/data/bar.js +60 -12
- package/demo/data/bar.js.map +1 -1
- package/demo/tsconfig.tsbuildinfo +1 -1
- package/interfaces/charts.d.ts +6 -0
- package/interfaces/charts.js.map +1 -1
- package/model/boxplot.js +1 -1
- package/model/boxplot.js.map +1 -1
- package/model/bullet.js +1 -1
- package/model/bullet.js.map +1 -1
- package/model/cartesian-charts.js +1 -1
- package/model/cartesian-charts.js.map +1 -1
- package/model/circle-pack.js +1 -1
- package/model/circle-pack.js.map +1 -1
- package/model/heatmap.js +1 -1
- package/model/heatmap.js.map +1 -1
- package/model/meter.js +1 -1
- package/model/meter.js.map +1 -1
- package/model/model.js +8 -2
- package/model/model.js.map +1 -1
- package/model/radar.js +1 -1
- package/model/radar.js.map +1 -1
- package/model/treemap.js +1 -1
- package/model/treemap.js.map +1 -1
- package/package.json +1 -1
- package/services/essentials/dom-utils.js +15 -3
- package/services/essentials/dom-utils.js.map +1 -1
- package/services/essentials/transitions.js +1 -1
- package/services/essentials/transitions.js.map +1 -1
- package/services/scales-cartesian.js +1 -1
- package/services/scales-cartesian.js.map +1 -1
- package/services/time-series.js +1 -1
- package/services/time-series.js.map +1 -1
- package/services/zoom.js +1 -1
- package/services/zoom.js.map +1 -1
- package/tools.d.ts +141 -155
- package/tools.js +315 -344
- package/tools.js.map +1 -1
- package/tsconfig.tsbuildinfo +92 -92
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hover-axis.js","sourceRoot":"","sources":["hover-axis.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Axis } from './axis';\nimport { AxisPositions, Events, ScaleTypes } from '../../interfaces';\nimport { ChartModel } from '../../model/model';\nimport { DOMUtils } from '../../services';\nimport { Tools } from '../../tools';\nimport * as Configuration from '../../configuration';\n\n// D3 Imports\nimport { select } from 'd3-selection';\n\nexport class HoverAxis extends Axis {\n\tconstructor(model: ChartModel, services: any, configs?: any) {\n\t\tsuper(model, services, configs);\n\t}\n\n\trender(animate = true) {\n\t\tsuper.render(animate);\n\n\t\t// Remove existing event listeners to avoid flashing behavior\n\t\tsuper.destroy();\n\n\t\tconst { position: axisPosition } = this.configs;\n\t\tconst svg = this.getComponentContainer();\n\t\tconst container = DOMUtils.appendOrSelect(\n\t\t\tsvg,\n\t\t\t`g.axis.${axisPosition}`\n\t\t);\n\n\t\tconst self = this;\n\t\tcontainer.selectAll('g.tick').each(function (_, index) {\n\t\t\tconst g = select(this);\n\t\t\tg.classed('tick-hover', true).attr(\n\t\t\t\t'tabindex',\n\t\t\t\tindex === 0 ? 0 : -1\n\t\t\t);\n\t\t\tconst textNode = g.select('text');\n\t\t\tconst { width, height } = DOMUtils.getSVGElementSize(textNode, {\n\t\t\t\tuseBBox: true,\n\t\t\t});\n\n\t\t\tconst rectangle = DOMUtils.appendOrSelect(g, 'rect.axis-holder');\n\n\t\t\tlet x = 0,\n\t\t\t\ty = 0;\n\n\t\t\t// Depending on axis position, apply correct translation & rotation to align the rect\n\t\t\t// with the text\n\t\t\tswitch (axisPosition) {\n\t\t\t\tcase AxisPositions.LEFT:\n\t\t\t\t\tx = -width + Number(textNode.attr('x'));\n\t\t\t\t\ty = -(height / 2);\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.RIGHT:\n\t\t\t\t\tx = Math.abs(Number(textNode.attr('x')));\n\t\t\t\t\ty = -(height / 2);\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.TOP:\n\t\t\t\t\tx = -(width / 2);\n\t\t\t\t\ty = -height + Number(textNode.attr('y')) / 2;\n\n\t\t\t\t\tif (self.truncation[axisPosition]) {\n\t\t\t\t\t\tx = 0;\n\t\t\t\t\t\trectangle.attr('transform', `rotate(-45)`);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.BOTTOM:\n\t\t\t\t\tx = -(width / 2);\n\t\t\t\t\ty = height / 2 - 2;\n\n\t\t\t\t\tif (self.truncation[axisPosition]) {\n\t\t\t\t\t\tx = -width;\n\t\t\t\t\t\trectangle.attr('transform', `rotate(-45)`);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Translates x position -4 left to keep center after padding\n\t\t\t// Adds padding on left & right\n\t\t\trectangle\n\t\t\t\t.attr('x', x - Configuration.axis.hover.rectanglePadding)\n\t\t\t\t.attr('y', y)\n\t\t\t\t.attr(\n\t\t\t\t\t'width',\n\t\t\t\t\twidth + Configuration.axis.hover.rectanglePadding * 2\n\t\t\t\t)\n\t\t\t\t.attr('height', height)\n\t\t\t\t.lower();\n\t\t});\n\n\t\t// Add event listeners to element group\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 self = this;\n\t\tcontainer\n\t\t\t.selectAll('g.tick.tick-hover')\n\t\t\t.on('mouseover', function (event) {\n\t\t\t\tconst hoveredElement = select(this).select('text');\n\t\t\t\tconst datum = hoveredElement.datum() as string;\n\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: hoveredElement,\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\telement: hoveredElement,\n\t\t\t\t\t\tdatum,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on('mousemove', function (event) {\n\t\t\t\tconst hoveredElement = select(this).select('text');\n\t\t\t\tconst datum = hoveredElement.datum() as string;\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: hoveredElement,\n\t\t\t\t\t\tdatum,\n\t\t\t\t\t}\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) {\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).select('text'),\n\t\t\t\t\tdatum: select(this).select('text').datum(),\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('mouseout', function (event) {\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).select('text'),\n\t\t\t\t\tdatum: select(this).select('text').datum(),\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\t\t.on('focus', function (event) {\n\t\t\t\tconst coordinates = { clientX: 0, clientY: 0 };\n\n\t\t\t\tif (event.target) {\n\t\t\t\t\t// Focus element since we are using arrow keys\n\t\t\t\t\tevent.target.focus();\n\t\t\t\t\tconst boundingRect = event.target.getBoundingClientRect();\n\t\t\t\t\tcoordinates.clientX = boundingRect.x;\n\t\t\t\t\tcoordinates.clientY = boundingRect.y;\n\t\t\t\t}\n\n\t\t\t\t// Dispatch focus event\n\t\t\t\tself.services.events.dispatchEvent(Events.Axis.LABEL_FOCUS, {\n\t\t\t\t\tevent: { ...event, ...coordinates },\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum: select(this).select('text').datum(),\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('blur', function (event) {\n\t\t\t\t// Dispatch blur event\n\t\t\t\tself.services.events.dispatchEvent(Events.Axis.LABEL_BLUR, {\n\t\t\t\t\tevent,\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum: select(this).select('text').datum(),\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('keydown', function (event) {\n\t\t\t\t// Hide the tooltip when `Escape` is pressed, but keep focus\n\t\t\t\tif (event.key && event.key === 'Escape') {\n\t\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.HIDE);\n\t\t\t\t\tself.services.events.dispatchEvent(Events.Axis.LABEL_BLUR, {\n\t\t\t\t\t\tevent,\n\t\t\t\t\t\telement: select(this),\n\t\t\t\t\t\tdatum: select(this).select('text').datum(),\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// Choose specific arrow key depending on the axis\n\t\t\t\tif (\n\t\t\t\t\taxisPosition === AxisPositions.LEFT ||\n\t\t\t\t\taxisPosition === AxisPositions.RIGHT\n\t\t\t\t) {\n\t\t\t\t\tif (event.key && event.key === 'ArrowUp') {\n\t\t\t\t\t\tself.goNext(this as HTMLElement, event);\n\t\t\t\t\t} else if (event.key && event.key === 'ArrowDown') {\n\t\t\t\t\t\tself.goPrevious(this as HTMLElement, event);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (event.key && event.key === 'ArrowLeft') {\n\t\t\t\t\t\tself.goPrevious(this as HTMLElement, event);\n\t\t\t\t\t} else if (event.key && event.key === 'ArrowRight') {\n\t\t\t\t\t\tself.goNext(this as HTMLElement, event);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\t// Focus on the next HTML element sibling\n\tprivate goNext(element: HTMLElement, event: Event) {\n\t\tif (\n\t\t\telement.nextElementSibling &&\n\t\t\telement.nextElementSibling.tagName !== 'path'\n\t\t) {\n\t\t\telement.nextElementSibling.dispatchEvent(new Event('focus'));\n\t\t}\n\n\t\tevent.preventDefault();\n\t}\n\n\t// Focus on the previous HTML element sibling\n\tprivate goPrevious(element: HTMLElement, event: Event) {\n\t\tif (\n\t\t\telement.previousElementSibling &&\n\t\t\telement.previousElementSibling.tagName !== 'path'\n\t\t) {\n\t\t\telement.previousElementSibling.dispatchEvent(new Event('focus'));\n\t\t}\n\n\t\tevent.preventDefault();\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.tick-hover')\n\t\t\t.on('mouseover', null)\n\t\t\t.on('mousemove', null)\n\t\t\t.on('mouseout', null)\n\t\t\t.on('focus', null)\n\t\t\t.on('blur', null);\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"hover-axis.js","sourceRoot":"","sources":["hover-axis.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Axis } from './axis';\nimport { AxisPositions, Events, ScaleTypes } from '../../interfaces';\nimport { ChartModel } from '../../model/model';\nimport { DOMUtils } from '../../services';\nimport * as Tools from '../../tools';\nimport * as Configuration from '../../configuration';\n\n// D3 Imports\nimport { select } from 'd3-selection';\n\nexport class HoverAxis extends Axis {\n\tconstructor(model: ChartModel, services: any, configs?: any) {\n\t\tsuper(model, services, configs);\n\t}\n\n\trender(animate = true) {\n\t\tsuper.render(animate);\n\n\t\t// Remove existing event listeners to avoid flashing behavior\n\t\tsuper.destroy();\n\n\t\tconst { position: axisPosition } = this.configs;\n\t\tconst svg = this.getComponentContainer();\n\t\tconst container = DOMUtils.appendOrSelect(\n\t\t\tsvg,\n\t\t\t`g.axis.${axisPosition}`\n\t\t);\n\n\t\tconst self = this;\n\t\tcontainer.selectAll('g.tick').each(function (_, index) {\n\t\t\tconst g = select(this);\n\t\t\tg.classed('tick-hover', true).attr(\n\t\t\t\t'tabindex',\n\t\t\t\tindex === 0 ? 0 : -1\n\t\t\t);\n\t\t\tconst textNode = g.select('text');\n\t\t\tconst { width, height } = DOMUtils.getSVGElementSize(textNode, {\n\t\t\t\tuseBBox: true,\n\t\t\t});\n\n\t\t\tconst rectangle = DOMUtils.appendOrSelect(g, 'rect.axis-holder');\n\n\t\t\tlet x = 0,\n\t\t\t\ty = 0;\n\n\t\t\t// Depending on axis position, apply correct translation & rotation to align the rect\n\t\t\t// with the text\n\t\t\tswitch (axisPosition) {\n\t\t\t\tcase AxisPositions.LEFT:\n\t\t\t\t\tx = -width + Number(textNode.attr('x'));\n\t\t\t\t\ty = -(height / 2);\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.RIGHT:\n\t\t\t\t\tx = Math.abs(Number(textNode.attr('x')));\n\t\t\t\t\ty = -(height / 2);\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.TOP:\n\t\t\t\t\tx = -(width / 2);\n\t\t\t\t\ty = -height + Number(textNode.attr('y')) / 2;\n\n\t\t\t\t\tif (self.truncation[axisPosition]) {\n\t\t\t\t\t\tx = 0;\n\t\t\t\t\t\trectangle.attr('transform', `rotate(-45)`);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.BOTTOM:\n\t\t\t\t\tx = -(width / 2);\n\t\t\t\t\ty = height / 2 - 2;\n\n\t\t\t\t\tif (self.truncation[axisPosition]) {\n\t\t\t\t\t\tx = -width;\n\t\t\t\t\t\trectangle.attr('transform', `rotate(-45)`);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Translates x position -4 left to keep center after padding\n\t\t\t// Adds padding on left & right\n\t\t\trectangle\n\t\t\t\t.attr('x', x - Configuration.axis.hover.rectanglePadding)\n\t\t\t\t.attr('y', y)\n\t\t\t\t.attr(\n\t\t\t\t\t'width',\n\t\t\t\t\twidth + Configuration.axis.hover.rectanglePadding * 2\n\t\t\t\t)\n\t\t\t\t.attr('height', height)\n\t\t\t\t.lower();\n\t\t});\n\n\t\t// Add event listeners to element group\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 self = this;\n\t\tcontainer\n\t\t\t.selectAll('g.tick.tick-hover')\n\t\t\t.on('mouseover', function (event) {\n\t\t\t\tconst hoveredElement = select(this).select('text');\n\t\t\t\tconst datum = hoveredElement.datum() as string;\n\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: hoveredElement,\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\telement: hoveredElement,\n\t\t\t\t\t\tdatum,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on('mousemove', function (event) {\n\t\t\t\tconst hoveredElement = select(this).select('text');\n\t\t\t\tconst datum = hoveredElement.datum() as string;\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: hoveredElement,\n\t\t\t\t\t\tdatum,\n\t\t\t\t\t}\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) {\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).select('text'),\n\t\t\t\t\tdatum: select(this).select('text').datum(),\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('mouseout', function (event) {\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).select('text'),\n\t\t\t\t\tdatum: select(this).select('text').datum(),\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\t\t.on('focus', function (event) {\n\t\t\t\tconst coordinates = { clientX: 0, clientY: 0 };\n\n\t\t\t\tif (event.target) {\n\t\t\t\t\t// Focus element since we are using arrow keys\n\t\t\t\t\tevent.target.focus();\n\t\t\t\t\tconst boundingRect = event.target.getBoundingClientRect();\n\t\t\t\t\tcoordinates.clientX = boundingRect.x;\n\t\t\t\t\tcoordinates.clientY = boundingRect.y;\n\t\t\t\t}\n\n\t\t\t\t// Dispatch focus event\n\t\t\t\tself.services.events.dispatchEvent(Events.Axis.LABEL_FOCUS, {\n\t\t\t\t\tevent: { ...event, ...coordinates },\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum: select(this).select('text').datum(),\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('blur', function (event) {\n\t\t\t\t// Dispatch blur event\n\t\t\t\tself.services.events.dispatchEvent(Events.Axis.LABEL_BLUR, {\n\t\t\t\t\tevent,\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum: select(this).select('text').datum(),\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('keydown', function (event) {\n\t\t\t\t// Hide the tooltip when `Escape` is pressed, but keep focus\n\t\t\t\tif (event.key && event.key === 'Escape') {\n\t\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.HIDE);\n\t\t\t\t\tself.services.events.dispatchEvent(Events.Axis.LABEL_BLUR, {\n\t\t\t\t\t\tevent,\n\t\t\t\t\t\telement: select(this),\n\t\t\t\t\t\tdatum: select(this).select('text').datum(),\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// Choose specific arrow key depending on the axis\n\t\t\t\tif (\n\t\t\t\t\taxisPosition === AxisPositions.LEFT ||\n\t\t\t\t\taxisPosition === AxisPositions.RIGHT\n\t\t\t\t) {\n\t\t\t\t\tif (event.key && event.key === 'ArrowUp') {\n\t\t\t\t\t\tself.goNext(this as HTMLElement, event);\n\t\t\t\t\t} else if (event.key && event.key === 'ArrowDown') {\n\t\t\t\t\t\tself.goPrevious(this as HTMLElement, event);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (event.key && event.key === 'ArrowLeft') {\n\t\t\t\t\t\tself.goPrevious(this as HTMLElement, event);\n\t\t\t\t\t} else if (event.key && event.key === 'ArrowRight') {\n\t\t\t\t\t\tself.goNext(this as HTMLElement, event);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\t// Focus on the next HTML element sibling\n\tprivate goNext(element: HTMLElement, event: Event) {\n\t\tif (\n\t\t\telement.nextElementSibling &&\n\t\t\telement.nextElementSibling.tagName !== 'path'\n\t\t) {\n\t\t\telement.nextElementSibling.dispatchEvent(new Event('focus'));\n\t\t}\n\n\t\tevent.preventDefault();\n\t}\n\n\t// Focus on the previous HTML element sibling\n\tprivate goPrevious(element: HTMLElement, event: Event) {\n\t\tif (\n\t\t\telement.previousElementSibling &&\n\t\t\telement.previousElementSibling.tagName !== 'path'\n\t\t) {\n\t\t\telement.previousElementSibling.dispatchEvent(new Event('focus'));\n\t\t}\n\n\t\tevent.preventDefault();\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.tick-hover')\n\t\t\t.on('mouseover', null)\n\t\t\t.on('mousemove', null)\n\t\t\t.on('mouseout', null)\n\t\t\t.on('focus', null)\n\t\t\t.on('blur', null);\n\t}\n}\n"]}
|
|
@@ -22,7 +22,7 @@ var __spreadArrays = (this && this.__spreadArrays) || function () {
|
|
|
22
22
|
import { Ruler } from './ruler';
|
|
23
23
|
import { DOMUtils } from '../../services';
|
|
24
24
|
import { CartesianOrientations, ColorClassNameTypes, Events, RenderTypes, } from '../../interfaces';
|
|
25
|
-
import
|
|
25
|
+
import * as Tools from '../../tools';
|
|
26
26
|
// D3 Imports
|
|
27
27
|
import { select } from 'd3-selection';
|
|
28
28
|
import { get } from 'lodash-es';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ruler-binned.js","sourceRoot":"","sources":["ruler-binned.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,mBAAmB;AACnB,OAAO,EAAuB,KAAK,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EACN,qBAAqB,EACrB,mBAAmB,EACnB,MAAM,EACN,WAAW,GACX,MAAM,kBAAkB,CAAC;AAC1B,OAAO,
|
|
1
|
+
{"version":3,"file":"ruler-binned.js","sourceRoot":"","sources":["ruler-binned.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { GenericSvgSelection, Ruler } from './ruler';\nimport { DOMUtils } from '../../services';\nimport {\n\tCartesianOrientations,\n\tColorClassNameTypes,\n\tEvents,\n\tRenderTypes,\n} from '../../interfaces';\nimport * as Tools from '../../tools';\n\n// D3 Imports\nimport { select } from 'd3-selection';\n\nimport { get } from 'lodash-es';\n\nexport class BinnedRuler extends Ruler {\n\ttype = 'ruler-binned';\n\trenderType = RenderTypes.SVG;\n\n\tshowRuler(event, [x, y]: [number, number]) {\n\t\tconst svg = this.parent;\n\n\t\tconst options = this.model.getOptions();\n\n\t\tconst orientation: CartesianOrientations = this.services.cartesianScales.getOrientation();\n\n\t\tconst rangeScale = this.services.cartesianScales.getRangeScale();\n\t\tconst [yScaleEnd, yScaleStart] = rangeScale.range();\n\n\t\tconst domainScale = this.services.cartesianScales.getDomainScale();\n\t\tconst correspondingDomainValue = domainScale.invert(\n\t\t\torientation === CartesianOrientations.VERTICAL ? x : y\n\t\t);\n\n\t\tconst ruler = DOMUtils.appendOrSelect(svg, 'g.ruler').attr(\n\t\t\t'aria-label',\n\t\t\t'ruler'\n\t\t);\n\t\tconst rulerLine = DOMUtils.appendOrSelect(ruler, 'line.ruler-line');\n\n\t\tconst dataPointElements: GenericSvgSelection = svg.selectAll(\n\t\t\t'[role=graphics-symbol]'\n\t\t);\n\n\t\tconst elementsToHighlight = dataPointElements.filter((d) => {\n\t\t\tif (\n\t\t\t\tparseFloat(get(d, 'data.x0')) <= correspondingDomainValue &&\n\t\t\t\tparseFloat(get(d, 'data.x1')) >= correspondingDomainValue\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t});\n\n\t\t// some data point match\n\t\tif (elementsToHighlight.size() > 0) {\n\t\t\t/** if we pass from a trigger area to another one\n\t\t\t * mouseout on previous elements won't get dispatched\n\t\t\t * so we need to do it manually\n\t\t\t */\n\t\t\tif (\n\t\t\t\tthis.elementsToHighlight &&\n\t\t\t\tthis.elementsToHighlight.size() > 0 &&\n\t\t\t\t!Tools.isEqual(this.elementsToHighlight, elementsToHighlight)\n\t\t\t) {\n\t\t\t\tthis.hideRuler();\n\t\t\t}\n\n\t\t\telementsToHighlight.dispatch('mouseover');\n\n\t\t\t// set current hovered elements\n\t\t\tthis.elementsToHighlight = elementsToHighlight;\n\n\t\t\tconst sampleMatchData = select(\n\t\t\t\telementsToHighlight.nodes()[0]\n\t\t\t).datum();\n\n\t\t\tconst x0 = parseFloat(get(sampleMatchData, 'data.x0'));\n\t\t\tconst x1 = parseFloat(get(sampleMatchData, 'data.x1'));\n\n\t\t\tconst activeDataGroupNames = this.model.getActiveDataGroupNames();\n\n\t\t\tconst tooltipDataGroups = activeDataGroupNames\n\t\t\t\t.reverse()\n\t\t\t\t.map((dataGroupName) => ({\n\t\t\t\t\tlabel: dataGroupName,\n\t\t\t\t\tvalue: get(sampleMatchData, `data.${dataGroupName}`),\n\t\t\t\t\tclass: this.model.getColorClassName({\n\t\t\t\t\t\tclassNameTypes: [ColorClassNameTypes.TOOLTIP],\n\t\t\t\t\t\tdataGroupName,\n\t\t\t\t\t}),\n\t\t\t\t}))\n\t\t\t\t.filter((d) => d.value !== 0);\n\t\t\tconst thereIsMatchingData = tooltipDataGroups.length > 0;\n\n\t\t\tif (thereIsMatchingData) {\n\t\t\t\tthis.services.events.dispatchEvent(Events.Tooltip.SHOW, {\n\t\t\t\t\tmousePosition: [x, y],\n\t\t\t\t\thoveredElement: rulerLine,\n\t\t\t\t\titems: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: get(options, 'bins.rangeLabel') || 'Range',\n\t\t\t\t\t\t\tvalue: `${x0} – ${x1}`,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t...tooltipDataGroups,\n\t\t\t\t\t\t...(Tools.getProperty(\n\t\t\t\t\t\t\toptions,\n\t\t\t\t\t\t\t'tooltip',\n\t\t\t\t\t\t\t'showTotal'\n\t\t\t\t\t\t) === true\n\t\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tlabel:\n\t\t\t\t\t\t\t\t\t\t\tget(\n\t\t\t\t\t\t\t\t\t\t\t\toptions,\n\t\t\t\t\t\t\t\t\t\t\t\t'tooltip.totalLabel'\n\t\t\t\t\t\t\t\t\t\t\t) || 'Total',\n\t\t\t\t\t\t\t\t\t\tvalue: activeDataGroupNames.reduce(\n\t\t\t\t\t\t\t\t\t\t\t(accum, currentValue) =>\n\t\t\t\t\t\t\t\t\t\t\t\taccum +\n\t\t\t\t\t\t\t\t\t\t\t\tparseFloat(\n\t\t\t\t\t\t\t\t\t\t\t\t\tget(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsampleMatchData,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t`data.${currentValue}`\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t0\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t ]\n\t\t\t\t\t\t\t: []),\n\t\t\t\t\t],\n\t\t\t\t});\n\n\t\t\t\truler.attr('opacity', 1);\n\n\t\t\t\tconst rulerPosition = domainScale((x0 + x1) / 2);\n\n\t\t\t\t// line snaps to matching point\n\t\t\t\tif (orientation === 'horizontal') {\n\t\t\t\t\trulerLine\n\t\t\t\t\t\t.attr('x1', yScaleStart)\n\t\t\t\t\t\t.attr('x2', yScaleEnd)\n\t\t\t\t\t\t.attr('y1', rulerPosition)\n\t\t\t\t\t\t.attr('y2', rulerPosition);\n\t\t\t\t} else {\n\t\t\t\t\trulerLine\n\t\t\t\t\t\t.attr('y1', yScaleStart)\n\t\t\t\t\t\t.attr('y2', yScaleEnd)\n\t\t\t\t\t\t.attr('x1', rulerPosition)\n\t\t\t\t\t\t.attr('x2', rulerPosition);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.hideRuler();\n\t\t\t}\n\t\t} else {\n\t\t\tthis.hideRuler();\n\t\t}\n\t}\n}\n"]}
|
package/components/axes/ruler.js
CHANGED
|
@@ -15,7 +15,7 @@ var __extends = (this && this.__extends) || (function () {
|
|
|
15
15
|
import { Component } from '../component';
|
|
16
16
|
import { DOMUtils } from '../../services';
|
|
17
17
|
import { CartesianOrientations, Events, RenderTypes } from '../../interfaces';
|
|
18
|
-
import
|
|
18
|
+
import * as Tools from '../../tools';
|
|
19
19
|
// D3 Imports
|
|
20
20
|
// @ts-ignore
|
|
21
21
|
// ts-ignore is needed because `@types/d3`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ruler.js","sourceRoot":"","sources":["ruler.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from '../component';\nimport { DOMUtils } from '../../services';\nimport { CartesianOrientations, Events, RenderTypes } from '../../interfaces';\nimport { Tools } from '../../tools';\n\n// D3 Imports\n// @ts-ignore\n// ts-ignore is needed because `@types/d3`\n// is missing the `pointer` function\nimport { Selection, pointer } from 'd3-selection';\n\nexport type GenericSvgSelection = Selection<SVGElement, any, SVGElement, any>;\n\nconst THRESHOLD = 5;\n\n/** check if x is inside threshold area extents */\nfunction pointIsWithinThreshold(dx: number, x: number) {\n\treturn dx > x - THRESHOLD && dx < x + THRESHOLD;\n}\n\nexport class Ruler extends Component {\n\ttype = 'ruler';\n\trenderType = RenderTypes.SVG;\n\n\tbackdrop: GenericSvgSelection;\n\telementsToHighlight: GenericSvgSelection;\n\tpointsWithinLine: {\n\t\tdomainValue: number;\n\t\toriginalData: any;\n\t}[];\n\tisXGridEnabled = Tools.getProperty(\n\t\tthis.getOptions(),\n\t\t'grid',\n\t\t'x',\n\t\t'enabled'\n\t);\n\tisYGridEnabled = Tools.getProperty(\n\t\tthis.getOptions(),\n\t\t'grid',\n\t\t'y',\n\t\t'enabled'\n\t);\n\t// flag for checking whether ruler event listener is added or not\n\tisEventListenerAdded = false;\n\n\trender() {\n\t\tconst isRulerEnabled = Tools.getProperty(\n\t\t\tthis.getOptions(),\n\t\t\t'ruler',\n\t\t\t'enabled'\n\t\t);\n\n\t\tthis.drawBackdrop();\n\n\t\tif (isRulerEnabled && !this.isEventListenerAdded) {\n\t\t\tthis.addBackdropEventListeners();\n\t\t} else if (!isRulerEnabled && this.isEventListenerAdded) {\n\t\t\tthis.removeBackdropEventListeners();\n\t\t}\n\t}\n\n\tremoveBackdropEventListeners() {\n\t\tthis.isEventListenerAdded = false;\n\t\tthis.backdrop.on('mousemove mouseover mouseout', null);\n\t}\n\n\tformatTooltipData(tooltipData) {\n\t\treturn tooltipData;\n\t}\n\n\tshowRuler(event, [x, y]: [number, number]) {\n\t\tconst svg = this.parent;\n\n\t\tconst orientation: CartesianOrientations = this.services.cartesianScales.getOrientation();\n\n\t\tconst displayData = this.model.getDisplayData();\n\n\t\tconst rangeScale = this.services.cartesianScales.getRangeScale();\n\t\tconst [yScaleEnd, yScaleStart] = rangeScale.range();\n\n\t\tconst mouseCoordinate =\n\t\t\torientation === CartesianOrientations.HORIZONTAL ? y : x;\n\t\tconst ruler = DOMUtils.appendOrSelect(svg, 'g.ruler').attr(\n\t\t\t'aria-label',\n\t\t\t'ruler'\n\t\t);\n\t\tconst rulerLine = DOMUtils.appendOrSelect(ruler, 'line.ruler-line');\n\t\tconst dataPointElements: GenericSvgSelection = svg.selectAll(\n\t\t\t'[role=graphics-symbol]'\n\t\t);\n\n\t\tconst pointsWithinLine = displayData\n\t\t\t.map((d) => ({\n\t\t\t\tdomainValue: this.services.cartesianScales.getDomainValue(d),\n\t\t\t\toriginalData: d,\n\t\t\t}))\n\t\t\t.filter((d) =>\n\t\t\t\tpointIsWithinThreshold(d.domainValue, mouseCoordinate)\n\t\t\t);\n\n\t\tif (\n\t\t\tthis.pointsWithinLine &&\n\t\t\tpointsWithinLine.length === this.pointsWithinLine.length &&\n\t\t\tpointsWithinLine.map((point) => point.domainValue).join() ===\n\t\t\t\tthis.pointsWithinLine.map((point) => point.domainValue).join()\n\t\t) {\n\t\t\tthis.pointsWithinLine = pointsWithinLine;\n\t\t\treturn this.services.events.dispatchEvent(Events.Tooltip.MOVE, {\n\t\t\t\tmousePosition: [x, y],\n\t\t\t});\n\t\t}\n\n\t\tthis.pointsWithinLine = pointsWithinLine;\n\n\t\t/**\n\t\t * Find matches, reduce is used instead of filter\n\t\t * to only get elements which belong to the same axis coordinate\n\t\t */\n\t\tconst dataPointsMatchingRulerLine: {\n\t\t\tdomainValue: number;\n\t\t\toriginalData: any;\n\t\t}[] = this.pointsWithinLine.reduce((accum, currentValue) => {\n\t\t\tif (accum.length === 0) {\n\t\t\t\taccum.push(currentValue);\n\t\t\t\treturn accum;\n\t\t\t}\n\n\t\t\t// store the first element of the accumulator array to compare it with current element being processed\n\t\t\tconst sampleAccumValue = accum[0].domainValue;\n\n\t\t\tconst distanceToCurrentValue = Math.abs(\n\t\t\t\tmouseCoordinate - currentValue.domainValue\n\t\t\t);\n\t\t\tconst distanceToAccumValue = Math.abs(\n\t\t\t\tmouseCoordinate - sampleAccumValue\n\t\t\t);\n\n\t\t\tif (distanceToCurrentValue > distanceToAccumValue) {\n\t\t\t\t// if distance with current value is bigger than already existing value in the accumulator, skip current iteration\n\t\t\t\treturn accum;\n\t\t\t} else if (distanceToCurrentValue < distanceToAccumValue) {\n\t\t\t\t// currentValue data point is closer to mouse inside the threshold area, so reinstantiate array\n\t\t\t\taccum = [currentValue];\n\t\t\t} else {\n\t\t\t\t// currentValue is equal to already stored values, which means there's another match on the same coordinate\n\t\t\t\taccum.push(currentValue);\n\t\t\t}\n\n\t\t\treturn accum;\n\t\t}, []);\n\n\t\t// some data point match\n\t\tif (dataPointsMatchingRulerLine.length > 0) {\n\t\t\tconst tooltipData = dataPointsMatchingRulerLine\n\t\t\t\t.map((d) => d.originalData)\n\t\t\t\t.filter((d) => {\n\t\t\t\t\tconst rangeIdentifier = this.services.cartesianScales.getRangeIdentifier(\n\t\t\t\t\t\td\n\t\t\t\t\t);\n\t\t\t\t\tconst value = d[rangeIdentifier];\n\t\t\t\t\treturn value !== null && value !== undefined;\n\t\t\t\t});\n\n\t\t\t// get elements on which we should trigger mouse events\n\t\t\tconst domainValuesMatchingRulerLine = dataPointsMatchingRulerLine.map(\n\t\t\t\t(d) => d.domainValue\n\t\t\t);\n\t\t\tconst elementsToHighlight = dataPointElements.filter((d) => {\n\t\t\t\tconst domainValue = this.services.cartesianScales.getDomainValue(\n\t\t\t\t\td\n\t\t\t\t);\n\t\t\t\treturn domainValuesMatchingRulerLine.includes(domainValue);\n\t\t\t});\n\n\t\t\t/** if we pass from a trigger area to another one\n\t\t\t * mouseout on previous elements won't get dispatched\n\t\t\t * so we need to do it manually\n\t\t\t */\n\t\t\tif (\n\t\t\t\tthis.elementsToHighlight &&\n\t\t\t\tthis.elementsToHighlight.size() > 0 &&\n\t\t\t\t!Tools.isEqual(this.elementsToHighlight, elementsToHighlight)\n\t\t\t) {\n\t\t\t\tthis.hideRuler();\n\t\t\t}\n\n\t\t\telementsToHighlight.dispatch('mouseover');\n\n\t\t\t// set current hovered elements\n\t\t\tthis.elementsToHighlight = elementsToHighlight;\n\n\t\t\tthis.services.events.dispatchEvent(Events.Tooltip.SHOW, {\n\t\t\t\tmousePosition: [x, y],\n\t\t\t\thoveredElement: rulerLine,\n\t\t\t\tdata: this.formatTooltipData(tooltipData),\n\t\t\t});\n\n\t\t\truler.attr('opacity', 1);\n\n\t\t\t// line snaps to matching point\n\t\t\tconst sampleMatch = dataPointsMatchingRulerLine[0];\n\t\t\tif (orientation === 'horizontal') {\n\t\t\t\trulerLine\n\t\t\t\t\t.attr('x1', yScaleStart)\n\t\t\t\t\t.attr('x2', yScaleEnd)\n\t\t\t\t\t.attr('y1', sampleMatch.domainValue)\n\t\t\t\t\t.attr('y2', sampleMatch.domainValue);\n\t\t\t} else {\n\t\t\t\trulerLine\n\t\t\t\t\t.attr('y1', yScaleStart)\n\t\t\t\t\t.attr('y2', yScaleEnd)\n\t\t\t\t\t.attr('x1', sampleMatch.domainValue)\n\t\t\t\t\t.attr('x2', sampleMatch.domainValue);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.hideRuler();\n\t\t}\n\t}\n\n\thideRuler() {\n\t\tconst svg = this.parent;\n\t\tconst ruler = DOMUtils.appendOrSelect(svg, 'g.ruler');\n\t\tconst dataPointElements = svg.selectAll('[role=graphics-symbol]');\n\n\t\tdataPointElements.dispatch('mouseout');\n\t\tthis.services.events.dispatchEvent(Events.Tooltip.HIDE);\n\t\truler.attr('opacity', 0);\n\t}\n\n\t/**\n\t * Adds the listener on the X grid to trigger multiple point tooltips along the x axis.\n\t */\n\taddBackdropEventListeners() {\n\t\tthis.isEventListenerAdded = true;\n\n\t\tconst self = this;\n\n\t\tconst holder = this.services.domUtils.getHolder();\n\n\t\tconst displayData = this.model.getDisplayData();\n\n\t\tlet mouseMoveCallback = function (event) {\n\t\t\tconst pos = pointer(event, self.parent.node());\n\n\t\t\tself.showRuler(event, pos);\n\t\t};\n\n\t\t// Debounce mouseMoveCallback if there are more than 100 datapoints\n\t\tif (displayData.length > 100) {\n\t\t\tconst debounceThreshold = (displayData.length % 50) * 12.5;\n\n\t\t\tmouseMoveCallback = Tools.debounceWithD3MousePosition(\n\t\t\t\tfunction (event) {\n\t\t\t\t\tconst { mousePosition } = this;\n\t\t\t\t\tself.showRuler(event, mousePosition);\n\t\t\t\t},\n\t\t\t\tdebounceThreshold,\n\t\t\t\tholder\n\t\t\t);\n\t\t}\n\n\t\tthis.backdrop\n\t\t\t.on('mousemove mouseover', mouseMoveCallback)\n\t\t\t.on('mouseout', this.hideRuler.bind(this));\n\t}\n\n\tdrawBackdrop() {\n\t\tconst svg = this.parent;\n\n\t\t// Get height from the grid\n\t\tthis.backdrop = DOMUtils.appendOrSelect(svg, 'svg.chart-grid-backdrop');\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ruler.js","sourceRoot":"","sources":["ruler.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from '../component';\nimport { DOMUtils } from '../../services';\nimport { CartesianOrientations, Events, RenderTypes } from '../../interfaces';\nimport * as Tools from '../../tools';\n\n// D3 Imports\n// @ts-ignore\n// ts-ignore is needed because `@types/d3`\n// is missing the `pointer` function\nimport { Selection, pointer } from 'd3-selection';\n\nexport type GenericSvgSelection = Selection<SVGElement, any, SVGElement, any>;\n\nconst THRESHOLD = 5;\n\n/** check if x is inside threshold area extents */\nfunction pointIsWithinThreshold(dx: number, x: number) {\n\treturn dx > x - THRESHOLD && dx < x + THRESHOLD;\n}\n\nexport class Ruler extends Component {\n\ttype = 'ruler';\n\trenderType = RenderTypes.SVG;\n\n\tbackdrop: GenericSvgSelection;\n\telementsToHighlight: GenericSvgSelection;\n\tpointsWithinLine: {\n\t\tdomainValue: number;\n\t\toriginalData: any;\n\t}[];\n\tisXGridEnabled = Tools.getProperty(\n\t\tthis.getOptions(),\n\t\t'grid',\n\t\t'x',\n\t\t'enabled'\n\t);\n\tisYGridEnabled = Tools.getProperty(\n\t\tthis.getOptions(),\n\t\t'grid',\n\t\t'y',\n\t\t'enabled'\n\t);\n\t// flag for checking whether ruler event listener is added or not\n\tisEventListenerAdded = false;\n\n\trender() {\n\t\tconst isRulerEnabled = Tools.getProperty(\n\t\t\tthis.getOptions(),\n\t\t\t'ruler',\n\t\t\t'enabled'\n\t\t);\n\n\t\tthis.drawBackdrop();\n\n\t\tif (isRulerEnabled && !this.isEventListenerAdded) {\n\t\t\tthis.addBackdropEventListeners();\n\t\t} else if (!isRulerEnabled && this.isEventListenerAdded) {\n\t\t\tthis.removeBackdropEventListeners();\n\t\t}\n\t}\n\n\tremoveBackdropEventListeners() {\n\t\tthis.isEventListenerAdded = false;\n\t\tthis.backdrop.on('mousemove mouseover mouseout', null);\n\t}\n\n\tformatTooltipData(tooltipData) {\n\t\treturn tooltipData;\n\t}\n\n\tshowRuler(event, [x, y]: [number, number]) {\n\t\tconst svg = this.parent;\n\n\t\tconst orientation: CartesianOrientations = this.services.cartesianScales.getOrientation();\n\n\t\tconst displayData = this.model.getDisplayData();\n\n\t\tconst rangeScale = this.services.cartesianScales.getRangeScale();\n\t\tconst [yScaleEnd, yScaleStart] = rangeScale.range();\n\n\t\tconst mouseCoordinate =\n\t\t\torientation === CartesianOrientations.HORIZONTAL ? y : x;\n\t\tconst ruler = DOMUtils.appendOrSelect(svg, 'g.ruler').attr(\n\t\t\t'aria-label',\n\t\t\t'ruler'\n\t\t);\n\t\tconst rulerLine = DOMUtils.appendOrSelect(ruler, 'line.ruler-line');\n\t\tconst dataPointElements: GenericSvgSelection = svg.selectAll(\n\t\t\t'[role=graphics-symbol]'\n\t\t);\n\n\t\tconst pointsWithinLine = displayData\n\t\t\t.map((d) => ({\n\t\t\t\tdomainValue: this.services.cartesianScales.getDomainValue(d),\n\t\t\t\toriginalData: d,\n\t\t\t}))\n\t\t\t.filter((d) =>\n\t\t\t\tpointIsWithinThreshold(d.domainValue, mouseCoordinate)\n\t\t\t);\n\n\t\tif (\n\t\t\tthis.pointsWithinLine &&\n\t\t\tpointsWithinLine.length === this.pointsWithinLine.length &&\n\t\t\tpointsWithinLine.map((point) => point.domainValue).join() ===\n\t\t\t\tthis.pointsWithinLine.map((point) => point.domainValue).join()\n\t\t) {\n\t\t\tthis.pointsWithinLine = pointsWithinLine;\n\t\t\treturn this.services.events.dispatchEvent(Events.Tooltip.MOVE, {\n\t\t\t\tmousePosition: [x, y],\n\t\t\t});\n\t\t}\n\n\t\tthis.pointsWithinLine = pointsWithinLine;\n\n\t\t/**\n\t\t * Find matches, reduce is used instead of filter\n\t\t * to only get elements which belong to the same axis coordinate\n\t\t */\n\t\tconst dataPointsMatchingRulerLine: {\n\t\t\tdomainValue: number;\n\t\t\toriginalData: any;\n\t\t}[] = this.pointsWithinLine.reduce((accum, currentValue) => {\n\t\t\tif (accum.length === 0) {\n\t\t\t\taccum.push(currentValue);\n\t\t\t\treturn accum;\n\t\t\t}\n\n\t\t\t// store the first element of the accumulator array to compare it with current element being processed\n\t\t\tconst sampleAccumValue = accum[0].domainValue;\n\n\t\t\tconst distanceToCurrentValue = Math.abs(\n\t\t\t\tmouseCoordinate - currentValue.domainValue\n\t\t\t);\n\t\t\tconst distanceToAccumValue = Math.abs(\n\t\t\t\tmouseCoordinate - sampleAccumValue\n\t\t\t);\n\n\t\t\tif (distanceToCurrentValue > distanceToAccumValue) {\n\t\t\t\t// if distance with current value is bigger than already existing value in the accumulator, skip current iteration\n\t\t\t\treturn accum;\n\t\t\t} else if (distanceToCurrentValue < distanceToAccumValue) {\n\t\t\t\t// currentValue data point is closer to mouse inside the threshold area, so reinstantiate array\n\t\t\t\taccum = [currentValue];\n\t\t\t} else {\n\t\t\t\t// currentValue is equal to already stored values, which means there's another match on the same coordinate\n\t\t\t\taccum.push(currentValue);\n\t\t\t}\n\n\t\t\treturn accum;\n\t\t}, []);\n\n\t\t// some data point match\n\t\tif (dataPointsMatchingRulerLine.length > 0) {\n\t\t\tconst tooltipData = dataPointsMatchingRulerLine\n\t\t\t\t.map((d) => d.originalData)\n\t\t\t\t.filter((d) => {\n\t\t\t\t\tconst rangeIdentifier = this.services.cartesianScales.getRangeIdentifier(\n\t\t\t\t\t\td\n\t\t\t\t\t);\n\t\t\t\t\tconst value = d[rangeIdentifier];\n\t\t\t\t\treturn value !== null && value !== undefined;\n\t\t\t\t});\n\n\t\t\t// get elements on which we should trigger mouse events\n\t\t\tconst domainValuesMatchingRulerLine = dataPointsMatchingRulerLine.map(\n\t\t\t\t(d) => d.domainValue\n\t\t\t);\n\t\t\tconst elementsToHighlight = dataPointElements.filter((d) => {\n\t\t\t\tconst domainValue = this.services.cartesianScales.getDomainValue(\n\t\t\t\t\td\n\t\t\t\t);\n\t\t\t\treturn domainValuesMatchingRulerLine.includes(domainValue);\n\t\t\t});\n\n\t\t\t/** if we pass from a trigger area to another one\n\t\t\t * mouseout on previous elements won't get dispatched\n\t\t\t * so we need to do it manually\n\t\t\t */\n\t\t\tif (\n\t\t\t\tthis.elementsToHighlight &&\n\t\t\t\tthis.elementsToHighlight.size() > 0 &&\n\t\t\t\t!Tools.isEqual(this.elementsToHighlight, elementsToHighlight)\n\t\t\t) {\n\t\t\t\tthis.hideRuler();\n\t\t\t}\n\n\t\t\telementsToHighlight.dispatch('mouseover');\n\n\t\t\t// set current hovered elements\n\t\t\tthis.elementsToHighlight = elementsToHighlight;\n\n\t\t\tthis.services.events.dispatchEvent(Events.Tooltip.SHOW, {\n\t\t\t\tmousePosition: [x, y],\n\t\t\t\thoveredElement: rulerLine,\n\t\t\t\tdata: this.formatTooltipData(tooltipData),\n\t\t\t});\n\n\t\t\truler.attr('opacity', 1);\n\n\t\t\t// line snaps to matching point\n\t\t\tconst sampleMatch = dataPointsMatchingRulerLine[0];\n\t\t\tif (orientation === 'horizontal') {\n\t\t\t\trulerLine\n\t\t\t\t\t.attr('x1', yScaleStart)\n\t\t\t\t\t.attr('x2', yScaleEnd)\n\t\t\t\t\t.attr('y1', sampleMatch.domainValue)\n\t\t\t\t\t.attr('y2', sampleMatch.domainValue);\n\t\t\t} else {\n\t\t\t\trulerLine\n\t\t\t\t\t.attr('y1', yScaleStart)\n\t\t\t\t\t.attr('y2', yScaleEnd)\n\t\t\t\t\t.attr('x1', sampleMatch.domainValue)\n\t\t\t\t\t.attr('x2', sampleMatch.domainValue);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.hideRuler();\n\t\t}\n\t}\n\n\thideRuler() {\n\t\tconst svg = this.parent;\n\t\tconst ruler = DOMUtils.appendOrSelect(svg, 'g.ruler');\n\t\tconst dataPointElements = svg.selectAll('[role=graphics-symbol]');\n\n\t\tdataPointElements.dispatch('mouseout');\n\t\tthis.services.events.dispatchEvent(Events.Tooltip.HIDE);\n\t\truler.attr('opacity', 0);\n\t}\n\n\t/**\n\t * Adds the listener on the X grid to trigger multiple point tooltips along the x axis.\n\t */\n\taddBackdropEventListeners() {\n\t\tthis.isEventListenerAdded = true;\n\n\t\tconst self = this;\n\n\t\tconst holder = this.services.domUtils.getHolder();\n\n\t\tconst displayData = this.model.getDisplayData();\n\n\t\tlet mouseMoveCallback = function (event) {\n\t\t\tconst pos = pointer(event, self.parent.node());\n\n\t\t\tself.showRuler(event, pos);\n\t\t};\n\n\t\t// Debounce mouseMoveCallback if there are more than 100 datapoints\n\t\tif (displayData.length > 100) {\n\t\t\tconst debounceThreshold = (displayData.length % 50) * 12.5;\n\n\t\t\tmouseMoveCallback = Tools.debounceWithD3MousePosition(\n\t\t\t\tfunction (event) {\n\t\t\t\t\tconst { mousePosition } = this;\n\t\t\t\t\tself.showRuler(event, mousePosition);\n\t\t\t\t},\n\t\t\t\tdebounceThreshold,\n\t\t\t\tholder\n\t\t\t);\n\t\t}\n\n\t\tthis.backdrop\n\t\t\t.on('mousemove mouseover', mouseMoveCallback)\n\t\t\t.on('mouseout', this.hideRuler.bind(this));\n\t}\n\n\tdrawBackdrop() {\n\t\tconst svg = this.parent;\n\n\t\t// Get height from the grid\n\t\tthis.backdrop = DOMUtils.appendOrSelect(svg, 'svg.chart-grid-backdrop');\n\t}\n}\n"]}
|
|
@@ -14,7 +14,7 @@ var __extends = (this && this.__extends) || (function () {
|
|
|
14
14
|
// Internal Imports
|
|
15
15
|
import { Component } from '../component';
|
|
16
16
|
import { Events, RenderTypes, ToolbarControlTypes } from '../../interfaces';
|
|
17
|
-
import
|
|
17
|
+
import * as Tools from '../../tools';
|
|
18
18
|
// D3 Imports
|
|
19
19
|
import { select } from 'd3-selection';
|
|
20
20
|
var Toolbar = /** @class */ (function (_super) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolbar.js","sourceRoot":"","sources":["toolbar.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from '../component';\nimport { Events, RenderTypes, ToolbarControlTypes } from '../../interfaces';\nimport { Tools } from '../../tools';\n\n// D3 Imports\nimport { select } from 'd3-selection';\n\nexport class Toolbar extends Component {\n\tstatic buttonID = 0;\n\ttype = 'toolbar';\n\trenderType = RenderTypes.HTML;\n\n\t// overflow menu button to control background color\n\toverflowButton: any;\n\n\t// div options list element\n\toverflowMenu: any;\n\n\tinit() {\n\t\tconst bodyOnClickHandler = () => this.updateOverflowMenu(false);\n\n\t\t// Grab the tooltip element\n\t\tthis.services.events.addEventListener(\n\t\t\tEvents.Toolbar.SHOW_OVERFLOW_MENU,\n\t\t\t() => {\n\t\t\t\tthis.renderOverflowMenu();\n\n\t\t\t\t// hide overflow menu if user clicks on somewhere in web page\n\t\t\t\tdocument.body.addEventListener('click', bodyOnClickHandler);\n\t\t\t}\n\t\t);\n\n\t\t// listen to hide overflow menu event to hide the overflow menu\n\t\tthis.services.events.addEventListener(\n\t\t\tEvents.Toolbar.HIDE_OVERFLOW_MENU,\n\t\t\t() => {\n\t\t\t\t// // hide overflow menu if user clicks on somewhere in web page\n\t\t\t\tdocument.body.removeEventListener('click', bodyOnClickHandler);\n\t\t\t}\n\t\t);\n\t}\n\n\trender(animate = true) {\n\t\tconst container = this.getComponentContainer()\n\t\t\t.attr('role', 'toolbar')\n\t\t\t.attr(\n\t\t\t\t'aria-label',\n\t\t\t\t`chart-${this.services.domUtils.getChartID()} toolbar`\n\t\t\t);\n\n\t\tconst isDataLoading = Tools.getProperty(\n\t\t\tthis.getOptions(),\n\t\t\t'data',\n\t\t\t'loading'\n\t\t);\n\n\t\tif (isDataLoading) {\n\t\t\tcontainer.html('');\n\t\t\t// Set overflow menu to null if data is loading\n\t\t\t// This will render in a new overflow menu when data is done loading\n\t\t\tthis.overflowMenu = null;\n\t\t} else {\n\t\t\tif (!this.overflowMenu) {\n\t\t\t\tthis.overflowMenu = container\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.attr(\n\t\t\t\t\t\t'class',\n\t\t\t\t\t\t'cds--overflow-menu-options cds--overflow-menu--flip cds--overflow-menu-options cds--overflow-menu--flip'\n\t\t\t\t\t)\n\t\t\t\t\t.attr('tabindex', -1)\n\t\t\t\t\t.html(`<ul role='menu'></ul>`);\n\t\t\t}\n\n\t\t\t// get the toolbar buttons\n\t\t\tconst {\n\t\t\t\tbuttonList,\n\t\t\t\toverflowMenuItemList,\n\t\t\t} = this.getControlConfigs();\n\n\t\t\t// overflow button is required only if overflow menu item list is valid\n\t\t\tif (!!overflowMenuItemList) {\n\t\t\t\tbuttonList.push(this.getOverflowButtonConfig());\n\t\t\t}\n\n\t\t\tconst toolbarControls = container\n\t\t\t\t.selectAll('div.toolbar-control')\n\t\t\t\t.data(buttonList, (button) => button.id);\n\n\t\t\ttoolbarControls.exit().remove();\n\n\t\t\tconst enteringToolbarControls = toolbarControls\n\t\t\t\t.enter()\n\t\t\t\t.append('div')\n\t\t\t\t.attr(\n\t\t\t\t\t'class',\n\t\t\t\t\t'toolbar-control cds--overflow-menu cds--overflow-menu'\n\t\t\t\t)\n\t\t\t\t.attr('role', 'button');\n\n\t\t\tconst self = this;\n\t\t\tconst allToolbarControls = enteringToolbarControls\n\t\t\t\t.merge(toolbarControls)\n\t\t\t\t.classed('disabled', (d) => d.shouldBeDisabled())\n\t\t\t\t.attr('aria-disabled', (d) => d.shouldBeDisabled())\n\t\t\t\t.attr('aria-label', (d) => d.title)\n\t\t\t\t.html(\n\t\t\t\t\t(d) => `\n\t\t\t<button\n\t\t\t\tclass=\"cds--overflow-menu__trigger cds--overflow-menu__trigger\"\n\t\t\t\taria-haspopup=\"true\" aria-expanded=\"false\" id=\"${this.services.domUtils.generateElementIDString(\n\t\t\t\t\t`control-${d.id}`\n\t\t\t\t)}\" aria-label=\"${d.title}\">\n\t\t\t\t<svg focusable=\"false\" preserveAspectRatio=\"xMidYMid meet\" xmlns=\"http://www.w3.org/2000/svg\" class=\"cds--overflow-menu__icon cds--overflow-menu__icon\" viewBox=\"0 0 32 32\" aria-hidden=\"true\">\n\t\t\t\t\t${d.iconSVG.content}\n\t\t\t\t</svg>\n\t\t\t</button>`\n\t\t\t\t)\n\t\t\t\t.each(function (d, index) {\n\t\t\t\t\tselect(this)\n\t\t\t\t\t\t.select('svg')\n\t\t\t\t\t\t.style('will-change', 'transform')\n\t\t\t\t\t\t.style(\n\t\t\t\t\t\t\t'width',\n\t\t\t\t\t\t\td.iconSVG.width !== undefined\n\t\t\t\t\t\t\t\t? d.iconSVG.width\n\t\t\t\t\t\t\t\t: '20px'\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.style(\n\t\t\t\t\t\t\t'height',\n\t\t\t\t\t\t\td.iconSVG.height !== undefined\n\t\t\t\t\t\t\t\t? d.iconSVG.height\n\t\t\t\t\t\t\t\t: '20px'\n\t\t\t\t\t\t);\n\n\t\t\t\t\tselect(this)\n\t\t\t\t\t\t.select('button')\n\t\t\t\t\t\t.on('click', (event) => {\n\t\t\t\t\t\t\tif (!d.shouldBeDisabled()) {\n\t\t\t\t\t\t\t\tself.triggerFunctionAndEvent(d, event, this);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.on('keydown', (event: KeyboardEvent) => {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t(event.key && event.key === 'Enter') ||\n\t\t\t\t\t\t\t\tevent.key === ' '\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tself.triggerFunctionAndEvent(d, event, this);\n\t\t\t\t\t\t\t} else if (event.key && event.key === 'ArrowLeft') {\n\t\t\t\t\t\t\t\tself.focusOnPreviousEnabledToolbarItem(index);\n\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\tevent.key &&\n\t\t\t\t\t\t\t\tevent.key === 'ArrowRight'\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tself.focusOnNextEnabledToolbarItem(index);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\tthis.overflowButton = this.getComponentContainer().select(\n\t\t\t\t`button.cds--overflow-menu__trigger#${this.services.domUtils.generateElementIDString(\n\t\t\t\t\t'control-toolbar-overflow-menu'\n\t\t\t\t)}`\n\t\t\t);\n\t\t}\n\t}\n\n\trenderOverflowMenu() {\n\t\tconst { overflowMenuItemList } = this.getControlConfigs();\n\n\t\tconst overflowMenuControls = this.overflowMenu\n\t\t\t.select('ul')\n\t\t\t.selectAll('li.cds--overflow-menu-options__option')\n\t\t\t.data(overflowMenuItemList, (button) =>\n\t\t\t\tTools.getProperty(button, 'id')\n\t\t\t);\n\n\t\toverflowMenuControls.exit().remove();\n\n\t\tconst enteringOverflowMenuControls = overflowMenuControls\n\t\t\t.enter()\n\t\t\t.append('li')\n\t\t\t.attr('id', (d) =>\n\t\t\t\tthis.services.domUtils.generateElementIDString(\n\t\t\t\t\t`control-${d.id}`\n\t\t\t\t)\n\t\t\t)\n\t\t\t.attr(\n\t\t\t\t'class',\n\t\t\t\t'cds--overflow-menu-options__option cds--overflow-menu-options__option'\n\t\t\t)\n\t\t\t.attr('role', 'menuitem')\n\t\t\t.attr('tabindex', 1);\n\n\t\tenteringOverflowMenuControls\n\t\t\t.append('button')\n\t\t\t.attr(\n\t\t\t\t'class',\n\t\t\t\t'cds--overflow-menu-options__btn cds--overflow-menu-options__btn'\n\t\t\t);\n\n\t\tenteringOverflowMenuControls\n\t\t\t.merge(overflowMenuControls)\n\t\t\t.classed('cds--overflow-menu-options__option--disabled', (d) =>\n\t\t\t\td.shouldBeDisabled()\n\t\t\t)\n\t\t\t.classed('cds--overflow-menu-options__option--disabled', (d) =>\n\t\t\t\td.shouldBeDisabled()\n\t\t\t)\n\t\t\t.attr('aria-disabled', (d) => d.shouldBeDisabled())\n\t\t\t.selectAll('button')\n\t\t\t.text((d) => d.text);\n\t}\n\n\tisOverflowMenuOpen() {\n\t\treturn this.overflowMenu.classed('is-open');\n\t}\n\n\t// show/hide overflow menu\n\tupdateOverflowMenu(show: boolean) {\n\t\tif (!this.overflowMenu) {\n\t\t\treturn;\n\t\t}\n\t\tthis.overflowMenu.classed('is-open', show);\n\n\t\t// update overflow button background\n\t\tif (this.overflowButton) {\n\t\t\tthis.overflowButton.attr('aria-expanded', show);\n\t\t\tselect(this.overflowButton.node().parentNode)\n\t\t\t\t.classed('cds--overflow-menu--open', show)\n\t\t\t\t.classed('cds--overflow-menu--open', show);\n\t\t}\n\n\t\tif (show) {\n\t\t\tthis.services.events.dispatchEvent(\n\t\t\t\tEvents.Toolbar.SHOW_OVERFLOW_MENU\n\t\t\t);\n\t\t} else {\n\t\t\tthis.services.events.dispatchEvent(\n\t\t\t\tEvents.Toolbar.HIDE_OVERFLOW_MENU\n\t\t\t);\n\t\t}\n\t}\n\n\t// Toolbar controllers\n\tfocusOnPreviousEnabledToolbarItem(currentItemIndex) {\n\t\tconst buttonList = this.getToolbarButtonItems();\n\t\tlet previousItemIndex = buttonList.length;\n\n\t\tfor (let i = currentItemIndex - 1; i >= 0; i--) {\n\t\t\tconst previousButtonItem = buttonList[i];\n\t\t\tif (!previousButtonItem.shouldBeDisabled()) {\n\t\t\t\tpreviousItemIndex = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// only if previous enabled menu item found\n\t\tif (previousItemIndex < buttonList.length) {\n\t\t\tconst previousItemNode = select(\n\t\t\t\t`button#${this.services.domUtils.generateElementIDString(\n\t\t\t\t\t`control-${buttonList[previousItemIndex].id}`\n\t\t\t\t)}`\n\t\t\t).node();\n\t\t\tif ('focus' in previousItemNode) {\n\t\t\t\tpreviousItemNode.focus();\n\t\t\t}\n\t\t}\n\t}\n\n\tfocusOnNextEnabledToolbarItem(currentItemIndex) {\n\t\tconst buttonList = this.getToolbarButtonItems();\n\t\tlet nextItemIndex = -1;\n\n\t\tfor (let i = currentItemIndex + 1; i < buttonList.length; i++) {\n\t\t\tconst nextOverflowMenuItem = buttonList[i];\n\t\t\tif (!nextOverflowMenuItem.shouldBeDisabled()) {\n\t\t\t\tnextItemIndex = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// only if next enabled menu item found\n\t\tif (nextItemIndex > -1) {\n\t\t\tconst nextItemNode = select(\n\t\t\t\t`button#${this.services.domUtils.generateElementIDString(\n\t\t\t\t\t`control-${buttonList[nextItemIndex].id}`\n\t\t\t\t)}`\n\t\t\t).node();\n\n\t\t\tif ('focus' in nextItemNode) {\n\t\t\t\tnextItemNode.focus();\n\t\t\t}\n\t\t}\n\t}\n\n\tfocusOnPreviousEnabledMenuItem(currentItemIndex) {\n\t\tconst overflowMenuItems = this.getOverflowMenuItems();\n\t\tlet previousItemIndex = overflowMenuItems.length;\n\n\t\tfor (let i = currentItemIndex - 1; i >= 0; i--) {\n\t\t\tconst previousOverflowMenuItem = overflowMenuItems[i];\n\t\t\tif (!previousOverflowMenuItem.shouldBeDisabled()) {\n\t\t\t\tpreviousItemIndex = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// only if previous enabled menu item found\n\t\tif (previousItemIndex < overflowMenuItems.length) {\n\t\t\tconst previousItemNode = select(\n\t\t\t\t`#${this.services.domUtils.generateElementIDString(\n\t\t\t\t\t`control-${overflowMenuItems[previousItemIndex].id}`\n\t\t\t\t)} button`\n\t\t\t).node();\n\t\t\tif ('focus' in previousItemNode) {\n\t\t\t\tpreviousItemNode.focus();\n\t\t\t}\n\t\t}\n\t}\n\n\tfocusOnNextEnabledMenuItem(currentItemIndex) {\n\t\tconst overflowMenuItems = this.getOverflowMenuItems();\n\t\tlet nextItemIndex = -1;\n\n\t\tfor (let i = currentItemIndex + 1; i < overflowMenuItems.length; i++) {\n\t\t\tconst nextOverflowMenuItem = overflowMenuItems[i];\n\t\t\tif (!nextOverflowMenuItem.shouldBeDisabled()) {\n\t\t\t\tnextItemIndex = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// only if next enabled menu item found\n\t\tif (nextItemIndex > -1) {\n\t\t\tconst nextItemNode = select(\n\t\t\t\t`#${this.services.domUtils.generateElementIDString(\n\t\t\t\t\t`control-${overflowMenuItems[nextItemIndex].id}`\n\t\t\t\t)} button`\n\t\t\t).node();\n\n\t\t\tif ('focus' in nextItemNode) {\n\t\t\t\tnextItemNode.focus();\n\t\t\t}\n\t\t}\n\t}\n\n\ttoggleOverflowMenu(event) {\n\t\tif (this.isOverflowMenuOpen()) {\n\t\t\t// hide overflow menu\n\t\t\tthis.updateOverflowMenu(false);\n\t\t} else {\n\t\t\t// show overflow menu\n\t\t\tthis.updateOverflowMenu(true);\n\n\t\t\t// setup overflow menu item event listener\n\t\t\tconst self = this;\n\t\t\tconst overflowMenuItems = this.getOverflowMenuItems();\n\t\t\toverflowMenuItems.forEach((menuItem, index) => {\n\t\t\t\tconst element = select(\n\t\t\t\t\t`#${this.services.domUtils.generateElementIDString(\n\t\t\t\t\t\t`control-${menuItem.id}`\n\t\t\t\t\t)}`\n\t\t\t\t);\n\t\t\t\tif (element !== null) {\n\t\t\t\t\telement.on('click', () => {\n\t\t\t\t\t\tself.triggerFunctionAndEvent(\n\t\t\t\t\t\t\tmenuItem,\n\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\telement.node()\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// hide overflow menu\n\t\t\t\t\t\tself.updateOverflowMenu(false);\n\t\t\t\t\t});\n\n\t\t\t\t\telement.on('keydown', (keyEvent: KeyboardEvent) => {\n\t\t\t\t\t\tif (keyEvent && keyEvent.key === 'Enter') {\n\t\t\t\t\t\t\tself.triggerFunctionAndEvent(\n\t\t\t\t\t\t\t\tmenuItem,\n\t\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\t\telement.node()\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else if (keyEvent && keyEvent.key === 'ArrowUp') {\n\t\t\t\t\t\t\t// focus on previous menu item\n\t\t\t\t\t\t\tself.focusOnPreviousEnabledMenuItem(index);\n\t\t\t\t\t\t} else if (keyEvent && keyEvent.key === 'ArrowDown') {\n\t\t\t\t\t\t\t// focus on next menu item\n\t\t\t\t\t\t\tself.focusOnNextEnabledMenuItem(index);\n\t\t\t\t\t\t} else if (keyEvent && keyEvent.key === 'Escape') {\n\t\t\t\t\t\t\tself.updateOverflowMenu(false);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Not hide overflow menu by keyboard arrow up/down event\n\t\t\t\t\t\t// Prevent page from scrolling up/down\n\t\t\t\t\t\tkeyEvent.preventDefault();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// default to focus on the first enabled menu item\n\t\t\tself.focusOnNextEnabledMenuItem(-1);\n\t\t}\n\n\t\t// propogation should not be stopped for keyboard events\n\t\tif (!!event) {\n\t\t\tevent.stopImmediatePropagation();\n\t\t}\n\t}\n\n\t// Calls passed function && dispatches event\n\ttriggerFunctionAndEvent(control, event, element?) {\n\t\t// Check if trigger is disabled\n\t\tif (\n\t\t\ttypeof control.shouldBeDisabled === 'function' &&\n\t\t\tcontrol.shouldBeDisabled()\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Call custom function only if it exists\n\t\tif (typeof control.clickFunction === 'function') {\n\t\t\tcontrol.clickFunction(event);\n\t\t}\n\n\t\t// Dispatch selection event\n\t\tthis.services.events.dispatchEvent(Events.Toolbar.BUTTON_CLICK, {\n\t\t\tcontrol,\n\t\t\tevent,\n\t\t\telement,\n\t\t});\n\t}\n\n\tgetControlConfigs() {\n\t\tconst numberOfIcons =\n\t\t\tTools.getProperty(this.getOptions(), 'toolbar', 'numberOfIcons') -\n\t\t\t1;\n\t\tconst controls = Tools.getProperty(\n\t\t\tthis.getOptions(),\n\t\t\t'toolbar',\n\t\t\t'controls'\n\t\t);\n\n\t\tconst overflowSpecificControls = [];\n\t\tconst buttonList = [];\n\t\tconst overflowList = [];\n\n\t\tcontrols.forEach((control) => {\n\t\t\tlet controlConfig = null;\n\t\t\t// check if button is custom or default control\n\t\t\tif (control.type === ToolbarControlTypes.CUSTOM) {\n\t\t\t\t// add generic id if missing\n\t\t\t\tif (Tools.getProperty(control, 'id') === null) {\n\t\t\t\t\t// add id directly to the data passed so that id isn't reassigned on rerender\n\t\t\t\t\tcontrol.id = `toolbar-button-${Toolbar.buttonID++}`;\n\t\t\t\t}\n\t\t\t\t// define function if missing\n\t\t\t\tif (Tools.getProperty(control, 'shouldBeDisabled') === null) {\n\t\t\t\t\tcontrol.shouldBeDisabled = () => false;\n\t\t\t\t}\n\n\t\t\t\tcontrolConfig = control;\n\t\t\t} else {\n\t\t\t\tcontrolConfig = this.getControlConfigByType(control.type);\n\t\t\t}\n\n\t\t\t// add to list if config is valid\n\t\t\tif (controlConfig) {\n\t\t\t\tcontrolConfig.text = control.text ? control.text : control.type;\n\n\t\t\t\tif (controlConfig.id.indexOf('toolbar-export') !== -1) {\n\t\t\t\t\toverflowSpecificControls.push(controlConfig);\n\t\t\t\t} else if (buttonList.length < numberOfIcons) {\n\t\t\t\t\t// check if icon exists else assign to the overflow list\n\t\t\t\t\tif (\n\t\t\t\t\t\tTools.getProperty(\n\t\t\t\t\t\t\tcontrolConfig,\n\t\t\t\t\t\t\t'iconSVG',\n\t\t\t\t\t\t\t'content'\n\t\t\t\t\t\t) === null\n\t\t\t\t\t) {\n\t\t\t\t\t\toverflowList.push(controlConfig);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbuttonList.push(controlConfig);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\toverflowList.push(controlConfig);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// Ensures the `export` controls are always at the bottom\n\t\toverflowList.push(...overflowSpecificControls);\n\n\t\tif (!overflowList.length) {\n\t\t\treturn {\n\t\t\t\tbuttonList,\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\tbuttonList,\n\t\t\toverflowMenuItemList: overflowList,\n\t\t};\n\t}\n\n\tgetToolbarButtonItems() {\n\t\tconst { buttonList, overflowMenuItemList } = this.getControlConfigs();\n\t\tif (!!overflowMenuItemList) {\n\t\t\tbuttonList.push(this.getOverflowButtonConfig());\n\t\t}\n\t\tif (!!buttonList) {\n\t\t\treturn buttonList;\n\t\t}\n\n\t\treturn [];\n\t}\n\n\tgetOverflowMenuItems() {\n\t\tconst { overflowMenuItemList } = this.getControlConfigs();\n\t\tif (!!overflowMenuItemList) {\n\t\t\treturn overflowMenuItemList;\n\t\t} else {\n\t\t\treturn [];\n\t\t}\n\t}\n\n\t// special button config for overflow button\n\tgetOverflowButtonConfig() {\n\t\treturn {\n\t\t\tid: 'toolbar-overflow-menu',\n\t\t\ttitle: 'More options',\n\t\t\tshouldBeDisabled: () => false,\n\t\t\ticonSVG: {\n\t\t\t\tcontent: `<circle cx=\"16\" cy=\"8\" r=\"2\"></circle>\n\t\t\t\t<circle cx=\"16\" cy=\"16\" r=\"2\"></circle>\n\t\t\t\t<circle cx=\"16\" cy=\"24\" r=\"2\"></circle>`,\n\t\t\t},\n\t\t\tclickFunction: (event) => this.toggleOverflowMenu(event),\n\t\t};\n\t}\n\n\tgetControlConfigByType(controlType: ToolbarControlTypes) {\n\t\tconst isZoomBarEnabled =\n\t\t\tthis.services.zoom &&\n\t\t\tthis.services.zoom.isZoomBarEnabled() &&\n\t\t\t!this.services.zoom.isEmptyState();\n\n\t\tconst displayData = this.model.getDisplayData();\n\n\t\tlet controlConfig;\n\t\tswitch (controlType) {\n\t\t\tcase ToolbarControlTypes.ZOOM_IN:\n\t\t\t\tif (isZoomBarEnabled) {\n\t\t\t\t\tcontrolConfig = {\n\t\t\t\t\t\tid: 'toolbar-zoomIn',\n\t\t\t\t\t\ttitle: 'Zoom in',\n\t\t\t\t\t\tshouldBeDisabled: () =>\n\t\t\t\t\t\t\tthis.services.zoom.isMinZoomDomain(),\n\t\t\t\t\t\ticonSVG: {\n\t\t\t\t\t\t\tcontent: this.getControlIconByType(controlType),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tclickFunction: () => this.services.zoom.zoomIn(),\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase ToolbarControlTypes.ZOOM_OUT:\n\t\t\t\tif (isZoomBarEnabled) {\n\t\t\t\t\tcontrolConfig = {\n\t\t\t\t\t\tid: 'toolbar-zoomOut',\n\t\t\t\t\t\ttitle: 'Zoom out',\n\t\t\t\t\t\tshouldBeDisabled: () =>\n\t\t\t\t\t\t\tthis.services.zoom.isMaxZoomDomain(),\n\t\t\t\t\t\ticonSVG: {\n\t\t\t\t\t\t\tcontent: this.getControlIconByType(controlType),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tclickFunction: () => this.services.zoom.zoomOut(),\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase ToolbarControlTypes.RESET_ZOOM:\n\t\t\t\tif (isZoomBarEnabled) {\n\t\t\t\t\tcontrolConfig = {\n\t\t\t\t\t\tid: 'toolbar-resetZoom',\n\t\t\t\t\t\ttitle: 'Reset zoom',\n\t\t\t\t\t\tshouldBeDisabled: () =>\n\t\t\t\t\t\t\tthis.services.zoom.isMaxZoomDomain(),\n\t\t\t\t\t\ticonSVG: {\n\t\t\t\t\t\t\tcontent: this.getControlIconByType(controlType),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tclickFunction: () =>\n\t\t\t\t\t\t\tthis.services.zoom.resetZoomDomain(),\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase ToolbarControlTypes.MAKE_FULLSCREEN:\n\t\t\t\tcontrolConfig = {\n\t\t\t\t\tid: 'toolbar-makefullscreen',\n\t\t\t\t\ticonSVG: {\n\t\t\t\t\t\tcontent: this.getControlIconByType(controlType),\n\t\t\t\t\t\twidth: '15px',\n\t\t\t\t\t\theight: '15px',\n\t\t\t\t\t},\n\t\t\t\t\ttitle: 'Make fullscreen',\n\t\t\t\t\tshouldBeDisabled: () => false,\n\t\t\t\t\tclickFunction: () => {\n\t\t\t\t\t\tthis.services.domUtils.toggleFullscreen();\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase ToolbarControlTypes.SHOW_AS_DATATABLE:\n\t\t\t\tcontrolConfig = {\n\t\t\t\t\tid: 'toolbar-showasdatatable',\n\t\t\t\t\ticonSVG: {\n\t\t\t\t\t\tcontent: this.getControlIconByType(controlType),\n\t\t\t\t\t},\n\t\t\t\t\ttitle: 'Show as table',\n\t\t\t\t\tshouldBeDisabled: () => displayData.length === 0,\n\t\t\t\t\tclickFunction: () =>\n\t\t\t\t\t\tthis.services.events.dispatchEvent(Events.Modal.SHOW),\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase ToolbarControlTypes.EXPORT_CSV:\n\t\t\t\tcontrolConfig = {\n\t\t\t\t\tid: 'toolbar-export-CSV',\n\t\t\t\t\ttitle: 'Export as CSV',\n\t\t\t\t\tshouldBeDisabled: () => false,\n\t\t\t\t\ticonSVG: {\n\t\t\t\t\t\tcontent: this.getControlIconByType(controlType),\n\t\t\t\t\t},\n\t\t\t\t\tclickFunction: () => this.model.exportToCSV(),\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase ToolbarControlTypes.EXPORT_PNG:\n\t\t\t\tcontrolConfig = {\n\t\t\t\t\tid: 'toolbar-export-PNG',\n\t\t\t\t\ttitle: 'Export as PNG',\n\t\t\t\t\tshouldBeDisabled: () => false,\n\t\t\t\t\ticonSVG: {\n\t\t\t\t\t\tcontent: this.getControlIconByType(controlType),\n\t\t\t\t\t},\n\t\t\t\t\tclickFunction: () => this.services.domUtils.exportToPNG(),\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase ToolbarControlTypes.EXPORT_JPG:\n\t\t\t\tcontrolConfig = {\n\t\t\t\t\tid: 'toolbar-export-JPG',\n\t\t\t\t\ttitle: 'Export as JPG',\n\t\t\t\t\tshouldBeDisabled: () => false,\n\t\t\t\t\ticonSVG: {\n\t\t\t\t\t\tcontent: this.getControlIconByType(controlType),\n\t\t\t\t\t},\n\t\t\t\t\tclickFunction: () => this.services.domUtils.exportToJPG(),\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\t// add more toolbar control configuration here\n\n\t\t\tdefault:\n\t\t\t\tthrow Error(\n\t\t\t\t\t'Not supported toolbar control type: ' + controlType\n\t\t\t\t);\n\t\t}\n\t\treturn controlConfig;\n\t}\n\n\tgetControlIconByType(controlType: ToolbarControlTypes) {\n\t\tswitch (controlType) {\n\t\t\tcase ToolbarControlTypes.ZOOM_IN:\n\t\t\t\treturn `<polygon points=\"19 13 15 13 15 9 13 9 13 13 9 13 9 15 13 15 13 19 15 19 15 15 19 15 19 13\"/>\n\t\t\t\t\t\t<path d=\"M22.45,21A10.87,10.87,0,0,0,25,14,11,11,0,1,0,14,25a10.87,10.87,0,0,0,7-2.55L28.59,30,30,28.59ZM14,23a9,9,0,1,1,9-9A9,9,0,0,1,14,23Z\"/>`;\n\t\t\tcase ToolbarControlTypes.ZOOM_OUT:\n\t\t\t\treturn `<rect x=\"9\" y=\"13\" width=\"10\" height=\"2\"/>\n\t\t\t\t\t\t<path d=\"M22.45,21A10.87,10.87,0,0,0,25,14,11,11,0,1,0,14,25a10.87,10.87,0,0,0,7-2.55L28.59,30,30,28.59ZM14,23a9,9,0,1,1,9-9A9,9,0,0,1,14,23Z\"/>`;\n\t\t\tcase ToolbarControlTypes.RESET_ZOOM:\n\t\t\t\treturn `<path d=\"M22.4478,21A10.855,10.855,0,0,0,25,14,10.99,10.99,0,0,0,6,6.4658V2H4v8h8V8H7.332a8.9768,8.9768,0,1,1-2.1,8H3.1912A11.0118,11.0118,0,0,0,14,25a10.855,10.855,0,0,0,7-2.5522L28.5859,30,30,28.5859Z\"/>`;\n\t\t\tcase ToolbarControlTypes.MAKE_FULLSCREEN:\n\t\t\t\treturn `<polygon points=\"21 2 21 4 26.59 4 17 13.58 18.41 15 28 5.41 28 11 30 11 30 2 21 2\"/><polygon points=\"15 18.42 13.59 17 4 26.59 4 21 2 21 2 30 11 30 11 28 5.41 28 15 18.42\"/>`;\n\t\t\tcase ToolbarControlTypes.SHOW_AS_DATATABLE:\n\t\t\t\treturn `<rect x=\"4\" y=\"6\" width=\"18\" height=\"2\"/><rect x=\"4\" y=\"12\" width=\"18\" height=\"2\"/><rect x=\"4\" y=\"18\" width=\"18\" height=\"2\"/><rect x=\"4\" y=\"24\" width=\"18\" height=\"2\"/><rect x=\"26\" y=\"6\" width=\"2\" height=\"2\"/><rect x=\"26\" y=\"12\" width=\"2\" height=\"2\"/><rect x=\"26\" y=\"18\" width=\"2\" height=\"2\"/><rect x=\"26\" y=\"24\" width=\"2\" height=\"2\"/>`;\n\t\t\tcase ToolbarControlTypes.EXPORT_CSV:\n\t\t\t\treturn `<path d=\"M22.4478,21A10.855,10.855,0,0,0,25,14,10.99,10.99,0,0,0,6,6.4658V2H4v8h8V8H7.332a8.9768,8.9768,0,1,1-2.1,8H3.1912A11.0118,11.0118,0,0,0,14,25a10.855,10.855,0,0,0,7-2.5522L28.5859,30,30,28.5859Z\"/>`;\n\t\t\tcase ToolbarControlTypes.EXPORT_JPG:\n\t\t\t\treturn `<path d=\"M22.4478,21A10.855,10.855,0,0,0,25,14,10.99,10.99,0,0,0,6,6.4658V2H4v8h8V8H7.332a8.9768,8.9768,0,1,1-2.1,8H3.1912A11.0118,11.0118,0,0,0,14,25a10.855,10.855,0,0,0,7-2.5522L28.5859,30,30,28.5859Z\"/>`;\n\t\t\tcase ToolbarControlTypes.EXPORT_PNG:\n\t\t\t\treturn `<path d=\"M22.4478,21A10.855,10.855,0,0,0,25,14,10.99,10.99,0,0,0,6,6.4658V2H4v8h8V8H7.332a8.9768,8.9768,0,1,1-2.1,8H3.1912A11.0118,11.0118,0,0,0,14,25a10.855,10.855,0,0,0,7-2.5522L28.5859,30,30,28.5859Z\"/>`; // add more icons here\n\t\t\t// svg icon must be with 32x32 viewBox\n\n\t\t\tdefault:\n\t\t\t\tthrow Error(\n\t\t\t\t\t'Not supported toolbar control type: ' + controlType\n\t\t\t\t);\n\t\t}\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"toolbar.js","sourceRoot":"","sources":["toolbar.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from '../component';\nimport { Events, RenderTypes, ToolbarControlTypes } from '../../interfaces';\nimport * as Tools from '../../tools';\n\n// D3 Imports\nimport { select } from 'd3-selection';\n\nexport class Toolbar extends Component {\n\tstatic buttonID = 0;\n\ttype = 'toolbar';\n\trenderType = RenderTypes.HTML;\n\n\t// overflow menu button to control background color\n\toverflowButton: any;\n\n\t// div options list element\n\toverflowMenu: any;\n\n\tinit() {\n\t\tconst bodyOnClickHandler = () => this.updateOverflowMenu(false);\n\n\t\t// Grab the tooltip element\n\t\tthis.services.events.addEventListener(\n\t\t\tEvents.Toolbar.SHOW_OVERFLOW_MENU,\n\t\t\t() => {\n\t\t\t\tthis.renderOverflowMenu();\n\n\t\t\t\t// hide overflow menu if user clicks on somewhere in web page\n\t\t\t\tdocument.body.addEventListener('click', bodyOnClickHandler);\n\t\t\t}\n\t\t);\n\n\t\t// listen to hide overflow menu event to hide the overflow menu\n\t\tthis.services.events.addEventListener(\n\t\t\tEvents.Toolbar.HIDE_OVERFLOW_MENU,\n\t\t\t() => {\n\t\t\t\t// // hide overflow menu if user clicks on somewhere in web page\n\t\t\t\tdocument.body.removeEventListener('click', bodyOnClickHandler);\n\t\t\t}\n\t\t);\n\t}\n\n\trender(animate = true) {\n\t\tconst container = this.getComponentContainer()\n\t\t\t.attr('role', 'toolbar')\n\t\t\t.attr(\n\t\t\t\t'aria-label',\n\t\t\t\t`chart-${this.services.domUtils.getChartID()} toolbar`\n\t\t\t);\n\n\t\tconst isDataLoading = Tools.getProperty(\n\t\t\tthis.getOptions(),\n\t\t\t'data',\n\t\t\t'loading'\n\t\t);\n\n\t\tif (isDataLoading) {\n\t\t\tcontainer.html('');\n\t\t\t// Set overflow menu to null if data is loading\n\t\t\t// This will render in a new overflow menu when data is done loading\n\t\t\tthis.overflowMenu = null;\n\t\t} else {\n\t\t\tif (!this.overflowMenu) {\n\t\t\t\tthis.overflowMenu = container\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.attr(\n\t\t\t\t\t\t'class',\n\t\t\t\t\t\t'cds--overflow-menu-options cds--overflow-menu--flip cds--overflow-menu-options cds--overflow-menu--flip'\n\t\t\t\t\t)\n\t\t\t\t\t.attr('tabindex', -1)\n\t\t\t\t\t.html(`<ul role='menu'></ul>`);\n\t\t\t}\n\n\t\t\t// get the toolbar buttons\n\t\t\tconst {\n\t\t\t\tbuttonList,\n\t\t\t\toverflowMenuItemList,\n\t\t\t} = this.getControlConfigs();\n\n\t\t\t// overflow button is required only if overflow menu item list is valid\n\t\t\tif (!!overflowMenuItemList) {\n\t\t\t\tbuttonList.push(this.getOverflowButtonConfig());\n\t\t\t}\n\n\t\t\tconst toolbarControls = container\n\t\t\t\t.selectAll('div.toolbar-control')\n\t\t\t\t.data(buttonList, (button) => button.id);\n\n\t\t\ttoolbarControls.exit().remove();\n\n\t\t\tconst enteringToolbarControls = toolbarControls\n\t\t\t\t.enter()\n\t\t\t\t.append('div')\n\t\t\t\t.attr(\n\t\t\t\t\t'class',\n\t\t\t\t\t'toolbar-control cds--overflow-menu cds--overflow-menu'\n\t\t\t\t)\n\t\t\t\t.attr('role', 'button');\n\n\t\t\tconst self = this;\n\t\t\tconst allToolbarControls = enteringToolbarControls\n\t\t\t\t.merge(toolbarControls)\n\t\t\t\t.classed('disabled', (d) => d.shouldBeDisabled())\n\t\t\t\t.attr('aria-disabled', (d) => d.shouldBeDisabled())\n\t\t\t\t.attr('aria-label', (d) => d.title)\n\t\t\t\t.html(\n\t\t\t\t\t(d) => `\n\t\t\t<button\n\t\t\t\tclass=\"cds--overflow-menu__trigger cds--overflow-menu__trigger\"\n\t\t\t\taria-haspopup=\"true\" aria-expanded=\"false\" id=\"${this.services.domUtils.generateElementIDString(\n\t\t\t\t\t`control-${d.id}`\n\t\t\t\t)}\" aria-label=\"${d.title}\">\n\t\t\t\t<svg focusable=\"false\" preserveAspectRatio=\"xMidYMid meet\" xmlns=\"http://www.w3.org/2000/svg\" class=\"cds--overflow-menu__icon cds--overflow-menu__icon\" viewBox=\"0 0 32 32\" aria-hidden=\"true\">\n\t\t\t\t\t${d.iconSVG.content}\n\t\t\t\t</svg>\n\t\t\t</button>`\n\t\t\t\t)\n\t\t\t\t.each(function (d, index) {\n\t\t\t\t\tselect(this)\n\t\t\t\t\t\t.select('svg')\n\t\t\t\t\t\t.style('will-change', 'transform')\n\t\t\t\t\t\t.style(\n\t\t\t\t\t\t\t'width',\n\t\t\t\t\t\t\td.iconSVG.width !== undefined\n\t\t\t\t\t\t\t\t? d.iconSVG.width\n\t\t\t\t\t\t\t\t: '20px'\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.style(\n\t\t\t\t\t\t\t'height',\n\t\t\t\t\t\t\td.iconSVG.height !== undefined\n\t\t\t\t\t\t\t\t? d.iconSVG.height\n\t\t\t\t\t\t\t\t: '20px'\n\t\t\t\t\t\t);\n\n\t\t\t\t\tselect(this)\n\t\t\t\t\t\t.select('button')\n\t\t\t\t\t\t.on('click', (event) => {\n\t\t\t\t\t\t\tif (!d.shouldBeDisabled()) {\n\t\t\t\t\t\t\t\tself.triggerFunctionAndEvent(d, event, this);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.on('keydown', (event: KeyboardEvent) => {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t(event.key && event.key === 'Enter') ||\n\t\t\t\t\t\t\t\tevent.key === ' '\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tself.triggerFunctionAndEvent(d, event, this);\n\t\t\t\t\t\t\t} else if (event.key && event.key === 'ArrowLeft') {\n\t\t\t\t\t\t\t\tself.focusOnPreviousEnabledToolbarItem(index);\n\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\tevent.key &&\n\t\t\t\t\t\t\t\tevent.key === 'ArrowRight'\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tself.focusOnNextEnabledToolbarItem(index);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\tthis.overflowButton = this.getComponentContainer().select(\n\t\t\t\t`button.cds--overflow-menu__trigger#${this.services.domUtils.generateElementIDString(\n\t\t\t\t\t'control-toolbar-overflow-menu'\n\t\t\t\t)}`\n\t\t\t);\n\t\t}\n\t}\n\n\trenderOverflowMenu() {\n\t\tconst { overflowMenuItemList } = this.getControlConfigs();\n\n\t\tconst overflowMenuControls = this.overflowMenu\n\t\t\t.select('ul')\n\t\t\t.selectAll('li.cds--overflow-menu-options__option')\n\t\t\t.data(overflowMenuItemList, (button) =>\n\t\t\t\tTools.getProperty(button, 'id')\n\t\t\t);\n\n\t\toverflowMenuControls.exit().remove();\n\n\t\tconst enteringOverflowMenuControls = overflowMenuControls\n\t\t\t.enter()\n\t\t\t.append('li')\n\t\t\t.attr('id', (d) =>\n\t\t\t\tthis.services.domUtils.generateElementIDString(\n\t\t\t\t\t`control-${d.id}`\n\t\t\t\t)\n\t\t\t)\n\t\t\t.attr(\n\t\t\t\t'class',\n\t\t\t\t'cds--overflow-menu-options__option cds--overflow-menu-options__option'\n\t\t\t)\n\t\t\t.attr('role', 'menuitem')\n\t\t\t.attr('tabindex', 1);\n\n\t\tenteringOverflowMenuControls\n\t\t\t.append('button')\n\t\t\t.attr(\n\t\t\t\t'class',\n\t\t\t\t'cds--overflow-menu-options__btn cds--overflow-menu-options__btn'\n\t\t\t);\n\n\t\tenteringOverflowMenuControls\n\t\t\t.merge(overflowMenuControls)\n\t\t\t.classed('cds--overflow-menu-options__option--disabled', (d) =>\n\t\t\t\td.shouldBeDisabled()\n\t\t\t)\n\t\t\t.classed('cds--overflow-menu-options__option--disabled', (d) =>\n\t\t\t\td.shouldBeDisabled()\n\t\t\t)\n\t\t\t.attr('aria-disabled', (d) => d.shouldBeDisabled())\n\t\t\t.selectAll('button')\n\t\t\t.text((d) => d.text);\n\t}\n\n\tisOverflowMenuOpen() {\n\t\treturn this.overflowMenu.classed('is-open');\n\t}\n\n\t// show/hide overflow menu\n\tupdateOverflowMenu(show: boolean) {\n\t\tif (!this.overflowMenu) {\n\t\t\treturn;\n\t\t}\n\t\tthis.overflowMenu.classed('is-open', show);\n\n\t\t// update overflow button background\n\t\tif (this.overflowButton) {\n\t\t\tthis.overflowButton.attr('aria-expanded', show);\n\t\t\tselect(this.overflowButton.node().parentNode)\n\t\t\t\t.classed('cds--overflow-menu--open', show)\n\t\t\t\t.classed('cds--overflow-menu--open', show);\n\t\t}\n\n\t\tif (show) {\n\t\t\tthis.services.events.dispatchEvent(\n\t\t\t\tEvents.Toolbar.SHOW_OVERFLOW_MENU\n\t\t\t);\n\t\t} else {\n\t\t\tthis.services.events.dispatchEvent(\n\t\t\t\tEvents.Toolbar.HIDE_OVERFLOW_MENU\n\t\t\t);\n\t\t}\n\t}\n\n\t// Toolbar controllers\n\tfocusOnPreviousEnabledToolbarItem(currentItemIndex) {\n\t\tconst buttonList = this.getToolbarButtonItems();\n\t\tlet previousItemIndex = buttonList.length;\n\n\t\tfor (let i = currentItemIndex - 1; i >= 0; i--) {\n\t\t\tconst previousButtonItem = buttonList[i];\n\t\t\tif (!previousButtonItem.shouldBeDisabled()) {\n\t\t\t\tpreviousItemIndex = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// only if previous enabled menu item found\n\t\tif (previousItemIndex < buttonList.length) {\n\t\t\tconst previousItemNode = select(\n\t\t\t\t`button#${this.services.domUtils.generateElementIDString(\n\t\t\t\t\t`control-${buttonList[previousItemIndex].id}`\n\t\t\t\t)}`\n\t\t\t).node();\n\t\t\tif ('focus' in previousItemNode) {\n\t\t\t\tpreviousItemNode.focus();\n\t\t\t}\n\t\t}\n\t}\n\n\tfocusOnNextEnabledToolbarItem(currentItemIndex) {\n\t\tconst buttonList = this.getToolbarButtonItems();\n\t\tlet nextItemIndex = -1;\n\n\t\tfor (let i = currentItemIndex + 1; i < buttonList.length; i++) {\n\t\t\tconst nextOverflowMenuItem = buttonList[i];\n\t\t\tif (!nextOverflowMenuItem.shouldBeDisabled()) {\n\t\t\t\tnextItemIndex = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// only if next enabled menu item found\n\t\tif (nextItemIndex > -1) {\n\t\t\tconst nextItemNode = select(\n\t\t\t\t`button#${this.services.domUtils.generateElementIDString(\n\t\t\t\t\t`control-${buttonList[nextItemIndex].id}`\n\t\t\t\t)}`\n\t\t\t).node();\n\n\t\t\tif ('focus' in nextItemNode) {\n\t\t\t\tnextItemNode.focus();\n\t\t\t}\n\t\t}\n\t}\n\n\tfocusOnPreviousEnabledMenuItem(currentItemIndex) {\n\t\tconst overflowMenuItems = this.getOverflowMenuItems();\n\t\tlet previousItemIndex = overflowMenuItems.length;\n\n\t\tfor (let i = currentItemIndex - 1; i >= 0; i--) {\n\t\t\tconst previousOverflowMenuItem = overflowMenuItems[i];\n\t\t\tif (!previousOverflowMenuItem.shouldBeDisabled()) {\n\t\t\t\tpreviousItemIndex = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// only if previous enabled menu item found\n\t\tif (previousItemIndex < overflowMenuItems.length) {\n\t\t\tconst previousItemNode = select(\n\t\t\t\t`#${this.services.domUtils.generateElementIDString(\n\t\t\t\t\t`control-${overflowMenuItems[previousItemIndex].id}`\n\t\t\t\t)} button`\n\t\t\t).node();\n\t\t\tif ('focus' in previousItemNode) {\n\t\t\t\tpreviousItemNode.focus();\n\t\t\t}\n\t\t}\n\t}\n\n\tfocusOnNextEnabledMenuItem(currentItemIndex) {\n\t\tconst overflowMenuItems = this.getOverflowMenuItems();\n\t\tlet nextItemIndex = -1;\n\n\t\tfor (let i = currentItemIndex + 1; i < overflowMenuItems.length; i++) {\n\t\t\tconst nextOverflowMenuItem = overflowMenuItems[i];\n\t\t\tif (!nextOverflowMenuItem.shouldBeDisabled()) {\n\t\t\t\tnextItemIndex = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// only if next enabled menu item found\n\t\tif (nextItemIndex > -1) {\n\t\t\tconst nextItemNode = select(\n\t\t\t\t`#${this.services.domUtils.generateElementIDString(\n\t\t\t\t\t`control-${overflowMenuItems[nextItemIndex].id}`\n\t\t\t\t)} button`\n\t\t\t).node();\n\n\t\t\tif ('focus' in nextItemNode) {\n\t\t\t\tnextItemNode.focus();\n\t\t\t}\n\t\t}\n\t}\n\n\ttoggleOverflowMenu(event) {\n\t\tif (this.isOverflowMenuOpen()) {\n\t\t\t// hide overflow menu\n\t\t\tthis.updateOverflowMenu(false);\n\t\t} else {\n\t\t\t// show overflow menu\n\t\t\tthis.updateOverflowMenu(true);\n\n\t\t\t// setup overflow menu item event listener\n\t\t\tconst self = this;\n\t\t\tconst overflowMenuItems = this.getOverflowMenuItems();\n\t\t\toverflowMenuItems.forEach((menuItem, index) => {\n\t\t\t\tconst element = select(\n\t\t\t\t\t`#${this.services.domUtils.generateElementIDString(\n\t\t\t\t\t\t`control-${menuItem.id}`\n\t\t\t\t\t)}`\n\t\t\t\t);\n\t\t\t\tif (element !== null) {\n\t\t\t\t\telement.on('click', () => {\n\t\t\t\t\t\tself.triggerFunctionAndEvent(\n\t\t\t\t\t\t\tmenuItem,\n\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\telement.node()\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// hide overflow menu\n\t\t\t\t\t\tself.updateOverflowMenu(false);\n\t\t\t\t\t});\n\n\t\t\t\t\telement.on('keydown', (keyEvent: KeyboardEvent) => {\n\t\t\t\t\t\tif (keyEvent && keyEvent.key === 'Enter') {\n\t\t\t\t\t\t\tself.triggerFunctionAndEvent(\n\t\t\t\t\t\t\t\tmenuItem,\n\t\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\t\telement.node()\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else if (keyEvent && keyEvent.key === 'ArrowUp') {\n\t\t\t\t\t\t\t// focus on previous menu item\n\t\t\t\t\t\t\tself.focusOnPreviousEnabledMenuItem(index);\n\t\t\t\t\t\t} else if (keyEvent && keyEvent.key === 'ArrowDown') {\n\t\t\t\t\t\t\t// focus on next menu item\n\t\t\t\t\t\t\tself.focusOnNextEnabledMenuItem(index);\n\t\t\t\t\t\t} else if (keyEvent && keyEvent.key === 'Escape') {\n\t\t\t\t\t\t\tself.updateOverflowMenu(false);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Not hide overflow menu by keyboard arrow up/down event\n\t\t\t\t\t\t// Prevent page from scrolling up/down\n\t\t\t\t\t\tkeyEvent.preventDefault();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// default to focus on the first enabled menu item\n\t\t\tself.focusOnNextEnabledMenuItem(-1);\n\t\t}\n\n\t\t// propogation should not be stopped for keyboard events\n\t\tif (!!event) {\n\t\t\tevent.stopImmediatePropagation();\n\t\t}\n\t}\n\n\t// Calls passed function && dispatches event\n\ttriggerFunctionAndEvent(control, event, element?) {\n\t\t// Check if trigger is disabled\n\t\tif (\n\t\t\ttypeof control.shouldBeDisabled === 'function' &&\n\t\t\tcontrol.shouldBeDisabled()\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Call custom function only if it exists\n\t\tif (typeof control.clickFunction === 'function') {\n\t\t\tcontrol.clickFunction(event);\n\t\t}\n\n\t\t// Dispatch selection event\n\t\tthis.services.events.dispatchEvent(Events.Toolbar.BUTTON_CLICK, {\n\t\t\tcontrol,\n\t\t\tevent,\n\t\t\telement,\n\t\t});\n\t}\n\n\tgetControlConfigs() {\n\t\tconst numberOfIcons =\n\t\t\tTools.getProperty(this.getOptions(), 'toolbar', 'numberOfIcons') -\n\t\t\t1;\n\t\tconst controls = Tools.getProperty(\n\t\t\tthis.getOptions(),\n\t\t\t'toolbar',\n\t\t\t'controls'\n\t\t);\n\n\t\tconst overflowSpecificControls = [];\n\t\tconst buttonList = [];\n\t\tconst overflowList = [];\n\n\t\tcontrols.forEach((control) => {\n\t\t\tlet controlConfig = null;\n\t\t\t// check if button is custom or default control\n\t\t\tif (control.type === ToolbarControlTypes.CUSTOM) {\n\t\t\t\t// add generic id if missing\n\t\t\t\tif (Tools.getProperty(control, 'id') === null) {\n\t\t\t\t\t// add id directly to the data passed so that id isn't reassigned on rerender\n\t\t\t\t\tcontrol.id = `toolbar-button-${Toolbar.buttonID++}`;\n\t\t\t\t}\n\t\t\t\t// define function if missing\n\t\t\t\tif (Tools.getProperty(control, 'shouldBeDisabled') === null) {\n\t\t\t\t\tcontrol.shouldBeDisabled = () => false;\n\t\t\t\t}\n\n\t\t\t\tcontrolConfig = control;\n\t\t\t} else {\n\t\t\t\tcontrolConfig = this.getControlConfigByType(control.type);\n\t\t\t}\n\n\t\t\t// add to list if config is valid\n\t\t\tif (controlConfig) {\n\t\t\t\tcontrolConfig.text = control.text ? control.text : control.type;\n\n\t\t\t\tif (controlConfig.id.indexOf('toolbar-export') !== -1) {\n\t\t\t\t\toverflowSpecificControls.push(controlConfig);\n\t\t\t\t} else if (buttonList.length < numberOfIcons) {\n\t\t\t\t\t// check if icon exists else assign to the overflow list\n\t\t\t\t\tif (\n\t\t\t\t\t\tTools.getProperty(\n\t\t\t\t\t\t\tcontrolConfig,\n\t\t\t\t\t\t\t'iconSVG',\n\t\t\t\t\t\t\t'content'\n\t\t\t\t\t\t) === null\n\t\t\t\t\t) {\n\t\t\t\t\t\toverflowList.push(controlConfig);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbuttonList.push(controlConfig);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\toverflowList.push(controlConfig);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// Ensures the `export` controls are always at the bottom\n\t\toverflowList.push(...overflowSpecificControls);\n\n\t\tif (!overflowList.length) {\n\t\t\treturn {\n\t\t\t\tbuttonList,\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\tbuttonList,\n\t\t\toverflowMenuItemList: overflowList,\n\t\t};\n\t}\n\n\tgetToolbarButtonItems() {\n\t\tconst { buttonList, overflowMenuItemList } = this.getControlConfigs();\n\t\tif (!!overflowMenuItemList) {\n\t\t\tbuttonList.push(this.getOverflowButtonConfig());\n\t\t}\n\t\tif (!!buttonList) {\n\t\t\treturn buttonList;\n\t\t}\n\n\t\treturn [];\n\t}\n\n\tgetOverflowMenuItems() {\n\t\tconst { overflowMenuItemList } = this.getControlConfigs();\n\t\tif (!!overflowMenuItemList) {\n\t\t\treturn overflowMenuItemList;\n\t\t} else {\n\t\t\treturn [];\n\t\t}\n\t}\n\n\t// special button config for overflow button\n\tgetOverflowButtonConfig() {\n\t\treturn {\n\t\t\tid: 'toolbar-overflow-menu',\n\t\t\ttitle: 'More options',\n\t\t\tshouldBeDisabled: () => false,\n\t\t\ticonSVG: {\n\t\t\t\tcontent: `<circle cx=\"16\" cy=\"8\" r=\"2\"></circle>\n\t\t\t\t<circle cx=\"16\" cy=\"16\" r=\"2\"></circle>\n\t\t\t\t<circle cx=\"16\" cy=\"24\" r=\"2\"></circle>`,\n\t\t\t},\n\t\t\tclickFunction: (event) => this.toggleOverflowMenu(event),\n\t\t};\n\t}\n\n\tgetControlConfigByType(controlType: ToolbarControlTypes) {\n\t\tconst isZoomBarEnabled =\n\t\t\tthis.services.zoom &&\n\t\t\tthis.services.zoom.isZoomBarEnabled() &&\n\t\t\t!this.services.zoom.isEmptyState();\n\n\t\tconst displayData = this.model.getDisplayData();\n\n\t\tlet controlConfig;\n\t\tswitch (controlType) {\n\t\t\tcase ToolbarControlTypes.ZOOM_IN:\n\t\t\t\tif (isZoomBarEnabled) {\n\t\t\t\t\tcontrolConfig = {\n\t\t\t\t\t\tid: 'toolbar-zoomIn',\n\t\t\t\t\t\ttitle: 'Zoom in',\n\t\t\t\t\t\tshouldBeDisabled: () =>\n\t\t\t\t\t\t\tthis.services.zoom.isMinZoomDomain(),\n\t\t\t\t\t\ticonSVG: {\n\t\t\t\t\t\t\tcontent: this.getControlIconByType(controlType),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tclickFunction: () => this.services.zoom.zoomIn(),\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase ToolbarControlTypes.ZOOM_OUT:\n\t\t\t\tif (isZoomBarEnabled) {\n\t\t\t\t\tcontrolConfig = {\n\t\t\t\t\t\tid: 'toolbar-zoomOut',\n\t\t\t\t\t\ttitle: 'Zoom out',\n\t\t\t\t\t\tshouldBeDisabled: () =>\n\t\t\t\t\t\t\tthis.services.zoom.isMaxZoomDomain(),\n\t\t\t\t\t\ticonSVG: {\n\t\t\t\t\t\t\tcontent: this.getControlIconByType(controlType),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tclickFunction: () => this.services.zoom.zoomOut(),\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase ToolbarControlTypes.RESET_ZOOM:\n\t\t\t\tif (isZoomBarEnabled) {\n\t\t\t\t\tcontrolConfig = {\n\t\t\t\t\t\tid: 'toolbar-resetZoom',\n\t\t\t\t\t\ttitle: 'Reset zoom',\n\t\t\t\t\t\tshouldBeDisabled: () =>\n\t\t\t\t\t\t\tthis.services.zoom.isMaxZoomDomain(),\n\t\t\t\t\t\ticonSVG: {\n\t\t\t\t\t\t\tcontent: this.getControlIconByType(controlType),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tclickFunction: () =>\n\t\t\t\t\t\t\tthis.services.zoom.resetZoomDomain(),\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase ToolbarControlTypes.MAKE_FULLSCREEN:\n\t\t\t\tcontrolConfig = {\n\t\t\t\t\tid: 'toolbar-makefullscreen',\n\t\t\t\t\ticonSVG: {\n\t\t\t\t\t\tcontent: this.getControlIconByType(controlType),\n\t\t\t\t\t\twidth: '15px',\n\t\t\t\t\t\theight: '15px',\n\t\t\t\t\t},\n\t\t\t\t\ttitle: 'Make fullscreen',\n\t\t\t\t\tshouldBeDisabled: () => false,\n\t\t\t\t\tclickFunction: () => {\n\t\t\t\t\t\tthis.services.domUtils.toggleFullscreen();\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase ToolbarControlTypes.SHOW_AS_DATATABLE:\n\t\t\t\tcontrolConfig = {\n\t\t\t\t\tid: 'toolbar-showasdatatable',\n\t\t\t\t\ticonSVG: {\n\t\t\t\t\t\tcontent: this.getControlIconByType(controlType),\n\t\t\t\t\t},\n\t\t\t\t\ttitle: 'Show as table',\n\t\t\t\t\tshouldBeDisabled: () => displayData.length === 0,\n\t\t\t\t\tclickFunction: () =>\n\t\t\t\t\t\tthis.services.events.dispatchEvent(Events.Modal.SHOW),\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase ToolbarControlTypes.EXPORT_CSV:\n\t\t\t\tcontrolConfig = {\n\t\t\t\t\tid: 'toolbar-export-CSV',\n\t\t\t\t\ttitle: 'Export as CSV',\n\t\t\t\t\tshouldBeDisabled: () => false,\n\t\t\t\t\ticonSVG: {\n\t\t\t\t\t\tcontent: this.getControlIconByType(controlType),\n\t\t\t\t\t},\n\t\t\t\t\tclickFunction: () => this.model.exportToCSV(),\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase ToolbarControlTypes.EXPORT_PNG:\n\t\t\t\tcontrolConfig = {\n\t\t\t\t\tid: 'toolbar-export-PNG',\n\t\t\t\t\ttitle: 'Export as PNG',\n\t\t\t\t\tshouldBeDisabled: () => false,\n\t\t\t\t\ticonSVG: {\n\t\t\t\t\t\tcontent: this.getControlIconByType(controlType),\n\t\t\t\t\t},\n\t\t\t\t\tclickFunction: () => this.services.domUtils.exportToPNG(),\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase ToolbarControlTypes.EXPORT_JPG:\n\t\t\t\tcontrolConfig = {\n\t\t\t\t\tid: 'toolbar-export-JPG',\n\t\t\t\t\ttitle: 'Export as JPG',\n\t\t\t\t\tshouldBeDisabled: () => false,\n\t\t\t\t\ticonSVG: {\n\t\t\t\t\t\tcontent: this.getControlIconByType(controlType),\n\t\t\t\t\t},\n\t\t\t\t\tclickFunction: () => this.services.domUtils.exportToJPG(),\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\t// add more toolbar control configuration here\n\n\t\t\tdefault:\n\t\t\t\tthrow Error(\n\t\t\t\t\t'Not supported toolbar control type: ' + controlType\n\t\t\t\t);\n\t\t}\n\t\treturn controlConfig;\n\t}\n\n\tgetControlIconByType(controlType: ToolbarControlTypes) {\n\t\tswitch (controlType) {\n\t\t\tcase ToolbarControlTypes.ZOOM_IN:\n\t\t\t\treturn `<polygon points=\"19 13 15 13 15 9 13 9 13 13 9 13 9 15 13 15 13 19 15 19 15 15 19 15 19 13\"/>\n\t\t\t\t\t\t<path d=\"M22.45,21A10.87,10.87,0,0,0,25,14,11,11,0,1,0,14,25a10.87,10.87,0,0,0,7-2.55L28.59,30,30,28.59ZM14,23a9,9,0,1,1,9-9A9,9,0,0,1,14,23Z\"/>`;\n\t\t\tcase ToolbarControlTypes.ZOOM_OUT:\n\t\t\t\treturn `<rect x=\"9\" y=\"13\" width=\"10\" height=\"2\"/>\n\t\t\t\t\t\t<path d=\"M22.45,21A10.87,10.87,0,0,0,25,14,11,11,0,1,0,14,25a10.87,10.87,0,0,0,7-2.55L28.59,30,30,28.59ZM14,23a9,9,0,1,1,9-9A9,9,0,0,1,14,23Z\"/>`;\n\t\t\tcase ToolbarControlTypes.RESET_ZOOM:\n\t\t\t\treturn `<path d=\"M22.4478,21A10.855,10.855,0,0,0,25,14,10.99,10.99,0,0,0,6,6.4658V2H4v8h8V8H7.332a8.9768,8.9768,0,1,1-2.1,8H3.1912A11.0118,11.0118,0,0,0,14,25a10.855,10.855,0,0,0,7-2.5522L28.5859,30,30,28.5859Z\"/>`;\n\t\t\tcase ToolbarControlTypes.MAKE_FULLSCREEN:\n\t\t\t\treturn `<polygon points=\"21 2 21 4 26.59 4 17 13.58 18.41 15 28 5.41 28 11 30 11 30 2 21 2\"/><polygon points=\"15 18.42 13.59 17 4 26.59 4 21 2 21 2 30 11 30 11 28 5.41 28 15 18.42\"/>`;\n\t\t\tcase ToolbarControlTypes.SHOW_AS_DATATABLE:\n\t\t\t\treturn `<rect x=\"4\" y=\"6\" width=\"18\" height=\"2\"/><rect x=\"4\" y=\"12\" width=\"18\" height=\"2\"/><rect x=\"4\" y=\"18\" width=\"18\" height=\"2\"/><rect x=\"4\" y=\"24\" width=\"18\" height=\"2\"/><rect x=\"26\" y=\"6\" width=\"2\" height=\"2\"/><rect x=\"26\" y=\"12\" width=\"2\" height=\"2\"/><rect x=\"26\" y=\"18\" width=\"2\" height=\"2\"/><rect x=\"26\" y=\"24\" width=\"2\" height=\"2\"/>`;\n\t\t\tcase ToolbarControlTypes.EXPORT_CSV:\n\t\t\t\treturn `<path d=\"M22.4478,21A10.855,10.855,0,0,0,25,14,10.99,10.99,0,0,0,6,6.4658V2H4v8h8V8H7.332a8.9768,8.9768,0,1,1-2.1,8H3.1912A11.0118,11.0118,0,0,0,14,25a10.855,10.855,0,0,0,7-2.5522L28.5859,30,30,28.5859Z\"/>`;\n\t\t\tcase ToolbarControlTypes.EXPORT_JPG:\n\t\t\t\treturn `<path d=\"M22.4478,21A10.855,10.855,0,0,0,25,14,10.99,10.99,0,0,0,6,6.4658V2H4v8h8V8H7.332a8.9768,8.9768,0,1,1-2.1,8H3.1912A11.0118,11.0118,0,0,0,14,25a10.855,10.855,0,0,0,7-2.5522L28.5859,30,30,28.5859Z\"/>`;\n\t\t\tcase ToolbarControlTypes.EXPORT_PNG:\n\t\t\t\treturn `<path d=\"M22.4478,21A10.855,10.855,0,0,0,25,14,10.99,10.99,0,0,0,6,6.4658V2H4v8h8V8H7.332a8.9768,8.9768,0,1,1-2.1,8H3.1912A11.0118,11.0118,0,0,0,14,25a10.855,10.855,0,0,0,7-2.5522L28.5859,30,30,28.5859Z\"/>`; // add more icons here\n\t\t\t// svg icon must be with 32x32 viewBox\n\n\t\t\tdefault:\n\t\t\t\tthrow Error(\n\t\t\t\t\t'Not supported toolbar control type: ' + controlType\n\t\t\t\t);\n\t\t}\n\t}\n}\n"]}
|
|
@@ -15,7 +15,7 @@ var __extends = (this && this.__extends) || (function () {
|
|
|
15
15
|
import { Component } from '../component';
|
|
16
16
|
import { AxisPositions, RenderTypes, AxisFlavor } from '../../interfaces';
|
|
17
17
|
import { Axis } from './axis';
|
|
18
|
-
import
|
|
18
|
+
import * as Tools from '../../tools';
|
|
19
19
|
import { DOMUtils } from '../../services';
|
|
20
20
|
import { Events } from './../../interfaces';
|
|
21
21
|
import { HoverAxis } from './hover-axis';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"two-dimensional-axes.js","sourceRoot":"","sources":["two-dimensional-axes.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,mBAAmB;AACnB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,
|
|
1
|
+
{"version":3,"file":"two-dimensional-axes.js","sourceRoot":"","sources":["two-dimensional-axes.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from '../component';\nimport { AxisPositions, RenderTypes, AxisFlavor } from '../../interfaces';\nimport { Axis } from './axis';\nimport * as Tools from '../../tools';\nimport { DOMUtils } from '../../services';\nimport { Threshold } from '../essentials/threshold';\nimport { Events } from './../../interfaces';\nimport { HoverAxis } from './hover-axis';\n\nexport class TwoDimensionalAxes extends Component {\n\ttype = '2D-axes';\n\trenderType = RenderTypes.SVG;\n\n\tchildren: any = {};\n\n\tthresholds: Threshold[] = [];\n\n\tmargins = {\n\t\ttop: 0,\n\t\tright: 0,\n\t\tbottom: 0,\n\t\tleft: 0,\n\t};\n\n\trender(animate = false) {\n\t\tconst axes = {};\n\t\tconst axisPositions = Object.keys(AxisPositions);\n\t\tconst axesOptions = Tools.getProperty(this.getOptions(), 'axes');\n\n\t\taxisPositions.forEach((axisPosition) => {\n\t\t\tconst axisOptions = axesOptions[AxisPositions[axisPosition]];\n\t\t\tif (axisOptions) {\n\t\t\t\taxes[AxisPositions[axisPosition]] = true;\n\t\t\t}\n\t\t});\n\n\t\tthis.configs.axes = axes;\n\n\t\t// Check the configs to know which axes need to be rendered\n\t\taxisPositions.forEach((axisPositionKey) => {\n\t\t\tconst axisPosition = AxisPositions[axisPositionKey];\n\t\t\tif (\n\t\t\t\tthis.configs.axes[axisPosition] &&\n\t\t\t\t!this.children[axisPosition]\n\t\t\t) {\n\t\t\t\tconst configs = {\n\t\t\t\t\tposition: axisPosition,\n\t\t\t\t\taxes: this.configs.axes,\n\t\t\t\t\tmargins: this.margins,\n\t\t\t\t};\n\n\t\t\t\tconst axisComponent =\n\t\t\t\t\tthis.model.axisFlavor === AxisFlavor.DEFAULT\n\t\t\t\t\t\t? new Axis(this.model, this.services, configs)\n\t\t\t\t\t\t: new HoverAxis(this.model, this.services, configs);\n\n\t\t\t\t// Set model, services & parent for the new axis component\n\t\t\t\taxisComponent.setModel(this.model);\n\t\t\t\taxisComponent.setServices(this.services);\n\t\t\t\taxisComponent.setParent(this.parent);\n\n\t\t\t\tthis.children[axisPosition] = axisComponent;\n\t\t\t}\n\t\t});\n\n\t\tObject.keys(this.children).forEach((childKey) => {\n\t\t\tconst child = this.children[childKey];\n\t\t\tchild.render(animate);\n\t\t});\n\n\t\tconst margins = {} as any;\n\n\t\tObject.keys(this.children).forEach((childKey) => {\n\t\t\tconst child = this.children[childKey];\n\t\t\tconst axisPosition = child.configs.position;\n\n\t\t\t// Grab the invisibly rendered axis' width & height, and set margins\n\t\t\t// Based off of that\n\t\t\t// We draw the invisible axis because of the async nature of d3 transitions\n\t\t\t// To be able to tell the final width & height of the axis when initiaing the transition\n\t\t\t// The invisible axis is updated instantly and without a transition\n\t\t\tconst invisibleAxisRef = child.getInvisibleAxisRef();\n\t\t\tconst {\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t} = DOMUtils.getSVGElementSize(invisibleAxisRef, { useBBox: true });\n\n\t\t\tlet offset;\n\t\t\tif (child.getTitleRef().empty()) {\n\t\t\t\toffset = 0;\n\t\t\t} else {\n\t\t\t\toffset = DOMUtils.getSVGElementSize(child.getTitleRef(), {\n\t\t\t\t\tuseBBox: true,\n\t\t\t\t}).height;\n\n\t\t\t\tif (\n\t\t\t\t\taxisPosition === AxisPositions.LEFT ||\n\t\t\t\t\taxisPosition === AxisPositions.RIGHT\n\t\t\t\t) {\n\t\t\t\t\toffset += 5;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tswitch (axisPosition) {\n\t\t\t\tcase AxisPositions.TOP:\n\t\t\t\t\tmargins.top = height + offset;\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.BOTTOM:\n\t\t\t\t\tmargins.bottom = height + offset;\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.LEFT:\n\t\t\t\t\tmargins.left = width + offset;\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.RIGHT:\n\t\t\t\t\tmargins.right = width + offset;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\n\t\tthis.services.events.dispatchEvent(Events.Axis.RENDER_COMPLETE);\n\n\t\t// If the new margins are different than the existing ones\n\t\tconst isNotEqual = Object.keys(margins).some((marginKey) => {\n\t\t\treturn this.margins[marginKey] !== margins[marginKey];\n\t\t});\n\n\t\tif (isNotEqual) {\n\t\t\tthis.margins = Object.assign(this.margins, margins);\n\n\t\t\t// also set new margins to model to allow external components to access\n\t\t\tthis.model.set({ axesMargins: this.margins }, { skipUpdate: true });\n\t\t\tthis.services.events.dispatchEvent(Events.ZoomBar.UPDATE);\n\n\t\t\tObject.keys(this.children).forEach((childKey) => {\n\t\t\t\tconst child = this.children[childKey];\n\t\t\t\tchild.margins = this.margins;\n\t\t\t});\n\n\t\t\tthis.render(true);\n\t\t}\n\t}\n}\n"]}
|
|
@@ -14,7 +14,7 @@ var __extends = (this && this.__extends) || (function () {
|
|
|
14
14
|
// Internal Imports
|
|
15
15
|
import { Component } from '../component';
|
|
16
16
|
import { DOMUtils } from '../../services';
|
|
17
|
-
import
|
|
17
|
+
import * as Tools from '../../tools';
|
|
18
18
|
import { RenderTypes } from '../../interfaces';
|
|
19
19
|
var ZeroLine = /** @class */ (function (_super) {
|
|
20
20
|
__extends(ZeroLine, _super);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zero-line.js","sourceRoot":"","sources":["zero-line.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,mBAAmB;AACnB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,
|
|
1
|
+
{"version":3,"file":"zero-line.js","sourceRoot":"","sources":["zero-line.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,mBAAmB;AACnB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,KAAK,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C;IAA8B,4BAAS;IAAvC;QAAA,qEAgEC;QA/DA,UAAI,GAAG,WAAW,CAAC;QACnB,gBAAU,GAAG,WAAW,CAAC,GAAG,CAAC;;IA8D9B,CAAC;IA5DA,yBAAM,GAAN,UAAO,OAAgB;QAAvB,iBA2DC;QA1DA,IAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,oBAAoB,CACtE,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAC/B,CAAC;QACF,IAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,kBAAkB,CAClE,YAAY,CACZ,CAAC;QACF,mBAAmB;QACb,IAAA,wBAAsD,EAArD,sBAAc,EAAE,sBAAqC,CAAC;QAE7D,IAAM,YAAY,GACjB,CAAC,cAAc,GAAG,CAAC,IAAI,cAAc,GAAG,CAAC,CAAC;YAC1C,CAAC,cAAc,GAAG,CAAC,IAAI,cAAc,GAAG,CAAC,CAAC,CAAC;QAE5C,qBAAqB;QACrB,IAAM,GAAG,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAEzC,6FAA6F;QAC7F,mDAAmD;QACnD,IAAI,CAAC,YAAY,EAAE;YAClB,sGAAsG;YACtG,GAAG,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,MAAM,EAAE,CAAC;YACtC,OAAO;SACP;QAED,iCAAiC;QAC3B,IAAA,2DAAiE,EAAhE,UAAE,EAAE,UAA4D,CAAC;QACxE,IAAI,SAAS,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QAErC,oEAAoE;QACpE,uEAAuE;QACvE,4DAA4D;QAC5D,IAAI,CAAC,SAAS,EAAE;YACf,SAAS,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;SAClC;QAED,IAAM,eAAe,GAAG,KAAK,CAAC,oCAAoC,CACjE;YACC,EAAE,IAAA;YACF,EAAE,IAAA;YACF,EAAE,EAAE,SAAS;YACb,EAAE,EAAE,SAAS;SACb,EACD,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,cAAc,EAAE,CAC9C,CAAC;QAEF,IAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;QACzD,IAAI,CAAC,UAAU,EAAE;aACf,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,IAAI,EAAE,eAAe,CAAC,EAAE,CAAC;aAC9B,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,CAAC;aAC9B,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,CAAC;aAC9B,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC;IACF,eAAC;AAAD,CAAC,AAhED,CAA8B,SAAS,GAgEtC","sourcesContent":["// Internal Imports\nimport { Component } from '../component';\nimport { DOMUtils } from '../../services';\nimport * as Tools from '../../tools';\nimport { RenderTypes } from '../../interfaces';\n\nexport class ZeroLine extends Component {\n\ttype = 'zero-line';\n\trenderType = RenderTypes.SVG;\n\n\trender(animate: boolean) {\n\t\tconst axisPosition = this.services.cartesianScales.getRangeAxisPosition(\n\t\t\t{ groups: this.configs.groups }\n\t\t);\n\t\tconst rangeScale = this.services.cartesianScales.getScaleByPosition(\n\t\t\taxisPosition\n\t\t);\n\t\t// check the domain\n\t\tconst [minDomainValue, maxDomainValue] = rangeScale.domain();\n\n\t\tconst drawZeroLine =\n\t\t\t(minDomainValue > 0 && maxDomainValue < 0) ||\n\t\t\t(minDomainValue < 0 && maxDomainValue > 0);\n\n\t\t// Grab container SVG\n\t\tconst svg = this.getComponentContainer();\n\n\t\t// show zero line only if is necessary, otherwise make sure tto remove zero line if the chart\n\t\t// previously had a domain that went into negatives\n\t\tif (!drawZeroLine) {\n\t\t\t// otherwise if a chart draws a zero line and then the domain change the zero line is still in the DOM\n\t\t\tsvg.selectAll('line.domain').remove();\n\t\t\treturn;\n\t\t}\n\n\t\t// Get x & y position of the line\n\t\tconst [x0, x1] = this.services.cartesianScales.getDomainScale().range();\n\t\tlet yPosition = +rangeScale(0) + 0.5;\n\n\t\t// if scale domain contains NaN, return the first value of the range\n\t\t// this is necessary for the zero line y position that otherwise is NaN\n\t\t// so on the top of the chart while we want it on the bottom\n\t\tif (!yPosition) {\n\t\t\tyPosition = rangeScale.range()[0];\n\t\t}\n\n\t\tconst lineCoordinates = Tools.flipSVGCoordinatesBasedOnOrientation(\n\t\t\t{\n\t\t\t\tx0,\n\t\t\t\tx1,\n\t\t\t\ty0: yPosition,\n\t\t\t\ty1: yPosition,\n\t\t\t},\n\t\t\tthis.services.cartesianScales.getOrientation()\n\t\t);\n\n\t\tconst line = DOMUtils.appendOrSelect(svg, 'line.domain');\n\t\tline.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: 'zero-line-update',\n\t\t\t\t\tanimate,\n\t\t\t\t})\n\t\t\t)\n\t\t\t.attr('y1', lineCoordinates.y0)\n\t\t\t.attr('y2', lineCoordinates.y1)\n\t\t\t.attr('x1', lineCoordinates.x0)\n\t\t\t.attr('x2', lineCoordinates.x1);\n\t}\n}\n"]}
|
|
@@ -13,7 +13,7 @@ var __extends = (this && this.__extends) || (function () {
|
|
|
13
13
|
})();
|
|
14
14
|
// Internal Imports
|
|
15
15
|
import { Component } from '../component';
|
|
16
|
-
import
|
|
16
|
+
import * as Tools from '../../tools';
|
|
17
17
|
import { AxisPositions, Events, RenderTypes, ScaleTypes, ZoomBarTypes, } from '../../interfaces';
|
|
18
18
|
import { DOMUtils } from '../../services';
|
|
19
19
|
import * as Configuration from '../../configuration';
|