{"version":3,"file":"mushonkey.mjs","sources":["../../../projects/mushonkey/src/lib/mushonkey.component.ts","../../../projects/mushonkey/src/lib/mushonkey.module.ts","../../../projects/mushonkey/src/public-api.ts","../../../projects/mushonkey/src/mushonkey.ts"],"sourcesContent":["import {\n  Component, OnInit, OnChanges, ViewChild, ElementRef, Input, ViewEncapsulation, Output,\n  EventEmitter,\n  AfterViewInit\n} from '@angular/core';\nimport { select as d3Select, Selection } from 'd3-selection';\nimport { max as d3Max } from 'd3-array';\nimport { scaleLinear as d3ScaleLinear } from 'd3-scale';\nimport { path as d3Path } from 'd3-path';\n\nconst debug = false;\n\nexport class MushonKeyFlow {\n  public size: number;\n  public scaledSize: number;\n  public label: string;\n  public context: any;\n  public group: MushonKeyFlowGroup;\n  public centerOfs: number;\n  public sideOfs: number;\n\n  constructor(size: number,\n              label: string,\n              context: any)\n  {\n    this.size = size;\n    this.label = label;\n    this.context = context;\n  }\n}\n\nexport class MushonKeyFlowGroup {\n  public leftSide: boolean;\n  public offset: number;\n  public flows: Array<MushonKeyFlow>;\n  public klass: string;\n  public labelTextSize: number;\n  public width: number;\n  public widthPx: number;\n  public slope: number;\n  public roundness: number;\n  public headLength: number;\n  public tailLength: number;\n  public headLengthPx: number;\n  public tailLengthPx: number;\n\n  constructor(leftSide: boolean,\n              flows: Array<MushonKeyFlow>,\n              klass: string,\n              offset?: number,\n              width?: number,\n              slope?: number,\n              roundness?: number,\n              headLength?: number,\n              tailLength?: number,\n              labelTextSize?: number,\n  )\n  {\n    this.leftSide = leftSide;\n    this.flows = flows;\n    this.klass = klass;\n    this.labelTextSize = labelTextSize || 20;\n    this.offset = offset || 200;\n    this.width = width || 1.0;\n    this.slope = slope || 1.0;\n    this.roundness = roundness || 9;\n    this.headLength = headLength || 0.25;\n    this.tailLength = tailLength || 0.25;\n\n    for (let flow of flows) {\n      flow.group = this;\n    }\n  }\n}\n\nexport class MushonKeyChart {\n  public groups: Array<MushonKeyFlowGroup>;\n  public centerText: string;\n  public centerWidth: number;\n  public centerHeight: number;\n  public centerDirectionLeft: boolean;\n  public margin: any;\n  public centerVerticalOffset: number;\n\n  constructor(groups: Array<MushonKeyFlowGroup>,\n              centerText?: string,\n              centerWidth?: number,\n              centerHeight?: number,\n              centerDirectionLeft?: boolean,\n              margin?: any,\n              centerVerticalOffset?: number) {\n    this.groups = groups;\n    this.centerText = centerText || '';\n    this.centerHeight = centerHeight || 150;\n    this.centerWidth = centerWidth || 200;\n    this.centerDirectionLeft = centerDirectionLeft == null ? true : centerDirectionLeft;\n    this.margin = margin || {top: 20, bottom: 20, left: 20, right: 20}\n    this.centerVerticalOffset = centerVerticalOffset || 0;\n  }\n}\n\n@Component({\n    selector: 'mushonkey',\n    template: ``,\n    styles: [`:host {\n      width: 100%;\n      height: 100%;\n      display: block;\n    }\n  `],\n    standalone: false\n})\nexport class MushonkeyComponent implements OnInit, OnChanges, AfterViewInit {\n    // @ViewChild('el') private el: ElementRef;\n    @Input('chart') chart: MushonKeyChart;\n    @Output() onSelected = new EventEmitter<any>();\n\n    private layout: Array<MushonKeyFlow> = [];\n\n    private connectorWidth: number;\n    private center: number;\n    private centerOfs: number;\n    private textIndent: number = 30;\n\n    private minSideHeight: number = 20;\n    private sideSeparation: number = 30;\n    private centerSeparation: number = 1;\n\n    // private slope: number = 1.5;\n    private centerScaleRight: any;\n    private centerScaleLeft: any;\n\n    private d3Chart: Selection<SVGGElement, unknown, null, undefined>;\n    private width: number;\n    private height: number;\n\n    constructor(private el: ElementRef) {}\n\n    update() {\n      if (!this.el?.nativeElement) {\n        return;\n      }\n      if (this.chart) {\n        if (!this.d3Chart) {\n          this.createChart();\n        }\n        if (this.d3Chart) {\n          this.updateChart();\n        }\n      }\n    }\n\n    ngOnInit() {\n      this.update();\n    }\n\n    ngOnChanges() {\n      this.update();\n    }\n\n    ngAfterViewInit() {\n      this.update();\n    }\n\n    createChart() {\n      const element = this.el.nativeElement;\n      this.width = element.offsetWidth - this.chart.margin.left - this.chart.margin.right;\n      this.height = element.offsetHeight - this.chart.margin.top - this.chart.margin.bottom;\n      this.connectorWidth = this.width / 2;\n\n      const svg = d3Select(element).append('svg')\n        .attr('width', element.offsetWidth)\n        .attr('height', element.offsetHeight);\n\n      // chart plot area\n      this.d3Chart = svg.append('g')\n        .attr('class', 'mushonkey')\n        .attr('transform', `translate(${this.chart.margin.left}, ${this.chart.margin.top})`);\n      this.d3Chart.append('g')\n        .attr('class', 'connectors');\n      this.d3Chart.append('g')\n        .attr('class', 'centerpiece-container');\n      this.d3Chart.append('g')\n        .attr('class', 'labels');\n    }\n\n    processData() {\n        let leftSum = 0,\n            rightSum = 0,\n            leftCount = 0,\n            rightCount= 0;\n        let groups = this.chart.groups;\n        for (let group of groups) {\n          group.widthPx = group.width * this.connectorWidth;\n          group.widthPx -= this.chart.centerWidth / 2;\n          group.headLengthPx = group.headLength * group.widthPx;\n          group.tailLengthPx = group.tailLength * group.widthPx;\n          for (let flow of group.flows) {\n            if (group.leftSide) {\n              leftCount += 1;\n              leftSum += flow.size;\n            } else {\n              rightCount += 1;\n              rightSum += flow.size;\n            }\n          }\n        }\n        if (leftSum == 0) { leftSum = 1; }\n        if (rightSum == 0) { rightSum = 1; }\n        if (leftCount == 0) { leftCount = 1; }\n        if (rightCount == 0) { rightCount = 1; }\n\n        this.centerScaleLeft = d3ScaleLinear().domain([0, leftSum]).range([0, this.chart.centerHeight - this.centerSeparation*(leftCount - 1)]);\n        this.centerScaleRight = d3ScaleLinear().domain([0, rightSum]).range([0, this.chart.centerHeight - this.centerSeparation*(rightCount - 1)]);\n\n        if (this.chart.centerVerticalOffset) {\n          this.centerOfs = this.chart.centerVerticalOffset;\n        } else {\n          if (this.chart.groups.length > 0) {\n            this.centerOfs = <number>d3Max(this.chart.groups, g => -g.offset);\n          } else {\n            this.centerOfs = 0;\n          }\n        }\n        this.centerOfs = this.centerOfs < 0 ? 0 : this.centerOfs;\n        this.center = this.centerOfs + this.chart.centerHeight / 2;\n\n        let leftOfs = {\n          centerOfs: this.centerOfs,\n          sideOfs: 0\n        };\n\n        let rightOfs = {\n          centerOfs: this.centerOfs,\n          sideOfs: 0\n        };\n\n        this.layout=[];\n        for (let group of groups) {\n          let ofs = group.leftSide ? leftOfs : rightOfs;\n          ofs.sideOfs = this.center + group.offset;\n          for (let flow of group.flows) {\n            let scaledWidth;\n            if (group.leftSide) {\n              scaledWidth = this.centerScaleLeft(flow.size);\n            } else {\n              scaledWidth = this.centerScaleRight(flow.size);\n            }\n            flow.scaledSize = scaledWidth;\n            flow.centerOfs = ofs.centerOfs + scaledWidth/2;\n            flow.sideOfs = ofs.sideOfs + scaledWidth/2;\n            this.layout.push(flow);\n            ofs.centerOfs += scaledWidth + this.centerSeparation;\n            ofs.sideOfs += <number>d3Max([scaledWidth + this.sideSeparation, this.minSideHeight])\n          }\n        }\n\n    }\n\n    generatePath(d: MushonKeyFlow) {\n      let p=d3Path();\n      let diffY = d.sideOfs - d.centerOfs,\n          down = diffY > 0 ? 1 : -1,\n          r = d.group.headLengthPx / Math.tan(Math.atan(1/d.group.slope) / 2),\n          refy = down == 1 ? this.centerOfs : this.centerOfs + this.chart.centerHeight,\n          ry = refy + down * r,\n          diffXtop = Math.abs(d.group.slope * diffY),\n          head = d.group.headLengthPx * Math.abs(ry - d.centerOfs) / r\n        ;\n      if (diffXtop > d.group.widthPx - d.group.tailLengthPx - head) {\n        diffXtop = d.group.widthPx - d.group.tailLengthPx - head;\n      }\n      let right = d.group.leftSide ? -1 : 1,\n          slope = Math.abs(diffXtop / diffY),\n          x0 = this.connectorWidth,\n          x1 = x0 + right * this.chart.centerWidth/2,\n          x2 = x1 + right * head,\n          x3 = x2 + right * diffXtop,\n          x4 = x1 + right * d.group.widthPx,\n          y1 = d.centerOfs,\n          y2 = d.sideOfs,\n\n          ta =  (Math.atan(-down/slope) - Math.PI/2),\n\n          c1y = down == 1 ?\n            ((this.centerOfs + this.chart.centerHeight) * d.group.roundness + ry)/(d.group.roundness+1) :\n            ((this.centerOfs * d.group.roundness) + ry) / (d.group.roundness+1),\n          c1x = x1 + right * Math.abs(c1y-ry) / r * d.group.headLengthPx,\n\n          r1 = Math.abs(c1y - y1),\n\n          r2 = r1,\n\n          c2x = x3 - (c1x - x2),\n          c2y = y2 - down * r2\n        ;\n\n      const lw = 0;//.5;\n      p.moveTo(x0, y1 );\n      if (debug) {\n        p.lineTo(x2, y1);\n        // p.lineTo(x1, ry);\n        // p.lineTo(x2, y1);\n        p.lineTo(c1x, c1y);\n        p.lineTo(x2, y1);\n        p.lineTo(x1, y1 );\n      }\n      if (right == 1) {\n        if (down == 1) {\n          p.arc(c1x, c1y, r1, 3*Math.PI/2, -ta + Math.PI, false);\n          p.arc(c2x, c2y, r2, -ta, Math.PI/2, true);\n        } else {\n          p.arc(c1x, c1y, r1, Math.PI/2, -ta, true);\n          p.arc(c2x, c2y, r2, -ta - Math.PI, -Math.PI/2, false);\n        }\n      } else {\n        if (down == 1) {\n          p.arc(c1x, c1y, r1, -Math.PI/2, ta, true);\n          p.arc(c2x, c2y, r2, ta + Math.PI, Math.PI/2, false);\n        } else {\n          p.arc(c1x, c1y, r1, Math.PI/2, ta + Math.PI, false);\n          p.arc(c2x, c2y, r2, ta, -Math.PI/2, true);\n        }\n      }\n      if (debug) {\n        p.lineTo(x3, y2);\n        p.lineTo(c2x, c2y);\n        p.lineTo(x3, y2);\n      }\n      p.lineTo(x4, y2);\n      return p.toString();\n    }\n\n    updateChart(chart?: MushonKeyChart) {\n\n      if (chart) {\n        this.chart = chart;\n      }\n\n      this.processData();\n\n      let connectorsUpdate = this.d3Chart.select('g.connectors').selectAll<SVGElement, MushonKeyFlow>('.connector')\n        .data(this.layout, (d: MushonKeyFlow) => d.label);\n      let labelsUpdate = this.d3Chart.select('g.labels').selectAll<SVGElement, MushonKeyFlow>('.text')\n        .data(this.layout, (d: MushonKeyFlow) => d.label);\n\n      // remove exiting connectors\n      connectorsUpdate.exit().remove();\n      labelsUpdate.exit().remove();\n\n      // add new bars\n      connectorsUpdate.enter()\n        .append('path')\n        .attr('class', 'connector')\n        .style('fill', 'none');\n\n      labelsUpdate.enter()\n        .append('text')\n        .attr('class', 'text')\n        .style('paint-order', 'stroke')\n        .style('stroke-linejoin', 'round')\n        .style('alignment-baseline', 'middle')\n        .on('click', (event: Event, d: MushonKeyFlow) => { \n          // console.log('MushonKey clicked', d.context);\n          if (d.context) { this.onSelected.emit(d.context); } \n        });\n\n      connectorsUpdate = this.d3Chart.select('g.connectors').selectAll<SVGElement, MushonKeyFlow>('.connector')\n        .data(this.layout, (d: MushonKeyFlow) => d.label);\n      labelsUpdate = this.d3Chart.select('g.labels').selectAll<SVGElement, MushonKeyFlow>('.text')\n        .data(this.layout, (d: MushonKeyFlow) => d.label);\n\n      connectorsUpdate\n          .attr('d', (d: any) => this.generatePath(d))\n          .attr('class', (d: any) => 'connector ' + d.group.klass)\n          .style('stroke-width', (d: any) => debug ? 1 : d.scaledSize+0.5)\n      ;\n\n      labelsUpdate\n        .attr('y', (d: any) => d.sideOfs)\n        .attr('x', (d: any) => d.group.leftSide ?\n          this.connectorWidth - this.chart.centerWidth/2 - d.group.widthPx + this.textIndent :\n          this.connectorWidth + this.chart.centerWidth/2 + d.group.widthPx - this.textIndent)\n        .attr('class', (d: any) => 'text ' + d.group.klass)\n        .style('cursor', (d: any) => d.context ? 'pointer' : 'inherit')\n        .style('text-anchor', (d: any) => d.group.leftSide ? 'start' : 'end' )\n        .style('fill', (d: any) =>  d.group.textColor )\n        .style('font-size', (d: any) => d.group.labelTextSize)\n        .style('stroke', (d: any) => d.scaledSize < d.group.labelTextSize ? 'white': 'none' )\n        .style('stroke-width', (d: any) => d.group.labelTextSize/2)\n        .text((d: MushonKeyFlow) => { return d.label; });\n\n      this.drawCenter();\n    }\n\n    drawCenter() {\n      let arrowOfs = this.chart.centerDirectionLeft ? -this.chart.centerHeight/3: this.chart.centerHeight/3;\n      let centerPath = d3Path();\n      centerPath.moveTo(this.connectorWidth - this.chart.centerWidth/2, this.centerOfs);\n      centerPath.lineTo(this.connectorWidth + this.chart.centerWidth/2, this.centerOfs);\n      centerPath.lineTo(this.connectorWidth + this.chart.centerWidth/2 + arrowOfs, this.centerOfs + this.chart.centerHeight/2);\n      centerPath.lineTo(this.connectorWidth + this.chart.centerWidth/2, this.centerOfs + this.chart.centerHeight);\n      centerPath.lineTo(this.connectorWidth - this.chart.centerWidth/2, this.centerOfs + this.chart.centerHeight);\n      centerPath.lineTo(this.connectorWidth - this.chart.centerWidth/2 + arrowOfs, this.centerOfs + this.chart.centerHeight/2);\n      centerPath.closePath();\n\n      let center = this.d3Chart.select('g.centerpiece-container');\n\n      this.d3Chart.select('g.centerpiece-container')\n        .selectAll('path')\n        .data([1])\n        .enter()\n        .append('path')\n        .attr('class', 'centerpiece')\n      ;\n      this.d3Chart.select('g.centerpiece-container')\n        .selectAll('path')\n        .data([1])\n        .attr('d', centerPath.toString())\n      ;\n      this.d3Chart.select('g.centerpiece-container')\n        .selectAll('text')\n        .data([1])\n        .enter()\n        .append('text')\n        .attr('class', 'centerpiece-text')\n        .style('alignment-baseline', 'middle')\n        .style('text-anchor', 'middle')\n      ;\n      this.d3Chart.select('g.centerpiece-container')\n        .selectAll('text')\n        .data([1])\n        .text(this.chart.centerText)\n        .attr('x', this.connectorWidth + arrowOfs)\n        .attr('y', this.centerOfs + this.chart.centerHeight/2)\n      ;\n    }\n}","import { NgModule } from '@angular/core';\nimport { MushonkeyComponent } from './mushonkey.component';\n\n\n\n@NgModule({\n  declarations: [\n    MushonkeyComponent\n  ],\n  imports: [\n  ],\n  exports: [\n    MushonkeyComponent\n  ]\n})\nexport class MushonkeyModule { }\n","/*\n * Public API Surface of mushonkey\n */\n\nexport * from './lib/mushonkey.component';\nexport * from './lib/mushonkey.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["d3Select","d3ScaleLinear","d3Max","d3Path"],"mappings":"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"}