@carbon/charts 1.6.2 → 1.6.4

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.
@@ -83,11 +83,18 @@ var Toolbar = /** @class */ (function (_super) {
83
83
  .classed('disabled', function (d) { return d.shouldBeDisabled(); })
84
84
  .attr('aria-disabled', function (d) { return d.shouldBeDisabled(); })
85
85
  .attr('aria-label', function (d) { return d.title; })
86
- .html(function (d) { return "\n\t\t\t<button\n\t\t\t\tclass=\"cds--overflow-menu__trigger cds--overflow-menu__trigger\"\n\t\t\t\taria-haspopup=\"true\" aria-expanded=\"false\" id=\"" + _this.services.domUtils.generateElementIDString("control-" + d.id) + "\" aria-label=\"" + d.title + "\">\n\t\t\t\t<svg focusable=\"false\" preserveAspectRatio=\"xMidYMid meet\" style=\"will-change: transform; width: " + (d.iconSVG.width !== undefined ? d.iconSVG.width : '20px') + "; height: " + (d.iconSVG.height !== undefined
87
- ? d.iconSVG.height
88
- : '20px') + "\" xmlns=\"http://www.w3.org/2000/svg\" class=\"cds--overflow-menu__icon cds--overflow-menu__icon\" viewBox=\"0 0 32 32\" aria-hidden=\"true\">\n\t\t\t\t\t" + d.iconSVG.content + "\n\t\t\t\t</svg>\n\t\t\t</button>"; })
86
+ .html(function (d) { return "\n\t\t\t<button\n\t\t\t\tclass=\"cds--overflow-menu__trigger cds--overflow-menu__trigger\"\n\t\t\t\taria-haspopup=\"true\" aria-expanded=\"false\" id=\"" + _this.services.domUtils.generateElementIDString("control-" + d.id) + "\" aria-label=\"" + d.title + "\">\n\t\t\t\t<svg focusable=\"false\" preserveAspectRatio=\"xMidYMid meet\" xmlns=\"http://www.w3.org/2000/svg\" class=\"cds--overflow-menu__icon cds--overflow-menu__icon\" viewBox=\"0 0 32 32\" aria-hidden=\"true\">\n\t\t\t\t\t" + d.iconSVG.content + "\n\t\t\t\t</svg>\n\t\t\t</button>"; })
89
87
  .each(function (d, index) {
90
88
  var _this = this;
89
+ select(this)
90
+ .select('svg')
91
+ .style('will-change', 'transform')
92
+ .style('width', d.iconSVG.width !== undefined
93
+ ? d.iconSVG.width
94
+ : '20px')
95
+ .style('height', d.iconSVG.height !== undefined
96
+ ? d.iconSVG.height
97
+ : '20px');
91
98
  select(this)
92
99
  .select('button')
93
100
  .on('click', function (event) {
@@ -1 +1 @@
1
- {"version":3,"file":"toolbar.js","sourceRoot":"","sources":["toolbar.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from '../component';\nimport { Events, RenderTypes, ToolbarControlTypes } from '../../interfaces';\nimport { Tools } from '../../tools';\n\n// D3 Imports\nimport { select } from 'd3-selection';\n\nexport class Toolbar extends Component {\n\tstatic buttonID = 0;\n\ttype = 'toolbar';\n\trenderType = RenderTypes.HTML;\n\n\t// overflow menu button to control background color\n\toverflowButton: any;\n\n\t// div options list element\n\toverflowMenu: any;\n\n\tinit() {\n\t\tconst bodyOnClickHandler = () => this.updateOverflowMenu(false);\n\n\t\t// Grab the tooltip element\n\t\tthis.services.events.addEventListener(\n\t\t\tEvents.Toolbar.SHOW_OVERFLOW_MENU,\n\t\t\t() => {\n\t\t\t\tthis.renderOverflowMenu();\n\n\t\t\t\t// hide overflow menu if user clicks on somewhere in web page\n\t\t\t\tdocument.body.addEventListener('click', bodyOnClickHandler);\n\t\t\t}\n\t\t);\n\n\t\t// listen to hide overflow menu event to hide the overflow menu\n\t\tthis.services.events.addEventListener(\n\t\t\tEvents.Toolbar.HIDE_OVERFLOW_MENU,\n\t\t\t() => {\n\t\t\t\t// // hide overflow menu if user clicks on somewhere in web page\n\t\t\t\tdocument.body.removeEventListener('click', bodyOnClickHandler);\n\t\t\t}\n\t\t);\n\t}\n\n\trender(animate = true) {\n\t\tconst container = this.getComponentContainer()\n\t\t\t.attr('role', 'toolbar')\n\t\t\t.attr(\n\t\t\t\t'aria-label',\n\t\t\t\t`chart-${this.services.domUtils.getChartID()} toolbar`\n\t\t\t);\n\n\t\tconst isDataLoading = Tools.getProperty(\n\t\t\tthis.getOptions(),\n\t\t\t'data',\n\t\t\t'loading'\n\t\t);\n\n\t\tif (isDataLoading) {\n\t\t\tcontainer.html('');\n\t\t\t// Set overflow menu to null if data is loading\n\t\t\t// This will render in a new overflow menu when data is done loading\n\t\t\tthis.overflowMenu = null;\n\t\t} else {\n\t\t\tif (!this.overflowMenu) {\n\t\t\t\tthis.overflowMenu = container\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.attr(\n\t\t\t\t\t\t'class',\n\t\t\t\t\t\t'cds--overflow-menu-options cds--overflow-menu--flip cds--overflow-menu-options cds--overflow-menu--flip'\n\t\t\t\t\t)\n\t\t\t\t\t.attr('tabindex', -1)\n\t\t\t\t\t.attr('role', 'menu')\n\t\t\t\t\t.html(`<ul></ul>`);\n\t\t\t}\n\n\t\t\t// get the toolbar buttons\n\t\t\tconst {\n\t\t\t\tbuttonList,\n\t\t\t\toverflowMenuItemList,\n\t\t\t} = this.getControlConfigs();\n\n\t\t\t// overflow button is required only if overflow menu item list is valid\n\t\t\tif (!!overflowMenuItemList) {\n\t\t\t\tbuttonList.push(this.getOverflowButtonConfig());\n\t\t\t}\n\n\t\t\tconst toolbarControls = container\n\t\t\t\t.selectAll('div.toolbar-control')\n\t\t\t\t.data(buttonList, (button) => button.id);\n\n\t\t\ttoolbarControls.exit().remove();\n\n\t\t\tconst enteringToolbarControls = toolbarControls\n\t\t\t\t.enter()\n\t\t\t\t.append('div')\n\t\t\t\t.attr(\n\t\t\t\t\t'class',\n\t\t\t\t\t'toolbar-control cds--overflow-menu cds--overflow-menu'\n\t\t\t\t)\n\t\t\t\t.attr('role', 'button');\n\n\t\t\tconst self = this;\n\t\t\tconst allToolbarControls = enteringToolbarControls\n\t\t\t\t.merge(toolbarControls)\n\t\t\t\t.classed('disabled', (d) => d.shouldBeDisabled())\n\t\t\t\t.attr('aria-disabled', (d) => d.shouldBeDisabled())\n\t\t\t\t.attr('aria-label', (d) => d.title)\n\t\t\t\t.html(\n\t\t\t\t\t(d) => `\n\t\t\t<button\n\t\t\t\tclass=\"cds--overflow-menu__trigger cds--overflow-menu__trigger\"\n\t\t\t\taria-haspopup=\"true\" aria-expanded=\"false\" id=\"${this.services.domUtils.generateElementIDString(\n\t\t\t\t\t`control-${d.id}`\n\t\t\t\t)}\" aria-label=\"${d.title}\">\n\t\t\t\t<svg focusable=\"false\" preserveAspectRatio=\"xMidYMid meet\" style=\"will-change: transform; width: ${\n\t\t\t\t\td.iconSVG.width !== undefined ? d.iconSVG.width : '20px'\n\t\t\t\t}; height: ${\n\t\t\t\t\t\td.iconSVG.height !== undefined\n\t\t\t\t\t\t\t? d.iconSVG.height\n\t\t\t\t\t\t\t: '20px'\n\t\t\t\t\t}\" xmlns=\"http://www.w3.org/2000/svg\" class=\"cds--overflow-menu__icon cds--overflow-menu__icon\" viewBox=\"0 0 32 32\" aria-hidden=\"true\">\n\t\t\t\t\t${d.iconSVG.content}\n\t\t\t\t</svg>\n\t\t\t</button>`\n\t\t\t\t)\n\t\t\t\t.each(function (d, index) {\n\t\t\t\t\tselect(this)\n\t\t\t\t\t\t.select('button')\n\t\t\t\t\t\t.on('click', (event) => {\n\t\t\t\t\t\t\tif (!d.shouldBeDisabled()) {\n\t\t\t\t\t\t\t\tself.triggerFunctionAndEvent(d, event, this);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.on('keydown', (event: KeyboardEvent) => {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t(event.key && event.key === 'Enter') ||\n\t\t\t\t\t\t\t\tevent.key === ' '\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tself.triggerFunctionAndEvent(d, event, this);\n\t\t\t\t\t\t\t} else if (event.key && event.key === 'ArrowLeft') {\n\t\t\t\t\t\t\t\tself.focusOnPreviousEnabledToolbarItem(index);\n\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\tevent.key &&\n\t\t\t\t\t\t\t\tevent.key === 'ArrowRight'\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tself.focusOnNextEnabledToolbarItem(index);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\tthis.overflowButton = this.getComponentContainer().select(\n\t\t\t\t`button.cds--overflow-menu__trigger#${this.services.domUtils.generateElementIDString(\n\t\t\t\t\t'control-toolbar-overflow-menu'\n\t\t\t\t)}`\n\t\t\t);\n\t\t}\n\t}\n\n\trenderOverflowMenu() {\n\t\tconst { overflowMenuItemList } = this.getControlConfigs();\n\n\t\tconst overflowMenuControls = this.overflowMenu\n\t\t\t.select('ul')\n\t\t\t.selectAll('li.cds--overflow-menu-options__option')\n\t\t\t.data(overflowMenuItemList, (button) =>\n\t\t\t\tTools.getProperty(button, 'id')\n\t\t\t);\n\n\t\toverflowMenuControls.exit().remove();\n\n\t\tconst enteringOverflowMenuControls = overflowMenuControls\n\t\t\t.enter()\n\t\t\t.append('li')\n\t\t\t.attr('id', (d) =>\n\t\t\t\tthis.services.domUtils.generateElementIDString(\n\t\t\t\t\t`control-${d.id}`\n\t\t\t\t)\n\t\t\t)\n\t\t\t.attr(\n\t\t\t\t'class',\n\t\t\t\t'cds--overflow-menu-options__option cds--overflow-menu-options__option'\n\t\t\t)\n\t\t\t.attr('role', 'menuitem');\n\n\t\tenteringOverflowMenuControls\n\t\t\t.append('button')\n\t\t\t.attr(\n\t\t\t\t'class',\n\t\t\t\t'cds--overflow-menu-options__btn cds--overflow-menu-options__btn'\n\t\t\t);\n\n\t\tenteringOverflowMenuControls\n\t\t\t.merge(overflowMenuControls)\n\t\t\t.classed('cds--overflow-menu-options__option--disabled', (d) =>\n\t\t\t\td.shouldBeDisabled()\n\t\t\t)\n\t\t\t.classed('cds--overflow-menu-options__option--disabled', (d) =>\n\t\t\t\td.shouldBeDisabled()\n\t\t\t)\n\t\t\t.attr('aria-disabled', (d) => d.shouldBeDisabled())\n\t\t\t.selectAll('button')\n\t\t\t.text((d) => d.text);\n\t}\n\n\tisOverflowMenuOpen() {\n\t\treturn this.overflowMenu.classed('is-open');\n\t}\n\n\t// show/hide overflow menu\n\tupdateOverflowMenu(show: boolean) {\n\t\tif (!this.overflowMenu) {\n\t\t\treturn;\n\t\t}\n\t\tthis.overflowMenu.classed('is-open', show);\n\n\t\t// update overflow button background\n\t\tif (this.overflowButton) {\n\t\t\tthis.overflowButton.attr('aria-expanded', show);\n\t\t\tselect(this.overflowButton.node().parentNode)\n\t\t\t\t.classed('cds--overflow-menu--open', show)\n\t\t\t\t.classed('cds--overflow-menu--open', show);\n\t\t}\n\n\t\tif (show) {\n\t\t\tthis.services.events.dispatchEvent(\n\t\t\t\tEvents.Toolbar.SHOW_OVERFLOW_MENU\n\t\t\t);\n\t\t} else {\n\t\t\tthis.services.events.dispatchEvent(\n\t\t\t\tEvents.Toolbar.HIDE_OVERFLOW_MENU\n\t\t\t);\n\t\t}\n\t}\n\n\t// Toolbar controllers\n\tfocusOnPreviousEnabledToolbarItem(currentItemIndex) {\n\t\tconst buttonList = this.getToolbarButtonItems();\n\t\tlet previousItemIndex = buttonList.length;\n\n\t\tfor (let i = currentItemIndex - 1; i >= 0; i--) {\n\t\t\tconst previousButtonItem = buttonList[i];\n\t\t\tif (!previousButtonItem.shouldBeDisabled()) {\n\t\t\t\tpreviousItemIndex = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// only if previous enabled menu item found\n\t\tif (previousItemIndex < buttonList.length) {\n\t\t\tconst previousItemNode = select(\n\t\t\t\t`button#${this.services.domUtils.generateElementIDString(\n\t\t\t\t\t`control-${buttonList[previousItemIndex].id}`\n\t\t\t\t)}`\n\t\t\t).node();\n\t\t\tif ('focus' in previousItemNode) {\n\t\t\t\tpreviousItemNode.focus();\n\t\t\t}\n\t\t}\n\t}\n\n\tfocusOnNextEnabledToolbarItem(currentItemIndex) {\n\t\tconst buttonList = this.getToolbarButtonItems();\n\t\tlet nextItemIndex = -1;\n\n\t\tfor (let i = currentItemIndex + 1; i < buttonList.length; i++) {\n\t\t\tconst nextOverflowMenuItem = buttonList[i];\n\t\t\tif (!nextOverflowMenuItem.shouldBeDisabled()) {\n\t\t\t\tnextItemIndex = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// only if next enabled menu item found\n\t\tif (nextItemIndex > -1) {\n\t\t\tconst nextItemNode = select(\n\t\t\t\t`button#${this.services.domUtils.generateElementIDString(\n\t\t\t\t\t`control-${buttonList[nextItemIndex].id}`\n\t\t\t\t)}`\n\t\t\t).node();\n\n\t\t\tif ('focus' in nextItemNode) {\n\t\t\t\tnextItemNode.focus();\n\t\t\t}\n\t\t}\n\t}\n\n\tfocusOnPreviousEnabledMenuItem(currentItemIndex) {\n\t\tconst overflowMenuItems = this.getOverflowMenuItems();\n\t\tlet previousItemIndex = overflowMenuItems.length;\n\n\t\tfor (let i = currentItemIndex - 1; i >= 0; i--) {\n\t\t\tconst previousOverflowMenuItem = overflowMenuItems[i];\n\t\t\tif (!previousOverflowMenuItem.shouldBeDisabled()) {\n\t\t\t\tpreviousItemIndex = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// only if previous enabled menu item found\n\t\tif (previousItemIndex < overflowMenuItems.length) {\n\t\t\tconst previousItemNode = select(\n\t\t\t\t`#${this.services.domUtils.generateElementIDString(\n\t\t\t\t\t`control-${overflowMenuItems[previousItemIndex].id}`\n\t\t\t\t)} button`\n\t\t\t).node();\n\t\t\tif ('focus' in previousItemNode) {\n\t\t\t\tpreviousItemNode.focus();\n\t\t\t}\n\t\t}\n\t}\n\n\tfocusOnNextEnabledMenuItem(currentItemIndex) {\n\t\tconst overflowMenuItems = this.getOverflowMenuItems();\n\t\tlet nextItemIndex = -1;\n\n\t\tfor (let i = currentItemIndex + 1; i < overflowMenuItems.length; i++) {\n\t\t\tconst nextOverflowMenuItem = overflowMenuItems[i];\n\t\t\tif (!nextOverflowMenuItem.shouldBeDisabled()) {\n\t\t\t\tnextItemIndex = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// only if next enabled menu item found\n\t\tif (nextItemIndex > -1) {\n\t\t\tconst nextItemNode = select(\n\t\t\t\t`#${this.services.domUtils.generateElementIDString(\n\t\t\t\t\t`control-${overflowMenuItems[nextItemIndex].id}`\n\t\t\t\t)} button`\n\t\t\t).node();\n\n\t\t\tif ('focus' in nextItemNode) {\n\t\t\t\tnextItemNode.focus();\n\t\t\t}\n\t\t}\n\t}\n\n\ttoggleOverflowMenu(event) {\n\t\tif (this.isOverflowMenuOpen()) {\n\t\t\t// hide overflow menu\n\t\t\tthis.updateOverflowMenu(false);\n\t\t} else {\n\t\t\t// show overflow menu\n\t\t\tthis.updateOverflowMenu(true);\n\n\t\t\t// setup overflow menu item event listener\n\t\t\tconst self = this;\n\t\t\tconst overflowMenuItems = this.getOverflowMenuItems();\n\t\t\toverflowMenuItems.forEach((menuItem, index) => {\n\t\t\t\tconst element = select(\n\t\t\t\t\t`#${this.services.domUtils.generateElementIDString(\n\t\t\t\t\t\t`control-${menuItem.id}`\n\t\t\t\t\t)}`\n\t\t\t\t);\n\t\t\t\tif (element !== null) {\n\t\t\t\t\telement.on('click', () => {\n\t\t\t\t\t\tself.triggerFunctionAndEvent(\n\t\t\t\t\t\t\tmenuItem,\n\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\telement.node()\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// hide overflow menu\n\t\t\t\t\t\tself.updateOverflowMenu(false);\n\t\t\t\t\t});\n\n\t\t\t\t\telement.on('keydown', (keyEvent: KeyboardEvent) => {\n\t\t\t\t\t\tif (keyEvent && keyEvent.key === 'Enter') {\n\t\t\t\t\t\t\tself.triggerFunctionAndEvent(\n\t\t\t\t\t\t\t\tmenuItem,\n\t\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\t\telement.node()\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else if (keyEvent && keyEvent.key === 'ArrowUp') {\n\t\t\t\t\t\t\t// focus on previous menu item\n\t\t\t\t\t\t\tself.focusOnPreviousEnabledMenuItem(index);\n\t\t\t\t\t\t} else if (keyEvent && keyEvent.key === 'ArrowDown') {\n\t\t\t\t\t\t\t// focus on next menu item\n\t\t\t\t\t\t\tself.focusOnNextEnabledMenuItem(index);\n\t\t\t\t\t\t} else if (keyEvent && keyEvent.key === 'Escape') {\n\t\t\t\t\t\t\tself.updateOverflowMenu(false);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Not hide overflow menu by keyboard arrow up/down event\n\t\t\t\t\t\t// Prevent page from scrolling up/down\n\t\t\t\t\t\tkeyEvent.preventDefault();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// default to focus on the first enabled menu item\n\t\t\tself.focusOnNextEnabledMenuItem(-1);\n\t\t}\n\n\t\t// propogation should not be stopped for keyboard events\n\t\tif (!!event) {\n\t\t\tevent.stopImmediatePropagation();\n\t\t}\n\t}\n\n\t// Calls passed function && dispatches event\n\ttriggerFunctionAndEvent(control, event, element?) {\n\t\t// Check if trigger is disabled\n\t\tif (\n\t\t\ttypeof control.shouldBeDisabled === 'function' &&\n\t\t\tcontrol.shouldBeDisabled()\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Call custom function only if it exists\n\t\tif (typeof control.clickFunction === 'function') {\n\t\t\tcontrol.clickFunction(event);\n\t\t}\n\n\t\t// Dispatch selection event\n\t\tthis.services.events.dispatchEvent(Events.Toolbar.BUTTON_CLICK, {\n\t\t\tcontrol,\n\t\t\tevent,\n\t\t\telement,\n\t\t});\n\t}\n\n\tgetControlConfigs() {\n\t\tconst numberOfIcons =\n\t\t\tTools.getProperty(this.getOptions(), 'toolbar', 'numberOfIcons') -\n\t\t\t1;\n\t\tconst controls = Tools.getProperty(\n\t\t\tthis.getOptions(),\n\t\t\t'toolbar',\n\t\t\t'controls'\n\t\t);\n\n\t\tconst overflowSpecificControls = [];\n\t\tconst buttonList = [];\n\t\tconst overflowList = [];\n\n\t\tcontrols.forEach((control) => {\n\t\t\tlet controlConfig = null;\n\t\t\t// check if button is custom or default control\n\t\t\tif (control.type === ToolbarControlTypes.CUSTOM) {\n\t\t\t\t// add generic id if missing\n\t\t\t\tif (Tools.getProperty(control, 'id') === null) {\n\t\t\t\t\t// add id directly to the data passed so that id isn't reassigned on rerender\n\t\t\t\t\tcontrol.id = `toolbar-button-${Toolbar.buttonID++}`;\n\t\t\t\t}\n\t\t\t\t// define function if missing\n\t\t\t\tif (Tools.getProperty(control, 'shouldBeDisabled') === null) {\n\t\t\t\t\tcontrol.shouldBeDisabled = () => false;\n\t\t\t\t}\n\n\t\t\t\tcontrolConfig = control;\n\t\t\t} else {\n\t\t\t\tcontrolConfig = this.getControlConfigByType(control.type);\n\t\t\t}\n\n\t\t\t// add to list if config is valid\n\t\t\tif (controlConfig) {\n\t\t\t\tcontrolConfig.text = control.text ? control.text : control.type;\n\n\t\t\t\tif (controlConfig.id.indexOf('toolbar-export') !== -1) {\n\t\t\t\t\toverflowSpecificControls.push(controlConfig);\n\t\t\t\t} else if (buttonList.length < numberOfIcons) {\n\t\t\t\t\t// check if icon exists else assign to the overflow list\n\t\t\t\t\tif (\n\t\t\t\t\t\tTools.getProperty(\n\t\t\t\t\t\t\tcontrolConfig,\n\t\t\t\t\t\t\t'iconSVG',\n\t\t\t\t\t\t\t'content'\n\t\t\t\t\t\t) === null\n\t\t\t\t\t) {\n\t\t\t\t\t\toverflowList.push(controlConfig);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbuttonList.push(controlConfig);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\toverflowList.push(controlConfig);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// Ensures the `export` controls are always at the bottom\n\t\toverflowList.push(...overflowSpecificControls);\n\n\t\tif (!overflowList.length) {\n\t\t\treturn {\n\t\t\t\tbuttonList,\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\tbuttonList,\n\t\t\toverflowMenuItemList: overflowList,\n\t\t};\n\t}\n\n\tgetToolbarButtonItems() {\n\t\tconst { buttonList, overflowMenuItemList } = this.getControlConfigs();\n\t\tif (!!overflowMenuItemList) {\n\t\t\tbuttonList.push(this.getOverflowButtonConfig());\n\t\t}\n\t\tif (!!buttonList) {\n\t\t\treturn buttonList;\n\t\t}\n\n\t\treturn [];\n\t}\n\n\tgetOverflowMenuItems() {\n\t\tconst { overflowMenuItemList } = this.getControlConfigs();\n\t\tif (!!overflowMenuItemList) {\n\t\t\treturn overflowMenuItemList;\n\t\t} else {\n\t\t\treturn [];\n\t\t}\n\t}\n\n\t// special button config for overflow button\n\tgetOverflowButtonConfig() {\n\t\treturn {\n\t\t\tid: 'toolbar-overflow-menu',\n\t\t\ttitle: 'More options',\n\t\t\tshouldBeDisabled: () => false,\n\t\t\ticonSVG: {\n\t\t\t\tcontent: `<circle cx=\"16\" cy=\"8\" r=\"2\"></circle>\n\t\t\t\t<circle cx=\"16\" cy=\"16\" r=\"2\"></circle>\n\t\t\t\t<circle cx=\"16\" cy=\"24\" r=\"2\"></circle>`,\n\t\t\t},\n\t\t\tclickFunction: (event) => this.toggleOverflowMenu(event),\n\t\t};\n\t}\n\n\tgetControlConfigByType(controlType: ToolbarControlTypes) {\n\t\tconst isZoomBarEnabled =\n\t\t\tthis.services.zoom &&\n\t\t\tthis.services.zoom.isZoomBarEnabled() &&\n\t\t\t!this.services.zoom.isEmptyState();\n\n\t\tconst displayData = this.model.getDisplayData();\n\n\t\tlet controlConfig;\n\t\tswitch (controlType) {\n\t\t\tcase ToolbarControlTypes.ZOOM_IN:\n\t\t\t\tif (isZoomBarEnabled) {\n\t\t\t\t\tcontrolConfig = {\n\t\t\t\t\t\tid: 'toolbar-zoomIn',\n\t\t\t\t\t\ttitle: 'Zoom in',\n\t\t\t\t\t\tshouldBeDisabled: () =>\n\t\t\t\t\t\t\tthis.services.zoom.isMinZoomDomain(),\n\t\t\t\t\t\ticonSVG: {\n\t\t\t\t\t\t\tcontent: this.getControlIconByType(controlType),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tclickFunction: () => this.services.zoom.zoomIn(),\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase ToolbarControlTypes.ZOOM_OUT:\n\t\t\t\tif (isZoomBarEnabled) {\n\t\t\t\t\tcontrolConfig = {\n\t\t\t\t\t\tid: 'toolbar-zoomOut',\n\t\t\t\t\t\ttitle: 'Zoom out',\n\t\t\t\t\t\tshouldBeDisabled: () =>\n\t\t\t\t\t\t\tthis.services.zoom.isMaxZoomDomain(),\n\t\t\t\t\t\ticonSVG: {\n\t\t\t\t\t\t\tcontent: this.getControlIconByType(controlType),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tclickFunction: () => this.services.zoom.zoomOut(),\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase ToolbarControlTypes.RESET_ZOOM:\n\t\t\t\tif (isZoomBarEnabled) {\n\t\t\t\t\tcontrolConfig = {\n\t\t\t\t\t\tid: 'toolbar-resetZoom',\n\t\t\t\t\t\ttitle: 'Reset zoom',\n\t\t\t\t\t\tshouldBeDisabled: () =>\n\t\t\t\t\t\t\tthis.services.zoom.isMaxZoomDomain(),\n\t\t\t\t\t\ticonSVG: {\n\t\t\t\t\t\t\tcontent: this.getControlIconByType(controlType),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tclickFunction: () =>\n\t\t\t\t\t\t\tthis.services.zoom.resetZoomDomain(),\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase ToolbarControlTypes.MAKE_FULLSCREEN:\n\t\t\t\tcontrolConfig = {\n\t\t\t\t\tid: 'toolbar-makefullscreen',\n\t\t\t\t\ticonSVG: {\n\t\t\t\t\t\tcontent: this.getControlIconByType(controlType),\n\t\t\t\t\t\twidth: '15px',\n\t\t\t\t\t\theight: '15px',\n\t\t\t\t\t},\n\t\t\t\t\ttitle: 'Make fullscreen',\n\t\t\t\t\tshouldBeDisabled: () => false,\n\t\t\t\t\tclickFunction: () => {\n\t\t\t\t\t\tthis.services.domUtils.toggleFullscreen();\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase ToolbarControlTypes.SHOW_AS_DATATABLE:\n\t\t\t\tcontrolConfig = {\n\t\t\t\t\tid: 'toolbar-showasdatatable',\n\t\t\t\t\ticonSVG: {\n\t\t\t\t\t\tcontent: this.getControlIconByType(controlType),\n\t\t\t\t\t},\n\t\t\t\t\ttitle: 'Show as table',\n\t\t\t\t\tshouldBeDisabled: () => displayData.length === 0,\n\t\t\t\t\tclickFunction: () =>\n\t\t\t\t\t\tthis.services.events.dispatchEvent(Events.Modal.SHOW),\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase ToolbarControlTypes.EXPORT_CSV:\n\t\t\t\tcontrolConfig = {\n\t\t\t\t\tid: 'toolbar-export-CSV',\n\t\t\t\t\ttitle: 'Export as CSV',\n\t\t\t\t\tshouldBeDisabled: () => false,\n\t\t\t\t\ticonSVG: {\n\t\t\t\t\t\tcontent: this.getControlIconByType(controlType),\n\t\t\t\t\t},\n\t\t\t\t\tclickFunction: () => this.model.exportToCSV(),\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase ToolbarControlTypes.EXPORT_PNG:\n\t\t\t\tcontrolConfig = {\n\t\t\t\t\tid: 'toolbar-export-PNG',\n\t\t\t\t\ttitle: 'Export as PNG',\n\t\t\t\t\tshouldBeDisabled: () => false,\n\t\t\t\t\ticonSVG: {\n\t\t\t\t\t\tcontent: this.getControlIconByType(controlType),\n\t\t\t\t\t},\n\t\t\t\t\tclickFunction: () => this.services.domUtils.exportToPNG(),\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase ToolbarControlTypes.EXPORT_JPG:\n\t\t\t\tcontrolConfig = {\n\t\t\t\t\tid: 'toolbar-export-JPG',\n\t\t\t\t\ttitle: 'Export as JPG',\n\t\t\t\t\tshouldBeDisabled: () => false,\n\t\t\t\t\ticonSVG: {\n\t\t\t\t\t\tcontent: this.getControlIconByType(controlType),\n\t\t\t\t\t},\n\t\t\t\t\tclickFunction: () => this.services.domUtils.exportToJPG(),\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\t// add more toolbar control configuration here\n\n\t\t\tdefault:\n\t\t\t\tthrow Error(\n\t\t\t\t\t'Not supported toolbar control type: ' + controlType\n\t\t\t\t);\n\t\t}\n\t\treturn controlConfig;\n\t}\n\n\tgetControlIconByType(controlType: ToolbarControlTypes) {\n\t\tswitch (controlType) {\n\t\t\tcase ToolbarControlTypes.ZOOM_IN:\n\t\t\t\treturn `<polygon points=\"19 13 15 13 15 9 13 9 13 13 9 13 9 15 13 15 13 19 15 19 15 15 19 15 19 13\"/>\n\t\t\t\t\t\t<path d=\"M22.45,21A10.87,10.87,0,0,0,25,14,11,11,0,1,0,14,25a10.87,10.87,0,0,0,7-2.55L28.59,30,30,28.59ZM14,23a9,9,0,1,1,9-9A9,9,0,0,1,14,23Z\"/>`;\n\t\t\tcase ToolbarControlTypes.ZOOM_OUT:\n\t\t\t\treturn `<rect x=\"9\" y=\"13\" width=\"10\" height=\"2\"/>\n\t\t\t\t\t\t<path d=\"M22.45,21A10.87,10.87,0,0,0,25,14,11,11,0,1,0,14,25a10.87,10.87,0,0,0,7-2.55L28.59,30,30,28.59ZM14,23a9,9,0,1,1,9-9A9,9,0,0,1,14,23Z\"/>`;\n\t\t\tcase ToolbarControlTypes.RESET_ZOOM:\n\t\t\t\treturn `<path d=\"M22.4478,21A10.855,10.855,0,0,0,25,14,10.99,10.99,0,0,0,6,6.4658V2H4v8h8V8H7.332a8.9768,8.9768,0,1,1-2.1,8H3.1912A11.0118,11.0118,0,0,0,14,25a10.855,10.855,0,0,0,7-2.5522L28.5859,30,30,28.5859Z\"/>`;\n\t\t\tcase ToolbarControlTypes.MAKE_FULLSCREEN:\n\t\t\t\treturn `<polygon points=\"21 2 21 4 26.59 4 17 13.58 18.41 15 28 5.41 28 11 30 11 30 2 21 2\"/><polygon points=\"15 18.42 13.59 17 4 26.59 4 21 2 21 2 30 11 30 11 28 5.41 28 15 18.42\"/>`;\n\t\t\tcase ToolbarControlTypes.SHOW_AS_DATATABLE:\n\t\t\t\treturn `<rect x=\"4\" y=\"6\" width=\"18\" height=\"2\"/><rect x=\"4\" y=\"12\" width=\"18\" height=\"2\"/><rect x=\"4\" y=\"18\" width=\"18\" height=\"2\"/><rect x=\"4\" y=\"24\" width=\"18\" height=\"2\"/><rect x=\"26\" y=\"6\" width=\"2\" height=\"2\"/><rect x=\"26\" y=\"12\" width=\"2\" height=\"2\"/><rect x=\"26\" y=\"18\" width=\"2\" height=\"2\"/><rect x=\"26\" y=\"24\" width=\"2\" height=\"2\"/>`;\n\t\t\tcase ToolbarControlTypes.EXPORT_CSV:\n\t\t\t\treturn `<path d=\"M22.4478,21A10.855,10.855,0,0,0,25,14,10.99,10.99,0,0,0,6,6.4658V2H4v8h8V8H7.332a8.9768,8.9768,0,1,1-2.1,8H3.1912A11.0118,11.0118,0,0,0,14,25a10.855,10.855,0,0,0,7-2.5522L28.5859,30,30,28.5859Z\"/>`;\n\t\t\tcase ToolbarControlTypes.EXPORT_JPG:\n\t\t\t\treturn `<path d=\"M22.4478,21A10.855,10.855,0,0,0,25,14,10.99,10.99,0,0,0,6,6.4658V2H4v8h8V8H7.332a8.9768,8.9768,0,1,1-2.1,8H3.1912A11.0118,11.0118,0,0,0,14,25a10.855,10.855,0,0,0,7-2.5522L28.5859,30,30,28.5859Z\"/>`;\n\t\t\tcase ToolbarControlTypes.EXPORT_PNG:\n\t\t\t\treturn `<path d=\"M22.4478,21A10.855,10.855,0,0,0,25,14,10.99,10.99,0,0,0,6,6.4658V2H4v8h8V8H7.332a8.9768,8.9768,0,1,1-2.1,8H3.1912A11.0118,11.0118,0,0,0,14,25a10.855,10.855,0,0,0,7-2.5522L28.5859,30,30,28.5859Z\"/>`; // add more icons here\n\t\t\t// svg icon must be with 32x32 viewBox\n\n\t\t\tdefault:\n\t\t\t\tthrow Error(\n\t\t\t\t\t'Not supported toolbar control type: ' + controlType\n\t\t\t\t);\n\t\t}\n\t}\n}\n"]}
1
+ {"version":3,"file":"toolbar.js","sourceRoot":"","sources":["toolbar.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from '../component';\nimport { Events, RenderTypes, ToolbarControlTypes } from '../../interfaces';\nimport { Tools } from '../../tools';\n\n// D3 Imports\nimport { select } from 'd3-selection';\n\nexport class Toolbar extends Component {\n\tstatic buttonID = 0;\n\ttype = 'toolbar';\n\trenderType = RenderTypes.HTML;\n\n\t// overflow menu button to control background color\n\toverflowButton: any;\n\n\t// div options list element\n\toverflowMenu: any;\n\n\tinit() {\n\t\tconst bodyOnClickHandler = () => this.updateOverflowMenu(false);\n\n\t\t// Grab the tooltip element\n\t\tthis.services.events.addEventListener(\n\t\t\tEvents.Toolbar.SHOW_OVERFLOW_MENU,\n\t\t\t() => {\n\t\t\t\tthis.renderOverflowMenu();\n\n\t\t\t\t// hide overflow menu if user clicks on somewhere in web page\n\t\t\t\tdocument.body.addEventListener('click', bodyOnClickHandler);\n\t\t\t}\n\t\t);\n\n\t\t// listen to hide overflow menu event to hide the overflow menu\n\t\tthis.services.events.addEventListener(\n\t\t\tEvents.Toolbar.HIDE_OVERFLOW_MENU,\n\t\t\t() => {\n\t\t\t\t// // hide overflow menu if user clicks on somewhere in web page\n\t\t\t\tdocument.body.removeEventListener('click', bodyOnClickHandler);\n\t\t\t}\n\t\t);\n\t}\n\n\trender(animate = true) {\n\t\tconst container = this.getComponentContainer()\n\t\t\t.attr('role', 'toolbar')\n\t\t\t.attr(\n\t\t\t\t'aria-label',\n\t\t\t\t`chart-${this.services.domUtils.getChartID()} toolbar`\n\t\t\t);\n\n\t\tconst isDataLoading = Tools.getProperty(\n\t\t\tthis.getOptions(),\n\t\t\t'data',\n\t\t\t'loading'\n\t\t);\n\n\t\tif (isDataLoading) {\n\t\t\tcontainer.html('');\n\t\t\t// Set overflow menu to null if data is loading\n\t\t\t// This will render in a new overflow menu when data is done loading\n\t\t\tthis.overflowMenu = null;\n\t\t} else {\n\t\t\tif (!this.overflowMenu) {\n\t\t\t\tthis.overflowMenu = container\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.attr(\n\t\t\t\t\t\t'class',\n\t\t\t\t\t\t'cds--overflow-menu-options cds--overflow-menu--flip cds--overflow-menu-options cds--overflow-menu--flip'\n\t\t\t\t\t)\n\t\t\t\t\t.attr('tabindex', -1)\n\t\t\t\t\t.attr('role', 'menu')\n\t\t\t\t\t.html(`<ul></ul>`);\n\t\t\t}\n\n\t\t\t// get the toolbar buttons\n\t\t\tconst {\n\t\t\t\tbuttonList,\n\t\t\t\toverflowMenuItemList,\n\t\t\t} = this.getControlConfigs();\n\n\t\t\t// overflow button is required only if overflow menu item list is valid\n\t\t\tif (!!overflowMenuItemList) {\n\t\t\t\tbuttonList.push(this.getOverflowButtonConfig());\n\t\t\t}\n\n\t\t\tconst toolbarControls = container\n\t\t\t\t.selectAll('div.toolbar-control')\n\t\t\t\t.data(buttonList, (button) => button.id);\n\n\t\t\ttoolbarControls.exit().remove();\n\n\t\t\tconst enteringToolbarControls = toolbarControls\n\t\t\t\t.enter()\n\t\t\t\t.append('div')\n\t\t\t\t.attr(\n\t\t\t\t\t'class',\n\t\t\t\t\t'toolbar-control cds--overflow-menu cds--overflow-menu'\n\t\t\t\t)\n\t\t\t\t.attr('role', 'button');\n\n\t\t\tconst self = this;\n\t\t\tconst allToolbarControls = enteringToolbarControls\n\t\t\t\t.merge(toolbarControls)\n\t\t\t\t.classed('disabled', (d) => d.shouldBeDisabled())\n\t\t\t\t.attr('aria-disabled', (d) => d.shouldBeDisabled())\n\t\t\t\t.attr('aria-label', (d) => d.title)\n\t\t\t\t.html(\n\t\t\t\t\t(d) => `\n\t\t\t<button\n\t\t\t\tclass=\"cds--overflow-menu__trigger cds--overflow-menu__trigger\"\n\t\t\t\taria-haspopup=\"true\" aria-expanded=\"false\" id=\"${this.services.domUtils.generateElementIDString(\n\t\t\t\t\t`control-${d.id}`\n\t\t\t\t)}\" aria-label=\"${d.title}\">\n\t\t\t\t<svg focusable=\"false\" preserveAspectRatio=\"xMidYMid meet\" xmlns=\"http://www.w3.org/2000/svg\" class=\"cds--overflow-menu__icon cds--overflow-menu__icon\" viewBox=\"0 0 32 32\" aria-hidden=\"true\">\n\t\t\t\t\t${d.iconSVG.content}\n\t\t\t\t</svg>\n\t\t\t</button>`\n\t\t\t\t)\n\t\t\t\t.each(function (d, index) {\n\t\t\t\t\tselect(this)\n\t\t\t\t\t\t.select('svg')\n\t\t\t\t\t\t.style('will-change', 'transform')\n\t\t\t\t\t\t.style(\n\t\t\t\t\t\t\t'width',\n\t\t\t\t\t\t\td.iconSVG.width !== undefined\n\t\t\t\t\t\t\t\t? d.iconSVG.width\n\t\t\t\t\t\t\t\t: '20px'\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.style(\n\t\t\t\t\t\t\t'height',\n\t\t\t\t\t\t\td.iconSVG.height !== undefined\n\t\t\t\t\t\t\t\t? d.iconSVG.height\n\t\t\t\t\t\t\t\t: '20px'\n\t\t\t\t\t\t);\n\n\t\t\t\t\tselect(this)\n\t\t\t\t\t\t.select('button')\n\t\t\t\t\t\t.on('click', (event) => {\n\t\t\t\t\t\t\tif (!d.shouldBeDisabled()) {\n\t\t\t\t\t\t\t\tself.triggerFunctionAndEvent(d, event, this);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.on('keydown', (event: KeyboardEvent) => {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t(event.key && event.key === 'Enter') ||\n\t\t\t\t\t\t\t\tevent.key === ' '\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tself.triggerFunctionAndEvent(d, event, this);\n\t\t\t\t\t\t\t} else if (event.key && event.key === 'ArrowLeft') {\n\t\t\t\t\t\t\t\tself.focusOnPreviousEnabledToolbarItem(index);\n\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\tevent.key &&\n\t\t\t\t\t\t\t\tevent.key === 'ArrowRight'\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tself.focusOnNextEnabledToolbarItem(index);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\tthis.overflowButton = this.getComponentContainer().select(\n\t\t\t\t`button.cds--overflow-menu__trigger#${this.services.domUtils.generateElementIDString(\n\t\t\t\t\t'control-toolbar-overflow-menu'\n\t\t\t\t)}`\n\t\t\t);\n\t\t}\n\t}\n\n\trenderOverflowMenu() {\n\t\tconst { overflowMenuItemList } = this.getControlConfigs();\n\n\t\tconst overflowMenuControls = this.overflowMenu\n\t\t\t.select('ul')\n\t\t\t.selectAll('li.cds--overflow-menu-options__option')\n\t\t\t.data(overflowMenuItemList, (button) =>\n\t\t\t\tTools.getProperty(button, 'id')\n\t\t\t);\n\n\t\toverflowMenuControls.exit().remove();\n\n\t\tconst enteringOverflowMenuControls = overflowMenuControls\n\t\t\t.enter()\n\t\t\t.append('li')\n\t\t\t.attr('id', (d) =>\n\t\t\t\tthis.services.domUtils.generateElementIDString(\n\t\t\t\t\t`control-${d.id}`\n\t\t\t\t)\n\t\t\t)\n\t\t\t.attr(\n\t\t\t\t'class',\n\t\t\t\t'cds--overflow-menu-options__option cds--overflow-menu-options__option'\n\t\t\t)\n\t\t\t.attr('role', 'menuitem');\n\n\t\tenteringOverflowMenuControls\n\t\t\t.append('button')\n\t\t\t.attr(\n\t\t\t\t'class',\n\t\t\t\t'cds--overflow-menu-options__btn cds--overflow-menu-options__btn'\n\t\t\t);\n\n\t\tenteringOverflowMenuControls\n\t\t\t.merge(overflowMenuControls)\n\t\t\t.classed('cds--overflow-menu-options__option--disabled', (d) =>\n\t\t\t\td.shouldBeDisabled()\n\t\t\t)\n\t\t\t.classed('cds--overflow-menu-options__option--disabled', (d) =>\n\t\t\t\td.shouldBeDisabled()\n\t\t\t)\n\t\t\t.attr('aria-disabled', (d) => d.shouldBeDisabled())\n\t\t\t.selectAll('button')\n\t\t\t.text((d) => d.text);\n\t}\n\n\tisOverflowMenuOpen() {\n\t\treturn this.overflowMenu.classed('is-open');\n\t}\n\n\t// show/hide overflow menu\n\tupdateOverflowMenu(show: boolean) {\n\t\tif (!this.overflowMenu) {\n\t\t\treturn;\n\t\t}\n\t\tthis.overflowMenu.classed('is-open', show);\n\n\t\t// update overflow button background\n\t\tif (this.overflowButton) {\n\t\t\tthis.overflowButton.attr('aria-expanded', show);\n\t\t\tselect(this.overflowButton.node().parentNode)\n\t\t\t\t.classed('cds--overflow-menu--open', show)\n\t\t\t\t.classed('cds--overflow-menu--open', show);\n\t\t}\n\n\t\tif (show) {\n\t\t\tthis.services.events.dispatchEvent(\n\t\t\t\tEvents.Toolbar.SHOW_OVERFLOW_MENU\n\t\t\t);\n\t\t} else {\n\t\t\tthis.services.events.dispatchEvent(\n\t\t\t\tEvents.Toolbar.HIDE_OVERFLOW_MENU\n\t\t\t);\n\t\t}\n\t}\n\n\t// Toolbar controllers\n\tfocusOnPreviousEnabledToolbarItem(currentItemIndex) {\n\t\tconst buttonList = this.getToolbarButtonItems();\n\t\tlet previousItemIndex = buttonList.length;\n\n\t\tfor (let i = currentItemIndex - 1; i >= 0; i--) {\n\t\t\tconst previousButtonItem = buttonList[i];\n\t\t\tif (!previousButtonItem.shouldBeDisabled()) {\n\t\t\t\tpreviousItemIndex = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// only if previous enabled menu item found\n\t\tif (previousItemIndex < buttonList.length) {\n\t\t\tconst previousItemNode = select(\n\t\t\t\t`button#${this.services.domUtils.generateElementIDString(\n\t\t\t\t\t`control-${buttonList[previousItemIndex].id}`\n\t\t\t\t)}`\n\t\t\t).node();\n\t\t\tif ('focus' in previousItemNode) {\n\t\t\t\tpreviousItemNode.focus();\n\t\t\t}\n\t\t}\n\t}\n\n\tfocusOnNextEnabledToolbarItem(currentItemIndex) {\n\t\tconst buttonList = this.getToolbarButtonItems();\n\t\tlet nextItemIndex = -1;\n\n\t\tfor (let i = currentItemIndex + 1; i < buttonList.length; i++) {\n\t\t\tconst nextOverflowMenuItem = buttonList[i];\n\t\t\tif (!nextOverflowMenuItem.shouldBeDisabled()) {\n\t\t\t\tnextItemIndex = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// only if next enabled menu item found\n\t\tif (nextItemIndex > -1) {\n\t\t\tconst nextItemNode = select(\n\t\t\t\t`button#${this.services.domUtils.generateElementIDString(\n\t\t\t\t\t`control-${buttonList[nextItemIndex].id}`\n\t\t\t\t)}`\n\t\t\t).node();\n\n\t\t\tif ('focus' in nextItemNode) {\n\t\t\t\tnextItemNode.focus();\n\t\t\t}\n\t\t}\n\t}\n\n\tfocusOnPreviousEnabledMenuItem(currentItemIndex) {\n\t\tconst overflowMenuItems = this.getOverflowMenuItems();\n\t\tlet previousItemIndex = overflowMenuItems.length;\n\n\t\tfor (let i = currentItemIndex - 1; i >= 0; i--) {\n\t\t\tconst previousOverflowMenuItem = overflowMenuItems[i];\n\t\t\tif (!previousOverflowMenuItem.shouldBeDisabled()) {\n\t\t\t\tpreviousItemIndex = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// only if previous enabled menu item found\n\t\tif (previousItemIndex < overflowMenuItems.length) {\n\t\t\tconst previousItemNode = select(\n\t\t\t\t`#${this.services.domUtils.generateElementIDString(\n\t\t\t\t\t`control-${overflowMenuItems[previousItemIndex].id}`\n\t\t\t\t)} button`\n\t\t\t).node();\n\t\t\tif ('focus' in previousItemNode) {\n\t\t\t\tpreviousItemNode.focus();\n\t\t\t}\n\t\t}\n\t}\n\n\tfocusOnNextEnabledMenuItem(currentItemIndex) {\n\t\tconst overflowMenuItems = this.getOverflowMenuItems();\n\t\tlet nextItemIndex = -1;\n\n\t\tfor (let i = currentItemIndex + 1; i < overflowMenuItems.length; i++) {\n\t\t\tconst nextOverflowMenuItem = overflowMenuItems[i];\n\t\t\tif (!nextOverflowMenuItem.shouldBeDisabled()) {\n\t\t\t\tnextItemIndex = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// only if next enabled menu item found\n\t\tif (nextItemIndex > -1) {\n\t\t\tconst nextItemNode = select(\n\t\t\t\t`#${this.services.domUtils.generateElementIDString(\n\t\t\t\t\t`control-${overflowMenuItems[nextItemIndex].id}`\n\t\t\t\t)} button`\n\t\t\t).node();\n\n\t\t\tif ('focus' in nextItemNode) {\n\t\t\t\tnextItemNode.focus();\n\t\t\t}\n\t\t}\n\t}\n\n\ttoggleOverflowMenu(event) {\n\t\tif (this.isOverflowMenuOpen()) {\n\t\t\t// hide overflow menu\n\t\t\tthis.updateOverflowMenu(false);\n\t\t} else {\n\t\t\t// show overflow menu\n\t\t\tthis.updateOverflowMenu(true);\n\n\t\t\t// setup overflow menu item event listener\n\t\t\tconst self = this;\n\t\t\tconst overflowMenuItems = this.getOverflowMenuItems();\n\t\t\toverflowMenuItems.forEach((menuItem, index) => {\n\t\t\t\tconst element = select(\n\t\t\t\t\t`#${this.services.domUtils.generateElementIDString(\n\t\t\t\t\t\t`control-${menuItem.id}`\n\t\t\t\t\t)}`\n\t\t\t\t);\n\t\t\t\tif (element !== null) {\n\t\t\t\t\telement.on('click', () => {\n\t\t\t\t\t\tself.triggerFunctionAndEvent(\n\t\t\t\t\t\t\tmenuItem,\n\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\telement.node()\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// hide overflow menu\n\t\t\t\t\t\tself.updateOverflowMenu(false);\n\t\t\t\t\t});\n\n\t\t\t\t\telement.on('keydown', (keyEvent: KeyboardEvent) => {\n\t\t\t\t\t\tif (keyEvent && keyEvent.key === 'Enter') {\n\t\t\t\t\t\t\tself.triggerFunctionAndEvent(\n\t\t\t\t\t\t\t\tmenuItem,\n\t\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\t\telement.node()\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else if (keyEvent && keyEvent.key === 'ArrowUp') {\n\t\t\t\t\t\t\t// focus on previous menu item\n\t\t\t\t\t\t\tself.focusOnPreviousEnabledMenuItem(index);\n\t\t\t\t\t\t} else if (keyEvent && keyEvent.key === 'ArrowDown') {\n\t\t\t\t\t\t\t// focus on next menu item\n\t\t\t\t\t\t\tself.focusOnNextEnabledMenuItem(index);\n\t\t\t\t\t\t} else if (keyEvent && keyEvent.key === 'Escape') {\n\t\t\t\t\t\t\tself.updateOverflowMenu(false);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Not hide overflow menu by keyboard arrow up/down event\n\t\t\t\t\t\t// Prevent page from scrolling up/down\n\t\t\t\t\t\tkeyEvent.preventDefault();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// default to focus on the first enabled menu item\n\t\t\tself.focusOnNextEnabledMenuItem(-1);\n\t\t}\n\n\t\t// propogation should not be stopped for keyboard events\n\t\tif (!!event) {\n\t\t\tevent.stopImmediatePropagation();\n\t\t}\n\t}\n\n\t// Calls passed function && dispatches event\n\ttriggerFunctionAndEvent(control, event, element?) {\n\t\t// Check if trigger is disabled\n\t\tif (\n\t\t\ttypeof control.shouldBeDisabled === 'function' &&\n\t\t\tcontrol.shouldBeDisabled()\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Call custom function only if it exists\n\t\tif (typeof control.clickFunction === 'function') {\n\t\t\tcontrol.clickFunction(event);\n\t\t}\n\n\t\t// Dispatch selection event\n\t\tthis.services.events.dispatchEvent(Events.Toolbar.BUTTON_CLICK, {\n\t\t\tcontrol,\n\t\t\tevent,\n\t\t\telement,\n\t\t});\n\t}\n\n\tgetControlConfigs() {\n\t\tconst numberOfIcons =\n\t\t\tTools.getProperty(this.getOptions(), 'toolbar', 'numberOfIcons') -\n\t\t\t1;\n\t\tconst controls = Tools.getProperty(\n\t\t\tthis.getOptions(),\n\t\t\t'toolbar',\n\t\t\t'controls'\n\t\t);\n\n\t\tconst overflowSpecificControls = [];\n\t\tconst buttonList = [];\n\t\tconst overflowList = [];\n\n\t\tcontrols.forEach((control) => {\n\t\t\tlet controlConfig = null;\n\t\t\t// check if button is custom or default control\n\t\t\tif (control.type === ToolbarControlTypes.CUSTOM) {\n\t\t\t\t// add generic id if missing\n\t\t\t\tif (Tools.getProperty(control, 'id') === null) {\n\t\t\t\t\t// add id directly to the data passed so that id isn't reassigned on rerender\n\t\t\t\t\tcontrol.id = `toolbar-button-${Toolbar.buttonID++}`;\n\t\t\t\t}\n\t\t\t\t// define function if missing\n\t\t\t\tif (Tools.getProperty(control, 'shouldBeDisabled') === null) {\n\t\t\t\t\tcontrol.shouldBeDisabled = () => false;\n\t\t\t\t}\n\n\t\t\t\tcontrolConfig = control;\n\t\t\t} else {\n\t\t\t\tcontrolConfig = this.getControlConfigByType(control.type);\n\t\t\t}\n\n\t\t\t// add to list if config is valid\n\t\t\tif (controlConfig) {\n\t\t\t\tcontrolConfig.text = control.text ? control.text : control.type;\n\n\t\t\t\tif (controlConfig.id.indexOf('toolbar-export') !== -1) {\n\t\t\t\t\toverflowSpecificControls.push(controlConfig);\n\t\t\t\t} else if (buttonList.length < numberOfIcons) {\n\t\t\t\t\t// check if icon exists else assign to the overflow list\n\t\t\t\t\tif (\n\t\t\t\t\t\tTools.getProperty(\n\t\t\t\t\t\t\tcontrolConfig,\n\t\t\t\t\t\t\t'iconSVG',\n\t\t\t\t\t\t\t'content'\n\t\t\t\t\t\t) === null\n\t\t\t\t\t) {\n\t\t\t\t\t\toverflowList.push(controlConfig);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbuttonList.push(controlConfig);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\toverflowList.push(controlConfig);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// Ensures the `export` controls are always at the bottom\n\t\toverflowList.push(...overflowSpecificControls);\n\n\t\tif (!overflowList.length) {\n\t\t\treturn {\n\t\t\t\tbuttonList,\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\tbuttonList,\n\t\t\toverflowMenuItemList: overflowList,\n\t\t};\n\t}\n\n\tgetToolbarButtonItems() {\n\t\tconst { buttonList, overflowMenuItemList } = this.getControlConfigs();\n\t\tif (!!overflowMenuItemList) {\n\t\t\tbuttonList.push(this.getOverflowButtonConfig());\n\t\t}\n\t\tif (!!buttonList) {\n\t\t\treturn buttonList;\n\t\t}\n\n\t\treturn [];\n\t}\n\n\tgetOverflowMenuItems() {\n\t\tconst { overflowMenuItemList } = this.getControlConfigs();\n\t\tif (!!overflowMenuItemList) {\n\t\t\treturn overflowMenuItemList;\n\t\t} else {\n\t\t\treturn [];\n\t\t}\n\t}\n\n\t// special button config for overflow button\n\tgetOverflowButtonConfig() {\n\t\treturn {\n\t\t\tid: 'toolbar-overflow-menu',\n\t\t\ttitle: 'More options',\n\t\t\tshouldBeDisabled: () => false,\n\t\t\ticonSVG: {\n\t\t\t\tcontent: `<circle cx=\"16\" cy=\"8\" r=\"2\"></circle>\n\t\t\t\t<circle cx=\"16\" cy=\"16\" r=\"2\"></circle>\n\t\t\t\t<circle cx=\"16\" cy=\"24\" r=\"2\"></circle>`,\n\t\t\t},\n\t\t\tclickFunction: (event) => this.toggleOverflowMenu(event),\n\t\t};\n\t}\n\n\tgetControlConfigByType(controlType: ToolbarControlTypes) {\n\t\tconst isZoomBarEnabled =\n\t\t\tthis.services.zoom &&\n\t\t\tthis.services.zoom.isZoomBarEnabled() &&\n\t\t\t!this.services.zoom.isEmptyState();\n\n\t\tconst displayData = this.model.getDisplayData();\n\n\t\tlet controlConfig;\n\t\tswitch (controlType) {\n\t\t\tcase ToolbarControlTypes.ZOOM_IN:\n\t\t\t\tif (isZoomBarEnabled) {\n\t\t\t\t\tcontrolConfig = {\n\t\t\t\t\t\tid: 'toolbar-zoomIn',\n\t\t\t\t\t\ttitle: 'Zoom in',\n\t\t\t\t\t\tshouldBeDisabled: () =>\n\t\t\t\t\t\t\tthis.services.zoom.isMinZoomDomain(),\n\t\t\t\t\t\ticonSVG: {\n\t\t\t\t\t\t\tcontent: this.getControlIconByType(controlType),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tclickFunction: () => this.services.zoom.zoomIn(),\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase ToolbarControlTypes.ZOOM_OUT:\n\t\t\t\tif (isZoomBarEnabled) {\n\t\t\t\t\tcontrolConfig = {\n\t\t\t\t\t\tid: 'toolbar-zoomOut',\n\t\t\t\t\t\ttitle: 'Zoom out',\n\t\t\t\t\t\tshouldBeDisabled: () =>\n\t\t\t\t\t\t\tthis.services.zoom.isMaxZoomDomain(),\n\t\t\t\t\t\ticonSVG: {\n\t\t\t\t\t\t\tcontent: this.getControlIconByType(controlType),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tclickFunction: () => this.services.zoom.zoomOut(),\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase ToolbarControlTypes.RESET_ZOOM:\n\t\t\t\tif (isZoomBarEnabled) {\n\t\t\t\t\tcontrolConfig = {\n\t\t\t\t\t\tid: 'toolbar-resetZoom',\n\t\t\t\t\t\ttitle: 'Reset zoom',\n\t\t\t\t\t\tshouldBeDisabled: () =>\n\t\t\t\t\t\t\tthis.services.zoom.isMaxZoomDomain(),\n\t\t\t\t\t\ticonSVG: {\n\t\t\t\t\t\t\tcontent: this.getControlIconByType(controlType),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tclickFunction: () =>\n\t\t\t\t\t\t\tthis.services.zoom.resetZoomDomain(),\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase ToolbarControlTypes.MAKE_FULLSCREEN:\n\t\t\t\tcontrolConfig = {\n\t\t\t\t\tid: 'toolbar-makefullscreen',\n\t\t\t\t\ticonSVG: {\n\t\t\t\t\t\tcontent: this.getControlIconByType(controlType),\n\t\t\t\t\t\twidth: '15px',\n\t\t\t\t\t\theight: '15px',\n\t\t\t\t\t},\n\t\t\t\t\ttitle: 'Make fullscreen',\n\t\t\t\t\tshouldBeDisabled: () => false,\n\t\t\t\t\tclickFunction: () => {\n\t\t\t\t\t\tthis.services.domUtils.toggleFullscreen();\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase ToolbarControlTypes.SHOW_AS_DATATABLE:\n\t\t\t\tcontrolConfig = {\n\t\t\t\t\tid: 'toolbar-showasdatatable',\n\t\t\t\t\ticonSVG: {\n\t\t\t\t\t\tcontent: this.getControlIconByType(controlType),\n\t\t\t\t\t},\n\t\t\t\t\ttitle: 'Show as table',\n\t\t\t\t\tshouldBeDisabled: () => displayData.length === 0,\n\t\t\t\t\tclickFunction: () =>\n\t\t\t\t\t\tthis.services.events.dispatchEvent(Events.Modal.SHOW),\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase ToolbarControlTypes.EXPORT_CSV:\n\t\t\t\tcontrolConfig = {\n\t\t\t\t\tid: 'toolbar-export-CSV',\n\t\t\t\t\ttitle: 'Export as CSV',\n\t\t\t\t\tshouldBeDisabled: () => false,\n\t\t\t\t\ticonSVG: {\n\t\t\t\t\t\tcontent: this.getControlIconByType(controlType),\n\t\t\t\t\t},\n\t\t\t\t\tclickFunction: () => this.model.exportToCSV(),\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase ToolbarControlTypes.EXPORT_PNG:\n\t\t\t\tcontrolConfig = {\n\t\t\t\t\tid: 'toolbar-export-PNG',\n\t\t\t\t\ttitle: 'Export as PNG',\n\t\t\t\t\tshouldBeDisabled: () => false,\n\t\t\t\t\ticonSVG: {\n\t\t\t\t\t\tcontent: this.getControlIconByType(controlType),\n\t\t\t\t\t},\n\t\t\t\t\tclickFunction: () => this.services.domUtils.exportToPNG(),\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase ToolbarControlTypes.EXPORT_JPG:\n\t\t\t\tcontrolConfig = {\n\t\t\t\t\tid: 'toolbar-export-JPG',\n\t\t\t\t\ttitle: 'Export as JPG',\n\t\t\t\t\tshouldBeDisabled: () => false,\n\t\t\t\t\ticonSVG: {\n\t\t\t\t\t\tcontent: this.getControlIconByType(controlType),\n\t\t\t\t\t},\n\t\t\t\t\tclickFunction: () => this.services.domUtils.exportToJPG(),\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\t// add more toolbar control configuration here\n\n\t\t\tdefault:\n\t\t\t\tthrow Error(\n\t\t\t\t\t'Not supported toolbar control type: ' + controlType\n\t\t\t\t);\n\t\t}\n\t\treturn controlConfig;\n\t}\n\n\tgetControlIconByType(controlType: ToolbarControlTypes) {\n\t\tswitch (controlType) {\n\t\t\tcase ToolbarControlTypes.ZOOM_IN:\n\t\t\t\treturn `<polygon points=\"19 13 15 13 15 9 13 9 13 13 9 13 9 15 13 15 13 19 15 19 15 15 19 15 19 13\"/>\n\t\t\t\t\t\t<path d=\"M22.45,21A10.87,10.87,0,0,0,25,14,11,11,0,1,0,14,25a10.87,10.87,0,0,0,7-2.55L28.59,30,30,28.59ZM14,23a9,9,0,1,1,9-9A9,9,0,0,1,14,23Z\"/>`;\n\t\t\tcase ToolbarControlTypes.ZOOM_OUT:\n\t\t\t\treturn `<rect x=\"9\" y=\"13\" width=\"10\" height=\"2\"/>\n\t\t\t\t\t\t<path d=\"M22.45,21A10.87,10.87,0,0,0,25,14,11,11,0,1,0,14,25a10.87,10.87,0,0,0,7-2.55L28.59,30,30,28.59ZM14,23a9,9,0,1,1,9-9A9,9,0,0,1,14,23Z\"/>`;\n\t\t\tcase ToolbarControlTypes.RESET_ZOOM:\n\t\t\t\treturn `<path d=\"M22.4478,21A10.855,10.855,0,0,0,25,14,10.99,10.99,0,0,0,6,6.4658V2H4v8h8V8H7.332a8.9768,8.9768,0,1,1-2.1,8H3.1912A11.0118,11.0118,0,0,0,14,25a10.855,10.855,0,0,0,7-2.5522L28.5859,30,30,28.5859Z\"/>`;\n\t\t\tcase ToolbarControlTypes.MAKE_FULLSCREEN:\n\t\t\t\treturn `<polygon points=\"21 2 21 4 26.59 4 17 13.58 18.41 15 28 5.41 28 11 30 11 30 2 21 2\"/><polygon points=\"15 18.42 13.59 17 4 26.59 4 21 2 21 2 30 11 30 11 28 5.41 28 15 18.42\"/>`;\n\t\t\tcase ToolbarControlTypes.SHOW_AS_DATATABLE:\n\t\t\t\treturn `<rect x=\"4\" y=\"6\" width=\"18\" height=\"2\"/><rect x=\"4\" y=\"12\" width=\"18\" height=\"2\"/><rect x=\"4\" y=\"18\" width=\"18\" height=\"2\"/><rect x=\"4\" y=\"24\" width=\"18\" height=\"2\"/><rect x=\"26\" y=\"6\" width=\"2\" height=\"2\"/><rect x=\"26\" y=\"12\" width=\"2\" height=\"2\"/><rect x=\"26\" y=\"18\" width=\"2\" height=\"2\"/><rect x=\"26\" y=\"24\" width=\"2\" height=\"2\"/>`;\n\t\t\tcase ToolbarControlTypes.EXPORT_CSV:\n\t\t\t\treturn `<path d=\"M22.4478,21A10.855,10.855,0,0,0,25,14,10.99,10.99,0,0,0,6,6.4658V2H4v8h8V8H7.332a8.9768,8.9768,0,1,1-2.1,8H3.1912A11.0118,11.0118,0,0,0,14,25a10.855,10.855,0,0,0,7-2.5522L28.5859,30,30,28.5859Z\"/>`;\n\t\t\tcase ToolbarControlTypes.EXPORT_JPG:\n\t\t\t\treturn `<path d=\"M22.4478,21A10.855,10.855,0,0,0,25,14,10.99,10.99,0,0,0,6,6.4658V2H4v8h8V8H7.332a8.9768,8.9768,0,1,1-2.1,8H3.1912A11.0118,11.0118,0,0,0,14,25a10.855,10.855,0,0,0,7-2.5522L28.5859,30,30,28.5859Z\"/>`;\n\t\t\tcase ToolbarControlTypes.EXPORT_PNG:\n\t\t\t\treturn `<path d=\"M22.4478,21A10.855,10.855,0,0,0,25,14,10.99,10.99,0,0,0,6,6.4658V2H4v8h8V8H7.332a8.9768,8.9768,0,1,1-2.1,8H3.1912A11.0118,11.0118,0,0,0,14,25a10.855,10.855,0,0,0,7-2.5522L28.5859,30,30,28.5859Z\"/>`; // add more icons here\n\t\t\t// svg icon must be with 32x32 viewBox\n\n\t\t\tdefault:\n\t\t\t\tthrow Error(\n\t\t\t\t\t'Not supported toolbar control type: ' + controlType\n\t\t\t\t);\n\t\t}\n\t}\n}\n"]}
@@ -162,7 +162,8 @@ var Tooltip = /** @class */ (function (_super) {
162
162
  }
163
163
  try {
164
164
  // it's a correct ISO format Date string
165
- if (typeof value === 'string' && (/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}Z/.test(value))) {
165
+ if (typeof value === 'string' &&
166
+ /\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}Z/.test(value)) {
166
167
  return format(Date.parse(value), 'MMM d, yyyy');
167
168
  }
168
169
  }
@@ -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 { carbonPrefix } from '../../configuration-non-customizable';\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\ttry {\n\t\t\t// it's a correct ISO format Date string\n\t\t\tif (typeof value === 'string' && (/\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z/.test(value))) {\n\t\t\t\treturn format(Date.parse(value), 'MMM d, yyyy');\n\t\t\t}\n\t\t} catch (e){\n\t\t\t// not a valid ISO format string\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.${carbonPrefix}--${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"]}
1
+ {"version":3,"file":"tooltip.js","sourceRoot":"","sources":["tooltip.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,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,KAAK,aAAa,MAAM,qBAAqB,CAAC;AAErD,0BAA0B;AAC1B,OAAO,QAAQ,EAAE,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAE9D,yCAAyC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAEpE,aAAa;AACb,aAAa;AACb,0CAA0C;AAC1C,oCAAoC;AACpC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC;IAA6B,2BAAS;IASrC,iBAAY,KAAiB,EAAE,QAAa,EAAE,OAAa;QAA3D,YACC,kBAAM,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,SAG/B;QAZD,UAAI,GAAG,SAAS,CAAC;QACjB,gBAAU,GAAG,WAAW,CAAC,IAAI,CAAC;QAE9B,mEAAmE;QACnE,0BAAoB,GAAG,KAAK,CAAC;QAE7B,qBAAe,GAAG,IAAI,QAAQ,EAAE,CAAC;QAQjC,uBAAiB,GAAG,UAAC,CAAC;YACrB,IAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;YAE7C,IAAM,WAAW,GAAG,KAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;YAE3C,IAAM,oBAAoB,GAAG,QAAQ,CAAC,cAAc,CACnD,KAAI,CAAC,OAAO,EACZ,iBAAiB,CACjB,CAAC;YAEF,uDAAuD;YACvD,IAAI,KAAK,CAAC,WAAW,CAAC,KAAI,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,YAAY,CAAC,EAAE;gBAClE,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE;oBACrB,IAAM,SAAS,GAAG,qCAAiC,CAAC,CAAC,MAAM,CAAC,OAAO,eAAY,CAAC;oBAChF,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;iBACrC;qBAAM;oBACN,oBAAoB,CAAC,IAAI,CACxB,KAAI,CAAC,KAAK;yBACR,UAAU,EAAE;yBACZ,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC,CACvC,CAAC;iBACF;aACD;iBAAM;gBACN,sBAAsB;gBACtB,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;aACvC;YAED,uBAAuB;YACvB,KAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAExB,UAAU;YACV,KAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;QAClE,CAAC,CAAC;QAEF,uBAAiB,GAAG;YACnB,KAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QAChE,CAAC,CAAC;QAvCD,KAAI,CAAC,IAAI,EAAE,CAAC;;IACb,CAAC;IAwCD,yCAAuB,GAAvB;QAAA,iBA4BC;QA3BA,2DAA2D;QAC3D,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CACpC,MAAM,CAAC,OAAO,CAAC,IAAI,EACnB,UAAC,CAAc;YACd,IAAI,KAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,KAAK,EAAE;gBAC7C,KAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;aACxB;QACF,CAAC,CACD,CAAC;QAEF,6DAA6D;QAC7D,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CACpC,MAAM,CAAC,OAAO,CAAC,IAAI,EACnB,IAAI,CAAC,iBAAiB,CACtB,CAAC;QAEF,2DAA2D;QAC3D,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CACpC,MAAM,CAAC,OAAO,CAAC,IAAI,EACnB,IAAI,CAAC,iBAAiB,CACtB,CAAC;QAEF,qDAAqD;QACrD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CACpC,MAAM,CAAC,KAAK,CAAC,QAAQ,EACrB,IAAI,CAAC,iBAAiB,CACtB,CAAC;IACH,CAAC;IAED,4CAA0B,GAA1B;QACC,oCAAoC;QACpC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAEpE,oCAAoC;QACpC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,mBAAmB,CACvC,MAAM,CAAC,OAAO,CAAC,IAAI,EACnB,IAAI,CAAC,iBAAiB,CACtB,CAAC;QAEF,oCAAoC;QACpC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,mBAAmB,CACvC,MAAM,CAAC,OAAO,CAAC,IAAI,EACnB,IAAI,CAAC,iBAAiB,CACtB,CAAC;QAEF,wCAAwC;QACxC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,mBAAmB,CACvC,MAAM,CAAC,KAAK,CAAC,QAAQ,EACrB,IAAI,CAAC,iBAAiB,CACtB,CAAC;IACH,CAAC;IAED,0BAAQ,GAAR,UAAS,CAAc;QACtB,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE;YACnB,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SACtB;QAED,OAAO,EAAE,CAAC;IACX,CAAC;IAED,6BAAW,GAAX,UAAY,KAAK;QAAjB,iBA2DC;QA1DA,IAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAElC,iDAAiD;QACjD,IAAM,cAAc,GAAG,KAAK,CAAC,WAAW,CACvC,OAAO,EACP,SAAS,EACT,YAAY,EACZ,MAAM,CACN,CAAC;QAEF,IAAM,mBAAmB,GAAG,KAAK,CAAC,WAAW,CAC5C,OAAO,EACP,SAAS,EACT,YAAY,EACZ,WAAW,CACX,CAAC;QAEF,IAAM,sBAAsB,GAAG,KAAK,CAAC,WAAW,CAC/C,OAAO,EACP,SAAS,EACT,YAAY,EACZ,cAAc,CACd,CAAC;QAEF,sCAAsC;QACtC,gCAAgC;QAChC,IAAI,cAAc,KAAK,eAAe,CAAC,IAAI,EAAE;YAC5C,OAAO,KAAK,CAAC,GAAG,CAAC,UAAC,IAAI;gBACrB,2CAA2C;gBAC3C,IAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAE9C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;oBACtB,CAAC,CAAC,KAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC;oBAC7C,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;gBACd,IACC,IAAI,CAAC,KAAK;oBACV,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,aAAa,GAAG,mBAAmB,EACtD;oBACD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,aAAa,CAC/B,IAAI,CAAC,KAAK,EACV,cAAc,EACd,sBAAsB,CACtB,CAAC;iBACF;gBAED,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,mBAAmB,EAAE;oBAC1D,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,aAAa,CAC/B,IAAI,CAAC,KAAK,EACV,cAAc,EACd,sBAAsB,CACtB,CAAC;iBACF;gBAED,OAAO,IAAI,CAAC;YACb,CAAC,CAAC,CAAC;SACH;QAED,OAAO,KAAK,CAAC;IACd,CAAC;IAED,gCAAc,GAAd,UAAe,CAAc;QAC5B,IAAI,WAAW,CAAC;QAChB,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE;YACrB,WAAW,GAAG,qCAAiC,CAAC,CAAC,MAAM,CAAC,OAAO,eAAY,CAAC;SAC5E;aAAM;YACN,IAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC/B,IAAM,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAE/C,WAAW;gBACV,8BAA4B;oBAC5B,cAAc;yBACZ,GAAG,CACH,UAAC,IAAI;wBACJ,OAAA,yDACgC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,+BACpD,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,gCAA6B,IAAI,CAAC,KAAK,cAAU,CAAC,CAAC,CAAC,EAAE,4BAEpE,IAAI,CAAC,KAAK;4BACT,CAAC,CAAC,gCAAgC;gCAChC,IAAI,CAAC,KAAK;gCACV,gCAAgC;4BAClC,CAAC,CAAC,EAAE,sEAGD,IAAI,CAAC,KAAK,IAAI,EAAE,gCACnB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,iCAA6B,IAAI,CAAC,SAAS,YAAS,CAAC,CAAC,CAAC,EAAE,oDAG3E,IAAI,CAAC,KAAK,KAAK,SAAS;4BACxB,IAAI,CAAC,KAAK,KAAK,IAAI;4BAClB,CAAC,CAAC,EAAE;4BACJ,CAAC,CAAC,yBAAqB,IAAI,CAAC,KAAK,SAAM,+CAGrC;oBArBL,CAqBK,CACN;yBACA,IAAI,CAAC,EAAE,CAAC;oBACV,OAAO,CAAC;SACT;QAED,OAAO,WAAW,CAAC;IACpB,CAAC;IAED,gCAAc,GAAd,UAAe,KAAU,EAAE,KAAa;QACvC,IAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,IAAM,cAAc,GAAG,KAAK,CAAC,WAAW,CACvC,OAAO,EACP,SAAS,EACT,gBAAgB,CAChB,CAAC;QAEF,IAAI,cAAc,EAAE;YACnB,OAAO,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;SACpC;QAED,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,UAAU,EAAE;YACxC,OAAO,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;SACpC;QAED,IAAI;YACH,wCAAwC;YACxC,IACC,OAAO,KAAK,KAAK,QAAQ;gBACzB,4CAA4C,CAAC,IAAI,CAAC,KAAK,CAAC,EACvD;gBACD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,CAAC;aAChD;SACD;QAAC,OAAO,CAAC,EAAE;YACX,gCAAgC;SAChC;QAED,OAAO,KAAK,CAAC,cAAc,EAAE,CAAC;IAC/B,CAAC;IAED,wBAAM,GAAN;QACC,IAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,IAAM,gBAAgB,GAAG,KAAK,CAAC,WAAW,CACzC,OAAO,EACP,SAAS,EACT,SAAS,CACT,CAAC;QACF,IAAI,gBAAgB,EAAE;YACrB,2BAA2B;YAC3B,IAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;YAC1D,IAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;YAClE,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,cAAc,CACrC,MAAM,EACN,SAAO,YAAY,UAAK,WAAW,cAAW,CAC9C,CAAC;YAEF,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAE9D,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;gBAC/B,IAAI,CAAC,uBAAuB,EAAE,CAAC;gBAC/B,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;aACjC;YACD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;SACrC;aAAM,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC1D,+BAA+B;YAC/B,IAAI,CAAC,0BAA0B,EAAE,CAAC;YAClC,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;SAClC;IACF,CAAC;IAED,iCAAe,GAAf,UAAgB,CAAc;QAC7B,IAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;QAClD,IAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACnC,IAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,IAAM,mBAAmB,GAAG,KAAK,CAAC,WAAW,CAC5C,OAAO,EACP,SAAS,EACT,KAAK,EACL,SAAS,CACT,CAAC;QAEF,IAAI,gBAAgB,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;QACvE,IAAI,CAAC,gBAAgB,EAAE;YACtB,gBAAgB,GAAG,OAAO,CACzB,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,EACvC,MAAM,CACN,CAAC;SACF;aAAM;YACN,IAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CACpC,OAAO,EACP,SAAS,EACT,KAAK,EACL,MAAM,CACN,CAAC;YACF,IAAM,aAAa,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAEhE,8CAA8C;YAC9C,8BAA8B;YAC9B,IAAI,mBAAmB,EAAE;gBACxB,gBAAgB,CAAC,CAAC,CAAC;oBAClB,aAAa,GAAG,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC;gBAEpD,iEAAiE;aACjE;SACD;QAED,IAAI,GAAG,CAAC;QAER,IAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACvC,IAAM,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QAEzC,IAAI,mBAAmB,CAAC;QACxB,IAAI,gBAAgB,CAAC,CAAC,CAAC,GAAG,WAAW,GAAG,GAAG,EAAE;YAC5C,mBAAmB,GAAG,UAAU,CAAC,IAAI,CAAC;SACtC;aAAM,IAAI,gBAAgB,CAAC,CAAC,CAAC,GAAG,WAAW,GAAG,GAAG,EAAE;YACnD,mBAAmB,GAAG,UAAU,CAAC,KAAK,CAAC;SACvC;aAAM;YACN,qEAAqE;YACrE,mBAAmB,GAAG,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAC7D;gBACC,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC;gBACzB,GAAG,EAAE,gBAAgB,CAAC,CAAC,CAAC;aACxB,EACD,MAAM,EACN;gBACC,UAAU,CAAC,KAAK;gBAChB,UAAU,CAAC,IAAI;gBACf,UAAU,CAAC,GAAG;gBACd,UAAU,CAAC,MAAM;aACjB,EACD,cAAM,OAAA,CAAC;gBACN,KAAK,EAAE,WAAW;gBAClB,MAAM,EAAE,YAAY;aACpB,CAAC,EAHI,CAGJ,CACF,CAAC;SACF;QAEK,IAAA,0DAAgB,CAA4B;QAClD,IAAI,mBAAmB,KAAK,UAAU,CAAC,IAAI,EAAE;YAC5C,gBAAgB,IAAI,CAAC,CAAC,CAAC;SACvB;QAED,wDAAwD;QACxD,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,cAAc,CACxC;YACC,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,gBAAgB;YAC5C,GAAG,EAAE,gBAAgB,CAAC,CAAC,CAAC;SACxB,EACD,MAAM,EACN,mBAAmB,CACnB,CAAC;QAEF,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9C,CAAC;IACF,cAAC;AAAD,CAAC,AA3WD,CAA6B,SAAS,GA2WrC","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 { carbonPrefix } from '../../configuration-non-customizable';\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\ttry {\n\t\t\t// it's a correct ISO format Date string\n\t\t\tif (\n\t\t\t\ttypeof value === 'string' &&\n\t\t\t\t/\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z/.test(value)\n\t\t\t) {\n\t\t\t\treturn format(Date.parse(value), 'MMM d, yyyy');\n\t\t\t}\n\t\t} catch (e) {\n\t\t\t// not a valid ISO format string\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.${carbonPrefix}--${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"]}
@@ -518,7 +518,7 @@ var Alluvial = /** @class */ (function (_super) {
518
518
  links.forEach(function (element) { return _this.traverse(direction, element, visited); });
519
519
  };
520
520
  Alluvial.prototype.getRightArrowIcon = function () {
521
- return "\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=\"&lt;Transparent Rectangle&gt;\" style=\"fill: none;\" width=\"32\" height=\"32\"/>\n\t\t</svg>";
521
+ return "\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" class=\"arrow-right\" 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 width=\"32\" height=\"32\"/>\n\t\t</svg>";
522
522
  };
523
523
  // Remove event listeners
524
524
  Alluvial.prototype.destroy = function () {
@@ -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 {\n\tEvents,\n\tColorClassNameTypes,\n\tRenderTypes,\n\tAlignments,\n} from '../../interfaces';\n\n// D3 imports\nimport { select } from 'd3-selection';\nimport {\n\tsankey as d3Sankey,\n\tsankeyLinkHorizontal,\n\tsankeyLeft,\n\tsankeyRight,\n\tsankeyJustify,\n} from 'd3-sankey';\n\nexport class Alluvial extends Component {\n\ttype = 'alluvial';\n\trenderType = RenderTypes.SVG;\n\n\tprivate graph: any;\n\tgradient_id = 'gradient-id-' + Math.floor(Math.random() * 99999999999);\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// Is gradient enabled or not\n\t\tconst isGradientAllowed = Tools.getProperty(\n\t\t\tthis.getOptions(),\n\t\t\t'color',\n\t\t\t'gradient',\n\t\t\t'enabled'\n\t\t);\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 alignment = Tools.getProperty(\n\t\t\toptions,\n\t\t\t'alluvial',\n\t\t\t'nodeAlignment'\n\t\t);\n\n\t\tlet nodeAlignment = sankeyJustify;\n\n\t\tif (alignment === Alignments.LEFT) {\n\t\t\tnodeAlignment = sankeyLeft;\n\t\t} else if (alignment === Alignments.RIGHT) {\n\t\t\tnodeAlignment = sankeyRight;\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// Alignment of nodes within chart\n\t\t\t.nodeAlign(nodeAlignment)\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\tconst links = svg\n\t\t\t.append('g')\n\t\t\t.attr('fill', 'none')\n\t\t\t.selectAll('g')\n\t\t\t.data(this.graph.links);\n\n\t\t// Exit so we can have multiple appends in group\n\t\tlinks.exit().remove();\n\n\t\t// Add gradient if requsted\n\t\tif (isGradientAllowed) {\n\t\t\tconst scale = Tools.getProperty(\n\t\t\t\tthis.getOptions(),\n\t\t\t\t'color',\n\t\t\t\t'scale'\n\t\t\t);\n\n\t\t\tif (scale) {\n\t\t\t\tlinks\n\t\t\t\t\t.enter()\n\t\t\t\t\t.append('linearGradient')\n\t\t\t\t\t.attr('id', (d) => `${this.gradient_id}-link-${d.index}`)\n\t\t\t\t\t.attr('gradientUnits', 'userSpaceOnUse')\n\t\t\t\t\t.call((gradient) =>\n\t\t\t\t\t\tgradient\n\t\t\t\t\t\t\t.append('stop')\n\t\t\t\t\t\t\t.attr('offset', '0%')\n\t\t\t\t\t\t\t.attr('stop-color', (d) => {\n\t\t\t\t\t\t\t\treturn scale[d.source.name];\n\t\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t\t.call((gradient) =>\n\t\t\t\t\t\tgradient\n\t\t\t\t\t\t\t.append('stop')\n\t\t\t\t\t\t\t.attr('offset', '100%')\n\t\t\t\t\t\t\t.attr('stop-color', (d) => {\n\t\t\t\t\t\t\t\treturn scale[d.target.name];\n\t\t\t\t\t\t\t})\n\t\t\t\t\t);\n\t\t\t}\n\t\t\t// Exit so path can be appended to the group\n\t\t\tlinks.exit().remove();\n\t\t}\n\n\t\tlinks\n\t\t\t.enter()\n\t\t\t.append('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) => {\n\t\t\t\tif (isGradientAllowed) {\n\t\t\t\t\treturn `url(#${this.gradient_id}-link-${d.index})`;\n\t\t\t\t}\n\n\t\t\t\treturn this.model.getFillColor(d.source.name);\n\t\t\t})\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=\"&lt;Transparent Rectangle&gt;\" 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 {\n\tEvents,\n\tColorClassNameTypes,\n\tRenderTypes,\n\tAlignments,\n} from '../../interfaces';\n\n// D3 imports\nimport { select } from 'd3-selection';\nimport {\n\tsankey as d3Sankey,\n\tsankeyLinkHorizontal,\n\tsankeyLeft,\n\tsankeyRight,\n\tsankeyJustify,\n} from 'd3-sankey';\n\nexport class Alluvial extends Component {\n\ttype = 'alluvial';\n\trenderType = RenderTypes.SVG;\n\n\tprivate graph: any;\n\tgradient_id = 'gradient-id-' + Math.floor(Math.random() * 99999999999);\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// Is gradient enabled or not\n\t\tconst isGradientAllowed = Tools.getProperty(\n\t\t\tthis.getOptions(),\n\t\t\t'color',\n\t\t\t'gradient',\n\t\t\t'enabled'\n\t\t);\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 alignment = Tools.getProperty(\n\t\t\toptions,\n\t\t\t'alluvial',\n\t\t\t'nodeAlignment'\n\t\t);\n\n\t\tlet nodeAlignment = sankeyJustify;\n\n\t\tif (alignment === Alignments.LEFT) {\n\t\t\tnodeAlignment = sankeyLeft;\n\t\t} else if (alignment === Alignments.RIGHT) {\n\t\t\tnodeAlignment = sankeyRight;\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// Alignment of nodes within chart\n\t\t\t.nodeAlign(nodeAlignment)\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\tconst links = svg\n\t\t\t.append('g')\n\t\t\t.attr('fill', 'none')\n\t\t\t.selectAll('g')\n\t\t\t.data(this.graph.links);\n\n\t\t// Exit so we can have multiple appends in group\n\t\tlinks.exit().remove();\n\n\t\t// Add gradient if requsted\n\t\tif (isGradientAllowed) {\n\t\t\tconst scale = Tools.getProperty(\n\t\t\t\tthis.getOptions(),\n\t\t\t\t'color',\n\t\t\t\t'scale'\n\t\t\t);\n\n\t\t\tif (scale) {\n\t\t\t\tlinks\n\t\t\t\t\t.enter()\n\t\t\t\t\t.append('linearGradient')\n\t\t\t\t\t.attr('id', (d) => `${this.gradient_id}-link-${d.index}`)\n\t\t\t\t\t.attr('gradientUnits', 'userSpaceOnUse')\n\t\t\t\t\t.call((gradient) =>\n\t\t\t\t\t\tgradient\n\t\t\t\t\t\t\t.append('stop')\n\t\t\t\t\t\t\t.attr('offset', '0%')\n\t\t\t\t\t\t\t.attr('stop-color', (d) => {\n\t\t\t\t\t\t\t\treturn scale[d.source.name];\n\t\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t\t.call((gradient) =>\n\t\t\t\t\t\tgradient\n\t\t\t\t\t\t\t.append('stop')\n\t\t\t\t\t\t\t.attr('offset', '100%')\n\t\t\t\t\t\t\t.attr('stop-color', (d) => {\n\t\t\t\t\t\t\t\treturn scale[d.target.name];\n\t\t\t\t\t\t\t})\n\t\t\t\t\t);\n\t\t\t}\n\t\t\t// Exit so path can be appended to the group\n\t\t\tlinks.exit().remove();\n\t\t}\n\n\t\tlinks\n\t\t\t.enter()\n\t\t\t.append('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) => {\n\t\t\t\tif (isGradientAllowed) {\n\t\t\t\t\treturn `url(#${this.gradient_id}-link-${d.index})`;\n\t\t\t\t}\n\n\t\t\t\treturn this.model.getFillColor(d.source.name);\n\t\t\t})\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\" class=\"arrow-right\" 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 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"]}
package/demo/styles.css CHANGED
@@ -23827,6 +23827,9 @@ div.cds--cc--legend.clickable div.legend-item:not(.additional):hover div.checkbo
23827
23827
  .cds--cc--tooltip .content-box ul.multi-tooltip li:not(:last-child) {
23828
23828
  border-bottom: 1px solid var(--cds-tooltip-line-border, #e0e0e0);
23829
23829
  }
23830
+ .cds--cc--tooltip .content-box svg.arrow-right rect {
23831
+ fill: none;
23832
+ }
23830
23833
  .cds--cc--tooltip .tooltip-color {
23831
23834
  position: absolute;
23832
23835
  left: 0;