From 08fa194f1c59ab2110c0d221886fc0174c936194 Mon Sep 17 00:00:00 2001 From: Akshat55 <38994122+Akshat55@users.noreply.github.com> Date: Wed, 15 Sep 2021 14:05:39 -0400 Subject: [PATCH] feat(core): create alluvial chart (#1132) * add d3-sankey package * create enum of all alluvial related events * create basic alluvial chart * add alluvial chart options * create alluvial chart wrapper * fix linting issues * define default alluvial configs * create alluvial react component * create alluvial angular component * Add simple alluvial demo under complex charts * remove skeleton import and comments * add style for themes * add logic to add space between node and textbox * add configs & node group title * add line event listeners * declare and export alluvial in ngmodule * add node event listener * Add multiple category alluvial demo * add monochrome option * add combined monochrome and nodePadding demo * remove stroke from node rectangles * Add delay to events to stop flashing behaviour * add graph traversal to highlight links that pass node * set minimum node padding to 24 * add units in aria-label and tooltip * update demo names * export alluvial chart * add condition to prevent firefox error * feat(core): create alluvial chart closes #871 * filter out unused nodes from rendering * update debounce for line events * update debounce for node events * order complex demos alphabetically * decrease debounce time * improve link hover debounce * exclude legend from alluvial * fix review changes * wrap alluvial options in respective key * improve node debounce highlighting * deep clone user passed data when creating graph * remove trailing space in aria-label --- .../angular/src/alluvial-chart.component.ts | 34 + packages/angular/src/charts.module.ts | 3 + packages/angular/src/index.ts | 1 + packages/core/demo/data/CHART_TYPES.ts | 5 + packages/core/demo/data/alluvial.ts | 134 ++++ packages/core/demo/data/index.ts | 59 +- packages/core/package.json | 1 + packages/core/src/charts/alluvial.ts | 50 ++ packages/core/src/charts/index.ts | 1 + .../core/src/components/graphs/alluvial.ts | 589 ++++++++++++++++++ packages/core/src/components/index.ts | 1 + .../src/configuration-non-customizable.ts | 11 + packages/core/src/configuration.ts | 13 + packages/core/src/interfaces/charts.ts | 26 +- packages/core/src/interfaces/events.ts | 14 + .../core/src/styles/graphs/_alluvial.scss | 30 + packages/core/src/styles/graphs/index.scss | 1 + packages/react/src/alluvial-chart.tsx | 27 + packages/react/src/index.ts | 2 + packages/svelte/src/AlluvialChart.svelte | 16 + packages/svelte/src/index.js | 2 + packages/vue/src/ccv-alluvial-chart.vue | 19 + packages/vue/src/index.js | 3 + yarn-offline-mirror-cache/d3-array-2.12.1.tgz | Bin 0 -> 31975 bytes yarn-offline-mirror-cache/d3-path-1.0.9.tgz | Bin 0 -> 5697 bytes yarn-offline-mirror-cache/d3-shape-1.3.7.tgz | Bin 0 -> 48026 bytes yarn-offline-mirror-cache/internmap-1.0.1.tgz | Bin 0 -> 3578 bytes yarn.lock | 32 + 28 files changed, 1055 insertions(+), 19 deletions(-) create mode 100644 packages/angular/src/alluvial-chart.component.ts create mode 100644 packages/core/demo/data/alluvial.ts create mode 100644 packages/core/src/charts/alluvial.ts create mode 100644 packages/core/src/components/graphs/alluvial.ts create mode 100644 packages/core/src/styles/graphs/_alluvial.scss create mode 100644 packages/react/src/alluvial-chart.tsx create mode 100644 packages/svelte/src/AlluvialChart.svelte create mode 100644 packages/vue/src/ccv-alluvial-chart.vue create mode 100644 yarn-offline-mirror-cache/d3-array-2.12.1.tgz create mode 100644 yarn-offline-mirror-cache/d3-path-1.0.9.tgz create mode 100644 yarn-offline-mirror-cache/d3-shape-1.3.7.tgz create mode 100644 yarn-offline-mirror-cache/internmap-1.0.1.tgz diff --git a/packages/angular/src/alluvial-chart.component.ts b/packages/angular/src/alluvial-chart.component.ts new file mode 100644 index 0000000000..f47e7ecfd1 --- /dev/null +++ b/packages/angular/src/alluvial-chart.component.ts @@ -0,0 +1,34 @@ +import { + Component, + AfterViewInit +} from "@angular/core"; + +import { BaseChart } from "./base-chart.component"; + +import { AlluvialChart } from "@carbon/charts"; + +/** + * Wrapper around `Alluvial` in carbon charts library + * + * Most functions just call their equivalent from the chart library. + */ +@Component({ + selector: "ibm-alluvial-chart", + template: `` +}) +export class AlluvialChartComponent extends BaseChart implements AfterViewInit { + /** + * Runs after view init to create a chart, attach it to `elementRef` and draw it. + */ + ngAfterViewInit() { + this.chart = new AlluvialChart( + this.elementRef.nativeElement, + { + data: this.data, + options: this.options + } + ); + + Object.assign(this, this.chart); + } +} diff --git a/packages/angular/src/charts.module.ts b/packages/angular/src/charts.module.ts index 918296dd05..79801e40a5 100644 --- a/packages/angular/src/charts.module.ts +++ b/packages/angular/src/charts.module.ts @@ -2,6 +2,7 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { BaseChart } from './base-chart.component'; +import { AlluvialChartComponent } from './alluvial-chart.component'; import { AreaChartComponent } from './area-chart.component'; import { StackedAreaChartComponent } from './area-chart-stacked.component'; import { SimpleBarChartComponent } from './bar-chart-simple.component'; @@ -29,6 +30,7 @@ import { WordCloudChartComponent } from './wordcloud-chart.component'; imports: [CommonModule], declarations: [ BaseChart, + AlluvialChartComponent, AreaChartComponent, StackedAreaChartComponent, SimpleBarChartComponent, @@ -54,6 +56,7 @@ import { WordCloudChartComponent } from './wordcloud-chart.component'; ], exports: [ BaseChart, + AlluvialChartComponent, AreaChartComponent, StackedAreaChartComponent, SimpleBarChartComponent, diff --git a/packages/angular/src/index.ts b/packages/angular/src/index.ts index d1a229c3eb..1808eb7579 100644 --- a/packages/angular/src/index.ts +++ b/packages/angular/src/index.ts @@ -23,6 +23,7 @@ export * from './tree-chart.component'; export * from './treemap-chart.component'; export * from './circle-pack-chart.component'; export * from './wordcloud-chart.component'; +export * from './alluvial-chart.component'; // Diagrams export * from './diagrams/card-node/card-node.module'; diff --git a/packages/core/demo/data/CHART_TYPES.ts b/packages/core/demo/data/CHART_TYPES.ts index 1c4f5c4f5b..bd9c95311f 100644 --- a/packages/core/demo/data/CHART_TYPES.ts +++ b/packages/core/demo/data/CHART_TYPES.ts @@ -1,4 +1,9 @@ export default { + AlluvialChart: { + vanilla: 'AlluvialChart', + angular: 'ibm-alluvial-chart', + vue: 'ccv-alluvial-chart', + }, AreaChart: { vanilla: 'AreaChart', angular: 'ibm-area-chart', diff --git a/packages/core/demo/data/alluvial.ts b/packages/core/demo/data/alluvial.ts new file mode 100644 index 0000000000..771547d794 --- /dev/null +++ b/packages/core/demo/data/alluvial.ts @@ -0,0 +1,134 @@ +export const alluvialSimpleData = [ + { source: 'A', target: 'X', value: 3 }, + { source: 'A', target: 'Y', value: 5 }, + { source: 'A', target: 'Z', value: 8 }, + { source: 'B', target: 'X', value: 6 }, + { source: 'B', target: 'Y', value: 1 }, + { source: 'B', target: 'Z', value: 7 }, + { source: 'C', target: 'X', value: 5 }, + { source: 'C', target: 'Y', value: 5 }, + { source: 'C', target: 'Z', value: 1 }, +]; + +export const alluvialSimpleOptions = { + title: 'Alluvial', + alluvial: { + units: 'GB', + nodes: [ + { name: 'A', category: 'Start' }, + { name: 'B', category: 'Start' }, + { name: 'C', category: 'Start' }, + { name: 'X', category: 'Finish' }, + { name: 'Y', category: 'Finish' }, + { name: 'Z', category: 'Finish' }, + ], + }, +}; + +export const alluvialMultipleCategoryOptions = { + title: 'Alluvial (multiple categories)', + alluvial: { + nodes: [ + { name: '1st', category: 'Class' }, + { name: '2nd', category: 'Class' }, + { name: 'Crew', category: 'Class' }, + { name: 'Male', category: 'Sex' }, + { name: 'Female', category: 'Sex' }, + { name: 'Child', category: 'Age' }, + { name: 'Adult', category: 'Age' }, + { name: 'Yes', category: 'Survived' }, + { name: 'No', category: 'Survived' }, + ], + }, +}; + +export const alluvialMultipleCategoryData = [ + { + source: '1st', + target: 'Female', + value: 25, + }, + { + source: '1st', + target: 'Male', + value: 35, + }, + { + source: '2nd', + target: 'Female', + value: 35, + }, + { + source: '2nd', + target: 'Male', + value: 50, + }, + { + source: 'Crew', + target: 'Male', + value: 43, + }, + { + source: 'Crew', + target: 'Female', + value: 18, + }, + { + source: 'Male', + target: 'Child', + value: 38, + }, + { + source: 'Male', + target: 'Adult', + value: 90, + }, + { + source: 'Female', + target: 'Adult', + value: 52, + }, + { + source: 'Female', + target: 'Child', + value: 26, + }, + { + source: 'Child', + target: 'Yes', + value: 58, + }, + { + source: 'Child', + target: 'No', + value: 6, + }, + { + source: 'Adult', + target: 'Yes', + value: 22, + }, + { + source: 'Adult', + target: 'No', + value: 120, + }, +]; + +export const alluvialMonochromeData = alluvialSimpleData; + +export const alluvialMonochromeOptions = { + title: 'Alluvial (monochrome with custom node padding)', + alluvial: { + nodes: [ + { name: 'A', category: 'Start' }, + { name: 'B', category: 'Start' }, + { name: 'C', category: 'Start' }, + { name: 'X', category: 'Finish' }, + { name: 'Y', category: 'Finish' }, + { name: 'Z', category: 'Finish' }, + ], + monochrome: true, + nodePadding: 33, + }, +}; diff --git a/packages/core/demo/data/index.ts b/packages/core/demo/data/index.ts index 4f5dcf2f8c..ec8b436423 100644 --- a/packages/core/demo/data/index.ts +++ b/packages/core/demo/data/index.ts @@ -22,6 +22,7 @@ import * as toolbarDemos from './toolbar'; import * as wordCloudDemos from './wordcloud'; import * as zoomBarDemos from './zoom-bar'; import * as highScaleDemos from './high-scale'; +import * as alluvialDemos from './alluvial'; export * from './area'; export * from './bar'; @@ -46,6 +47,7 @@ export * from './toolbar'; export * from './wordcloud'; export * from './zoom-bar'; export * from './high-scale'; +export * from './alluvial'; import { createChartSandbox, @@ -1060,31 +1062,23 @@ const simpleChartDemos = [ const complexChartDemos = [ { - title: 'Tree', - configs: { - excludeColorPaletteControl: true, - }, + title: 'Alluvial', demos: [ { - data: treeDemos.treeData, - options: treeDemos.dendogramOptions, - chartType: chartTypes.TreeChart, + options: alluvialDemos.alluvialSimpleOptions, + data: alluvialDemos.alluvialSimpleData, + chartType: chartTypes.AlluvialChart, mainDemo: true, }, { - data: treeDemos.treeData, - options: treeDemos.treeOptions, - chartType: chartTypes.TreeChart, + options: alluvialDemos.alluvialMultipleCategoryOptions, + data: alluvialDemos.alluvialMultipleCategoryData, + chartType: chartTypes.AlluvialChart, }, - ], - }, - { - title: 'Treemap', - demos: [ { - data: treemapDemos.treemapData, - options: treemapDemos.treemapOptions, - chartType: chartTypes.TreemapChart, + options: alluvialDemos.alluvialMonochromeOptions, + data: alluvialDemos.alluvialMonochromeData, + chartType: chartTypes.AlluvialChart, }, ], }, @@ -1119,6 +1113,35 @@ const complexChartDemos = [ }, ], }, + { + title: 'Tree', + configs: { + excludeColorPaletteControl: true, + }, + demos: [ + { + data: treeDemos.treeData, + options: treeDemos.dendogramOptions, + chartType: chartTypes.TreeChart, + mainDemo: true, + }, + { + data: treeDemos.treeData, + options: treeDemos.treeOptions, + chartType: chartTypes.TreeChart, + }, + ], + }, + { + title: 'Treemap', + demos: [ + { + data: treemapDemos.treemapData, + options: treemapDemos.treemapOptions, + chartType: chartTypes.TreemapChart, + }, + ], + }, ].map((demoGroup: any) => { demoGroup.type = DemoGroupTypes.COMPLEX_CHART; diff --git a/packages/core/package.json b/packages/core/package.json index aad96fc99f..0d615efd95 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -53,6 +53,7 @@ "@carbon/utils-position": "1.1.1", "carbon-components": "10.40.0", "d3-cloud": "1.2.5", + "d3-sankey": "0.12.3", "date-fns": "2.8.1", "dom-to-image": "2.6.0", "lodash-es": "4.17.21", diff --git a/packages/core/src/charts/alluvial.ts b/packages/core/src/charts/alluvial.ts new file mode 100644 index 0000000000..c33faa45e8 --- /dev/null +++ b/packages/core/src/charts/alluvial.ts @@ -0,0 +1,50 @@ +// Internal Imports +import { Chart } from '../chart'; +import * as Configuration from '../configuration'; +import { ChartConfig, AlluvialChartOptions } from '../interfaces/index'; +import { Tools } from '../tools'; + +// Components +import { + Alluvial, + // the imports below are needed because of typescript bug (error TS4029) + Tooltip, + Legend, + LayoutComponent, +} from '../components/index'; + +export class AlluvialChart extends Chart { + constructor( + holder: Element, + chartConfigs: ChartConfig + ) { + super(holder, chartConfigs); + + // Merge the default options for this chart + // With the user provided options + this.model.setOptions( + Tools.mergeDefaultChartOptions( + Configuration.options.alluvialChart, + chartConfigs.options + ) + ); + + // Initialize data, services, components etc. + this.init(holder, chartConfigs); + } + + getComponents() { + // Specify what to render inside the graph-frame + const graphFrameComponents: any = [ + new Alluvial(this.model, this.services), + ]; + + const components: any[] = this.getChartComponents( + graphFrameComponents, + { + excludeLegend: true, + } + ); + return components; + } +} diff --git a/packages/core/src/charts/index.ts b/packages/core/src/charts/index.ts index e984365b7c..dd37195335 100644 --- a/packages/core/src/charts/index.ts +++ b/packages/core/src/charts/index.ts @@ -20,3 +20,4 @@ export * from './tree'; export * from './treemap'; export * from './circle-pack'; export * from './wordcloud'; +export * from './alluvial'; diff --git a/packages/core/src/components/graphs/alluvial.ts b/packages/core/src/components/graphs/alluvial.ts new file mode 100644 index 0000000000..f0d158ccb8 --- /dev/null +++ b/packages/core/src/components/graphs/alluvial.ts @@ -0,0 +1,589 @@ +// Internal imports +import { Component } from '../component'; +import { DOMUtils } from '../../services'; +import { Tools } from '../../tools'; +import * as Configuration from '../../configuration'; +import { Events, ColorClassNameTypes, RenderTypes } from '../../interfaces'; + +// D3 imports +import { select } from 'd3-selection'; +import { sankey as d3Sankey, sankeyLinkHorizontal } from 'd3-sankey'; + +export class Alluvial extends Component { + type = 'alluvial'; + renderType = RenderTypes.SVG; + + private graph: any; + + render(animate = true) { + // svg and container widths + const svg = this.getComponentContainer({ withinChartClip: true }); + svg.html(''); + + const { width, height } = DOMUtils.getSVGElementSize(svg, { + useAttrs: true, + }); + + // Because of a Firefox bug with regards to sizing & d3 packs, + // rather than checking if height or width aren't 0, + // we have to make sure they're not smaller than 1 + if (width < 1 || height < 1) { + return; + } + const options = this.model.getOptions(); + const data = this.model.getDisplayData(); + + // Set the custom node padding if provided + let nodePadding = Configuration.alluvial.minNodePadding; + if ( + options.alluvial.nodePadding > Configuration.alluvial.minNodePadding + ) { + nodePadding = options.alluvial.nodePadding; + } + + const sankey = d3Sankey() + .nodeId((d) => d.name) + .nodeWidth(Configuration.alluvial.nodeWidth) + // Distance nodes are apart from each other + .nodePadding(nodePadding) + // Size of the chart and its padding + // Chart starts at 2 and ends at width - 2 so the outer nodes can expand from center + // Chart starts from 30 so node categories can be displayed + .extent([ + [2, 30], + [width - 2, height], + ]); + + // Construct a graph with the provided user data + // Data must be deep cloned to ensure user passed data isn't deleted when themes change + this.graph = sankey({ + nodes: options.alluvial.nodes.map((d) => Object.assign({}, d)), + links: data.map((d) => Object.assign({}, d)), + }); + + // Filter out unused nodes so they are not rendered + this.graph.nodes = this.graph.nodes.filter((node) => node.value !== 0); + + // Determine the category name placement x position + const nodeCoordinates = {}; + this.graph.nodes.forEach((element) => { + const point = element.x0; + + // Only 1 category per x-value + if (element.category) { + nodeCoordinates[point] = element?.category; + } + }); + + // Add node category text + const alluvialCategory = svg + .append('g') + .classed('header-arrows', true) + .selectAll('g') + .data(Object.keys(nodeCoordinates)) + .join('g') + .attr('transform', (d) => { + return `translate(${d}, 0)`; + }); + + // Add the category text + alluvialCategory + .append('text') + .attr('id', (d, i) => `category-${i}`) + .style('font-size', '14px') + .text((d) => { + if (nodeCoordinates[d]) { + return nodeCoordinates[d]; + } + return ''; + }) + .attr('y', 20) + .attr('x', (d, i) => { + const { width } = DOMUtils.getSVGElementSize( + select(`text#category-${i}`), + { useBBox: true } + ); + + // Make the text on the left on node group (except first column) + let x = 0; + if (d + x >= width) { + x = -width + 4; + } + return x; + }); + + // Draws the links (Waves) + svg.append('g') + .attr('fill', 'none') + .selectAll('g') + .data(this.graph.links) + .join('path') + .classed('link', true) + .attr('d', sankeyLinkHorizontal()) + .attr('id', (d) => `line-${d.index}`) + .attr('class', (d) => { + // Use a single color for the lines + if (options.alluvial.monochrome) { + return this.model.getColorClassName({ + classNameTypes: [ColorClassNameTypes.STROKE], + dataGroupName: 0, + originalClassName: 'link', + }); + } + + return this.model.getColorClassName({ + classNameTypes: [ColorClassNameTypes.STROKE], + dataGroupName: d.source.index, + originalClassName: 'link', + }); + }) + .attr('stroke-width', (d) => Math.max(1, d.width)) + .style('stroke-opacity', Configuration.alluvial.opacity.default) + .attr( + 'aria-label', + (d) => + `${d.source.name} → ${d.target.name} (${d.value}${ + options.alluvial.units + ? ' ' + options.alluvial.units + : '' + })` + ); + + // Creating the groups + const node = svg + .append('g') + .selectAll('g') + .data(this.graph.nodes) + .enter() + .append('g') + .attr('id', (d) => `node-${d.index}`) + .classed('node-group', true) + .attr('transform', (d) => `translate(${d.x0}, ${d.y0})`); + + // Creating the nodes + node.append('rect') + .classed('node', true) + .attr('height', (d) => d.y1 - d.y0) + .attr('width', (d) => d.x1 - d.x0) + .attr('fill', 'black'); + + // Group to hold the text & rectangle background + const textNode = node + .append('g') + .attr('id', (d) => `node-title-${d.index}`); + + // Node title - text + textNode + .append('text') + .attr('id', (d) => `node-text-${d.index}`) + .attr('class', 'node-text') + .style('font-size', '12px') + .attr('text-anchor', 'start') + .attr('fill', 'white') + // Padding to text + .attr('x', 4) + // shift 13 pixels down to fit background container + .attr('dy', 13) + .text((d) => { + return `${d.name} (${d.value})`; + }) + .attr('aria-label', (d) => { + return `${d.name} (${d.value})`; + }); + + // Text background + textNode + .append('rect') + .classed('node-text-bg', true) + .attr('width', (d, i) => { + // Determine rectangle width based on text width + const { width } = DOMUtils.getSVGElementSize( + select(`text#node-text-${i}`), + { useBBox: true } + ); + + return width + 8; + }) + .attr('height', 18) + .attr('stroke-width', 2) + .lower(); + + // Position group based on text width + textNode.attr('transform', (d, i) => { + const { width } = DOMUtils.getSVGElementSize( + select(`text#node-text-${i}`), + { useBBox: true } + ); + + // Subtracting 9 since text background is 18 to center + const y = (d.y1 - d.y0) / 2 - 9; + // Node width + let x = d.x1 - d.x0; + + // Display bars on the right instead of left of the node + if (d.x1 >= width) { + // 16 = node width (4) + text container padding (8) + distance between node and text container (4) + x = x - (width + 16); + } else { + // Add padding to text containers + x += 4; + } + + return `translate(${x}, ${y})`; + }); + + this.addLineEventListener(); + this.addNodeEventListener(); + } + + addLineEventListener() { + const options = this.getOptions(); + const self = this; + + // Set delay to counter flashy behaviour + const debouncedLineHighlight = Tools.debounce( + (link, event = 'mouseover') => { + const allLinks = self.parent + .selectAll('path.link') + .transition( + self.services.transitions.getTransition( + 'alluvial-link-mouse-highlight' + ) + ); + + if (event === 'mouseout') { + select(link).lower(); + allLinks.style( + 'stroke-opacity', + Configuration.alluvial.opacity.default + ); + } else { + allLinks.style('stroke-opacity', function () { + // highlight and raise if link is this + if (link === this) { + select(this).raise(); + return Configuration.alluvial.opacity.selected; + } + + return Configuration.alluvial.opacity.unfocus; + }); + } + }, + 33 + ); + + this.parent + .selectAll('path.link') + .on('mouseover', function (event, datum) { + const hoveredElement = select(this); + debouncedLineHighlight(this, 'mouseover'); + hoveredElement.classed('link-hovered', true); + + const strokeColor = getComputedStyle(this).getPropertyValue( + 'stroke' + ); + + // Dispatch mouse over event + self.services.events.dispatchEvent( + Events.Alluvial.LINE_MOUSEOVER, + { + event, + element: hoveredElement, + datum, + } + ); + + // Dispatch tooltip show event + self.services.events.dispatchEvent(Events.Tooltip.SHOW, { + event, + hoveredElement, + items: [ + { + label: datum.target.name, + value: + datum.value + + (options.alluvial.units + ? ` ${options.alluvial.units}` + : ''), + color: strokeColor, + labelIcon: self.getRightArrowIcon(), + }, + ], + }); + }) + .on('mousemove', function (event, datum) { + // Dispatch mouse move event + self.services.events.dispatchEvent( + Events.Alluvial.LINE_MOUSEMOVE, + { + event, + element: select(this), + datum, + } + ); + // Dispatch tooltip move event + self.services.events.dispatchEvent(Events.Tooltip.MOVE, { + event, + }); + }) + .on('click', function (event, datum) { + // Dispatch mouse click event + self.services.events.dispatchEvent(Events.Alluvial.LINE_CLICK, { + event, + element: select(this), + datum, + }); + }) + .on('mouseout', function (event, datum) { + const hoveredElement = select(this); + debouncedLineHighlight(this, 'mouseout'); + hoveredElement.classed('link-hovered', false); + + // Dispatch mouse out event + self.services.events.dispatchEvent( + Events.Alluvial.LINE_MOUSEOUT, + { + event, + element: hoveredElement, + datum, + } + ); + + // Dispatch hide tooltip event + self.services.events.dispatchEvent(Events.Tooltip.HIDE, { + event, + hoveredElement, + }); + }); + } + + addNodeEventListener() { + const self = this; + + // Set delay to counter flashy behaviour + const debouncedLineHighlight = Tools.debounce( + (links = [], event = 'mouseover') => { + if (event === 'mouseout' || links.length === 0) { + // set all links to default opacity & corret link order + self.parent + .selectAll('path.link') + .classed('link-hovered', false) + .data(this.graph.links, (d) => d.index) + .order() + .style( + 'stroke-opacity', + Configuration.alluvial.opacity.default + ); + + return; + } + + // Highlight all nodes + const allLinks = self.parent + .selectAll('path.link') + .transition( + self.services.transitions.getTransition( + 'alluvial-links-mouse-highlight' + ) + ); + + allLinks.style('stroke-opacity', function (d) { + // Raise the links & increase stroke-opacity to selected + if (links.some((element) => element === d.index)) { + select(this).classed('link-hovered', true).raise(); + return Configuration.alluvial.opacity.selected; + } + + return Configuration.alluvial.opacity.unfocus; + }); + }, + 66 + ); + + self.parent + .selectAll('.node-group') + .on('mouseover', function (event, datum) { + const hoveredElement = select(this); + + // Highlight all links that pass through node + const paths = []; + + // Outgoing links + self.traverse( + { link: 'sourceLinks', node: 'target' }, + datum, + paths + ); + + //Incoming links + self.traverse( + { link: 'targetLinks', node: 'source' }, + datum, + paths + ); + + // Highlight all linked lines in the graph data structure + if (paths.length) { + // Get transformation value of node + const nodeMatrix = Tools.getTranformOffsets( + hoveredElement.attr('transform') + ); + + // Move node to the left by 2 to grow node from the center + hoveredElement.attr( + 'transform', + `translate(${nodeMatrix.x - 2}, ${nodeMatrix.y})` + ); + + hoveredElement + .classed('node-hovered', true) + .selectAll('rect.node') + .attr('width', 8); + + // Translate first column text container to the + // right so it doesn't clash with expanding node + if (datum.x0 - 2 === 0) { + const titleContainer = self.parent.select( + `g#node-title-${datum.index}` + ); + const titleMatrix = Tools.getTranformOffsets( + titleContainer.attr('transform') + ); + + titleContainer.attr( + 'transform', + `translate(${titleMatrix.x + 4},${titleMatrix.y})` + ); + } + + self.parent + .select(`text#node-text-${datum.index}`) + .style('font-weight', 'bold'); + + debouncedLineHighlight(paths, 'mouseover'); + + // Dispatch mouse over event + self.services.events.dispatchEvent( + Events.Alluvial.NODE_MOUSEOVER, + { + event, + element: hoveredElement, + datum, + } + ); + } + }) + .on('mousemove', function (event, datum) { + // Dispatch mouse move event + self.services.events.dispatchEvent( + Events.Alluvial.NODE_MOUSEMOVE, + { + event, + element: select(this), + datum, + } + ); + + // Dispatch tooltip move event + self.services.events.dispatchEvent(Events.Tooltip.MOVE, { + event, + }); + }) + .on('click', function (event, datum) { + // Dispatch mouse click event + self.services.events.dispatchEvent(Events.Alluvial.NODE_CLICK, { + event, + element: select(this), + datum, + }); + }) + .on('mouseout', function (event, datum) { + const hoveredElement = select(this); + + // Set the node position to initial state (unexpanded) + const nodeMatrix = Tools.getTranformOffsets( + hoveredElement.attr('transform') + ); + + hoveredElement + .classed('node-hovered', false) + .attr( + 'transform', + `translate(${nodeMatrix.x + 2}, ${nodeMatrix.y})` + ) + .select('rect.node') + .attr('width', Configuration.alluvial.nodeWidth); + + // Translate text container back to initial state + if (datum.x0 - 2 === 0) { + const titleContainer = self.parent.select( + `g#node-title-${datum.index}` + ); + const titleMatrix = Tools.getTranformOffsets( + titleContainer.attr('transform') + ); + + titleContainer.attr( + 'transform', + `translate(${titleMatrix.x - 4},${titleMatrix.y})` + ); + } + + self.parent + .select(`text#node-text-${datum.index}`) + .style('font-weight', 'normal'); + + debouncedLineHighlight([], 'mouseout'); + + // Dispatch mouse out event + self.services.events.dispatchEvent( + Events.Alluvial.NODE_MOUSEOUT, + { + event, + element: hoveredElement, + datum, + } + ); + + // Dispatch hide tooltip event + self.services.events.dispatchEvent(Events.Tooltip.HIDE, { + hoveredElement, + }); + }); + } + + // Traverse graph and get all connected links to node + private traverse( + direction: + | { link: 'sourceLinks'; node: 'target' } + | { link: 'targetLinks'; node: 'source' }, + node, + visited = [] + ) { + const links = node[direction.link].map((element) => { + visited.push(element.index); + return element[direction.node]; + }); + + // Retrieve the child nodes + links.forEach((element) => this.traverse(direction, element, visited)); + } + + getRightArrowIcon() { + return ` + + + + `; + } + + // Remove event listeners + destroy() { + this.parent + .selectAll('path.line,.node-group') + .on('mouseover', null) + .on('mousemove', null) + .on('click', null) + .on('mouseout', null); + } +} diff --git a/packages/core/src/components/index.ts b/packages/core/src/components/index.ts index cd19291e46..976e673608 100644 --- a/packages/core/src/components/index.ts +++ b/packages/core/src/components/index.ts @@ -35,6 +35,7 @@ export * from './graphs/treemap'; export * from './graphs/radar'; export * from './graphs/circle-pack'; export * from './graphs/wordcloud'; +export * from './graphs/alluvial'; // Layout export * from './layout/spacer'; diff --git a/packages/core/src/configuration-non-customizable.ts b/packages/core/src/configuration-non-customizable.ts index 85d70e2bd6..aa197d7f3f 100644 --- a/packages/core/src/configuration-non-customizable.ts +++ b/packages/core/src/configuration-non-customizable.ts @@ -193,6 +193,17 @@ export const radar = { dotsRadius: 5, }; +export const alluvial = { + nodeWidth: 4, + nodeHoveredWidth: 8, + minNodePadding: 24, + opacity: { + unfocus: 0.3, + default: 0.8, + selected: 1, + }, +}; + export const spacers = { default: { size: 24, diff --git a/packages/core/src/configuration.ts b/packages/core/src/configuration.ts index f512be66a1..2acfd82592 100644 --- a/packages/core/src/configuration.ts +++ b/packages/core/src/configuration.ts @@ -21,6 +21,7 @@ import { TreemapChartOptions, CirclePackChartOptions, WorldCloudChartOptions, + AlluvialChartOptions, // Components AxisOptions, GridOptions, @@ -578,6 +579,17 @@ const circlePackChart: CirclePackChartOptions = Tools.merge( } as CirclePackChartOptions ); +const alluvialChart: AlluvialChartOptions = Tools.merge({}, chart, { + alluvial: { + data: Tools.merge(chart.data, { + groupMapsTo: 'source', + }), + nodePadding: 24, + monochrome: false, + nodes: [], + }, +} as AlluvialChartOptions); + export const options = { chart, axisChart, @@ -604,6 +616,7 @@ export const options = { treemapChart, circlePackChart, wordCloudChart, + alluvialChart, }; export * from './configuration-non-customizable'; diff --git a/packages/core/src/interfaces/charts.ts b/packages/core/src/interfaces/charts.ts index 0a30e72175..04fb130381 100644 --- a/packages/core/src/interfaces/charts.ts +++ b/packages/core/src/interfaces/charts.ts @@ -467,7 +467,7 @@ export interface TreeChartOptions extends BaseChartOptions { tree?: { type?: TreeTypes; rootTitle?: string; - } + }; } /* @@ -486,3 +486,27 @@ export interface CirclePackChartOptions extends BaseChartOptions { }; }; } + +/** + * options specific to Alluvial charts + */ +export interface AlluvialChartOptions extends BaseChartOptions { + alluvial: { + units?: string; + /** + * List of nodes to draw + */ + nodes: Array<{ + name: string; + category?: string; + }>; + /** + * Set the node padding + */ + nodePadding?: number; + /** + * Enable single color usage for lines + */ + monochrome?: boolean; + }; +} diff --git a/packages/core/src/interfaces/events.ts b/packages/core/src/interfaces/events.ts index d8a02b4648..6ae9559da2 100644 --- a/packages/core/src/interfaces/events.ts +++ b/packages/core/src/interfaces/events.ts @@ -217,6 +217,20 @@ export enum CirclePack { CIRCLE_MOUSEMOVE = 'circle-leaf-mousemove', } +/** + * enum of all alluvial related events + */ +export enum Alluvial { + NODE_MOUSEOVER = 'alluvial-node-mouseover', + NODE_CLICK = 'alluvial-node-click', + NODE_MOUSEOUT = 'alluvial-node-mouseout', + NODE_MOUSEMOVE = 'alluvial-node-mousemove', + LINE_MOUSEOVER = 'alluvial-line-mouseover', + LINE_CLICK = 'alluvial-line-click', + LINE_MOUSEOUT = 'alluvial-line-mouseout', + LINE_MOUSEMOVE = 'alluvial-line-mousemove', +} + /** * enum of all meter related events */ diff --git a/packages/core/src/styles/graphs/_alluvial.scss b/packages/core/src/styles/graphs/_alluvial.scss new file mode 100644 index 0000000000..1dada5ddb8 --- /dev/null +++ b/packages/core/src/styles/graphs/_alluvial.scss @@ -0,0 +1,30 @@ +.#{$prefix}--#{$charts-prefix}--alluvial { + @if $carbon--theme == + $carbon--theme--g90 or + $carbon--theme == + $carbon--theme--g100 + { + rect.node, + rect.node-text-bg { + fill: white; + } + + text.node-text { + fill: black; + } + } + + @if $carbon--theme == + $carbon--theme--g10 or + $carbon--theme == + $carbon--theme--white + { + text.node-text { + fill: white; + } + + polygon.arrow-down { + fill: black; + } + } +} diff --git a/packages/core/src/styles/graphs/index.scss b/packages/core/src/styles/graphs/index.scss index b2390490b8..f3d12bc177 100644 --- a/packages/core/src/styles/graphs/index.scss +++ b/packages/core/src/styles/graphs/index.scss @@ -14,3 +14,4 @@ @import './lollipop'; @import './circle-pack'; @import './wordcloud'; +@import './alluvial'; diff --git a/packages/react/src/alluvial-chart.tsx b/packages/react/src/alluvial-chart.tsx new file mode 100644 index 0000000000..1282cd4d5b --- /dev/null +++ b/packages/react/src/alluvial-chart.tsx @@ -0,0 +1,27 @@ +import React from 'react'; +import { AlluvialChart as AC } from '@carbon/charts'; +import BaseChart from './base-chart'; +import { ChartConfig, AlluvialChartOptions } from '@carbon/charts/interfaces'; + +type AlluvialChartProps = ChartConfig; + +export default class AlluvialChart extends BaseChart { + chartRef!: HTMLDivElement; + props!: AlluvialChartProps; + chart!: AC; + + componentDidMount() { + this.chart = new AC(this.chartRef, { + data: this.props.data, + options: this.props.options, + }); + } + + render() { + return ( +
(this.chartRef = chartRef!)} + className="chart-holder">
+ ); + } +} diff --git a/packages/react/src/index.ts b/packages/react/src/index.ts index ceeb64442d..000c8b8379 100644 --- a/packages/react/src/index.ts +++ b/packages/react/src/index.ts @@ -20,6 +20,7 @@ import TreeChart from './tree-chart'; import TreemapChart from './treemap-chart'; import CirclePackChart from './circle-pack-chart'; import WordCloudChart from './wordcloud-chart'; +import AlluvialChart from './alluvial-chart'; export { AreaChart, @@ -44,4 +45,5 @@ export { TreemapChart, CirclePackChart, WordCloudChart, + AlluvialChart, }; diff --git a/packages/svelte/src/AlluvialChart.svelte b/packages/svelte/src/AlluvialChart.svelte new file mode 100644 index 0000000000..a300e2eb07 --- /dev/null +++ b/packages/svelte/src/AlluvialChart.svelte @@ -0,0 +1,16 @@ + + + diff --git a/packages/svelte/src/index.js b/packages/svelte/src/index.js index 4dd46ad8a4..cd7f9b91f1 100644 --- a/packages/svelte/src/index.js +++ b/packages/svelte/src/index.js @@ -20,6 +20,7 @@ import TreeChart from './TreeChart.svelte'; import TreemapChart from './TreemapChart.svelte'; import CirclePackChart from './CirclePackChart.svelte'; import WordCloudChart from './WordCloudChart.svelte'; +import AlluvialChart from './AlluvialChart.svelte'; export { AreaChart, @@ -44,4 +45,5 @@ export { TreemapChart, CirclePackChart, WordCloudChart, + AlluvialChart, }; diff --git a/packages/vue/src/ccv-alluvial-chart.vue b/packages/vue/src/ccv-alluvial-chart.vue new file mode 100644 index 0000000000..9f73abff28 --- /dev/null +++ b/packages/vue/src/ccv-alluvial-chart.vue @@ -0,0 +1,19 @@ + + + diff --git a/packages/vue/src/index.js b/packages/vue/src/index.js index 7a1999f332..c3304a6a23 100644 --- a/packages/vue/src/index.js +++ b/packages/vue/src/index.js @@ -20,6 +20,7 @@ import CcvTreeChart from './ccv-tree-chart.vue'; import CcvTreemapChart from './ccv-treemap-chart.vue'; import CcvCirclePackChart from './ccv-circle-pack-chart.vue'; import CcvWordCloudChart from './ccv-wordcloud-chart.vue'; +import CcvAlluvialChart from './ccv-alluvial-chart.vue'; const components = [ CcvAreaChart, @@ -44,6 +45,7 @@ const components = [ CcvTreemapChart, CcvCirclePackChart, CcvWordCloudChart, + CcvAlluvialChart, ]; /* @@ -101,4 +103,5 @@ export { CcvTreemapChart, CcvCirclePackChart, CcvWordCloudChart, + CcvAlluvialChart, }; diff --git a/yarn-offline-mirror-cache/d3-array-2.12.1.tgz b/yarn-offline-mirror-cache/d3-array-2.12.1.tgz new file mode 100644 index 0000000000000000000000000000000000000000..dd9c8089621f97895e274d209740e2ae71d53a2e GIT binary patch literal 31975 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 H0N4Tm)nX{` literal 0 HcmV?d00001 diff --git a/yarn-offline-mirror-cache/d3-path-1.0.9.tgz b/yarn-offline-mirror-cache/d3-path-1.0.9.tgz new file mode 100644 index 0000000000000000000000000000000000000000..ebb51dffb31c49f087fa915b63742fa603050a95 GIT binary patch literal 5697 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

U*|HLXMsx~7y9z?J^nkRgLD*#w=8jDz>T_-& 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 literal 0 HcmV?d00001 diff --git a/yarn-offline-mirror-cache/internmap-1.0.1.tgz b/yarn-offline-mirror-cache/internmap-1.0.1.tgz new file mode 100644 index 0000000000000000000000000000000000000000..613695e0992de16955b2537e1c0fb39bafbadb63 GIT binary patch literal 3578 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.1.1" +"d3-array@1 - 2": + version "2.12.1" + resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-2.12.1.tgz#e20b41aafcdffdf5d50928004ececf815a465e81" + integrity sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ== + dependencies: + internmap "^1.0.0" + "d3-array@2 - 3", "d3-array@2.10.0 - 3", "d3-array@2.5.0 - 3", d3-array@3: version "3.0.1" resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-3.0.1.tgz#ca45c263f5bb780ab5a34a6e1d3d5883fe4a8d14" @@ -8223,6 +8230,11 @@ d3-hierarchy@3: dependencies: d3-color "1 - 3" +d3-path@1: + version "1.0.9" + resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-1.0.9.tgz#48c050bb1fe8c262493a8caf5524e3e9591701cf" + integrity sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg== + "d3-path@1 - 3", d3-path@3: version "3.0.1" resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-3.0.1.tgz#f09dec0aaffd770b7995f1a399152bf93052321e" @@ -8243,6 +8255,14 @@ d3-random@3: resolved "https://registry.yarnpkg.com/d3-random/-/d3-random-3.0.1.tgz#d4926378d333d9c0bfd1e6fa0194d30aebaa20f4" integrity sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ== +d3-sankey@0.12.3: + version "0.12.3" + resolved "https://registry.yarnpkg.com/d3-sankey/-/d3-sankey-0.12.3.tgz#b3c268627bd72e5d80336e8de6acbfec9d15d01d" + integrity sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ== + dependencies: + d3-array "1 - 2" + d3-shape "^1.2.0" + d3-scale-chromatic@3: version "3.0.0" resolved "https://registry.yarnpkg.com/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz#15b4ceb8ca2bb0dcb6d1a641ee03d59c3b62376a" @@ -8274,6 +8294,13 @@ d3-shape@3: dependencies: d3-path "1 - 3" +d3-shape@^1.2.0: + version "1.3.7" + resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-1.3.7.tgz#df63801be07bc986bc54f63789b4fe502992b5d7" + integrity sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw== + dependencies: + d3-path "1" + "d3-time-format@2 - 4", d3-time-format@4: version "4.0.0" resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-4.0.0.tgz#930ded86a9de761702344760d8a25753467f28b7" @@ -11788,6 +11815,11 @@ internal-slot@^1.0.2: resolved "https://registry.yarnpkg.com/internmap/-/internmap-2.0.1.tgz#33d0fa016185397549fb1a14ea3dbe5a2949d1cd" integrity sha512-Ujwccrj9FkGqjbY3iVoxD1VV+KdZZeENx0rphrtzmRXbFvkFO88L80BL/zeSIguX/7T+y8k04xqtgWgS5vxwxw== +internmap@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/internmap/-/internmap-1.0.1.tgz#0017cc8a3b99605f0302f2b198d272e015e5df95" + integrity sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw== + interpret@1.2.0, interpret@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296"