@rfprodz/client-d3-charts 1.6.10 → 1.6.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"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 {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n DOCUMENT,\n ElementRef,\n inject,\n Input,\n OnChanges,\n ViewChild,\n} from '@angular/core';\n\nimport { IBarChartOptions, TBarChartData } from '../../interfaces/bar-chart.interface';\nimport { IChartInputChanges } from '../../interfaces/chart-component.interface';\nimport { D3_CHART_FACTORY } 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 private readonly doc = inject(DOCUMENT);\n\n private readonly factory = inject(D3_CHART_FACTORY);\n\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 constructor() {\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.factory.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 {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n DOCUMENT,\n ElementRef,\n inject,\n Input,\n OnChanges,\n ViewChild,\n} from '@angular/core';\n\nimport { IChartInputChanges } from '../../interfaces/chart-component.interface';\nimport { ILineChartOptions, TLineChartData } from '../../interfaces/line-chart.interface';\nimport { D3_CHART_FACTORY } 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 private readonly doc = inject(DOCUMENT);\n\n private readonly factory = inject(D3_CHART_FACTORY);\n\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 constructor() {\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.factory.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, inject } 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 private readonly breakpointObserver = inject(BreakpointObserver);\n\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 /**\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 {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n DOCUMENT,\n ElementRef,\n inject,\n Input,\n OnChanges,\n ViewChild,\n} from '@angular/core';\n\nimport { IChartInputChanges } from '../../interfaces/chart-component.interface';\nimport { IRadarChartDataNode, IRadarChartOptions } from '../../interfaces/radar-chart.interface';\nimport { D3_CHART_FACTORY } 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 private readonly doc = inject(DOCUMENT);\n\n private readonly factory = inject(D3_CHART_FACTORY);\n\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 constructor() {\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.factory.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, inject } 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 private readonly breakpointObserver = inject(BreakpointObserver);\n\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","@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, inject } 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 private readonly breakpointObserver = inject(BreakpointObserver);\n\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","@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 {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n DOCUMENT,\n ElementRef,\n inject,\n Input,\n OnChanges,\n ViewChild,\n} from '@angular/core';\n\nimport { IChartInputChanges } from '../../interfaces/chart-component.interface';\nimport { IPieChartDataNode, IPieChartOptions } from '../../interfaces/pie-chart.interface';\nimport { D3_CHART_FACTORY } 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 private readonly doc = inject(DOCUMENT);\n\n private readonly factory = inject(D3_CHART_FACTORY);\n\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 constructor() {\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.factory.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, inject } 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 private readonly breakpointObserver = inject(BreakpointObserver);\n\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","@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 {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n DOCUMENT,\n ElementRef,\n inject,\n Input,\n OnChanges,\n ViewChild,\n} from '@angular/core';\n\nimport { IChartInputChanges } from '../../interfaces/chart-component.interface';\nimport { IGaugeChartDataNode, IGaugeChartOptions } from '../../interfaces/gauge-chart.interface';\nimport { D3_CHART_FACTORY } 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 private readonly doc = inject(DOCUMENT);\n\n private readonly factory = inject(D3_CHART_FACTORY);\n\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 constructor() {\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.factory.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, inject } 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 private readonly breakpointObserver = inject(BreakpointObserver);\n\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","@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 {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n DOCUMENT,\n ElementRef,\n inject,\n Input,\n OnChanges,\n ViewChild,\n} from '@angular/core';\n\nimport { IChartInputChanges } from '../../interfaces/chart-component.interface';\nimport { IForceDirectedChartData, IForceDirectedChartOptions } from '../../interfaces/force-directed-chart.interface';\nimport { D3_CHART_FACTORY } 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 private readonly doc = inject(DOCUMENT);\n\n private readonly factory = inject(D3_CHART_FACTORY);\n\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 constructor() {\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.factory.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, inject } 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 private readonly breakpointObserver = inject(BreakpointObserver);\n\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","@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","i1.AppLineChartComponent","i1.AppRadarChartComponent","i1.AppBarChartComponent","i1.AppPieChartComponent","i1.AppGaugeChartComponent","i1.AppForceDirectedChartComponent","i1","i2.AppChartExamplesLineComponent","i3.AppChartExamplesRadaraComponent","i4.AppChartExamplesBarComponent","i5.AppChartExamplesPieComponent","i6.AppChartExamplesGaugeComponent","i7.AppChartExamplesForceDirectedComponent"],"mappings":"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"}
1
+ {"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(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(defaultForceDirectedChartConfig, options, {});\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(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(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(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(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 {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n DOCUMENT,\n ElementRef,\n inject,\n Input,\n OnChanges,\n ViewChild,\n} from '@angular/core';\n\nimport { IBarChartOptions, TBarChartData } from '../../interfaces/bar-chart.interface';\nimport { IChartInputChanges } from '../../interfaces/chart-component.interface';\nimport { D3_CHART_FACTORY } 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 private readonly doc = inject(DOCUMENT);\n\n private readonly factory = inject(D3_CHART_FACTORY);\n\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 constructor() {\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.factory.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 {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n DOCUMENT,\n ElementRef,\n inject,\n Input,\n OnChanges,\n ViewChild,\n} from '@angular/core';\n\nimport { IChartInputChanges } from '../../interfaces/chart-component.interface';\nimport { ILineChartOptions, TLineChartData } from '../../interfaces/line-chart.interface';\nimport { D3_CHART_FACTORY } 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 private readonly doc = inject(DOCUMENT);\n\n private readonly factory = inject(D3_CHART_FACTORY);\n\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 constructor() {\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.factory.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, inject } 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 private readonly breakpointObserver = inject(BreakpointObserver);\n\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 /**\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 {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n DOCUMENT,\n ElementRef,\n inject,\n Input,\n OnChanges,\n ViewChild,\n} from '@angular/core';\n\nimport { IChartInputChanges } from '../../interfaces/chart-component.interface';\nimport { IRadarChartDataNode, IRadarChartOptions } from '../../interfaces/radar-chart.interface';\nimport { D3_CHART_FACTORY } 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 private readonly doc = inject(DOCUMENT);\n\n private readonly factory = inject(D3_CHART_FACTORY);\n\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 constructor() {\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.factory.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, inject } 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 private readonly breakpointObserver = inject(BreakpointObserver);\n\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","@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, inject } 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 private readonly breakpointObserver = inject(BreakpointObserver);\n\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","@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 {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n DOCUMENT,\n ElementRef,\n inject,\n Input,\n OnChanges,\n ViewChild,\n} from '@angular/core';\n\nimport { IChartInputChanges } from '../../interfaces/chart-component.interface';\nimport { IPieChartDataNode, IPieChartOptions } from '../../interfaces/pie-chart.interface';\nimport { D3_CHART_FACTORY } 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 private readonly doc = inject(DOCUMENT);\n\n private readonly factory = inject(D3_CHART_FACTORY);\n\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 constructor() {\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.factory.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, inject } 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 private readonly breakpointObserver = inject(BreakpointObserver);\n\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","@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 {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n DOCUMENT,\n ElementRef,\n inject,\n Input,\n OnChanges,\n ViewChild,\n} from '@angular/core';\n\nimport { IChartInputChanges } from '../../interfaces/chart-component.interface';\nimport { IGaugeChartDataNode, IGaugeChartOptions } from '../../interfaces/gauge-chart.interface';\nimport { D3_CHART_FACTORY } 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 private readonly doc = inject(DOCUMENT);\n\n private readonly factory = inject(D3_CHART_FACTORY);\n\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 constructor() {\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.factory.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, inject } 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 private readonly breakpointObserver = inject(BreakpointObserver);\n\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","@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 {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n DOCUMENT,\n ElementRef,\n inject,\n Input,\n OnChanges,\n ViewChild,\n} from '@angular/core';\n\nimport { IChartInputChanges } from '../../interfaces/chart-component.interface';\nimport { IForceDirectedChartData, IForceDirectedChartOptions } from '../../interfaces/force-directed-chart.interface';\nimport { D3_CHART_FACTORY } 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 private readonly doc = inject(DOCUMENT);\n\n private readonly factory = inject(D3_CHART_FACTORY);\n\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 constructor() {\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.factory.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, inject } 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 private readonly breakpointObserver = inject(BreakpointObserver);\n\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","@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","i1.AppLineChartComponent","i1.AppRadarChartComponent","i1.AppBarChartComponent","i1.AppPieChartComponent","i1.AppGaugeChartComponent","i1.AppForceDirectedChartComponent","i1","i2.AppChartExamplesLineComponent","i3.AppChartExamplesRadaraComponent","i4.AppChartExamplesBarComponent","i5.AppChartExamplesPieComponent","i6.AppChartExamplesGaugeComponent","i7.AppChartExamplesForceDirectedComponent"],"mappings":"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"}