{"version":3,"file":"rfprodz-client-d3-charts.mjs","sources":["../../../../libs/client-d3-charts/src/lib/util/configuration.util.ts","../../../../libs/client-d3-charts/src/lib/util/bar-chart.util.ts","../../../../libs/client-d3-charts/src/lib/util/force-directed-chart.util.ts","../../../../libs/client-d3-charts/src/lib/util/gauge-chart.util.ts","../../../../libs/client-d3-charts/src/lib/util/line-chart.util.ts","../../../../libs/client-d3-charts/src/lib/util/pie-chart.util.ts","../../../../libs/client-d3-charts/src/lib/util/radar-chart.util.ts","../../../../libs/client-d3-charts/src/lib/providers/d3-chart-factory.provider.ts","../../../../libs/client-d3-charts/src/lib/components/_base/chart.base.ts","../../../../libs/client-d3-charts/src/lib/components/bar-chart/bar-chart.component.ts","../../../../libs/client-d3-charts/src/lib/components/bar-chart/bar-chart.component.html","../../../../libs/client-d3-charts/src/lib/components/line-chart/line-chart.component.ts","../../../../libs/client-d3-charts/src/lib/components/line-chart/line-chart.component.html","../../../../libs/client-d3-charts/src/lib/components/chart-examples-line/chart-examples-line.component.ts","../../../../libs/client-d3-charts/src/lib/components/chart-examples-line/chart-examples-line.component.html","../../../../libs/client-d3-charts/src/lib/components/radar-chart/radar-chart.component.ts","../../../../libs/client-d3-charts/src/lib/components/radar-chart/radar-chart.component.html","../../../../libs/client-d3-charts/src/lib/components/chart-examples-radar/chart-examples-radar.component.ts","../../../../libs/client-d3-charts/src/lib/components/chart-examples-radar/chart-examples-radar.component.html","../../../../libs/client-d3-charts/src/lib/components/chart-examples-bar/chart-examples-bar.component.ts","../../../../libs/client-d3-charts/src/lib/components/chart-examples-bar/chart-examples-bar.component.html","../../../../libs/client-d3-charts/src/lib/components/pie-chart/pie-chart.component.ts","../../../../libs/client-d3-charts/src/lib/components/pie-chart/pie-chart.component.html","../../../../libs/client-d3-charts/src/lib/components/chart-examples-pie/chart-examples-pie.component.ts","../../../../libs/client-d3-charts/src/lib/components/chart-examples-pie/chart-examples-pie.component.html","../../../../libs/client-d3-charts/src/lib/components/gauge-chart/gauge-chart.component.ts","../../../../libs/client-d3-charts/src/lib/components/gauge-chart/gauge-chart.component.html","../../../../libs/client-d3-charts/src/lib/components/chart-examples-gauge/chart-examples-gauge.component.ts","../../../../libs/client-d3-charts/src/lib/components/chart-examples-gauge/chart-examples-gauge.component.html","../../../../libs/client-d3-charts/src/lib/components/force-directed-chart/force-directed-chart.component.ts","../../../../libs/client-d3-charts/src/lib/components/force-directed-chart/force-directed-chart.component.html","../../../../libs/client-d3-charts/src/lib/components/chart-examples-force-directed/chart-examples-force-directed.component.ts","../../../../libs/client-d3-charts/src/lib/components/chart-examples-force-directed/chart-examples-force-directed.component.html","../../../../libs/client-d3-charts/src/lib/components/chart-examples/chart-examples.component.ts","../../../../libs/client-d3-charts/src/lib/components/chart-examples/chart-examples.component.html","../../../../libs/client-d3-charts/src/lib/d3-charts.module.ts","../../../../libs/client-d3-charts/src/rfprodz-client-d3-charts.ts"],"sourcesContent":["/**\n * Generates a configuration object based on a defaut configuration and an options object.\n * @param config the default object with all properties\n * @param options the input object\n * @param result the output object\n */\nexport const generateConfiguration = <T>(\n  config: T,\n  options: Partial<T & Record<string, unknown>> | undefined,\n  result: Record<string, unknown>,\n) => {\n  const defaultConfiguration = config as Record<string, unknown>;\n\n  if (typeof options === 'undefined') {\n    return config;\n  }\n  const keys = Object.keys(defaultConfiguration);\n  for (const key of keys) {\n    const defaultValue = defaultConfiguration[key];\n    const value = options[key];\n    const typedKey: keyof typeof defaultConfiguration = key;\n    if (typeof defaultValue === 'string' || typeof defaultValue === 'number' || typeof defaultValue === 'boolean') {\n      result[typedKey] = typeof value !== 'undefined' ? value : defaultValue;\n    } else if (defaultValue instanceof Function) {\n      result[typedKey] = defaultValue;\n    } else if (typeof defaultValue === 'object' && defaultValue !== null) {\n      const nestedDefaultObject = defaultValue as Record<string, unknown>;\n      const nestedObject = value as Record<string, unknown>;\n      result[typedKey] = generateConfiguration(nestedDefaultObject, nestedObject, {});\n    }\n  }\n  return result as T;\n};\n","import type { ElementRef } from '@angular/core';\nimport * as d3 from 'd3';\n\nimport type { IBarChartDataNode, IBarChartOptions, TBarChartData } from '../interfaces/bar-chart.interface';\nimport { generateConfiguration } from './configuration.util';\n\n/**\n * The bar chart default configuration.\n */\nexport const defaultBarChartConfig: IBarChartOptions = Object.freeze({\n  chartTitle: '',\n  width: 350,\n  height: 350,\n  margin: {\n    top: 70,\n    right: 50,\n    bottom: 50,\n    left: 50,\n  },\n  transitionDuration: 400,\n  xAxisPadding: 0.4,\n  xAxisTitle: '',\n  yAxisTitle: '',\n  yAxisTicks: 10,\n  displayAxisLabels: true,\n  labelTextWrapWidth: 60, // the number of pixels after which a label needs to be given a new line\n  color: d3.scaleOrdinal(d3.schemeCategory10),\n} as IBarChartOptions);\n\n/**\n * Creates a container for the bar chart.\n * @param container the chart container\n * @param config the chart configuration\n * @returns the object with the svg element and the g element\n */\nconst createContainer = (container: ElementRef<HTMLDivElement>, config: IBarChartOptions) => {\n  const id = container.nativeElement.id ?? 'bar-0';\n\n  d3.select(`#${id}`).select('svg').remove();\n  const svg = d3\n    .select(`#${id}`)\n    .append('svg')\n    .attr('width', config.width + config.margin.left + config.margin.right)\n    .attr('height', config.height + config.margin.top + config.margin.bottom)\n    .attr('class', id);\n  const g = svg.append('g').attr('transform', `translate(${config.margin.left},${config.margin.top / 2})`);\n\n  return { svg, g };\n};\n\n/**\n * Wraps the bar chart axis labels text.\n * @param svgText the svg text elements\n * @param width the chart axis label width\n */\nconst wrapSvgText = (svgText: d3.Selection<d3.BaseType, unknown, SVGGElement, unknown>, width: number) => {\n  svgText.each(function (this: d3.BaseType) {\n    const text = d3.select<d3.BaseType, string>(this);\n    const words = text.text().split(/\\s+/).reverse();\n    if (words.length > 1) {\n      let line: string[] = [];\n      let lineNumber = 0;\n      const lineHeight = 1.4;\n      const y = text.attr('y');\n      const x = text.attr('x');\n      const dy = parseFloat(text.attr('dy') ?? 0);\n      let tspan = text.text(null).append('tspan').attr('x', x).attr('y', y).attr('dy', `${dy}em`); // axis label\n\n      let word = words.pop();\n\n      while (typeof word !== 'undefined') {\n        line.push(word ?? '');\n        tspan.text(line.join(' '));\n        if ((tspan.node()?.getComputedTextLength() ?? 0) > width) {\n          line.pop();\n          tspan.text(line.join(' '));\n          line = [word ?? ''];\n          tspan = text\n            .append('tspan')\n            .attr('x', 0)\n            .attr('y', y)\n            .attr('dy', `${lineNumber * lineHeight + dy}em`)\n            .text(word ?? '');\n          lineNumber += 1;\n        }\n        word = words.pop();\n      }\n    }\n  });\n};\n\n/**\n * Creates the legend.\n * @param g the svg g element\n * @param config the chart configuration\n */\nconst createLegend = (g: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>, config: IBarChartOptions) => {\n  if (config.displayAxisLabels && config.xAxisTitle !== '') {\n    g.append('g')\n      .attr('transform', `translate(0, ${config.height + config.margin.bottom})`)\n      .append('text')\n      .style('font-size', '12px')\n      .attr('class', 'legend')\n      .attr('dx', '1.5em')\n      .attr('dy', '1em')\n      .text(`x - ${config.xAxisTitle}`);\n  }\n\n  if (config.displayAxisLabels && config.yAxisTitle !== '') {\n    g.append('g')\n      .attr('transform', `translate(0, ${config.height + config.margin.bottom})`)\n      .append('text')\n      .style('font-size', '12px')\n      .attr('class', 'legend')\n      .attr('dx', '1.5em')\n      .attr('dy', '2.5em')\n      .text(`y - ${config.yAxisTitle}`);\n  }\n\n  if (config.chartTitle !== '') {\n    g.append('g')\n      .attr('transform', `translate(0, 0)`)\n      .append('text')\n      .style('font-size', '12px')\n      .attr('class', 'legend')\n      .attr('dx', '1.5em')\n      .attr('dy', '-2em')\n      .text(config.chartTitle);\n  }\n};\n\n/**\n * Creates the x axis.\n * @param g the svg g element\n * @param x the x axis scale\n * @param config the chart configuration\n */\nconst createAxisX = (g: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>, x: d3.ScaleBand<string>, config: IBarChartOptions) => {\n  const xLabels = g.append('g').attr('transform', `translate(0, ${config.height})`).call(d3.axisBottom(x)).append('text');\n\n  g.selectAll('text').call(wrapSvgText, config.labelTextWrapWidth);\n\n  if (config.displayAxisLabels) {\n    xLabels.attr('transform', `translate(${config.width}, 0)`).attr('class', 'legend').attr('dx', '1.5em').attr('dy', '0.7em').text('x');\n  }\n};\n\n/**\n * Creates the y axis.\n * @param g the svg g element\n * @param y the y axis scale\n * @param config the chart configuration\n */\nconst createAxisY = (\n  g: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>,\n  y: d3.ScaleLinear<number, number>,\n  config: IBarChartOptions,\n) => {\n  const yLabels = g\n    .append('g')\n    .call(\n      d3\n        .axisLeft(y)\n        .tickFormat(function (d) {\n          return `${d}`;\n        })\n        .ticks(config.yAxisTicks),\n    )\n    .append('text');\n\n  if (config.displayAxisLabels) {\n    yLabels.attr('dy', '-1.5em').attr('class', 'legend').text('y');\n  }\n};\n\n/**\n * The mouse over event handler.\n * @param self an svg rect element\n * @param d the chart data node\n * @param g the svg g element\n * @param x the x axis scale\n * @param y the y axis scale\n * @param config the chart configuration\n */\nconst onMouseOver = (\n  self: SVGRectElement,\n  d: IBarChartDataNode,\n  g: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>,\n  x: d3.ScaleBand<string>,\n  y: d3.ScaleLinear<number, number>,\n  config: IBarChartOptions,\n) => {\n  const widthModifier = 5;\n  d3.select(self)\n    .transition()\n    .duration(config.transitionDuration)\n    .attr('width', x.bandwidth() + widthModifier)\n    .attr('y', function () {\n      const modifier = 10;\n      return y(d.value) - modifier;\n    })\n    .attr('height', function () {\n      const modifier = 10;\n      return config.height - y(d.value) + modifier;\n    });\n\n  g.append('text')\n    .attr('class', 'chart-tooltip')\n    .style('font-size', '11px')\n    .attr('x', () => x(d.title) ?? '')\n    .attr('y', function () {\n      const modifier = 15;\n      return y(d.value) - modifier;\n    })\n    .text(() => d.value);\n};\n\n/**\n * The mouse out event handler.\n * @param self an svg rect element\n * @param d the chart data node\n * @param x the x axis scale\n * @param y the y axis scale\n * @param config the chart configuration\n */\nconst onMouseOut = (\n  self: SVGRectElement,\n  d: IBarChartDataNode,\n  x: d3.ScaleBand<string>,\n  y: d3.ScaleLinear<number, number>,\n  config: IBarChartOptions,\n) => {\n  d3.select(self).attr('class', 'bar');\n  d3.select(self)\n    .transition()\n    .duration(config.transitionDuration)\n    .attr('width', x.bandwidth())\n    .attr('y', () => y(d.value) ?? 0)\n    .attr('height', () => config.height - (y(d.value) ?? 0));\n\n  d3.selectAll('.chart-tooltip').remove();\n};\n\n/**\n * Draws the chart bars, and sets the mouse pointer events.\n * @param g the svg g element\n * @param x the x axis scale\n * @param y the y axis scale\n * @param config the chart configuration\n * @param data the chart data\n */\nconst drawBarsAndSetPointerEvents = (\n  g: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>,\n  x: d3.ScaleBand<string>,\n  y: d3.ScaleLinear<number, number>,\n  config: IBarChartOptions,\n  data: TBarChartData,\n) => {\n  const duration = 400;\n  g.selectAll('.bar')\n    .data(data)\n    .enter()\n    .append('rect')\n    .attr('class', 'bar')\n    .style('fill', (d, i) => config.color(i.toString()))\n    .on('mouseover', function (this, event, d) {\n      return onMouseOver(this, d, g, x, y, config);\n    })\n    .on('mouseout', function (this, event, d) {\n      return onMouseOut(this, d, x, y, config);\n    })\n    .attr('x', d => x(d.title) ?? '')\n    .attr('y', d => y(d.value))\n    .attr('width', x.bandwidth())\n    .transition()\n    .ease(d3.easeLinear)\n    .duration(duration)\n    .delay(function (d, i) {\n      const multiplier = 50;\n      return i * multiplier;\n    })\n    .attr('height', d => config.height - y(d.value));\n};\n\n/**\n * Draws the bar chart.\n * @param container the chart container\n * @param data the chart data\n * @param options the chart options\n * @returns the chart configuration\n */\nexport const drawBarChart = (container: ElementRef<HTMLDivElement>, data: TBarChartData, options?: Partial<IBarChartOptions>) => {\n  const config: IBarChartOptions = generateConfiguration<IBarChartOptions>(defaultBarChartConfig, options, {});\n\n  const { g } = createContainer(container, config);\n\n  const x = d3\n    .scaleBand([0, config.width])\n    .padding(config.xAxisPadding)\n    .domain(data.map(d => d.title));\n  const y = d3.scaleLinear([config.height, 0]).domain([0, d3.max(data, d => d.value) ?? 1]);\n\n  createAxisX(g, x, config);\n\n  createAxisY(g, y, config);\n\n  createLegend(g, config);\n\n  drawBarsAndSetPointerEvents(g, x, y, config, data);\n\n  return config;\n};\n","import type { ElementRef } from '@angular/core';\nimport * as d3 from 'd3';\n\nimport type {\n  IForceDirectedChartData,\n  IForceDirectedChartDataNode,\n  IForceDirectedChartOptions,\n} from '../interfaces/force-directed-chart.interface';\nimport { generateConfiguration } from './configuration.util';\n\n/**\n * The force directed chart default configuration.\n */\nexport const defaultForceDirectedChartConfig: IForceDirectedChartOptions = Object.freeze({\n  chartTitle: '',\n  width: 600,\n  height: 600,\n  centerCalcMod: 1.6,\n  charge: {\n    strength: -10,\n    theta: 0.6,\n    distanceMax: 2000,\n  },\n  distance: 75,\n  fontSize: 10,\n  collisionRadius: 30,\n  margin: {\n    top: 20,\n    right: 20,\n    bottom: 20,\n    left: 20,\n  },\n  linkStrokeColor: 'lightgray',\n  linkStrokeWidth: 1.5,\n  labelTextWrapWidth: 60,\n  color: d3.scaleOrdinal(d3.schemeCategory10),\n  nodeColor: '#f00000',\n  nodeStrokeColor: 'lightgray',\n  nodeStrokeWidth: 1,\n});\n\n/**\n * The force durected chart tick handler.\n * @param link chart links\n * @param node chart nodes\n * @param text chart text\n * @returns rotation angle\n */\nconst ticked = (\n  link?: d3.Selection<SVGLineElement, d3.SimulationLinkDatum<IForceDirectedChartDataNode>, SVGSVGElement, unknown>,\n  node?: d3.Selection<SVGCircleElement, IForceDirectedChartDataNode, SVGSVGElement, unknown>,\n  text?: d3.Selection<SVGTextElement, IForceDirectedChartDataNode, SVGGElement, unknown>,\n) => {\n  if (typeof link !== 'undefined') {\n    link\n      .attr('x1', d => (d.source as { x: number; y: number }).x ?? 0)\n      .attr('y1', d => (d.source as { x: number; y: number }).y ?? 0)\n      .attr('x2', d => (d.target as { x: number; y: number }).x ?? 0)\n      .attr('y2', d => (d.target as { x: number; y: number }).y ?? 0);\n  }\n\n  if (typeof node !== 'undefined') {\n    node.attr('cx', d => d.x ?? 0).attr('cy', d => d.y ?? 0);\n  }\n\n  if (typeof text !== 'undefined') {\n    const dx = 10;\n    const dy = 5;\n    text.attr('x', d => (d.x ?? 0) + dx).attr('y', d => (d.y ?? 0) - dy);\n  }\n\n  return 'rotate(0)';\n};\n\n/**\n * Creates a container for the force directed chart.\n * @param container the chart container\n * @param config the chart configuration\n * @returns the object with the svg element and the g element\n */\nconst createContainer = (container: ElementRef<HTMLDivElement>, config: IForceDirectedChartOptions) => {\n  const id = container.nativeElement.id ?? 'force-directed-0';\n\n  d3.select(`#${id}`).select('svg').remove();\n  const svg = d3\n    .select(`#${id}`)\n    .append('svg')\n    .attr('width', config.width + config.margin.left + config.margin.right)\n    .attr('height', config.height + config.margin.top + config.margin.bottom)\n    .attr('class', id);\n  const g = svg\n    .append('g')\n    .attr('transform', `translate(${config.width / 2 + config.margin.left},${config.height / 2 + config.margin.top})`);\n\n  return { svg, g };\n};\n\n/**\n * Applies the force directed chart data.\n * @param g the svg g element\n * @param data the chart data\n */\nconst applyChartData = (g: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>, data: IForceDirectedChartData) => {\n  const imageXY = 10;\n  g.append('defs')\n    .selectAll('pattern')\n    .data(data.entities)\n    .enter()\n    .append('pattern')\n    .attr('id', (val, i) => `img-${val.index}`)\n    .attr('x', 0)\n    .attr('y', 0)\n    .attr('height', val => {\n      const baseValue = 30;\n      return baseValue + val.linksCount * 2;\n    })\n    .attr('width', val => {\n      const baseValue = 30;\n      return baseValue + val.linksCount * 2;\n    })\n    .append('image')\n    .attr('x', imageXY)\n    .attr('y', imageXY)\n    .attr('height', val => {\n      const baseValue = 30;\n      return baseValue + val.linksCount * 2;\n    })\n    .attr('width', val => {\n      const baseValue = 30;\n      return baseValue + val.linksCount * 2;\n    })\n    .attr('xlink:href', val => val.img);\n};\n\n/**\n * Creates the force directed chart links.\n * @param svg the svg element\n * @param config the chart configuration\n * @param data the chart data\n * @returns the chart links\n */\nconst createLinks = (\n  svg: d3.Selection<SVGSVGElement, unknown, HTMLElement, unknown>,\n  config: IForceDirectedChartOptions,\n  data: IForceDirectedChartData,\n) => {\n  return svg\n    .selectAll('.link')\n    .data(data.links)\n    .enter()\n    .append('line')\n    .attr('class', 'link')\n    .style('stroke', config.linkStrokeColor)\n    .style('stroke-width', config.linkStrokeWidth);\n};\n\n/**\n * Creates the force directed chart forces.\n * @param config the chart configuration\n * @param data the chart data\n * @returns the chart forces\n */\nconst createForces = (config: IForceDirectedChartOptions, data: IForceDirectedChartData) => {\n  return d3\n    .forceSimulation(data.nodes)\n    .force(\n      'link',\n      d3.forceLink().id(d => d.index ?? 0),\n    )\n    .force('charge', d3.forceManyBody().strength(config.charge.strength).theta(config.charge.theta).distanceMax(config.charge.distanceMax))\n    .force('center', d3.forceCenter(config.width / config.centerCalcMod, config.height / config.centerCalcMod))\n    .force(\n      'collision',\n      d3.forceCollide().radius(d => config.collisionRadius),\n    )\n    .force(\n      'link',\n      d3\n        .forceLink(data.links)\n        .id(d => d.index ?? 0)\n        .distance(config.distance)\n        .links(data.links),\n    );\n};\n\n/**\n * The force directed chart node drag start handler.\n * @param event a drag event\n * @param datum the chart data\n * @param force the chart forces\n */\nconst nodeDragStartHandler = (\n  event: d3.D3DragEvent<SVGCircleElement, IForceDirectedChartDataNode, unknown>,\n  datum: IForceDirectedChartDataNode,\n  force: d3.Simulation<IForceDirectedChartDataNode, undefined>,\n) => {\n  if (!event.active && typeof force !== 'undefined') {\n    const alphaTarget = 0.3;\n    force.alphaTarget(alphaTarget).restart();\n  }\n  datum.fx = event.x;\n  datum.fy = event.y;\n};\n\n/**\n * The force directed chart node drag handler.\n * @param event a drag event\n * @param datum the chart data\n * @param config the chart configuration\n */\nconst nodeDragHandler = (\n  event: d3.D3DragEvent<SVGCircleElement, IForceDirectedChartDataNode, unknown>,\n  datum: IForceDirectedChartDataNode,\n  config: IForceDirectedChartOptions,\n) => {\n  datum.fx = event.x > config.margin.left && event.x < config.width + config.margin.right ? event.x : datum.fx;\n  datum.fy = event.y > config.margin.top && event.y < config.width + config.margin.bottom ? event.y : datum.fy;\n};\n\n/**\n * The force directed chart node drag end handler.\n * @param event a drag event\n * @param datum the chart data\n * @param force the chart forces\n */\nconst nodeDragEndHandler = (\n  event: d3.D3DragEvent<SVGCircleElement, IForceDirectedChartDataNode, unknown>,\n  datum: IForceDirectedChartDataNode,\n  force: d3.Simulation<IForceDirectedChartDataNode, undefined>,\n) => {\n  if (!event.active && typeof force !== 'undefined') {\n    force.alphaTarget(0);\n  }\n  datum.fx = null;\n  datum.fy = null;\n};\n\n/**\n * Creates the force directed chart nodes.\n * @param svg the svg element\n * @param data the chart data\n * @param force the chart forces\n * @param config the chart configuration\n * @returns the chart nodes\n */\nconst createNodes = (\n  svg: d3.Selection<SVGSVGElement, unknown, HTMLElement, unknown>,\n  data: IForceDirectedChartData,\n  force: d3.Simulation<IForceDirectedChartDataNode, undefined>,\n  config: IForceDirectedChartOptions,\n) => {\n  const base = 5;\n  return svg\n    .selectAll('.node')\n    .data(data.nodes)\n    .enter()\n    .append('circle')\n    .attr('class', 'node')\n    .attr('r', node => base + ((node.value ?? 1) + (node.linksCount ?? 1)))\n    .style('stroke-width', config.nodeStrokeWidth)\n    .style('stroke', config.nodeStrokeColor)\n    .style('fill', node => (typeof node.img === 'undefined' || node.img === '' ? config.nodeColor : `url(${node.img})`))\n    .call(\n      d3\n        .drag<SVGCircleElement, IForceDirectedChartDataNode>()\n        .on(\n          'start',\n          function (\n            this: SVGCircleElement,\n            event: d3.D3DragEvent<SVGCircleElement, IForceDirectedChartDataNode, unknown>,\n            datum: IForceDirectedChartDataNode,\n          ) {\n            nodeDragStartHandler(event, datum, force);\n          },\n        )\n        .on(\n          'drag',\n          function (\n            this: SVGCircleElement,\n            event: d3.D3DragEvent<SVGCircleElement, IForceDirectedChartDataNode, unknown>,\n            datum: IForceDirectedChartDataNode,\n          ) {\n            nodeDragHandler(event, datum, config);\n          },\n        )\n        .on(\n          'end',\n          function (\n            this: SVGCircleElement,\n            event: d3.D3DragEvent<SVGCircleElement, IForceDirectedChartDataNode, unknown>,\n            datum: IForceDirectedChartDataNode,\n          ) {\n            nodeDragEndHandler(event, datum, force);\n          },\n        ),\n    );\n};\n\n/**\n * Creates the force directed chart text labels.\n * @param svg the svg element\n * @param data the chart data\n * @returns the chart text labels\n */\nconst createText = (svg: d3.Selection<SVGSVGElement, unknown, HTMLElement, unknown>, data: IForceDirectedChartData) => {\n  return svg\n    .append('g')\n    .selectAll('text')\n    .data(data.nodes)\n    .enter()\n    .append('text')\n    .attr('class', 'legend')\n    .text(node => node.name ?? `N/A (id. ${node.index})`);\n};\n\n/**\n * Draws the force directed chart.\n * @param container the chart container\n * @param data the chart data\n * @param options the chart options\n * @returns the chart configuration\n */\nexport const drawForceDirectedChart = (\n  container: ElementRef<HTMLDivElement>,\n  data: IForceDirectedChartData,\n  options?: Partial<IForceDirectedChartOptions>,\n) => {\n  const config: IForceDirectedChartOptions = generateConfiguration<IForceDirectedChartOptions>(\n    defaultForceDirectedChartConfig,\n    options,\n    {},\n  );\n\n  const { svg, g } = createContainer(container, config);\n\n  applyChartData(g, data);\n\n  const link = createLinks(svg, config, data);\n\n  const force = createForces(config, data);\n\n  const node = createNodes(svg, data, force, config);\n\n  const text = createText(svg, data);\n\n  force.on('tick', () => {\n    ticked(link, node, text);\n  });\n\n  return config;\n};\n","import type { ElementRef } from '@angular/core';\nimport * as d3 from 'd3';\n\nimport type { IGaugeChartDataNode, IGaugeChartOptions } from '../interfaces/gauge-chart.interface';\nimport { generateConfiguration } from './configuration.util';\n\n/**\n * The gauge chart default configuration.\n */\nexport const defaultGaugeChartConfig: IGaugeChartOptions = Object.freeze({\n  chartTitle: '',\n  width: 600,\n  height: 600,\n  margin: {\n    top: 20,\n    right: 20,\n    bottom: 20,\n    left: 20,\n  },\n  innerRadius: 100, // increase inner radius to reduce thickness of the chart\n  showLabels: true,\n  showTooltips: true,\n  labelRadiusModifier: 50,\n  labelTextWrapWidth: 60,\n  transitionDuration: 1000,\n  color: 'green',\n  defaultColor: 'lightgray',\n  value: 10,\n  padRad: 0.01,\n  labelFontSize: 12,\n  valueFontSize: 18,\n} as IGaugeChartOptions);\n\n/**\n * Creates a container for the gauge chart.\n * @param container the chart container\n * @param config the chart configuration\n * @returns the object with the svg element and the g element\n */\nconst createContainer = (container: ElementRef<HTMLDivElement>, config: IGaugeChartOptions) => {\n  const id = container.nativeElement.id ?? 'gauge-0';\n\n  d3.select(`#${id}`).select('svg').remove();\n  const svg = d3\n    .select(`#${id}`)\n    .append('svg')\n    .attr('width', config.width + config.margin.left + config.margin.right)\n    .attr('height', config.height / 2 + config.margin.top + config.margin.bottom)\n    .attr('class', id);\n  const g = svg\n    .append('g')\n    .attr('transform', `translate(${config.width / 2 + config.margin.left},${config.height / 2 + config.margin.top})`);\n\n  return { svg, g };\n};\n\n/**\n * Percentage to degrees converter.\n * @param perc percentage\n */\nconst percToDeg = (perc: number) => {\n  const mod = 360;\n  return perc * mod;\n};\n\n/**\n * Degrees to percentage converter.\n * @param deg degrees\n */\nconst degToRad = (deg: number) => {\n  const mod = 180;\n  return (deg * Math.PI) / mod;\n};\n\n/**\n * Repcentage to radians converter.\n * @param perc percentage\n */\nconst percToRad = (perc: number) => degToRad(percToDeg(perc));\n\n/**\n * Draws the gauge chart sections.\n * @param config the chart config\n * @param arc the charts's arc\n * @param arcs the chart's arc sections\n * @param data the chart's data\n */\nconst drawSections = (\n  config: IGaugeChartOptions,\n  arc: d3.Arc<unknown, d3.PieArcDatum<IGaugeChartDataNode>>,\n  arcs: d3.Selection<SVGGElement, d3.PieArcDatum<IGaugeChartDataNode>, SVGGElement, unknown>,\n  data: IGaugeChartDataNode[],\n) => {\n  let startAt = 0.75; // Start at 270deg\n  const sectionPercentage = 1 / data.length / 2;\n\n  arcs\n    .append('path')\n    .attr('fill', d => (d.data.y <= config.value ? config.color : config.defaultColor))\n    .attr('opacity', (d, i) => {\n      const total = 100;\n      const sections = data.length - 1;\n      return ((i + 1) * sections) / total;\n    })\n    .attr('d', datum => {\n      const arcStartRad = percToRad(startAt);\n      const arcEndRad = arcStartRad + percToRad(sectionPercentage);\n      startAt += sectionPercentage;\n\n      const startPadRad = datum.index === 0 ? 0 : config.padRad / 2;\n      const endPadRad = datum.index === data.length ? 0 : config.padRad / 2;\n      return arc.startAngle(arcStartRad + startPadRad).endAngle(arcEndRad - endPadRad)(datum);\n    });\n};\n\n/**\n * Draws the guage chart labels\n * @param config the chart config\n * @param arc the charts's arc\n * @param arcs the chart's arc sections\n * @param data the chart's data\n */\nconst drawLabels = (\n  config: IGaugeChartOptions,\n  arc: d3.Arc<unknown, d3.PieArcDatum<IGaugeChartDataNode>>,\n  arcs: d3.Selection<SVGGElement, d3.PieArcDatum<IGaugeChartDataNode>, SVGGElement, unknown>,\n  data: IGaugeChartDataNode[],\n) => {\n  let startAt = 0.75; // Start at 270deg\n  const sectionPercentage = 1 / data.length / 2;\n  const textDy = 5;\n\n  arcs\n    .append('text')\n    .attr('class', 'legend')\n    .attr('text-anchor', 'middle')\n    .attr('dy', textDy)\n    .attr('transform', datum => {\n      const arcStartRad = percToRad(startAt);\n      const arcEndRad = arcStartRad + percToRad(sectionPercentage);\n      startAt += sectionPercentage;\n\n      const startPadRad = datum.index === 0 ? 0 : config.padRad / 2;\n      const endPadRad = datum.index === data.length ? 0 : config.padRad / 2;\n      const a = arc.startAngle(arcStartRad + startPadRad).endAngle(arcEndRad - endPadRad);\n      return `translate(${a.centroid(datum)})`;\n    })\n    .style('font-size', `${config.labelFontSize}px`)\n    .text(d => d.data.y);\n};\n\n/**\n * Draws the gauge chart value.\n * @param config the chart config\n * @param g the gauge chart container\n * @param radius the chart radius\n */\nconst drawValue = (config: IGaugeChartOptions, g: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>, radius: number) => {\n  const mod = 20;\n  g.append('text')\n    .attr('class', 'legend')\n    .attr('text-anchor', 'middle')\n    .attr('dx', radius / mod)\n    .attr('dy', -(radius / mod))\n    .style('font-size', `${config.valueFontSize}px`)\n    .text(() => `${config.value}%`);\n};\n\n/**\n * Draws the gauge chart.\n * @param container the chart container\n * @param data the chart data\n * @param options the chart options\n * @returns the chart configuration\n */\nexport const drawGaugeChart = (\n  container: ElementRef<HTMLDivElement>,\n  data: IGaugeChartDataNode[],\n  options?: Partial<IGaugeChartOptions>,\n) => {\n  const config: IGaugeChartOptions = generateConfiguration<IGaugeChartOptions>(defaultGaugeChartConfig, options, {});\n\n  const { g } = createContainer(container, config);\n\n  const gauge = d3.pie<IGaugeChartDataNode>().value(datum => datum.y);\n\n  const radius = Math.min(config.width, config.height) / 2;\n\n  const arc = d3.arc<d3.PieArcDatum<IGaugeChartDataNode>>().innerRadius(config.innerRadius).outerRadius(radius);\n\n  const arcs = g\n    .selectAll('arc')\n    .data(gauge(data))\n    .enter()\n    .append('g')\n    .attr('class', 'arc')\n    .on('mouseover', function (this, event: MouseEvent, d) {\n      this.style.opacity = '0.8';\n\n      const displayTooltip = d.data.y <= config.value && config.showTooltips;\n\n      if (displayTooltip) {\n        const tooltipText = `${d.data.key}: ${d.data.y}`;\n\n        g.append('text')\n          .attr('class', 'chart-tooltip')\n          .style('opacity', 0)\n          .attr('dx', -config.width / (2 * 2 * 2))\n          .attr('dy', radius / 2 - config.margin.top - config.margin.bottom)\n          .text(tooltipText)\n          .transition()\n          .duration(config.transitionDuration)\n          .style('opacity', 1);\n      }\n    })\n    .on('mouseout', function (this, event, d) {\n      this.style.opacity = 'unset';\n      d3.selectAll('.chart-tooltip')\n        .transition()\n        .duration(config.transitionDuration / 2)\n        .style('opacity', 0)\n        .remove();\n    });\n\n  drawSections(config, arc, arcs, data);\n\n  if (config.showLabels) {\n    drawLabels(config, arc, arcs, data);\n  }\n\n  drawValue(config, g, radius);\n\n  return config;\n};\n","import type { ElementRef } from '@angular/core';\nimport * as d3 from 'd3';\n\nimport type { ILineChartDataNode, ILineChartOptions, TLineChartData } from '../interfaces/line-chart.interface';\nimport { generateConfiguration } from './configuration.util';\n\n/** The line chart default configuration. */\nexport const defaultLineChartConfig: ILineChartOptions = Object.freeze({\n  chartTitle: '',\n  width: 350,\n  height: 350,\n  margin: {\n    top: 70,\n    right: 50,\n    bottom: 50,\n    left: 50,\n  },\n  transitionDuration: 400,\n  dotRadius: 3.5,\n  xAxisTitle: '',\n  yAxisTitle: '',\n  ticks: {\n    x: 5,\n    y: 10,\n  },\n  displayAxisLabels: true,\n  dateFormat: 'default',\n  labelTextWrapWidth: 20, // the number of pixels after which a label needs to be given a new line\n  color: d3.scaleOrdinal(d3.schemeCategory10),\n} as ILineChartOptions);\n\n/**\n * Creates a container for the line chart.\n * @param container the chart container\n * @param config the chart configuration\n * @returns the object with the svg element and the g element\n */\nconst createContainer = (container: ElementRef<HTMLDivElement>, config: ILineChartOptions) => {\n  const id = container.nativeElement.id ?? 'line-0';\n\n  d3.select(`#${id}`).select('svg').remove();\n  const svg = d3\n    .select(`#${id}`)\n    .append('svg')\n    .attr('width', config.width + config.margin.left + config.margin.right)\n    .attr('height', config.height + config.margin.top + config.margin.bottom)\n    .attr('class', id);\n  const g = svg.append('g').attr('transform', `translate(${config.margin.left},${config.margin.top / 2})`);\n\n  return { svg, g };\n};\n\n/**\n * Wraps the line chart axis labels text.\n * @param svgText the svg text elements\n * @param width the chart axis label width\n */\nconst wrapSvgText = (svgText: d3.Selection<d3.BaseType, unknown, SVGGElement, unknown>, width: number) => {\n  svgText.each(function (this: d3.BaseType) {\n    const text = d3.select<d3.BaseType, string>(this);\n    const words = text.text().split(/\\s+/).reverse();\n    if (words.length > 1) {\n      let line: string[] = [];\n      let lineNumber = 0;\n      const lineHeight = 1.4;\n      const y = text.attr('y');\n      const x = text.attr('x');\n      const dy = parseFloat(text.attr('dy') ?? 0);\n      let tspan = text.text(null).append('tspan').attr('x', x).attr('y', y).attr('dy', `${dy}em`); // axis label\n\n      let word = words.pop();\n\n      while (typeof word !== 'undefined') {\n        line.push(word ?? '');\n        tspan.text(line.join(' '));\n        if ((tspan.node()?.getComputedTextLength() ?? 0) > width) {\n          line.pop();\n          tspan.text(line.join(' '));\n          line = [word ?? ''];\n          tspan = text\n            .append('tspan')\n            .attr('x', 0)\n            .attr('y', y)\n            .attr('dy', `${lineNumber * lineHeight + dy}em`)\n            .text(word ?? '');\n          lineNumber += 1;\n        }\n        word = words.pop();\n      }\n    }\n  });\n};\n\n/**\n * Creates the legend.\n * @param g the svg g element\n * @param config the chart configuration\n */\nconst createLegend = (g: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>, config: ILineChartOptions) => {\n  if (config.displayAxisLabels && config.xAxisTitle !== '') {\n    g.append('g')\n      .attr('transform', `translate(0, ${config.height + config.margin.bottom})`)\n      .append('text')\n      .style('font-size', '12px')\n      .attr('class', 'legend')\n      .attr('dx', '0.5em')\n      .attr('dy', '0em')\n      .text(`x - ${config.xAxisTitle}`);\n  }\n\n  if (config.displayAxisLabels && config.yAxisTitle !== '') {\n    g.append('g')\n      .attr('transform', `translate(0, ${config.height + config.margin.bottom})`)\n      .append('text')\n      .style('font-size', '12px')\n      .attr('class', 'legend')\n      .attr('dx', '0.5em')\n      .attr('dy', '1.5em')\n      .text(`y - ${config.yAxisTitle}`);\n  }\n\n  if (config.chartTitle !== '') {\n    g.append('g')\n      .attr('transform', `translate(0, 0)`)\n      .append('text')\n      .style('font-size', '12px')\n      .attr('class', 'legend')\n      .attr('dx', '1.5em')\n      .attr('dy', '-2em')\n      .text(config.chartTitle);\n  }\n};\n\n/**\n * Creates the x axis.\n * @param g the svg g element\n * @param x the x axis scale\n * @param config the chart configuration\n */\nconst createAxisX = (\n  g: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>,\n  x: d3.ScaleTime<number, number>,\n  config: ILineChartOptions,\n) => {\n  const xLabels = g\n    .append('g')\n    .attr('transform', `translate(0, ${config.height})`)\n    .call(\n      d3\n        .axisBottom(x)\n        .ticks(config.ticks.x)\n        .tickFormat(d => {\n          const date = new Date(d.valueOf());\n          const formattingOffset = 10;\n          const day = date.getDate();\n          const dd = day < formattingOffset ? `0${day}` : day;\n          const month = date.getMonth() + 1;\n          const mm = month < formattingOffset ? `0${month}` : month;\n          const year = date.getFullYear().toString();\n          const yy = year.slice(2);\n          const hours = date.getHours();\n          const hour = hours < formattingOffset ? `0${hours}` : hours;\n          const minutes = date.getMinutes();\n          const minute = minutes < formattingOffset ? `0${minutes}` : minutes;\n          let formattedDate = `${dd}/${mm}/${yy} ${hour}:${minute}`;\n          switch (config.dateFormat) {\n            case 'dd/mm/yyyy':\n              formattedDate = `${dd}/${mm}/${year}`;\n              break;\n            case 'dd/mm/yy':\n              formattedDate = `${dd}/${mm}/${yy}`;\n              break;\n            case 'mm/yyyy':\n              formattedDate = `${mm}/${year}`;\n              break;\n            case 'yyyy':\n              formattedDate = `${year}`;\n              break;\n            default:\n              break;\n          }\n          return formattedDate;\n        }),\n    )\n    .append('text');\n\n  g.selectAll('text').call(wrapSvgText, config.labelTextWrapWidth);\n\n  if (config.displayAxisLabels) {\n    xLabels.attr('transform', `translate(${config.width}, 0)`).attr('class', 'legend').attr('dx', '1.5em').attr('dy', '0.7em').text('x');\n  }\n};\n\n/**\n * Creates the y axis.\n * @param g the svg g element\n * @param y the y axis scale\n * @param config the chart configuration\n */\nconst createAxisY = (\n  g: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>,\n  y: d3.ScaleLinear<number, number>,\n  config: ILineChartOptions,\n) => {\n  const yLabels = g\n    .append('g')\n    .call(\n      d3\n        .axisLeft(y)\n        .ticks(config.ticks.y)\n        .tickFormat(d => `${d}`),\n    )\n    .append('text');\n\n  if (config.displayAxisLabels) {\n    yLabels.attr('class', 'legend').attr('dy', '-1.5em').attr('class', 'legend').text('y');\n  }\n};\n\n/**\n * The mouse over event handler.\n * @param self an svg circle element\n * @param d the chart data node\n * @param g the svg g element\n * @param config the chart configuration\n */\nconst onMouseOver = (\n  self: SVGCircleElement,\n  d: ILineChartDataNode,\n  g: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>,\n  config: ILineChartOptions,\n) => {\n  const duration = 400;\n  d3.select(self)\n    .transition()\n    .duration(duration)\n    .attr('r', config.dotRadius * 2);\n\n  const tooltipShift = 4;\n  const tooltipDy = -10;\n  g.append('text')\n    .attr('class', 'chart-tooltip')\n    .style('font-size', '11px')\n    .attr('dx', () => (config.width - config.margin.left - config.margin.right) / tooltipShift)\n    .attr('dy', () => tooltipDy)\n    .text(() => `${d.value} (${new Date(d.timestamp).toUTCString()})`)\n    .transition()\n    .duration(config.transitionDuration)\n    .style('opacity', 1);\n};\n\n/**\n * The mouse out event handler.\n * @param self an svg circle element\n * @param config the chart configuration\n */\nconst onMouseOut = (self: SVGCircleElement, config: ILineChartOptions) => {\n  const duration = 400;\n  d3.select(self).attr('class', 'dot');\n  d3.select(self).transition().duration(duration).attr('r', config.dotRadius);\n  d3.selectAll('.chart-tooltip')\n    .transition()\n    .duration(config.transitionDuration / 2)\n    .style('opacity', 0)\n    .remove();\n};\n\n/**\n * Draws the chart lines, dots, and sets the mouse pointer events.\n * @param g the svg g element\n * @param x the x axis scale\n * @param y the y axis scale\n * @param config the chart configuration\n * @param data the chart data\n * @param datasetLabels the set of labels for the chart's dataset\n */\nconst drawLinesDotsAndSetPointerEvents = (\n  g: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>,\n  x: d3.ScaleTime<number, number>,\n  y: d3.ScaleLinear<number, number>,\n  config: ILineChartOptions,\n  data: TLineChartData[],\n  datasetLabels: string[],\n) => {\n  const line = d3\n    .line<ILineChartDataNode>()\n    .x(d => x(d.timestamp))\n    .y(d => y(d.value))\n    .curve(d3.curveMonotoneX);\n\n  const flatData = data.flat();\n\n  for (let c = 0, maxC = data.length; c < maxC; c += 1) {\n    const chunk = data[c];\n\n    g.append('path')\n      .attr('id', `line-${c}`)\n      .style('fill', 'none')\n      .style('stroke', config.color(c.toString()))\n      .style('stroke-width', '2px')\n      .attr('d', line(chunk));\n\n    const datasetLabelText = datasetLabels[c];\n    const datasetLabel = g.append('g').attr('transform', `translate(0, ${config.height + config.margin.bottom})`);\n\n    const markerShiftY = { multiplier: 12, modifier: 4 };\n    datasetLabel\n      .append('line')\n      .attr('id', `legend-line-${c}`)\n      .style('fill', 'none')\n      .style('stroke', config.color(c.toString()))\n      .style('stroke-width', '2px')\n      .attr('x1', '6.75em')\n      .attr('y1', c * markerShiftY.multiplier - markerShiftY.modifier)\n      .attr('x2', '7.25em')\n      .attr('y2', c * markerShiftY.multiplier - markerShiftY.modifier);\n\n    datasetLabel\n      .append('text')\n      .style('font-size', '12px')\n      .attr('class', 'legend')\n      .attr('dx', '10em')\n      .attr('dy', `${c}em`)\n      .text(datasetLabelText);\n  }\n\n  g.selectAll('.dot')\n    .data(flatData)\n    .enter()\n    .append('circle')\n    .attr('class', 'dot')\n    .style('pointer-events', 'all')\n    .style('fill', (d, i) => config.color(i.toString()))\n    .on('mouseover', function (this, event, d) {\n      return onMouseOver(this, d, g, config);\n    })\n    .on('mouseout', function (this) {\n      return onMouseOut(this, config);\n    })\n    .attr('cx', function (this, d) {\n      return x(d.timestamp);\n    })\n    .attr('cy', function (this, d) {\n      return y(d.value);\n    })\n    .attr('r', 0)\n    .transition()\n    .ease(d3.easeLinear)\n    .duration(config.transitionDuration)\n    .delay((d, i) => {\n      const multiplier = 50;\n      return i * multiplier;\n    })\n    .attr('r', config.dotRadius);\n};\n\n/**\n * Draws the line chart.\n * @param container the chart container\n * @param data the chart data\n * @param options the chart options\n * @returns the chart configuration\n */\nexport const drawLineChart = (\n  container: ElementRef<HTMLDivElement>,\n  data: TLineChartData[],\n  datasetLabels: string[],\n  options?: Partial<ILineChartOptions>,\n) => {\n  const config: ILineChartOptions = generateConfiguration<ILineChartOptions>(defaultLineChartConfig, options, {});\n\n  const { g } = createContainer(container, config);\n\n  const range = data.reduce(\n    (accumulator: { minTime: number; maxTime: number; maxValue: number }, arr) => {\n      const timestamps = arr.map(item => item.timestamp);\n      const minItem = Math.min(...timestamps);\n      const maxItem = Math.max(...timestamps);\n      const minTime = Math.min(minItem, accumulator.minTime);\n      const maxTime = Math.max(maxItem, accumulator.maxTime);\n\n      const values = arr.map(item => item.value);\n      const maxItemValue = Math.max(...values);\n      const maxValue = Math.max(maxItemValue, accumulator.maxValue);\n      return { minTime, maxTime, maxValue };\n    },\n    { minTime: Number(Infinity), maxTime: -Infinity, maxValue: -Infinity },\n  );\n\n  const x = d3.scaleTime([0, config.width]).domain([range.minTime, range.maxTime]);\n  const y = d3.scaleLinear([config.height, 0]).domain([0, range.maxValue ?? 1]);\n\n  createAxisX(g, x, config);\n\n  createAxisY(g, y, config);\n\n  createLegend(g, config);\n\n  drawLinesDotsAndSetPointerEvents(g, x, y, config, data, datasetLabels);\n\n  return config;\n};\n","import type { ElementRef } from '@angular/core';\nimport * as d3 from 'd3';\n\nimport type { IPieChartDataNode, IPieChartOptions } from '../interfaces/pie-chart.interface';\nimport { generateConfiguration } from './configuration.util';\n\n/**\n * The pie chart default configuration.\n */\nexport const defaultPieChartConfig: IPieChartOptions = Object.freeze({\n  chartTitle: '',\n  width: 600,\n  height: 600,\n  margin: {\n    top: 20,\n    right: 20,\n    bottom: 20,\n    left: 20,\n  },\n  innerRadius: 0, // increase inner radius to render a donut chart\n  showLabels: true,\n  labelRadiusModifier: 50,\n  labelTextWrapWidth: 60,\n  transitionDuration: 1000,\n  color: d3.scaleOrdinal(d3.schemeCategory10),\n} as IPieChartOptions);\n\n/**\n * Creates a container for the pie chart.\n * @param container the chart container\n * @param config the chart configuration\n * @returns the object with the svg element and the g element\n */\nconst createContainer = (container: ElementRef<HTMLDivElement>, config: IPieChartOptions) => {\n  const id = container.nativeElement.id ?? 'pie-0';\n\n  d3.select(`#${id}`).select('svg').remove();\n  const svg = d3\n    .select(`#${id}`)\n    .append('svg')\n    .attr('width', config.width + config.margin.left + config.margin.right)\n    .attr('height', config.height + config.margin.top + config.margin.bottom)\n    .attr('class', id);\n  const g = svg\n    .append('g')\n    .attr('transform', `translate(${config.width / 2 + config.margin.left},${config.height / 2 + config.margin.top})`);\n\n  return { svg, g };\n};\n\n/**\n * Draws the pie chart.\n * @param container the chart container\n * @param data the chart data\n * @param options the chart options\n * @returns the chart configuration\n */\nexport const drawPieChart = (container: ElementRef<HTMLDivElement>, data: IPieChartDataNode[], options?: Partial<IPieChartOptions>) => {\n  const config: IPieChartOptions = generateConfiguration<IPieChartOptions>(defaultPieChartConfig, options, {});\n\n  const { g } = createContainer(container, config);\n\n  const pie = d3.pie<IPieChartDataNode>().value(datum => datum.y);\n\n  const radius = Math.min(config.width, config.height) / 2;\n\n  const arc = d3.arc<d3.PieArcDatum<IPieChartDataNode>>().innerRadius(config.innerRadius).outerRadius(radius);\n\n  const arcs = g\n    .selectAll('arc')\n    .data(pie(data))\n    .enter()\n    .append('g')\n    .attr('class', 'arc')\n    .on('mouseover', function (this, event: MouseEvent, d) {\n      this.style.opacity = '0.8';\n\n      const tooltipText = `${d.data.key}: ${d.data.y}`;\n\n      g.append('text')\n        .attr('class', 'chart-tooltip')\n        .style('opacity', 0)\n        .attr('dx', -config.width / (2 * 2 * 2))\n        .attr('dy', config.height / 2 + config.margin.top)\n        .text(tooltipText)\n        .transition()\n        .duration(config.transitionDuration)\n        .style('opacity', 1);\n    })\n    .on('mouseout', function (this, event, d) {\n      this.style.opacity = 'unset';\n      d3.selectAll('.chart-tooltip')\n        .transition()\n        .duration(config.transitionDuration / 2)\n        .style('opacity', 0)\n        .remove();\n    });\n\n  arcs\n    .append('path')\n    .attr('fill', (d, i) => config.color(i.toString()))\n    .attr('d', arc);\n\n  if (config.showLabels) {\n    const label = d3\n      .arc<d3.PieArcDatum<IPieChartDataNode>>()\n      .innerRadius(radius)\n      .outerRadius(radius + config.labelRadiusModifier);\n\n    const textDy = 5;\n    arcs\n      .append('text')\n      .attr('class', 'legend')\n      .attr('text-anchor', 'middle')\n      .attr('dy', textDy)\n      .attr('transform', d => `translate(${label.centroid(d)})`)\n      .style('font-size', '12px')\n      .text(d => d.data.y);\n  }\n\n  return config;\n};\n","import type { ElementRef } from '@angular/core';\nimport * as d3 from 'd3';\n\nimport type { IRadarChartDataNode, IRadarChartOptions, TRadarChartData } from '../interfaces/radar-chart.interface';\nimport { generateConfiguration } from './configuration.util';\n\n/**\n * The radar chart default configuration.\n */\nexport const defaultRadarChartConfig: IRadarChartOptions = Object.freeze({\n  chartTitle: '',\n  width: 350,\n  height: 350,\n  margin: {\n    top: 50,\n    right: 50,\n    bottom: 50,\n    left: 50,\n  },\n  levels: 3, // how many levels or inner circles should there be drawn\n  maxValue: 0, // what is the value that the biggest circle will represent\n  lineFactor: 1.1, // how much farther than the radius of the outer circle should the lines be stretched\n  labelFactor: 1.15, // how much farther than the radius of the outer circle should the labels be placed\n  labelTextWrapWidth: 60, // the number of pixels after which a label needs to be given a new line\n  opacityArea: 0.35, // the opacity of the area of the blob\n  dotRadius: 4, // the size of the colored circles of each blog\n  opacityCircles: 0.1, // the opacity of the circles of each blob\n  strokeWidth: 2, // the width of the stroke around each blob\n  roundStrokes: false, // if true the area and stroke will follow a round path (cardinal-closed)\n  transitionDuration: 200,\n  color: d3.scaleOrdinal(d3.schemeCategory10),\n} as IRadarChartOptions);\n\n/**\n * Creates a container for the radar chart.\n * @param container the chart container\n * @param config the chart configuration\n * @returns the object with the svg element and the g element\n */\nconst createContainer = (container: ElementRef<HTMLDivElement>, config: IRadarChartOptions) => {\n  const id = container.nativeElement.id ?? 'radar-0';\n\n  d3.select(`#${id}`).select('svg').remove();\n  const svg = d3\n    .select(`#${id}`)\n    .append('svg')\n    .attr('width', config.width + config.margin.left + config.margin.right)\n    .attr('height', config.height + config.margin.top + config.margin.bottom)\n    .attr('class', id);\n  const g = svg\n    .append('g')\n    .attr('transform', `translate(${config.width / 2 + config.margin.left},${config.height / 2 + config.margin.top})`);\n\n  return { svg, g };\n};\n\n/**\n * Draws the radar chart circular grid.\n * @param axisGrid the chart axis grid\n * @param radius the chart radius value\n * @param maxValue the maximum value of the chart axis\n * @param config the chart configuration\n */\nconst drawCircularGrid = (\n  axisGrid: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>,\n  radius: number,\n  maxValue: number,\n  config: IRadarChartOptions,\n) => {\n  // background circles\n  axisGrid\n    .selectAll('.levels')\n    .data(d3.range(1, config.levels + 1).reverse())\n    .enter()\n    .append('circle')\n    .attr('class', 'grid-circle')\n    .attr('r', (d, i) => (radius / config.levels) * d)\n    .style('fill', '#CDCDCD')\n    .style('stroke', '#CDCDCD')\n    .style('fill-opacity', config.opacityCircles)\n    .style('filter', 'url(#glow)');\n  // text indicating at what % each level is\n  const axisGridX = 4;\n  axisGrid\n    .selectAll('.axis-label')\n    .data(d3.range(1, config.levels + 1).reverse())\n    .enter()\n    .append('text')\n    .attr('class', 'axis-label')\n    .attr('x', axisGridX)\n    .attr('y', d => (-d * radius) / config.levels)\n    .attr('dy', '0.4em')\n    .style('font-size', '10px')\n    .attr('fill', '#737373')\n    .text((d, i) => (maxValue * d) / config.levels);\n};\n\n/**\n * Wraps the chart axis labels text.\n * @param svgText the svg text elements\n * @param width the chart axis label width\n */\nconst wrapSvgText = (svgText: d3.Selection<SVGTextElement, string, SVGGElement, unknown>, width: number) => {\n  svgText.each(function (this: SVGTextElement) {\n    const text = d3.select<SVGElement, string>(this);\n    const words = text.text().split(/\\s+/).reverse();\n    if (words.length > 1) {\n      let line: string[] = [];\n      let lineNumber = 0;\n      const lineHeight = 1.4;\n      const y = text.attr('y');\n      const x = text.attr('x');\n      const dy = parseFloat(text.attr('dy') ?? 0);\n      let tspan = text.text(null).append('tspan').attr('x', x).attr('y', y).attr('dy', `${dy}em`);\n\n      let word = words.pop();\n\n      while (typeof word !== 'undefined') {\n        line.push(word ?? '');\n        tspan.text(line.join(' '));\n        if ((tspan.node()?.getComputedTextLength() ?? 0) > width) {\n          line.pop();\n          tspan.text(line.join(' '));\n          line = [word ?? ''];\n          lineNumber += 1;\n          tspan = text\n            .append('tspan')\n            .attr('x', x)\n            .attr('y', y)\n            .attr('dy', `${lineNumber * lineHeight + dy}em`)\n            .text(word ?? '');\n        }\n        word = words.pop();\n      }\n    }\n  });\n};\n\n/**\n * Creates the legend.\n * @param g the svg g element\n * @param config the chart configuration\n */\nconst createLegend = (g: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>, config: IRadarChartOptions) => {\n  if (config.chartTitle !== '') {\n    g.append('g')\n      .attr('transform', `translate(-${config.width / 2 + config.margin.left / 2}, -${config.height / 2 + config.margin.top / 2})`)\n      .append('text')\n      .style('font-size', '12px')\n      .attr('class', 'legend')\n      .text(config.chartTitle);\n  }\n};\n\n/**\n * Draws the radar chart axis.\n * @param axisGrid the chart axis grid\n * @param axisNames the chart axis names\n * @param radiusScale the chart radius scale\n * @param maxValue the maximum value of the chart axis\n * @param angleSlice the chart angle slice value\n * @param config the chart configuration\n */\nconst drawAxis = (\n  axisGrid: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>,\n  axisNames: string[],\n  radiusScale: d3.ScaleLinear<number, number>,\n  maxValue: number,\n  angleSlice: number,\n  config: IRadarChartOptions,\n) => {\n  // create the straight lines radiating outward from the center\n  const axis = axisGrid.selectAll('.axis').data(axisNames).enter().append('g').attr('class', 'axis');\n  // append the lines\n  axis\n    .append('line')\n    .attr('x1', 0)\n    .attr('y1', 0)\n    .attr('x2', (d, i) => radiusScale(maxValue * config.lineFactor) * Math.cos(angleSlice * i - Math.PI / 2))\n    .attr('y2', (d, i) => radiusScale(maxValue * config.lineFactor) * Math.sin(angleSlice * i - Math.PI / 2))\n    .attr('class', 'line')\n    .style('stroke', 'white')\n    .style('stroke-width', '2px');\n  // append the labels at each axis\n  axis\n    .append('text')\n    .attr('class', 'legend')\n    .style('font-size', '11px')\n    .attr('text-anchor', 'middle')\n    .attr('dy', '0.35em')\n    .attr('x', (d, i) => radiusScale(maxValue * config.labelFactor) * Math.cos(angleSlice * i - Math.PI / 2))\n    .attr('y', (d, i) => radiusScale(maxValue * config.labelFactor) * Math.sin(angleSlice * i - Math.PI / 2))\n    .text(d => d)\n    .call(wrapSvgText, config.labelTextWrapWidth);\n};\n\n/**\n * Draws the radar chart blobs.\n * @param radiusScale the chart radius scale\n * @param angleSlice the chart angle slice value\n * @param g the svg g element\n * @param data the chart data\n * @param config the chart configuration\n */\nconst drawRadarChartBlobs = (\n  radiusScale: d3.ScaleLinear<number, number>,\n  angleSlice: number,\n  g: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>,\n  data: TRadarChartData,\n  config: IRadarChartOptions,\n) => {\n  // the radial line function\n  const radarLine = d3\n    .lineRadial<IRadarChartDataNode>()\n    .radius(d => radiusScale(d.value))\n    .angle((d, i) => i * angleSlice);\n  // create a wrapper for the blobs\n  const blobWrapper = g.selectAll('.radar-wrapper').data(data).enter().append('g').attr('class', 'radar-wrapper');\n  // append the backgrounds\n  blobWrapper\n    .append('path')\n    .attr('class', 'radar-area')\n    .attr('d', (d, i) => radarLine(d))\n    .style('fill', (d, i) => config.color(i.toString()))\n    .style('fill-opacity', config.opacityArea)\n    .on('mouseover', function (d, i) {\n      // dim all blobs\n      const radarAreaFillOpacity = 0.1;\n      d3.selectAll('.radar-area').transition().duration(config.transitionDuration).style('fill-opacity', radarAreaFillOpacity);\n      // bring back the hovered over blob\n      const fillOpacity = 0.7;\n      d3.select(this).transition().duration(config.transitionDuration).style('fill-opacity', fillOpacity);\n    })\n    .on('mouseout', () => {\n      // bring back all blobs\n      d3.selectAll('.radar-area').transition().duration(config.transitionDuration).style('fill-opacity', config.opacityArea);\n    });\n  // create the outlines\n  blobWrapper\n    .append('path')\n    .attr('class', 'radar-stroke')\n    .attr('d', (d, i) => radarLine(d))\n    .style('stroke-width', `${config.strokeWidth}px`)\n    .style('stroke', (d, i) => config.color(i.toString()))\n    .style('fill', 'none')\n    .style('filter', 'url(#glow)');\n  // append the circles\n  const blobWrapperFillOpacity = 0.8;\n  blobWrapper\n    .selectAll('.radar-circle')\n    .data((d, i) => d)\n    .enter()\n    .append('circle')\n    .attr('class', 'radar-circle')\n    .attr('r', config.dotRadius)\n    .attr('cx', (d, i) => radiusScale(d.value) * Math.cos(angleSlice * i - Math.PI / 2))\n    .attr('cy', (d, i) => radiusScale(d.value) * Math.sin(angleSlice * i - Math.PI / 2))\n    .style('fill', (d, i, j) => config.color(j.toString()))\n    .style('fill-opacity', blobWrapperFillOpacity);\n};\n\n/**\n * Appends the invisible tooltip circles.\n * @param g the svg g element\n * @param data the chart data\n * @param radiusScale the chart radius scale\n * @param angleSlice the chart angle slice value\n * @param config the chart configuration\n */\nconst appendInvisibleTooltipCircles = (\n  g: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>,\n  data: TRadarChartData,\n  radiusScale: d3.ScaleLinear<number, number>,\n  angleSlice: number,\n  config: IRadarChartOptions,\n) => {\n  // wrapper for the invisible circles on top\n  const blobCircleWrapper = g.selectAll('.radar-circle-wrapper').data(data).enter().append('g').attr('class', 'radar-circle-wrapper');\n  // append a set of invisible circles on top for the mouseover pop-up\n  const blobCircleWrapperRadiusMultiplier = 1.5;\n  blobCircleWrapper\n    .selectAll<SVGElement, IRadarChartDataNode>('.radar-invisible-circle')\n    .data((d, i) => d)\n    .enter()\n    .append('circle')\n    .attr('class', 'radar-invisible-circle')\n    .attr('r', config.dotRadius * blobCircleWrapperRadiusMultiplier)\n    .attr('cx', (d, i) => radiusScale(d.value) * Math.cos(angleSlice * i - Math.PI / 2))\n    .attr('cy', (d, i) => radiusScale(d.value) * Math.sin(angleSlice * i - Math.PI / 2))\n    .style('fill', 'none')\n    .style('pointer-events', 'all')\n    .on('mouseover', function (event: MouseEvent, i) {\n      const modifier = 10;\n      const newX = parseFloat(d3.select(this).attr('cx')) - modifier;\n      const newY = parseFloat(d3.select(this).attr('cy')) - modifier;\n\n      const nodeData = (event.target as unknown as Record<string, IRadarChartDataNode>)['__data__'];\n      const tooltipText = `${nodeData.value} ${nodeData.unit}`;\n      g.append('text')\n        .attr('class', 'chart-tooltip')\n        .style('opacity', 0)\n        .attr('x', newX)\n        .attr('y', newY)\n        .text(tooltipText)\n        .transition()\n        .duration(config.transitionDuration)\n        .style('opacity', 1);\n    })\n    .on('mouseout', () => {\n      d3.selectAll('.chart-tooltip')\n        .transition()\n        .duration(config.transitionDuration / 2)\n        .style('opacity', 0)\n        .remove();\n    });\n};\n\n/**\n * Draws the radar chart.\n * @param container the chart container\n * @param data the chart data\n * @param options the chart options\n * @returns the hart configuration\n */\nexport const drawRadarChart = (container: ElementRef<HTMLDivElement>, data: TRadarChartData, options?: Partial<IRadarChartOptions>) => {\n  const config: IRadarChartOptions = generateConfiguration<IRadarChartOptions>(defaultRadarChartConfig, options, {});\n\n  const maxValue = Math.max(config.maxValue, d3.max(data, i => d3.max(i.map(o => o.value))) ?? 0);\n  const axisNames = data[0].map((i, j) => i.axis);\n  const totalAxis = axisNames.length;\n  const radius = Math.min(config.width / 2 - config.margin.left / 2, config.height / 2 - config.margin.top / 2);\n  const angleSlice = (Math.PI * 2) / totalAxis;\n  const radiusScale = d3.scaleLinear([0, radius]).domain([0, maxValue]);\n\n  const { g } = createContainer(container, config);\n\n  // filter for the outside glow\n  const filter = g.append('defs').append('filter').attr('id', 'glow');\n  filter.append('feGaussianBlur').attr('stdDeviation', '2.5').attr('result', 'coloredBlur');\n  const feMerge = filter.append('feMerge');\n  feMerge.append('feMergeNode').attr('in', 'coloredBlur');\n  feMerge.append('feMergeNode').attr('in', 'SourceGraphic');\n\n  const axisGrid = g.append('g').attr('class', 'axis-wrapper');\n\n  drawCircularGrid(axisGrid, radius, maxValue, config);\n\n  drawAxis(axisGrid, axisNames, radiusScale, maxValue, angleSlice, config);\n\n  createLegend(g, config);\n\n  drawRadarChartBlobs(radiusScale, angleSlice, g, data, config);\n\n  appendInvisibleTooltipCircles(g, data, radiusScale, angleSlice, config);\n\n  return config;\n};\n","import { InjectionToken } from '@angular/core';\n\nimport { drawBarChart } from '../util/bar-chart.util';\nimport { drawForceDirectedChart } from '../util/force-directed-chart.util';\nimport { drawGaugeChart } from '../util/gauge-chart.util';\nimport { drawLineChart } from '../util/line-chart.util';\nimport { drawPieChart } from '../util/pie-chart.util';\nimport { drawRadarChart } from '../util/radar-chart.util';\n\n/** D3 chart factory. */\nexport interface ID3ChartFactory {\n  drawGaugeChart: typeof drawGaugeChart;\n  drawPieChart: typeof drawPieChart;\n  drawRadarChart: typeof drawRadarChart;\n  drawBarChart: typeof drawBarChart;\n  drawLineChart: typeof drawLineChart;\n  drawForceDirectedChart: typeof drawForceDirectedChart;\n}\n\n/** D3 chart factory */\nexport const d3ChartFactory = (): ID3ChartFactory => ({\n  drawGaugeChart,\n  drawPieChart,\n  drawRadarChart,\n  drawBarChart,\n  drawLineChart,\n  drawForceDirectedChart,\n});\n\n/** D3 chart factory provider. */\nexport const D3_CHART_FACTORY = new InjectionToken('D3_CHART_FACTORY', {\n  providedIn: 'root',\n  factory: d3ChartFactory,\n});\n","import type { ElementRef } from '@angular/core';\n\n/** D3 chart base class. */\nexport abstract class AppD3ChartBase<T, O> {\n  /** A chart id. */\n  public abstract chartId: string;\n\n  /** A chart data. */\n  public abstract data: T;\n\n  /** A chart options. */\n  public abstract options: O;\n\n  /** D3 chart view child reference. */\n  public abstract readonly container?: ElementRef<HTMLDivElement>;\n\n  /** The chart options constructor. */\n  protected abstract chartOptions(): O;\n\n  /** Draws the chart. */\n  protected abstract drawChart(): void;\n}\n","import { DOCUMENT } from '@angular/common';\nimport { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, Inject, Input, OnChanges, ViewChild } from '@angular/core';\n\nimport { IBarChartOptions, TBarChartData } from '../../interfaces/bar-chart.interface';\nimport { IChartInputChanges } from '../../interfaces/chart-component.interface';\nimport { D3_CHART_FACTORY, ID3ChartFactory } from '../../providers/d3-chart-factory.provider';\nimport { defaultBarChartConfig } from '../../util/bar-chart.util';\nimport { AppD3ChartBase } from '../_base/chart.base';\n\ntype TBarData = TBarChartData;\ntype TBarOptions = Partial<IBarChartOptions>;\n\n/** The bar chart component. */\n@Component({\n  selector: 'app-bar-chart',\n  templateUrl: './bar-chart.component.html',\n  styleUrls: ['./bar-chart.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: false,\n})\nexport class AppBarChartComponent extends AppD3ChartBase<TBarData, TBarOptions> implements AfterViewInit, OnChanges {\n  /** The chart id. */\n  @Input() public chartId = 'bar-0';\n\n  /** The chart data. */\n  @Input() public data: TBarData = [];\n\n  /** The chart options. */\n  @Input() public options: TBarOptions = {};\n\n  /** D3 chart view child reference. */\n  @ViewChild('container') public readonly container?: ElementRef<HTMLDivElement>;\n\n  /**\n   * @param doc The web page's Document object.\n   * @param d3Factory D3 chart factory.\n   */\n  constructor(\n    @Inject(DOCUMENT) private readonly doc: Document,\n    @Inject(D3_CHART_FACTORY) private readonly d3Factory: ID3ChartFactory,\n  ) {\n    super();\n  }\n\n  /** The chart options constructor. */\n  protected chartOptions(): TBarOptions {\n    const bodyWidthAdjustment = 10;\n    const width = Math.min(\n      this.options.width ?? defaultBarChartConfig.width,\n      this.doc.body.clientWidth - defaultBarChartConfig.margin.left - defaultBarChartConfig.margin.right - bodyWidthAdjustment,\n    );\n    const height = Math.min(\n      this.options.height ?? width,\n      this.doc.body.clientWidth - defaultBarChartConfig.margin.top - defaultBarChartConfig.margin.bottom - bodyWidthAdjustment,\n    );\n    const yAxisTicks = Math.max(...this.data.map(item => item.value));\n    const options: TBarOptions = {\n      width,\n      height,\n      yAxisTicks,\n      ...this.options,\n    };\n    return options;\n  }\n\n  /** Draws the chart. */\n  protected drawChart(): void {\n    if (typeof this.container !== 'undefined') {\n      const options = this.chartOptions();\n      this.d3Factory.drawBarChart(this.container, this.data, options);\n    }\n  }\n\n  /** Actually draws the chart after the component view is initialized. */\n  public ngAfterViewInit(): void {\n    this.drawChart();\n  }\n\n  /** Redraws the chart on changes. */\n  public ngOnChanges(changes: IChartInputChanges): void {\n    const data: TBarData = changes.data?.currentValue;\n    const options: TBarOptions = changes.options?.currentValue;\n    if ((typeof data !== 'undefined' && data !== null) || (typeof options !== 'undefined' && options !== null)) {\n      this.drawChart();\n    }\n  }\n}\n","<div class=\"container\" id=\"{{ chartId }}\" #container></div>\n","import { DOCUMENT } from '@angular/common';\nimport { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, Inject, Input, OnChanges, ViewChild } from '@angular/core';\n\nimport { IChartInputChanges } from '../../interfaces/chart-component.interface';\nimport { ILineChartOptions, TLineChartData } from '../../interfaces/line-chart.interface';\nimport { D3_CHART_FACTORY, ID3ChartFactory } from '../../providers/d3-chart-factory.provider';\nimport { defaultLineChartConfig } from '../../util/line-chart.util';\nimport { AppD3ChartBase } from '../_base/chart.base';\n\ntype TLineData = TLineChartData[];\ntype TLineOptions = Partial<ILineChartOptions>;\n\n/** The line chart component. */\n@Component({\n  selector: 'app-line-chart',\n  templateUrl: './line-chart.component.html',\n  styleUrls: ['./line-chart.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: false,\n})\nexport class AppLineChartComponent extends AppD3ChartBase<TLineData, TLineOptions> implements AfterViewInit, OnChanges {\n  /** The chart id. */\n  @Input() public chartId = 'line-0';\n\n  /** The chart data. */\n  @Input() public data: TLineData = [];\n\n  /** Labels for the chart datasets. */\n  @Input() public datasetLabels: string[] = [];\n\n  /** The chart options. */\n  @Input() public options: TLineOptions = {};\n\n  /** D3 chart view child reference. */\n  @ViewChild('container') public readonly container?: ElementRef<HTMLDivElement>;\n\n  /**\n   * @param doc The web page's Document object.\n   * @param d3Factory D3 chart factory.\n   */\n  constructor(\n    @Inject(DOCUMENT) private readonly doc: Document,\n    @Inject(D3_CHART_FACTORY) private readonly d3Factory: ID3ChartFactory,\n  ) {\n    super();\n  }\n\n  /** The chart options constructor. */\n  protected chartOptions(): TLineOptions {\n    const bodyWidthAdjustment = 10;\n    const width = Math.min(\n      this.options.width ?? defaultLineChartConfig.width,\n      this.doc.body.clientWidth - defaultLineChartConfig.margin.left - defaultLineChartConfig.margin.right - bodyWidthAdjustment,\n    );\n    const height = Math.min(\n      this.options.height ?? width,\n      this.doc.body.clientWidth - defaultLineChartConfig.margin.top - defaultLineChartConfig.margin.bottom - bodyWidthAdjustment,\n    );\n    const xTicksScale = 75;\n    const yTicksScale = 25;\n    const ticks: TLineOptions['ticks'] = {\n      x: this.options.ticks?.x ?? width / xTicksScale,\n      y: this.options.ticks?.y ?? height / yTicksScale,\n    };\n    const options: TLineOptions = {\n      ...this.options,\n      width,\n      height,\n      ticks,\n    };\n    return options;\n  }\n\n  /** Draws the chart. */\n  protected drawChart(): void {\n    if (typeof this.container !== 'undefined') {\n      const options = this.chartOptions();\n      this.d3Factory.drawLineChart(this.container, [...this.data], [...this.datasetLabels], options);\n    }\n  }\n\n  /** Actually draws the chart after the component view is initialized. */\n  public ngAfterViewInit(): void {\n    this.drawChart();\n  }\n\n  /** Redraws the chart on changes. */\n  public ngOnChanges(changes: IChartInputChanges): void {\n    const data: TLineData = changes.data?.currentValue;\n    const options: TLineOptions = changes.options?.currentValue;\n    if ((typeof data !== 'undefined' && data !== null) || (typeof options !== 'undefined' && options !== null)) {\n      this.drawChart();\n    }\n  }\n}\n","<div class=\"container\" id=\"{{ chartId }}\" #container></div>\n","import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { first, map, switchMap, timer } from 'rxjs';\n\nimport { ILineChartOptions, TDateFormat, TLineChartData } from '../../interfaces/line-chart.interface';\n\n/** Line chart example. */\n@Component({\n  selector: 'app-chart-examples-line',\n  templateUrl: './chart-examples-line.component.html',\n  styleUrls: ['./chart-examples-line.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: false,\n})\nexport class AppChartExamplesLineComponent {\n  /** The chart data. */\n  private get chartData() {\n    return [\n      [\n        { timestamp: this.randomTimestamp(), value: this.randomValue() },\n        { timestamp: this.randomTimestamp(), value: this.randomValue() },\n        { timestamp: this.randomTimestamp(), value: this.randomValue() },\n        { timestamp: this.randomTimestamp(), value: this.randomValue() },\n        { timestamp: this.randomTimestamp(), value: this.randomValue() },\n        { timestamp: this.randomTimestamp(), value: this.randomValue() },\n        { timestamp: this.randomTimestamp(), value: this.randomValue() },\n      ].sort((a, b) => a.timestamp - b.timestamp),\n      [\n        { timestamp: this.randomTimestamp(), value: this.randomValue() },\n        { timestamp: this.randomTimestamp(), value: this.randomValue() },\n        { timestamp: this.randomTimestamp(), value: this.randomValue() },\n        { timestamp: this.randomTimestamp(), value: this.randomValue() },\n        { timestamp: this.randomTimestamp(), value: this.randomValue() },\n        { timestamp: this.randomTimestamp(), value: this.randomValue() },\n        { timestamp: this.randomTimestamp(), value: this.randomValue() },\n      ].sort((a, b) => a.timestamp - b.timestamp),\n      [\n        { timestamp: this.randomTimestamp(), value: this.randomValue() },\n        { timestamp: this.randomTimestamp(), value: this.randomValue() },\n        { timestamp: this.randomTimestamp(), value: this.randomValue() },\n        { timestamp: this.randomTimestamp(), value: this.randomValue() },\n        { timestamp: this.randomTimestamp(), value: this.randomValue() },\n        { timestamp: this.randomTimestamp(), value: this.randomValue() },\n        { timestamp: this.randomTimestamp(), value: this.randomValue() },\n      ].sort((a, b) => a.timestamp - b.timestamp),\n    ] as TLineChartData[];\n  }\n\n  /** The breakpoint observer stream. */\n  private readonly breakpoint$ = this.breakpointObserver\n    .observe([Breakpoints.XSmall, Breakpoints.Small, Breakpoints.Medium, Breakpoints.Large, Breakpoints.XLarge])\n    .pipe(map(result => Object.keys(result.breakpoints).find(item => result.breakpoints[item]) ?? 'unknown'));\n\n  /** The chart configuration stream. */\n  public readonly chartConfig$ = this.breakpoint$.pipe(\n    switchMap(() => {\n      const timeout = 100;\n      return timer(timeout).pipe(\n        first(),\n        map(() => ({\n          data: this.chartData,\n          datasetLabels: Array.from(new Array(this.chartData.length)).map((item, index) => `Dataset ${index}`),\n          options: this.lineChartOptions(),\n          optionsDateDdMmYy: this.lineChartOptions('dd/mm/yy'),\n          optionsDateDdMmYyyy: this.lineChartOptions('dd/mm/yyyy'),\n          optionsDateMmYyyy: this.lineChartOptions('mm/yyyy'),\n        })),\n      );\n    }),\n  );\n\n  constructor(private readonly breakpointObserver: BreakpointObserver) {}\n\n  /**\n   * Random value generator.\n   * @param range value range\n   */\n  private randomValue(range?: number) {\n    const defaultRange = 100;\n    return Math.floor(Math.random() * (range ?? defaultRange) + 1);\n  }\n\n  /**\n   * Random timestamp generator.\n   * @param range value range\n   */\n  private randomTimestamp(range?: number) {\n    const defaultRange = 100000000;\n    return Math.floor(Math.random() * (range ?? defaultRange) + new Date().getTime());\n  }\n\n  /**\n   * Example line chart options.\n   * @param dateFormat date format\n   */\n  private lineChartOptions(dateFormat: TDateFormat = 'default') {\n    return {\n      chartTitle: `Example line chart, date format ${dateFormat}`,\n      xAxisTitle: 'Date range',\n      yAxisTitle: 'Value range',\n      dateFormat,\n    } as Partial<ILineChartOptions>;\n  }\n}\n","@if (chartConfig$ | async; as config) {\n  <div class=\"container\">\n    <app-line-chart\n      [chartId]=\"'line-example-1'\"\n      [data]=\"[config.data[0]]\"\n      [datasetLabels]=\"[config.datasetLabels[0]]\"\n      [options]=\"config.options\"\n    ></app-line-chart>\n    <app-line-chart\n      [chartId]=\"'line-example-2'\"\n      [data]=\"[config.data[1]]\"\n      [datasetLabels]=\"[config.datasetLabels[1]]\"\n      [options]=\"config.optionsDateDdMmYy\"\n    ></app-line-chart>\n    <app-line-chart\n      [chartId]=\"'line-example-3'\"\n      [data]=\"[config.data[1], config.data[2]]\"\n      [datasetLabels]=\"[config.datasetLabels[1], config.datasetLabels[2]]\"\n      [options]=\"config.optionsDateDdMmYyyy\"\n    ></app-line-chart>\n    <app-line-chart\n      [chartId]=\"'line-example-4'\"\n      [data]=\"config.data\"\n      [datasetLabels]=\"config.datasetLabels\"\n      [options]=\"config.optionsDateMmYyyy\"\n    ></app-line-chart>\n  </div>\n}\n","import { DOCUMENT } from '@angular/common';\nimport { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, Inject, Input, OnChanges, ViewChild } from '@angular/core';\n\nimport { IChartInputChanges } from '../../interfaces/chart-component.interface';\nimport { IRadarChartDataNode, IRadarChartOptions } from '../../interfaces/radar-chart.interface';\nimport { D3_CHART_FACTORY, ID3ChartFactory } from '../../providers/d3-chart-factory.provider';\nimport { defaultRadarChartConfig } from '../../util/radar-chart.util';\nimport { AppD3ChartBase } from '../_base/chart.base';\n\ntype TRadarData = IRadarChartDataNode[][];\ntype TRadarOptions = Partial<IRadarChartOptions>;\n\n/** The radar chart component. */\n@Component({\n  selector: 'app-radar-chart',\n  templateUrl: './radar-chart.component.html',\n  styleUrls: ['./radar-chart.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: false,\n})\nexport class AppRadarChartComponent extends AppD3ChartBase<TRadarData, TRadarOptions> implements AfterViewInit, OnChanges {\n  /** The chart id. */\n  @Input() public chartId = 'radar-0';\n\n  /** The chart data. */\n  @Input() public data: TRadarData = [[]];\n\n  /** The chart options. */\n  @Input() public options: TRadarOptions = {};\n\n  /** D3 chart view child reference. */\n  @ViewChild('container') public readonly container?: ElementRef<HTMLDivElement>;\n\n  /**\n   * @param doc The web page's Document object.\n   * @param d3Factory D3 chart factory.\n   */\n  constructor(\n    @Inject(DOCUMENT) private readonly doc: Document,\n    @Inject(D3_CHART_FACTORY) private readonly d3Factory: ID3ChartFactory,\n  ) {\n    super();\n  }\n\n  /** The chart options constructor. */\n  protected chartOptions(): TRadarOptions {\n    const xsOffset = 500;\n    const smOffset = 800;\n    const mdOffset = 1024;\n    const labelFactorDefault = 1.15;\n    const labelFactorMd = 1.15;\n    const labelFactorSm = 1.15;\n    const labelFactorXs = 1.4;\n    const wrapWidthDefault = 85;\n    const wrapWidthMd = 80;\n    const wrapWidthXs = 70;\n    const bodyWidthAdjustment = 10;\n    const width = Math.min(\n      this.options.width ?? defaultRadarChartConfig.width,\n      this.doc.body.clientWidth - defaultRadarChartConfig.margin.left - defaultRadarChartConfig.margin.right - bodyWidthAdjustment,\n    );\n    const height = Math.min(\n      width,\n      this.doc.body.clientHeight - defaultRadarChartConfig.margin.top - defaultRadarChartConfig.margin.bottom - bodyWidthAdjustment,\n    );\n    const labelFactor =\n      width <= xsOffset ? labelFactorXs : width <= smOffset ? labelFactorSm : width <= mdOffset ? labelFactorMd : labelFactorDefault;\n    const labelTextWrapWidth = width <= xsOffset ? wrapWidthXs : width <= mdOffset ? wrapWidthMd : wrapWidthDefault;\n    const options: TRadarOptions = {\n      width,\n      height,\n      maxValue: this.data[0].reduce((accumulator, item) => (item.value > accumulator ? item.value : accumulator), 0) + 1,\n      levels: 5,\n      roundStrokes: true,\n      labelFactor,\n      labelTextWrapWidth,\n      ...this.options,\n    };\n    return options;\n  }\n\n  /** Draws the chart. */\n  protected drawChart(): void {\n    if (typeof this.container !== 'undefined') {\n      const options = this.chartOptions();\n      this.d3Factory.drawRadarChart(this.container, this.data, options);\n    }\n  }\n\n  /** Actually draws the chart after the component view is initialized. */\n  public ngAfterViewInit(): void {\n    this.drawChart();\n  }\n\n  /** Redraws the chart on changes. */\n  public ngOnChanges(changes: IChartInputChanges): void {\n    const currentValue: TRadarData = changes.data?.currentValue;\n    const options: TRadarOptions = changes.options?.currentValue;\n    if ((typeof currentValue !== 'undefined' && currentValue !== null) || (typeof options !== 'undefined' && options !== null)) {\n      this.drawChart();\n    }\n  }\n}\n","<div class=\"container\" id=\"{{ chartId }}\" #container></div>\n","import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { first, map, switchMap, timer } from 'rxjs';\n\nimport { IRadarChartDataNode, IRadarChartOptions } from '../../interfaces/radar-chart.interface';\n\n/** Radar chart example. */\n@Component({\n  selector: 'app-chart-examples-radar',\n  templateUrl: './chart-examples-radar.component.html',\n  styleUrls: ['./chart-examples-radar.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: false,\n})\nexport class AppChartExamplesRadaraComponent {\n  /** The chart data. */\n  private get chartData() {\n    return [\n      [\n        { axis: 'one', value: 1, unit: 'x' },\n        { axis: 'two', value: 2, unit: 'x' },\n        { axis: 'three', value: 3, unit: 'x' },\n        { axis: 'four', value: 4, unit: 'x' },\n        { axis: 'five', value: 5, unit: 'x' },\n        { axis: 'six', value: 6, unit: 'x' },\n        { axis: 'seven', value: 7, unit: 'x' },\n        { axis: 'eight', value: 8, unit: 'x' },\n        { axis: 'nine (long labels are wrapped)', value: 9, unit: 'x' },\n      ],\n      [\n        { axis: 'one', value: 9, unit: 'y' },\n        { axis: 'two', value: 8, unit: 'y' },\n        { axis: 'three', value: 7, unit: 'y' },\n        { axis: 'four', value: 6, unit: 'y' },\n        { axis: 'five', value: 5, unit: 'y' },\n        { axis: 'six', value: 4, unit: 'y' },\n        { axis: 'seven', value: 3, unit: 'y' },\n        { axis: 'eight', value: 2, unit: 'y' },\n        { axis: 'nine (long labels are wrapped)', value: 1, unit: 'y' },\n      ],\n    ] as IRadarChartDataNode[][];\n  }\n\n  /** The chart options. */\n  private get chartOptions() {\n    return {\n      chartTitle: 'Example radar chart',\n    } as Partial<IRadarChartOptions>;\n  }\n\n  /** The breakpoint observer stream. */\n  private readonly breakpoint$ = this.breakpointObserver\n    .observe([Breakpoints.XSmall, Breakpoints.Small, Breakpoints.Medium, Breakpoints.Large, Breakpoints.XLarge])\n    .pipe(map(result => Object.keys(result.breakpoints).find(item => result.breakpoints[item]) ?? 'unknown'));\n\n  /** The chart configuration stream. */\n  public readonly chartConfig$ = this.breakpoint$.pipe(\n    switchMap(() => {\n      const timeout = 100;\n      return timer(timeout).pipe(\n        first(),\n        map(() => ({ data: this.chartData, options: this.chartOptions })),\n      );\n    }),\n  );\n\n  constructor(private readonly breakpointObserver: BreakpointObserver) {}\n}\n","@if (chartConfig$ | async; as config) {\n  <div class=\"container\">\n    <app-radar-chart [chartId]=\"'radar-example-1'\" [data]=\"[config.data[0]]\" [options]=\"config.options\"></app-radar-chart>\n    <app-radar-chart [chartId]=\"'radar-example-2'\" [data]=\"[config.data[1]]\" [options]=\"config.options\"></app-radar-chart>\n    <app-radar-chart [chartId]=\"'radar-example-3'\" [data]=\"config.data\" [options]=\"config.options\"></app-radar-chart>\n  </div>\n}\n","import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { first, map, switchMap, timer } from 'rxjs';\n\nimport { IBarChartOptions, TBarChartData } from '../../interfaces/bar-chart.interface';\n\n/** Bar chart example. */\n@Component({\n  selector: 'app-chart-examples-bar',\n  templateUrl: './chart-examples-bar.component.html',\n  styleUrls: ['./chart-examples-bar.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: false,\n})\nexport class AppChartExamplesBarComponent {\n  /** The chart data. */\n  private get chartData() {\n    return [\n      { title: 'one', value: 1 },\n      { title: 'two', value: 2 },\n      { title: 'three', value: 3 },\n      { title: 'four', value: 4 },\n      { title: 'five', value: 5 },\n    ] as TBarChartData;\n  }\n\n  /** The chart options. */\n  private get chartOptions() {\n    return {\n      chartTitle: 'Example bar chart',\n      xAxisTitle: 'long x axis title',\n      yAxisTitle: 'long y axis title',\n    } as Partial<IBarChartOptions>;\n  }\n\n  /** The breakpoint observer stream. */\n  private readonly breakpoint$ = this.breakpointObserver\n    .observe([Breakpoints.XSmall, Breakpoints.Small, Breakpoints.Medium, Breakpoints.Large, Breakpoints.XLarge])\n    .pipe(map(result => Object.keys(result.breakpoints).find(item => result.breakpoints[item]) ?? 'unknown'));\n\n  /** The chart configuration stream. */\n  public readonly chartConfig$ = this.breakpoint$.pipe(\n    switchMap(() => {\n      const timeout = 100;\n      return timer(timeout).pipe(\n        first(),\n        map(() => ({ data: this.chartData, options: this.chartOptions })),\n      );\n    }),\n  );\n\n  constructor(private readonly breakpointObserver: BreakpointObserver) {}\n}\n","@if (chartConfig$ | async; as config) {\n  <div class=\"container\">\n    <app-bar-chart [chartId]=\"'bar-example-1'\" [data]=\"config.data\" [options]=\"config.options\"></app-bar-chart>\n  </div>\n}\n","import { DOCUMENT } from '@angular/common';\nimport { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, Inject, Input, OnChanges, ViewChild } from '@angular/core';\n\nimport { IChartInputChanges } from '../../interfaces/chart-component.interface';\nimport { IPieChartDataNode, IPieChartOptions } from '../../interfaces/pie-chart.interface';\nimport { D3_CHART_FACTORY, ID3ChartFactory } from '../../providers/d3-chart-factory.provider';\nimport { AppD3ChartBase } from '../_base/chart.base';\n\ntype TPieData = IPieChartDataNode[];\ntype TPieOptions = Partial<IPieChartOptions>;\n\n/** The pie chart component. */\n@Component({\n  selector: 'app-pie-chart',\n  templateUrl: './pie-chart.component.html',\n  styleUrls: ['./pie-chart.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: false,\n})\nexport class AppPieChartComponent extends AppD3ChartBase<TPieData, TPieOptions> implements AfterViewInit, OnChanges {\n  /** The chart id. */\n  @Input() public chartId = 'pie-0';\n\n  /** The chart data. */\n  @Input() public data: TPieData = [];\n\n  /** The chart options. */\n  @Input() public options: TPieOptions = {};\n\n  /** D3 chart view child reference. */\n  @ViewChild('container') public readonly container?: ElementRef<HTMLDivElement>;\n\n  /**\n   * @param doc The web page's Document object.\n   * @param d3Factory D3 chart factory.\n   */\n  constructor(\n    @Inject(DOCUMENT) private readonly doc: Document,\n    @Inject(D3_CHART_FACTORY) private readonly d3Factory: ID3ChartFactory,\n  ) {\n    super();\n  }\n\n  /** The chart options constructor. */\n  protected chartOptions(): TPieOptions {\n    const margin: TPieOptions['margin'] = { top: 50, right: 50, bottom: 50, left: 50 };\n    const minWidth = 350;\n    const modifiers = {\n      width: 10,\n      height: 20,\n    };\n    const width = Math.min(minWidth, this.doc.body.clientWidth - modifiers.width) - margin.left - margin.right;\n    const height = Math.min(width, this.doc.body.clientHeight - margin.top - margin.bottom - modifiers.height);\n    const options: TPieOptions = {\n      width,\n      height,\n      margin,\n      ...this.options,\n    };\n    return options;\n  }\n\n  /** Draws the chart. */\n  protected drawChart(): void {\n    if (typeof this.container !== 'undefined') {\n      const options = this.chartOptions();\n      this.d3Factory.drawPieChart(this.container, this.data, options);\n    }\n  }\n\n  /** Actually draws the chart after the component view is initialized. */\n  public ngAfterViewInit(): void {\n    this.drawChart();\n  }\n\n  /** Redraws the chart on changes. */\n  public ngOnChanges(changes: IChartInputChanges): void {\n    const data: TPieData | undefined = changes.data?.currentValue;\n    const options: TPieOptions = changes.options?.currentValue;\n    if ((typeof data !== 'undefined' && data !== null) || (typeof options !== 'undefined' && options !== null)) {\n      this.drawChart();\n    }\n  }\n}\n","<div class=\"container\">\n  <div id=\"{{ chartId }}\" #container></div>\n\n  <small class=\"container--chart-title\">{{ options.chartTitle }}</small>\n</div>\n","import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { first, map, switchMap, timer } from 'rxjs';\n\nimport { IPieChartDataNode, IPieChartOptions } from '../../interfaces/pie-chart.interface';\n\n/** Pie chart example. */\n@Component({\n  selector: 'app-chart-examples-pie',\n  templateUrl: './chart-examples-pie.component.html',\n  styleUrls: ['./chart-examples-pie.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: false,\n})\nexport class AppChartExamplesPieComponent {\n  /** The chart data. */\n  private get chartData() {\n    return [\n      { key: 'one', y: 1 },\n      { key: 'two', y: 2 },\n      { key: 'three', y: 3 },\n      { key: 'four', y: 4 },\n      { key: 'five', y: 5 },\n      { key: 'six', y: 6 },\n    ] as IPieChartDataNode[];\n  }\n\n  /** The chart options. */\n  private get chartOptions() {\n    const options: {\n      first: Partial<IPieChartOptions>;\n      second: Partial<IPieChartOptions>;\n    } = {\n      first: {\n        chartTitle: 'Example pie chart 1',\n      } as Partial<IPieChartOptions>,\n      second: {\n        chartTitle: 'Example pie chart 2',\n        innerRadius: 75,\n      } as Partial<IPieChartOptions>,\n    };\n    return options;\n  }\n\n  /** The breakpoint observer stream. */\n  private readonly breakpoint$ = this.breakpointObserver\n    .observe([Breakpoints.XSmall, Breakpoints.Small, Breakpoints.Medium, Breakpoints.Large, Breakpoints.XLarge])\n    .pipe(map(result => Object.keys(result.breakpoints).find(item => result.breakpoints[item]) ?? 'unknown'));\n\n  /** The chart configuration stream. */\n  public readonly chartConfig$ = this.breakpoint$.pipe(\n    switchMap(() => {\n      const timeout = 100;\n      return timer(timeout).pipe(\n        first(),\n        map(() => ({ data: this.chartData, options: this.chartOptions })),\n      );\n    }),\n  );\n\n  constructor(private readonly breakpointObserver: BreakpointObserver) {}\n}\n","@if (chartConfig$ | async; as config) {\n  <div class=\"container\">\n    <app-pie-chart [chartId]=\"'pie-example-1'\" [data]=\"config.data\" [options]=\"config.options.first\"></app-pie-chart>\n    <app-pie-chart [chartId]=\"'pie-example-2'\" [data]=\"config.data\" [options]=\"config.options.second\"></app-pie-chart>\n  </div>\n}\n","import { DOCUMENT } from '@angular/common';\nimport { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, Inject, Input, OnChanges, ViewChild } from '@angular/core';\n\nimport { IChartInputChanges } from '../../interfaces/chart-component.interface';\nimport { IGaugeChartDataNode, IGaugeChartOptions } from '../../interfaces/gauge-chart.interface';\nimport { D3_CHART_FACTORY, ID3ChartFactory } from '../../providers/d3-chart-factory.provider';\nimport { AppD3ChartBase } from '../_base/chart.base';\n\ntype TGaugeData = IGaugeChartDataNode[];\ntype TGaugeOptions = Partial<IGaugeChartOptions>;\n\n/** The gauge chart component. */\n@Component({\n  selector: 'app-gauge-chart',\n  templateUrl: './gauge-chart.component.html',\n  styleUrls: ['./gauge-chart.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: false,\n})\nexport class AppGaugeChartComponent extends AppD3ChartBase<TGaugeData, TGaugeOptions> implements AfterViewInit, OnChanges {\n  /** The chart id. */\n  @Input() public chartId = 'gauge-0';\n\n  /** The value of the gauge chart. */\n  @Input() public value = 0;\n\n  /** The chart data. */\n  @Input() public data: TGaugeData = [];\n\n  /** The chart options. */\n  @Input() public options: TGaugeOptions = {};\n\n  /** D3 chart view child reference. */\n  @ViewChild('container') public readonly container?: ElementRef<HTMLDivElement>;\n\n  /**\n   * @param doc The web page's Document object.\n   * @param d3Factory D3 chart factory.\n   */\n  constructor(\n    @Inject(DOCUMENT) private readonly doc: Document,\n    @Inject(D3_CHART_FACTORY) private readonly d3Factory: ID3ChartFactory,\n  ) {\n    super();\n  }\n\n  /** The chart options constructor. */\n  protected chartOptions(): TGaugeOptions {\n    const margin: TGaugeOptions['margin'] = { top: 50, right: 50, bottom: 50, left: 50 };\n    const minWidth = 350;\n    const modifiers = {\n      width: 10,\n      height: 20,\n    };\n    const width = Math.min(minWidth, this.doc.body.clientWidth - modifiers.width) - margin.left - margin.right;\n    const height = Math.min(width, this.doc.body.clientHeight - margin.top - margin.bottom - modifiers.height);\n    const options: TGaugeOptions = {\n      width,\n      height,\n      margin,\n      ...this.options,\n      value: this.value,\n    };\n    return options;\n  }\n\n  /** Draws the chart. */\n  protected drawChart(): void {\n    if (typeof this.container !== 'undefined') {\n      const options = this.chartOptions();\n      this.d3Factory.drawGaugeChart(this.container, this.data, options);\n    }\n  }\n\n  /** Actually draws the chart after the component view is initialized. */\n  public ngAfterViewInit(): void {\n    this.drawChart();\n  }\n\n  /** Redraws the chart on changes. */\n  public ngOnChanges(changes: IChartInputChanges): void {\n    const data: TGaugeData | undefined = changes.data?.currentValue;\n    const options: TGaugeOptions = changes.options?.currentValue;\n    if ((typeof data !== 'undefined' && data !== null) || (typeof options !== 'undefined' && options !== null)) {\n      this.drawChart();\n    }\n  }\n}\n","<div class=\"container\">\n  <div id=\"{{ chartId }}\" #container></div>\n\n  <small class=\"container--chart-title\">{{ options.chartTitle }}</small>\n</div>\n","import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { first, map, switchMap, timer } from 'rxjs';\n\nimport { IGaugeChartDataNode, IGaugeChartOptions } from '../../interfaces/gauge-chart.interface';\n\n/** Gauge chart example. */\n@Component({\n  selector: 'app-chart-examples-gauge',\n  templateUrl: './chart-examples-gauge.component.html',\n  styleUrls: ['./chart-examples-gauge.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: false,\n})\nexport class AppChartExamplesGaugeComponent {\n  /** The chat values. */\n  public value = {\n    first: 80,\n    second: 75,\n    third: 65,\n  };\n\n  /** The chart data. */\n  private get chartData() {\n    const chunks = {\n      first: 10,\n      second: 100,\n    };\n    const data: {\n      first: IGaugeChartDataNode[];\n      second: IGaugeChartDataNode[];\n    } = {\n      first: Array.from(Array(chunks.first).keys()).map(item => {\n        const mod = 10;\n        return {\n          key: 'value',\n          y: (item + 1) * mod,\n        } as IGaugeChartDataNode;\n      }),\n      second: Array.from(Array(chunks.second).keys()).map(item => {\n        return {\n          key: 'value',\n          y: item + 1,\n        } as IGaugeChartDataNode;\n      }),\n    };\n    return data;\n  }\n\n  /**\n   * Example gauge chart options.\n   */\n  private get chartOptions() {\n    const options: {\n      first: Partial<IGaugeChartOptions>;\n      second: Partial<IGaugeChartOptions>;\n      third: Partial<IGaugeChartOptions>;\n      fourth: Partial<IGaugeChartOptions>;\n    } = {\n      first: {\n        chartTitle: 'Example gauge chart 1',\n      } as Partial<IGaugeChartOptions>,\n      second: {\n        chartTitle: 'Example gauge chart 2',\n        showLabels: false,\n      } as Partial<IGaugeChartOptions>,\n      third: {\n        chartTitle: 'Example gauge chart 3',\n        showLabels: false,\n        showTooltips: false,\n        defaultColor: 'red',\n      } as Partial<IGaugeChartOptions>,\n      fourth: {\n        chartTitle: 'Example gauge chart 2',\n        showLabels: false,\n        valueFontSize: 30,\n        padRad: 0,\n      } as Partial<IGaugeChartOptions>,\n    };\n    return options;\n  }\n\n  /** The breakpoint observer stream. */\n  private readonly breakpoint$ = this.breakpointObserver\n    .observe([Breakpoints.XSmall, Breakpoints.Small, Breakpoints.Medium, Breakpoints.Large, Breakpoints.XLarge])\n    .pipe(map(result => Object.keys(result.breakpoints).find(item => result.breakpoints[item]) ?? 'unknown'));\n\n  /** The chart configuration stream. */\n  public readonly chartConfig$ = this.breakpoint$.pipe(\n    switchMap(() => {\n      const timeout = 100;\n      return timer(timeout).pipe(\n        first(),\n        map(() => ({ data: this.chartData, options: this.chartOptions })),\n      );\n    }),\n  );\n\n  constructor(private readonly breakpointObserver: BreakpointObserver) {}\n}\n","@if (chartConfig$ | async; as config) {\n  <div class=\"container\">\n    <app-gauge-chart\n      [chartId]=\"'gauge-example-1'\"\n      [data]=\"config.data.first\"\n      [options]=\"config.options.first\"\n      [value]=\"value.first\"\n    ></app-gauge-chart>\n    <app-gauge-chart\n      [chartId]=\"'gauge-example-2'\"\n      [data]=\"config.data.second\"\n      [options]=\"config.options.second\"\n      [value]=\"value.second\"\n    ></app-gauge-chart>\n    <app-gauge-chart\n      [chartId]=\"'gauge-example-3'\"\n      [data]=\"config.data.second\"\n      [options]=\"config.options.third\"\n      [value]=\"value.third\"\n    ></app-gauge-chart>\n    <app-gauge-chart\n      [chartId]=\"'gauge-example-4'\"\n      [data]=\"config.data.second\"\n      [options]=\"config.options.fourth\"\n      [value]=\"value.third\"\n    ></app-gauge-chart>\n  </div>\n}\n","import { DOCUMENT } from '@angular/common';\nimport { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, Inject, Input, OnChanges, ViewChild } from '@angular/core';\n\nimport { IChartInputChanges } from '../../interfaces/chart-component.interface';\nimport { IForceDirectedChartData, IForceDirectedChartOptions } from '../../interfaces/force-directed-chart.interface';\nimport { D3_CHART_FACTORY, ID3ChartFactory } from '../../providers/d3-chart-factory.provider';\nimport { AppD3ChartBase } from '../_base/chart.base';\n\ntype TForceData = IForceDirectedChartData;\ntype TForceOptions = Partial<IForceDirectedChartOptions>;\n\n/** The force directed chart component. */\n@Component({\n  selector: 'app-force-directed-chart',\n  templateUrl: './force-directed-chart.component.html',\n  styleUrls: ['./force-directed-chart.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: false,\n})\nexport class AppForceDirectedChartComponent extends AppD3ChartBase<TForceData, TForceOptions> implements AfterViewInit, OnChanges {\n  /** The chart identifier. */\n  @Input() public chartId = 'force-0';\n\n  /** The chart data. */\n  @Input() public data: TForceData = {\n    domains: [],\n    entities: [],\n    links: [],\n    nodes: [],\n  };\n\n  /** The chart options. */\n  @Input() public options: TForceOptions = {};\n\n  /** The chart container view child reference. */\n  @ViewChild('container') public readonly container?: ElementRef<HTMLDivElement>;\n\n  /**\n   * @param doc The web page's Document object.\n   * @param d3Factory D3 chart factory.\n   */\n  constructor(\n    @Inject(DOCUMENT) private readonly doc: Document,\n    @Inject(D3_CHART_FACTORY) private readonly d3Factory: ID3ChartFactory,\n  ) {\n    super();\n  }\n\n  /** The chart options constructor. */\n  protected chartOptions(): TForceOptions {\n    const margin: TForceOptions['margin'] = { top: 50, right: 50, bottom: 50, left: 50 };\n    const minWidth = 350;\n    const modifiers = {\n      width: 10,\n      height: 20,\n    };\n    const width = Math.min(minWidth, this.doc.body.clientWidth - modifiers.width) - margin.left - margin.right;\n    const height = Math.min(width, this.doc.body.clientHeight - margin.top - margin.bottom - modifiers.height);\n    const options: TForceOptions = { width, height, margin, ...this.options };\n    return options;\n  }\n\n  /** Draws the chart. */\n  protected drawChart(): void {\n    if (typeof this.container !== 'undefined') {\n      const options = this.chartOptions();\n      this.d3Factory.drawForceDirectedChart(this.container, this.data, options);\n    }\n  }\n\n  /** Actually draws the chart after the component view is initialized. */\n  public ngAfterViewInit(): void {\n    this.drawChart();\n  }\n\n  /** Redraws the chart on changes. */\n  public ngOnChanges(changes: IChartInputChanges): void {\n    const prevData: TForceData | undefined = changes.data?.previousValue;\n    const nextData: TForceData | undefined = changes.data?.currentValue;\n    const options: TForceOptions = changes.options?.currentValue;\n    if (\n      (Boolean(changes.data?.currentValue) && (prevData?.nodes ?? []).length !== (nextData?.nodes ?? []).length) ||\n      (typeof options !== 'undefined' && options !== null)\n    ) {\n      this.drawChart();\n    }\n  }\n}\n","<div class=\"container\">\n  <div id=\"{{ chartId }}\" #container></div>\n\n  <small class=\"container--chart-title\">{{ options.chartTitle }}</small>\n</div>\n","import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { first, map, switchMap, timer } from 'rxjs';\n\nimport {\n  IForceDirectedChartData,\n  IForceDirectedChartOptions,\n  IForceDirectedGraphEntity,\n} from '../../interfaces/force-directed-chart.interface';\n\n/** Force directed chart example. */\n@Component({\n  selector: 'app-chart-examples-force-directed',\n  templateUrl: './chart-examples-force-directed.component.html',\n  styleUrls: ['./chart-examples-force-directed.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: false,\n})\nexport class AppChartExamplesForceDirectedComponent {\n  /** Sample chart data. */\n  private readonly value = Object.freeze({\n    domains: ['first', 'second', 'third'],\n    entities: [\n      { name: 'one', domains: ['first'], img: '' },\n      { name: 'two', domains: ['second'], img: '' },\n      { name: 'three', domains: ['third'], img: '' },\n      { name: 'four', domains: ['first', 'second'], img: '' },\n      { name: 'five', domains: ['second'], img: '' },\n      { name: 'six', domains: ['third', 'second'], img: '' },\n      { name: 'seven', domains: ['second'], img: '' },\n      { name: 'eight', domains: ['third'], img: '' },\n    ],\n  });\n\n  /** The chart data. */\n  private get chartData() {\n    const input = { ...this.value };\n    const domains: IForceDirectedChartData['domains'] = input.domains.map((name, index) => ({ index, name, value: 1 }));\n    const entities: IForceDirectedChartData['entities'] = input.entities.map((app, index) => ({\n      index: index,\n      name: app.name,\n      domains: [...app.domains],\n      img: app.img,\n      linksCount: input.entities.reduce((accumulator, entity) => {\n        const counter = entity.name === app.name ? 0 : entity.domains.filter(domain => app.domains.includes(domain)).length;\n        return accumulator + counter;\n      }, 0),\n    }));\n    const nodes: IForceDirectedGraphEntity[] = [...entities.map(item => ({ ...item, value: 1 }))];\n    const links: IForceDirectedChartData['links'] = entities\n      .map(entity => {\n        return entity.domains.map(domain => {\n          const source = domains.find(value => domain === value.name)?.index ?? -1;\n          const target = entity.index;\n          return { source, target };\n        });\n      })\n      .reduce((accumulator, item) => (Array.isArray(item) ? [...accumulator, ...item] : [...accumulator, item]), [])\n      .filter(link => link.source !== -1 && link.target !== -1 && typeof link.target !== 'undefined');\n    const chartData: IForceDirectedChartData = {\n      domains,\n      entities: entities.map(item => ({\n        ...item,\n        linksCount: links.reduce((acc, link) => (link.target === item.index ? acc + 1 : acc), 0),\n      })),\n      links,\n      nodes,\n    };\n    return chartData;\n  }\n\n  /** The chart options. */\n  private get chartOptions() {\n    return {\n      chartTitle: 'Example force directed chart',\n    } as Partial<IForceDirectedChartOptions>;\n  }\n\n  /** the breakpoint observer stream. */\n  private readonly breakpoint$ = this.breakpointObserver\n    .observe([Breakpoints.XSmall, Breakpoints.Small, Breakpoints.Medium, Breakpoints.Large, Breakpoints.XLarge])\n    .pipe(map(result => Object.keys(result.breakpoints).find(item => result.breakpoints[item]) ?? 'unknown'));\n\n  /** The chart configuration stream. */\n  public readonly chartConfig$ = this.breakpoint$.pipe(\n    switchMap(() => {\n      const timeout = 100;\n      return timer(timeout).pipe(\n        first(),\n        map(() => ({ data: this.chartData, options: this.chartOptions })),\n      );\n    }),\n  );\n\n  constructor(private readonly breakpointObserver: BreakpointObserver) {}\n}\n","@if (chartConfig$ | async; as config) {\n  <div class=\"container\">\n    <app-force-directed-chart\n      [chartId]=\"'force-directed-example-1'\"\n      [data]=\"config.data\"\n      [options]=\"config.options\"\n    ></app-force-directed-chart>\n  </div>\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n  selector: 'app-chart-examples',\n  templateUrl: './chart-examples.component.html',\n  styleUrls: ['./chart-examples.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: false,\n})\nexport class AppChartExamplesComponent {}\n","<app-chart-examples-bar></app-chart-examples-bar>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<app-chart-examples-line></app-chart-examples-line>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<app-chart-examples-radar></app-chart-examples-radar>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<app-chart-examples-pie></app-chart-examples-pie>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<app-chart-examples-gauge></app-chart-examples-gauge>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<app-chart-examples-force-directed></app-chart-examples-force-directed>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { AppGaugeChartComponent } from './components';\nimport { AppBarChartComponent } from './components/bar-chart/bar-chart.component';\nimport { AppChartExamplesComponent } from './components/chart-examples/chart-examples.component';\nimport { AppChartExamplesBarComponent } from './components/chart-examples-bar/chart-examples-bar.component';\nimport { AppChartExamplesForceDirectedComponent } from './components/chart-examples-force-directed/chart-examples-force-directed.component';\nimport { AppChartExamplesGaugeComponent } from './components/chart-examples-gauge/chart-examples-gauge.component';\nimport { AppChartExamplesLineComponent } from './components/chart-examples-line/chart-examples-line.component';\nimport { AppChartExamplesPieComponent } from './components/chart-examples-pie/chart-examples-pie.component';\nimport { AppChartExamplesRadaraComponent } from './components/chart-examples-radar/chart-examples-radar.component';\nimport { AppForceDirectedChartComponent } from './components/force-directed-chart/force-directed-chart.component';\nimport { AppLineChartComponent } from './components/line-chart/line-chart.component';\nimport { AppPieChartComponent } from './components/pie-chart/pie-chart.component';\nimport { AppRadarChartComponent } from './components/radar-chart/radar-chart.component';\n\n@NgModule({\n  imports: [CommonModule],\n  declarations: [\n    AppGaugeChartComponent,\n    AppPieChartComponent,\n    AppRadarChartComponent,\n    AppForceDirectedChartComponent,\n    AppBarChartComponent,\n    AppLineChartComponent,\n    AppChartExamplesComponent,\n    AppChartExamplesLineComponent,\n    AppChartExamplesRadaraComponent,\n    AppChartExamplesBarComponent,\n    AppChartExamplesPieComponent,\n    AppChartExamplesGaugeComponent,\n    AppChartExamplesForceDirectedComponent,\n  ],\n  exports: [\n    AppGaugeChartComponent,\n    AppPieChartComponent,\n    AppRadarChartComponent,\n    AppForceDirectedChartComponent,\n    AppBarChartComponent,\n    AppLineChartComponent,\n    AppChartExamplesComponent,\n  ],\n})\nexport class AppD3ChartsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["createContainer","wrapSvgText","createLegend","createAxisX","createAxisY","onMouseOver","onMouseOut","i2.AppLineChartComponent","i2.AppRadarChartComponent","i2.AppBarChartComponent","i2.AppPieChartComponent","i2.AppGaugeChartComponent","i2.AppForceDirectedChartComponent","i1","i2.AppChartExamplesLineComponent","i3.AppChartExamplesRadaraComponent","i4.AppChartExamplesBarComponent","i5.AppChartExamplesPieComponent","i6.AppChartExamplesGaugeComponent","i7.AppChartExamplesForceDirectedComponent"],"mappings":"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"}