@carbon/charts 0.50.9 → 0.51.2
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 +44 -0
- package/build/demo/data/circle-pack.d.ts +0 -6
- package/build/src/charts/alluvial.d.ts +2 -0
- package/build/src/charts/bullet.d.ts +2 -0
- package/build/src/charts/radar.d.ts +3 -1
- package/build/src/charts/tree.d.ts +2 -0
- package/build/src/charts/treemap.d.ts +2 -0
- package/build/src/charts/wordcloud.d.ts +2 -0
- package/build/src/components/axes/toolbar.d.ts +4 -0
- package/build/src/components/essentials/legend.d.ts +1 -1
- package/build/src/components/graphs/bullet.d.ts +0 -1
- package/build/src/model/alluvial.d.ts +8 -0
- package/build/src/model/boxplot.d.ts +1 -0
- package/build/src/model/bullet.d.ts +14 -0
- package/build/src/model/cartesian-charts.d.ts +0 -1
- package/build/src/model/circle-pack.d.ts +10 -0
- package/build/src/model/gauge.d.ts +4 -1
- package/build/src/model/meter.d.ts +1 -0
- package/build/src/model/model.d.ts +2 -0
- package/build/src/model/pie.d.ts +1 -0
- package/build/src/model/radar.d.ts +7 -0
- package/build/src/model/tree.d.ts +14 -0
- package/build/src/model/treemap.d.ts +8 -0
- package/build/src/model/wordcloud.d.ts +7 -0
- package/build/src/services/essentials/dom-utils.d.ts +3 -0
- package/bundle.js +1 -1
- package/chart.js +42 -20
- package/chart.js.map +1 -1
- package/charts/alluvial.d.ts +2 -0
- package/charts/alluvial.js +2 -0
- package/charts/alluvial.js.map +1 -1
- package/charts/bullet.d.ts +2 -0
- package/charts/bullet.js +2 -0
- package/charts/bullet.js.map +1 -1
- package/charts/radar.d.ts +3 -1
- package/charts/radar.js +3 -7
- package/charts/radar.js.map +1 -1
- package/charts/tree.d.ts +2 -0
- package/charts/tree.js +2 -0
- package/charts/tree.js.map +1 -1
- package/charts/treemap.d.ts +2 -0
- package/charts/treemap.js +2 -0
- package/charts/treemap.js.map +1 -1
- package/charts/wordcloud.d.ts +2 -0
- package/charts/wordcloud.js +3 -0
- package/charts/wordcloud.js.map +1 -1
- package/components/axes/toolbar.d.ts +4 -0
- package/components/axes/toolbar.js +147 -58
- package/components/axes/toolbar.js.map +1 -1
- package/components/axes/zoom-bar.js +12 -3
- package/components/axes/zoom-bar.js.map +1 -1
- package/components/component.js +2 -6
- package/components/component.js.map +1 -1
- package/components/essentials/legend.d.ts +1 -1
- package/components/essentials/legend.js +36 -10
- package/components/essentials/legend.js.map +1 -1
- package/components/essentials/modal.js +3 -3
- package/components/essentials/modal.js.map +1 -1
- package/components/essentials/title.js +2 -2
- package/components/essentials/title.js.map +1 -1
- package/components/essentials/tooltip.js +2 -2
- package/components/essentials/tooltip.js.map +1 -1
- package/components/graphs/alluvial.js +29 -12
- package/components/graphs/alluvial.js.map +1 -1
- package/components/graphs/area-stacked.js +1 -0
- package/components/graphs/area-stacked.js.map +1 -1
- package/components/graphs/area.js +2 -4
- package/components/graphs/area.js.map +1 -1
- package/components/graphs/boxplot.js +1 -0
- package/components/graphs/boxplot.js.map +1 -1
- package/components/graphs/bubble.js +4 -0
- package/components/graphs/bubble.js.map +1 -1
- package/components/graphs/bullet.d.ts +0 -1
- package/components/graphs/bullet.js +1 -12
- package/components/graphs/bullet.js.map +1 -1
- package/components/graphs/gauge.js +2 -4
- package/components/graphs/gauge.js.map +1 -1
- package/components/graphs/histogram.js +3 -1
- package/components/graphs/histogram.js.map +1 -1
- package/components/graphs/pie.js +1 -1
- package/components/graphs/pie.js.map +1 -1
- package/components/graphs/radar.js +8 -7
- package/components/graphs/radar.js.map +1 -1
- package/components/graphs/skeleton-lines.js +8 -3
- package/components/graphs/skeleton-lines.js.map +1 -1
- package/components/graphs/skeleton.js +18 -5
- package/components/graphs/skeleton.js.map +1 -1
- package/demo/data/bundle.js +1 -1
- package/demo/data/circle-pack.d.ts +0 -6
- package/demo/data/circle-pack.js +0 -6
- package/demo/data/circle-pack.js.map +1 -1
- package/demo/styles.css +45 -93
- package/demo/styles.css.map +1 -1
- package/demo/styles.min.css +1 -1
- package/demo/styles.min.css.map +1 -1
- package/demo/tsconfig.tsbuildinfo +3 -3
- package/demo/utils.js +2 -2
- package/demo/utils.js.map +1 -1
- package/model/alluvial.d.ts +8 -0
- package/model/alluvial.js +47 -0
- package/model/alluvial.js.map +1 -0
- package/model/boxplot.d.ts +1 -0
- package/model/boxplot.js +54 -0
- package/model/boxplot.js.map +1 -1
- package/model/bullet.d.ts +14 -0
- package/model/bullet.js +74 -0
- package/model/bullet.js.map +1 -0
- package/model/cartesian-charts.d.ts +0 -1
- package/model/cartesian-charts.js +0 -11
- package/model/cartesian-charts.js.map +1 -1
- package/model/circle-pack.d.ts +10 -0
- package/model/circle-pack.js +51 -0
- package/model/circle-pack.js.map +1 -1
- package/model/gauge.d.ts +4 -1
- package/model/gauge.js +24 -1
- package/model/gauge.js.map +1 -1
- package/model/meter.d.ts +1 -0
- package/model/meter.js +40 -0
- package/model/meter.js.map +1 -1
- package/model/model.d.ts +2 -0
- package/model/model.js +14 -0
- package/model/model.js.map +1 -1
- package/model/pie.d.ts +1 -0
- package/model/pie.js +21 -0
- package/model/pie.js.map +1 -1
- package/model/radar.d.ts +7 -0
- package/model/radar.js +52 -0
- package/model/radar.js.map +1 -0
- package/model/tree.d.ts +14 -0
- package/model/tree.js +56 -0
- package/model/tree.js.map +1 -0
- package/model/treemap.d.ts +8 -0
- package/model/treemap.js +37 -0
- package/model/treemap.js.map +1 -0
- package/model/wordcloud.d.ts +7 -0
- package/model/wordcloud.js +47 -0
- package/model/wordcloud.js.map +1 -0
- package/package.json +1 -1
- package/services/angle-utils.js +3 -1
- package/services/angle-utils.js.map +1 -1
- package/services/essentials/dom-utils.d.ts +3 -0
- package/services/essentials/dom-utils.js +9 -1
- package/services/essentials/dom-utils.js.map +1 -1
- package/styles/components/_skeleton-lines.scss +1 -2
- package/styles/components/_skeleton.scss +2 -7
- package/styles/components/_toolbar.scss +1 -1
- package/styles/components/_tooltip.scss +4 -2
- package/styles/components/_zoom-bar.scss +0 -12
- package/styles-g10.css +11 -23
- package/styles-g10.css.map +1 -1
- package/styles-g10.min.css +1 -1
- package/styles-g10.min.css.map +1 -1
- package/styles-g100.css +11 -23
- package/styles-g100.css.map +1 -1
- package/styles-g100.min.css +1 -1
- package/styles-g100.min.css.map +1 -1
- package/styles-g90.css +11 -23
- package/styles-g90.css.map +1 -1
- package/styles-g90.min.css +1 -1
- package/styles-g90.min.css.map +1 -1
- package/styles.css +11 -23
- package/styles.css.map +1 -1
- package/styles.min.css +1 -1
- package/styles.min.css.map +1 -1
- package/tsconfig.tsbuildinfo +162 -53
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modal.js","sourceRoot":"","sources":["modal.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,MAAM,EAAc,MAAM,kBAAkB,CAAC;AAEtD,eAAe;AACf,OAAO,EAAE,KAAK,IAAI,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAElE,yCAAyC;AACzC,OAAO,QAAQ,MAAM,0CAA0C,CAAC;AAEhE,aAAa;AACb,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAKtC,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAEhC;IAA2B,yBAAS;IAOnC,eAAY,KAAiB,EAAE,QAAa,EAAE,OAAa;QAA3D,YACC,kBAAM,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,SAG/B;QAVD,UAAI,GAAG,OAAO,CAAC;QAEf,mEAAmE;QACnE,0BAAoB,GAAG,KAAK,CAAC;QAS7B,qBAAe,GAAG;YACjB,KAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAI,CAAC,YAAY,EAAE,CAAC,CAAC;YACrC,KAAI,CAAC,KAAK;iBACR,MAAM,CAAC,qCAAqC,CAAC;iBAC7C,EAAE,CAAC,OAAO,EAAE,cAAM,OAAA,KAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAxB,CAAwB,CAAC,CAAC;YAE9C,IAAM,aAAa,GAAG,oBAAoB,CAAC,MAAM,CAAC,KAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YACrE,aAAa,CAAC,IAAI,EAAE,CAAC;QACtB,CAAC,CAAC;QAEF,qBAAe,GAAG,cAAO,CAAC,CAAC;QAb1B,KAAI,CAAC,IAAI,EAAE,CAAC;;IACb,CAAC;IAcD,iCAAiB,GAAjB;QACC,yDAAyD;QACzD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CACpC,MAAM,CAAC,KAAK,CAAC,IAAI,EACjB,IAAI,CAAC,eAAe,CACpB,CAAC;QAEF,uDAAuD;QACvD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CACpC,MAAM,CAAC,KAAK,CAAC,IAAI,EACjB,IAAI,CAAC,eAAe,CACpB,CAAC;IACH,CAAC;IAED,oCAAoB,GAApB;QACC,kCAAkC;QAClC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,mBAAmB,CACvC,MAAM,CAAC,KAAK,CAAC,IAAI,EACjB,IAAI,CAAC,eAAe,CACpB,CAAC;QAEF,kCAAkC;QAClC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,mBAAmB,CACvC,MAAM,CAAC,KAAK,CAAC,IAAI,EACjB,IAAI,CAAC,eAAe,CACpB,CAAC;IACH,CAAC;IAED,4BAAY,GAAZ;QACC,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QAExC,IAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QAElE,IAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC;QAEpD,OAAO,
|
|
1
|
+
{"version":3,"file":"modal.js","sourceRoot":"","sources":["modal.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component } from '../component';\nimport { Tools } from '../../tools';\nimport { DOMUtils } from '../../services';\nimport { ChartModel } from '../../model/model';\nimport { Events, ScaleTypes } from '../../interfaces';\n\n// Carbon modal\nimport { Modal as CarbonModalComponent } from 'carbon-components';\n\n// import the settings for the css prefix\nimport settings from 'carbon-components/es/globals/js/settings';\n\n// D3 Imports\nimport { select } from 'd3-selection';\n\n// date formatting\nimport { format } from 'date-fns';\n\nimport { get } from 'lodash-es';\n\nexport class Modal extends Component {\n\ttype = 'modal';\n\n\t// flag for checking whether tooltip event listener is added or not\n\tisEventListenerAdded = false;\n\tmodal: any;\n\n\tconstructor(model: ChartModel, services: any, configs?: any) {\n\t\tsuper(model, services, configs);\n\n\t\tthis.init();\n\t}\n\n\thandleShowModal = () => {\n\t\tthis.modal.html(this.getModalHTML());\n\t\tthis.modal\n\t\t\t.select('div.bx--modal-footer button.bx--btn')\n\t\t\t.on('click', () => this.model.exportToCSV());\n\n\t\tconst modalInstance = CarbonModalComponent.create(this.modal.node());\n\t\tmodalInstance.show();\n\t};\n\n\thandleHideModal = () => {};\n\n\taddEventListeners() {\n\t\t// listen to show-modal Custom Events to render the modal\n\t\tthis.services.events.addEventListener(\n\t\t\tEvents.Modal.SHOW,\n\t\t\tthis.handleShowModal\n\t\t);\n\n\t\t// listen to hide-modal Custom Events to hide the modal\n\t\tthis.services.events.addEventListener(\n\t\t\tEvents.Modal.HIDE,\n\t\t\tthis.handleHideModal\n\t\t);\n\t}\n\n\tremoveEventListeners() {\n\t\t// remove show-modal Custom Events\n\t\tthis.services.events.removeEventListener(\n\t\t\tEvents.Modal.SHOW,\n\t\t\tthis.handleShowModal\n\t\t);\n\n\t\t// remove hide-modal Custom Events\n\t\tthis.services.events.removeEventListener(\n\t\t\tEvents.Modal.HIDE,\n\t\t\tthis.handleHideModal\n\t\t);\n\t}\n\n\tgetModalHTML() {\n\t\tconst options = this.model.getOptions();\n\n\t\tconst chartprefix = Tools.getProperty(options, 'style', 'prefix');\n\n\t\tconst tableArray = this.model.getTabularDataArray();\n\n\t\treturn `\n\t\t<div class=\"bx--modal-container\">\n\t\t\t<div class=\"bx--modal-header\">\n\t\t\t\t<p class=\"bx--modal-header__label bx--type-delta\" id=\"modal-title\">Tabular representation</p>\n\t\t\t\t<p class=\"bx--modal-header__heading bx--type-beta\" id=\"modal-description\">${\n\t\t\t\t\toptions.title\n\t\t\t\t}</p>\n\t\t\t\t<button class=\"bx--modal-close\" type=\"button\" data-modal-close aria-label=\"close modal\" data-modal-primary-focus>\n\t\t\t\t\t<svg focusable=\"false\" preserveAspectRatio=\"xMidYMid meet\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"currentColor\" aria-label=\"Close\" width=\"20\" height=\"20\" viewBox=\"0 0 32 32\" role=\"img\" class=\"bx--modal-close__icon\">\n\t\t\t\t\t\t<path d=\"M24 9.4L22.6 8 16 14.6 9.4 8 8 9.4 14.6 16 8 22.6 9.4 24 16 17.4 22.6 24 24 22.6 17.4 16 24 9.4z\"></path>\n\t\t\t\t\t</svg>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t\t<div class=\"bx--modal-content\"><table class=\"bx--data-table bx--data-table--no-border\">\n\t\t\t\t\t<thead>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t${get(tableArray, 0)\n\t\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\t\t(heading) => `<th scope=\"col\">\n\t\t\t\t\t\t\t\t<div class=\"bx--table-header-label\">${heading}</div>\n\t\t\t\t\t\t\t</th>`\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t.join('')}\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</thead>\n\t\t\t\t\t<tbody>${tableArray\n\t\t\t\t\t\t.slice(1)\n\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t(row) => `\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t${row.map((column) => `<td>${column}</td>`).join('')}\n\t\t\t\t\t\t\t</tr>`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join('')}\n\t\t\t\t\t</tbody>\n\t\t\t\t</table>\n\t\t\t</div>\n\t\t\t<div class=\"bx--modal-footer\">\n\t\t\t <div class=\"${settings.prefix}--${chartprefix}-modal-footer-spacer\"></div>\n\t\t\t <button class=\"bx--btn bx--btn--primary\" type=\"button\" data-modal-primary-focus>Download as CSV</button>\n\t\t\t</div>\n\t\t</div>`;\n\t}\n\n\trender() {\n\t\tconst options = this.model.getOptions();\n\t\tif (!this.isEventListenerAdded) {\n\t\t\t// Grab the tooltip element\n\t\t\tconst holder = select(this.services.domUtils.getHolder());\n\t\t\tconst chartprefix = Tools.getProperty(options, 'style', 'prefix');\n\t\t\tthis.modal = DOMUtils.appendOrSelect(\n\t\t\t\tholder,\n\t\t\t\t`div.${settings.prefix}--${chartprefix}--modal`\n\t\t\t);\n\n\t\t\tthis.addEventListeners();\n\t\t\tthis.isEventListenerAdded = true;\n\t\t\tthis.modal\n\t\t\t\t.attr('data-modal', true)\n\t\t\t\t.attr('class', 'bx--modal')\n\t\t\t\t.attr('role', 'dialog')\n\t\t\t\t.attr('aria-modal', true)\n\t\t\t\t.attr('aria-labelledby', 'modal-title')\n\t\t\t\t.attr('aria-describedby', 'modal-description')\n\t\t\t\t.attr('tabindex', -1);\n\t\t}\n\t}\n\n\tdestroy() {\n\t\t// remove tooltip eventListener\n\t\tthis.removeEventListeners();\n\t\tthis.isEventListenerAdded = false;\n\t}\n}\n"]}
|
|
@@ -31,9 +31,9 @@ var Title = /** @class */ (function (_super) {
|
|
|
31
31
|
text.enter()
|
|
32
32
|
.append('p')
|
|
33
33
|
.classed('title', true)
|
|
34
|
+
.attr('role', 'heading')
|
|
35
|
+
.attr('aria-level', 2)
|
|
34
36
|
.merge(text)
|
|
35
|
-
.attr('x', 0)
|
|
36
|
-
.attr('y', '1em')
|
|
37
37
|
.html(function (d) { return d; });
|
|
38
38
|
// check if title needs truncation (and tooltip support)
|
|
39
39
|
if (text.node() && text.node().offsetWidth < text.node().scrollWidth) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"title.js","sourceRoot":"","sources":["title.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,mBAAmB;AACnB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC;IAA2B,yBAAS;IAApC;QAAA,qEAgIC;QA/HA,UAAI,GAAG,OAAO,CAAC;QACf,gBAAU,GAAG,WAAW,CAAC,IAAI,CAAC;;IA8H/B,CAAC;IA5HA,sBAAM,GAAN;QACC,IAAM,GAAG,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QACzC,IAAM,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,OAAO,CAAC,CAAC;QAE5D,IAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAEpD,IAAI,CAAC,KAAK,EAAE;aACV,MAAM,CAAC,GAAG,CAAC;aACX,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;aACtB,
|
|
1
|
+
{"version":3,"file":"title.js","sourceRoot":"","sources":["title.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from '../component';\nimport { DOMUtils } from '../../services';\nimport { Events, RenderTypes } from './../../interfaces';\nimport { Tools } from '../../tools';\n\nexport class Title extends Component {\n\ttype = 'title';\n\trenderType = RenderTypes.HTML;\n\n\trender() {\n\t\tconst svg = this.getComponentContainer();\n\t\tconst title = Tools.getProperty(this.getOptions(), 'title');\n\n\t\tconst text = svg.selectAll('p.title').data([title]);\n\n\t\ttext.enter()\n\t\t\t.append('p')\n\t\t\t.classed('title', true)\n\t\t\t.attr('role', 'heading')\n\t\t\t.attr('aria-level', 2)\n\t\t\t.merge(text)\n\t\t\t.html((d) => d);\n\n\t\t// check if title needs truncation (and tooltip support)\n\t\tif (text.node() && text.node().offsetWidth < text.node().scrollWidth) {\n\t\t\t// add events for displaying the tooltip with the title\n\t\t\tconst self = this;\n\t\t\ttext.on('mouseover', function (event) {\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.SHOW, {\n\t\t\t\t\tevent,\n\t\t\t\t\thoveredElement: text,\n\t\t\t\t\tcontent: text.text(),\n\t\t\t\t});\n\t\t\t})\n\t\t\t\t.on('mousemove', function (event) {\n\t\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.MOVE, {\n\t\t\t\t\t\tevent,\n\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t\t.on('mouseout', function () {\n\t\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.HIDE);\n\t\t\t\t});\n\t\t}\n\n\t\ttext.exit().remove();\n\t}\n\n\t/**\n\t * Truncates title creating ellipses and attaching tooltip for exposing full title.\n\t */\n\ttruncateTitle(title, maxWidth) {\n\t\t// sanity check to prevent stack overflow on binary search\n\t\tif (maxWidth <= 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst untruncatedTitle = title.text();\n\t\t// check if the title is too big for the containing svg\n\t\tif (title.node().getComputedTextLength() > maxWidth) {\n\t\t\t// append the ellipses to their own tspan to calculate the text length\n\t\t\ttitle.append('tspan').text('...');\n\n\t\t\t// get the bounding width including the elipses '...'\n\t\t\tconst tspanLength = DOMUtils.appendOrSelect(title, 'tspan')\n\t\t\t\t.node()\n\t\t\t\t.getComputedTextLength();\n\n\t\t\t// with elipses\n\t\t\tconst titleString = title.text();\n\n\t\t\t// get the index for creating the max length substring that fit within the svg\n\t\t\t// use one less than the index to avoid crowding (the elipsis)\n\t\t\tconst substringIndex = this.getSubstringIndex(\n\t\t\t\ttitle.node(),\n\t\t\t\t0,\n\t\t\t\ttitleString.length - 1,\n\t\t\t\tmaxWidth - tspanLength\n\t\t\t);\n\n\t\t\t// use the substring as the title\n\t\t\ttitle\n\t\t\t\t.html(titleString.substring(0, substringIndex - 1))\n\t\t\t\t.append('tspan')\n\t\t\t\t.text('...');\n\n\t\t\t// add events for displaying the tooltip with the title\n\t\t\tconst self = this;\n\t\t\ttitle\n\t\t\t\t.on('mouseover', function (event) {\n\t\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.SHOW, {\n\t\t\t\t\t\tevent,\n\t\t\t\t\t\thoveredElement: title,\n\t\t\t\t\t\tcontent: untruncatedTitle,\n\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t\t.on('mousemove', function (event) {\n\t\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.MOVE, {\n\t\t\t\t\t\tevent,\n\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t\t.on('mouseout', function () {\n\t\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.HIDE);\n\t\t\t\t});\n\t\t}\n\t}\n\n\t// computes the maximum space a title can take\n\tprotected getMaxTitleWidth() {\n\t\treturn DOMUtils.getSVGElementSize(this.parent.node(), {\n\t\t\tuseAttrs: true,\n\t\t}).width;\n\t}\n\n\t/**\n\t * Returns the index for a maximum length substring that is less than the width parameter.\n\t * @param title the title node used for getting the text lengths of substrings\n\t * @param start the start index for the binary search\n\t * @param end the end index for the binary search\n\t * @param width the width of the svg container that holds the title\n\t */\n\tprotected getSubstringIndex(title, start, end, width) {\n\t\tconst mid = Math.floor((end + start) / 2);\n\t\tif (title.getSubStringLength(0, mid) > width) {\n\t\t\treturn this.getSubstringIndex(title, start, mid, width);\n\t\t} else if (title.getSubStringLength(0, mid) < width) {\n\t\t\tif (title.getSubStringLength(0, mid + 1) > width) {\n\t\t\t\treturn mid;\n\t\t\t}\n\t\t\treturn this.getSubstringIndex(title, mid, end, width);\n\t\t} else {\n\t\t\treturn mid;\n\t\t}\n\t}\n}\n"]}
|
|
@@ -134,7 +134,7 @@ var Tooltip = /** @class */ (function (_super) {
|
|
|
134
134
|
var items = this.getItems(e);
|
|
135
135
|
var formattedItems = this.formatItems(items);
|
|
136
136
|
defaultHTML =
|
|
137
|
-
"<ul class
|
|
137
|
+
"<ul class=\"multi-tooltip\">" +
|
|
138
138
|
formattedItems
|
|
139
139
|
.map(function (item) {
|
|
140
140
|
return "<li>\n\t\t\t\t\t\t\t<div class=\"datapoint-tooltip " + (item.bold ? 'bold' : '') + "\">\n\t\t\t\t\t\t\t\t" + (item.class ? "<div class=\"tooltip-color " + item.class + "\"></div>" : '') + "\n\t\t\t\t\t\t\t\t" + (item.color
|
|
@@ -170,7 +170,7 @@ var Tooltip = /** @class */ (function (_super) {
|
|
|
170
170
|
var holder = select(this.services.domUtils.getHolder());
|
|
171
171
|
var chartprefix = Tools.getProperty(options, 'style', 'prefix');
|
|
172
172
|
this.tooltip = DOMUtils.appendOrSelect(holder, "div." + settings.prefix + "--" + chartprefix + "--tooltip");
|
|
173
|
-
this.tooltip.style('max-width', null);
|
|
173
|
+
this.tooltip.style('max-width', null).attr('role', 'tooltip');
|
|
174
174
|
if (!this.isEventListenerAdded) {
|
|
175
175
|
this.addTooltipEventListener();
|
|
176
176
|
this.isEventListenerAdded = true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tooltip.js","sourceRoot":"","sources":["tooltip.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component } from '../component';\nimport { Tools } from '../../tools';\nimport { DOMUtils } from '../../services';\nimport { ChartModel } from '../../model/model';\nimport { Events, RenderTypes, TruncationTypes } from '../../interfaces';\nimport * as Configuration from '../../configuration';\n\n// Carbon position service\nimport Position, { PLACEMENTS } from '@carbon/utils-position';\n\n// import the settings for the css prefix\nimport settings from 'carbon-components/es/globals/js/settings';\n\n// D3 Imports\n// @ts-ignore\n// ts-ignore is needed because `@types/d3`\n// is missing the `pointer` function\nimport { select, pointer } from 'd3-selection';\n\nimport { format } from 'date-fns';\n\nexport class Tooltip extends Component {\n\ttype = 'tooltip';\n\trenderType = RenderTypes.HTML;\n\n\t// flag for checking whether tooltip event listener is added or not\n\tisEventListenerAdded = false;\n\ttooltip: any;\n\tpositionService = new Position();\n\n\tconstructor(model: ChartModel, services: any, configs?: any) {\n\t\tsuper(model, services, configs);\n\n\t\tthis.init();\n\t}\n\n\thandleShowTooltip = (e) => {\n\t\tconst data = e.detail.data || e.detail.items;\n\n\t\tconst defaultHTML = this.getTooltipHTML(e);\n\n\t\tconst tooltipTextContainer = DOMUtils.appendOrSelect(\n\t\t\tthis.tooltip,\n\t\t\t'div.content-box'\n\t\t);\n\n\t\t// if there is a provided tooltip HTML function call it\n\t\tif (Tools.getProperty(this.getOptions(), 'tooltip', 'customHTML')) {\n\t\t\tif (e.detail.content) {\n\t\t\t\tconst labelHTML = `<div class=\"title-tooltip\"><p>${e.detail.content}</p></div>`;\n\t\t\t\ttooltipTextContainer.html(labelHTML);\n\t\t\t} else {\n\t\t\t\ttooltipTextContainer.html(\n\t\t\t\t\tthis.model\n\t\t\t\t\t\t.getOptions()\n\t\t\t\t\t\t.tooltip.customHTML(data, defaultHTML)\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\t// Use default tooltip\n\t\t\ttooltipTextContainer.html(defaultHTML);\n\t\t}\n\n\t\t// Position the tooltip\n\t\tthis.positionTooltip(e);\n\n\t\t// Fade in\n\t\tthis.tooltip.classed('hidden', false).attr('aria-hidden', false);\n\t};\n\n\thandleHideTooltip = () => {\n\t\tthis.tooltip.classed('hidden', true).attr('aria-hidden', true);\n\t};\n\n\taddTooltipEventListener() {\n\t\t// listen to move-tooltip Custom Events to move the tooltip\n\t\tthis.services.events.addEventListener(\n\t\t\tEvents.Tooltip.MOVE,\n\t\t\t(e: CustomEvent) => {\n\t\t\t\tif (this.tooltip.classed('hidden') === false) {\n\t\t\t\t\tthis.positionTooltip(e);\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\n\t\t// listen to show-tooltip Custom Events to render the tooltip\n\t\tthis.services.events.addEventListener(\n\t\t\tEvents.Tooltip.SHOW,\n\t\t\tthis.handleShowTooltip\n\t\t);\n\n\t\t// listen to hide-tooltip Custom Events to hide the tooltip\n\t\tthis.services.events.addEventListener(\n\t\t\tEvents.Tooltip.HIDE,\n\t\t\tthis.handleHideTooltip\n\t\t);\n\n\t\t// listen to chart-mouseout event to hide the tooltip\n\t\tthis.services.events.addEventListener(\n\t\t\tEvents.Chart.MOUSEOUT,\n\t\t\tthis.handleHideTooltip\n\t\t);\n\t}\n\n\tremoveTooltipEventListener() {\n\t\t// remove move-tooltip Custom Events\n\t\tthis.services.events.removeEventListener(Events.Tooltip.MOVE, null);\n\n\t\t// remove show-tooltip Custom Events\n\t\tthis.services.events.removeEventListener(\n\t\t\tEvents.Tooltip.SHOW,\n\t\t\tthis.handleShowTooltip\n\t\t);\n\n\t\t// remove hide-tooltip Custom Events\n\t\tthis.services.events.removeEventListener(\n\t\t\tEvents.Tooltip.HIDE,\n\t\t\tthis.handleHideTooltip\n\t\t);\n\n\t\t// remove the listener on chart-mouseout\n\t\tthis.services.events.removeEventListener(\n\t\t\tEvents.Chart.MOUSEOUT,\n\t\t\tthis.handleHideTooltip\n\t\t);\n\t}\n\n\tgetItems(e: CustomEvent) {\n\t\tif (e.detail.items) {\n\t\t\treturn e.detail.items;\n\t\t}\n\n\t\treturn [];\n\t}\n\n\tformatItems(items) {\n\t\tconst options = this.getOptions();\n\n\t\t// get user provided custom values for truncation\n\t\tconst truncationType = Tools.getProperty(\n\t\t\toptions,\n\t\t\t'tooltip',\n\t\t\t'truncation',\n\t\t\t'type'\n\t\t);\n\n\t\tconst truncationThreshold = Tools.getProperty(\n\t\t\toptions,\n\t\t\t'tooltip',\n\t\t\t'truncation',\n\t\t\t'threshold'\n\t\t);\n\n\t\tconst truncationNumCharacter = Tools.getProperty(\n\t\t\toptions,\n\t\t\t'tooltip',\n\t\t\t'truncation',\n\t\t\t'numCharacter'\n\t\t);\n\n\t\t// truncate the label if it's too long\n\t\t// only applies to discrete type\n\t\tif (truncationType !== TruncationTypes.NONE) {\n\t\t\treturn items.map((item) => {\n\t\t\t\t// get width of the label icon if it exists\n\t\t\t\tconst labelIconSize = item.labelIcon ? 12 : 0;\n\n\t\t\t\titem.value = item.value\n\t\t\t\t\t? this.valueFormatter(item.value, item.label)\n\t\t\t\t\t: item.value;\n\t\t\t\tif (\n\t\t\t\t\titem.label &&\n\t\t\t\t\titem.label.length + labelIconSize > truncationThreshold\n\t\t\t\t) {\n\t\t\t\t\titem.label = Tools.truncateLabel(\n\t\t\t\t\t\titem.label,\n\t\t\t\t\t\ttruncationType,\n\t\t\t\t\t\ttruncationNumCharacter\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (item.value && item.value.length > truncationThreshold) {\n\t\t\t\t\titem.value = Tools.truncateLabel(\n\t\t\t\t\t\titem.value,\n\t\t\t\t\t\ttruncationType,\n\t\t\t\t\t\ttruncationNumCharacter\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn item;\n\t\t\t});\n\t\t}\n\n\t\treturn items;\n\t}\n\n\tgetTooltipHTML(e: CustomEvent) {\n\t\tlet defaultHTML;\n\t\tif (e.detail.content) {\n\t\t\tdefaultHTML = `<div class=\"title-tooltip\"><p>${e.detail.content}</p></div>`;\n\t\t} else {\n\t\t\tconst items = this.getItems(e);\n\t\t\tconst formattedItems = this.formatItems(items);\n\n\t\t\tdefaultHTML =\n\t\t\t\t`<ul class='multi-tooltip'>` +\n\t\t\t\tformattedItems\n\t\t\t\t\t.map(\n\t\t\t\t\t\t(item) =>\n\t\t\t\t\t\t\t`<li>\n\t\t\t\t\t\t\t<div class=\"datapoint-tooltip ${item.bold ? 'bold' : ''}\">\n\t\t\t\t\t\t\t\t${item.class ? `<div class=\"tooltip-color ${item.class}\"></div>` : ''}\n\t\t\t\t\t\t\t\t${\n\t\t\t\t\t\t\t\t\titem.color\n\t\t\t\t\t\t\t\t\t\t? '<div style=\"background-color: ' +\n\t\t\t\t\t\t\t\t\t\t item.color +\n\t\t\t\t\t\t\t\t\t\t '\" class=\"tooltip-color\"></div>'\n\t\t\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t<div class=\"label\">\n\t\t\t\t\t\t\t\t<p>${item.label || ''}</p>\n\t\t\t\t\t\t\t\t${item.labelIcon ? `<span class=\"label-icon\"/>${item.labelIcon}</span>` : ''}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t${\n\t\t\t\t\t\t\t\t\titem.value === undefined ||\n\t\t\t\t\t\t\t\t\titem.value === null\n\t\t\t\t\t\t\t\t\t\t? ''\n\t\t\t\t\t\t\t\t\t\t: `<p class=\"value\"/>${item.value}</p>`\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</li>`\n\t\t\t\t\t)\n\t\t\t\t\t.join('') +\n\t\t\t\t`</ul>`;\n\t\t}\n\n\t\treturn defaultHTML;\n\t}\n\n\tvalueFormatter(value: any, label: string) {\n\t\tconst options = this.getOptions();\n\t\tconst valueFormatter = Tools.getProperty(\n\t\t\toptions,\n\t\t\t'tooltip',\n\t\t\t'valueFormatter'\n\t\t);\n\n\t\tif (valueFormatter) {\n\t\t\treturn valueFormatter(value, label);\n\t\t}\n\n\t\tif (typeof value.getTime === 'function') {\n\t\t\treturn format(value, 'MMM d, yyyy');\n\t\t}\n\n\t\treturn value.toLocaleString();\n\t}\n\n\trender() {\n\t\tconst options = this.getOptions();\n\t\tconst isTooltipEnabled = Tools.getProperty(\n\t\t\toptions,\n\t\t\t'tooltip',\n\t\t\t'enabled'\n\t\t);\n\t\tif (isTooltipEnabled) {\n\t\t\t// Grab the tooltip element\n\t\t\tconst holder = select(this.services.domUtils.getHolder());\n\t\t\tconst chartprefix = Tools.getProperty(options, 'style', 'prefix');\n\t\t\tthis.tooltip = DOMUtils.appendOrSelect(\n\t\t\t\tholder,\n\t\t\t\t`div.${settings.prefix}--${chartprefix}--tooltip`\n\t\t\t);\n\n\t\t\tthis.tooltip.style('max-width', null);\n\t\t\tif (!this.isEventListenerAdded) {\n\t\t\t\tthis.addTooltipEventListener();\n\t\t\t\tthis.isEventListenerAdded = true;\n\t\t\t}\n\t\t\tthis.tooltip.classed('hidden', true);\n\t\t} else if (!isTooltipEnabled && this.isEventListenerAdded) {\n\t\t\t// remove tooltip eventListener\n\t\t\tthis.removeTooltipEventListener();\n\t\t\tthis.isEventListenerAdded = false;\n\t\t}\n\t}\n\n\tpositionTooltip(e: CustomEvent) {\n\t\tconst holder = this.services.domUtils.getHolder();\n\t\tconst target = this.tooltip.node();\n\t\tconst options = this.getOptions();\n\t\tconst isTopZoomBarEnabled = Tools.getProperty(\n\t\t\toptions,\n\t\t\t'zoomBar',\n\t\t\t'top',\n\t\t\t'enabled'\n\t\t);\n\n\t\tlet mouseRelativePos = Tools.getProperty(e, 'detail', 'mousePosition');\n\t\tif (!mouseRelativePos) {\n\t\t\tmouseRelativePos = pointer(\n\t\t\t\tTools.getProperty(e, 'detail', 'event'),\n\t\t\t\tholder\n\t\t\t);\n\t\t} else {\n\t\t\tconst zoombarType = Tools.getProperty(\n\t\t\t\toptions,\n\t\t\t\t'zoomBar',\n\t\t\t\t'top',\n\t\t\t\t'type'\n\t\t\t);\n\t\t\tconst zoombarHeight = Configuration.zoomBar.height[zoombarType];\n\n\t\t\t// if the mouse position is from event (ruler)\n\t\t\t// we need add zoom bar height\n\t\t\tif (isTopZoomBarEnabled) {\n\t\t\t\tmouseRelativePos[1] +=\n\t\t\t\t\tzoombarHeight + Configuration.zoomBar.spacerHeight;\n\n\t\t\t\t// TODO - we need to add toolbar height when toolbar is available\n\t\t\t}\n\t\t}\n\n\t\tlet pos;\n\n\t\tconst holderWidth = holder.offsetWidth;\n\t\tconst holderHeight = holder.offsetHeight;\n\n\t\tlet bestPlacementOption;\n\t\tif (mouseRelativePos[0] / holderWidth > 0.9) {\n\t\t\tbestPlacementOption = PLACEMENTS.LEFT;\n\t\t} else if (mouseRelativePos[0] / holderWidth < 0.1) {\n\t\t\tbestPlacementOption = PLACEMENTS.RIGHT;\n\t\t} else {\n\t\t\t// Find out whether tooltip should be shown on the left or right side\n\t\t\tbestPlacementOption = this.positionService.findBestPlacementAt(\n\t\t\t\t{\n\t\t\t\t\tleft: mouseRelativePos[0],\n\t\t\t\t\ttop: mouseRelativePos[1],\n\t\t\t\t},\n\t\t\t\ttarget,\n\t\t\t\t[\n\t\t\t\t\tPLACEMENTS.RIGHT,\n\t\t\t\t\tPLACEMENTS.LEFT,\n\t\t\t\t\tPLACEMENTS.TOP,\n\t\t\t\t\tPLACEMENTS.BOTTOM,\n\t\t\t\t],\n\t\t\t\t() => ({\n\t\t\t\t\twidth: holderWidth,\n\t\t\t\t\theight: holderHeight,\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tlet { horizontalOffset } = Configuration.tooltips;\n\t\tif (bestPlacementOption === PLACEMENTS.LEFT) {\n\t\t\thorizontalOffset *= -1;\n\t\t}\n\n\t\t// Get coordinates to where tooltip should be positioned\n\t\tpos = this.positionService.findPositionAt(\n\t\t\t{\n\t\t\t\tleft: mouseRelativePos[0] + horizontalOffset,\n\t\t\t\ttop: mouseRelativePos[1],\n\t\t\t},\n\t\t\ttarget,\n\t\t\tbestPlacementOption\n\t\t);\n\n\t\tthis.positionService.setElement(target, pos);\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"tooltip.js","sourceRoot":"","sources":["tooltip.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component } from '../component';\nimport { Tools } from '../../tools';\nimport { DOMUtils } from '../../services';\nimport { ChartModel } from '../../model/model';\nimport { Events, RenderTypes, TruncationTypes } from '../../interfaces';\nimport * as Configuration from '../../configuration';\n\n// Carbon position service\nimport Position, { PLACEMENTS } from '@carbon/utils-position';\n\n// import the settings for the css prefix\nimport settings from 'carbon-components/es/globals/js/settings';\n\n// D3 Imports\n// @ts-ignore\n// ts-ignore is needed because `@types/d3`\n// is missing the `pointer` function\nimport { select, pointer } from 'd3-selection';\n\nimport { format } from 'date-fns';\n\nexport class Tooltip extends Component {\n\ttype = 'tooltip';\n\trenderType = RenderTypes.HTML;\n\n\t// flag for checking whether tooltip event listener is added or not\n\tisEventListenerAdded = false;\n\ttooltip: any;\n\tpositionService = new Position();\n\n\tconstructor(model: ChartModel, services: any, configs?: any) {\n\t\tsuper(model, services, configs);\n\n\t\tthis.init();\n\t}\n\n\thandleShowTooltip = (e) => {\n\t\tconst data = e.detail.data || e.detail.items;\n\n\t\tconst defaultHTML = this.getTooltipHTML(e);\n\n\t\tconst tooltipTextContainer = DOMUtils.appendOrSelect(\n\t\t\tthis.tooltip,\n\t\t\t'div.content-box'\n\t\t);\n\n\t\t// if there is a provided tooltip HTML function call it\n\t\tif (Tools.getProperty(this.getOptions(), 'tooltip', 'customHTML')) {\n\t\t\tif (e.detail.content) {\n\t\t\t\tconst labelHTML = `<div class=\"title-tooltip\"><p>${e.detail.content}</p></div>`;\n\t\t\t\ttooltipTextContainer.html(labelHTML);\n\t\t\t} else {\n\t\t\t\ttooltipTextContainer.html(\n\t\t\t\t\tthis.model\n\t\t\t\t\t\t.getOptions()\n\t\t\t\t\t\t.tooltip.customHTML(data, defaultHTML)\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\t// Use default tooltip\n\t\t\ttooltipTextContainer.html(defaultHTML);\n\t\t}\n\n\t\t// Position the tooltip\n\t\tthis.positionTooltip(e);\n\n\t\t// Fade in\n\t\tthis.tooltip.classed('hidden', false).attr('aria-hidden', false);\n\t};\n\n\thandleHideTooltip = () => {\n\t\tthis.tooltip.classed('hidden', true).attr('aria-hidden', true);\n\t};\n\n\taddTooltipEventListener() {\n\t\t// listen to move-tooltip Custom Events to move the tooltip\n\t\tthis.services.events.addEventListener(\n\t\t\tEvents.Tooltip.MOVE,\n\t\t\t(e: CustomEvent) => {\n\t\t\t\tif (this.tooltip.classed('hidden') === false) {\n\t\t\t\t\tthis.positionTooltip(e);\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\n\t\t// listen to show-tooltip Custom Events to render the tooltip\n\t\tthis.services.events.addEventListener(\n\t\t\tEvents.Tooltip.SHOW,\n\t\t\tthis.handleShowTooltip\n\t\t);\n\n\t\t// listen to hide-tooltip Custom Events to hide the tooltip\n\t\tthis.services.events.addEventListener(\n\t\t\tEvents.Tooltip.HIDE,\n\t\t\tthis.handleHideTooltip\n\t\t);\n\n\t\t// listen to chart-mouseout event to hide the tooltip\n\t\tthis.services.events.addEventListener(\n\t\t\tEvents.Chart.MOUSEOUT,\n\t\t\tthis.handleHideTooltip\n\t\t);\n\t}\n\n\tremoveTooltipEventListener() {\n\t\t// remove move-tooltip Custom Events\n\t\tthis.services.events.removeEventListener(Events.Tooltip.MOVE, null);\n\n\t\t// remove show-tooltip Custom Events\n\t\tthis.services.events.removeEventListener(\n\t\t\tEvents.Tooltip.SHOW,\n\t\t\tthis.handleShowTooltip\n\t\t);\n\n\t\t// remove hide-tooltip Custom Events\n\t\tthis.services.events.removeEventListener(\n\t\t\tEvents.Tooltip.HIDE,\n\t\t\tthis.handleHideTooltip\n\t\t);\n\n\t\t// remove the listener on chart-mouseout\n\t\tthis.services.events.removeEventListener(\n\t\t\tEvents.Chart.MOUSEOUT,\n\t\t\tthis.handleHideTooltip\n\t\t);\n\t}\n\n\tgetItems(e: CustomEvent) {\n\t\tif (e.detail.items) {\n\t\t\treturn e.detail.items;\n\t\t}\n\n\t\treturn [];\n\t}\n\n\tformatItems(items) {\n\t\tconst options = this.getOptions();\n\n\t\t// get user provided custom values for truncation\n\t\tconst truncationType = Tools.getProperty(\n\t\t\toptions,\n\t\t\t'tooltip',\n\t\t\t'truncation',\n\t\t\t'type'\n\t\t);\n\n\t\tconst truncationThreshold = Tools.getProperty(\n\t\t\toptions,\n\t\t\t'tooltip',\n\t\t\t'truncation',\n\t\t\t'threshold'\n\t\t);\n\n\t\tconst truncationNumCharacter = Tools.getProperty(\n\t\t\toptions,\n\t\t\t'tooltip',\n\t\t\t'truncation',\n\t\t\t'numCharacter'\n\t\t);\n\n\t\t// truncate the label if it's too long\n\t\t// only applies to discrete type\n\t\tif (truncationType !== TruncationTypes.NONE) {\n\t\t\treturn items.map((item) => {\n\t\t\t\t// get width of the label icon if it exists\n\t\t\t\tconst labelIconSize = item.labelIcon ? 12 : 0;\n\n\t\t\t\titem.value = item.value\n\t\t\t\t\t? this.valueFormatter(item.value, item.label)\n\t\t\t\t\t: item.value;\n\t\t\t\tif (\n\t\t\t\t\titem.label &&\n\t\t\t\t\titem.label.length + labelIconSize > truncationThreshold\n\t\t\t\t) {\n\t\t\t\t\titem.label = Tools.truncateLabel(\n\t\t\t\t\t\titem.label,\n\t\t\t\t\t\ttruncationType,\n\t\t\t\t\t\ttruncationNumCharacter\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (item.value && item.value.length > truncationThreshold) {\n\t\t\t\t\titem.value = Tools.truncateLabel(\n\t\t\t\t\t\titem.value,\n\t\t\t\t\t\ttruncationType,\n\t\t\t\t\t\ttruncationNumCharacter\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn item;\n\t\t\t});\n\t\t}\n\n\t\treturn items;\n\t}\n\n\tgetTooltipHTML(e: CustomEvent) {\n\t\tlet defaultHTML;\n\t\tif (e.detail.content) {\n\t\t\tdefaultHTML = `<div class=\"title-tooltip\"><p>${e.detail.content}</p></div>`;\n\t\t} else {\n\t\t\tconst items = this.getItems(e);\n\t\t\tconst formattedItems = this.formatItems(items);\n\n\t\t\tdefaultHTML =\n\t\t\t\t`<ul class=\"multi-tooltip\">` +\n\t\t\t\tformattedItems\n\t\t\t\t\t.map(\n\t\t\t\t\t\t(item) =>\n\t\t\t\t\t\t\t`<li>\n\t\t\t\t\t\t\t<div class=\"datapoint-tooltip ${item.bold ? 'bold' : ''}\">\n\t\t\t\t\t\t\t\t${item.class ? `<div class=\"tooltip-color ${item.class}\"></div>` : ''}\n\t\t\t\t\t\t\t\t${\n\t\t\t\t\t\t\t\t\titem.color\n\t\t\t\t\t\t\t\t\t\t? '<div style=\"background-color: ' +\n\t\t\t\t\t\t\t\t\t\t item.color +\n\t\t\t\t\t\t\t\t\t\t '\" class=\"tooltip-color\"></div>'\n\t\t\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t<div class=\"label\">\n\t\t\t\t\t\t\t\t<p>${item.label || ''}</p>\n\t\t\t\t\t\t\t\t${item.labelIcon ? `<span class=\"label-icon\"/>${item.labelIcon}</span>` : ''}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t${\n\t\t\t\t\t\t\t\t\titem.value === undefined ||\n\t\t\t\t\t\t\t\t\titem.value === null\n\t\t\t\t\t\t\t\t\t\t? ''\n\t\t\t\t\t\t\t\t\t\t: `<p class=\"value\"/>${item.value}</p>`\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</li>`\n\t\t\t\t\t)\n\t\t\t\t\t.join('') +\n\t\t\t\t`</ul>`;\n\t\t}\n\n\t\treturn defaultHTML;\n\t}\n\n\tvalueFormatter(value: any, label: string) {\n\t\tconst options = this.getOptions();\n\t\tconst valueFormatter = Tools.getProperty(\n\t\t\toptions,\n\t\t\t'tooltip',\n\t\t\t'valueFormatter'\n\t\t);\n\n\t\tif (valueFormatter) {\n\t\t\treturn valueFormatter(value, label);\n\t\t}\n\n\t\tif (typeof value.getTime === 'function') {\n\t\t\treturn format(value, 'MMM d, yyyy');\n\t\t}\n\n\t\treturn value.toLocaleString();\n\t}\n\n\trender() {\n\t\tconst options = this.getOptions();\n\t\tconst isTooltipEnabled = Tools.getProperty(\n\t\t\toptions,\n\t\t\t'tooltip',\n\t\t\t'enabled'\n\t\t);\n\t\tif (isTooltipEnabled) {\n\t\t\t// Grab the tooltip element\n\t\t\tconst holder = select(this.services.domUtils.getHolder());\n\t\t\tconst chartprefix = Tools.getProperty(options, 'style', 'prefix');\n\t\t\tthis.tooltip = DOMUtils.appendOrSelect(\n\t\t\t\tholder,\n\t\t\t\t`div.${settings.prefix}--${chartprefix}--tooltip`\n\t\t\t);\n\n\t\t\tthis.tooltip.style('max-width', null).attr('role', 'tooltip');\n\n\t\t\tif (!this.isEventListenerAdded) {\n\t\t\t\tthis.addTooltipEventListener();\n\t\t\t\tthis.isEventListenerAdded = true;\n\t\t\t}\n\t\t\tthis.tooltip.classed('hidden', true);\n\t\t} else if (!isTooltipEnabled && this.isEventListenerAdded) {\n\t\t\t// remove tooltip eventListener\n\t\t\tthis.removeTooltipEventListener();\n\t\t\tthis.isEventListenerAdded = false;\n\t\t}\n\t}\n\n\tpositionTooltip(e: CustomEvent) {\n\t\tconst holder = this.services.domUtils.getHolder();\n\t\tconst target = this.tooltip.node();\n\t\tconst options = this.getOptions();\n\t\tconst isTopZoomBarEnabled = Tools.getProperty(\n\t\t\toptions,\n\t\t\t'zoomBar',\n\t\t\t'top',\n\t\t\t'enabled'\n\t\t);\n\n\t\tlet mouseRelativePos = Tools.getProperty(e, 'detail', 'mousePosition');\n\t\tif (!mouseRelativePos) {\n\t\t\tmouseRelativePos = pointer(\n\t\t\t\tTools.getProperty(e, 'detail', 'event'),\n\t\t\t\tholder\n\t\t\t);\n\t\t} else {\n\t\t\tconst zoombarType = Tools.getProperty(\n\t\t\t\toptions,\n\t\t\t\t'zoomBar',\n\t\t\t\t'top',\n\t\t\t\t'type'\n\t\t\t);\n\t\t\tconst zoombarHeight = Configuration.zoomBar.height[zoombarType];\n\n\t\t\t// if the mouse position is from event (ruler)\n\t\t\t// we need add zoom bar height\n\t\t\tif (isTopZoomBarEnabled) {\n\t\t\t\tmouseRelativePos[1] +=\n\t\t\t\t\tzoombarHeight + Configuration.zoomBar.spacerHeight;\n\n\t\t\t\t// TODO - we need to add toolbar height when toolbar is available\n\t\t\t}\n\t\t}\n\n\t\tlet pos;\n\n\t\tconst holderWidth = holder.offsetWidth;\n\t\tconst holderHeight = holder.offsetHeight;\n\n\t\tlet bestPlacementOption;\n\t\tif (mouseRelativePos[0] / holderWidth > 0.9) {\n\t\t\tbestPlacementOption = PLACEMENTS.LEFT;\n\t\t} else if (mouseRelativePos[0] / holderWidth < 0.1) {\n\t\t\tbestPlacementOption = PLACEMENTS.RIGHT;\n\t\t} else {\n\t\t\t// Find out whether tooltip should be shown on the left or right side\n\t\t\tbestPlacementOption = this.positionService.findBestPlacementAt(\n\t\t\t\t{\n\t\t\t\t\tleft: mouseRelativePos[0],\n\t\t\t\t\ttop: mouseRelativePos[1],\n\t\t\t\t},\n\t\t\t\ttarget,\n\t\t\t\t[\n\t\t\t\t\tPLACEMENTS.RIGHT,\n\t\t\t\t\tPLACEMENTS.LEFT,\n\t\t\t\t\tPLACEMENTS.TOP,\n\t\t\t\t\tPLACEMENTS.BOTTOM,\n\t\t\t\t],\n\t\t\t\t() => ({\n\t\t\t\t\twidth: holderWidth,\n\t\t\t\t\theight: holderHeight,\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tlet { horizontalOffset } = Configuration.tooltips;\n\t\tif (bestPlacementOption === PLACEMENTS.LEFT) {\n\t\t\thorizontalOffset *= -1;\n\t\t}\n\n\t\t// Get coordinates to where tooltip should be positioned\n\t\tpos = this.positionService.findPositionAt(\n\t\t\t{\n\t\t\t\tleft: mouseRelativePos[0] + horizontalOffset,\n\t\t\t\ttop: mouseRelativePos[1],\n\t\t\t},\n\t\t\ttarget,\n\t\t\tbestPlacementOption\n\t\t);\n\n\t\tthis.positionService.setElement(target, pos);\n\t}\n}\n"]}
|
|
@@ -93,7 +93,9 @@ var Alluvial = /** @class */ (function (_super) {
|
|
|
93
93
|
// Add the category text
|
|
94
94
|
alluvialCategory
|
|
95
95
|
.append('text')
|
|
96
|
-
.attr('id', function (d, i) {
|
|
96
|
+
.attr('id', function (d, i) {
|
|
97
|
+
return _this.services.domUtils.generateElementIDString("alluvial-category-" + i);
|
|
98
|
+
})
|
|
97
99
|
.style('font-size', '14px')
|
|
98
100
|
.text(function (d) {
|
|
99
101
|
if (nodeCoordinates[d]) {
|
|
@@ -103,7 +105,8 @@ var Alluvial = /** @class */ (function (_super) {
|
|
|
103
105
|
})
|
|
104
106
|
.attr('y', 20)
|
|
105
107
|
.attr('x', function (d, i) {
|
|
106
|
-
var
|
|
108
|
+
var elementID = _this.services.domUtils.generateElementIDString("alluvial-category-" + i);
|
|
109
|
+
var width = DOMUtils.getSVGElementSize(select("text#" + elementID), { useBBox: true }).width;
|
|
107
110
|
// Make the text on the left on node group (except first column)
|
|
108
111
|
var x = 0;
|
|
109
112
|
if (d + x >= width) {
|
|
@@ -119,7 +122,9 @@ var Alluvial = /** @class */ (function (_super) {
|
|
|
119
122
|
.join('path')
|
|
120
123
|
.classed('link', true)
|
|
121
124
|
.attr('d', sankeyLinkHorizontal())
|
|
122
|
-
.attr('id', function (d) {
|
|
125
|
+
.attr('id', function (d) {
|
|
126
|
+
return _this.services.domUtils.generateElementIDString("alluvial-line-" + d.index);
|
|
127
|
+
})
|
|
123
128
|
.attr('class', function (d) {
|
|
124
129
|
// Use a single color for the lines
|
|
125
130
|
if (options.alluvial.monochrome) {
|
|
@@ -150,7 +155,9 @@ var Alluvial = /** @class */ (function (_super) {
|
|
|
150
155
|
.data(this.graph.nodes)
|
|
151
156
|
.enter()
|
|
152
157
|
.append('g')
|
|
153
|
-
.attr('id', function (d) {
|
|
158
|
+
.attr('id', function (d) {
|
|
159
|
+
return _this.services.domUtils.generateElementIDString("alluvial-node-" + d.index);
|
|
160
|
+
})
|
|
154
161
|
.classed('node-group', true)
|
|
155
162
|
.attr('transform', function (d) { return "translate(" + d.x0 + ", " + d.y0 + ")"; });
|
|
156
163
|
// Creating the nodes
|
|
@@ -162,11 +169,15 @@ var Alluvial = /** @class */ (function (_super) {
|
|
|
162
169
|
// Group to hold the text & rectangle background
|
|
163
170
|
var textNode = node
|
|
164
171
|
.append('g')
|
|
165
|
-
.attr('id', function (d) {
|
|
172
|
+
.attr('id', function (d) {
|
|
173
|
+
return _this.services.domUtils.generateElementIDString("alluvial-node-title-" + d.index);
|
|
174
|
+
});
|
|
166
175
|
// Node title - text
|
|
167
176
|
textNode
|
|
168
177
|
.append('text')
|
|
169
|
-
.attr('id', function (d) {
|
|
178
|
+
.attr('id', function (d) {
|
|
179
|
+
return _this.services.domUtils.generateElementIDString("alluvial-node-text-" + d.index);
|
|
180
|
+
})
|
|
170
181
|
.attr('class', 'node-text')
|
|
171
182
|
.style('font-size', '12px')
|
|
172
183
|
.attr('text-anchor', 'start')
|
|
@@ -186,8 +197,9 @@ var Alluvial = /** @class */ (function (_super) {
|
|
|
186
197
|
.append('rect')
|
|
187
198
|
.classed('node-text-bg', true)
|
|
188
199
|
.attr('width', function (d, i) {
|
|
200
|
+
var elementID = _this.services.domUtils.generateElementIDString("alluvial-node-text-" + i);
|
|
189
201
|
// Determine rectangle width based on text width
|
|
190
|
-
var width = DOMUtils.getSVGElementSize(select("text#
|
|
202
|
+
var width = DOMUtils.getSVGElementSize(select("text#" + elementID), { useBBox: true }).width;
|
|
191
203
|
return width + 8;
|
|
192
204
|
})
|
|
193
205
|
.attr('height', 18)
|
|
@@ -195,7 +207,8 @@ var Alluvial = /** @class */ (function (_super) {
|
|
|
195
207
|
.lower();
|
|
196
208
|
// Position group based on text width
|
|
197
209
|
textNode.attr('transform', function (d, i) {
|
|
198
|
-
var
|
|
210
|
+
var elementID = _this.services.domUtils.generateElementIDString("alluvial-node-text-" + i);
|
|
211
|
+
var width = DOMUtils.getSVGElementSize(select("text#" + elementID), { useBBox: true }).width;
|
|
199
212
|
// Subtracting 9 since text background is 18 to center
|
|
200
213
|
var y = (d.y1 - d.y0) / 2 - 9;
|
|
201
214
|
// Node width
|
|
@@ -370,12 +383,14 @@ var Alluvial = /** @class */ (function (_super) {
|
|
|
370
383
|
// Translate first column text container to the
|
|
371
384
|
// right so it doesn't clash with expanding node
|
|
372
385
|
if (datum.x0 - 2 === 0) {
|
|
373
|
-
var
|
|
386
|
+
var elementID_1 = self.services.domUtils.generateElementIDString("alluvial-node-title-" + datum.index);
|
|
387
|
+
var titleContainer = self.parent.select("g#" + elementID_1);
|
|
374
388
|
var titleMatrix = Tools.getTranformOffsets(titleContainer.attr('transform'));
|
|
375
389
|
titleContainer.attr('transform', "translate(" + (titleMatrix.x + 4) + "," + titleMatrix.y + ")");
|
|
376
390
|
}
|
|
391
|
+
var elementID = self.services.domUtils.generateElementIDString("alluvial-node-text-" + datum.index);
|
|
377
392
|
self.parent
|
|
378
|
-
.select("text#
|
|
393
|
+
.select("text#" + elementID)
|
|
379
394
|
.style('font-weight', 'bold');
|
|
380
395
|
debouncedLineHighlight(paths, 'mouseover');
|
|
381
396
|
// Dispatch mouse over event
|
|
@@ -417,12 +432,14 @@ var Alluvial = /** @class */ (function (_super) {
|
|
|
417
432
|
.attr('width', Configuration.alluvial.nodeWidth);
|
|
418
433
|
// Translate text container back to initial state
|
|
419
434
|
if (datum.x0 - 2 === 0) {
|
|
420
|
-
var
|
|
435
|
+
var elementID_2 = self.services.domUtils.generateElementIDString("alluvial-node-title-" + datum.index);
|
|
436
|
+
var titleContainer = self.parent.select("g#" + elementID_2);
|
|
421
437
|
var titleMatrix = Tools.getTranformOffsets(titleContainer.attr('transform'));
|
|
422
438
|
titleContainer.attr('transform', "translate(" + (titleMatrix.x - 4) + "," + titleMatrix.y + ")");
|
|
423
439
|
}
|
|
440
|
+
var elementID = self.services.domUtils.generateElementIDString("alluvial-node-text-" + datum.index);
|
|
424
441
|
self.parent
|
|
425
|
-
.select("text#
|
|
442
|
+
.select("text#" + elementID)
|
|
426
443
|
.style('font-weight', 'normal');
|
|
427
444
|
debouncedLineHighlight([], 'mouseout');
|
|
428
445
|
// Dispatch mouse out event
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alluvial.js","sourceRoot":"","sources":["alluvial.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal imports\nimport { Component } from '../component';\nimport { DOMUtils } from '../../services';\nimport { Tools } from '../../tools';\nimport * as Configuration from '../../configuration';\nimport { Events, ColorClassNameTypes, RenderTypes } from '../../interfaces';\n\n// D3 imports\nimport { select } from 'd3-selection';\nimport { sankey as d3Sankey, sankeyLinkHorizontal } from 'd3-sankey';\n\nexport class Alluvial extends Component {\n\ttype = 'alluvial';\n\trenderType = RenderTypes.SVG;\n\n\tprivate graph: any;\n\n\trender(animate = true) {\n\t\t// svg and container widths\n\t\tconst svg = this.getComponentContainer({ withinChartClip: true });\n\t\tsvg.html('');\n\n\t\tconst { width, height } = DOMUtils.getSVGElementSize(svg, {\n\t\t\tuseAttrs: true,\n\t\t});\n\n\t\t// Because of a Firefox bug with regards to sizing & d3 packs,\n\t\t// rather than checking if height or width aren't 0,\n\t\t// we have to make sure they're not smaller than 1\n\t\tif (width < 1 || height < 1) {\n\t\t\treturn;\n\t\t}\n\t\tconst options = this.model.getOptions();\n\t\tconst data = this.model.getDisplayData();\n\n\t\t// Set the custom node padding if provided\n\t\tlet nodePadding = Configuration.alluvial.minNodePadding;\n\t\tif (\n\t\t\toptions.alluvial.nodePadding > Configuration.alluvial.minNodePadding\n\t\t) {\n\t\t\tnodePadding = options.alluvial.nodePadding;\n\t\t}\n\n\t\tconst sankey = d3Sankey()\n\t\t\t.nodeId((d) => d.name)\n\t\t\t.nodeWidth(Configuration.alluvial.nodeWidth)\n\t\t\t// Distance nodes are apart from each other\n\t\t\t.nodePadding(nodePadding)\n\t\t\t// Size of the chart and its padding\n\t\t\t// Chart starts at 2 and ends at width - 2 so the outer nodes can expand from center\n\t\t\t// Chart starts from 30 so node categories can be displayed\n\t\t\t.extent([\n\t\t\t\t[2, 30],\n\t\t\t\t[width - 2, height],\n\t\t\t]);\n\n\t\t// Construct a graph with the provided user data\n\t\t// Data must be deep cloned to ensure user passed data isn't deleted when themes change\n\t\tthis.graph = sankey({\n\t\t\tnodes: options.alluvial.nodes.map((d) => Object.assign({}, d)),\n\t\t\tlinks: data.map((d) => Object.assign({}, d)),\n\t\t});\n\n\t\t// Filter out unused nodes so they are not rendered\n\t\tthis.graph.nodes = this.graph.nodes.filter((node) => node.value !== 0);\n\n\t\t// Determine the category name placement x position\n\t\tconst nodeCoordinates = {};\n\t\tthis.graph.nodes.forEach((element) => {\n\t\t\tconst point = element.x0;\n\n\t\t\t// Only 1 category per x-value\n\t\t\tif (element.category) {\n\t\t\t\tnodeCoordinates[point] = element?.category;\n\t\t\t}\n\t\t});\n\n\t\t// Add node category text\n\t\tconst alluvialCategory = svg\n\t\t\t.append('g')\n\t\t\t.classed('header-arrows', true)\n\t\t\t.selectAll('g')\n\t\t\t.data(Object.keys(nodeCoordinates))\n\t\t\t.join('g')\n\t\t\t.attr('transform', (d) => {\n\t\t\t\treturn `translate(${d}, 0)`;\n\t\t\t});\n\n\t\t// Add the category text\n\t\talluvialCategory\n\t\t\t.append('text')\n\t\t\t.attr('id', (d, i) => `category-${i}`)\n\t\t\t.style('font-size', '14px')\n\t\t\t.text((d) => {\n\t\t\t\tif (nodeCoordinates[d]) {\n\t\t\t\t\treturn nodeCoordinates[d];\n\t\t\t\t}\n\t\t\t\treturn '';\n\t\t\t})\n\t\t\t.attr('y', 20)\n\t\t\t.attr('x', (d, i) => {\n\t\t\t\tconst { width } = DOMUtils.getSVGElementSize(\n\t\t\t\t\tselect(`text#category-${i}`),\n\t\t\t\t\t{ useBBox: true }\n\t\t\t\t);\n\n\t\t\t\t// Make the text on the left on node group (except first column)\n\t\t\t\tlet x = 0;\n\t\t\t\tif (d + x >= width) {\n\t\t\t\t\tx = -width + 4;\n\t\t\t\t}\n\t\t\t\treturn x;\n\t\t\t});\n\n\t\t// Draws the links (Waves)\n\t\tsvg.append('g')\n\t\t\t.attr('fill', 'none')\n\t\t\t.selectAll('g')\n\t\t\t.data(this.graph.links)\n\t\t\t.join('path')\n\t\t\t.classed('link', true)\n\t\t\t.attr('d', sankeyLinkHorizontal())\n\t\t\t.attr('id', (d) => `line-${d.index}`)\n\t\t\t.attr('class', (d) => {\n\t\t\t\t// Use a single color for the lines\n\t\t\t\tif (options.alluvial.monochrome) {\n\t\t\t\t\treturn this.model.getColorClassName({\n\t\t\t\t\t\tclassNameTypes: [ColorClassNameTypes.STROKE],\n\t\t\t\t\t\tdataGroupName: 0,\n\t\t\t\t\t\toriginalClassName: 'link',\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn this.model.getColorClassName({\n\t\t\t\t\tclassNameTypes: [ColorClassNameTypes.STROKE],\n\t\t\t\t\tdataGroupName: d.source.index,\n\t\t\t\t\toriginalClassName: 'link',\n\t\t\t\t});\n\t\t\t})\n\t\t\t.style('stroke', (d) => this.model.getFillColor(d.source.name))\n\t\t\t.attr('stroke-width', (d) => Math.max(1, d.width))\n\t\t\t.style('stroke-opacity', Configuration.alluvial.opacity.default)\n\t\t\t.attr(\n\t\t\t\t'aria-label',\n\t\t\t\t(d) =>\n\t\t\t\t\t`${d.source.name} → ${d.target.name} (${d.value}${\n\t\t\t\t\t\toptions.alluvial.units\n\t\t\t\t\t\t\t? ' ' + options.alluvial.units\n\t\t\t\t\t\t\t: ''\n\t\t\t\t\t})`\n\t\t\t);\n\n\t\t// Creating the groups\n\t\tconst node = svg\n\t\t\t.append('g')\n\t\t\t.selectAll('g')\n\t\t\t.data(this.graph.nodes)\n\t\t\t.enter()\n\t\t\t.append('g')\n\t\t\t.attr('id', (d) => `node-${d.index}`)\n\t\t\t.classed('node-group', true)\n\t\t\t.attr('transform', (d) => `translate(${d.x0}, ${d.y0})`);\n\n\t\t// Creating the nodes\n\t\tnode.append('rect')\n\t\t\t.classed('node', true)\n\t\t\t.attr('height', (d) => d.y1 - d.y0)\n\t\t\t.attr('width', (d) => d.x1 - d.x0)\n\t\t\t.attr('fill', 'black');\n\n\t\t// Group to hold the text & rectangle background\n\t\tconst textNode = node\n\t\t\t.append('g')\n\t\t\t.attr('id', (d) => `node-title-${d.index}`);\n\n\t\t// Node title - text\n\t\ttextNode\n\t\t\t.append('text')\n\t\t\t.attr('id', (d) => `node-text-${d.index}`)\n\t\t\t.attr('class', 'node-text')\n\t\t\t.style('font-size', '12px')\n\t\t\t.attr('text-anchor', 'start')\n\t\t\t.attr('fill', 'white')\n\t\t\t// Padding to text\n\t\t\t.attr('x', 4)\n\t\t\t// shift 13 pixels down to fit background container\n\t\t\t.attr('dy', 13)\n\t\t\t.text((d) => {\n\t\t\t\treturn `${d.name} (${d.value})`;\n\t\t\t})\n\t\t\t.attr('aria-label', (d) => {\n\t\t\t\treturn `${d.name} (${d.value})`;\n\t\t\t});\n\n\t\t// Text background\n\t\ttextNode\n\t\t\t.append('rect')\n\t\t\t.classed('node-text-bg', true)\n\t\t\t.attr('width', (d, i) => {\n\t\t\t\t// Determine rectangle width based on text width\n\t\t\t\tconst { width } = DOMUtils.getSVGElementSize(\n\t\t\t\t\tselect(`text#node-text-${i}`),\n\t\t\t\t\t{ useBBox: true }\n\t\t\t\t);\n\n\t\t\t\treturn width + 8;\n\t\t\t})\n\t\t\t.attr('height', 18)\n\t\t\t.attr('stroke-width', 2)\n\t\t\t.lower();\n\n\t\t// Position group based on text width\n\t\ttextNode.attr('transform', (d, i) => {\n\t\t\tconst { width } = DOMUtils.getSVGElementSize(\n\t\t\t\tselect(`text#node-text-${i}`),\n\t\t\t\t{ useBBox: true }\n\t\t\t);\n\n\t\t\t// Subtracting 9 since text background is 18 to center\n\t\t\tconst y = (d.y1 - d.y0) / 2 - 9;\n\t\t\t// Node width\n\t\t\tlet x = d.x1 - d.x0;\n\n\t\t\t// Display bars on the right instead of left of the node\n\t\t\tif (d.x1 >= width) {\n\t\t\t\t// 16 = node width (4) + text container padding (8) + distance between node and text container (4)\n\t\t\t\tx = x - (width + 16);\n\t\t\t} else {\n\t\t\t\t// Add padding to text containers\n\t\t\t\tx += 4;\n\t\t\t}\n\n\t\t\treturn `translate(${x}, ${y})`;\n\t\t});\n\n\t\tthis.addLineEventListener();\n\t\tthis.addNodeEventListener();\n\t}\n\n\taddLineEventListener() {\n\t\tconst options = this.getOptions();\n\t\tconst self = this;\n\n\t\t// Set delay to counter flashy behaviour\n\t\tconst debouncedLineHighlight = Tools.debounce(\n\t\t\t(link, event = 'mouseover') => {\n\t\t\t\tconst allLinks = self.parent\n\t\t\t\t\t.selectAll('path.link')\n\t\t\t\t\t.transition()\n\t\t\t\t\t.call((t) =>\n\t\t\t\t\t\tself.services.transitions.setupTransition({\n\t\t\t\t\t\t\ttransition: t,\n\t\t\t\t\t\t\tname: 'alluvial-links-mouse-highlight',\n\t\t\t\t\t\t})\n\t\t\t\t\t);\n\n\t\t\t\tif (event === 'mouseout') {\n\t\t\t\t\tselect(link).lower();\n\t\t\t\t\tallLinks.style(\n\t\t\t\t\t\t'stroke-opacity',\n\t\t\t\t\t\tConfiguration.alluvial.opacity.default\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tallLinks.style('stroke-opacity', function () {\n\t\t\t\t\t\t// highlight and raise if link is this\n\t\t\t\t\t\tif (link === this) {\n\t\t\t\t\t\t\tselect(this).raise();\n\t\t\t\t\t\t\treturn Configuration.alluvial.opacity.selected;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn Configuration.alluvial.opacity.unfocus;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t\t33\n\t\t);\n\n\t\tthis.parent\n\t\t\t.selectAll('path.link')\n\t\t\t.on('mouseover', function (event, datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\t\t\t\tdebouncedLineHighlight(this, 'mouseover');\n\t\t\t\thoveredElement.classed('link-hovered', true);\n\n\t\t\t\tconst strokeColor = getComputedStyle(this).getPropertyValue(\n\t\t\t\t\t'stroke'\n\t\t\t\t);\n\n\t\t\t\t// Dispatch mouse over event\n\t\t\t\tself.services.events.dispatchEvent(\n\t\t\t\t\tEvents.Alluvial.LINE_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\t// Dispatch tooltip show event\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.SHOW, {\n\t\t\t\t\tevent,\n\t\t\t\t\thoveredElement,\n\t\t\t\t\titems: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: datum.target.name,\n\t\t\t\t\t\t\tvalue:\n\t\t\t\t\t\t\t\tdatum.value +\n\t\t\t\t\t\t\t\t(options.alluvial.units\n\t\t\t\t\t\t\t\t\t? ` ${options.alluvial.units}`\n\t\t\t\t\t\t\t\t\t: ''),\n\t\t\t\t\t\t\tcolor: strokeColor,\n\t\t\t\t\t\t\tlabelIcon: self.getRightArrowIcon(),\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('mousemove', function (event, datum) {\n\t\t\t\t// Dispatch mouse move event\n\t\t\t\tself.services.events.dispatchEvent(\n\t\t\t\t\tEvents.Alluvial.LINE_MOUSEMOVE,\n\t\t\t\t\t{\n\t\t\t\t\t\tevent,\n\t\t\t\t\t\telement: select(this),\n\t\t\t\t\t\tdatum,\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\t// Dispatch tooltip move event\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.MOVE, {\n\t\t\t\t\tevent,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('click', function (event, datum) {\n\t\t\t\t// Dispatch mouse click event\n\t\t\t\tself.services.events.dispatchEvent(Events.Alluvial.LINE_CLICK, {\n\t\t\t\t\tevent,\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('mouseout', function (event, datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\t\t\t\tdebouncedLineHighlight(this, 'mouseout');\n\t\t\t\thoveredElement.classed('link-hovered', false);\n\n\t\t\t\t// Dispatch mouse out event\n\t\t\t\tself.services.events.dispatchEvent(\n\t\t\t\t\tEvents.Alluvial.LINE_MOUSEOUT,\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\t// Dispatch hide tooltip event\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.HIDE, {\n\t\t\t\t\tevent,\n\t\t\t\t\thoveredElement,\n\t\t\t\t});\n\t\t\t});\n\t}\n\n\taddNodeEventListener() {\n\t\tconst self = this;\n\n\t\t// Set delay to counter flashy behaviour\n\t\tconst debouncedLineHighlight = Tools.debounce(\n\t\t\t(links = [], event = 'mouseover') => {\n\t\t\t\tif (event === 'mouseout' || links.length === 0) {\n\t\t\t\t\t// set all links to default opacity & corret link order\n\t\t\t\t\tself.parent\n\t\t\t\t\t\t.selectAll('path.link')\n\t\t\t\t\t\t.classed('link-hovered', false)\n\t\t\t\t\t\t.data(this.graph.links, (d) => d.index)\n\t\t\t\t\t\t.order()\n\t\t\t\t\t\t.style(\n\t\t\t\t\t\t\t'stroke-opacity',\n\t\t\t\t\t\t\tConfiguration.alluvial.opacity.default\n\t\t\t\t\t\t);\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Highlight all nodes\n\t\t\t\tconst allLinks = self.parent\n\t\t\t\t\t.selectAll('path.link')\n\t\t\t\t\t.transition()\n\t\t\t\t\t.call((t) =>\n\t\t\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\t\t\ttransition: t,\n\t\t\t\t\t\t\tname: 'alluvial-link-mouse-highlight',\n\t\t\t\t\t\t})\n\t\t\t\t\t);\n\n\t\t\t\tallLinks.style('stroke-opacity', function (d) {\n\t\t\t\t\t// Raise the links & increase stroke-opacity to selected\n\t\t\t\t\tif (links.some((element) => element === d.index)) {\n\t\t\t\t\t\tselect(this).classed('link-hovered', true).raise();\n\t\t\t\t\t\treturn Configuration.alluvial.opacity.selected;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Configuration.alluvial.opacity.unfocus;\n\t\t\t\t});\n\t\t\t},\n\t\t\t66\n\t\t);\n\n\t\tself.parent\n\t\t\t.selectAll('.node-group')\n\t\t\t.on('mouseover', function (event, datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\n\t\t\t\t// Highlight all links that pass through node\n\t\t\t\tconst paths = [];\n\n\t\t\t\t// Outgoing links\n\t\t\t\tself.traverse(\n\t\t\t\t\t{ link: 'sourceLinks', node: 'target' },\n\t\t\t\t\tdatum,\n\t\t\t\t\tpaths\n\t\t\t\t);\n\n\t\t\t\t//Incoming links\n\t\t\t\tself.traverse(\n\t\t\t\t\t{ link: 'targetLinks', node: 'source' },\n\t\t\t\t\tdatum,\n\t\t\t\t\tpaths\n\t\t\t\t);\n\n\t\t\t\t// Highlight all linked lines in the graph data structure\n\t\t\t\tif (paths.length) {\n\t\t\t\t\t// Get transformation value of node\n\t\t\t\t\tconst nodeMatrix = Tools.getTranformOffsets(\n\t\t\t\t\t\thoveredElement.attr('transform')\n\t\t\t\t\t);\n\n\t\t\t\t\t// Move node to the left by 2 to grow node from the center\n\t\t\t\t\thoveredElement.attr(\n\t\t\t\t\t\t'transform',\n\t\t\t\t\t\t`translate(${nodeMatrix.x - 2}, ${nodeMatrix.y})`\n\t\t\t\t\t);\n\n\t\t\t\t\thoveredElement\n\t\t\t\t\t\t.classed('node-hovered', true)\n\t\t\t\t\t\t.selectAll('rect.node')\n\t\t\t\t\t\t.attr('width', 8);\n\n\t\t\t\t\t// Translate first column text container to the\n\t\t\t\t\t// right so it doesn't clash with expanding node\n\t\t\t\t\tif (datum.x0 - 2 === 0) {\n\t\t\t\t\t\tconst titleContainer = self.parent.select(\n\t\t\t\t\t\t\t`g#node-title-${datum.index}`\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst titleMatrix = Tools.getTranformOffsets(\n\t\t\t\t\t\t\ttitleContainer.attr('transform')\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\ttitleContainer.attr(\n\t\t\t\t\t\t\t'transform',\n\t\t\t\t\t\t\t`translate(${titleMatrix.x + 4},${titleMatrix.y})`\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tself.parent\n\t\t\t\t\t\t.select(`text#node-text-${datum.index}`)\n\t\t\t\t\t\t.style('font-weight', 'bold');\n\n\t\t\t\t\tdebouncedLineHighlight(paths, 'mouseover');\n\n\t\t\t\t\t// Dispatch mouse over event\n\t\t\t\t\tself.services.events.dispatchEvent(\n\t\t\t\t\t\tEvents.Alluvial.NODE_MOUSEOVER,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\telement: hoveredElement,\n\t\t\t\t\t\t\tdatum,\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on('mousemove', function (event, datum) {\n\t\t\t\t// Dispatch mouse move event\n\t\t\t\tself.services.events.dispatchEvent(\n\t\t\t\t\tEvents.Alluvial.NODE_MOUSEMOVE,\n\t\t\t\t\t{\n\t\t\t\t\t\tevent,\n\t\t\t\t\t\telement: select(this),\n\t\t\t\t\t\tdatum,\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\t// Dispatch tooltip move event\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.MOVE, {\n\t\t\t\t\tevent,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('click', function (event, datum) {\n\t\t\t\t// Dispatch mouse click event\n\t\t\t\tself.services.events.dispatchEvent(Events.Alluvial.NODE_CLICK, {\n\t\t\t\t\tevent,\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('mouseout', function (event, datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\n\t\t\t\t// Set the node position to initial state (unexpanded)\n\t\t\t\tconst nodeMatrix = Tools.getTranformOffsets(\n\t\t\t\t\thoveredElement.attr('transform')\n\t\t\t\t);\n\n\t\t\t\thoveredElement\n\t\t\t\t\t.classed('node-hovered', false)\n\t\t\t\t\t.attr(\n\t\t\t\t\t\t'transform',\n\t\t\t\t\t\t`translate(${nodeMatrix.x + 2}, ${nodeMatrix.y})`\n\t\t\t\t\t)\n\t\t\t\t\t.select('rect.node')\n\t\t\t\t\t.attr('width', Configuration.alluvial.nodeWidth);\n\n\t\t\t\t// Translate text container back to initial state\n\t\t\t\tif (datum.x0 - 2 === 0) {\n\t\t\t\t\tconst titleContainer = self.parent.select(\n\t\t\t\t\t\t`g#node-title-${datum.index}`\n\t\t\t\t\t);\n\t\t\t\t\tconst titleMatrix = Tools.getTranformOffsets(\n\t\t\t\t\t\ttitleContainer.attr('transform')\n\t\t\t\t\t);\n\n\t\t\t\t\ttitleContainer.attr(\n\t\t\t\t\t\t'transform',\n\t\t\t\t\t\t`translate(${titleMatrix.x - 4},${titleMatrix.y})`\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tself.parent\n\t\t\t\t\t.select(`text#node-text-${datum.index}`)\n\t\t\t\t\t.style('font-weight', 'normal');\n\n\t\t\t\tdebouncedLineHighlight([], 'mouseout');\n\n\t\t\t\t// Dispatch mouse out event\n\t\t\t\tself.services.events.dispatchEvent(\n\t\t\t\t\tEvents.Alluvial.NODE_MOUSEOUT,\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\t// Dispatch hide tooltip event\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.HIDE, {\n\t\t\t\t\thoveredElement,\n\t\t\t\t});\n\t\t\t});\n\t}\n\n\t// Traverse graph and get all connected links to node\n\tprivate traverse(\n\t\tdirection:\n\t\t\t| { link: 'sourceLinks'; node: 'target' }\n\t\t\t| { link: 'targetLinks'; node: 'source' },\n\t\tnode,\n\t\tvisited = []\n\t) {\n\t\tconst links = node[direction.link].map((element) => {\n\t\t\tvisited.push(element.index);\n\t\t\treturn element[direction.node];\n\t\t});\n\n\t\t// Retrieve the child nodes\n\t\tlinks.forEach((element) => this.traverse(direction, element, visited));\n\t}\n\n\tgetRightArrowIcon() {\n\t\treturn `\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 32 32\">\n\t\t\t<polygon points=\"18 6 16.57 7.393 24.15 15 4 15 4 17 24.15 17 16.57 24.573 18 26 28 16 18 6\"/>\n\t\t\t<rect data-name=\"<Transparent Rectangle>\" style=\"fill: none;\" width=\"32\" height=\"32\"/>\n\t\t</svg>`;\n\t}\n\n\t// Remove event listeners\n\tdestroy() {\n\t\tthis.parent\n\t\t\t.selectAll('path.line,.node-group')\n\t\t\t.on('mouseover', null)\n\t\t\t.on('mousemove', null)\n\t\t\t.on('click', null)\n\t\t\t.on('mouseout', null);\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"alluvial.js","sourceRoot":"","sources":["alluvial.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal imports\nimport { Component } from '../component';\nimport { DOMUtils } from '../../services';\nimport { Tools } from '../../tools';\nimport * as Configuration from '../../configuration';\nimport { Events, ColorClassNameTypes, RenderTypes } from '../../interfaces';\n\n// D3 imports\nimport { select } from 'd3-selection';\nimport { sankey as d3Sankey, sankeyLinkHorizontal } from 'd3-sankey';\n\nexport class Alluvial extends Component {\n\ttype = 'alluvial';\n\trenderType = RenderTypes.SVG;\n\n\tprivate graph: any;\n\n\trender(animate = true) {\n\t\t// svg and container widths\n\t\tconst svg = this.getComponentContainer({ withinChartClip: true });\n\t\tsvg.html('');\n\n\t\tconst { width, height } = DOMUtils.getSVGElementSize(svg, {\n\t\t\tuseAttrs: true,\n\t\t});\n\n\t\t// Because of a Firefox bug with regards to sizing & d3 packs,\n\t\t// rather than checking if height or width aren't 0,\n\t\t// we have to make sure they're not smaller than 1\n\t\tif (width < 1 || height < 1) {\n\t\t\treturn;\n\t\t}\n\t\tconst options = this.model.getOptions();\n\t\tconst data = this.model.getDisplayData();\n\n\t\t// Set the custom node padding if provided\n\t\tlet nodePadding = Configuration.alluvial.minNodePadding;\n\t\tif (\n\t\t\toptions.alluvial.nodePadding > Configuration.alluvial.minNodePadding\n\t\t) {\n\t\t\tnodePadding = options.alluvial.nodePadding;\n\t\t}\n\n\t\tconst sankey = d3Sankey()\n\t\t\t.nodeId((d) => d.name)\n\t\t\t.nodeWidth(Configuration.alluvial.nodeWidth)\n\t\t\t// Distance nodes are apart from each other\n\t\t\t.nodePadding(nodePadding)\n\t\t\t// Size of the chart and its padding\n\t\t\t// Chart starts at 2 and ends at width - 2 so the outer nodes can expand from center\n\t\t\t// Chart starts from 30 so node categories can be displayed\n\t\t\t.extent([\n\t\t\t\t[2, 30],\n\t\t\t\t[width - 2, height],\n\t\t\t]);\n\n\t\t// Construct a graph with the provided user data\n\t\t// Data must be deep cloned to ensure user passed data isn't deleted when themes change\n\t\tthis.graph = sankey({\n\t\t\tnodes: options.alluvial.nodes.map((d) => Object.assign({}, d)),\n\t\t\tlinks: data.map((d) => Object.assign({}, d)),\n\t\t});\n\n\t\t// Filter out unused nodes so they are not rendered\n\t\tthis.graph.nodes = this.graph.nodes.filter((node) => node.value !== 0);\n\n\t\t// Determine the category name placement x position\n\t\tconst nodeCoordinates = {};\n\t\tthis.graph.nodes.forEach((element) => {\n\t\t\tconst point = element.x0;\n\n\t\t\t// Only 1 category per x-value\n\t\t\tif (element.category) {\n\t\t\t\tnodeCoordinates[point] = element?.category;\n\t\t\t}\n\t\t});\n\n\t\t// Add node category text\n\t\tconst alluvialCategory = svg\n\t\t\t.append('g')\n\t\t\t.classed('header-arrows', true)\n\t\t\t.selectAll('g')\n\t\t\t.data(Object.keys(nodeCoordinates))\n\t\t\t.join('g')\n\t\t\t.attr('transform', (d) => {\n\t\t\t\treturn `translate(${d}, 0)`;\n\t\t\t});\n\n\t\t// Add the category text\n\t\talluvialCategory\n\t\t\t.append('text')\n\t\t\t.attr('id', (d, i) =>\n\t\t\t\tthis.services.domUtils.generateElementIDString(\n\t\t\t\t\t`alluvial-category-${i}`\n\t\t\t\t)\n\t\t\t)\n\t\t\t.style('font-size', '14px')\n\t\t\t.text((d) => {\n\t\t\t\tif (nodeCoordinates[d]) {\n\t\t\t\t\treturn nodeCoordinates[d];\n\t\t\t\t}\n\t\t\t\treturn '';\n\t\t\t})\n\t\t\t.attr('y', 20)\n\t\t\t.attr('x', (d, i) => {\n\t\t\t\tconst elementID = this.services.domUtils.generateElementIDString(\n\t\t\t\t\t`alluvial-category-${i}`\n\t\t\t\t);\n\n\t\t\t\tconst { width } = DOMUtils.getSVGElementSize(\n\t\t\t\t\tselect(`text#${elementID}`),\n\t\t\t\t\t{ useBBox: true }\n\t\t\t\t);\n\n\t\t\t\t// Make the text on the left on node group (except first column)\n\t\t\t\tlet x = 0;\n\t\t\t\tif (d + x >= width) {\n\t\t\t\t\tx = -width + 4;\n\t\t\t\t}\n\t\t\t\treturn x;\n\t\t\t});\n\n\t\t// Draws the links (Waves)\n\t\tsvg.append('g')\n\t\t\t.attr('fill', 'none')\n\t\t\t.selectAll('g')\n\t\t\t.data(this.graph.links)\n\t\t\t.join('path')\n\t\t\t.classed('link', true)\n\t\t\t.attr('d', sankeyLinkHorizontal())\n\t\t\t.attr('id', (d) =>\n\t\t\t\tthis.services.domUtils.generateElementIDString(\n\t\t\t\t\t`alluvial-line-${d.index}`\n\t\t\t\t)\n\t\t\t)\n\t\t\t.attr('class', (d) => {\n\t\t\t\t// Use a single color for the lines\n\t\t\t\tif (options.alluvial.monochrome) {\n\t\t\t\t\treturn this.model.getColorClassName({\n\t\t\t\t\t\tclassNameTypes: [ColorClassNameTypes.STROKE],\n\t\t\t\t\t\tdataGroupName: 0,\n\t\t\t\t\t\toriginalClassName: 'link',\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn this.model.getColorClassName({\n\t\t\t\t\tclassNameTypes: [ColorClassNameTypes.STROKE],\n\t\t\t\t\tdataGroupName: d.source.index,\n\t\t\t\t\toriginalClassName: 'link',\n\t\t\t\t});\n\t\t\t})\n\t\t\t.style('stroke', (d) => this.model.getFillColor(d.source.name))\n\t\t\t.attr('stroke-width', (d) => Math.max(1, d.width))\n\t\t\t.style('stroke-opacity', Configuration.alluvial.opacity.default)\n\t\t\t.attr(\n\t\t\t\t'aria-label',\n\t\t\t\t(d) =>\n\t\t\t\t\t`${d.source.name} → ${d.target.name} (${d.value}${\n\t\t\t\t\t\toptions.alluvial.units\n\t\t\t\t\t\t\t? ' ' + options.alluvial.units\n\t\t\t\t\t\t\t: ''\n\t\t\t\t\t})`\n\t\t\t);\n\n\t\t// Creating the groups\n\t\tconst node = svg\n\t\t\t.append('g')\n\t\t\t.selectAll('g')\n\t\t\t.data(this.graph.nodes)\n\t\t\t.enter()\n\t\t\t.append('g')\n\t\t\t.attr('id', (d) =>\n\t\t\t\tthis.services.domUtils.generateElementIDString(\n\t\t\t\t\t`alluvial-node-${d.index}`\n\t\t\t\t)\n\t\t\t)\n\t\t\t.classed('node-group', true)\n\t\t\t.attr('transform', (d) => `translate(${d.x0}, ${d.y0})`);\n\n\t\t// Creating the nodes\n\t\tnode.append('rect')\n\t\t\t.classed('node', true)\n\t\t\t.attr('height', (d) => d.y1 - d.y0)\n\t\t\t.attr('width', (d) => d.x1 - d.x0)\n\t\t\t.attr('fill', 'black');\n\n\t\t// Group to hold the text & rectangle background\n\t\tconst textNode = node\n\t\t\t.append('g')\n\t\t\t.attr('id', (d) =>\n\t\t\t\tthis.services.domUtils.generateElementIDString(\n\t\t\t\t\t`alluvial-node-title-${d.index}`\n\t\t\t\t)\n\t\t\t);\n\n\t\t// Node title - text\n\t\ttextNode\n\t\t\t.append('text')\n\t\t\t.attr('id', (d) =>\n\t\t\t\tthis.services.domUtils.generateElementIDString(\n\t\t\t\t\t`alluvial-node-text-${d.index}`\n\t\t\t\t)\n\t\t\t)\n\t\t\t.attr('class', 'node-text')\n\t\t\t.style('font-size', '12px')\n\t\t\t.attr('text-anchor', 'start')\n\t\t\t.attr('fill', 'white')\n\t\t\t// Padding to text\n\t\t\t.attr('x', 4)\n\t\t\t// shift 13 pixels down to fit background container\n\t\t\t.attr('dy', 13)\n\t\t\t.text((d) => {\n\t\t\t\treturn `${d.name} (${d.value})`;\n\t\t\t})\n\t\t\t.attr('aria-label', (d) => {\n\t\t\t\treturn `${d.name} (${d.value})`;\n\t\t\t});\n\n\t\t// Text background\n\t\ttextNode\n\t\t\t.append('rect')\n\t\t\t.classed('node-text-bg', true)\n\t\t\t.attr('width', (d, i) => {\n\t\t\t\tconst elementID = this.services.domUtils.generateElementIDString(\n\t\t\t\t\t`alluvial-node-text-${i}`\n\t\t\t\t);\n\n\t\t\t\t// Determine rectangle width based on text width\n\t\t\t\tconst { width } = DOMUtils.getSVGElementSize(\n\t\t\t\t\tselect(`text#${elementID}`),\n\t\t\t\t\t{ useBBox: true }\n\t\t\t\t);\n\n\t\t\t\treturn width + 8;\n\t\t\t})\n\t\t\t.attr('height', 18)\n\t\t\t.attr('stroke-width', 2)\n\t\t\t.lower();\n\n\t\t// Position group based on text width\n\t\ttextNode.attr('transform', (d, i) => {\n\t\t\tconst elementID = this.services.domUtils.generateElementIDString(\n\t\t\t\t`alluvial-node-text-${i}`\n\t\t\t);\n\n\t\t\tconst { width } = DOMUtils.getSVGElementSize(\n\t\t\t\tselect(`text#${elementID}`),\n\t\t\t\t{ useBBox: true }\n\t\t\t);\n\n\t\t\t// Subtracting 9 since text background is 18 to center\n\t\t\tconst y = (d.y1 - d.y0) / 2 - 9;\n\t\t\t// Node width\n\t\t\tlet x = d.x1 - d.x0;\n\n\t\t\t// Display bars on the right instead of left of the node\n\t\t\tif (d.x1 >= width) {\n\t\t\t\t// 16 = node width (4) + text container padding (8) + distance between node and text container (4)\n\t\t\t\tx = x - (width + 16);\n\t\t\t} else {\n\t\t\t\t// Add padding to text containers\n\t\t\t\tx += 4;\n\t\t\t}\n\n\t\t\treturn `translate(${x}, ${y})`;\n\t\t});\n\n\t\tthis.addLineEventListener();\n\t\tthis.addNodeEventListener();\n\t}\n\n\taddLineEventListener() {\n\t\tconst options = this.getOptions();\n\t\tconst self = this;\n\n\t\t// Set delay to counter flashy behaviour\n\t\tconst debouncedLineHighlight = Tools.debounce(\n\t\t\t(link, event = 'mouseover') => {\n\t\t\t\tconst allLinks = self.parent\n\t\t\t\t\t.selectAll('path.link')\n\t\t\t\t\t.transition()\n\t\t\t\t\t.call((t) =>\n\t\t\t\t\t\tself.services.transitions.setupTransition({\n\t\t\t\t\t\t\ttransition: t,\n\t\t\t\t\t\t\tname: 'alluvial-links-mouse-highlight',\n\t\t\t\t\t\t})\n\t\t\t\t\t);\n\n\t\t\t\tif (event === 'mouseout') {\n\t\t\t\t\tselect(link).lower();\n\t\t\t\t\tallLinks.style(\n\t\t\t\t\t\t'stroke-opacity',\n\t\t\t\t\t\tConfiguration.alluvial.opacity.default\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tallLinks.style('stroke-opacity', function () {\n\t\t\t\t\t\t// highlight and raise if link is this\n\t\t\t\t\t\tif (link === this) {\n\t\t\t\t\t\t\tselect(this).raise();\n\t\t\t\t\t\t\treturn Configuration.alluvial.opacity.selected;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn Configuration.alluvial.opacity.unfocus;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t\t33\n\t\t);\n\n\t\tthis.parent\n\t\t\t.selectAll('path.link')\n\t\t\t.on('mouseover', function (event, datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\t\t\t\tdebouncedLineHighlight(this, 'mouseover');\n\t\t\t\thoveredElement.classed('link-hovered', true);\n\n\t\t\t\tconst strokeColor = getComputedStyle(this).getPropertyValue(\n\t\t\t\t\t'stroke'\n\t\t\t\t);\n\n\t\t\t\t// Dispatch mouse over event\n\t\t\t\tself.services.events.dispatchEvent(\n\t\t\t\t\tEvents.Alluvial.LINE_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\t// Dispatch tooltip show event\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.SHOW, {\n\t\t\t\t\tevent,\n\t\t\t\t\thoveredElement,\n\t\t\t\t\titems: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: datum.target.name,\n\t\t\t\t\t\t\tvalue:\n\t\t\t\t\t\t\t\tdatum.value +\n\t\t\t\t\t\t\t\t(options.alluvial.units\n\t\t\t\t\t\t\t\t\t? ` ${options.alluvial.units}`\n\t\t\t\t\t\t\t\t\t: ''),\n\t\t\t\t\t\t\tcolor: strokeColor,\n\t\t\t\t\t\t\tlabelIcon: self.getRightArrowIcon(),\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('mousemove', function (event, datum) {\n\t\t\t\t// Dispatch mouse move event\n\t\t\t\tself.services.events.dispatchEvent(\n\t\t\t\t\tEvents.Alluvial.LINE_MOUSEMOVE,\n\t\t\t\t\t{\n\t\t\t\t\t\tevent,\n\t\t\t\t\t\telement: select(this),\n\t\t\t\t\t\tdatum,\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\t// Dispatch tooltip move event\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.MOVE, {\n\t\t\t\t\tevent,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('click', function (event, datum) {\n\t\t\t\t// Dispatch mouse click event\n\t\t\t\tself.services.events.dispatchEvent(Events.Alluvial.LINE_CLICK, {\n\t\t\t\t\tevent,\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('mouseout', function (event, datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\t\t\t\tdebouncedLineHighlight(this, 'mouseout');\n\t\t\t\thoveredElement.classed('link-hovered', false);\n\n\t\t\t\t// Dispatch mouse out event\n\t\t\t\tself.services.events.dispatchEvent(\n\t\t\t\t\tEvents.Alluvial.LINE_MOUSEOUT,\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\t// Dispatch hide tooltip event\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.HIDE, {\n\t\t\t\t\tevent,\n\t\t\t\t\thoveredElement,\n\t\t\t\t});\n\t\t\t});\n\t}\n\n\taddNodeEventListener() {\n\t\tconst self = this;\n\n\t\t// Set delay to counter flashy behaviour\n\t\tconst debouncedLineHighlight = Tools.debounce(\n\t\t\t(links = [], event = 'mouseover') => {\n\t\t\t\tif (event === 'mouseout' || links.length === 0) {\n\t\t\t\t\t// set all links to default opacity & corret link order\n\t\t\t\t\tself.parent\n\t\t\t\t\t\t.selectAll('path.link')\n\t\t\t\t\t\t.classed('link-hovered', false)\n\t\t\t\t\t\t.data(this.graph.links, (d) => d.index)\n\t\t\t\t\t\t.order()\n\t\t\t\t\t\t.style(\n\t\t\t\t\t\t\t'stroke-opacity',\n\t\t\t\t\t\t\tConfiguration.alluvial.opacity.default\n\t\t\t\t\t\t);\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Highlight all nodes\n\t\t\t\tconst allLinks = self.parent\n\t\t\t\t\t.selectAll('path.link')\n\t\t\t\t\t.transition()\n\t\t\t\t\t.call((t) =>\n\t\t\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\t\t\ttransition: t,\n\t\t\t\t\t\t\tname: 'alluvial-link-mouse-highlight',\n\t\t\t\t\t\t})\n\t\t\t\t\t);\n\n\t\t\t\tallLinks.style('stroke-opacity', function (d) {\n\t\t\t\t\t// Raise the links & increase stroke-opacity to selected\n\t\t\t\t\tif (links.some((element) => element === d.index)) {\n\t\t\t\t\t\tselect(this).classed('link-hovered', true).raise();\n\t\t\t\t\t\treturn Configuration.alluvial.opacity.selected;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Configuration.alluvial.opacity.unfocus;\n\t\t\t\t});\n\t\t\t},\n\t\t\t66\n\t\t);\n\n\t\tself.parent\n\t\t\t.selectAll('.node-group')\n\t\t\t.on('mouseover', function (event, datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\n\t\t\t\t// Highlight all links that pass through node\n\t\t\t\tconst paths = [];\n\n\t\t\t\t// Outgoing links\n\t\t\t\tself.traverse(\n\t\t\t\t\t{ link: 'sourceLinks', node: 'target' },\n\t\t\t\t\tdatum,\n\t\t\t\t\tpaths\n\t\t\t\t);\n\n\t\t\t\t//Incoming links\n\t\t\t\tself.traverse(\n\t\t\t\t\t{ link: 'targetLinks', node: 'source' },\n\t\t\t\t\tdatum,\n\t\t\t\t\tpaths\n\t\t\t\t);\n\n\t\t\t\t// Highlight all linked lines in the graph data structure\n\t\t\t\tif (paths.length) {\n\t\t\t\t\t// Get transformation value of node\n\t\t\t\t\tconst nodeMatrix = Tools.getTranformOffsets(\n\t\t\t\t\t\thoveredElement.attr('transform')\n\t\t\t\t\t);\n\n\t\t\t\t\t// Move node to the left by 2 to grow node from the center\n\t\t\t\t\thoveredElement.attr(\n\t\t\t\t\t\t'transform',\n\t\t\t\t\t\t`translate(${nodeMatrix.x - 2}, ${nodeMatrix.y})`\n\t\t\t\t\t);\n\n\t\t\t\t\thoveredElement\n\t\t\t\t\t\t.classed('node-hovered', true)\n\t\t\t\t\t\t.selectAll('rect.node')\n\t\t\t\t\t\t.attr('width', 8);\n\n\t\t\t\t\t// Translate first column text container to the\n\t\t\t\t\t// right so it doesn't clash with expanding node\n\t\t\t\t\tif (datum.x0 - 2 === 0) {\n\t\t\t\t\t\tconst elementID = self.services.domUtils.generateElementIDString(\n\t\t\t\t\t\t\t`alluvial-node-title-${datum.index}`\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tconst titleContainer = self.parent.select(\n\t\t\t\t\t\t\t`g#${elementID}`\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst titleMatrix = Tools.getTranformOffsets(\n\t\t\t\t\t\t\ttitleContainer.attr('transform')\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\ttitleContainer.attr(\n\t\t\t\t\t\t\t'transform',\n\t\t\t\t\t\t\t`translate(${titleMatrix.x + 4},${titleMatrix.y})`\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst elementID = self.services.domUtils.generateElementIDString(\n\t\t\t\t\t\t`alluvial-node-text-${datum.index}`\n\t\t\t\t\t);\n\n\t\t\t\t\tself.parent\n\t\t\t\t\t\t.select(`text#${elementID}`)\n\t\t\t\t\t\t.style('font-weight', 'bold');\n\n\t\t\t\t\tdebouncedLineHighlight(paths, 'mouseover');\n\n\t\t\t\t\t// Dispatch mouse over event\n\t\t\t\t\tself.services.events.dispatchEvent(\n\t\t\t\t\t\tEvents.Alluvial.NODE_MOUSEOVER,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\telement: hoveredElement,\n\t\t\t\t\t\t\tdatum,\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on('mousemove', function (event, datum) {\n\t\t\t\t// Dispatch mouse move event\n\t\t\t\tself.services.events.dispatchEvent(\n\t\t\t\t\tEvents.Alluvial.NODE_MOUSEMOVE,\n\t\t\t\t\t{\n\t\t\t\t\t\tevent,\n\t\t\t\t\t\telement: select(this),\n\t\t\t\t\t\tdatum,\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\t// Dispatch tooltip move event\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.MOVE, {\n\t\t\t\t\tevent,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('click', function (event, datum) {\n\t\t\t\t// Dispatch mouse click event\n\t\t\t\tself.services.events.dispatchEvent(Events.Alluvial.NODE_CLICK, {\n\t\t\t\t\tevent,\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('mouseout', function (event, datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\n\t\t\t\t// Set the node position to initial state (unexpanded)\n\t\t\t\tconst nodeMatrix = Tools.getTranformOffsets(\n\t\t\t\t\thoveredElement.attr('transform')\n\t\t\t\t);\n\n\t\t\t\thoveredElement\n\t\t\t\t\t.classed('node-hovered', false)\n\t\t\t\t\t.attr(\n\t\t\t\t\t\t'transform',\n\t\t\t\t\t\t`translate(${nodeMatrix.x + 2}, ${nodeMatrix.y})`\n\t\t\t\t\t)\n\t\t\t\t\t.select('rect.node')\n\t\t\t\t\t.attr('width', Configuration.alluvial.nodeWidth);\n\n\t\t\t\t// Translate text container back to initial state\n\t\t\t\tif (datum.x0 - 2 === 0) {\n\t\t\t\t\tconst elementID = self.services.domUtils.generateElementIDString(\n\t\t\t\t\t\t`alluvial-node-title-${datum.index}`\n\t\t\t\t\t);\n\n\t\t\t\t\tconst titleContainer = self.parent.select(`g#${elementID}`);\n\t\t\t\t\tconst titleMatrix = Tools.getTranformOffsets(\n\t\t\t\t\t\ttitleContainer.attr('transform')\n\t\t\t\t\t);\n\n\t\t\t\t\ttitleContainer.attr(\n\t\t\t\t\t\t'transform',\n\t\t\t\t\t\t`translate(${titleMatrix.x - 4},${titleMatrix.y})`\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst elementID = self.services.domUtils.generateElementIDString(\n\t\t\t\t\t`alluvial-node-text-${datum.index}`\n\t\t\t\t);\n\n\t\t\t\tself.parent\n\t\t\t\t\t.select(`text#${elementID}`)\n\t\t\t\t\t.style('font-weight', 'normal');\n\n\t\t\t\tdebouncedLineHighlight([], 'mouseout');\n\n\t\t\t\t// Dispatch mouse out event\n\t\t\t\tself.services.events.dispatchEvent(\n\t\t\t\t\tEvents.Alluvial.NODE_MOUSEOUT,\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\t// Dispatch hide tooltip event\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.HIDE, {\n\t\t\t\t\thoveredElement,\n\t\t\t\t});\n\t\t\t});\n\t}\n\n\t// Traverse graph and get all connected links to node\n\tprivate traverse(\n\t\tdirection:\n\t\t\t| { link: 'sourceLinks'; node: 'target' }\n\t\t\t| { link: 'targetLinks'; node: 'source' },\n\t\tnode,\n\t\tvisited = []\n\t) {\n\t\tconst links = node[direction.link].map((element) => {\n\t\t\tvisited.push(element.index);\n\t\t\treturn element[direction.node];\n\t\t});\n\n\t\t// Retrieve the child nodes\n\t\tlinks.forEach((element) => this.traverse(direction, element, visited));\n\t}\n\n\tgetRightArrowIcon() {\n\t\treturn `\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 32 32\">\n\t\t\t<polygon points=\"18 6 16.57 7.393 24.15 15 4 15 4 17 24.15 17 16.57 24.573 18 26 28 16 18 6\"/>\n\t\t\t<rect data-name=\"<Transparent Rectangle>\" style=\"fill: none;\" width=\"32\" height=\"32\"/>\n\t\t</svg>`;\n\t}\n\n\t// Remove event listeners\n\tdestroy() {\n\t\tthis.parent\n\t\t\t.selectAll('path.line,.node-group')\n\t\t\t.on('mouseover', null)\n\t\t\t.on('mousemove', null)\n\t\t\t.on('click', null)\n\t\t\t.on('mouseout', null);\n\t}\n}\n"]}
|
|
@@ -113,6 +113,7 @@ var StackedArea = /** @class */ (function (_super) {
|
|
|
113
113
|
})
|
|
114
114
|
.attr('role', Roles.GRAPHICS_SYMBOL)
|
|
115
115
|
.attr('aria-roledescription', 'area')
|
|
116
|
+
.attr('aria-label', function (d) { return Tools.getProperty(d, 0, groupMapsTo); })
|
|
116
117
|
.transition()
|
|
117
118
|
.call(function (t) {
|
|
118
119
|
return _this.services.transitions.setupTransition({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"area-stacked.js","sourceRoot":"","sources":["area-stacked.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,mBAAmB;AACnB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,aAAa,MAAM,qBAAqB,CAAC;AACrD,OAAO,EACN,KAAK,EACL,MAAM,EACN,mBAAmB,EACnB,WAAW,GACX,MAAM,kBAAkB,CAAC;AAE1B,aAAa;AACb,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAEhC;IAAiC,+BAAS;IAA1C;QAAA,
|
|
1
|
+
{"version":3,"file":"area-stacked.js","sourceRoot":"","sources":["area-stacked.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from '../component';\nimport { Tools } from '../../tools';\nimport * as Configuration from '../../configuration';\nimport {\n\tRoles,\n\tEvents,\n\tColorClassNameTypes,\n\tRenderTypes,\n} from '../../interfaces';\n\n// D3 Imports\nimport { area } from 'd3-shape';\n\nexport class StackedArea extends Component {\n\ttype = 'area-stacked';\n\trenderType = RenderTypes.SVG;\n\n\tareaGenerator: any;\n\n\tinit() {\n\t\tconst eventsFragment = this.services.events;\n\n\t\t// Highlight correct area on legend item hovers\n\t\teventsFragment.addEventListener(\n\t\t\tEvents.Legend.ITEM_HOVER,\n\t\t\tthis.handleLegendOnHover\n\t\t);\n\n\t\t// Un-highlight area on legend item mouseouts\n\t\teventsFragment.addEventListener(\n\t\t\tEvents.Legend.ITEM_MOUSEOUT,\n\t\t\tthis.handleLegendMouseOut\n\t\t);\n\t}\n\n\trender(animate = true) {\n\t\tlet svg = this.getComponentContainer({ withinChartClip: true });\n\t\tconst self = this;\n\t\tconst options = this.getOptions();\n\t\tconst { groupMapsTo } = options.data;\n\n\t\tconst percentage = Object.keys(options.axes).some(\n\t\t\t(axis) => options.axes[axis].percentage\n\t\t);\n\n\t\tconst stackedData = this.model.getStackedData({\n\t\t\tpercentage,\n\t\t\tgroups: this.configs.groups,\n\t\t});\n\n\t\tconst firstDatum = Tools.getProperty(stackedData, 0, 0);\n\n\t\t// area doesnt have to use the main range and domain axes - they can be mapped to the secondary (in the case of a combo chart)\n\t\t// however area _cannot_ have multiple datasets that are mapped to _different_ ranges and domains so we can use the first data item\n\t\tconst domainAxisPosition = this.services.cartesianScales.getDomainAxisPosition(\n\t\t\t{ firstDatum }\n\t\t);\n\t\tconst rangeAxisPosition = this.services.cartesianScales.getRangeAxisPosition(\n\t\t\t{ firstDatum }\n\t\t);\n\t\tconst mainYScale = this.services.cartesianScales.getScaleByPosition(\n\t\t\trangeAxisPosition\n\t\t);\n\n\t\tconst areas = svg\n\t\t\t.selectAll('path.area')\n\t\t\t.data(stackedData, (d) => Tools.getProperty(d, 0, groupMapsTo));\n\n\t\t// D3 area generator function\n\t\tthis.areaGenerator = area()\n\t\t\t.x((d: any, i) =>\n\t\t\t\tthis.services.cartesianScales.getValueThroughAxisPosition(\n\t\t\t\t\tdomainAxisPosition,\n\t\t\t\t\td.data.sharedStackKey,\n\t\t\t\t\ti\n\t\t\t\t)\n\t\t\t)\n\t\t\t.y0((d) => mainYScale(d[0]))\n\t\t\t.y1((d) => mainYScale(d[1]))\n\t\t\t.curve(this.services.curves.getD3Curve());\n\n\t\tareas.exit().attr('opacity', 0).remove();\n\n\t\tconst enteringAreas = areas.enter().append('path').attr('opacity', 0);\n\n\t\tenteringAreas\n\t\t\t.merge(areas)\n\t\t\t.data(stackedData, (d) => Tools.getProperty(d, 0, groupMapsTo))\n\t\t\t.attr('class', 'area')\n\t\t\t.attr('class', (d) =>\n\t\t\t\tthis.model.getColorClassName({\n\t\t\t\t\tclassNameTypes: [ColorClassNameTypes.FILL],\n\t\t\t\t\tdataGroupName: Tools.getProperty(d, 0, groupMapsTo),\n\t\t\t\t\toriginalClassName: 'area',\n\t\t\t\t})\n\t\t\t)\n\t\t\t.style('fill', (d) =>\n\t\t\t\tself.model.getFillColor(Tools.getProperty(d, 0, groupMapsTo))\n\t\t\t)\n\t\t\t.attr('role', Roles.GRAPHICS_SYMBOL)\n\t\t\t.attr('aria-roledescription', 'area')\n\t\t\t.attr('aria-label', (d) => Tools.getProperty(d, 0, groupMapsTo))\n\t\t\t.transition()\n\t\t\t.call((t) =>\n\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\ttransition: t,\n\t\t\t\t\tname: 'area-update-enter',\n\t\t\t\t\tanimate,\n\t\t\t\t})\n\t\t\t)\n\t\t\t.attr('opacity', Configuration.area.opacity.selected)\n\t\t\t.attr('d', this.areaGenerator);\n\t}\n\n\thandleLegendOnHover = (event: CustomEvent) => {\n\t\tconst { hoveredElement } = event.detail;\n\t\tconst options = this.getOptions();\n\t\tconst { groupMapsTo } = options.data;\n\n\t\tthis.parent\n\t\t\t.selectAll('path.area')\n\t\t\t.transition('legend-hover-area')\n\t\t\t.call((t) =>\n\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\ttransition: t,\n\t\t\t\t\tname: 'legend-hover-area',\n\t\t\t\t})\n\t\t\t)\n\t\t\t.attr('opacity', (d) => {\n\t\t\t\tif (\n\t\t\t\t\tTools.getProperty(d, 0, groupMapsTo) !==\n\t\t\t\t\thoveredElement.datum().name\n\t\t\t\t) {\n\t\t\t\t\treturn Configuration.area.opacity.unselected;\n\t\t\t\t}\n\n\t\t\t\treturn Configuration.area.opacity.selected;\n\t\t\t});\n\t};\n\n\thandleLegendMouseOut = () => {\n\t\tthis.parent\n\t\t\t.selectAll('path.area')\n\t\t\t.transition('legend-mouseout-area')\n\t\t\t.call((t) =>\n\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\ttransition: t,\n\t\t\t\t\tname: 'legend-mouseout-area',\n\t\t\t\t})\n\t\t\t)\n\t\t\t.attr('opacity', Configuration.area.opacity.selected);\n\t};\n}\n"]}
|
|
@@ -156,9 +156,7 @@ var Area = /** @class */ (function (_super) {
|
|
|
156
156
|
}
|
|
157
157
|
GradientUtils.appendOrUpdateLinearGradient({
|
|
158
158
|
svg: this.parent,
|
|
159
|
-
id: groupedData[0].name.replace(' ', '') +
|
|
160
|
-
'_' +
|
|
161
|
-
this.gradient_id,
|
|
159
|
+
id: this.services.domUtils.generateElementIDString(groupedData[0].name.replace(' ', '') + "_" + this.gradient_id),
|
|
162
160
|
x1: '0%',
|
|
163
161
|
x2: '0%',
|
|
164
162
|
y1: '0%',
|
|
@@ -181,7 +179,7 @@ var Area = /** @class */ (function (_super) {
|
|
|
181
179
|
enteringAreas
|
|
182
180
|
.merge(areas)
|
|
183
181
|
.style('fill', function (group) {
|
|
184
|
-
return "url(#" + group.name.replace(' ', '') + "_" + _this.gradient_id + ")";
|
|
182
|
+
return "url(#" + _this.services.domUtils.generateElementIDString(group.name.replace(' ', '') + "_" + _this.gradient_id) + ")";
|
|
185
183
|
})
|
|
186
184
|
.attr('class', 'area')
|
|
187
185
|
.attr('class', function (group) {
|