UNPKG

805 kBSource Map (JSON)View Raw
1{"version":3,"file":"swimlane-ngx-charts.js","sources":["../projects/swimlane/ngx-charts/src/lib/common/tooltip/injection.service.ts","../../projects/swimlane/ngx-charts/src/lib/utils/throttle.ts","../esm2015/projects/swimlane/ngx-charts/src/lib/common/tooltip/position/placement.type.ts","../esm2015/projects/swimlane/ngx-charts/src/lib/common/tooltip/position/position.ts","../projects/swimlane/ngx-charts/src/lib/common/tooltip/tooltip.component.ts","../projects/swimlane/ngx-charts/src/lib/common/tooltip/injection-registery.service.ts","../projects/swimlane/ngx-charts/src/lib/common/tooltip/tooltip.service.ts","../projects/swimlane/ngx-charts/src/lib/common/types/legend.model.ts","../projects/swimlane/ngx-charts/src/lib/common/types/orientation.enum.ts","../projects/swimlane/ngx-charts/src/lib/common/types/text-anchor.enum.ts","../projects/swimlane/ngx-charts/src/lib/common/types/scale-type.enum.ts","../projects/swimlane/ngx-charts/src/lib/common/charts/chart.component.ts","../../projects/swimlane/ngx-charts/src/lib/utils/visibility-observer.ts","../../projects/swimlane/ngx-charts/src/lib/utils/types.ts","../../projects/swimlane/ngx-charts/src/lib/common/base-chart.component.ts","../projects/swimlane/ngx-charts/src/lib/common/axes/axis-label.component.ts","../../projects/swimlane/ngx-charts/src/lib/common/trim-label.helper.ts","../projects/swimlane/ngx-charts/src/lib/common/axes/ticks.helper.ts","../projects/swimlane/ngx-charts/src/lib/common/axes/x-axis-ticks.component.ts","../projects/swimlane/ngx-charts/src/lib/common/axes/x-axis.component.ts","../../projects/swimlane/ngx-charts/src/lib/common/shape.helper.ts","../projects/swimlane/ngx-charts/src/lib/common/axes/y-axis-ticks.component.ts","../projects/swimlane/ngx-charts/src/lib/common/axes/y-axis.component.ts","../projects/swimlane/ngx-charts/src/lib/common/axes/axes.module.ts","../projects/swimlane/ngx-charts/src/lib/common/tooltip/style.type.ts","../projects/swimlane/ngx-charts/src/lib/common/tooltip/show.type.ts","../projects/swimlane/ngx-charts/src/lib/common/tooltip/tooltip.directive.ts","../projects/swimlane/ngx-charts/src/lib/common/tooltip/tooltip.module.ts","../../projects/swimlane/ngx-charts/src/lib/common/label.helper.ts","../../projects/swimlane/ngx-charts/src/lib/utils/id.ts","../../projects/swimlane/ngx-charts/src/lib/common/circle-series.component.ts","../../projects/swimlane/ngx-charts/src/lib/common/circle.component.ts","../../projects/swimlane/ngx-charts/src/lib/common/grid-panel.component.ts","../../projects/swimlane/ngx-charts/src/lib/common/grid-panel-series.component.ts","../../projects/swimlane/ngx-charts/src/lib/common/svg-linear-gradient.component.ts","../../projects/swimlane/ngx-charts/src/lib/common/svg-radial-gradient.component.ts","../../projects/swimlane/ngx-charts/src/lib/common/area.component.ts","../projects/swimlane/ngx-charts/src/lib/common/count/count.helper.ts","../projects/swimlane/ngx-charts/src/lib/common/count/count.directive.ts","../../../projects/swimlane/ngx-charts/src/lib/events.ts","../../projects/swimlane/ngx-charts/src/lib/common/tooltip-area.component.ts","../projects/swimlane/ngx-charts/src/lib/common/timeline/timeline.component.ts","../projects/swimlane/ngx-charts/src/lib/common/legend/legend.component.ts","../projects/swimlane/ngx-charts/src/lib/common/legend/legend-entry.component.ts","../projects/swimlane/ngx-charts/src/lib/common/legend/scale-legend.component.ts","../projects/swimlane/ngx-charts/src/lib/common/legend/advanced-legend.component.ts","../../projects/swimlane/ngx-charts/src/lib/common/chart-common.module.ts","../../projects/swimlane/ngx-charts/src/lib/common/view-dimensions.helper.ts","../../projects/swimlane/ngx-charts/src/lib/utils/color-sets.ts","../../projects/swimlane/ngx-charts/src/lib/common/color.helper.ts","../../projects/swimlane/ngx-charts/src/lib/common/domain.helper.ts","../../projects/swimlane/ngx-charts/src/lib/area-chart/area-chart.component.ts","../../projects/swimlane/ngx-charts/src/lib/area-chart/area-chart-normalized.component.ts","../../projects/swimlane/ngx-charts/src/lib/area-chart/area-chart-stacked.component.ts","../../projects/swimlane/ngx-charts/src/lib/utils/sort.ts","../../projects/swimlane/ngx-charts/src/lib/area-chart/area-series.component.ts","../../projects/swimlane/ngx-charts/src/lib/area-chart/area-chart.module.ts","../../projects/swimlane/ngx-charts/src/lib/bar-chart/bar.component.ts","../../projects/swimlane/ngx-charts/src/lib/bar-chart/bar-horizontal.component.ts","../../projects/swimlane/ngx-charts/src/lib/bar-chart/bar-horizontal-2d.component.ts","../../projects/swimlane/ngx-charts/src/lib/bar-chart/bar-horizontal-normalized.component.ts","../../projects/swimlane/ngx-charts/src/lib/bar-chart/bar-horizontal-stacked.component.ts","../../projects/swimlane/ngx-charts/src/lib/bar-chart/bar-vertical.component.ts","../../projects/swimlane/ngx-charts/src/lib/bar-chart/bar-vertical-2d.component.ts","../../projects/swimlane/ngx-charts/src/lib/bar-chart/bar-vertical-normalized.component.ts","../../projects/swimlane/ngx-charts/src/lib/bar-chart/bar-vertical-stacked.component.ts","../projects/swimlane/ngx-charts/src/lib/bar-chart/types/bar-chart-type.enum.ts","../projects/swimlane/ngx-charts/src/lib/bar-chart/types/d0-type.enum.ts","../../projects/swimlane/ngx-charts/src/lib/bar-chart/series-horizontal.component.ts","../../projects/swimlane/ngx-charts/src/lib/bar-chart/series-vertical.component.ts","../../projects/swimlane/ngx-charts/src/lib/bar-chart/bar-label.component.ts","../../projects/swimlane/ngx-charts/src/lib/bar-chart/bar-chart.module.ts","../../projects/swimlane/ngx-charts/src/lib/bubble-chart/bubble-chart.utils.ts","../../projects/swimlane/ngx-charts/src/lib/bubble-chart/bubble-chart.component.ts","../../projects/swimlane/ngx-charts/src/lib/bubble-chart/bubble-series.component.ts","../../projects/swimlane/ngx-charts/src/lib/bubble-chart/bubble-chart.module.ts","../../projects/swimlane/ngx-charts/src/lib/heat-map/heat-map-cell.component.ts","../../projects/swimlane/ngx-charts/src/lib/heat-map/heat-map-cell-series.component.ts","../../projects/swimlane/ngx-charts/src/lib/heat-map/heat-map.component.ts","../../projects/swimlane/ngx-charts/src/lib/heat-map/heat-map.module.ts","../../projects/swimlane/ngx-charts/src/lib/line-chart/line.component.ts","../../projects/swimlane/ngx-charts/src/lib/line-chart/line-chart.component.ts","../../projects/swimlane/ngx-charts/src/lib/line-chart/line-series.component.ts","../../projects/swimlane/ngx-charts/src/lib/line-chart/line-chart.module.ts","../../projects/swimlane/ngx-charts/src/lib/polar-chart/polar-chart.component.ts","../../projects/swimlane/ngx-charts/src/lib/polar-chart/polar-series.component.ts","../../projects/swimlane/ngx-charts/src/lib/pie-chart/advanced-pie-chart.component.ts","../../projects/swimlane/ngx-charts/src/lib/pie-chart/pie-label.component.ts","../../projects/swimlane/ngx-charts/src/lib/pie-chart/pie-arc.component.ts","../../projects/swimlane/ngx-charts/src/lib/pie-chart/pie-chart.component.ts","../../projects/swimlane/ngx-charts/src/lib/common/grid-layout.helper.ts","../../projects/swimlane/ngx-charts/src/lib/pie-chart/pie-grid.component.ts","../../projects/swimlane/ngx-charts/src/lib/pie-chart/pie-grid-series.component.ts","../../projects/swimlane/ngx-charts/src/lib/pie-chart/pie-series.component.ts","../../projects/swimlane/ngx-charts/src/lib/pie-chart/pie-chart.module.ts","../../projects/swimlane/ngx-charts/src/lib/polar-chart/polar-chart.module.ts","../../projects/swimlane/ngx-charts/src/lib/utils/calculate-width.ts","../projects/swimlane/ngx-charts/src/lib/common/constants/font-widths.ts","../../projects/swimlane/ngx-charts/src/lib/number-card/card.component.ts","../../projects/swimlane/ngx-charts/src/lib/utils/color-utils.ts","../../projects/swimlane/ngx-charts/src/lib/number-card/card-series.component.ts","../../projects/swimlane/ngx-charts/src/lib/number-card/number-card.component.ts","../../projects/swimlane/ngx-charts/src/lib/number-card/number-card.module.ts","../../projects/swimlane/ngx-charts/src/lib/tree-map/tree-map-cell.component.ts","../../projects/swimlane/ngx-charts/src/lib/tree-map/tree-map-cell-series.component.ts","../../projects/swimlane/ngx-charts/src/lib/tree-map/tree-map.component.ts","../../projects/swimlane/ngx-charts/src/lib/tree-map/tree-map.module.ts","../../projects/swimlane/ngx-charts/src/lib/gauge/linear-gauge.component.ts","../../projects/swimlane/ngx-charts/src/lib/gauge/gauge.component.ts","../../projects/swimlane/ngx-charts/src/lib/gauge/gauge-arc.component.ts","../../projects/swimlane/ngx-charts/src/lib/gauge/gauge-axis.component.ts","../../projects/swimlane/ngx-charts/src/lib/gauge/gauge.module.ts","../../../projects/swimlane/ngx-charts/src/lib/polyfills.ts","../../../projects/swimlane/ngx-charts/src/lib/ngx-charts.module.ts","../../projects/swimlane/ngx-charts/src/lib/common/tick-format.helper.ts","../../../../projects/swimlane/ngx-charts/src/public-api.ts","../../../../projects/swimlane/ngx-charts/src/swimlane-ngx-charts.ts"],"sourcesContent":["import {\n ApplicationRef,\n ComponentFactoryResolver,\n ComponentRef,\n Injectable,\n Injector,\n ViewContainerRef,\n EmbeddedViewRef,\n Type\n} from '@angular/core';\nimport { DomPortalHost, ComponentPortal } from '@angular/cdk/portal';\n\nfunction isViewContainerRef(x: any): x is ViewContainerRef {\n return x.element;\n}\n\n/**\n * Injection service is a helper to append components\n * dynamically to a known location in the DOM, most\n * noteably for dialogs/tooltips appending to body.\n *\n * @export\n */\n@Injectable()\nexport class InjectionService {\n static globalRootViewContainer: ViewContainerRef = null;\n\n /**\n * Sets a default global root view container. This is useful for\n * things like ngUpgrade that doesn't have a ApplicationRef root.\n *\n * @param container\n */\n static setGlobalRootViewContainer(container: ViewContainerRef): void {\n InjectionService.globalRootViewContainer = container;\n }\n\n private _container: ViewContainerRef;\n\n constructor(\n private applicationRef: ApplicationRef,\n private componentFactoryResolver: ComponentFactoryResolver,\n private injector: Injector\n ) {}\n\n /**\n * Gets the root view container to inject the component to.\n *\n * @memberOf InjectionService\n */\n getRootViewContainer(): ViewContainerRef | ComponentRef<any> {\n if (this._container) return this._container;\n if (InjectionService.globalRootViewContainer) return InjectionService.globalRootViewContainer;\n\n if (this.applicationRef.components.length) return this.applicationRef.components[0];\n\n throw new Error(\n 'View Container not found! ngUpgrade needs to manually set this via setRootViewContainer or setGlobalRootViewContainer.'\n );\n }\n\n /**\n * Overrides the default root view container. This is useful for\n * things like ngUpgrade that doesn't have a ApplicationRef root.\n *\n * @param container\n *\n * @memberOf InjectionService\n */\n setRootViewContainer(container: ViewContainerRef): void {\n this._container = container;\n }\n\n /**\n * Gets the html element for a component ref.\n *\n * @param componentRef\n *\n * @memberOf InjectionService\n */\n getComponentRootNode(component: ViewContainerRef | ComponentRef<any>): HTMLElement {\n if (isViewContainerRef(component)) {\n return component.element.nativeElement;\n }\n if (component.hostView && (component.hostView as EmbeddedViewRef<any>).rootNodes.length > 0) {\n return (component.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\n }\n\n // the top most component root node has no `hostView`\n return component.location.nativeElement;\n }\n\n /**\n * Gets the root component container html element.\n *\n * @memberOf InjectionService\n */\n getRootViewContainerNode(component: ViewContainerRef | ComponentRef<any>): HTMLElement {\n return this.getComponentRootNode(component);\n }\n\n /**\n * Projects the bindings onto the component\n *\n * @param component\n * @param options\n *\n * @memberOf InjectionService\n */\n projectComponentBindings(component: ComponentRef<any>, bindings: any): ComponentRef<any> {\n if (bindings) {\n if (bindings.inputs !== undefined) {\n const bindingKeys = Object.getOwnPropertyNames(bindings.inputs);\n for (const bindingName of bindingKeys) {\n component.instance[bindingName] = bindings.inputs[bindingName];\n }\n }\n\n if (bindings.outputs !== undefined) {\n const eventKeys = Object.getOwnPropertyNames(bindings.outputs);\n for (const eventName of eventKeys) {\n component.instance[eventName] = bindings.outputs[eventName];\n }\n }\n }\n\n return component;\n }\n\n /**\n * Appends a component to a adjacent location\n *\n * @param componentClass\n * @param [options={}]\n * @param [location]\n *\n * @memberOf InjectionService\n */\n appendComponent<T>(componentClass: Type<T>, bindings: any = {}, location?: any): ComponentRef<any> {\n if (!location) location = this.getRootViewContainer();\n const appendLocation = this.getComponentRootNode(location);\n\n const portalHost = new DomPortalHost(\n appendLocation,\n this.componentFactoryResolver,\n this.applicationRef,\n this.injector\n );\n\n const portal = new ComponentPortal(componentClass);\n\n const componentRef = portalHost.attach(portal);\n this.projectComponentBindings(componentRef, bindings);\n return componentRef;\n }\n}\n","/**\n * Throttle a function\n *\n */\nexport function throttle(func: any, wait: number, options?: any) {\n options = options || {};\n let context;\n let args;\n let result;\n let timeout = null;\n let previous = 0;\n\n function later() {\n previous = options.leading === false ? 0 : +new Date();\n timeout = null;\n result = func.apply(context, args);\n }\n\n return function () {\n const now = +new Date();\n\n if (!previous && options.leading === false) {\n previous = now;\n }\n\n const remaining = wait - (now - previous);\n context = this;\n args = arguments;\n\n if (remaining <= 0) {\n clearTimeout(timeout);\n timeout = null;\n previous = now;\n result = func.apply(context, args);\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n\n return result;\n };\n}\n\n/**\n * Throttle decorator\n *\n * class MyClass {\n * throttleable(10)\n * myFn() { ... }\n * }\n */\nexport function throttleable(duration: number, options?: any) {\n return function innerDecorator(target, key, descriptor) {\n return {\n configurable: true,\n enumerable: descriptor.enumerable,\n get: function getter() {\n Object.defineProperty(this, key, {\n configurable: true,\n enumerable: descriptor.enumerable,\n value: throttle(descriptor.value, duration, options)\n });\n\n return this[key];\n }\n };\n };\n}\n","export enum PlacementTypes {\n Top = 'top',\n Bottom = 'bottom',\n Left = 'left',\n Right = 'right',\n Center = 'center'\n}\n","import { PlacementTypes } from './placement.type';\n\nconst caretOffset = 7;\n\nfunction verticalPosition(elDimensions: DOMRect, popoverDimensions: DOMRect, alignment: PlacementTypes): number {\n if (alignment === PlacementTypes.Top) {\n return elDimensions.top - caretOffset;\n }\n\n if (alignment === PlacementTypes.Bottom) {\n return elDimensions.top + elDimensions.height - popoverDimensions.height + caretOffset;\n }\n\n if (alignment === PlacementTypes.Center) {\n return elDimensions.top + elDimensions.height / 2 - popoverDimensions.height / 2;\n }\n\n return undefined;\n}\n\nfunction horizontalPosition(elDimensions: DOMRect, popoverDimensions: DOMRect, alignment: PlacementTypes): number {\n if (alignment === PlacementTypes.Left) {\n return elDimensions.left - caretOffset;\n }\n\n if (alignment === PlacementTypes.Right) {\n return elDimensions.left + elDimensions.width - popoverDimensions.width + caretOffset;\n }\n\n if (alignment === PlacementTypes.Center) {\n return elDimensions.left + elDimensions.width / 2 - popoverDimensions.width / 2;\n }\n\n return undefined;\n}\n\n/**\n * Position helper for the popover directive.\n *\n * @export\n */\nexport class PositionHelper {\n /**\n * Calculate vertical alignment position\n *\n * @memberOf PositionHelper\n */\n static calculateVerticalAlignment(\n elDimensions: DOMRect,\n popoverDimensions: DOMRect,\n alignment: PlacementTypes\n ): number {\n let result = verticalPosition(elDimensions, popoverDimensions, alignment);\n\n if (result + popoverDimensions.height > window.innerHeight) {\n result = window.innerHeight - popoverDimensions.height;\n }\n\n return result;\n }\n\n /**\n * Calculate vertical caret position\n *\n * @memberOf PositionHelper\n */\n static calculateVerticalCaret(\n elDimensions: DOMRect,\n popoverDimensions: DOMRect,\n caretDimensions: DOMRect,\n alignment: PlacementTypes\n ): number {\n let result;\n\n if (alignment === PlacementTypes.Top) {\n result = elDimensions.height / 2 - caretDimensions.height / 2 + caretOffset;\n }\n\n if (alignment === PlacementTypes.Bottom) {\n result = popoverDimensions.height - elDimensions.height / 2 - caretDimensions.height / 2 - caretOffset;\n }\n\n if (alignment === PlacementTypes.Center) {\n result = popoverDimensions.height / 2 - caretDimensions.height / 2;\n }\n\n const popoverPosition = verticalPosition(elDimensions, popoverDimensions, alignment);\n if (popoverPosition + popoverDimensions.height > window.innerHeight) {\n result += popoverPosition + popoverDimensions.height - window.innerHeight;\n }\n\n return result;\n }\n\n /**\n * Calculate horz alignment position\n *\n * @memberOf PositionHelper\n */\n static calculateHorizontalAlignment(\n elDimensions: DOMRect,\n popoverDimensions: DOMRect,\n alignment: PlacementTypes\n ): number {\n let result = horizontalPosition(elDimensions, popoverDimensions, alignment);\n\n if (result + popoverDimensions.width > window.innerWidth) {\n result = window.innerWidth - popoverDimensions.width;\n }\n\n return result;\n }\n\n /**\n * Calculate horz caret position\n *\n * @memberOf PositionHelper\n */\n static calculateHorizontalCaret(\n elDimensions: DOMRect,\n popoverDimensions: DOMRect,\n caretDimensions: DOMRect,\n alignment: PlacementTypes\n ): number {\n let result;\n\n if (alignment === PlacementTypes.Left) {\n result = elDimensions.width / 2 - caretDimensions.width / 2 + caretOffset;\n }\n\n if (alignment === PlacementTypes.Right) {\n result = popoverDimensions.width - elDimensions.width / 2 - caretDimensions.width / 2 - caretOffset;\n }\n\n if (alignment === PlacementTypes.Center) {\n result = popoverDimensions.width / 2 - caretDimensions.width / 2;\n }\n\n const popoverPosition = horizontalPosition(elDimensions, popoverDimensions, alignment);\n if (popoverPosition + popoverDimensions.width > window.innerWidth) {\n result += popoverPosition + popoverDimensions.width - window.innerWidth;\n }\n\n return result;\n }\n\n /**\n * Checks if the element's position should be flipped\n *\n * @memberOf PositionHelper\n */\n static shouldFlip(\n elDimensions: DOMRect,\n popoverDimensions: DOMRect,\n placement: PlacementTypes,\n spacing: number\n ): boolean {\n let flip = false;\n\n if (placement === PlacementTypes.Right) {\n if (elDimensions.left + elDimensions.width + popoverDimensions.width + spacing > window.innerWidth) {\n flip = true;\n }\n }\n\n if (placement === PlacementTypes.Left) {\n if (elDimensions.left - popoverDimensions.width - spacing < 0) {\n flip = true;\n }\n }\n\n if (placement === PlacementTypes.Top) {\n if (elDimensions.top - popoverDimensions.height - spacing < 0) {\n flip = true;\n }\n }\n\n if (placement === PlacementTypes.Bottom) {\n if (elDimensions.top + elDimensions.height + popoverDimensions.height + spacing > window.innerHeight) {\n flip = true;\n }\n }\n\n return flip;\n }\n\n /**\n * Position caret\n *\n * @memberOf PositionHelper\n */\n static positionCaret(placement, elmDim, hostDim, caretDimensions, alignment: PlacementTypes): any {\n let top = 0;\n let left = 0;\n\n if (placement === PlacementTypes.Right) {\n left = -7;\n top = PositionHelper.calculateVerticalCaret(hostDim, elmDim, caretDimensions, alignment);\n } else if (placement === PlacementTypes.Left) {\n left = elmDim.width;\n top = PositionHelper.calculateVerticalCaret(hostDim, elmDim, caretDimensions, alignment);\n } else if (placement === PlacementTypes.Top) {\n top = elmDim.height;\n left = PositionHelper.calculateHorizontalCaret(hostDim, elmDim, caretDimensions, alignment);\n } else if (placement === PlacementTypes.Bottom) {\n top = -7;\n left = PositionHelper.calculateHorizontalCaret(hostDim, elmDim, caretDimensions, alignment);\n }\n\n return { top, left };\n }\n\n /**\n * Position content\n *\n * @memberOf PositionHelper\n */\n static positionContent(placement, elmDim, hostDim, spacing, alignment): any {\n let top = 0;\n let left = 0;\n\n if (placement === PlacementTypes.Right) {\n left = hostDim.left + hostDim.width + spacing;\n top = PositionHelper.calculateVerticalAlignment(hostDim, elmDim, alignment);\n } else if (placement === PlacementTypes.Left) {\n left = hostDim.left - elmDim.width - spacing;\n top = PositionHelper.calculateVerticalAlignment(hostDim, elmDim, alignment);\n } else if (placement === PlacementTypes.Top) {\n top = hostDim.top - elmDim.height - spacing;\n left = PositionHelper.calculateHorizontalAlignment(hostDim, elmDim, alignment);\n } else if (placement === PlacementTypes.Bottom) {\n top = hostDim.top + hostDim.height + spacing;\n left = PositionHelper.calculateHorizontalAlignment(hostDim, elmDim, alignment);\n }\n\n return { top, left };\n }\n\n /**\n * Determine placement based on flip\n *\n * @memberOf PositionHelper\n */\n static determinePlacement(placement: PlacementTypes, elmDim: DOMRect, hostDim: DOMRect, spacing: number): any {\n const shouldFlip = PositionHelper.shouldFlip(hostDim, elmDim, placement, spacing);\n\n if (shouldFlip) {\n if (placement === PlacementTypes.Right) {\n return PlacementTypes.Left;\n } else if (placement === PlacementTypes.Left) {\n return PlacementTypes.Right;\n } else if (placement === PlacementTypes.Top) {\n return PlacementTypes.Bottom;\n } else if (placement === PlacementTypes.Bottom) {\n return PlacementTypes.Top;\n }\n }\n\n return placement;\n }\n}\n","import {\n Input,\n Component,\n ElementRef,\n AfterViewInit,\n ViewEncapsulation,\n HostListener,\n ViewChild,\n HostBinding,\n Renderer2,\n PLATFORM_ID,\n Inject,\n TemplateRef\n} from '@angular/core';\n\nimport { throttleable } from '../../utils/throttle';\nimport { PositionHelper, PlacementTypes } from './position';\n\nimport { StyleTypes } from './style.type';\nimport { isPlatformBrowser } from '@angular/common';\n\n@Component({\n selector: 'ngx-tooltip-content',\n template: `\n <div>\n <span #caretElm [hidden]=\"!showCaret\" class=\"tooltip-caret position-{{ this.placement }}\"> </span>\n <div class=\"tooltip-content\">\n <span *ngIf=\"!title\">\n <ng-template [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ model: context }\"> </ng-template>\n </span>\n <span *ngIf=\"title\" [innerHTML]=\"title\"> </span>\n </div>\n </div>\n `,\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./tooltip.component.scss']\n})\nexport class TooltipContentComponent implements AfterViewInit {\n @Input() host: ElementRef;\n @Input() showCaret: boolean;\n @Input() type: StyleTypes;\n @Input() placement: PlacementTypes;\n @Input() alignment: PlacementTypes;\n @Input() spacing: number;\n @Input() cssClass: string;\n @Input() title: string;\n @Input() template: TemplateRef<any>;\n @Input() context: any;\n\n @ViewChild('caretElm') caretElm: ElementRef;\n\n @HostBinding('class')\n get cssClasses(): string {\n let clz = 'ngx-charts-tooltip-content';\n clz += ` position-${this.placement}`;\n clz += ` type-${this.type}`;\n clz += ` ${this.cssClass}`;\n return clz;\n }\n\n constructor(public element: ElementRef, private renderer: Renderer2, @Inject(PLATFORM_ID) private platformId: any) {}\n\n ngAfterViewInit(): void {\n setTimeout(this.position.bind(this));\n }\n\n position(): void {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n\n const nativeElm = this.element.nativeElement;\n const hostDim = this.host.nativeElement.getBoundingClientRect();\n\n // if no dims were found, never show\n if (!hostDim.height && !hostDim.width) return;\n\n const elmDim = nativeElm.getBoundingClientRect();\n this.checkFlip(hostDim, elmDim);\n this.positionContent(nativeElm, hostDim, elmDim);\n\n if (this.showCaret) {\n this.positionCaret(hostDim, elmDim);\n }\n\n // animate its entry\n setTimeout(() => this.renderer.addClass(nativeElm, 'animate'), 1);\n }\n\n positionContent(nativeElm: HTMLElement, hostDim: DOMRect, elmDim: DOMRect): void {\n const { top, left } = PositionHelper.positionContent(this.placement, elmDim, hostDim, this.spacing, this.alignment);\n\n this.renderer.setStyle(nativeElm, 'top', `${top}px`);\n this.renderer.setStyle(nativeElm, 'left', `${left}px`);\n }\n\n positionCaret(hostDim: DOMRect, elmDim: DOMRect): void {\n const caretElm = this.caretElm.nativeElement;\n const caretDimensions = caretElm.getBoundingClientRect();\n const { top, left } = PositionHelper.positionCaret(\n this.placement,\n elmDim,\n hostDim,\n caretDimensions,\n this.alignment\n );\n\n this.renderer.setStyle(caretElm, 'top', `${top}px`);\n this.renderer.setStyle(caretElm, 'left', `${left}px`);\n }\n\n checkFlip(hostDim: DOMRect, elmDim: DOMRect): void {\n this.placement = PositionHelper.determinePlacement(this.placement, elmDim, hostDim, this.spacing);\n }\n\n @HostListener('window:resize')\n @throttleable(100)\n onWindowResize(): void {\n this.position();\n }\n}\n","import { ComponentRef, Type } from '@angular/core';\nimport { InjectionService } from './injection.service';\n\nexport interface PartialBindings {\n inputs?: object;\n outputs?: object;\n}\n\nexport abstract class InjectionRegisteryService<T = any> {\n protected abstract type: Type<T>;\n\n protected defaults: PartialBindings = {};\n protected components: Map<any, Array<ComponentRef<T>>> = new Map();\n\n constructor(public injectionService: InjectionService) {}\n\n getByType(type: Type<T> = this.type) {\n return this.components.get(type);\n }\n\n create(bindings: object): ComponentRef<T> {\n return this.createByType(this.type, bindings);\n }\n\n createByType(type: Type<T>, bindings: PartialBindings): ComponentRef<T> {\n bindings = this.assignDefaults(bindings);\n\n const component = this.injectComponent(type, bindings);\n this.register(type, component);\n\n return component;\n }\n\n destroy(instance: ComponentRef<T>): void {\n const compsByType = this.components.get(instance.componentType);\n\n if (compsByType && compsByType.length) {\n const idx = compsByType.indexOf(instance);\n\n if (idx > -1) {\n const component = compsByType[idx];\n component.destroy();\n compsByType.splice(idx, 1);\n }\n }\n }\n\n destroyAll(): void {\n this.destroyByType(this.type);\n }\n\n destroyByType(type: Type<T>): void {\n const comps = this.components.get(type);\n\n if (comps && comps.length) {\n let i = comps.length - 1;\n while (i >= 0) {\n this.destroy(comps[i--]);\n }\n }\n }\n\n protected injectComponent(type: Type<T>, bindings: PartialBindings): ComponentRef<T> {\n return this.injectionService.appendComponent(type, bindings);\n }\n\n protected assignDefaults(bindings: PartialBindings): PartialBindings {\n const inputs = { ...this.defaults.inputs };\n const outputs = { ...this.defaults.outputs };\n\n if (!bindings.inputs && !bindings.outputs) {\n bindings = { inputs: bindings };\n }\n\n if (inputs) {\n bindings.inputs = { ...inputs, ...bindings.inputs };\n }\n\n if (outputs) {\n bindings.outputs = { ...outputs, ...bindings.outputs };\n }\n\n return bindings;\n }\n\n protected register(type: Type<T>, component: ComponentRef<T>): void {\n if (!this.components.has(type)) {\n this.components.set(type, []);\n }\n\n const types = this.components.get(type);\n types.push(component);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { InjectionService } from './injection.service';\nimport { TooltipContentComponent } from './tooltip.component';\nimport { InjectionRegisteryService } from './injection-registery.service';\n@Injectable()\nexport class TooltipService extends InjectionRegisteryService<TooltipContentComponent> {\n type: any = TooltipContentComponent;\n\n constructor(injectionService: InjectionService) {\n super(injectionService);\n }\n}\n","import { ScaleType } from './scale-type.enum';\n\nexport interface LegendOptions {\n colors: any;\n domain: any[];\n position: LegendPosition;\n title: string;\n scaleType: ScaleType;\n}\n\nexport enum LegendPosition {\n Right = 'right',\n Below = 'below'\n}\n\nexport enum LegendType {\n ScaleLegend = 'scaleLegend',\n Legend = 'legend'\n}\n","export enum Orientation {\n Top = 'top',\n Bottom = 'bottom',\n Left = 'left',\n Right = 'right'\n}\n","export enum TextAnchor {\n Start = 'start',\n Middle = 'middle',\n End = 'end'\n}\n","export enum ScaleType {\n Time = 'time',\n Linear = 'linear',\n Ordinal = 'ordinal',\n Quantile = 'quantile'\n}\n","import {\n Component,\n Input,\n OnChanges,\n ChangeDetectionStrategy,\n EventEmitter,\n Output,\n SimpleChanges\n} from '@angular/core';\nimport { trigger, style, animate, transition } from '@angular/animations';\nimport { TooltipService } from '../tooltip/tooltip.service';\nimport { LegendOptions, LegendType, LegendPosition } from '../types/legend.model';\nimport { ScaleType } from '../types';\n\n@Component({\n providers: [TooltipService],\n selector: 'ngx-charts-chart',\n template: `\n <div class=\"ngx-charts-outer\" [style.width.px]=\"view[0]\" [@animationState]=\"'active'\" [@.disabled]=\"!animations\">\n <svg class=\"ngx-charts\" [attr.width]=\"chartWidth\" [attr.height]=\"view[1]\">\n <ng-content></ng-content>\n </svg>\n <ngx-charts-scale-legend\n *ngIf=\"showLegend && legendType === LegendType.ScaleLegend\"\n class=\"chart-legend\"\n [horizontal]=\"legendOptions && legendOptions.position === LegendPosition.Below\"\n [valueRange]=\"legendOptions.domain\"\n [colors]=\"legendOptions.colors\"\n [height]=\"view[1]\"\n [width]=\"legendWidth\"\n >\n </ngx-charts-scale-legend>\n <ngx-charts-legend\n *ngIf=\"showLegend && legendType === LegendType.Legend\"\n class=\"chart-legend\"\n [horizontal]=\"legendOptions && legendOptions.position === LegendPosition.Below\"\n [data]=\"legendOptions.domain\"\n [title]=\"legendOptions.title\"\n [colors]=\"legendOptions.colors\"\n [height]=\"view[1]\"\n [width]=\"legendWidth\"\n [activeEntries]=\"activeEntries\"\n (labelClick)=\"legendLabelClick.emit($event)\"\n (labelActivate)=\"legendLabelActivate.emit($event)\"\n (labelDeactivate)=\"legendLabelDeactivate.emit($event)\"\n >\n </ngx-charts-legend>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [\n trigger('animationState', [\n transition(':enter', [style({ opacity: 0 }), animate('500ms 100ms', style({ opacity: 1 }))])\n ])\n ]\n})\nexport class ChartComponent implements OnChanges {\n @Input() view: [number, number];\n @Input() showLegend: boolean = false;\n @Input() legendOptions: LegendOptions;\n @Input() legendType: LegendType;\n @Input() activeEntries: any[];\n @Input() animations: boolean = true;\n\n @Output() legendLabelClick: EventEmitter<string> = new EventEmitter();\n @Output() legendLabelActivate: EventEmitter<{ name: string }> = new EventEmitter();\n @Output() legendLabelDeactivate: EventEmitter<{ name: string }> = new EventEmitter();\n\n chartWidth: number;\n title: string;\n legendWidth: number;\n\n readonly LegendPosition = LegendPosition;\n readonly LegendType = LegendType;\n\n ngOnChanges(changes: SimpleChanges): void {\n this.update();\n }\n\n update(): void {\n let legendColumns = 0;\n if (this.showLegend) {\n this.legendType = this.getLegendType();\n\n if (!this.legendOptions || this.legendOptions.position === LegendPosition.Right) {\n if (this.legendType === LegendType.ScaleLegend) {\n legendColumns = 1;\n } else {\n legendColumns = 2;\n }\n }\n }\n\n const chartColumns = 12 - legendColumns;\n\n this.chartWidth = Math.floor((this.view[0] * chartColumns) / 12.0);\n this.legendWidth =\n !this.legendOptions || this.legendOptions.position === LegendPosition.Right\n ? Math.floor((this.view[0] * legendColumns) / 12.0)\n : this.chartWidth;\n }\n\n getLegendType(): LegendType {\n return this.legendOptions.scaleType === ScaleType.Linear ? LegendType.ScaleLegend : LegendType.Legend;\n }\n}\n","import { Output, EventEmitter, NgZone, Directive, ElementRef } from '@angular/core';\n\n/**\n * Visibility Observer\n */\n@Directive({\n selector: 'visibility-observer'\n})\nexport class VisibilityObserver {\n @Output() visible: EventEmitter<any> = new EventEmitter();\n\n timeout: any;\n isVisible: boolean = false;\n\n constructor(private element: ElementRef, private zone: NgZone) {\n this.runCheck();\n }\n\n destroy(): void {\n clearTimeout(this.timeout);\n }\n\n onVisibilityChange(): void {\n // trigger zone recalc for columns\n this.zone.run(() => {\n this.isVisible = true;\n this.visible.emit(true);\n });\n }\n\n runCheck(): void {\n const check = () => {\n if (!this.element) {\n return;\n }\n\n // https://davidwalsh.name/offsetheight-visibility\n const { offsetHeight, offsetWidth } = this.element.nativeElement;\n\n if (offsetHeight && offsetWidth) {\n clearTimeout(this.timeout);\n this.onVisibilityChange();\n } else {\n clearTimeout(this.timeout);\n this.zone.runOutsideAngular(() => {\n this.timeout = setTimeout(() => check(), 100);\n });\n }\n };\n\n this.zone.runOutsideAngular(() => {\n this.timeout = setTimeout(() => check());\n });\n }\n}\n","export function isDate(value): boolean {\n return toString.call(value) === '[object Date]';\n}\n\nexport function isNumber(value): boolean {\n return typeof value === 'number';\n}\n","import { isPlatformBrowser, isPlatformServer } from '@angular/common';\nimport {\n ElementRef,\n NgZone,\n ChangeDetectorRef,\n Component,\n Input,\n Output,\n EventEmitter,\n AfterViewInit,\n OnDestroy,\n OnChanges,\n SimpleChanges,\n PLATFORM_ID,\n Inject\n} from '@angular/core';\n\nimport { fromEvent as observableFromEvent } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { VisibilityObserver } from '../utils/visibility-observer';\nimport { isDate } from '../utils/types';\nimport { ScaleType, ViewDimensions } from '../common/types';\n\n@Component({\n selector: 'base-chart',\n template: ` <div></div> `\n})\nexport class BaseChartComponent implements OnChanges, AfterViewInit, OnDestroy {\n @Input() results: any;\n @Input() view: [number, number];\n @Input() scheme: any = 'cool';\n @Input() schemeType: ScaleType = ScaleType.Ordinal;\n @Input() customColors: any[];\n @Input() animations: boolean = true;\n\n @Output() select = new EventEmitter();\n\n width: number;\n height: number;\n resizeSubscription: any;\n visibilityObserver: VisibilityObserver;\n\n constructor(\n protected chartElement: ElementRef,\n protected zone: NgZone,\n protected cd: ChangeDetectorRef,\n @Inject(PLATFORM_ID) public platformId: any\n ) {}\n\n ngOnInit() {\n if (isPlatformServer(this.platformId)) {\n this.animations = false;\n }\n }\n\n ngAfterViewInit(): void {\n this.bindWindowResizeEvent();\n\n // listen for visibility ofhe element for hidden by default scenario\n this.visibilityObserver = new VisibilityObserver(this.chartElement, this.zone);\n this.visibilityObserver.visible.subscribe(this.update.bind(this));\n }\n\n ngOnDestroy(): void {\n this.unbindEvents();\n if (this.visibilityObserver) {\n this.visibilityObserver.visible.unsubscribe();\n this.visibilityObserver.destroy();\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n this.update();\n }\n\n update(): void {\n if (this.results) {\n this.results = this.cloneData(this.results);\n } else {\n this.results = [];\n }\n\n if (this.view) {\n this.width = this.view[0];\n this.height = this.view[1];\n } else {\n const dims = this.getContainerDims();\n if (dims) {\n this.width = dims.width;\n this.height = dims.height;\n }\n }\n\n // default values if width or height are 0 or undefined\n if (!this.width) {\n this.width = 600;\n }\n\n if (!this.height) {\n this.height = 400;\n }\n\n this.width = Math.floor(this.width);\n this.height = Math.floor(this.height);\n\n if (this.cd) {\n this.cd.markForCheck();\n }\n }\n\n getContainerDims(): ViewDimensions {\n let width;\n let height;\n const hostElem = this.chartElement.nativeElement;\n\n if (isPlatformBrowser(this.platformId) && hostElem.parentNode !== null) {\n // Get the container dimensions\n const dims = hostElem.parentNode.getBoundingClientRect();\n width = dims.width;\n height = dims.height;\n }\n\n if (width && height) {\n return { width, height };\n }\n\n return null;\n }\n\n /**\n * Converts all date objects that appear as name\n * into formatted date strings\n */\n formatDates(): void {\n for (let i = 0; i < this.results.length; i++) {\n const g = this.results[i];\n g.label = g.name;\n if (isDate(g.label)) {\n g.label = g.label.toLocaleDateString();\n }\n\n if (g.series) {\n for (let j = 0; j < g.series.length; j++) {\n const d = g.series[j];\n d.label = d.name;\n if (isDate(d.label)) {\n d.label = d.label.toLocaleDateString();\n }\n }\n }\n }\n }\n\n protected unbindEvents(): void {\n if (this.resizeSubscription) {\n this.resizeSubscription.unsubscribe();\n }\n }\n\n private bindWindowResizeEvent(): void {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n\n const source = observableFromEvent(window, 'resize');\n const subscription = source.pipe(debounceTime(200)).subscribe(e => {\n this.update();\n if (this.cd) {\n this.cd.markForCheck();\n }\n });\n this.resizeSubscription = subscription;\n }\n\n /**\n * Clones the data into a new object\n *\n * @memberOf BaseChart\n */\n private cloneData(data): any {\n const results = [];\n\n for (const item of data) {\n const copy = {\n name: item['name']\n };\n\n if (item['value'] !== undefined) {\n copy['value'] = item['value'];\n }\n\n if (item['series'] !== undefined) {\n copy['series'] = [];\n for (const seriesItem of item['series']) {\n const seriesItemCopy = Object.assign({}, seriesItem);\n copy['series'].push(seriesItemCopy);\n }\n }\n\n if (item['extra'] !== undefined) {\n copy['extra'] = JSON.parse(JSON.stringify(item['extra']));\n }\n\n results.push(copy);\n }\n\n return results;\n }\n}\n","import { Component, Input, ElementRef, OnChanges, SimpleChanges, ChangeDetectionStrategy } from '@angular/core';\nimport { Orientation } from '../types/orientation.enum';\n\n@Component({\n selector: 'g[ngx-charts-axis-label]',\n template: `\n <svg:text\n [attr.stroke-width]=\"strokeWidth\"\n [attr.x]=\"x\"\n [attr.y]=\"y\"\n [attr.text-anchor]=\"textAnchor\"\n [attr.transform]=\"transform\"\n >\n {{ label }}\n </svg:text>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AxisLabelComponent implements OnChanges {\n @Input() orient: Orientation;\n @Input() label: string;\n @Input() offset: number;\n @Input() width: number;\n @Input() height: number;\n\n x: number;\n y: number;\n transform: string;\n strokeWidth: string;\n textAnchor: string;\n element: ElementRef;\n textHeight = 25;\n margin = 5;\n\n constructor(element: ElementRef) {\n this.element = element.nativeElement;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n this.update();\n }\n\n update(): void {\n this.strokeWidth = '0.01';\n this.textAnchor = 'middle';\n this.transform = '';\n\n switch (this.orient) {\n case Orientation.Top:\n this.y = this.offset;\n this.x = this.width / 2;\n break;\n case Orientation.Bottom:\n this.y = this.offset;\n this.x = this.width / 2;\n break;\n case Orientation.Left:\n this.y = -(this.offset + this.textHeight + this.margin);\n this.x = -this.height / 2;\n this.transform = 'rotate(270)';\n break;\n case Orientation.Right:\n this.y = this.offset + this.margin;\n this.x = -this.height / 2;\n this.transform = 'rotate(270)';\n break;\n default:\n }\n }\n}\n","export function trimLabel(s: any, max: number = 16): string {\n if (typeof s !== 'string') {\n if (typeof s === 'number') {\n return s + '';\n } else {\n return '';\n }\n }\n\n s = s.trim();\n if (s.length <= max) {\n return s;\n } else {\n return `${s.slice(0, max)}...`;\n }\n}\n","export function reduceTicks(ticks: any[], maxTicks: number): any[] {\n if (ticks.length > maxTicks) {\n const reduced = [];\n const modulus = Math.floor(ticks.length / maxTicks);\n for (let i = 0; i < ticks.length; i++) {\n if (i % modulus === 0) {\n reduced.push(ticks[i]);\n }\n }\n ticks = reduced;\n }\n\n return ticks;\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n Component,\n Input,\n Output,\n EventEmitter,\n OnChanges,\n ElementRef,\n ViewChild,\n SimpleChanges,\n AfterViewInit,\n ChangeDetectionStrategy,\n Inject,\n PLATFORM_ID\n} from '@angular/core';\nimport { trimLabel } from '../trim-label.helper';\nimport { reduceTicks } from './ticks.helper';\nimport { Orientation } from '../types/orientation.enum';\nimport { TextAnchor } from '../types/text-anchor.enum';\n\n@Component({\n selector: 'g[ngx-charts-x-axis-ticks]',\n template: `\n <svg:g #ticksel>\n <svg:g *ngFor=\"let tick of ticks\" class=\"tick\" [attr.transform]=\"tickTransform(tick)\">\n <title>{{ tickFormat(tick) }}</title>\n <svg:text\n stroke-width=\"0.01\"\n [attr.text-anchor]=\"textAnchor\"\n [attr.transform]=\"textTransform\"\n [style.font-size]=\"'12px'\"\n >\n {{ tickTrim(tickFormat(tick)) }}\n </svg:text>\n </svg:g>\n </svg:g>\n\n <svg:g *ngFor=\"let tick of ticks\" [attr.transform]=\"tickTransform(tick)\">\n <svg:g *ngIf=\"showGridLines\" [attr.transform]=\"gridLineTransform()\">\n <svg:line class=\"gridline-path gridline-path-vertical\" [attr.y1]=\"-gridLineHeight\" y2=\"0\" />\n </svg:g>\n </svg:g>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class XAxisTicksComponent implements OnChanges, AfterViewInit {\n @Input() scale;\n @Input() orient: Orientation;\n @Input() tickArguments: number[] = [5];\n @Input() tickValues: string[] | number[];\n @Input() tickStroke: string = '#ccc';\n @Input() trimTicks: boolean = true;\n @Input() maxTickLength: number = 16;\n @Input() tickFormatting;\n @Input() showGridLines = false;\n @Input() gridLineHeight: number;\n @Input() width: number;\n @Input() rotateTicks: boolean = true;\n\n @Output() dimensionsChanged = new EventEmitter();\n\n verticalSpacing: number = 20;\n rotateLabels: boolean = false;\n innerTickSize: number = 6;\n outerTickSize: number = 6;\n tickPadding: number = 3;\n textAnchor: TextAnchor = TextAnchor.Middle;\n maxTicksLength: number = 0;\n maxAllowedLength: number = 16;\n adjustedScale: any;\n textTransform: string;\n ticks: any[];\n tickFormat: (o: any) => any;\n height: number = 0;\n approxHeight: number = 10;\n\n @ViewChild('ticksel') ticksElement: ElementRef;\n\n constructor(@Inject(PLATFORM_ID) private platformId: any) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n this.update();\n }\n\n ngAfterViewInit(): void {\n setTimeout(() => this.updateDims());\n }\n\n updateDims(): void {\n if (!isPlatformBrowser(this.platformId)) {\n // for SSR, use approximate value instead of measured\n this.dimensionsChanged.emit({ height: this.approxHeight });\n return;\n }\n\n const height = parseInt(this.ticksElement.nativeElement.getBoundingClientRect().height, 10);\n if (height !== this.height) {\n this.height = height;\n this.dimensionsChanged.emit({ height: this.height });\n setTimeout(() => this.updateDims());\n }\n }\n\n update(): void {\n const scale = this.scale;\n this.ticks = this.getTicks();\n\n if (this.tickFormatting) {\n this.tickFormat = this.tickFormatting;\n } else if (scale.tickFormat) {\n this.tickFormat = scale.tickFormat.apply(scale, this.tickArguments);\n } else {\n this.tickFormat = function (d) {\n if (d.constructor.name === 'Date') {\n return d.toLocaleDateString();\n }\n return d.toLocaleString();\n };\n }\n\n const angle = this.rotateTicks ? this.getRotationAngle(this.ticks) : null;\n\n this.adjustedScale = this.scale.bandwidth\n ? function (d) {\n return this.scale(d) + this.scale.bandwidth() * 0.5;\n }\n : this.scale;\n\n this.textTransform = '';\n if (angle && angle !== 0) {\n this.textTransform = `rotate(${angle})`;\n this.textAnchor = TextAnchor.End;\n this.verticalSpacing = 10;\n } else {\n this.textAnchor = TextAnchor.Middle;\n }\n\n setTimeout(() => this.updateDims());\n }\n\n getRotationAngle(ticks: any[]): number {\n let angle = 0;\n this.maxTicksLength = 0;\n for (let i = 0; i < ticks.length; i++) {\n const tick = this.tickFormat(ticks[i]).toString();\n let tickLength = tick.length;\n if (this.trimTicks) {\n tickLength = this.tickTrim(tick).length;\n }\n\n if (tickLength > this.maxTicksLength) {\n this.maxTicksLength = tickLength;\n }\n }\n\n const len = Math.min(this.maxTicksLength, this.maxAllowedLength);\n const charWidth = 7; // need to measure this\n const wordWidth = len * charWidth;\n\n let baseWidth = wordWidth;\n const maxBaseWidth = Math.floor(this.width / ticks.length);\n\n // calculate optimal angle\n while (baseWidth > maxBaseWidth && angle > -90) {\n angle -= 30;\n baseWidth = Math.cos(angle * (Math.PI / 180)) * wordWidth;\n }\n\n this.approxHeight = Math.max(Math.abs(Math.sin(angle * (Math.PI / 180)) * wordWidth), 10);\n\n return angle;\n }\n\n getTicks(): any[] {\n let ticks;\n const maxTicks = this.getMaxTicks(20);\n const maxScaleTicks = this.getMaxTicks(100);\n\n if (this.tickValues) {\n ticks = this.tickValues;\n } else if (this.scale.ticks) {\n ticks = this.scale.ticks.apply(this.scale, [maxScaleTicks]);\n } else {\n ticks = this.scale.domain();\n ticks = reduceTicks(ticks, maxTicks);\n }\n\n return ticks;\n }\n\n getMaxTicks(tickWidth: number): number {\n return Math.floor(this.width / tickWidth);\n }\n\n tickTransform(tick: number): string {\n return 'translate(' + this.adjustedScale(tick) + ',' + this.verticalSpacing + ')';\n }\n\n gridLineTransform(): string {\n return `translate(0,${-this.verticalSpacing - 5})`;\n }\n\n tickTrim(label: string): string {\n return this.trimTicks ? trimLabel(label, this.maxTickLength) : label;\n }\n}\n","import {\n Component,\n Input,\n SimpleChanges,\n Output,\n EventEmitter,\n OnChanges,\n ViewChild,\n ChangeDetectionStrategy\n} from '@angular/core';\n\nimport { XAxisTicksComponent } from './x-axis-ticks.component';\nimport { Orientation } from '../types/orientation.enum';\nimport { ViewDimensions } from '../types/view-dimension.interface';\n\n@Component({\n selector: 'g[ngx-charts-x-axis]',\n template: `\n <svg:g [attr.class]=\"xAxisClassName\" [attr.transform]=\"transform\">\n <svg:g\n ngx-charts-x-axis-ticks\n *ngIf=\"xScale\"\n [trimTicks]=\"trimTicks\"\n [rotateTicks]=\"rotateTicks\"\n [maxTickLength]=\"maxTickLength\"\n [tickFormatting]=\"tickFormatting\"\n [tickArguments]=\"tickArguments\"\n [tickStroke]=\"tickStroke\"\n [scale]=\"xScale\"\n [orient]=\"xOrient\"\n [showGridLines]=\"showGridLines\"\n [gridLineHeight]=\"dims.height\"\n [width]=\"dims.width\"\n [tickValues]=\"ticks\"\n (dimensionsChanged)=\"emitTicksHeight($event)\"\n />\n <svg:g\n ngx-charts-axis-label\n *ngIf=\"showLabel\"\n [label]=\"labelText\"\n [offset]=\"labelOffset\"\n [orient]=\"Orientation.Bottom\"\n [height]=\"dims.height\"\n [width]=\"dims.width\"\n ></svg:g>\n </svg:g>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class XAxisComponent implements OnChanges {\n @Input() xScale;\n @Input() dims: ViewDimensions;\n @Input() trimTicks: boolean;\n @Input() rotateTicks: boolean = true;\n @Input() maxTickLength: number;\n @Input() tickFormatting;\n @Input() showGridLines = false;\n @Input() showLabel: boolean;\n @Input() labelText: string;\n @Input() ticks: any[];\n @Input() xAxisTickCount: number;\n @Input() xOrient: Orientation = Orientation.Bottom;\n @Input() xAxisOffset: number = 0;\n\n @Output() dimensionsChanged = new EventEmitter();\n\n xAxisClassName: string = 'x axis';\n\n tickArguments: number[];\n transform: string;\n labelOffset: number = 0;\n fill: string = 'none';\n stroke: string = 'stroke';\n tickStroke: string = '#ccc';\n strokeWidth: string = 'none';\n padding: number = 5;\n\n readonly Orientation = Orientation;\n\n @ViewChild(XAxisTicksComponent) ticksComponent: XAxisTicksComponent;\n\n ngOnChanges(changes: SimpleChanges): void {\n this.update();\n }\n\n update(): void {\n this.transform = `translate(0,${this.xAxisOffset + this.padding + this.dims.height})`;\n\n if (typeof this.xAxisTickCount !== 'undefined') {\n this.tickArguments = [this.xAxisTickCount];\n }\n }\n\n emitTicksHeight({ height }): void {\n const newLabelOffset = height + 25 + 5;\n if (newLabelOffset !== this.labelOffset) {\n this.labelOffset = newLabelOffset;\n setTimeout(() => {\n this.dimensionsChanged.emit({ height });\n }, 0);\n }\n }\n}\n","/**\n * Generates a rounded rectanglar path\n *\n * @export\n * @param x, y, w, h, r, tl, tr, bl, br\n */\nexport function roundedRect(\n x: number,\n y: number,\n w: number,\n h: number,\n r: number,\n [tl, tr, bl, br]: boolean[]\n): string {\n let retval = '';\n\n w = Math.floor(w);\n h = Math.floor(h);\n\n w = w === 0 ? 1 : w;\n h = h === 0 ? 1 : h;\n\n retval = `M${[x + r, y]}`;\n retval += `h${w - 2 * r}`;\n\n if (tr) {\n retval += `a${[r, r]} 0 0 1 ${[r, r]}`;\n } else {\n retval += `h${r}v${r}`;\n }\n\n retval += `v${h - 2 * r}`;\n\n if (br) {\n retval += `a${[r, r]} 0 0 1 ${[-r, r]}`;\n } else {\n retval += `v${r}h${-r}`;\n }\n\n retval += `h${2 * r - w}`;\n\n if (bl) {\n retval += `a${[r, r]} 0 0 1 ${[-r, -r]}`;\n } else {\n retval += `h${-r}v${-r}`;\n }\n\n retval += `v${2 * r - h}`;\n\n if (tl) {\n retval += `a${[r, r]} 0 0 1 ${[r, -r]}`;\n } else {\n retval += `v${-r}h${r}`;\n }\n\n retval += `z`;\n\n return retval;\n}\n","import {\n Component,\n Input,\n Output,\n OnChanges,\n ElementRef,\n ViewChild,\n EventEmitter,\n AfterViewInit,\n ChangeDetectionStrategy,\n SimpleChanges,\n PLATFORM_ID,\n Inject\n} from '@angular/core';\nimport { trimLabel } from '../trim-label.helper';\nimport { reduceTicks } from './ticks.helper';\nimport { roundedRect } from '../../common/shape.helper';\nimport { isPlatformBrowser } from '@angular/common';\nimport { Orientation } from '../types/orientation.enum';\nimport { TextAnchor } from '../types/text-anchor.enum';\n\n@Component({\n selector: 'g[ngx-charts-y-axis-ticks]',\n template: `\n <svg:g #ticksel>\n <svg:g *ngFor=\"let tick of ticks\" class=\"tick\" [attr.transform]=\"transform(tick)\">\n <title>{{ tickFormat(tick) }}</title>\n <svg:text\n stroke-width=\"0.01\"\n [attr.dy]=\"dy\"\n [attr.x]=\"x1\"\n [attr.y]=\"y1\"\n [attr.text-anchor]=\"textAnchor\"\n [style.font-size]=\"'12px'\"\n >\n {{ tickTrim(tickFormat(tick)) }}\n </svg:text>\n </svg:g>\n </svg:g>\n\n <svg:path\n *ngIf=\"referenceLineLength > 1 && refMax && refMin && showRefLines\"\n class=\"reference-area\"\n [attr.d]=\"referenceAreaPath\"\n [attr.transform]=\"gridLineTransform()\"\n />\n <svg:g *ngFor=\"let tick of ticks\" [attr.transform]=\"transform(tick)\">\n <svg:g *ngIf=\"showGridLines\" [attr.transform]=\"gridLineTransform()\">\n <svg:line\n *ngIf=\"orient === Orientation.Left\"\n class=\"gridline-path gridline-path-horizontal\"\n x1=\"0\"\n [attr.x2]=\"gridLineWidth\"\n />\n <svg:line\n *ngIf=\"orient === Orientation.Right\"\n class=\"gridline-path gridline-path-horizontal\"\n x1=\"0\"\n [attr.x2]=\"-gridLineWidth\"\n />\n </svg:g>\n </svg:g>\n\n <svg:g *ngFor=\"let refLine of referenceLines\">\n <svg:g *ngIf=\"showRefLines\" [attr.transform]=\"transform(refLine.value)\">\n <svg:line\n class=\"refline-path gridline-path-horizontal\"\n x1=\"0\"\n [attr.x2]=\"gridLineWidth\"\n [attr.transform]=\"gridLineTransform()\"\n />\n <svg:g *ngIf=\"showRefLabels\">\n <title>{{ tickTrim(tickFormat(refLine.value)) }}</title>\n <svg:text\n class=\"refline-label\"\n [attr.dy]=\"dy\"\n [attr.y]=\"-6\"\n [attr.x]=\"gridLineWidth\"\n [attr.text-anchor]=\"textAnchor\"\n >\n {{ refLine.name }}\n </svg:text>\n </svg:g>\n </svg:g>\n </svg:g>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class YAxisTicksComponent implements OnChanges, AfterViewInit {\n @Input() scale;\n @Input() orient: Orientation;\n @Input() tickArguments: number[] = [5];\n @Input() tickValues: string[] | number[];\n @Input() tickStroke = '#ccc';\n @Input() trimTicks: boolean = true;\n @Input() maxTickLength: number = 16;\n @Input() tickFormatting;\n @Input() showGridLines: boolean = false;\n @Input() gridLineWidth: number;\n @Input() height: number;\n @Input() referenceLines;\n @Input() showRefLabels: boolean = false;\n @Input() showRefLines: boolean = false;\n\n @Output() dimensionsChanged = new EventEmitter();\n\n innerTickSize: number = 6;\n tickPadding: number = 3;\n tickSpacing: number;\n verticalSpacing: number = 20;\n textAnchor: TextAnchor = TextAnchor.Middle;\n dy: string;\n x1: number;\n x2: number;\n y1: number;\n y2: number;\n adjustedScale: any;\n transform: (o: any) => string;\n tickFormat: (o: any) => string;\n ticks: any[];\n width: number = 0;\n outerTickSize: number = 6;\n rotateLabels: boolean = false;\n refMax: number;\n refMin: number;\n referenceLineLength: number = 0;\n referenceAreaPath: string;\n\n readonly Orientation = Orientation;\n\n @ViewChild('ticksel') ticksElement: ElementRef;\n\n constructor(@Inject(PLATFORM_ID) private platformId: any) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n this.update();\n }\n\n ngAfterViewInit(): void {\n setTimeout(() => this.updateDims());\n }\n\n updateDims(): void {\n if (!isPlatformBrowser(this.platformId)) {\n // for SSR, use approximate value instead of measured\n this.width = this.getApproximateAxisWidth();\n this.dimensionsChanged.emit({ width: this.width });\n return;\n }\n\n const width = parseInt(this.ticksElement.nativeElement.getBoundingClientRect().width, 10);\n if (width !== this.width) {\n this.width = width;\n this.dimensionsChanged.emit({ width });\n setTimeout(() => this.updateDims());\n }\n }\n\n update(): void {\n let scale;\n const sign = this.orient === Orientation.Top || this.orient === Orientation.Right ? -1 : 1;\n this.tickSpacing = Math.max(this.innerTickSize, 0) + this.tickPadding;\n\n scale = this.scale;\n this.ticks = this.getTicks();\n\n if (this.tickFormatting) {\n this.tickFormat = this.tickFormatting;\n } else if (scale.tickFormat) {\n this.tickFormat = scale.tickFormat.apply(scale, this.tickArguments);\n } else {\n this.tickFormat = function (d) {\n if (d.constructor.name === 'Date') {\n return d.toLocaleDateString();\n }\n return d.toLocaleString();\n };\n }\n\n this.adjustedScale = scale.bandwidth\n ? function (d) {\n return scale(d) + scale.bandwidth() * 0.5;\n }\n : scale;\n\n if (this.showRefLines && this.referenceLines) {\n this.setReferencelines();\n }\n\n switch (this.orient) {\n case Orientation.Top:\n this.transform = function (tick) {\n return 'translate(' + this.adjustedScale(tick) + ',0)';\n };\n this.textAnchor = TextAnchor.Middle;\n this.y2 = this.innerTickSize * sign;\n this.y1 = this.tickSpacing * sign;\n this.dy = sign < 0 ? '0em' : '.71em';\n break;\n case Orientation.Bottom:\n this.transform = function (tick) {\n return 'translate(' + this.adjustedScale(tick) + ',0)';\n };\n this.textAnchor = TextAnchor.Middle;\n this.y2 = this.innerTickSize * sign;\n this.y1 = this.tickSpacing * sign;\n this.dy = sign < 0 ? '0em' : '.71em';\n break;\n case Orientation.Left:\n this.transform = function (tick) {\n return 'translate(0,' + this.adjustedScale(tick) + ')';\n };\n this.textAnchor = TextAnchor.End;\n this.x2 = this.innerTickSize * -sign;\n this.x1 = this.tickSpacing * -sign;\n this.dy = '.32em';\n break;\n case Orientation.Right:\n this.transform = function (tick) {\n return 'translate(0,' + this.adjustedScale(tick) + ')';\n };\n this.textAnchor = TextAnchor.Start;\n this.x2 = this.innerTickSize * -sign;\n this.x1 = this.tickSpacing * -sign;\n this.dy = '.32em';\n break;\n default:\n }\n setTimeout(() => this.updateDims());\n }\n\n setReferencelines(): void {\n this.refMin = this.adjustedScale(\n Math.min.apply(\n null,\n this.referenceLines.map(item => item.value)\n )\n );\n this.refMax = this.adjustedScale(\n Math.max.apply(\n null,\n this.referenceLines.map(item => item.value)\n )\n );\n this.referenceLineLength = this.referenceLines.length;\n\n this.referenceAreaPath = roundedRect(0, this.refMax, this.gridLineWidth, this.refMin - this.refMax, 0, [\n false,\n false,\n false,\n false\n ]);\n }\n\n getTicks(): any[] {\n let ticks;\n const maxTicks = this.getMaxTicks(20);\n const maxScaleTicks = this.getMaxTicks(50);\n\n if (this.tickValues) {\n ticks = this.tickValues;\n } else if (this.scale.ticks) {\n ticks = this.scale.ticks.apply(this.scale, [maxScaleTicks]);\n } else {\n ticks = this.scale.domain();\n ticks = reduceTicks(ticks, maxTicks);\n }\n\n return ticks;\n }\n\n getMaxTicks(tickHeight: number): number {\n return Math.floor(this.height / tickHeight);\n }\n\n tickTransform(tick: number): string {\n return `translate(${this.adjustedScale(tick)},${this.verticalSpacing})`;\n }\n\n gridLineTransform(): string {\n return `translate(5,0)`;\n }\n\n tickTrim(label: string): string {\n return this.trimTicks ? trimLabel(label, this.maxTickLength) : label;\n }\n\n getApproximateAxisWidth(): number {\n const maxChars = Math.max(...this.ticks.map(t => this.tickTrim(this.tickFormat(t)).length));\n const charWidth = 7;\n return maxChars * charWidth;\n }\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnChanges,\n ViewChild,\n SimpleChanges,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { YAxisTicksComponent } from './y-axis-ticks.component';\nimport { Orientation } from '../types/orientation.enum';\nimport { ViewDimensions } from '../types/view-dimension.interface';\n\n@Component({\n selector: 'g[ngx-charts-y-axis]',\n template: `\n <svg:g [attr.class]=\"yAxisClassName\" [attr.transform]=\"transform\">\n <svg:g\n ngx-charts-y-axis-ticks\n *ngIf=\"yScale\"\n [trimTicks]=\"trimTicks\"\n [maxTickLength]=\"maxTickLength\"\n [tickFormatting]=\"tickFormatting\"\n [tickArguments]=\"tickArguments\"\n [tickValues]=\"ticks\"\n [tickStroke]=\"tickStroke\"\n [scale]=\"yScale\"\n [orient]=\"yOrient\"\n [showGridLines]=\"showGridLines\"\n [gridLineWidth]=\"dims.width\"\n [referenceLines]=\"referenceLines\"\n [showRefLines]=\"showRefLines\"\n [showRefLabels]=\"showRefLabels\"\n [height]=\"dims.height\"\n (dimensionsChanged)=\"emitTicksWidth($event)\"\n />\n\n <svg:g\n ngx-charts-axis-label\n *ngIf=\"showLabel\"\n [label]=\"labelText\"\n [offset]=\"labelOffset\"\n [orient]=\"yOrient\"\n [height]=\"dims.height\"\n [width]=\"dims.width\"\n ></svg:g>\n </svg:g>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class YAxisComponent implements OnChanges {\n @Input() yScale;\n @Input() dims: ViewDimensions;\n @Input() trimTicks: boolean;\n @Input() maxTickLength: number;\n @Input() tickFormatting;\n @Input() ticks: any[];\n @Input() showGridLines: boolean = false;\n @Input() showLabel: boolean;\n @Input() labelText: string;\n @Input() yAxisTickCount: any;\n @Input() yOrient: Orientation = Orientation.Left;\n @Input() referenceLines;\n @Input() showRefLines: boolean;\n @Input() showRefLabels: boolean;\n @Input() yAxisOffset: number = 0;\n @Output() dimensionsChanged = new EventEmitter();\n\n yAxisClassName: string = 'y axis';\n tickArguments: number[];\n offset: number;\n transform: string;\n labelOffset: number = 15;\n fill: string = 'none';\n stroke: string = '#CCC';\n tickStroke: string = '#CCC';\n strokeWidth: number = 1;\n padding: number = 5;\n\n @ViewChild(YAxisTicksComponent) ticksComponent: YAxisTicksComponent;\n\n ngOnChanges(changes: SimpleChanges): void {\n this.update();\n }\n\n update(): void {\n this.offset = -(this.yAxisOffset + this.padding);\n if (this.yOrient === Orientation.Right) {\n this.labelOffset = 65;\n this.transform = `translate(${this.offset + this.dims.width} , 0)`;\n } else {\n this.offset = this.offset;\n this.transform = `translate(${this.offset} , 0)`;\n }\n\n if (this.yAxisTickCount !== undefined) {\n this.tickArguments = [this.yAxisTickCount];\n }\n }\n\n emitTicksWidth({ width }): void {\n if (width !== this.labelOffset && this.yOrient === Orientation.Right) {\n this.labelOffset = width + this.labelOffset;\n setTimeout(() => {\n this.dimensionsChanged.emit({ width });\n }, 0);\n } else if (width !== this.labelOffset) {\n this.labelOffset = width;\n setTimeout(() => {\n this.dimensionsChanged.emit({ width });\n }, 0);\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { AxisLabelComponent } from './axis-label.component';\nimport { XAxisComponent } from './x-axis.component';\nimport { XAxisTicksComponent } from './x-axis-ticks.component';\nimport { YAxisComponent } from './y-axis.component';\nimport { YAxisTicksComponent } from './y-axis-ticks.component';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [AxisLabelComponent, XAxisComponent, XAxisTicksComponent, YAxisComponent, YAxisTicksComponent],\n exports: [AxisLabelComponent, XAxisComponent, XAxisTicksComponent, YAxisComponent, YAxisTicksComponent]\n})\nexport class AxesModule {}\n","export enum StyleTypes {\n popover = 'popover' as any,\n tooltip = 'tooltip' as any\n}\n","export enum ShowTypes {\n all = 'all' as any,\n focus = 'focus' as any,\n mouseover = 'mouseover' as any\n}\n","import {\n Directive,\n Input,\n Output,\n EventEmitter,\n HostListener,\n ViewContainerRef,\n Renderer2,\n OnDestroy,\n TemplateRef,\n ComponentRef\n} from '@angular/core';\n\nimport { PlacementTypes } from './position';\nimport { StyleTypes } from './style.type';\nimport { ShowTypes } from './show.type';\n\nimport { TooltipService } from './tooltip.service';\n\n@Directive({ selector: '[ngx-tooltip]' })\nexport class TooltipDirective implements OnDestroy {\n @Input() tooltipCssClass: string = '';\n @Input() tooltipTitle: string = '';\n @Input() tooltipAppendToBody: boolean = true;\n @Input() tooltipSpacing: number = 10;\n @Input() tooltipDisabled: boolean = false;\n @Input() tooltipShowCaret: boolean = true;\n @Input() tooltipPlacement: PlacementTypes = PlacementTypes.Top;\n @Input() tooltipAlignment: PlacementTypes = PlacementTypes.Center;\n @Input() tooltipType: StyleTypes = StyleTypes.popover;\n @Input() tooltipCloseOnClickOutside: boolean = true;\n @Input() tooltipCloseOnMouseLeave: boolean = true;\n @Input() tooltipHideTimeout: number = 300;\n @Input() tooltipShowTimeout: number = 100;\n @Input() tooltipTemplate: TemplateRef<any>;\n @Input() tooltipShowEvent: ShowTypes = ShowTypes.all;\n @Input() tooltipContext: any;\n @Input() tooltipImmediateExit: boolean = false;\n\n @Output() show: EventEmitter<boolean> = new EventEmitter();\n @Output() hide: EventEmitter<boolean> = new EventEmitter();\n\n private get listensForFocus(): boolean {\n return this.tooltipShowEvent === ShowTypes.all || this.tooltipShowEvent === ShowTypes.focus;\n }\n\n private get listensForHover(): boolean {\n return this.tooltipShowEvent === ShowTypes.all || this.tooltipShowEvent === ShowTypes.mouseover;\n }\n\n private component: ComponentRef<any>;\n private timeout: ReturnType<typeof setTimeout>;\n private mouseLeaveContentEvent: any;\n private mouseEnterContentEvent: any;\n private documentClickEvent: any;\n\n constructor(\n private tooltipService: TooltipService,\n private viewContainerRef: ViewContainerRef,\n private renderer: Renderer2\n ) {}\n\n ngOnDestroy(): void {\n this.hideTooltip(true);\n }\n\n @HostListener('focusin')\n onFocus(): void {\n if (this.listensForFocus) {\n this.showTooltip();\n }\n }\n\n @HostListener('blur')\n onBlur(): void {\n if (this.listensForFocus) {\n this.hideTooltip(true);\n }\n }\n\n @HostListener('mouseenter')\n onMouseEnter(): void {\n if (this.listensForHover) {\n this.showTooltip();\n }\n }\n\n @HostListener('mouseleave', ['$event.target'])\n onMouseLeave(target): void {\n if (this.listensForHover && this.tooltipCloseOnMouseLeave) {\n clearTimeout(this.timeout);\n\n if (this.component) {\n const contentDom = this.component.instance.element.nativeElement;\n const contains = contentDom.contains(target);\n if (contains) return;\n }\n\n this.hideTooltip(this.tooltipImmediateExit);\n }\n }\n\n @HostListener('click')\n onMouseClick() {\n if (this.listensForHover) {\n this.hideTooltip(true);\n }\n }\n\n showTooltip(immediate?: boolean): void {\n if (this.component || this.tooltipDisabled) return;\n\n const time = immediate\n ? 0\n : this.tooltipShowTimeout + (navigator.userAgent.match(/\\(i[^;]+;( U;)? CPU.+Mac OS X/) ? 300 : 0);\n\n clearTimeout(this.timeout);\n this.timeout = setTimeout(() => {\n this.tooltipService.destroyAll();\n\n const options = this.createBoundOptions();\n this.component = this.tooltipService.create(options);\n\n // add a tiny timeout to avoid event re-triggers\n setTimeout(() => {\n if (this.component) {\n this.addHideListeners(this.component.instance.element.nativeElement);\n }\n }, 10);\n\n this.show.emit(true);\n }, time);\n }\n\n addHideListeners(tooltip: HTMLElement): void {\n // on mouse enter, cancel the hide triggered by the leave\n this.mouseEnterContentEvent = this.renderer.listen(tooltip, 'mouseenter', () => {\n clearTimeout(this.timeout);\n });\n\n // content mouse leave listener\n if (this.tooltipCloseOnMouseLeave) {\n this.mouseLeaveContentEvent = this.renderer.listen(tooltip, 'mouseleave', () => {\n this.hideTooltip(this.tooltipImmediateExit);\n });\n }\n\n // content close on click outside\n if (this.tooltipCloseOnClickOutside) {\n this.documentClickEvent = this.renderer.listen('window', 'click', event => {\n const contains = tooltip.contains(event.target);\n if (!contains) this.hideTooltip();\n });\n }\n }\n\n hideTooltip(immediate: boolean = false): void {\n if (!this.component) return;\n\n const destroyFn = () => {\n // remove events\n if (this.mouseLeaveContentEvent) this.mouseLeaveContentEvent();\n if (this.mouseEnterContentEvent) this.mouseEnterContentEvent();\n if (this.documentClickEvent) this.documentClickEvent();\n\n // emit events\n this.hide.emit(true);\n\n // destroy component\n this.tooltipService.destroy(this.component);\n this.component = undefined;\n };\n\n clearTimeout(this.timeout);\n if (!immediate) {\n this.timeout = setTimeout(destroyFn, this.tooltipHideTimeout);\n } else {\n destroyFn();\n }\n }\n\n private createBoundOptions(): any {\n return {\n title: this.tooltipTitle,\n template: this.tooltipTemplate,\n host: this.viewContainerRef.element,\n placement: this.tooltipPlacement,\n alignment: this.tooltipAlignment,\n type: this.tooltipType,\n showCaret: this.tooltipShowCaret,\n cssClass: this.tooltipCssClass,\n spacing: this.tooltipSpacing,\n context: this.tooltipContext\n };\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { TooltipDirective } from './tooltip.directive';\nimport { TooltipContentComponent } from './tooltip.component';\nimport { TooltipService } from './tooltip.service';\n\nimport { InjectionService } from './injection.service';\n\n@NgModule({\n declarations: [TooltipContentComponent, TooltipDirective],\n providers: [InjectionService, TooltipService],\n exports: [TooltipContentComponent, TooltipDirective],\n imports: [CommonModule],\n entryComponents: [TooltipContentComponent]\n})\nexport class TooltipModule {}\n","/**\n * Formats a label given a date, number or string.\n *\n * @export\n */\nexport function formatLabel(label: any): string {\n if (label instanceof Date) {\n label = label.toLocaleDateString();\n } else {\n label = label.toLocaleString();\n }\n\n return label;\n}\n\n/**\n * Escapes a label.\n *\n * @export\n */\nexport function escapeLabel(label: any): string {\n return label.toLocaleString().replace(/[&'`\"<>]/g, match => {\n return {\n '&': '&amp;',\n // tslint:disable-next-line: quotemark\n \"'\": '&#x27;',\n '`': '&#x60;',\n '\"': '&quot;',\n '<': '&lt;',\n '>': '&gt;'\n }[match];\n });\n}\n","const cache = {};\n\n/**\n * Generates a short id.\n *\n * Description:\n * A 4-character alphanumeric sequence (364 = 1.6 million)\n * This should only be used for JavaScript specific models.\n * http://stackoverflow.com/questions/6248666/how-to-generate-short-uid-like-ax4j9z-in-js\n *\n * Example: `ebgf`\n */\nexport function id(): string {\n let newId = ('0000' + ((Math.random() * Math.pow(36, 4)) << 0).toString(36)).slice(-4);\n\n // append a 'a' because neo gets mad\n newId = `a${newId}`;\n\n // ensure not already used\n if (!cache[newId]) {\n cache[newId] = true;\n return newId;\n }\n\n return id();\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnChanges,\n OnInit,\n ChangeDetectionStrategy,\n TemplateRef\n} from '@angular/core';\nimport { trigger, style, animate, transition } from '@angular/animations';\nimport { formatLabel, escapeLabel } from '../common/label.helper';\nimport { id } from '../utils/id';\nimport { ColorHelper } from '../common/color.helper';\nimport { Gradient, ScaleType } from './types';\nimport { DataItem, Series, StringOrNumberOrDate } from '../models/chart-data.model';\n\nenum SeriesType {\n Standard = 'standard',\n Stacked = 'stacked'\n}\n\nexport interface Circle {\n classNames: string[];\n value: string | number;\n label: string;\n data: DataItem;\n cx: number;\n cy: number;\n radius: number;\n height: number;\n tooltipLabel: string;\n color: string;\n opacity: number;\n seriesName: string;\n gradientStops: Gradient[];\n min: number;\n max: number;\n}\n\n@Component({\n selector: 'g[ngx-charts-circle-series]',\n template: `\n <svg:g *ngIf=\"circle\">\n <defs>\n <svg:g\n ngx-charts-svg-linear-gradient\n orientation=\"vertical\"\n [name]=\"gradientId\"\n [stops]=\"circle.gradientStops\"\n />\n </defs>\n <svg:rect\n *ngIf=\"barVisible && type === 'standard'\"\n [@animationState]=\"'active'\"\n [attr.x]=\"circle.cx - circle.radius\"\n [attr.y]=\"circle.cy\"\n [attr.width]=\"circle.radius * 2\"\n [attr.height]=\"circle.height\"\n [attr.fill]=\"gradientFill\"\n class=\"tooltip-bar\"\n />\n <svg:g\n ngx-charts-circle\n class=\"circle\"\n [cx]=\"circle.cx\"\n [cy]=\"circle.cy\"\n [r]=\"circle.radius\"\n [fill]=\"circle.color\"\n [class.active]=\"isActive({ name: circle.seriesName })\"\n [pointerEvents]=\"circle.value === 0 ? 'none' : 'all'\"\n [data]=\"circle.value\"\n [classNames]=\"circle.classNames\"\n (select)=\"onClick(circle.data)\"\n (activate)=\"activateCircle()\"\n (deactivate)=\"deactivateCircle()\"\n ngx-tooltip\n [tooltipDisabled]=\"tooltipDisabled\"\n [tooltipPlacement]=\"'top'\"\n [tooltipType]=\"'tooltip'\"\n [tooltipTitle]=\"tooltipTemplate ? undefined : getTooltipText(circle)\"\n [tooltipTemplate]=\"tooltipTemplate\"\n [tooltipContext]=\"circle.data\"\n />\n </svg:g>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [\n trigger('animationState', [\n transition(':enter', [\n style({\n opacity: 0\n }),\n animate(250, style({ opacity: 1 }))\n ])\n ])\n ]\n})\nexport class CircleSeriesComponent implements OnChanges, OnInit {\n @Input() data: Series;\n @Input() type: SeriesType = SeriesType.Standard;\n @Input() xScale;\n @Input() yScale;\n @Input() colors: ColorHelper;\n @Input() scaleType: ScaleType;\n @Input() visibleValue: boolean;\n @Input() activeEntries: any[];\n @Input() tooltipDisabled: boolean = false;\n @Input() tooltipTemplate: TemplateRef<any>;\n\n @Output() select: EventEmitter<DataItem> = new EventEmitter();\n @Output() activate: EventEmitter<{ name: StringOrNumberOrDate }> = new EventEmitter();\n @Output() deactivate: EventEmitter<{ name: StringOrNumberOrDate }> = new EventEmitter();\n\n areaPath: any;\n circle: Circle; // active circle\n barVisible: boolean = false;\n gradientId: string;\n gradientFill: string;\n\n ngOnInit() {\n this.gradientId = 'grad' + id().toString();\n this.gradientFill = `url(#${this.gradientId})`;\n }\n\n ngOnChanges(): void {\n this.update();\n }\n\n update(): void {\n this.circle = this.getActiveCircle();\n }\n\n getActiveCircle(): Circle {\n const indexActiveDataPoint = this.data.series.findIndex(d => {\n const label = d.name;\n return label && this.visibleValue && label.toString() === this.visibleValue.toString() && d.value !== undefined;\n });\n\n if (indexActiveDataPoint === -1) {\n // No valid point is 'active/hovered over' at this moment.\n return undefined;\n }\n\n return this.mapDataPointToCircle(this.data.series[indexActiveDataPoint], indexActiveDataPoint);\n }\n\n mapDataPointToCircle(d: any, i: number): Circle {\n const seriesName = this.data.name as string;\n\n const value = d.value;\n const label = d.name;\n const tooltipLabel = formatLabel(label);\n\n let cx;\n if (this.scaleType === ScaleType.Time) {\n cx = this.xScale(label);\n } else if (this.scaleType === ScaleType.Linear) {\n cx = this.xScale(Number(label));\n } else {\n cx = this.xScale(label);\n }\n\n const cy = this.yScale(this.type === SeriesType.Standard ? value : d.d1);\n const radius = 5;\n const height = this.yScale.range()[0] - cy;\n const opacity = 1;\n\n let color;\n if (this.colors.scaleType === ScaleType.Linear) {\n if (this.type === SeriesType.Standard) {\n color = this.colors.getColor(value);\n } else {\n color = this.colors.getColor(d.d1);\n }\n } else {\n color = this.colors.getColor(seriesName);\n }\n\n const data = Object.assign({}, d, {\n series: seriesName,\n value,\n name: label\n });\n\n return {\n classNames: [`circle-data-${i}`],\n value,\n label,\n data,\n cx,\n cy,\n radius,\n height,\n tooltipLabel,\n color,\n opacity,\n seriesName,\n gradientStops: this.getGradientStops(color),\n min: d.min,\n max: d.max\n };\n }\n\n getTooltipText({\n tooltipLabel,\n value,\n seriesName,\n min,\n max\n }: {\n tooltipLabel: string;\n value: any;\n seriesName: string;\n min: number;\n max: number;\n }): string {\n return `\n <span class=\"tooltip-label\">${escapeLabel(seriesName)} • ${escapeLabel(tooltipLabel)}</span>\n <span class=\"tooltip-val\">${value.toLocaleString()}${this.getTooltipMinMaxText(min, max)}</span>\n `;\n }\n\n getTooltipMinMaxText(min: number, max: number): string {\n if (min !== undefined || max !== undefined) {\n let result = ' (';\n if (min !== undefined) {\n if (max === undefined) {\n result += '≥';\n }\n result += min.toLocaleString();\n if (max !== undefined) {\n result += ' - ';\n }\n } else if (max !== undefined) {\n result += '≤';\n }\n if (max !== undefined) {\n result += max.toLocaleString();\n }\n result += ')';\n return result;\n } else {\n return '';\n }\n }\n\n getGradientStops(color: string): Gradient[] {\n return [\n {\n offset: 0,\n color,\n opacity: 0.2\n },\n {\n offset: 100,\n color,\n opacity: 1\n }\n ];\n }\n\n onClick(data: DataItem): void {\n this.select.emit(data);\n }\n\n isActive(entry): boolean {\n if (!this.activeEntries) return false;\n const item = this.activeEntries.find(d => {\n return entry.name === d.name;\n });\n return item !== undefined;\n }\n\n activateCircle(): void {\n this.barVisible = true;\n this.activate.emit({ name: this.data.name });\n }\n\n deactivateCircle(): void {\n this.barVisible = false;\n this.circle.opacity = 0;\n this.deactivate.emit({ name: this.data.name });\n }\n}\n","import {\n Component,\n Input,\n SimpleChanges,\n Output,\n EventEmitter,\n OnChanges,\n ChangeDetectionStrategy,\n HostListener\n} from '@angular/core';\n\n@Component({\n selector: 'g[ngx-charts-circle]',\n template: `\n <svg:circle\n [attr.cx]=\"cx\"\n [attr.cy]=\"cy\"\n [attr.r]=\"r\"\n [attr.fill]=\"fill\"\n [attr.stroke]=\"stroke\"\n [attr.opacity]=\"circleOpacity\"\n [attr.class]=\"classNames\"\n [attr.pointer-events]=\"pointerEvents\"\n />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class CircleComponent implements OnChanges {\n @Input() cx: number;\n @Input() cy: number;\n @Input() r: number;\n @Input() fill: string;\n @Input() stroke: string;\n @Input() data: number;\n @Input() classNames: string[] | string;\n @Input() circleOpacity: number;\n @Input() pointerEvents: string;\n\n @Output() select: EventEmitter<number> = new EventEmitter();\n @Output() activate: EventEmitter<number> = new EventEmitter();\n @Output() deactivate: EventEmitter<number> = new EventEmitter();\n\n @HostListener('click')\n onClick() {\n this.select.emit(this.data);\n }\n\n @HostListener('mouseenter')\n onMouseEnter(): void {\n this.activate.emit(this.data);\n }\n\n @HostListener('mouseleave')\n onMouseLeave(): void {\n this.deactivate.emit(this.data);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n this.classNames = Array.isArray(this.classNames) ? this.classNames.join(' ') : '';\n this.classNames += 'circle';\n }\n}\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'g[ngx-charts-grid-panel]',\n template: `\n <svg:rect [attr.height]=\"height\" [attr.width]=\"width\" [attr.x]=\"x\" [attr.y]=\"y\" stroke=\"none\" class=\"gridpanel\" />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class GridPanelComponent {\n @Input() width: number;\n @Input() height: number;\n @Input() x: number;\n @Input() y: number;\n}\n","import { Component, SimpleChanges, Input, OnChanges, ChangeDetectionStrategy } from '@angular/core';\nimport { ViewDimensions } from './types/view-dimension.interface';\nimport { DataItem } from '../models/chart-data.model';\n\ninterface GridPanel {\n class: ClassEnum;\n height: number;\n name: string;\n width: number;\n x: number;\n y: number;\n}\n\nenum GridOrientation {\n Vertical = 'vertical',\n Horizontal = 'horizontal'\n}\n\nenum ClassEnum {\n Odd = 'odd',\n Even = 'even'\n}\n\n@Component({\n selector: 'g[ngx-charts-grid-panel-series]',\n template: `\n <svg:g\n ngx-charts-grid-panel\n *ngFor=\"let gridPanel of gridPanels\"\n [height]=\"gridPanel.height\"\n [width]=\"gridPanel.width\"\n [x]=\"gridPanel.x\"\n [y]=\"gridPanel.y\"\n [class.grid-panel]=\"true\"\n [class.odd]=\"gridPanel.class === 'odd'\"\n [class.even]=\"gridPanel.class === 'even'\"\n ></svg:g>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class GridPanelSeriesComponent implements OnChanges {\n gridPanels: GridPanel[];\n\n @Input() data: any[];\n\n @Input() dims: ViewDimensions;\n\n @Input() xScale: any;\n\n @Input() yScale: any;\n\n @Input() orient: GridOrientation;\n\n ngOnChanges(changes: SimpleChanges): void {\n this.update();\n }\n\n update(): void {\n this.gridPanels = this.getGridPanels();\n }\n\n getGridPanels(): GridPanel[] {\n return this.data.map(d => {\n let offset;\n let width;\n let height;\n let x;\n let y;\n let className = ClassEnum.Odd;\n\n if (this.orient === GridOrientation.Vertical) {\n const position: number = this.xScale(d.name);\n const positionIndex = Number.parseInt((position / this.xScale.step()).toString(), 10);\n\n if (positionIndex % 2 === 1) {\n className = ClassEnum.Even;\n }\n offset = this.xScale.bandwidth() * this.xScale.paddingInner();\n width = this.xScale.bandwidth() + offset;\n height = this.dims.height;\n x = this.xScale(d.name) - offset / 2;\n y = 0;\n } else if (this.orient === GridOrientation.Horizontal) {\n const position = this.yScale(d.name);\n const positionIndex = Number.parseInt((position / this.yScale.step()).toString(), 10);\n\n if (positionIndex % 2 === 1) {\n className = ClassEnum.Even;\n }\n offset = this.yScale.bandwidth() * this.yScale.paddingInner();\n\n width = this.dims.width;\n height = this.yScale.bandwidth() + offset;\n x = 0;\n y = this.yScale(d.name) - offset / 2;\n }\n\n return {\n name: d.name,\n class: className,\n height,\n width,\n x,\n y\n };\n });\n }\n}\n","import { Component, Input, OnChanges, SimpleChanges, ChangeDetectionStrategy } from '@angular/core';\nimport { Gradient } from './types/gradient.interface';\n\nenum Orientation {\n Vertical = 'vertical',\n Horizontal = 'horizontal'\n}\n\n@Component({\n selector: 'g[ngx-charts-svg-linear-gradient]',\n template: `\n <svg:linearGradient [id]=\"name\" [attr.x1]=\"x1\" [attr.y1]=\"y1\" [attr.x2]=\"x2\" [attr.y2]=\"y2\">\n <svg:stop\n *ngFor=\"let stop of stops\"\n [attr.offset]=\"stop.offset + '%'\"\n [style.stop-color]=\"stop.color\"\n [style.stop-opacity]=\"stop.opacity\"\n />\n </svg:linearGradient>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SvgLinearGradientComponent implements OnChanges {\n @Input() orientation: Orientation = Orientation.Vertical;\n @Input() name: string;\n @Input() stops: Gradient[];\n\n x1: string;\n x2: string;\n y1: string;\n y2: string;\n\n ngOnChanges(changes: SimpleChanges): void {\n this.x1 = '0%';\n this.x2 = '0%';\n this.y1 = '0%';\n this.y2 = '0%';\n\n if (this.orientation === Orientation.Horizontal) {\n this.x2 = '100%';\n } else if (this.orientation === Orientation.Vertical) {\n this.y1 = '100%';\n }\n }\n}\n","import { Component, Input, OnChanges, ChangeDetectionStrategy, SimpleChanges } from '@angular/core';\nimport { Gradient } from './types/gradient.interface';\n\n@Component({\n selector: 'g[ngx-charts-svg-radial-gradient]',\n template: `\n <svg:radialGradient [id]=\"name\" [attr.cx]=\"cx\" [attr.cy]=\"cy\" [attr.r]=\"r\" gradientUnits=\"userSpaceOnUse\">\n <svg:stop\n *ngFor=\"let stop of stops\"\n [attr.offset]=\"stop.offset + '%'\"\n [style.stop-color]=\"stop.color\"\n [style.stop-opacity]=\"stop.opacity\"\n />\n </svg:radialGradient>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SvgRadialGradientComponent implements OnChanges {\n @Input() color: string;\n @Input() name: string;\n @Input() startOpacity: number;\n @Input() endOpacity = 1;\n @Input() cx: number = 0;\n @Input() cy: number = 0;\n\n @Input()\n get stops(): Gradient[] {\n return this.stopsInput || this.stopsDefault;\n }\n\n set stops(value: Gradient[]) {\n this.stopsInput = value;\n }\n\n r: string;\n\n private stopsInput: Gradient[];\n private stopsDefault: Gradient[];\n\n ngOnChanges(changes: SimpleChanges): void {\n this.r = '30%';\n if ('color' in changes || 'startOpacity' in changes || 'endOpacity' in changes) {\n this.stopsDefault = [\n {\n offset: 0,\n color: this.color,\n opacity: this.startOpacity\n },\n {\n offset: 100,\n color: this.color,\n opacity: this.endOpacity\n }\n ];\n }\n }\n}\n","import {\n Component,\n Input,\n Output,\n SimpleChanges,\n EventEmitter,\n ElementRef,\n OnChanges,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { select } from 'd3-selection';\nimport { id } from '../utils/id';\nimport { Gradient } from './types';\nimport { AreaChartSeries } from '../models/chart-data.model';\n\n@Component({\n selector: 'g[ngx-charts-area]',\n template: `\n <svg:defs *ngIf=\"gradient\">\n <svg:g ngx-charts-svg-linear-gradient orientation=\"vertical\" [name]=\"gradientId\" [stops]=\"gradientStops\" />\n </svg:defs>\n <svg:path class=\"area\" [attr.d]=\"areaPath\" [attr.fill]=\"gradient ? gradientFill : fill\" [style.opacity]=\"opacity\" />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AreaComponent implements OnChanges {\n @Input() data: AreaChartSeries;\n @Input() path: string;\n @Input() startingPath: string;\n @Input() fill: string;\n @Input() opacity: number = 1;\n @Input() startOpacity: number = 0.5;\n @Input() endOpacity: number = 1;\n @Input() gradient: boolean = false;\n @Input() stops: Gradient[];\n @Input() animations: boolean = true;\n\n @Output() select = new EventEmitter();\n\n element: HTMLElement;\n gradientId: string;\n gradientFill: string;\n areaPath: string;\n initialized: boolean = false;\n gradientStops: Gradient[];\n hasGradient: boolean = false;\n\n constructor(element: ElementRef) {\n this.element = element.nativeElement;\n }\n\n ngOnChanges(): void {\n if (!this.initialized) {\n this.loadAnimation();\n this.initialized = true;\n } else {\n this.update();\n }\n }\n\n update(): void {\n this.gradientId = 'grad' + id().toString();\n this.gradientFill = `url(#${this.gradientId})`;\n\n if (this.gradient || this.stops) {\n this.gradientStops = this.getGradient();\n this.hasGradient = true;\n } else {\n this.hasGradient = false;\n }\n\n this.updatePathEl();\n }\n\n loadAnimation(): void {\n this.areaPath = this.startingPath;\n setTimeout(this.update.bind(this), 100);\n }\n\n updatePathEl(): void {\n const node = select(this.element).select('.area');\n\n if (this.animations) {\n node.transition().duration(750).attr('d', this.path);\n } else {\n node.attr('d', this.path);\n }\n }\n\n getGradient(): Gradient[] {\n if (this.stops) {\n return this.stops;\n }\n\n return [\n {\n offset: 0,\n color: this.fill,\n opacity: this.startOpacity\n },\n {\n offset: 100,\n color: this.fill,\n opacity: this.endOpacity\n }\n ];\n }\n}\n","// Robert Penner's easeOutExpo\nfunction easeOutExpo(t, b, c, d): number {\n return (c * (-Math.pow(2, (-10 * t) / d) + 1) * 1024) / 1023 + b;\n}\n\n/**\n * Counts from a number to the end incrementally.\n */\nexport function count(countFrom: number, countTo: number, countDecimals: number, countDuration: number, callback: any) {\n const startVal = Number(countFrom);\n const endVal = Number(countTo);\n const countDown = startVal > endVal;\n const decimals = Math.max(0, countDecimals);\n const dec = Math.pow(10, decimals);\n const duration = Number(countDuration) * 1000;\n let startTime;\n\n function runCount(timestamp: number) {\n let frameVal;\n const progress = timestamp - startTime;\n\n if (countDown) {\n frameVal = startVal - easeOutExpo(progress, 0, startVal - endVal, duration);\n } else {\n frameVal = easeOutExpo(progress, startVal, endVal - startVal, duration);\n }\n\n if (countDown) {\n frameVal = frameVal < endVal ? endVal : frameVal;\n } else {\n frameVal = frameVal > endVal ? endVal : frameVal;\n }\n\n frameVal = Math.round(frameVal * dec) / dec;\n\n const tick = progress < duration;\n callback({\n value: frameVal,\n progress,\n timestamp,\n finished: !tick\n });\n\n if (tick) {\n return requestAnimationFrame(val => runCount(val));\n }\n }\n\n return requestAnimationFrame(timestamp => {\n startTime = timestamp;\n return runCount(timestamp);\n });\n}\n\n/**\n * Determine decimals places\n *\n * @export\n */\nexport function decimalChecker(countTo: number): number {\n const endVal = Number(countTo);\n\n if (endVal % 1 !== 0 && Math.abs(endVal) <= 10) {\n return 2;\n }\n\n return 0;\n}\n","import { Component, Input, Output, EventEmitter, ChangeDetectorRef, OnDestroy, ElementRef } from '@angular/core';\nimport { count, decimalChecker } from './count.helper';\n\n/**\n * Count up component\n *\n * Loosely inspired by:\n * - https://github.com/izupet/angular2-counto\n * - https://inorganik.github.io/countUp.js/\n *\n * @export\n */\n@Component({\n selector: '[ngx-charts-count-up]',\n template: ` {{ value }} `\n})\nexport class CountUpDirective implements OnDestroy {\n @Input() countDuration: number = 1;\n @Input() countPrefix: string = '';\n @Input() countSuffix: string = '';\n @Input() valueFormatting: any;\n\n @Input()\n set countDecimals(val: number) {\n this._countDecimals = val;\n }\n\n get countDecimals(): number {\n if (this._countDecimals) return this._countDecimals;\n return decimalChecker(this.countTo);\n }\n\n @Input()\n set countTo(val) {\n this._countTo = parseFloat(val);\n this.start();\n }\n\n get countTo(): any {\n return this._countTo;\n }\n\n @Input()\n set countFrom(val) {\n this._countFrom = parseFloat(val);\n this.start();\n }\n\n get countFrom(): any {\n return this._countFrom;\n }\n\n @Output() countChange = new EventEmitter();\n @Output() countFinish = new EventEmitter();\n\n nativeElement: any;\n\n value: any = '';\n formattedValue: string;\n\n private animationReq: any;\n\n private _countDecimals: number = 0;\n private _countTo: number = 0;\n private _countFrom: number = 0;\n\n constructor(private cd: ChangeDetectorRef, element: ElementRef) {\n this.nativeElement = element.nativeElement;\n }\n\n ngOnDestroy(): void {\n cancelAnimationFrame(this.animationReq);\n }\n\n start(): void {\n cancelAnimationFrame(this.animationReq);\n\n const valueFormatting =\n this.valueFormatting || (value => `${this.countPrefix}${value.toLocaleString()}${this.countSuffix}`);\n\n const callback = ({ value, progress, finished }) => {\n this.value = valueFormatting(value);\n this.cd.markForCheck();\n if (!finished) this.countChange.emit({ value: this.value, progress });\n if (finished) this.countFinish.emit({ value: this.value, progress });\n };\n\n this.animationReq = count(this.countFrom, this.countTo, this.countDecimals, this.countDuration, callback);\n }\n}\n","declare let global: any;\n\n// If we don't check whether 'window' and 'global' variables are defined,\n// code will fail in browser/node with 'variable is undefined' error.\nlet root: any;\nif (typeof window !== 'undefined') {\n root = window;\n} else if (typeof global !== 'undefined') {\n root = global;\n}\n\n// tslint:disable-next-line:variable-name\nexport const MouseEvent = root.MouseEvent as MouseEvent & {\n prototype?: MouseEvent;\n new (typeArg: string, eventInitDict?: MouseEventInit): MouseEvent;\n};\n\nexport function createMouseEvent(name: string, bubbles: boolean = false, cancelable: boolean = true): MouseEvent {\n // Calling new of an event does not work correctly on IE. The following is a tested workaround\n // See https://stackoverflow.com/questions/27176983/dispatchevent-not-working-in-ie11\n if (typeof MouseEvent === 'function') {\n // Sane browsers\n return new MouseEvent(name, { bubbles, cancelable });\n } else {\n // IE\n const event = document.createEvent('MouseEvent');\n event.initEvent(name, bubbles, cancelable);\n return event;\n }\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n ViewChild,\n ChangeDetectionStrategy,\n TemplateRef,\n PLATFORM_ID,\n Inject\n} from '@angular/core';\nimport { trigger, style, animate, transition } from '@angular/animations';\nimport { createMouseEvent } from '../events';\nimport { isPlatformBrowser } from '@angular/common';\nimport { ScaleType, ViewDimensions } from '../common/types';\nimport { ColorHelper } from '../common/color.helper';\n\nexport interface Tooltip {\n color: string;\n d0: number;\n d1: number;\n max: number;\n min: number;\n name: any;\n series: any;\n value: any;\n}\n\n@Component({\n selector: 'g[ngx-charts-tooltip-area]',\n template: `\n <svg:g>\n <svg:rect\n class=\"tooltip-area\"\n [attr.x]=\"0\"\n y=\"0\"\n [attr.width]=\"dims.width\"\n [attr.height]=\"dims.height\"\n style=\"opacity: 0; cursor: 'auto';\"\n (mousemove)=\"mouseMove($event)\"\n (mouseleave)=\"hideTooltip()\"\n />\n <ng-template #defaultTooltipTemplate let-model=\"model\">\n <xhtml:div class=\"area-tooltip-container\">\n <xhtml:div *ngFor=\"let tooltipItem of model\" class=\"tooltip-item\">\n <xhtml:span class=\"tooltip-item-color\" [style.background-color]=\"tooltipItem.color\"></xhtml:span>\n {{ getToolTipText(tooltipItem) }}\n </xhtml:div>\n </xhtml:div>\n </ng-template>\n <svg:rect\n #tooltipAnchor\n [@animationState]=\"anchorOpacity !== 0 ? 'active' : 'inactive'\"\n class=\"tooltip-anchor\"\n [attr.x]=\"anchorPos\"\n y=\"0\"\n [attr.width]=\"1\"\n [attr.height]=\"dims.height\"\n [style.opacity]=\"anchorOpacity\"\n [style.pointer-events]=\"'none'\"\n ngx-tooltip\n [tooltipDisabled]=\"tooltipDisabled\"\n [tooltipPlacement]=\"'right'\"\n [tooltipType]=\"'tooltip'\"\n [tooltipSpacing]=\"15\"\n [tooltipTemplate]=\"tooltipTemplate ? tooltipTemplate : defaultTooltipTemplate\"\n [tooltipContext]=\"anchorValues\"\n [tooltipImmediateExit]=\"true\"\n />\n </svg:g>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [\n trigger('animationState', [\n transition('inactive => active', [\n style({\n opacity: 0\n }),\n animate(250, style({ opacity: 0.7 }))\n ]),\n transition('active => inactive', [\n style({\n opacity: 0.7\n }),\n animate(250, style({ opacity: 0 }))\n ])\n ])\n ]\n})\nexport class TooltipArea {\n anchorOpacity: number = 0;\n anchorPos: number = -1;\n anchorValues: Tooltip[] = [];\n lastAnchorPos: number;\n\n @Input() dims: ViewDimensions;\n @Input() xSet: any[];\n @Input() xScale;\n @Input() yScale;\n @Input() results: any[];\n @Input() colors: ColorHelper;\n @Input() showPercentage: boolean = false;\n @Input() tooltipDisabled: boolean = false;\n @Input() tooltipTemplate: TemplateRef<any>;\n\n @Output() hover: EventEmitter<{ value: any }> = new EventEmitter();\n\n @ViewChild('tooltipAnchor', { static: false }) tooltipAnchor;\n\n constructor(@Inject(PLATFORM_ID) private platformId: any) {}\n\n getValues(xVal): Tooltip[] {\n const results = [];\n\n for (const group of this.results) {\n const item = group.series.find(d => d.name.toString() === xVal.toString());\n let groupName = group.name;\n if (groupName instanceof Date) {\n groupName = groupName.toLocaleDateString();\n }\n\n if (item) {\n const label = item.name;\n let val = item.value;\n if (this.showPercentage) {\n val = (item.d1 - item.d0).toFixed(2) + '%';\n }\n let color;\n if (this.colors.scaleType === ScaleType.Linear) {\n let v = val;\n if (item.d1) {\n v = item.d1;\n }\n color = this.colors.getColor(v);\n } else {\n color = this.colors.getColor(group.name);\n }\n\n const data = Object.assign({}, item, {\n value: val,\n name: label,\n series: groupName,\n min: item.min,\n max: item.max,\n color\n });\n\n results.push(data);\n }\n }\n\n return results;\n }\n\n mouseMove(event) {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n\n const xPos = event.pageX - event.target.getBoundingClientRect().left;\n\n const closestIndex = this.findClosestPointIndex(xPos);\n const closestPoint = this.xSet[closestIndex];\n this.anchorPos = this.xScale(closestPoint);\n this.anchorPos = Math.max(0, this.anchorPos);\n this.anchorPos = Math.min(this.dims.width, this.anchorPos);\n\n this.anchorValues = this.getValues(closestPoint);\n if (this.anchorPos !== this.lastAnchorPos) {\n const ev = createMouseEvent('mouseleave');\n this.tooltipAnchor.nativeElement.dispatchEvent(ev);\n this.anchorOpacity = 0.7;\n this.hover.emit({\n value: closestPoint\n });\n this.showTooltip();\n\n this.lastAnchorPos = this.anchorPos;\n }\n }\n\n findClosestPointIndex(xPos: number): number {\n let minIndex = 0;\n let maxIndex = this.xSet.length - 1;\n let minDiff = Number.MAX_VALUE;\n let closestIndex = 0;\n\n while (minIndex <= maxIndex) {\n const currentIndex = ((minIndex + maxIndex) / 2) | 0;\n const currentElement = this.xScale(this.xSet[currentIndex]);\n\n const curDiff = Math.abs(currentElement - xPos);\n\n if (curDiff < minDiff) {\n minDiff = curDiff;\n closestIndex = currentIndex;\n }\n\n if (currentElement < xPos) {\n minIndex = currentIndex + 1;\n } else if (currentElement > xPos) {\n maxIndex = currentIndex - 1;\n } else {\n minDiff = 0;\n closestIndex = currentIndex;\n break;\n }\n }\n\n return closestIndex;\n }\n\n showTooltip(): void {\n const event = createMouseEvent('mouseenter');\n this.tooltipAnchor.nativeElement.dispatchEvent(event);\n }\n\n hideTooltip(): void {\n const event = createMouseEvent('mouseleave');\n this.tooltipAnchor.nativeElement.dispatchEvent(event);\n this.anchorOpacity = 0;\n this.lastAnchorPos = -1;\n }\n\n getToolTipText(tooltipItem: Tooltip): string {\n let result: string = '';\n if (tooltipItem.series !== undefined) {\n result += tooltipItem.series;\n } else {\n result += '???';\n }\n result += ': ';\n if (tooltipItem.value !== undefined) {\n result += tooltipItem.value.toLocaleString();\n }\n if (tooltipItem.min !== undefined || tooltipItem.max !== undefined) {\n result += ' (';\n if (tooltipItem.min !== undefined) {\n if (tooltipItem.max === undefined) {\n result += '≥';\n }\n result += tooltipItem.min.toLocaleString();\n if (tooltipItem.max !== undefined) {\n result += ' - ';\n }\n } else if (tooltipItem.max !== undefined) {\n result += '≤';\n }\n if (tooltipItem.max !== undefined) {\n result += tooltipItem.max.toLocaleString();\n }\n result += ')';\n }\n return result;\n }\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n ElementRef,\n OnChanges,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n SimpleChanges,\n ViewEncapsulation\n} from '@angular/core';\nimport { brushX } from 'd3-brush';\nimport { scaleLinear, scaleTime, scalePoint } from 'd3-scale';\nimport { select } from 'd3-selection';\nimport { id } from '../..//utils/id';\nimport { ViewDimensions } from '../types';\n\nexport enum TimelineScaleType {\n Time = 'time',\n Linear = 'linear',\n Ordinal = 'ordinal'\n}\n\n@Component({\n selector: 'g[ngx-charts-timeline]',\n template: `\n <svg:g class=\"timeline\" [attr.transform]=\"transform\">\n <svg:filter [attr.id]=\"filterId\">\n <svg:feColorMatrix\n in=\"SourceGraphic\"\n type=\"matrix\"\n values=\"0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\"\n />\n </svg:filter>\n <svg:g class=\"embedded-chart\">\n <ng-content></ng-content>\n </svg:g>\n <svg:rect x=\"0\" [attr.width]=\"view[0]\" y=\"0\" [attr.height]=\"height\" class=\"brush-background\" />\n <svg:g class=\"brush\"></svg:g>\n </svg:g>\n `,\n styleUrls: ['./timeline.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class Timeline implements OnChanges {\n @Input() view: [number, number];\n @Input() results; // type this\n @Input() scheme; // type this\n @Input() customColors; // type this\n @Input() legend: boolean;\n @Input() autoScale: boolean;\n @Input() scaleType: TimelineScaleType;\n @Input() height: number = 50;\n\n @Output() select = new EventEmitter();\n @Output() onDomainChange = new EventEmitter();\n\n element: HTMLElement;\n dims: ViewDimensions;\n xDomain: any[];\n xScale: any;\n brush: any;\n transform: string;\n initialized: boolean = false;\n filterId: string;\n filter: string;\n\n constructor(element: ElementRef, private cd: ChangeDetectorRef) {\n this.element = element.nativeElement;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n this.update();\n\n if (!this.initialized) {\n this.addBrush();\n this.initialized = true;\n }\n }\n\n update(): void {\n this.dims = this.getDims();\n this.height = this.dims.height;\n const offsetY = this.view[1] - this.height;\n\n this.xDomain = this.getXDomain();\n this.xScale = this.getXScale();\n\n if (this.brush) {\n this.updateBrush();\n }\n\n this.transform = `translate(0 , ${offsetY})`;\n\n this.filterId = 'filter' + id().toString();\n this.filter = `url(#${this.filterId})`;\n\n this.cd.markForCheck();\n }\n\n getXDomain(): any[] {\n let values = [];\n\n for (const results of this.results) {\n for (const d of results.series) {\n if (!values.includes(d.name)) {\n values.push(d.name);\n }\n }\n }\n\n let domain = [];\n if (this.scaleType === TimelineScaleType.Time) {\n const min = Math.min(...values);\n const max = Math.max(...values);\n domain = [min, max];\n } else if (this.scaleType === TimelineScaleType.Linear) {\n values = values.map(v => Number(v));\n const min = Math.min(...values);\n const max = Math.max(...values);\n domain = [min, max];\n } else {\n domain = values;\n }\n\n return domain;\n }\n\n getXScale() {\n let scale;\n\n if (this.scaleType === TimelineScaleType.Time) {\n scale = scaleTime().range([0, this.dims.width]).domain(this.xDomain);\n } else if (this.scaleType === TimelineScaleType.Linear) {\n scale = scaleLinear().range([0, this.dims.width]).domain(this.xDomain);\n } else if (this.scaleType === TimelineScaleType.Ordinal) {\n scale = scalePoint().range([0, this.dims.width]).padding(0.1).domain(this.xDomain);\n }\n\n return scale;\n }\n\n addBrush(): void {\n if (this.brush) return;\n\n const height = this.height;\n const width = this.view[0];\n\n this.brush = brushX()\n .extent([\n [0, 0],\n [width, height]\n ])\n .on('brush end', ({ selection }) => {\n const newSelection = selection || this.xScale.range();\n const newDomain = newSelection.map(this.xScale.invert);\n\n this.onDomainChange.emit(newDomain);\n this.cd.markForCheck();\n });\n\n select(this.element).select('.brush').call(this.brush);\n }\n\n updateBrush(): void {\n if (!this.brush) return;\n\n const height = this.height;\n const width = this.view[0];\n\n this.brush.extent([\n [0, 0],\n [width, height]\n ]);\n select(this.element).select('.brush').call(this.brush);\n\n // clear hardcoded properties so they can be defined by CSS\n select(this.element)\n .select('.selection')\n .attr('fill', undefined)\n .attr('stroke', undefined)\n .attr('fill-opacity', undefined);\n\n this.cd.markForCheck();\n }\n\n getDims(): ViewDimensions {\n const width = this.view[0];\n\n const dims = {\n width,\n height: this.height\n };\n\n return dims;\n }\n}\n","import {\n Component,\n Input,\n ChangeDetectionStrategy,\n Output,\n EventEmitter,\n SimpleChanges,\n OnChanges,\n ChangeDetectorRef,\n ViewEncapsulation\n} from '@angular/core';\nimport { formatLabel } from '../label.helper';\nimport { ColorHelper } from '../color.helper';\n\nexport interface LegendEntry {\n color: string;\n formattedLable: string;\n label: string;\n}\n\n@Component({\n selector: 'ngx-charts-legend',\n template: `\n <div [style.width.px]=\"width\">\n <header class=\"legend-title\" *ngIf=\"title?.length > 0\">\n <span class=\"legend-title-text\">{{ title }}</span>\n </header>\n <div class=\"legend-wrap\">\n <ul class=\"legend-labels\" [class.horizontal-legend]=\"horizontal\" [style.max-height.px]=\"height - 45\">\n <li *ngFor=\"let entry of legendEntries; trackBy: trackBy\" class=\"legend-label\">\n <ngx-charts-legend-entry\n [label]=\"entry.label\"\n [formattedLabel]=\"entry.formattedLabel\"\n [color]=\"entry.color\"\n [isActive]=\"isActive(entry)\"\n (select)=\"labelClick.emit($event)\"\n (activate)=\"activate($event)\"\n (deactivate)=\"deactivate($event)\"\n >\n </ngx-charts-legend-entry>\n </li>\n </ul>\n </div>\n </div>\n `,\n styleUrls: ['./legend.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class LegendComponent implements OnChanges {\n @Input() data: string[];\n @Input() title: string;\n @Input() colors: ColorHelper;\n @Input() height: number;\n @Input() width: number;\n @Input() activeEntries;\n @Input() horizontal = false;\n\n @Output() labelClick: EventEmitter<string> = new EventEmitter();\n @Output() labelActivate: EventEmitter<{ name: string }> = new EventEmitter();\n @Output() labelDeactivate: EventEmitter<{ name: string }> = new EventEmitter();\n\n legendEntries: LegendEntry[] = [];\n\n constructor(private cd: ChangeDetectorRef) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n this.update();\n }\n\n update(): void {\n this.cd.markForCheck();\n this.legendEntries = this.getLegendEntries();\n }\n\n getLegendEntries(): LegendEntry[] {\n const items = [];\n for (const label of this.data) {\n const formattedLabel = formatLabel(label);\n\n const idx = items.findIndex(i => {\n return i.label === formattedLabel;\n });\n\n if (idx === -1) {\n items.push({\n label,\n formattedLabel,\n color: this.colors.getColor(label)\n });\n }\n }\n\n return items;\n }\n\n isActive(entry: LegendEntry): boolean {\n if (!this.activeEntries) return false;\n const item = this.activeEntries.find(d => {\n return entry.label === d.name;\n });\n return item !== undefined;\n }\n\n activate(item: { name: string }) {\n this.labelActivate.emit(item);\n }\n\n deactivate(item: { name: string }) {\n this.labelDeactivate.emit(item);\n }\n\n trackBy(index: number, item: LegendEntry): string {\n return item.label;\n }\n}\n","import { Component, Input, Output, ChangeDetectionStrategy, HostListener, EventEmitter } from '@angular/core';\n\n@Component({\n selector: 'ngx-charts-legend-entry',\n template: `\n <span [title]=\"formattedLabel\" tabindex=\"-1\" [class.active]=\"isActive\" (click)=\"select.emit(formattedLabel)\">\n <span class=\"legend-label-color\" [style.background-color]=\"color\" (click)=\"toggle.emit(formattedLabel)\"> </span>\n <span class=\"legend-label-text\">\n {{ trimmedLabel }}\n </span>\n </span>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class LegendEntryComponent {\n @Input() color: string;\n @Input() label: string;\n @Input() formattedLabel: string;\n @Input() isActive: boolean = false;\n\n @Output() select: EventEmitter<string> = new EventEmitter();\n @Output() activate: EventEmitter<{ name: string }> = new EventEmitter();\n @Output() deactivate: EventEmitter<{ name: string }> = new EventEmitter();\n @Output() toggle: EventEmitter<string> = new EventEmitter();\n\n get trimmedLabel(): string {\n return this.formattedLabel || '(empty)';\n }\n\n @HostListener('mouseenter')\n onMouseEnter(): void {\n this.activate.emit({ name: this.label });\n }\n\n @HostListener('mouseleave')\n onMouseLeave(): void {\n this.deactivate.emit({ name: this.label });\n }\n}\n","import { Component, Input, OnChanges, ChangeDetectionStrategy, SimpleChanges, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'ngx-charts-scale-legend',\n template: `\n <div\n class=\"scale-legend\"\n [class.horizontal-legend]=\"horizontal\"\n [style.height.px]=\"horizontal ? undefined : height\"\n [style.width.px]=\"width\"\n >\n <div class=\"scale-legend-label\">\n <span>{{ valueRange[1].toLocaleString() }}</span>\n </div>\n <div class=\"scale-legend-wrap\" [style.background]=\"gradient\"></div>\n <div class=\"scale-legend-label\">\n <span>{{ valueRange[0].toLocaleString() }}</span>\n </div>\n </div>\n `,\n styleUrls: ['./scale-legend.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ScaleLegendComponent implements OnChanges {\n @Input() valueRange: number[];\n @Input() colors: any;\n @Input() height: number;\n @Input() width: number;\n @Input() horizontal: boolean = false;\n\n gradient: string;\n\n ngOnChanges(changes: SimpleChanges): void {\n const gradientValues = this.gradientString(this.colors.range(), this.colors.domain());\n const direction = this.horizontal ? 'right' : 'bottom';\n this.gradient = `linear-gradient(to ${direction}, ${gradientValues})`;\n }\n\n /**\n * Generates the string used in the gradient stylesheet properties\n * @param colors array of colors\n * @param splits array of splits on a scale of (0, 1)\n */\n gradientString(colors: string[], splits: number[]): string {\n // add the 100%\n splits.push(1);\n const pairs = [];\n colors.reverse().forEach((c, i) => {\n pairs.push(`${c} ${Math.round(splits[i] * 100)}%`);\n });\n\n return pairs.join(', ');\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n ViewEncapsulation\n} from '@angular/core';\nimport { trimLabel } from '../trim-label.helper';\nimport { formatLabel } from '../label.helper';\nimport { DataItem, StringOrNumberOrDate } from '../../models/chart-data.model';\nimport { ColorHelper } from '../color.helper';\n\nexport interface AdvancedLegendItem {\n value: StringOrNumberOrDate;\n _value: StringOrNumberOrDate;\n color: string;\n data: DataItem;\n label: string;\n displayLabel: string;\n originalLabel: string;\n percentage: string;\n}\n\n@Component({\n selector: 'ngx-charts-advanced-legend',\n template: `\n <div class=\"advanced-pie-legend\" [style.width.px]=\"width\">\n <div\n *ngIf=\"animations\"\n class=\"total-value\"\n ngx-charts-count-up\n [countTo]=\"roundedTotal\"\n [valueFormatting]=\"valueFormatting\"\n ></div>\n <div class=\"total-value\" *ngIf=\"!animations\">\n {{ valueFormatting ? valueFormatting(roundedTotal) : defaultValueFormatting(roundedTotal) }}\n </div>\n <div class=\"total-label\">\n {{ label }}\n </div>\n <div class=\"legend-items-container\">\n <div class=\"legend-items\">\n <div\n *ngFor=\"let legendItem of legendItems; trackBy: trackBy\"\n tabindex=\"-1\"\n class=\"legend-item\"\n (mouseenter)=\"activate.emit(legendItem.data)\"\n (mouseleave)=\"deactivate.emit(legendItem.data)\"\n (click)=\"select.emit(legendItem.data)\"\n >\n <div class=\"item-color\" [style.border-left-color]=\"legendItem.color\"></div>\n <div\n *ngIf=\"animations\"\n class=\"item-value\"\n ngx-charts-count-up\n [countTo]=\"legendItem._value\"\n [valueFormatting]=\"valueFormatting\"\n ></div>\n <div *ngIf=\"!animations\" class=\"item-value\">\n {{ valueFormatting ? valueFormatting(legendItem.value) : defaultValueFormatting(legendItem.value) }}\n </div>\n <div class=\"item-label\">{{ legendItem.displayLabel }}</div>\n <div\n *ngIf=\"animations\"\n class=\"item-percent\"\n ngx-charts-count-up\n [countTo]=\"legendItem.percentage\"\n [countSuffix]=\"'%'\"\n ></div>\n <div *ngIf=\"!animations\" class=\"item-percent\">{{ legendItem.percentage.toLocaleString() }}%</div>\n </div>\n </div>\n </div>\n </div>\n `,\n styleUrls: ['./advanced-legend.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AdvancedLegendComponent implements OnChanges {\n @Input() width: number;\n @Input() data: DataItem[];\n @Input() colors: ColorHelper;\n @Input() label: string = 'Total';\n @Input() animations: boolean = true;\n\n @Output() select: EventEmitter<DataItem> = new EventEmitter();\n @Output() activate: EventEmitter<DataItem> = new EventEmitter();\n @Output() deactivate: EventEmitter<DataItem> = new EventEmitter();\n\n legendItems: AdvancedLegendItem[] = [];\n total: number;\n roundedTotal: number;\n\n @Input() valueFormatting: (value: number) => any;\n @Input() labelFormatting: (value: string) => any = label => label;\n @Input() percentageFormatting: (value: number) => any = percentage => percentage;\n\n defaultValueFormatting: (value: number) => any = value => value.toLocaleString();\n\n ngOnChanges(changes: SimpleChanges): void {\n this.update();\n }\n\n getTotal(): number {\n return this.data.map(d => Number(d.value)).reduce((sum, d) => sum + d, 0);\n }\n\n update(): void {\n this.total = this.getTotal();\n this.roundedTotal = this.total;\n\n this.legendItems = this.getLegendItems();\n }\n\n getLegendItems(): AdvancedLegendItem[] {\n return (this.data as any).map(d => {\n const label = formatLabel(d.name);\n const value = d.value;\n const color = this.colors.getColor(label);\n const percentage = this.total > 0 ? (value / this.total) * 100 : 0;\n const formattedLabel = typeof this.labelFormatting === 'function' ? this.labelFormatting(label) : label;\n\n return {\n _value: value,\n data: d,\n value,\n color,\n label: formattedLabel,\n displayLabel: trimLabel(formattedLabel, 20),\n origialLabel: d.name,\n percentage: this.percentageFormatting ? this.percentageFormatting(percentage) : percentage.toLocaleString()\n };\n });\n }\n\n trackBy(item: AdvancedLegendItem): string {\n return item.label;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { ChartComponent } from './charts/chart.component';\nimport { BaseChartComponent } from './base-chart.component';\nimport { AxesModule } from './axes/axes.module';\nimport { TooltipModule } from './tooltip/tooltip.module';\nimport { CircleSeriesComponent } from './circle-series.component';\nimport { CircleComponent } from './circle.component';\nimport { GridPanelComponent } from './grid-panel.component';\nimport { GridPanelSeriesComponent } from './grid-panel-series.component';\nimport { SvgLinearGradientComponent } from './svg-linear-gradient.component';\nimport { SvgRadialGradientComponent } from './svg-radial-gradient.component';\nimport { AreaComponent } from './area.component';\nimport { CountUpDirective } from './count/count.directive';\nimport { TooltipArea } from './tooltip-area.component';\nimport { Timeline } from './timeline/timeline.component';\nimport { VisibilityObserver } from '../utils/visibility-observer';\nimport { LegendComponent } from './legend/legend.component';\nimport { LegendEntryComponent } from './legend/legend-entry.component';\nimport { ScaleLegendComponent } from './legend/scale-legend.component';\nimport { AdvancedLegendComponent } from './legend/advanced-legend.component';\n\nconst COMPONENTS = [\n AreaComponent,\n BaseChartComponent,\n CountUpDirective,\n TooltipArea,\n ChartComponent,\n LegendComponent,\n LegendEntryComponent,\n ScaleLegendComponent,\n CircleComponent,\n CircleSeriesComponent,\n GridPanelComponent,\n GridPanelSeriesComponent,\n SvgLinearGradientComponent,\n SvgRadialGradientComponent,\n Timeline,\n AdvancedLegendComponent\n];\n\n@NgModule({\n imports: [CommonModule, AxesModule, TooltipModule],\n declarations: [...COMPONENTS, VisibilityObserver],\n exports: [CommonModule, AxesModule, TooltipModule, ...COMPONENTS, VisibilityObserver]\n})\nexport class ChartCommonModule {}\n","import { ViewDimensions } from './types/view-dimension.interface';\nimport { ScaleType, LegendPosition } from '../common/types';\n\nexport function calculateViewDimensions({\n width,\n height,\n margins,\n showXAxis = false,\n showYAxis = false,\n xAxisHeight = 0,\n yAxisWidth = 0,\n showXLabel = false,\n showYLabel = false,\n showLegend = false,\n legendType = ScaleType.Ordinal,\n legendPosition = LegendPosition.Right,\n columns = 12\n}): ViewDimensions {\n let xOffset = margins[3];\n let chartWidth = width;\n let chartHeight = height - margins[0] - margins[2];\n\n if (showLegend && legendPosition === LegendPosition.Right) {\n if (legendType === ScaleType.Ordinal) {\n columns -= 2;\n } else {\n columns -= 1;\n }\n }\n\n chartWidth = (chartWidth * columns) / 12;\n\n chartWidth = chartWidth - margins[1] - margins[3];\n\n if (showXAxis) {\n chartHeight -= 5;\n chartHeight -= xAxisHeight;\n\n if (showXLabel) {\n // text height + spacing between axis label and tick labels\n const offset = 25 + 5;\n chartHeight -= offset;\n }\n }\n\n if (showYAxis) {\n chartWidth -= 5;\n chartWidth -= yAxisWidth;\n xOffset += yAxisWidth;\n xOffset += 10;\n\n if (showYLabel) {\n // text height + spacing between axis label and tick labels\n const offset = 25 + 5;\n chartWidth -= offset;\n xOffset += offset;\n }\n }\n\n chartWidth = Math.max(0, chartWidth);\n chartHeight = Math.max(0, chartHeight);\n\n return {\n width: Math.floor(chartWidth),\n height: Math.floor(chartHeight),\n xOffset: Math.floor(xOffset)\n };\n}\n","import { ScaleType } from '../common/types';\n\nexport interface Color {\n name: string;\n selectable: boolean;\n group: ScaleType;\n domain: string[];\n}\n\nexport let colorSets: Color[] = [\n {\n name: 'vivid',\n selectable: true,\n group: ScaleType.Ordinal,\n domain: [\n '#647c8a',\n '#3f51b5',\n '#2196f3',\n '#00b862',\n '#afdf0a',\n '#a7b61a',\n '#f3e562',\n '#ff9800',\n '#ff5722',\n '#ff4514'\n ]\n },\n {\n name: 'natural',\n selectable: true,\n group: ScaleType.Ordinal,\n domain: [\n '#bf9d76',\n '#e99450',\n '#d89f59',\n '#f2dfa7',\n '#a5d7c6',\n '#7794b1',\n '#afafaf',\n '#707160',\n '#ba9383',\n '#d9d5c3'\n ]\n },\n {\n name: 'cool',\n selectable: true,\n group: ScaleType.Ordinal,\n domain: [\n '#a8385d',\n '#7aa3e5',\n '#a27ea8',\n '#aae3f5',\n '#adcded',\n '#a95963',\n '#8796c0',\n '#7ed3ed',\n '#50abcc',\n '#ad6886'\n ]\n },\n {\n name: 'fire',\n selectable: true,\n group: ScaleType.Ordinal,\n domain: ['#ff3d00', '#bf360c', '#ff8f00', '#ff6f00', '#ff5722', '#e65100', '#ffca28', '#ffab00']\n },\n {\n name: 'solar',\n selectable: true,\n group: ScaleType.Linear,\n domain: [\n '#fff8e1',\n '#ffecb3',\n '#ffe082',\n '#ffd54f',\n '#ffca28',\n '#ffc107',\n '#ffb300',\n '#ffa000',\n '#ff8f00',\n '#ff6f00'\n ]\n },\n {\n name: 'air',\n selectable: true,\n group: ScaleType.Linear,\n domain: [\n '#e1f5fe',\n '#b3e5fc',\n '#81d4fa',\n '#4fc3f7',\n '#29b6f6',\n '#03a9f4',\n '#039be5',\n '#0288d1',\n '#0277bd',\n '#01579b'\n ]\n },\n {\n name: 'aqua',\n selectable: true,\n group: ScaleType.Linear,\n domain: [\n '#e0f7fa',\n '#b2ebf2',\n '#80deea',\n '#4dd0e1',\n '#26c6da',\n '#00bcd4',\n '#00acc1',\n '#0097a7',\n '#00838f',\n '#006064'\n ]\n },\n {\n name: 'flame',\n selectable: false,\n group: ScaleType.Ordinal,\n domain: [\n '#A10A28',\n '#D3342D',\n '#EF6D49',\n '#FAAD67',\n '#FDDE90',\n '#DBED91',\n '#A9D770',\n '#6CBA67',\n '#2C9653',\n '#146738'\n ]\n },\n {\n name: 'ocean',\n selectable: false,\n group: ScaleType.Ordinal,\n domain: [\n '#1D68FB',\n '#33C0FC',\n '#4AFFFE',\n '#AFFFFF',\n '#FFFC63',\n '#FDBD2D',\n '#FC8A25',\n '#FA4F1E',\n '#FA141B',\n '#BA38D1'\n ]\n },\n {\n name: 'forest',\n selectable: false,\n group: ScaleType.Ordinal,\n domain: [\n '#55C22D',\n '#C1F33D',\n '#3CC099',\n '#AFFFFF',\n '#8CFC9D',\n '#76CFFA',\n '#BA60FB',\n '#EE6490',\n '#C42A1C',\n '#FC9F32'\n ]\n },\n {\n name: 'horizon',\n selectable: false,\n group: ScaleType.Ordinal,\n domain: [\n '#2597FB',\n '#65EBFD',\n '#99FDD0',\n '#FCEE4B',\n '#FEFCFA',\n '#FDD6E3',\n '#FCB1A8',\n '#EF6F7B',\n '#CB96E8',\n '#EFDEE0'\n ]\n },\n {\n name: 'neons',\n selectable: false,\n group: ScaleType.Ordinal,\n domain: [\n '#FF3333',\n '#FF33FF',\n '#CC33FF',\n '#0000FF',\n '#33CCFF',\n '#33FFFF',\n '#33FF66',\n '#CCFF33',\n '#FFCC00',\n '#FF6600'\n ]\n },\n {\n name: 'picnic',\n selectable: false,\n group: ScaleType.Ordinal,\n domain: [\n '#FAC51D',\n '#66BD6D',\n '#FAA026',\n '#29BB9C',\n '#E96B56',\n '#55ACD2',\n '#B7332F',\n '#2C83C9',\n '#9166B8',\n '#92E7E8'\n ]\n },\n {\n name: 'night',\n selectable: false,\n group: ScaleType.Ordinal,\n domain: [\n '#2B1B5A',\n '#501356',\n '#183356',\n '#28203F',\n '#391B3C',\n '#1E2B3C',\n '#120634',\n '#2D0432',\n '#051932',\n '#453080',\n '#75267D',\n '#2C507D',\n '#4B3880',\n '#752F7D',\n '#35547D'\n ]\n },\n {\n name: 'nightLights',\n selectable: false,\n group: ScaleType.Ordinal,\n domain: [\n '#4e31a5',\n '#9c25a7',\n '#3065ab',\n '#57468b',\n '#904497',\n '#46648b',\n '#32118d',\n '#a00fb3',\n '#1052a2',\n '#6e51bd',\n '#b63cc3',\n '#6c97cb',\n '#8671c1',\n '#b455be',\n '#7496c3'\n ]\n }\n];\n","import { range } from 'd3-array';\nimport { scaleBand, scaleLinear, scaleOrdinal, scaleQuantile } from 'd3-scale';\n\nimport { colorSets } from '../utils/color-sets';\nimport { Gradient, ScaleType } from './types';\nimport { StringOrNumberOrDate } from '../models/chart-data.model';\n\nexport class ColorHelper {\n scale: any;\n scaleType: ScaleType;\n colorDomain: string[];\n domain: number[] | string[];\n customColors: any;\n\n constructor(scheme: any, type: ScaleType, domain: number[] | string[], customColors?) {\n if (typeof scheme === 'string') {\n scheme = colorSets.find(cs => {\n return cs.name === scheme;\n });\n }\n this.colorDomain = scheme.domain;\n this.scaleType = type;\n this.domain = domain;\n this.customColors = customColors;\n\n this.scale = this.generateColorScheme(scheme, type, this.domain);\n }\n\n generateColorScheme(scheme: any, type: ScaleType, domain: number[] | string[]): any {\n if (typeof scheme === 'string') {\n scheme = colorSets.find(cs => {\n return cs.name === scheme;\n });\n }\n let colorScale;\n if (type === ScaleType.Quantile) {\n colorScale = scaleQuantile().range(scheme.domain).domain(domain);\n } else if (type === ScaleType.Ordinal) {\n colorScale = scaleOrdinal().range(scheme.domain).domain(domain);\n } else if (type === ScaleType.Linear) {\n // linear schemes must have at least 2 colors\n const colorDomain = [...scheme.domain];\n if (colorDomain.length === 1) {\n colorDomain.push(colorDomain[0]);\n this.colorDomain = colorDomain;\n }\n\n const points = range(0, 1, 1.0 / colorDomain.length);\n colorScale = scaleLinear().domain(points).range(colorDomain);\n }\n\n return colorScale;\n }\n\n getColor(value: StringOrNumberOrDate): string {\n if (value === undefined || value === null) {\n throw new Error('Value can not be null');\n }\n if (this.scaleType === ScaleType.Linear) {\n const valueScale = scaleLinear().domain(this.domain).range([0, 1]);\n\n return this.scale(valueScale(value));\n } else {\n if (typeof this.customColors === 'function') {\n return this.customColors(value);\n }\n\n const formattedValue = value.toString();\n let found: any; // todo type customColors\n if (this.customColors && this.customColors.length > 0) {\n found = this.customColors.find(mapping => {\n return mapping.name.toLowerCase() === formattedValue.toLowerCase();\n });\n }\n\n if (found) {\n return found.value;\n } else {\n return this.scale(value);\n }\n }\n }\n\n getLinearGradientStops(value: number | string, start?: number | string): Gradient[] {\n if (start === undefined) {\n start = this.domain[0];\n }\n const valueScale = scaleLinear().domain(this.domain).range([0, 1]);\n\n const colorValueScale = scaleBand().domain(this.colorDomain).range([0, 1]);\n\n const endColor = this.getColor(value);\n\n // generate the stops\n const startVal = valueScale(start);\n const startColor = this.getColor(start);\n\n const endVal = valueScale(value);\n let i = 1;\n let currentVal = startVal;\n const stops: Gradient[] = [];\n\n stops.push({\n color: startColor,\n offset: startVal,\n originalOffset: startVal,\n opacity: 1\n });\n\n while (currentVal < endVal && i < this.colorDomain.length) {\n const color = this.colorDomain[i];\n const offset = colorValueScale(color);\n if (offset <= startVal) {\n i++;\n continue;\n }\n\n if (offset.toFixed(4) >= (endVal - colorValueScale.bandwidth()).toFixed(4)) {\n break;\n }\n\n stops.push({\n color,\n offset,\n opacity: 1\n });\n currentVal = offset;\n i++;\n }\n\n if (stops[stops.length - 1].offset < 100) {\n stops.push({\n color: endColor,\n offset: endVal,\n opacity: 1\n });\n }\n\n if (endVal === startVal) {\n stops[0].offset = 0;\n stops[1].offset = 100;\n } else {\n // normalize the offsets into percentages\n if (stops[stops.length - 1].offset !== 100) {\n for (const s of stops) {\n s.offset = ((s.offset - startVal) / (endVal - startVal)) * 100;\n }\n }\n }\n\n return stops;\n }\n}\n","import { ScaleType } from './types';\n\n/**\n * Based on the data, return an array with unique values.\n *\n * @export\n * @returns array\n */\nexport function getUniqueXDomainValues(results: any[]): any[] {\n const valueSet = new Set();\n for (const result of results) {\n for (const d of result.series) {\n valueSet.add(d.name);\n }\n }\n return Array.from(valueSet);\n}\n\n/**\n * Get the scaleType of enumerable of values.\n * @returns 'time', 'linear' or 'ordinal'\n */\nexport function getScaleType(values: any[], checkDateType: boolean = true): ScaleType {\n if (checkDateType) {\n const allDates = values.every(value => value instanceof Date);\n if (allDates) {\n return ScaleType.Time;\n }\n }\n\n const allNumbers = values.every(value => typeof value === 'number');\n if (allNumbers) {\n return ScaleType.Linear;\n }\n\n return ScaleType.Ordinal;\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n ViewEncapsulation,\n HostListener,\n ChangeDetectionStrategy,\n ContentChild,\n TemplateRef\n} from '@angular/core';\nimport { scaleLinear, scalePoint, scaleTime } from 'd3-scale';\nimport { curveLinear, CurveFactory } from 'd3-shape';\n\nimport { calculateViewDimensions } from '../common/view-dimensions.helper';\nimport { ColorHelper } from '../common/color.helper';\nimport { BaseChartComponent } from '../common/base-chart.component';\nimport { id } from '../utils/id';\nimport { getUniqueXDomainValues, getScaleType } from '../common/domain.helper';\nimport { ViewDimensions, LegendPosition, LegendOptions, ScaleType } from '../common/types';\nimport { isDate, isNumber } from '../utils/types';\nimport { Series, StringOrNumberOrDate } from '../models/chart-data.model';\n\n@Component({\n selector: 'ngx-charts-area-chart',\n template: `\n <ngx-charts-chart\n [view]=\"[width, height]\"\n [showLegend]=\"legend\"\n [legendOptions]=\"legendOptions\"\n [activeEntries]=\"activeEntries\"\n [animations]=\"animations\"\n (legendLabelClick)=\"onClick($event)\"\n (legendLabelActivate)=\"onActivate($event)\"\n (legendLabelDeactivate)=\"onDeactivate($event)\"\n >\n <svg:defs>\n <svg:clipPath [attr.id]=\"clipPathId\">\n <svg:rect\n [attr.width]=\"dims.width + 10\"\n [attr.height]=\"dims.height + 10\"\n [attr.transform]=\"'translate(-5, -5)'\"\n />\n </svg:clipPath>\n </svg:defs>\n <svg:g [attr.transform]=\"transform\" class=\"area-chart chart\">\n <svg:g\n ngx-charts-x-axis\n *ngIf=\"xAxis\"\n [xScale]=\"xScale\"\n [dims]=\"dims\"\n [showGridLines]=\"showGridLines\"\n [showLabel]=\"showXAxisLabel\"\n [labelText]=\"xAxisLabel\"\n [trimTicks]=\"trimXAxisTicks\"\n [rotateTicks]=\"rotateXAxisTicks\"\n [maxTickLength]=\"maxXAxisTickLength\"\n [tickFormatting]=\"xAxisTickFormatting\"\n [ticks]=\"xAxisTicks\"\n (dimensionsChanged)=\"updateXAxisHeight($event)\"\n ></svg:g>\n <svg:g\n ngx-charts-y-axis\n *ngIf=\"yAxis\"\n [yScale]=\"yScale\"\n [dims]=\"dims\"\n [showGridLines]=\"showGridLines\"\n [showLabel]=\"showYAxisLabel\"\n [labelText]=\"yAxisLabel\"\n [trimTicks]=\"trimYAxisTicks\"\n [maxTickLength]=\"maxYAxisTickLength\"\n [tickFormatting]=\"yAxisTickFormatting\"\n [ticks]=\"yAxisTicks\"\n (dimensionsChanged)=\"updateYAxisWidth($event)\"\n ></svg:g>\n <svg:g [attr.clip-path]=\"clipPath\">\n <svg:g *ngFor=\"let series of results; trackBy: trackBy\">\n <svg:g\n ngx-charts-area-series\n [xScale]=\"xScale\"\n [yScale]=\"yScale\"\n [baseValue]=\"baseValue\"\n [colors]=\"colors\"\n [data]=\"series\"\n [activeEntries]=\"activeEntries\"\n [scaleType]=\"scaleType\"\n [gradient]=\"gradient\"\n [curve]=\"curve\"\n [animations]=\"animations\"\n />\n </svg:g>\n\n <svg:g *ngIf=\"!tooltipDisabled\" (mouseleave)=\"hideCircles()\">\n <svg:g\n ngx-charts-tooltip-area\n [dims]=\"dims\"\n [xSet]=\"xSet\"\n [xScale]=\"xScale\"\n [yScale]=\"yScale\"\n [results]=\"results\"\n [colors]=\"colors\"\n [tooltipDisabled]=\"tooltipDisabled\"\n [tooltipTemplate]=\"seriesTooltipTemplate\"\n (hover)=\"updateHoveredVertical($event)\"\n />\n\n <svg:g *ngFor=\"let series of results\">\n <svg:g\n ngx-charts-circle-series\n [xScale]=\"xScale\"\n [yScale]=\"yScale\"\n [colors]=\"colors\"\n [activeEntries]=\"activeEntries\"\n [data]=\"series\"\n [scaleType]=\"scaleType\"\n [visibleValue]=\"hoveredVertical\"\n [tooltipDisabled]=\"tooltipDisabled\"\n [tooltipTemplate]=\"tooltipTemplate\"\n (select)=\"onClick($event, series)\"\n (activate)=\"onActivate($event)\"\n (deactivate)=\"onDeactivate($event)\"\n />\n </svg:g>\n </svg:g>\n </svg:g>\n </svg:g>\n <svg:g\n ngx-charts-timeline\n *ngIf=\"timeline && scaleType != 'ordinal'\"\n [attr.transform]=\"timelineTransform\"\n [results]=\"results\"\n [view]=\"[timelineWidth, height]\"\n [height]=\"timelineHeight\"\n [scheme]=\"scheme\"\n [customColors]=\"customColors\"\n [legend]=\"legend\"\n [scaleType]=\"scaleType\"\n (onDomainChange)=\"updateDomain($event)\"\n >\n <svg:g *ngFor=\"let series of results; trackBy: trackBy\">\n <svg:g\n ngx-charts-area-series\n [xScale]=\"timelineXScale\"\n [yScale]=\"timelineYScale\"\n [baseValue]=\"baseValue\"\n [colors]=\"colors\"\n [data]=\"series\"\n [scaleType]=\"scaleType\"\n [gradient]=\"gradient\"\n [curve]=\"curve\"\n [animations]=\"animations\"\n />\n </svg:g>\n </svg:g>\n </ngx-charts-chart>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: ['../common/base-chart.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class AreaChartComponent extends BaseChartComponent {\n @Input() legend: boolean = false;\n @Input() legendTitle: string = 'Legend';\n @Input() legendPosition: LegendPosition = LegendPosition.Right;\n @Input() xAxis: boolean = false;\n @Input() yAxis: boolean = false;\n @Input() baseValue: any = 'auto';\n @Input() autoScale: boolean = false;\n @Input() showXAxisLabel: boolean;\n @Input() showYAxisLabel: boolean;\n @Input() xAxisLabel: string;\n @Input() yAxisLabel: string;\n @Input() timeline: boolean = false;\n @Input() gradient: boolean;\n @Input() showGridLines: boolean = true;\n @Input() curve: CurveFactory = curveLinear;\n @Input() activeEntries: any[] = [];\n @Input() schemeType: ScaleType;\n @Input() trimXAxisTicks: boolean = true;\n @Input() trimYAxisTicks: boolean = true;\n @Input() rotateXAxisTicks: boolean = true;\n @Input() maxXAxisTickLength: number = 16;\n @Input() maxYAxisTickLength: number = 16;\n @Input() xAxisTickFormatting: any;\n @Input() yAxisTickFormatting: any;\n @Input() xAxisTicks: any[];\n @Input() yAxisTicks: any[];\n @Input() roundDomains: boolean = false;\n @Input() tooltipDisabled: boolean = false;\n @Input() xScaleMin: any;\n @Input() xScaleMax: any;\n @Input() yScaleMin: number;\n @Input() yScaleMax: number;\n\n @Output() activate: EventEmitter<any> = new EventEmitter();\n @Output() deactivate: EventEmitter<any> = new EventEmitter();\n\n @ContentChild('tooltipTemplate') tooltipTemplate: TemplateRef<any>;\n @ContentChild('seriesTooltipTemplate') seriesTooltipTemplate: TemplateRef<any>;\n\n dims: ViewDimensions;\n xSet: any;\n xDomain: any[];\n yDomain: [number, number];\n seriesDomain: string[];\n xScale: any;\n yScale: any;\n transform: string;\n colors: ColorHelper;\n clipPathId: string;\n clipPath: string;\n scaleType: ScaleType;\n series: Series;\n margin: number[] = [10, 20, 10, 20];\n hoveredVertical: any; // the value of the x axis that is hovered over\n xAxisHeight: number = 0;\n yAxisWidth: number = 0;\n filteredDomain: any;\n legendOptions: LegendOptions;\n\n timelineWidth: number;\n timelineHeight: number = 50;\n timelineXScale: any;\n timelineYScale: any;\n timelineXDomain: any[];\n timelineTransform: any;\n timelinePadding: number = 10;\n\n update(): void {\n super.update();\n\n this.dims = calculateViewDimensions({\n width: this.width,\n height: this.height,\n margins: this.margin,\n showXAxis: this.xAxis,\n showYAxis: this.yAxis,\n xAxisHeight: this.xAxisHeight,\n yAxisWidth: this.yAxisWidth,\n showXLabel: this.showXAxisLabel,\n showYLabel: this.showYAxisLabel,\n showLegend: this.legend,\n legendType: this.schemeType,\n legendPosition: this.legendPosition\n });\n\n if (this.timeline) {\n this.dims.height -= this.timelineHeight + this.margin[2] + this.timelinePadding;\n }\n\n this.xDomain = this.getXDomain();\n if (this.filteredDomain) {\n this.xDomain = this.filteredDomain;\n }\n\n this.yDomain = this.getYDomain();\n this.seriesDomain = this.getSeriesDomain();\n\n this.xScale = this.getXScale(this.xDomain, this.dims.width);\n this.yScale = this.getYScale(this.yDomain, this.dims.height);\n\n this.updateTimeline();\n\n this.setColors();\n this.legendOptions = this.getLegendOptions();\n\n this.transform = `translate(${this.dims.xOffset}, ${this.margin[0]})`;\n\n this.clipPathId = 'clip' + id().toString();\n this.clipPath = `url(#${this.clipPathId})`;\n }\n\n updateTimeline(): void {\n if (this.timeline) {\n this.timelineWidth = this.dims.width;\n this.timelineXDomain = this.getXDomain();\n this.timelineXScale = this.getXScale(this.timelineXDomain, this.timelineWidth);\n this.timelineYScale = this.getYScale(this.yDomain, this.timelineHeight);\n this.timelineTransform = `translate(${this.dims.xOffset}, ${-this.margin[2]})`;\n }\n }\n\n getXDomain(): any[] {\n let values = getUniqueXDomainValues(this.results);\n\n this.scaleType = getScaleType(values);\n let domain = [];\n\n if (this.scaleType === ScaleType.Linear) {\n values = values.map(v => Number(v));\n }\n\n let min;\n let max;\n if (this.scaleType === ScaleType.Time || this.scaleType === ScaleType.Linear) {\n min = this.xScaleMin ? this.xScaleMin : Math.min(...values);\n\n max = this.xScaleMax ? this.xScaleMax : Math.max(...values);\n }\n\n if (this.scaleType === ScaleType.Time) {\n domain = [new Date(min), new Date(max)];\n this.xSet = [...values].sort((a, b) => {\n const aDate = a.getTime();\n const bDate = b.getTime();\n if (aDate > bDate) return 1;\n if (bDate > aDate) return -1;\n return 0;\n });\n } else if (this.scaleType === ScaleType.Linear) {\n domain = [min, max];\n // Use compare function to sort numbers numerically\n this.xSet = [...values].sort((a, b) => a - b);\n } else {\n domain = values;\n this.xSet = values;\n }\n\n return domain;\n }\n\n getYDomain(): [number, number] {\n const domain = [];\n\n for (const results of this.results) {\n for (const d of results.series) {\n if (!domain.includes(d.value)) {\n domain.push(d.value);\n }\n }\n }\n\n const values = [...domain];\n if (!this.autoScale) {\n values.push(0);\n }\n if (this.baseValue !== 'auto') {\n values.push(this.baseValue);\n }\n\n const min = this.yScaleMin ? this.yScaleMin : Math.min(...values);\n\n const max = this.yScaleMax ? this.yScaleMax : Math.max(...values);\n\n return [min, max];\n }\n\n getSeriesDomain(): string[] {\n return this.results.map(d => d.name);\n }\n\n getXScale(domain, width: number): number {\n let scale;\n\n if (this.scaleType === ScaleType.Time) {\n scale = scaleTime();\n } else if (this.scaleType === ScaleType.Linear) {\n scale = scaleLinear();\n } else if (this.scaleType === ScaleType.Ordinal) {\n scale = scalePoint().padding(0.1);\n }\n\n scale.range([0, width]).domain(domain);\n\n return this.roundDomains ? scale.nice() : scale;\n }\n\n getYScale(domain, height: number): number {\n const scale = scaleLinear().range([height, 0]).domain(domain);\n return this.roundDomains ? scale.nice() : scale;\n }\n\n getScaleType(values): ScaleType {\n let date = true;\n let num = true;\n for (const value of values) {\n if (isDate(value)) {\n date = false;\n }\n if (isNumber(value)) {\n num = false;\n }\n }\n\n if (date) {\n return ScaleType.Time;\n }\n\n if (num) {\n return ScaleType.Linear;\n }\n\n return ScaleType.Ordinal;\n }\n\n updateDomain(domain): void {\n this.filteredDomain = domain;\n this.xDomain = this.filteredDomain;\n this.xScale = this.getXScale(this.xDomain, this.dims.width);\n }\n\n updateHoveredVertical(item): void {\n this.hoveredVertical = item.value;\n this.deactivateAll();\n }\n\n @HostListener('mouseleave')\n hideCircles(): void {\n this.hoveredVertical = null;\n this.deactivateAll();\n }\n\n onClick(data, series?: Series): void {\n if (series) {\n data.series = series.name;\n }\n\n this.select.emit(data);\n }\n\n trackBy(index: number, item: Series): StringOrNumberOrDate {\n return item.name;\n }\n\n setColors(): void {\n let domain;\n if (this.schemeType === ScaleType.Ordinal) {\n domain = this.seriesDomain;\n } else {\n domain = this.yDomain;\n }\n\n this.colors = new ColorHelper(this.scheme, this.schemeType, domain, this.customColors);\n }\n\n getLegendOptions(): LegendOptions {\n const opts: LegendOptions = {\n scaleType: this.schemeType as any,\n colors: undefined,\n domain: [],\n title: undefined,\n position: this.legendPosition\n };\n if (opts.scaleType === ScaleType.Ordinal) {\n opts.domain = this.seriesDomain;\n opts.colors = this.colors;\n opts.title = this.legendTitle;\n } else {\n opts.domain = this.yDomain;\n opts.colors = this.colors.scale;\n }\n return opts;\n }\n\n updateYAxisWidth({ width }: { width: number }): void {\n this.yAxisWidth = width;\n this.update();\n }\n\n updateXAxisHeight({ height }: { height: number }): void {\n this.xAxisHeight = height;\n this.update();\n }\n\n onActivate(item): void {\n const idx = this.activeEntries.findIndex(d => {\n return d.name === item.name && d.value === item.value;\n });\n if (idx > -1) {\n return;\n }\n\n this.activeEntries = [item, ...this.activeEntries];\n this.activate.emit({ value: item, entries: this.activeEntries });\n }\n\n onDeactivate(item): void {\n const idx = this.activeEntries.findIndex(d => {\n return d.name === item.name && d.value === item.value;\n });\n\n this.activeEntries.splice(idx, 1);\n this.activeEntries = [...this.activeEntries];\n\n this.deactivate.emit({ value: item, entries: this.activeEntries });\n }\n\n deactivateAll(): void {\n this.activeEntries = [...this.activeEntries];\n for (const entry of this.activeEntries) {\n this.deactivate.emit({ value: entry, entries: [] });\n }\n this.activeEntries = [];\n }\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n HostListener,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n ContentChild,\n TemplateRef\n} from '@angular/core';\nimport { scaleLinear, scalePoint, scaleTime } from 'd3-scale';\nimport { curveLinear } from 'd3-shape';\n\nimport { calculateViewDimensions } from '../common/view-dimensions.helper';\nimport { ColorHelper } from '../common/color.helper';\nimport { BaseChartComponent } from '../common/base-chart.component';\nimport { id } from '../utils/id';\nimport { getUniqueXDomainValues, getScaleType } from '../common/domain.helper';\nimport { ViewDimensions, LegendPosition, LegendOptions, ScaleType } from '../common/types';\nimport { Series } from '../models/chart-data.model';\n\n@Component({\n selector: 'ngx-charts-area-chart-normalized',\n template: `\n <ngx-charts-chart\n [view]=\"[width, height]\"\n [showLegend]=\"legend\"\n [legendOptions]=\"legendOptions\"\n [activeEntries]=\"activeEntries\"\n [animations]=\"animations\"\n (legendLabelClick)=\"onClick($event)\"\n (legendLabelActivate)=\"onActivate($event)\"\n (legendLabelDeactivate)=\"onDeactivate($event)\"\n >\n <svg:defs>\n <svg:clipPath [attr.id]=\"clipPathId\">\n <svg:rect\n [attr.width]=\"dims.width + 10\"\n [attr.height]=\"dims.height + 10\"\n [attr.transform]=\"'translate(-5, -5)'\"\n />\n </svg:clipPath>\n </svg:defs>\n <svg:g [attr.transform]=\"transform\" class=\"area-chart chart\">\n <svg:g\n ngx-charts-x-axis\n *ngIf=\"xAxis\"\n [xScale]=\"xScale\"\n [dims]=\"dims\"\n [showGridLines]=\"showGridLines\"\n [showLabel]=\"showXAxisLabel\"\n [labelText]=\"xAxisLabel\"\n [trimTicks]=\"trimXAxisTicks\"\n [rotateTicks]=\"rotateXAxisTicks\"\n [maxTickLength]=\"maxXAxisTickLength\"\n [tickFormatting]=\"xAxisTickFormatting\"\n [ticks]=\"xAxisTicks\"\n (dimensionsChanged)=\"updateXAxisHeight($event)\"\n ></svg:g>\n <svg:g\n ngx-charts-y-axis\n *ngIf=\"yAxis\"\n [yScale]=\"yScale\"\n [dims]=\"dims\"\n [showGridLines]=\"showGridLines\"\n [showLabel]=\"showYAxisLabel\"\n [labelText]=\"yAxisLabel\"\n [trimTicks]=\"trimYAxisTicks\"\n [maxTickLength]=\"maxYAxisTickLength\"\n [tickFormatting]=\"yAxisTickFormatting\"\n [ticks]=\"yAxisTicks\"\n (dimensionsChanged)=\"updateYAxisWidth($event)\"\n ></svg:g>\n <svg:g [attr.clip-path]=\"clipPath\">\n <svg:g *ngFor=\"let series of results; trackBy: trackBy\">\n <svg:g\n ngx-charts-area-series\n [xScale]=\"xScale\"\n [yScale]=\"yScale\"\n [colors]=\"colors\"\n [data]=\"series\"\n [scaleType]=\"scaleType\"\n [activeEntries]=\"activeEntries\"\n [gradient]=\"gradient\"\n normalized=\"true\"\n [curve]=\"curve\"\n [animations]=\"animations\"\n />\n </svg:g>\n\n <svg:g *ngIf=\"!tooltipDisabled\" (mouseleave)=\"hideCircles()\">\n <svg:g\n ngx-charts-tooltip-area\n [dims]=\"dims\"\n [xSet]=\"xSet\"\n [xScale]=\"xScale\"\n [yScale]=\"yScale\"\n [results]=\"results\"\n [colors]=\"colors\"\n [showPercentage]=\"true\"\n [tooltipDisabled]=\"tooltipDisabled\"\n [tooltipTemplate]=\"seriesTooltipTemplate\"\n (hover)=\"updateHoveredVertical($event)\"\n />\n\n <svg:g *ngFor=\"let series of results\">\n <svg:g\n ngx-charts-circle-series\n type=\"stacked\"\n [xScale]=\"xScale\"\n [yScale]=\"yScale\"\n [colors]=\"colors\"\n [activeEntries]=\"activeEntries\"\n [data]=\"series\"\n [scaleType]=\"scaleType\"\n [visibleValue]=\"hoveredVertical\"\n [tooltipDisabled]=\"tooltipDisabled\"\n [tooltipTemplate]=\"tooltipTemplate\"\n (select)=\"onClick($event, series)\"\n (activate)=\"onActivate($event)\"\n (deactivate)=\"onDeactivate($event)\"\n />\n </svg:g>\n </svg:g>\n </svg:g>\n </svg:g>\n <svg:g\n ngx-charts-timeline\n *ngIf=\"timeline && scaleType != 'ordinal'\"\n [attr.transform]=\"timelineTransform\"\n [results]=\"results\"\n [view]=\"[timelineWidth, height]\"\n [height]=\"timelineHeight\"\n [scheme]=\"scheme\"\n [customColors]=\"customColors\"\n [legend]=\"legend\"\n [scaleType]=\"scaleType\"\n (onDomainChange)=\"updateDomain($event)\"\n >\n <svg:g *ngFor=\"let series of results; trackBy: trackBy\">\n <svg:g\n ngx-charts-area-series\n [xScale]=\"timelineXScale\"\n [yScale]=\"timelineYScale\"\n [colors]=\"colors\"\n [data]=\"series\"\n [scaleType]=\"scaleType\"\n [gradient]=\"gradient\"\n normalized=\"true\"\n [curve]=\"curve\"\n [animations]=\"animations\"\n />\n </svg:g>\n </svg:g>\n </ngx-charts-chart>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: ['../common/base-chart.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class AreaChartNormalizedComponent extends BaseChartComponent {\n @Input() legend = false;\n @Input() legendTitle: string = 'Legend';\n @Input() legendPosition: LegendPosition = LegendPosition.Right;\n @Input() xAxis: boolean;\n @Input() yAxis: boolean;\n @Input() showXAxisLabel: boolean = false;\n @Input() showYAxisLabel: boolean = false;\n @Input() xAxisLabel: string;\n @Input() yAxisLabel: string;\n @Input() timeline;\n @Input() gradient;\n @Input() showGridLines: boolean = true;\n @Input() curve: any = curveLinear;\n @Input() activeEntries: any[] = [];\n @Input() schemeType: ScaleType;\n @Input() trimXAxisTicks: boolean = true;\n @Input() trimYAxisTicks: boolean = true;\n @Input() rotateXAxisTicks: boolean = true;\n @Input() maxXAxisTickLength: number = 16;\n @Input() maxYAxisTickLength: number = 16;\n @Input() xAxisTickFormatting: any;\n @Input() yAxisTickFormatting: any;\n @Input() xAxisTicks: any[];\n @Input() yAxisTicks: any[];\n @Input() roundDomains: boolean = false;\n @Input() tooltipDisabled: boolean = false;\n\n @Output() activate: EventEmitter<any> = new EventEmitter();\n @Output() deactivate: EventEmitter<any> = new EventEmitter();\n\n @ContentChild('tooltipTemplate') tooltipTemplate: TemplateRef<any>;\n @ContentChild('seriesTooltipTemplate') seriesTooltipTemplate: TemplateRef<any>;\n\n dims: ViewDimensions;\n scaleType: ScaleType;\n xDomain: any[];\n xSet: any[]; // the set of all values on the X Axis\n yDomain: [number, number] = [0, 100];\n seriesDomain: any;\n xScale: any;\n yScale: any;\n transform: string;\n clipPathId: string;\n clipPath: string;\n colors: ColorHelper;\n margin: number[] = [10, 20, 10, 20];\n tooltipAreas: any[];\n hoveredVertical: any; // the value of the x axis that is hovered over\n xAxisHeight: number = 0;\n yAxisWidth: number = 0;\n filteredDomain: any;\n legendOptions: LegendOptions;\n\n timelineWidth: any;\n timelineHeight: number = 50;\n timelineXScale: any;\n timelineYScale: any;\n timelineXDomain: any;\n timelineTransform: any;\n timelinePadding: number = 10;\n\n update(): void {\n super.update();\n\n this.dims = calculateViewDimensions({\n width: this.width,\n height: this.height,\n margins: this.margin,\n showXAxis: this.xAxis,\n showYAxis: this.yAxis,\n xAxisHeight: this.xAxisHeight,\n yAxisWidth: this.yAxisWidth,\n showXLabel: this.showXAxisLabel,\n showYLabel: this.showYAxisLabel,\n showLegend: this.legend,\n legendType: this.schemeType,\n legendPosition: this.legendPosition\n });\n\n if (this.timeline) {\n this.dims.height -= this.timelineHeight + this.margin[2] + this.timelinePadding;\n }\n\n this.xDomain = this.getXDomain();\n if (this.filteredDomain) {\n this.xDomain = this.filteredDomain;\n }\n\n this.seriesDomain = this.getSeriesDomain();\n\n this.xScale = this.getXScale(this.xDomain, this.dims.width);\n this.yScale = this.getYScale(this.yDomain, this.dims.height);\n\n for (let i = 0; i < this.xSet.length; i++) {\n const val = this.xSet[i];\n let d0 = 0;\n\n let total = 0;\n for (const group of this.results) {\n const d = group.series.find(item => {\n let a = item.name;\n let b = val;\n if (this.scaleType === ScaleType.Time) {\n a = a.valueOf();\n b = b.valueOf();\n }\n return a === b;\n });\n if (d) {\n total += d.value;\n }\n }\n\n for (const group of this.results) {\n let d = group.series.find(item => {\n let a = item.name;\n let b = val;\n if (this.scaleType === ScaleType.Time) {\n a = a.valueOf();\n b = b.valueOf();\n }\n return a === b;\n });\n\n if (d) {\n d.d0 = d0;\n d.d1 = d0 + d.value;\n d0 += d.value;\n } else {\n d = {\n name: val,\n value: 0,\n d0,\n d1: d0\n };\n group.series.push(d);\n }\n\n if (total > 0) {\n d.d0 = (d.d0 * 100) / total;\n d.d1 = (d.d1 * 100) / total;\n } else {\n d.d0 = 0;\n d.d1 = 0;\n }\n }\n }\n\n this.updateTimeline();\n\n this.setColors();\n this.legendOptions = this.getLegendOptions();\n\n this.transform = `translate(${this.dims.xOffset} , ${this.margin[0]})`;\n\n this.clipPathId = 'clip' + id().toString();\n this.clipPath = `url(#${this.clipPathId})`;\n }\n\n updateTimeline(): void {\n if (this.timeline) {\n this.timelineWidth = this.dims.width;\n this.timelineXDomain = this.getXDomain();\n this.timelineXScale = this.getXScale(this.timelineXDomain, this.timelineWidth);\n this.timelineYScale = this.getYScale(this.yDomain, this.timelineHeight);\n this.timelineTransform = `translate(${this.dims.xOffset}, ${-this.margin[2]})`;\n }\n }\n\n getXDomain(): any[] {\n let values = getUniqueXDomainValues(this.results);\n\n this.scaleType = getScaleType(values);\n let domain = [];\n\n if (this.scaleType === ScaleType.Time) {\n const min = Math.min(...values);\n const max = Math.max(...values);\n domain = [new Date(min), new Date(max)];\n this.xSet = [...values].sort((a, b) => {\n const aDate = a.getTime();\n const bDate = b.getTime();\n if (aDate > bDate) return 1;\n if (bDate > aDate) return -1;\n return 0;\n });\n } else if (this.scaleType === ScaleType.Linear) {\n values = values.map(v => Number(v));\n const min = Math.min(...values);\n const max = Math.max(...values);\n domain = [min, max];\n // Use compare function to sort numbers numerically\n this.xSet = [...values].sort((a, b) => a - b);\n } else {\n domain = values;\n this.xSet = values;\n }\n\n return domain;\n }\n\n getSeriesDomain(): string[] {\n return this.results.map(d => d.name);\n }\n\n getXScale(domain, width: number): any {\n let scale;\n\n if (this.scaleType === ScaleType.Time) {\n scale = scaleTime();\n } else if (this.scaleType === ScaleType.Linear) {\n scale = scaleLinear();\n } else if (this.scaleType === ScaleType.Ordinal) {\n scale = scalePoint().padding(0.1);\n }\n\n scale.range([0, width]).domain(domain);\n\n return this.roundDomains ? scale.nice() : scale;\n }\n\n getYScale(domain, height: number): any {\n const scale = scaleLinear().range([height, 0]).domain(domain);\n return this.roundDomains ? scale.nice() : scale;\n }\n\n updateDomain(domain): void {\n this.filteredDomain = domain;\n this.xDomain = this.filteredDomain;\n this.xScale = this.getXScale(this.xDomain, this.dims.width);\n }\n\n updateHoveredVertical(item): void {\n this.hoveredVertical = item.value;\n this.deactivateAll();\n }\n\n @HostListener('mouseleave')\n hideCircles(): void {\n this.hoveredVertical = null;\n this.deactivateAll();\n }\n\n onClick(data, series?): void {\n if (series) {\n data.series = series.name;\n }\n\n this.select.emit(data);\n }\n\n trackBy(index: number, item: Series): any {\n return item.name;\n }\n\n setColors(): void {\n let domain;\n if (this.schemeType === ScaleType.Ordinal) {\n domain = this.seriesDomain;\n } else {\n domain = this.yDomain;\n }\n\n this.colors = new ColorHelper(this.scheme, this.schemeType, domain, this.customColors);\n }\n\n getLegendOptions(): LegendOptions {\n const opts: LegendOptions = {\n scaleType: this.schemeType as any,\n colors: undefined,\n domain: [],\n title: undefined,\n position: this.legendPosition\n };\n if (opts.scaleType === ScaleType.Ordinal) {\n opts.domain = this.seriesDomain;\n opts.colors = this.colors;\n opts.title = this.legendTitle;\n } else {\n opts.domain = this.yDomain;\n opts.colors = this.colors.scale;\n }\n return opts;\n }\n\n updateYAxisWidth({ width }: { width: number }): void {\n this.yAxisWidth = width;\n this.update();\n }\n\n updateXAxisHeight({ height }: { height: number }): void {\n this.xAxisHeight = height;\n this.update();\n }\n\n onActivate(item): void {\n const idx = this.activeEntries.findIndex(d => {\n return d.name === item.name && d.value === item.value;\n });\n if (idx > -1) {\n return;\n }\n\n this.activeEntries = [item, ...this.activeEntries];\n this.activate.emit({ value: item, entries: this.activeEntries });\n }\n\n onDeactivate(item): void {\n const idx = this.activeEntries.findIndex(d => {\n return d.name === item.name && d.value === item.value;\n });\n\n this.activeEntries.splice(idx, 1);\n this.activeEntries = [...this.activeEntries];\n\n this.deactivate.emit({ value: item, entries: this.activeEntries });\n }\n\n deactivateAll(): void {\n this.activeEntries = [...this.activeEntries];\n for (const entry of this.activeEntries) {\n this.deactivate.emit({ value: entry, entries: [] });\n }\n this.activeEntries = [];\n }\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n ViewEncapsulation,\n HostListener,\n ChangeDetectionStrategy,\n ContentChild,\n TemplateRef\n} from '@angular/core';\nimport { scaleLinear, scalePoint, scaleTime } from 'd3-scale';\nimport { curveLinear } from 'd3-shape';\n\nimport { calculateViewDimensions } from '../common/view-dimensions.helper';\nimport { ColorHelper } from '../common/color.helper';\nimport { BaseChartComponent } from '../common/base-chart.component';\nimport { id } from '../utils/id';\nimport { getUniqueXDomainValues, getScaleType } from '../common/domain.helper';\nimport { ViewDimensions, LegendPosition, ScaleType, LegendOptions } from '../common/types';\n\n@Component({\n selector: 'ngx-charts-area-chart-stacked',\n template: `\n <ngx-charts-chart\n [view]=\"[width, height]\"\n [showLegend]=\"legend\"\n [legendOptions]=\"legendOptions\"\n [activeEntries]=\"activeEntries\"\n [animations]=\"animations\"\n (legendLabelClick)=\"onClick($event)\"\n (legendLabelActivate)=\"onActivate($event)\"\n (legendLabelDeactivate)=\"onDeactivate($event)\"\n >\n <svg:defs>\n <svg:clipPath [attr.id]=\"clipPathId\">\n <svg:rect\n [attr.width]=\"dims.width + 10\"\n [attr.height]=\"dims.height + 10\"\n [attr.transform]=\"'translate(-5, -5)'\"\n />\n </svg:clipPath>\n </svg:defs>\n <svg:g [attr.transform]=\"transform\" class=\"area-chart chart\">\n <svg:g\n ngx-charts-x-axis\n *ngIf=\"xAxis\"\n [xScale]=\"xScale\"\n [dims]=\"dims\"\n [showGridLines]=\"showGridLines\"\n [showLabel]=\"showXAxisLabel\"\n [labelText]=\"xAxisLabel\"\n [trimTicks]=\"trimXAxisTicks\"\n [rotateTicks]=\"rotateXAxisTicks\"\n [maxTickLength]=\"maxXAxisTickLength\"\n [tickFormatting]=\"xAxisTickFormatting\"\n [ticks]=\"xAxisTicks\"\n (dimensionsChanged)=\"updateXAxisHeight($event)\"\n ></svg:g>\n <svg:g\n ngx-charts-y-axis\n *ngIf=\"yAxis\"\n [yScale]=\"yScale\"\n [dims]=\"dims\"\n [showGridLines]=\"showGridLines\"\n [showLabel]=\"showYAxisLabel\"\n [labelText]=\"yAxisLabel\"\n [trimTicks]=\"trimYAxisTicks\"\n [maxTickLength]=\"maxYAxisTickLength\"\n [tickFormatting]=\"yAxisTickFormatting\"\n [ticks]=\"yAxisTicks\"\n (dimensionsChanged)=\"updateYAxisWidth($event)\"\n ></svg:g>\n <svg:g [attr.clip-path]=\"clipPath\">\n <svg:g *ngFor=\"let series of results; trackBy: trackBy\">\n <svg:g\n ngx-charts-area-series\n [xScale]=\"xScale\"\n [yScale]=\"yScale\"\n [colors]=\"colors\"\n [data]=\"series\"\n [scaleType]=\"scaleType\"\n [gradient]=\"gradient\"\n [activeEntries]=\"activeEntries\"\n stacked=\"true\"\n [curve]=\"curve\"\n [animations]=\"animations\"\n />\n </svg:g>\n\n <svg:g *ngIf=\"!tooltipDisabled\" (mouseleave)=\"hideCircles()\">\n <svg:g\n ngx-charts-tooltip-area\n [dims]=\"dims\"\n [xSet]=\"xSet\"\n [xScale]=\"xScale\"\n [yScale]=\"yScale\"\n [results]=\"results\"\n [colors]=\"colors\"\n [tooltipDisabled]=\"tooltipDisabled\"\n [tooltipTemplate]=\"seriesTooltipTemplate\"\n (hover)=\"updateHoveredVertical($event)\"\n />\n\n <svg:g *ngFor=\"let series of results; trackBy: trackBy\">\n <svg:g\n ngx-charts-circle-series\n type=\"stacked\"\n [xScale]=\"xScale\"\n [yScale]=\"yScale\"\n [colors]=\"colors\"\n [activeEntries]=\"activeEntries\"\n [data]=\"series\"\n [scaleType]=\"scaleType\"\n [visibleValue]=\"hoveredVertical\"\n [tooltipDisabled]=\"tooltipDisabled\"\n [tooltipTemplate]=\"tooltipTemplate\"\n (select)=\"onClick($event, series)\"\n (activate)=\"onActivate($event)\"\n (deactivate)=\"onDeactivate($event)\"\n />\n </svg:g>\n </svg:g>\n </svg:g>\n </svg:g>\n <svg:g\n ngx-charts-timeline\n *ngIf=\"timeline && scaleType != 'ordinal'\"\n [attr.transform]=\"timelineTransform\"\n [results]=\"results\"\n [view]=\"[timelineWidth, height]\"\n [height]=\"timelineHeight\"\n [scheme]=\"scheme\"\n [customColors]=\"customColors\"\n [legend]=\"legend\"\n [scaleType]=\"scaleType\"\n (onDomainChange)=\"updateDomain($event)\"\n >\n <svg:g *ngFor=\"let series of results; trackBy: trackBy\">\n <svg:g\n ngx-charts-area-series\n [xScale]=\"timelineXScale\"\n [yScale]=\"timelineYScale\"\n [colors]=\"colors\"\n [data]=\"series\"\n [scaleType]=\"scaleType\"\n [gradient]=\"gradient\"\n stacked=\"true\"\n [curve]=\"curve\"\n [animations]=\"animations\"\n />\n </svg:g>\n </svg:g>\n </ngx-charts-chart>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: ['../common/base-chart.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class AreaChartStackedComponent extends BaseChartComponent {\n @Input() legend: boolean = false;\n @Input() legendTitle: string = 'Legend';\n @Input() legendPosition: LegendPosition = LegendPosition.Right;\n @Input() xAxis: boolean = false;\n @Input() yAxis: boolean = false;\n @Input() showXAxisLabel: boolean;\n @Input() showYAxisLabel: boolean;\n @Input() xAxisLabel: string;\n @Input() yAxisLabel: string;\n @Input() timeline: boolean = false;\n @Input() gradient: boolean;\n @Input() showGridLines: boolean = true;\n @Input() curve: any = curveLinear;\n @Input() activeEntries: any[] = [];\n @Input() schemeType: ScaleType;\n @Input() trimXAxisTicks: boolean = true;\n @Input() trimYAxisTicks: boolean = true;\n @Input() rotateXAxisTicks: boolean = true;\n @Input() maxXAxisTickLength: number = 16;\n @Input() maxYAxisTickLength: number = 16;\n @Input() xAxisTickFormatting: any;\n @Input() yAxisTickFormatting: any;\n @Input() xAxisTicks: any[];\n @Input() yAxisTicks: any[];\n @Input() roundDomains: boolean = false;\n @Input() tooltipDisabled: boolean = false;\n @Input() xScaleMin: any;\n @Input() xScaleMax: any;\n @Input() yScaleMin: number;\n @Input() yScaleMax: number;\n\n @Output() activate: EventEmitter<any> = new EventEmitter();\n @Output() deactivate: EventEmitter<any> = new EventEmitter();\n\n @ContentChild('tooltipTemplate') tooltipTemplate: TemplateRef<any>;\n @ContentChild('seriesTooltipTemplate') seriesTooltipTemplate: TemplateRef<any>;\n\n dims: ViewDimensions;\n scaleType: ScaleType;\n xDomain: any[];\n xSet: any[]; // the set of all values on the X Axis\n yDomain: [number, number];\n seriesDomain: any;\n xScale: any;\n yScale: any;\n transform: string;\n clipPathId: string;\n clipPath: string;\n colors: ColorHelper;\n margin: number[] = [10, 20, 10, 20];\n hoveredVertical: any; // the value of the x axis that is hovered over\n xAxisHeight: number = 0;\n yAxisWidth: number = 0;\n filteredDomain: any;\n legendOptions: any;\n\n timelineWidth: number;\n timelineHeight: number = 50;\n timelineXScale: any;\n timelineYScale: any;\n timelineXDomain: any;\n timelineTransform: any;\n timelinePadding: number = 10;\n\n update(): void {\n super.update();\n\n this.dims = calculateViewDimensions({\n width: this.width,\n height: this.height,\n margins: this.margin,\n showXAxis: this.xAxis,\n showYAxis: this.yAxis,\n xAxisHeight: this.xAxisHeight,\n yAxisWidth: this.yAxisWidth,\n showXLabel: this.showXAxisLabel,\n showYLabel: this.showYAxisLabel,\n showLegend: this.legend,\n legendType: this.schemeType,\n legendPosition: this.legendPosition\n });\n\n if (this.timeline) {\n this.dims.height -= this.timelineHeight + this.margin[2] + this.timelinePadding;\n }\n\n this.xDomain = this.getXDomain();\n if (this.filteredDomain) {\n this.xDomain = this.filteredDomain;\n }\n\n this.yDomain = this.getYDomain();\n this.seriesDomain = this.getSeriesDomain();\n\n this.xScale = this.getXScale(this.xDomain, this.dims.width);\n this.yScale = this.getYScale(this.yDomain, this.dims.height);\n\n for (let i = 0; i < this.xSet.length; i++) {\n const val = this.xSet[i];\n let d0 = 0;\n for (const group of this.results) {\n let d = group.series.find(item => {\n let a = item.name;\n let b = val;\n if (this.scaleType === ScaleType.Time) {\n a = a.valueOf();\n b = b.valueOf();\n }\n return a === b;\n });\n\n if (d) {\n d.d0 = d0;\n d.d1 = d0 + d.value;\n d0 += d.value;\n } else {\n d = {\n name: val,\n value: 0,\n d0,\n d1: d0\n };\n group.series.push(d);\n }\n }\n }\n\n this.updateTimeline();\n\n this.setColors();\n this.legendOptions = this.getLegendOptions();\n\n this.transform = `translate(${this.dims.xOffset} , ${this.margin[0]})`;\n\n this.clipPathId = 'clip' + id().toString();\n this.clipPath = `url(#${this.clipPathId})`;\n }\n\n updateTimeline(): void {\n if (this.timeline) {\n this.timelineWidth = this.dims.width;\n this.timelineXDomain = this.getXDomain();\n this.timelineXScale = this.getXScale(this.timelineXDomain, this.timelineWidth);\n this.timelineYScale = this.getYScale(this.yDomain, this.timelineHeight);\n this.timelineTransform = `translate(${this.dims.xOffset}, ${-this.margin[2]})`;\n }\n }\n\n getXDomain(): any[] {\n let values = getUniqueXDomainValues(this.results);\n\n this.scaleType = getScaleType(values);\n let domain = [];\n\n if (this.scaleType === ScaleType.Linear) {\n values = values.map(v => Number(v));\n }\n\n let min;\n let max;\n if (this.scaleType === ScaleType.Time || this.scaleType === ScaleType.Linear) {\n min = this.xScaleMin ? this.xScaleMin : Math.min(...values);\n\n max = this.xScaleMax ? this.xScaleMax : Math.max(...values);\n }\n\n if (this.scaleType === ScaleType.Time) {\n domain = [new Date(min), new Date(max)];\n this.xSet = [...values].sort((a, b) => {\n const aDate = a.getTime();\n const bDate = b.getTime();\n if (aDate > bDate) return 1;\n if (bDate > aDate) return -1;\n return 0;\n });\n } else if (this.scaleType === ScaleType.Linear) {\n domain = [min, max];\n // Use compare function to sort numbers numerically\n this.xSet = [...values].sort((a, b) => a - b);\n } else {\n domain = values;\n this.xSet = values;\n }\n\n return domain;\n }\n\n getYDomain(): [number, number] {\n const domain = [];\n\n for (let i = 0; i < this.xSet.length; i++) {\n const val = this.xSet[i];\n let sum = 0;\n for (const group of this.results) {\n const d = group.series.find(item => {\n let a = item.name;\n let b = val;\n if (this.scaleType === ScaleType.Time) {\n a = a.valueOf();\n b = b.valueOf();\n }\n return a === b;\n });\n\n if (d) {\n sum += d.value;\n }\n }\n\n domain.push(sum);\n }\n\n const min = this.yScaleMin ? this.yScaleMin : Math.min(0, ...domain);\n\n const max = this.yScaleMax ? this.yScaleMax : Math.max(...domain);\n return [min, max];\n }\n\n getSeriesDomain(): string[] {\n return this.results.map(d => d.name);\n }\n\n getXScale(domain, width: number): any {\n let scale;\n\n if (this.scaleType === ScaleType.Time) {\n scale = scaleTime();\n } else if (this.scaleType === ScaleType.Linear) {\n scale = scaleLinear();\n } else if (this.scaleType === ScaleType.Ordinal) {\n scale = scalePoint().padding(0.1);\n }\n\n scale.range([0, width]).domain(domain);\n\n return this.roundDomains ? scale.nice() : scale;\n }\n\n getYScale(domain, height: number): any {\n const scale = scaleLinear().range([height, 0]).domain(domain);\n return this.roundDomains ? scale.nice() : scale;\n }\n\n updateDomain(domain): void {\n this.filteredDomain = domain;\n this.xDomain = this.filteredDomain;\n this.xScale = this.getXScale(this.xDomain, this.dims.width);\n }\n\n updateHoveredVertical(item) {\n this.hoveredVertical = item.value;\n this.deactivateAll();\n }\n\n @HostListener('mouseleave')\n hideCircles(): void {\n this.hoveredVertical = null;\n this.deactivateAll();\n }\n\n onClick(data, series?): void {\n if (series) {\n data.series = series.name;\n }\n\n this.select.emit(data);\n }\n\n trackBy(index, item): string {\n return item.name;\n }\n\n setColors(): void {\n let domain;\n if (this.schemeType === ScaleType.Ordinal) {\n domain = this.seriesDomain;\n } else {\n domain = this.yDomain;\n }\n\n this.colors = new ColorHelper(this.scheme, this.schemeType, domain, this.customColors);\n }\n\n getLegendOptions(): LegendOptions {\n const opts = {\n scaleType: this.schemeType as any,\n colors: undefined,\n domain: [],\n title: undefined,\n position: this.legendPosition\n };\n if (opts.scaleType === ScaleType.Ordinal) {\n opts.domain = this.seriesDomain;\n opts.colors = this.colors;\n opts.title = this.legendTitle;\n } else {\n opts.domain = this.yDomain;\n opts.colors = this.colors.scale;\n }\n return opts;\n }\n\n updateYAxisWidth({ width }: { width: number }): void {\n this.yAxisWidth = width;\n this.update();\n }\n\n updateXAxisHeight({ height }: { height: number }): void {\n this.xAxisHeight = height;\n this.update();\n }\n\n onActivate(item): void {\n const idx = this.activeEntries.findIndex(d => {\n return d.name === item.name && d.value === item.value;\n });\n if (idx > -1) {\n return;\n }\n\n this.activeEntries = [item, ...this.activeEntries];\n this.activate.emit({ value: item, entries: this.activeEntries });\n }\n\n onDeactivate(item): void {\n const idx = this.activeEntries.findIndex(d => {\n return d.name === item.name && d.value === item.value;\n });\n\n this.activeEntries.splice(idx, 1);\n this.activeEntries = [...this.activeEntries];\n\n this.deactivate.emit({ value: item, entries: this.activeEntries });\n }\n\n deactivateAll() {\n this.activeEntries = [...this.activeEntries];\n for (const entry of this.activeEntries) {\n this.deactivate.emit({ value: entry, entries: [] });\n }\n this.activeEntries = [];\n }\n}\n","export function sortLinear(data, property: string, direction = 'asc'): any[] {\n return data.sort((a, b) => {\n if (direction === 'asc') {\n return a[property] - b[property];\n } else {\n return b[property] - a[property];\n }\n });\n}\n\nexport function sortByDomain(data, property: string, direction = 'asc', domain): any[] {\n return data.sort((a, b) => {\n const aVal = a[property];\n const bVal = b[property];\n\n const aIdx = domain.indexOf(aVal);\n const bIdx = domain.indexOf(bVal);\n\n if (direction === 'asc') {\n return aIdx - bIdx;\n } else {\n return bIdx - aIdx;\n }\n });\n}\n\nexport function sortByTime(data, property: string, direction = 'asc'): any[] {\n return data.sort((a, b) => {\n const aDate = a[property].getTime();\n const bDate = b[property].getTime();\n\n if (direction === 'asc') {\n if (aDate > bDate) return 1;\n if (bDate > aDate) return -1;\n return 0;\n } else {\n if (aDate > bDate) return -1;\n if (bDate > aDate) return 1;\n return 0;\n }\n });\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnChanges,\n SimpleChanges,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { area } from 'd3-shape';\nimport { ColorHelper } from '../common/color.helper';\nimport { Gradient, ScaleType } from '../common/types';\nimport { AreaChartSeries } from '../models/chart-data.model';\nimport { sortLinear, sortByTime, sortByDomain } from '../utils/sort';\n\n@Component({\n selector: 'g[ngx-charts-area-series]',\n template: `\n <svg:g\n ngx-charts-area\n class=\"area-series\"\n [data]=\"data\"\n [path]=\"path\"\n [fill]=\"colors.getColor(data.name)\"\n [stops]=\"gradientStops\"\n [startingPath]=\"startingPath\"\n [opacity]=\"opacity\"\n [gradient]=\"gradient || hasGradient\"\n [animations]=\"animations\"\n [class.active]=\"isActive(data)\"\n [class.inactive]=\"isInactive(data)\"\n />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AreaSeriesComponent implements OnChanges {\n @Input() data: AreaChartSeries;\n @Input() xScale: any;\n @Input() yScale: any;\n @Input() baseValue: any = 'auto';\n @Input() colors: ColorHelper;\n @Input() scaleType: ScaleType;\n @Input() stacked: boolean = false;\n @Input() normalized: boolean = false;\n @Input() gradient: boolean;\n @Input() curve: any;\n @Input() activeEntries: any[];\n @Input() animations: boolean = true;\n\n @Output() select = new EventEmitter();\n\n opacity: number;\n path: string;\n startingPath: string;\n\n hasGradient: boolean;\n gradientStops: Gradient[];\n\n ngOnChanges(changes: SimpleChanges): void {\n this.update();\n }\n\n update(): void {\n this.updateGradient();\n\n let currentArea;\n let startingArea;\n\n const xProperty = d => {\n const label = d.name;\n return this.xScale(label);\n };\n\n if (this.stacked || this.normalized) {\n currentArea = area<any>()\n .x(xProperty)\n .y0((d, i) => this.yScale(d.d0))\n .y1((d, i) => this.yScale(d.d1));\n\n startingArea = area<any>()\n .x(xProperty)\n .y0(d => this.yScale.range()[0])\n .y1(d => this.yScale.range()[0]);\n } else {\n currentArea = area<any>()\n .x(xProperty)\n .y0(() => (this.baseValue === 'auto' ? this.yScale.range()[0] : this.yScale(this.baseValue)))\n .y1(d => this.yScale(d.value));\n\n startingArea = area<any>()\n .x(xProperty)\n .y0(d => (this.baseValue === 'auto' ? this.yScale.range()[0] : this.yScale(this.baseValue)))\n .y1(d => (this.baseValue === 'auto' ? this.yScale.range()[0] : this.yScale(this.baseValue)));\n }\n\n currentArea.curve(this.curve);\n startingArea.curve(this.curve);\n\n this.opacity = 0.8;\n\n let data = this.data.series;\n if (this.scaleType === ScaleType.Linear) {\n data = sortLinear(data, 'name');\n } else if (this.scaleType === ScaleType.Time) {\n data = sortByTime(data, 'name');\n } else {\n data = sortByDomain(data, 'name', 'asc', this.xScale.domain());\n }\n\n this.path = currentArea(data);\n this.startingPath = startingArea(data);\n }\n\n updateGradient() {\n if (this.colors.scaleType === ScaleType.Linear) {\n this.hasGradient = true;\n if (this.stacked || this.normalized) {\n const d0values = this.data.series.map(d => d.d0);\n const d1values = this.data.series.map(d => d.d1);\n const max = Math.max(...d1values);\n const min = Math.min(...d0values);\n this.gradientStops = this.colors.getLinearGradientStops(max, min);\n } else {\n const values = this.data.series.map(d => d.value);\n const max = Math.max(...values);\n this.gradientStops = this.colors.getLinearGradientStops(max);\n }\n } else {\n this.hasGradient = false;\n this.gradientStops = undefined;\n }\n }\n\n isActive(entry): boolean {\n if (!this.activeEntries) return false;\n const item = this.activeEntries.find(d => {\n return entry.name === d.name;\n });\n return item !== undefined;\n }\n\n isInactive(entry): boolean {\n if (!this.activeEntries || this.activeEntries.length === 0) return false;\n const item = this.activeEntries.find(d => {\n return entry.name === d.name;\n });\n return item === undefined;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { AreaChartComponent } from './area-chart.component';\nimport { AreaChartNormalizedComponent } from './area-chart-normalized.component';\nimport { AreaChartStackedComponent } from './area-chart-stacked.component';\nimport { AreaSeriesComponent } from './area-series.component';\nimport { ChartCommonModule } from '../common/chart-common.module';\n\n@NgModule({\n imports: [ChartCommonModule],\n declarations: [AreaChartComponent, AreaChartNormalizedComponent, AreaChartStackedComponent, AreaSeriesComponent],\n exports: [AreaChartComponent, AreaChartNormalizedComponent, AreaChartStackedComponent, AreaSeriesComponent]\n})\nexport class AreaChartModule {}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n HostListener,\n ElementRef,\n SimpleChanges,\n OnChanges,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { select } from 'd3-selection';\nimport { roundedRect } from '../common/shape.helper';\nimport { id } from '../utils/id';\nimport { Gradient } from '../common/types';\nimport { DataItem } from '../models/chart-data.model';\n\n/* tslint:disable-next-line */\nimport { transition } from 'd3-transition';\n\nenum BarOrientation {\n Vertical = 'vertical',\n Horizontal = 'horizontal'\n}\n\n@Component({\n selector: 'g[ngx-charts-bar]',\n template: `\n <svg:defs *ngIf=\"hasGradient\">\n <svg:g ngx-charts-svg-linear-gradient [orientation]=\"orientation\" [name]=\"gradientId\" [stops]=\"gradientStops\" />\n </svg:defs>\n <svg:path\n class=\"bar\"\n stroke=\"none\"\n role=\"img\"\n tabIndex=\"-1\"\n [class.active]=\"isActive\"\n [class.hidden]=\"hideBar\"\n [attr.d]=\"path\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.fill]=\"hasGradient ? gradientFill : fill\"\n (click)=\"select.emit(data)\"\n />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class BarComponent implements OnChanges {\n @Input() fill: string;\n @Input() data: DataItem;\n @Input() width: number;\n @Input() height: number;\n @Input() x: number;\n @Input() y: number;\n @Input() orientation: BarOrientation;\n @Input() roundEdges: boolean = true;\n @Input() gradient: boolean = false;\n @Input() offset: number = 0;\n @Input() isActive: boolean = false;\n @Input() stops: Gradient[];\n @Input() animations: boolean = true;\n @Input() ariaLabel: string;\n @Input() noBarWhenZero: boolean = true;\n\n @Output() select: EventEmitter<DataItem> = new EventEmitter();\n @Output() activate: EventEmitter<DataItem> = new EventEmitter();\n @Output() deactivate: EventEmitter<DataItem> = new EventEmitter();\n\n element: HTMLElement;\n path: string;\n gradientId: string;\n gradientFill: string;\n startOpacity: number;\n gradientStops: Gradient[];\n hasGradient: boolean = false;\n hideBar: boolean = false;\n\n constructor(element: ElementRef) {\n this.element = element.nativeElement;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.roundEdges) {\n this.loadAnimation();\n }\n this.update();\n }\n\n update(): void {\n this.gradientId = 'grad' + id().toString();\n this.gradientFill = `url(#${this.gradientId})`;\n\n if (this.gradient || this.stops) {\n this.gradientStops = this.getGradient();\n this.hasGradient = true;\n } else {\n this.hasGradient = false;\n }\n\n this.updatePathEl();\n this.checkToHideBar();\n }\n\n loadAnimation(): void {\n this.path = this.getStartingPath();\n setTimeout(this.update.bind(this), 100);\n }\n\n updatePathEl(): void {\n const node = select(this.element).select('.bar');\n const path = this.getPath();\n if (this.animations) {\n node.transition().duration(500).attr('d', path);\n } else {\n node.attr('d', path);\n }\n }\n\n getGradient(): Gradient[] {\n if (this.stops) {\n return this.stops;\n }\n\n return [\n {\n offset: 0,\n color: this.fill,\n opacity: this.getStartOpacity()\n },\n {\n offset: 100,\n color: this.fill,\n opacity: 1\n }\n ];\n }\n\n getStartingPath(): string {\n if (!this.animations) {\n return this.getPath();\n }\n\n let radius = this.getRadius();\n let path;\n\n if (this.roundEdges) {\n if (this.orientation === BarOrientation.Vertical) {\n radius = Math.min(this.height, radius);\n path = roundedRect(this.x, this.y + this.height, this.width, 1, 0, this.edges);\n } else if (this.orientation === BarOrientation.Horizontal) {\n radius = Math.min(this.width, radius);\n path = roundedRect(this.x, this.y, 1, this.height, 0, this.edges);\n }\n } else {\n if (this.orientation === BarOrientation.Vertical) {\n path = roundedRect(this.x, this.y + this.height, this.width, 1, 0, this.edges);\n } else if (this.orientation === BarOrientation.Horizontal) {\n path = roundedRect(this.x, this.y, 1, this.height, 0, this.edges);\n }\n }\n\n return path;\n }\n\n getPath(): string {\n let radius = this.getRadius();\n let path;\n\n if (this.roundEdges) {\n if (this.orientation === 'vertical') {\n radius = Math.min(this.height, radius);\n path = roundedRect(this.x, this.y, this.width, this.height, radius, this.edges);\n } else if (this.orientation === 'horizontal') {\n radius = Math.min(this.width, radius);\n path = roundedRect(this.x, this.y, this.width, this.height, radius, this.edges);\n }\n } else {\n path = roundedRect(this.x, this.y, this.width, this.height, radius, this.edges);\n }\n\n return path;\n }\n\n getRadius(): number {\n let radius = 0;\n\n if (this.roundEdges && this.height > 5 && this.width > 5) {\n radius = Math.floor(Math.min(5, this.height / 2, this.width / 2));\n }\n\n return radius;\n }\n\n getStartOpacity(): number {\n if (this.roundEdges) {\n return 0.2;\n } else {\n return 0.5;\n }\n }\n\n get edges(): boolean[] {\n let edges = [false, false, false, false];\n if (this.roundEdges) {\n if (this.orientation === BarOrientation.Vertical) {\n if (this.data.value > 0) {\n edges = [true, true, false, false];\n } else {\n edges = [false, false, true, true];\n }\n } else if (this.orientation === BarOrientation.Horizontal) {\n if (this.data.value > 0) {\n edges = [false, true, false, true];\n } else {\n edges = [true, false, true, false];\n }\n }\n }\n return edges;\n }\n\n @HostListener('mouseenter')\n onMouseEnter(): void {\n this.activate.emit(this.data);\n }\n\n @HostListener('mouseleave')\n onMouseLeave(): void {\n this.deactivate.emit(this.data);\n }\n\n private checkToHideBar(): void {\n this.hideBar =\n this.noBarWhenZero &&\n ((this.orientation === BarOrientation.Vertical && this.height === 0) ||\n (this.orientation === BarOrientation.Horizontal && this.width === 0));\n }\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n ContentChild,\n TemplateRef\n} from '@angular/core';\nimport { scaleBand, scaleLinear } from 'd3-scale';\n\nimport { calculateViewDimensions } from '../common/view-dimensions.helper';\nimport { ColorHelper } from '../common/color.helper';\nimport { BaseChartComponent } from '../common/base-chart.component';\nimport { ViewDimensions, LegendPosition, ScaleType, LegendOptions } from '../common/types';\n\n@Component({\n selector: 'ngx-charts-bar-horizontal',\n template: `\n <ngx-charts-chart\n [view]=\"[width, height]\"\n [showLegend]=\"legend\"\n [legendOptions]=\"legendOptions\"\n [activeEntries]=\"activeEntries\"\n [animations]=\"animations\"\n (legendLabelClick)=\"onClick($event)\"\n (legendLabelActivate)=\"onActivate($event, true)\"\n (legendLabelDeactivate)=\"onDeactivate($event, true)\"\n >\n <svg:g [attr.transform]=\"transform\" class=\"bar-chart chart\">\n <svg:g\n ngx-charts-x-axis\n *ngIf=\"xAxis\"\n [xScale]=\"xScale\"\n [dims]=\"dims\"\n [showGridLines]=\"showGridLines\"\n [showLabel]=\"showXAxisLabel\"\n [labelText]=\"xAxisLabel\"\n [trimTicks]=\"trimXAxisTicks\"\n [rotateTicks]=\"rotateXAxisTicks\"\n [maxTickLength]=\"maxXAxisTickLength\"\n [tickFormatting]=\"xAxisTickFormatting\"\n [ticks]=\"xAxisTicks\"\n (dimensionsChanged)=\"updateXAxisHeight($event)\"\n ></svg:g>\n <svg:g\n ngx-charts-y-axis\n *ngIf=\"yAxis\"\n [yScale]=\"yScale\"\n [dims]=\"dims\"\n [showLabel]=\"showYAxisLabel\"\n [labelText]=\"yAxisLabel\"\n [trimTicks]=\"trimYAxisTicks\"\n [maxTickLength]=\"maxYAxisTickLength\"\n [tickFormatting]=\"yAxisTickFormatting\"\n [ticks]=\"yAxisTicks\"\n [yAxisOffset]=\"dataLabelMaxWidth.negative\"\n (dimensionsChanged)=\"updateYAxisWidth($event)\"\n ></svg:g>\n <svg:g\n ngx-charts-series-horizontal\n [xScale]=\"xScale\"\n [yScale]=\"yScale\"\n [colors]=\"colors\"\n [series]=\"results\"\n [dims]=\"dims\"\n [gradient]=\"gradient\"\n [tooltipDisabled]=\"tooltipDisabled\"\n [tooltipTemplate]=\"tooltipTemplate\"\n [activeEntries]=\"activeEntries\"\n [roundEdges]=\"roundEdges\"\n [animations]=\"animations\"\n [showDataLabel]=\"showDataLabel\"\n [dataLabelFormatting]=\"dataLabelFormatting\"\n [noBarWhenZero]=\"noBarWhenZero\"\n (select)=\"onClick($event)\"\n (activate)=\"onActivate($event)\"\n (deactivate)=\"onDeactivate($event)\"\n (dataLabelWidthChanged)=\"onDataLabelMaxWidthChanged($event)\"\n ></svg:g>\n </svg:g>\n </ngx-charts-chart>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: ['../common/base-chart.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class BarHorizontalComponent extends BaseChartComponent {\n @Input() legend = false;\n @Input() legendTitle: string = 'Legend';\n @Input() legendPosition: LegendPosition = LegendPosition.Right;\n @Input() xAxis;\n @Input() yAxis;\n @Input() showXAxisLabel: boolean;\n @Input() showYAxisLabel: boolean;\n @Input() xAxisLabel: string;\n @Input() yAxisLabel: string;\n @Input() tooltipDisabled: boolean = false;\n @Input() gradient: boolean;\n @Input() showGridLines: boolean = true;\n @Input() activeEntries: any[] = [];\n @Input() schemeType: ScaleType;\n @Input() trimXAxisTicks: boolean = true;\n @Input() trimYAxisTicks: boolean = true;\n @Input() rotateXAxisTicks: boolean = true;\n @Input() maxXAxisTickLength: number = 16;\n @Input() maxYAxisTickLength: number = 16;\n @Input() xAxisTickFormatting: any;\n @Input() yAxisTickFormatting: any;\n @Input() xAxisTicks: any[];\n @Input() yAxisTicks: any[];\n @Input() barPadding: number = 8;\n @Input() roundDomains: boolean = false;\n @Input() roundEdges: boolean = true;\n @Input() xScaleMax: number;\n @Input() xScaleMin: number;\n @Input() showDataLabel: boolean = false;\n @Input() dataLabelFormatting: any;\n @Input() noBarWhenZero: boolean = true;\n\n @Output() activate: EventEmitter<any> = new EventEmitter();\n @Output() deactivate: EventEmitter<any> = new EventEmitter();\n\n @ContentChild('tooltipTemplate') tooltipTemplate: TemplateRef<any>;\n\n dims: ViewDimensions;\n yScale: any;\n xScale: any;\n xDomain: [number, number];\n yDomain: string[];\n transform: string;\n colors: ColorHelper;\n margin: number[] = [10, 20, 10, 20];\n xAxisHeight: number = 0;\n yAxisWidth: number = 0;\n legendOptions: LegendOptions;\n dataLabelMaxWidth: any = { negative: 0, positive: 0 };\n\n update(): void {\n super.update();\n\n if (!this.showDataLabel) {\n this.dataLabelMaxWidth = { negative: 0, positive: 0 };\n }\n\n this.margin = [10, 20 + this.dataLabelMaxWidth.positive, 10, 20 + this.dataLabelMaxWidth.negative];\n\n this.dims = calculateViewDimensions({\n width: this.width,\n height: this.height,\n margins: this.margin,\n showXAxis: this.xAxis,\n showYAxis: this.yAxis,\n xAxisHeight: this.xAxisHeight,\n yAxisWidth: this.yAxisWidth,\n showXLabel: this.showXAxisLabel,\n showYLabel: this.showYAxisLabel,\n showLegend: this.legend,\n legendType: this.schemeType,\n legendPosition: this.legendPosition\n });\n\n this.formatDates();\n\n this.xScale = this.getXScale();\n this.yScale = this.getYScale();\n\n this.setColors();\n this.legendOptions = this.getLegendOptions();\n\n this.transform = `translate(${this.dims.xOffset} , ${this.margin[0]})`;\n }\n\n getXScale(): any {\n this.xDomain = this.getXDomain();\n\n const scale = scaleLinear().range([0, this.dims.width]).domain(this.xDomain);\n\n return this.roundDomains ? scale.nice() : scale;\n }\n\n getYScale(): any {\n this.yDomain = this.getYDomain();\n const spacing = this.yDomain.length / (this.dims.height / this.barPadding + 1);\n\n return scaleBand().rangeRound([0, this.dims.height]).paddingInner(spacing).domain(this.yDomain);\n }\n\n getXDomain(): [number, number] {\n const values = this.results.map(d => d.value);\n const min = this.xScaleMin ? Math.min(this.xScaleMin, ...values) : Math.min(0, ...values);\n\n const max = this.xScaleMax ? Math.max(this.xScaleMax, ...values) : Math.max(0, ...values);\n return [min, max];\n }\n\n getYDomain(): string[] {\n return this.results.map(d => d.label);\n }\n\n onClick(data): void {\n this.select.emit(data);\n }\n\n setColors(): void {\n let domain;\n if (this.schemeType === ScaleType.Ordinal) {\n domain = this.yDomain;\n } else {\n domain = this.xDomain;\n }\n\n this.colors = new ColorHelper(this.scheme, this.schemeType, domain, this.customColors);\n }\n\n getLegendOptions(): LegendOptions {\n const opts = {\n scaleType: this.schemeType as any,\n colors: undefined,\n domain: [],\n title: undefined,\n position: this.legendPosition\n };\n if (opts.scaleType === 'ordinal') {\n opts.domain = this.yDomain;\n opts.colors = this.colors;\n opts.title = this.legendTitle;\n } else {\n opts.domain = this.xDomain;\n opts.colors = this.colors.scale;\n }\n\n return opts;\n }\n\n updateYAxisWidth({ width }: { width: number }): void {\n this.yAxisWidth = width;\n this.update();\n }\n\n updateXAxisHeight({ height }: { height: number }): void {\n this.xAxisHeight = height;\n this.update();\n }\n\n onDataLabelMaxWidthChanged(event) {\n if (event.size.negative) {\n this.dataLabelMaxWidth.negative = Math.max(this.dataLabelMaxWidth.negative, event.size.width);\n } else {\n this.dataLabelMaxWidth.positive = Math.max(this.dataLabelMaxWidth.positive, event.size.width);\n }\n if (event.index === this.results.length - 1) {\n setTimeout(() => this.update());\n }\n }\n\n onActivate(item, fromLegend: boolean = false) {\n item = this.results.find(d => {\n if (fromLegend) {\n return d.label === item.name;\n } else {\n return d.name === item.name;\n }\n });\n\n const idx = this.activeEntries.findIndex(d => {\n return d.name === item.name && d.value === item.value && d.series === item.series;\n });\n if (idx > -1) {\n return;\n }\n\n this.activeEntries = [item, ...this.activeEntries];\n this.activate.emit({ value: item, entries: this.activeEntries });\n }\n\n onDeactivate(item, fromLegend: boolean = false) {\n item = this.results.find(d => {\n if (fromLegend) {\n return d.label === item.name;\n } else {\n return d.name === item.name;\n }\n });\n\n const idx = this.activeEntries.findIndex(d => {\n return d.name === item.name && d.value === item.value && d.series === item.series;\n });\n\n this.activeEntries.splice(idx, 1);\n this.activeEntries = [...this.activeEntries];\n\n this.deactivate.emit({ value: item, entries: this.activeEntries });\n }\n}\n","import {\n Component,\n Input,\n ViewEncapsulation,\n Output,\n EventEmitter,\n ChangeDetectionStrategy,\n ContentChild,\n TemplateRef\n} from '@angular/core';\nimport { trigger, style, animate, transition } from '@angular/animations';\n\nimport { scaleBand, scaleLinear } from 'd3-scale';\n\nimport { calculateViewDimensions } from '../common/view-dimensions.helper';\nimport { ColorHelper } from '../common/color.helper';\nimport { DataItem } from '../models/chart-data.model';\n\nimport { BaseChartComponent } from '../common/base-chart.component';\nimport { ViewDimensions, LegendPosition, ScaleType, LegendOptions } from '../common/types';\n\n@Component({\n selector: 'ngx-charts-bar-horizontal-2d',\n template: `\n <ngx-charts-chart\n [view]=\"[width, height]\"\n [showLegend]=\"legend\"\n [legendOptions]=\"legendOptions\"\n [activeEntries]=\"activeEntries\"\n [animations]=\"animations\"\n (legendLabelActivate)=\"onActivate($event, undefined, true)\"\n (legendLabelDeactivate)=\"onDeactivate($event, undefined, true)\"\n (legendLabelClick)=\"onClick($event)\"\n >\n <svg:g [attr.transform]=\"transform\" class=\"bar-chart chart\">\n <svg:g\n ngx-charts-grid-panel-series\n [xScale]=\"valueScale\"\n [yScale]=\"groupScale\"\n [data]=\"results\"\n [dims]=\"dims\"\n orient=\"horizontal\"\n ></svg:g>\n <svg:g\n ngx-charts-x-axis\n *ngIf=\"xAxis\"\n [xScale]=\"valueScale\"\n [dims]=\"dims\"\n [showGridLines]=\"showGridLines\"\n [showLabel]=\"showXAxisLabel\"\n [labelText]=\"xAxisLabel\"\n [trimTicks]=\"trimXAxisTicks\"\n [rotateTicks]=\"rotateXAxisTicks\"\n [maxTickLength]=\"maxXAxisTickLength\"\n [tickFormatting]=\"xAxisTickFormatting\"\n [ticks]=\"xAxisTicks\"\n (dimensionsChanged)=\"updateXAxisHeight($event)\"\n ></svg:g>\n <svg:g\n ngx-charts-y-axis\n *ngIf=\"yAxis\"\n [yScale]=\"groupScale\"\n [dims]=\"dims\"\n [showLabel]=\"showYAxisLabel\"\n [labelText]=\"yAxisLabel\"\n [trimTicks]=\"trimYAxisTicks\"\n [maxTickLength]=\"maxYAxisTickLength\"\n [tickFormatting]=\"yAxisTickFormatting\"\n [ticks]=\"yAxisTicks\"\n [yAxisOffset]=\"dataLabelMaxWidth.negative\"\n (dimensionsChanged)=\"updateYAxisWidth($event)\"\n ></svg:g>\n <svg:g\n *ngFor=\"let group of results; let index = index; trackBy: trackBy\"\n [@animationState]=\"'active'\"\n [attr.transform]=\"groupTransform(group)\"\n >\n <svg:g\n ngx-charts-series-horizontal\n [xScale]=\"valueScale\"\n [activeEntries]=\"activeEntries\"\n [yScale]=\"innerScale\"\n [colors]=\"colors\"\n [series]=\"group.series\"\n [dims]=\"dims\"\n [gradient]=\"gradient\"\n [tooltipDisabled]=\"tooltipDisabled\"\n [tooltipTemplate]=\"tooltipTemplate\"\n [seriesName]=\"group.name\"\n [roundEdges]=\"roundEdges\"\n [animations]=\"animations\"\n [showDataLabel]=\"showDataLabel\"\n [dataLabelFormatting]=\"dataLabelFormatting\"\n [noBarWhenZero]=\"noBarWhenZero\"\n (select)=\"onClick($event, group)\"\n (activate)=\"onActivate($event, group)\"\n (deactivate)=\"onDeactivate($event, group)\"\n (dataLabelWidthChanged)=\"onDataLabelMaxWidthChanged($event, index)\"\n />\n </svg:g>\n </svg:g>\n </ngx-charts-chart>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: ['../common/base-chart.component.scss'],\n encapsulation: ViewEncapsulation.None,\n animations: [\n trigger('animationState', [\n transition(':leave', [\n style({\n opacity: 1,\n transform: '*'\n }),\n animate(500, style({ opacity: 0, transform: 'scale(0)' }))\n ])\n ])\n ]\n})\nexport class BarHorizontal2DComponent extends BaseChartComponent {\n @Input() legend: boolean = false;\n @Input() legendTitle: string = 'Legend';\n @Input() legendPosition: LegendPosition = LegendPosition.Right;\n @Input() xAxis;\n @Input() yAxis;\n @Input() showXAxisLabel: boolean;\n @Input() showYAxisLabel: boolean;\n @Input() xAxisLabel: string;\n @Input() yAxisLabel: string;\n @Input() tooltipDisabled: boolean = false;\n @Input() gradient: boolean;\n @Input() showGridLines: boolean = true;\n @Input() activeEntries: any[] = [];\n @Input() schemeType: ScaleType;\n @Input() trimXAxisTicks: boolean = true;\n @Input() trimYAxisTicks: boolean = true;\n @Input() rotateXAxisTicks: boolean = true;\n @Input() maxXAxisTickLength: number = 16;\n @Input() maxYAxisTickLength: number = 16;\n @Input() xAxisTickFormatting: any;\n @Input() yAxisTickFormatting: any;\n @Input() xAxisTicks: any[];\n @Input() yAxisTicks: any[];\n @Input() groupPadding: number = 16;\n @Input() barPadding: number = 8;\n @Input() roundDomains: boolean = false;\n @Input() roundEdges: boolean = true;\n @Input() xScaleMax: number;\n @Input() showDataLabel: boolean = false;\n @Input() dataLabelFormatting: any;\n @Input() noBarWhenZero: boolean = true;\n\n @Output() activate: EventEmitter<any> = new EventEmitter();\n @Output() deactivate: EventEmitter<any> = new EventEmitter();\n\n @ContentChild('tooltipTemplate') tooltipTemplate: TemplateRef<any>;\n\n dims: ViewDimensions;\n groupDomain: string[];\n innerDomain: string[];\n valueDomain: [number, number];\n groupScale: any;\n innerScale: any;\n valueScale: any;\n transform: string;\n colors: ColorHelper;\n margin: number[] = [10, 20, 10, 20];\n xAxisHeight: number = 0;\n yAxisWidth: number = 0;\n legendOptions: LegendOptions;\n dataLabelMaxWidth: any = { negative: 0, positive: 0 };\n\n update(): void {\n super.update();\n\n if (!this.showDataLabel) {\n this.dataLabelMaxWidth = { negative: 0, positive: 0 };\n }\n\n this.margin = [10, 20 + this.dataLabelMaxWidth.positive, 10, 20 + this.dataLabelMaxWidth.negative];\n\n this.dims = calculateViewDimensions({\n width: this.width,\n height: this.height,\n margins: this.margin,\n showXAxis: this.xAxis,\n showYAxis: this.yAxis,\n xAxisHeight: this.xAxisHeight,\n yAxisWidth: this.yAxisWidth,\n showXLabel: this.showXAxisLabel,\n showYLabel: this.showYAxisLabel,\n showLegend: this.legend,\n legendType: this.schemeType,\n legendPosition: this.legendPosition\n });\n\n this.formatDates();\n\n this.groupDomain = this.getGroupDomain();\n this.innerDomain = this.getInnerDomain();\n this.valueDomain = this.getValueDomain();\n\n this.groupScale = this.getGroupScale();\n this.innerScale = this.getInnerScale();\n this.valueScale = this.getValueScale();\n\n this.setColors();\n this.legendOptions = this.getLegendOptions();\n\n this.transform = `translate(${this.dims.xOffset} , ${this.margin[0]})`;\n }\n\n getGroupScale(): any {\n const spacing = this.groupDomain.length / (this.dims.height / this.groupPadding + 1);\n\n return scaleBand()\n .rangeRound([0, this.dims.height])\n .paddingInner(spacing)\n .paddingOuter(spacing / 2)\n .domain(this.groupDomain);\n }\n\n getInnerScale(): any {\n const height = this.groupScale.bandwidth();\n const spacing = this.innerDomain.length / (height / this.barPadding + 1);\n\n return scaleBand().rangeRound([0, height]).paddingInner(spacing).domain(this.innerDomain);\n }\n\n getValueScale(): any {\n const scale = scaleLinear().range([0, this.dims.width]).domain(this.valueDomain);\n\n return this.roundDomains ? scale.nice() : scale;\n }\n\n getGroupDomain(): string[] {\n const domain = [];\n\n for (const group of this.results) {\n if (!domain.includes(group.label)) {\n domain.push(group.label);\n }\n }\n\n return domain;\n }\n\n getInnerDomain(): string[] {\n const domain = [];\n\n for (const group of this.results) {\n for (const d of group.series) {\n if (!domain.includes(d.label)) {\n domain.push(d.label);\n }\n }\n }\n\n return domain;\n }\n\n getValueDomain(): [number, number] {\n const domain = [];\n\n for (const group of this.results) {\n for (const d of group.series) {\n if (!domain.includes(d.value)) {\n domain.push(d.value);\n }\n }\n }\n\n const min = Math.min(0, ...domain);\n const max = this.xScaleMax ? Math.max(this.xScaleMax, ...domain) : Math.max(0, ...domain);\n return [min, max];\n }\n\n groupTransform(group: DataItem): string {\n return `translate(0, ${this.groupScale(group.label)})`;\n }\n\n onClick(data, group?: DataItem): void {\n if (group) {\n data.series = group.name;\n }\n\n this.select.emit(data);\n }\n\n trackBy(index: number, item: DataItem): string {\n return item.name as any;\n }\n\n setColors(): void {\n let domain;\n if (this.schemeType === ScaleType.Ordinal) {\n domain = this.innerDomain;\n } else {\n domain = this.valueDomain;\n }\n\n this.colors = new ColorHelper(this.scheme, this.schemeType, domain, this.customColors);\n }\n\n getLegendOptions(): LegendOptions {\n const opts = {\n scaleType: this.schemeType as any,\n colors: undefined,\n domain: [],\n title: undefined,\n position: this.legendPosition\n };\n if (opts.scaleType === ScaleType.Ordinal) {\n opts.domain = this.innerDomain;\n opts.colors = this.colors;\n opts.title = this.legendTitle;\n } else {\n opts.domain = this.valueDomain;\n opts.colors = this.colors.scale;\n }\n\n return opts;\n }\n\n updateYAxisWidth({ width }: { width: number }): void {\n this.yAxisWidth = width;\n this.update();\n }\n\n updateXAxisHeight({ height }: { height: number }): void {\n this.xAxisHeight = height;\n this.update();\n }\n\n onDataLabelMaxWidthChanged(event, groupIndex: number): void {\n if (event.size.negative) {\n this.dataLabelMaxWidth.negative = Math.max(this.dataLabelMaxWidth.negative, event.size.width);\n } else {\n this.dataLabelMaxWidth.positive = Math.max(this.dataLabelMaxWidth.positive, event.size.width);\n }\n if (groupIndex === this.results.length - 1) {\n setTimeout(() => this.update());\n }\n }\n\n onActivate(event, group: DataItem, fromLegend: boolean = false): void {\n const item = Object.assign({}, event);\n if (group) {\n item.series = group.name;\n }\n\n const items = this.results\n .map(g => g.series)\n .flat()\n .filter(i => {\n if (fromLegend) {\n return i.label === item.name;\n } else {\n return i.name === item.name && i.series === item.series;\n }\n });\n\n this.activeEntries = [...items];\n this.activate.emit({ value: item, entries: this.activeEntries });\n }\n\n onDeactivate(event, group: DataItem, fromLegend: boolean = false): void {\n const item = Object.assign({}, event);\n if (group) {\n item.series = group.name;\n }\n\n this.activeEntries = this.activeEntries.filter(i => {\n if (fromLegend) {\n return i.label !== item.name;\n } else {\n return !(i.name === item.name && i.series === item.series);\n }\n });\n\n this.deactivate.emit({ value: item, entries: this.activeEntries });\n }\n}\n","import {\n Component,\n Input,\n Output,\n ViewEncapsulation,\n EventEmitter,\n ChangeDetectionStrategy,\n ContentChild,\n TemplateRef\n} from '@angular/core';\nimport { trigger, style, animate, transition } from '@angular/animations';\n\nimport { scaleBand, scaleLinear } from 'd3-scale';\n\nimport { calculateViewDimensions } from '../common/view-dimensions.helper';\nimport { ColorHelper } from '../common/color.helper';\nimport { Series } from '../models/chart-data.model';\n\nimport { BaseChartComponent } from '../common/base-chart.component';\nimport { ViewDimensions, LegendPosition, ScaleType, LegendOptions } from '../common/types';\n\n@Component({\n selector: 'ngx-charts-bar-horizontal-normalized',\n template: `\n <ngx-charts-chart\n [view]=\"[width, height]\"\n [showLegend]=\"legend\"\n [legendOptions]=\"legendOptions\"\n [activeEntries]=\"activeEntries\"\n [animations]=\"animations\"\n (legendLabelActivate)=\"onActivate($event, undefined, true)\"\n (legendLabelDeactivate)=\"onDeactivate($event, undefined, true)\"\n (legendLabelClick)=\"onClick($event)\"\n >\n <svg:g [attr.transform]=\"transform\" class=\"bar-chart chart\">\n <svg:g\n ngx-charts-x-axis\n *ngIf=\"xAxis\"\n [xScale]=\"xScale\"\n [dims]=\"dims\"\n [showGridLines]=\"showGridLines\"\n [showLabel]=\"showXAxisLabel\"\n [labelText]=\"xAxisLabel\"\n [trimTicks]=\"trimXAxisTicks\"\n [rotateTicks]=\"rotateXAxisTicks\"\n [maxTickLength]=\"maxXAxisTickLength\"\n [tickFormatting]=\"xAxisTickFormatting\"\n [ticks]=\"xAxisTicks\"\n (dimensionsChanged)=\"updateXAxisHeight($event)\"\n ></svg:g>\n <svg:g\n ngx-charts-y-axis\n *ngIf=\"yAxis\"\n [yScale]=\"yScale\"\n [dims]=\"dims\"\n [showLabel]=\"showYAxisLabel\"\n [labelText]=\"yAxisLabel\"\n [trimTicks]=\"trimYAxisTicks\"\n [maxTickLength]=\"maxYAxisTickLength\"\n [tickFormatting]=\"yAxisTickFormatting\"\n [ticks]=\"yAxisTicks\"\n (dimensionsChanged)=\"updateYAxisWidth($event)\"\n ></svg:g>\n <svg:g\n *ngFor=\"let group of results; trackBy: trackBy\"\n [@animationState]=\"'active'\"\n [attr.transform]=\"groupTransform(group)\"\n >\n <svg:g\n ngx-charts-series-horizontal\n type=\"normalized\"\n [xScale]=\"xScale\"\n [yScale]=\"yScale\"\n [activeEntries]=\"activeEntries\"\n [colors]=\"colors\"\n [series]=\"group.series\"\n [dims]=\"dims\"\n [gradient]=\"gradient\"\n [tooltipDisabled]=\"tooltipDisabled\"\n [tooltipTemplate]=\"tooltipTemplate\"\n [seriesName]=\"group.name\"\n [animations]=\"animations\"\n (select)=\"onClick($event, group)\"\n (activate)=\"onActivate($event, group)\"\n (deactivate)=\"onDeactivate($event, group)\"\n [noBarWhenZero]=\"noBarWhenZero\"\n />\n </svg:g>\n </svg:g>\n </ngx-charts-chart>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: ['../common/base-chart.component.scss'],\n encapsulation: ViewEncapsulation.None,\n animations: [\n trigger('animationState', [\n transition(':leave', [\n style({\n opacity: 1,\n transform: '*'\n }),\n animate(500, style({ opacity: 0, transform: 'scale(0)' }))\n ])\n ])\n ]\n})\nexport class BarHorizontalNormalizedComponent extends BaseChartComponent {\n @Input() legend: boolean = false;\n @Input() legendTitle: string = 'Legend';\n @Input() legendPosition: LegendPosition = LegendPosition.Right;\n @Input() xAxis;\n @Input() yAxis;\n @Input() showXAxisLabel: boolean;\n @Input() showYAxisLabel: boolean;\n @Input() xAxisLabel: string;\n @Input() yAxisLabel: string;\n @Input() tooltipDisabled: boolean = false;\n @Input() gradient: boolean;\n @Input() showGridLines: boolean = true;\n @Input() activeEntries: any[] = [];\n @Input() schemeType: ScaleType;\n @Input() trimXAxisTicks: boolean = true;\n @Input() trimYAxisTicks: boolean = true;\n @Input() rotateXAxisTicks: boolean = true;\n @Input() maxXAxisTickLength: number = 16;\n @Input() maxYAxisTickLength: number = 16;\n @Input() xAxisTickFormatting: any;\n @Input() yAxisTickFormatting: any;\n @Input() xAxisTicks: any[];\n @Input() yAxisTicks: any[];\n @Input() barPadding: number = 8;\n @Input() roundDomains: boolean = false;\n @Input() noBarWhenZero: boolean = true;\n\n @Output() activate: EventEmitter<any> = new EventEmitter();\n @Output() deactivate: EventEmitter<any> = new EventEmitter();\n\n @ContentChild('tooltipTemplate') tooltipTemplate: TemplateRef<any>;\n\n dims: ViewDimensions;\n groupDomain: string[];\n innerDomain: string[];\n valueDomain: [number, number] = [0, 100];\n xScale: any;\n yScale: any;\n transform: string;\n colors: ColorHelper;\n margin: number[] = [10, 20, 10, 20];\n xAxisHeight: number = 0;\n yAxisWidth: number = 0;\n legendOptions: LegendOptions;\n\n update(): void {\n super.update();\n\n this.dims = calculateViewDimensions({\n width: this.width,\n height: this.height,\n margins: this.margin,\n showXAxis: this.xAxis,\n showYAxis: this.yAxis,\n xAxisHeight: this.xAxisHeight,\n yAxisWidth: this.yAxisWidth,\n showXLabel: this.showXAxisLabel,\n showYLabel: this.showYAxisLabel,\n showLegend: this.legend,\n legendType: this.schemeType,\n legendPosition: this.legendPosition\n });\n\n this.formatDates();\n\n this.groupDomain = this.getGroupDomain();\n this.innerDomain = this.getInnerDomain();\n\n this.xScale = this.getXScale();\n this.yScale = this.getYScale();\n\n this.setColors();\n this.legendOptions = this.getLegendOptions();\n\n this.transform = `translate(${this.dims.xOffset} , ${this.margin[0]})`;\n }\n\n getGroupDomain(): string[] {\n const domain = [];\n\n for (const group of this.results) {\n if (!domain.includes(group.label)) {\n domain.push(group.label);\n }\n }\n\n return domain;\n }\n\n getInnerDomain(): string[] {\n const domain = [];\n\n for (const group of this.results) {\n for (const d of group.series) {\n if (!domain.includes(d.label)) {\n domain.push(d.label);\n }\n }\n }\n\n return domain;\n }\n\n getYScale(): any {\n const spacing = this.groupDomain.length / (this.dims.height / this.barPadding + 1);\n\n return scaleBand().rangeRound([0, this.dims.height]).paddingInner(spacing).domain(this.groupDomain);\n }\n\n getXScale(): any {\n const scale = scaleLinear().range([0, this.dims.width]).domain(this.valueDomain);\n return this.roundDomains ? scale.nice() : scale;\n }\n\n groupTransform(group: Series): string {\n return `translate(0, ${this.yScale(group.name)})`;\n }\n\n onClick(data, group?: Series): void {\n if (group) {\n data.series = group.name;\n }\n\n this.select.emit(data);\n }\n\n trackBy(index: number, item: Series): string {\n return item.name as any;\n }\n\n setColors(): void {\n let domain;\n if (this.schemeType === ScaleType.Ordinal) {\n domain = this.innerDomain;\n } else {\n domain = this.valueDomain;\n }\n\n this.colors = new ColorHelper(this.scheme, this.schemeType, domain, this.customColors);\n }\n\n getLegendOptions(): LegendOptions {\n const opts = {\n scaleType: this.schemeType as any,\n colors: undefined,\n domain: [],\n title: undefined,\n position: this.legendPosition\n };\n if (opts.scaleType === ScaleType.Ordinal) {\n opts.domain = this.innerDomain;\n opts.colors = this.colors;\n opts.title = this.legendTitle;\n } else {\n opts.domain = this.valueDomain;\n opts.colors = this.colors.scale;\n }\n\n return opts;\n }\n\n updateYAxisWidth({ width }: { width: number }): void {\n this.yAxisWidth = width;\n this.update();\n }\n\n updateXAxisHeight({ height }: { height: number }): void {\n this.xAxisHeight = height;\n this.update();\n }\n\n onActivate(event, group: Series, fromLegend: boolean = false) {\n const item = Object.assign({}, event);\n if (group) {\n item.series = group.name;\n }\n\n const items = this.results\n .map(g => g.series)\n .flat()\n .filter(i => {\n if (fromLegend) {\n return i.label === item.name;\n } else {\n return i.name === item.name && i.series === item.series;\n }\n });\n\n this.activeEntries = [...items];\n this.activate.emit({ value: item, entries: this.activeEntries });\n }\n\n onDeactivate(event, group: Series, fromLegend: boolean = false) {\n const item = Object.assign({}, event);\n if (group) {\n item.series = group.name;\n }\n\n this.activeEntries = this.activeEntries.filter(i => {\n if (fromLegend) {\n return i.label !== item.name;\n } else {\n return !(i.name === item.name && i.series === item.series);\n }\n });\n\n this.deactivate.emit({ value: item, entries: this.activeEntries });\n }\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n ContentChild,\n TemplateRef\n} from '@angular/core';\nimport { trigger, style, animate, transition } from '@angular/animations';\n\nimport { scaleBand, scaleLinear } from 'd3-scale';\n\nimport { calculateViewDimensions } from '../common/view-dimensions.helper';\nimport { ColorHelper } from '../common/color.helper';\nimport { Series } from '../models/chart-data.model';\nimport { BaseChartComponent } from '../common/base-chart.component';\nimport { ViewDimensions, LegendPosition, ScaleType, LegendOptions } from '../common/types';\n\n@Component({\n selector: 'ngx-charts-bar-horizontal-stacked',\n template: `\n <ngx-charts-chart\n [view]=\"[width, height]\"\n [showLegend]=\"legend\"\n [legendOptions]=\"legendOptions\"\n [activeEntries]=\"activeEntries\"\n [animations]=\"animations\"\n (legendLabelActivate)=\"onActivate($event, undefined, true)\"\n (legendLabelDeactivate)=\"onDeactivate($event, undefined, true)\"\n (legendLabelClick)=\"onClick($event)\"\n >\n <svg:g [attr.transform]=\"transform\" class=\"bar-chart chart\">\n <svg:g\n ngx-charts-x-axis\n *ngIf=\"xAxis\"\n [xScale]=\"xScale\"\n [dims]=\"dims\"\n [showGridLines]=\"showGridLines\"\n [showLabel]=\"showXAxisLabel\"\n [labelText]=\"xAxisLabel\"\n [trimTicks]=\"trimXAxisTicks\"\n [rotateTicks]=\"rotateXAxisTicks\"\n [maxTickLength]=\"maxXAxisTickLength\"\n [tickFormatting]=\"xAxisTickFormatting\"\n [ticks]=\"xAxisTicks\"\n (dimensionsChanged)=\"updateXAxisHeight($event)\"\n ></svg:g>\n <svg:g\n ngx-charts-y-axis\n *ngIf=\"yAxis\"\n [yScale]=\"yScale\"\n [dims]=\"dims\"\n [showLabel]=\"showYAxisLabel\"\n [labelText]=\"yAxisLabel\"\n [trimTicks]=\"trimYAxisTicks\"\n [maxTickLength]=\"maxYAxisTickLength\"\n [tickFormatting]=\"yAxisTickFormatting\"\n [ticks]=\"yAxisTicks\"\n [yAxisOffset]=\"dataLabelMaxWidth.negative\"\n (dimensionsChanged)=\"updateYAxisWidth($event)\"\n ></svg:g>\n <svg:g\n *ngFor=\"let group of results; let index = index; trackBy: trackBy\"\n [@animationState]=\"'active'\"\n [attr.transform]=\"groupTransform(group)\"\n >\n <svg:g\n ngx-charts-series-horizontal\n type=\"stacked\"\n [xScale]=\"xScale\"\n [yScale]=\"yScale\"\n [colors]=\"colors\"\n [series]=\"group.series\"\n [activeEntries]=\"activeEntries\"\n [dims]=\"dims\"\n [gradient]=\"gradient\"\n [tooltipDisabled]=\"tooltipDisabled\"\n [tooltipTemplate]=\"tooltipTemplate\"\n [seriesName]=\"group.name\"\n [animations]=\"animations\"\n [showDataLabel]=\"showDataLabel\"\n [dataLabelFormatting]=\"dataLabelFormatting\"\n [noBarWhenZero]=\"noBarWhenZero\"\n (select)=\"onClick($event, group)\"\n (activate)=\"onActivate($event, group)\"\n (deactivate)=\"onDeactivate($event, group)\"\n (dataLabelWidthChanged)=\"onDataLabelMaxWidthChanged($event, index)\"\n />\n </svg:g>\n </svg:g>\n </ngx-charts-chart>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: ['../common/base-chart.component.scss'],\n encapsulation: ViewEncapsulation.None,\n animations: [\n trigger('animationState', [\n transition(':leave', [\n style({\n opacity: 1,\n transform: '*'\n }),\n animate(500, style({ opacity: 0, transform: 'scale(0)' }))\n ])\n ])\n ]\n})\nexport class BarHorizontalStackedComponent extends BaseChartComponent {\n @Input() legend: boolean = false;\n @Input() legendTitle: string = 'Legend';\n @Input() legendPosition: LegendPosition = LegendPosition.Right;\n @Input() xAxis;\n @Input() yAxis;\n @Input() showXAxisLabel: boolean;\n @Input() showYAxisLabel: boolean;\n @Input() xAxisLabel: string;\n @Input() yAxisLabel: string;\n @Input() tooltipDisabled: boolean = false;\n @Input() gradient: boolean;\n @Input() showGridLines: boolean = true;\n @Input() activeEntries: any[] = [];\n @Input() schemeType: ScaleType;\n @Input() trimXAxisTicks: boolean = true;\n @Input() trimYAxisTicks: boolean = true;\n @Input() rotateXAxisTicks: boolean = true;\n @Input() maxXAxisTickLength: number = 16;\n @Input() maxYAxisTickLength: number = 16;\n @Input() xAxisTickFormatting: any;\n @Input() yAxisTickFormatting: any;\n @Input() xAxisTicks: any[];\n @Input() yAxisTicks: any[];\n @Input() barPadding: number = 8;\n @Input() roundDomains: boolean = false;\n @Input() xScaleMax: number;\n @Input() showDataLabel: boolean = false;\n @Input() dataLabelFormatting: any;\n @Input() noBarWhenZero: boolean = true;\n\n @Output() activate: EventEmitter<any> = new EventEmitter();\n @Output() deactivate: EventEmitter<any> = new EventEmitter();\n\n @ContentChild('tooltipTemplate') tooltipTemplate: TemplateRef<any>;\n\n dims: ViewDimensions;\n groupDomain: string[];\n innerDomain: string[];\n valueDomain: [number, number];\n xScale: any;\n yScale: any;\n transform: string;\n colors: ColorHelper;\n margin = [10, 20, 10, 20];\n xAxisHeight: number = 0;\n yAxisWidth: number = 0;\n legendOptions: LegendOptions;\n dataLabelMaxWidth: any = { negative: 0, positive: 0 };\n\n update(): void {\n super.update();\n\n if (!this.showDataLabel) {\n this.dataLabelMaxWidth = { negative: 0, positive: 0 };\n }\n\n this.margin = [10, 20 + this.dataLabelMaxWidth.positive, 10, 20 + this.dataLabelMaxWidth.negative];\n\n this.dims = calculateViewDimensions({\n width: this.width,\n height: this.height,\n margins: this.margin,\n showXAxis: this.xAxis,\n showYAxis: this.yAxis,\n xAxisHeight: this.xAxisHeight,\n yAxisWidth: this.yAxisWidth,\n showXLabel: this.showXAxisLabel,\n showYLabel: this.showYAxisLabel,\n showLegend: this.legend,\n legendType: this.schemeType,\n legendPosition: this.legendPosition\n });\n\n this.formatDates();\n\n this.groupDomain = this.getGroupDomain();\n this.innerDomain = this.getInnerDomain();\n this.valueDomain = this.getValueDomain();\n\n this.xScale = this.getXScale();\n this.yScale = this.getYScale();\n\n this.setColors();\n this.legendOptions = this.getLegendOptions();\n\n this.transform = `translate(${this.dims.xOffset} , ${this.margin[0]})`;\n }\n\n getGroupDomain(): string[] {\n const domain = [];\n\n for (const group of this.results) {\n if (!domain.includes(group.label)) {\n domain.push(group.label);\n }\n }\n\n return domain;\n }\n\n getInnerDomain(): string[] {\n const domain = [];\n\n for (const group of this.results) {\n for (const d of group.series) {\n if (!domain.includes(d.label)) {\n domain.push(d.label);\n }\n }\n }\n\n return domain;\n }\n\n getValueDomain(): [number, number] {\n const domain = [];\n let smallest = 0;\n let biggest = 0;\n for (const group of this.results) {\n let smallestSum = 0;\n let biggestSum = 0;\n for (const d of group.series) {\n if (d.value < 0) {\n smallestSum += d.value;\n } else {\n biggestSum += d.value;\n }\n smallest = d.value < smallest ? d.value : smallest;\n biggest = d.value > biggest ? d.value : biggest;\n }\n domain.push(smallestSum);\n domain.push(biggestSum);\n }\n domain.push(smallest);\n domain.push(biggest);\n\n const min = Math.min(0, ...domain);\n const max = this.xScaleMax ? Math.max(this.xScaleMax, ...domain) : Math.max(...domain);\n return [min, max];\n }\n\n getYScale(): any {\n const spacing = this.groupDomain.length / (this.dims.height / this.barPadding + 1);\n\n return scaleBand().rangeRound([0, this.dims.height]).paddingInner(spacing).domain(this.groupDomain);\n }\n\n getXScale(): any {\n const scale = scaleLinear().range([0, this.dims.width]).domain(this.valueDomain);\n return this.roundDomains ? scale.nice() : scale;\n }\n\n groupTransform(group: Series): string {\n return `translate(0, ${this.yScale(group.name)})`;\n }\n\n onClick(data, group?: Series): void {\n if (group) {\n data.series = group.name;\n }\n\n this.select.emit(data);\n }\n\n trackBy(index: string, item: Series): any {\n return item.name;\n }\n\n setColors(): void {\n let domain;\n if (this.schemeType === ScaleType.Ordinal) {\n domain = this.innerDomain;\n } else {\n domain = this.valueDomain;\n }\n\n this.colors = new ColorHelper(this.scheme, this.schemeType, domain, this.customColors);\n }\n\n getLegendOptions(): LegendOptions {\n const opts = {\n scaleType: this.schemeType as any,\n colors: undefined,\n domain: [],\n title: undefined,\n position: this.legendPosition\n };\n if (opts.scaleType === ScaleType.Ordinal) {\n opts.domain = this.innerDomain;\n opts.colors = this.colors;\n opts.title = this.legendTitle;\n } else {\n opts.domain = this.valueDomain;\n opts.colors = this.colors.scale;\n }\n\n return opts;\n }\n\n updateYAxisWidth({ width }: { width: number }): void {\n this.yAxisWidth = width;\n this.update();\n }\n\n updateXAxisHeight({ height }: { height: number }): void {\n this.xAxisHeight = height;\n this.update();\n }\n\n onDataLabelMaxWidthChanged(event, groupIndex: number) {\n if (event.size.negative) {\n this.dataLabelMaxWidth.negative = Math.max(this.dataLabelMaxWidth.negative, event.size.width);\n } else {\n this.dataLabelMaxWidth.positive = Math.max(this.dataLabelMaxWidth.positive, event.size.width);\n }\n if (groupIndex === this.results.length - 1) {\n setTimeout(() => this.update());\n }\n }\n\n onActivate(event, group: Series, fromLegend: boolean = false) {\n const item = Object.assign({}, event);\n if (group) {\n item.series = group.name;\n }\n\n const items = this.results\n .map(g => g.series)\n .flat()\n .filter(i => {\n if (fromLegend) {\n return i.label === item.name;\n } else {\n return i.name === item.name && i.series === item.series;\n }\n });\n\n this.activeEntries = [...items];\n this.activate.emit({ value: item, entries: this.activeEntries });\n }\n\n onDeactivate(event, group: Series, fromLegend: boolean = false) {\n const item = Object.assign({}, event);\n if (group) {\n item.series = group.name;\n }\n\n this.activeEntries = this.activeEntries.filter(i => {\n if (fromLegend) {\n return i.label !== item.name;\n } else {\n return !(i.name === item.name && i.series === item.series);\n }\n });\n\n this.deactivate.emit({ value: item, entries: this.activeEntries });\n }\n}\n","import {\n Component,\n Input,\n ViewEncapsulation,\n Output,\n EventEmitter,\n ChangeDetectionStrategy,\n ContentChild,\n TemplateRef\n} from '@angular/core';\nimport { scaleBand, scaleLinear } from 'd3-scale';\n\nimport { calculateViewDimensions } from '../common/view-dimensions.helper';\nimport { ColorHelper } from '../common/color.helper';\nimport { BaseChartComponent } from '../common/base-chart.component';\nimport { DataItem } from '../models/chart-data.model';\nimport { ViewDimensions, LegendPosition, LegendOptions, ScaleType } from '../common/types';\n\n@Component({\n selector: 'ngx-charts-bar-vertical',\n template: `\n <ngx-charts-chart\n [view]=\"[width, height]\"\n [showLegend]=\"legend\"\n [legendOptions]=\"legendOptions\"\n [activeEntries]=\"activeEntries\"\n [animations]=\"animations\"\n (legendLabelClick)=\"onClick($event)\"\n (legendLabelActivate)=\"onActivate($event, true)\"\n (legendLabelDeactivate)=\"onDeactivate($event, true)\"\n >\n <svg:g [attr.transform]=\"transform\" class=\"bar-chart chart\">\n <svg:g\n ngx-charts-x-axis\n *ngIf=\"xAxis\"\n [xScale]=\"xScale\"\n [dims]=\"dims\"\n [showLabel]=\"showXAxisLabel\"\n [labelText]=\"xAxisLabel\"\n [trimTicks]=\"trimXAxisTicks\"\n [rotateTicks]=\"rotateXAxisTicks\"\n [maxTickLength]=\"maxXAxisTickLength\"\n [tickFormatting]=\"xAxisTickFormatting\"\n [ticks]=\"xAxisTicks\"\n [xAxisOffset]=\"dataLabelMaxHeight.negative\"\n (dimensionsChanged)=\"updateXAxisHeight($event)\"\n ></svg:g>\n <svg:g\n ngx-charts-y-axis\n *ngIf=\"yAxis\"\n [yScale]=\"yScale\"\n [dims]=\"dims\"\n [showGridLines]=\"showGridLines\"\n [showLabel]=\"showYAxisLabel\"\n [labelText]=\"yAxisLabel\"\n [trimTicks]=\"trimYAxisTicks\"\n [maxTickLength]=\"maxYAxisTickLength\"\n [tickFormatting]=\"yAxisTickFormatting\"\n [ticks]=\"yAxisTicks\"\n (dimensionsChanged)=\"updateYAxisWidth($event)\"\n ></svg:g>\n <svg:g\n ngx-charts-series-vertical\n [xScale]=\"xScale\"\n [yScale]=\"yScale\"\n [colors]=\"colors\"\n [series]=\"results\"\n [dims]=\"dims\"\n [gradient]=\"gradient\"\n [tooltipDisabled]=\"tooltipDisabled\"\n [tooltipTemplate]=\"tooltipTemplate\"\n [showDataLabel]=\"showDataLabel\"\n [dataLabelFormatting]=\"dataLabelFormatting\"\n [activeEntries]=\"activeEntries\"\n [roundEdges]=\"roundEdges\"\n [animations]=\"animations\"\n [noBarWhenZero]=\"noBarWhenZero\"\n (activate)=\"onActivate($event)\"\n (deactivate)=\"onDeactivate($event)\"\n (select)=\"onClick($event)\"\n (dataLabelHeightChanged)=\"onDataLabelMaxHeightChanged($event)\"\n ></svg:g>\n </svg:g>\n </ngx-charts-chart>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: ['../common/base-chart.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class BarVerticalComponent extends BaseChartComponent {\n @Input() legend = false;\n @Input() legendTitle: string = 'Legend';\n @Input() legendPosition: LegendPosition = LegendPosition.Right;\n @Input() xAxis;\n @Input() yAxis;\n @Input() showXAxisLabel: boolean;\n @Input() showYAxisLabel: boolean;\n @Input() xAxisLabel: string;\n @Input() yAxisLabel: string;\n @Input() tooltipDisabled: boolean = false;\n @Input() gradient: boolean;\n @Input() showGridLines: boolean = true;\n @Input() activeEntries: any[] = [];\n @Input() schemeType: ScaleType;\n @Input() trimXAxisTicks: boolean = true;\n @Input() trimYAxisTicks: boolean = true;\n @Input() rotateXAxisTicks: boolean = true;\n @Input() maxXAxisTickLength: number = 16;\n @Input() maxYAxisTickLength: number = 16;\n @Input() xAxisTickFormatting: any;\n @Input() yAxisTickFormatting: any;\n @Input() xAxisTicks: any[];\n @Input() yAxisTicks: any[];\n @Input() barPadding = 8;\n @Input() roundDomains: boolean = false;\n @Input() roundEdges: boolean = true;\n @Input() yScaleMax: number;\n @Input() yScaleMin: number;\n @Input() showDataLabel: boolean = false;\n @Input() dataLabelFormatting: any;\n @Input() noBarWhenZero: boolean = true;\n\n @Output() activate: EventEmitter<any> = new EventEmitter();\n @Output() deactivate: EventEmitter<any> = new EventEmitter();\n\n @ContentChild('tooltipTemplate') tooltipTemplate: TemplateRef<any>;\n\n dims: ViewDimensions;\n xScale: any;\n yScale: any;\n xDomain: any;\n yDomain: any;\n transform: string;\n colors: ColorHelper;\n margin: number[] = [10, 20, 10, 20];\n xAxisHeight: number = 0;\n yAxisWidth: number = 0;\n legendOptions: LegendOptions;\n dataLabelMaxHeight: any = { negative: 0, positive: 0 };\n\n update(): void {\n super.update();\n\n if (!this.showDataLabel) {\n this.dataLabelMaxHeight = { negative: 0, positive: 0 };\n }\n this.margin = [10 + this.dataLabelMaxHeight.positive, 20, 10 + this.dataLabelMaxHeight.negative, 20];\n\n this.dims = calculateViewDimensions({\n width: this.width,\n height: this.height,\n margins: this.margin,\n showXAxis: this.xAxis,\n showYAxis: this.yAxis,\n xAxisHeight: this.xAxisHeight,\n yAxisWidth: this.yAxisWidth,\n showXLabel: this.showXAxisLabel,\n showYLabel: this.showYAxisLabel,\n showLegend: this.legend,\n legendType: this.schemeType,\n legendPosition: this.legendPosition\n });\n\n this.formatDates();\n\n if (this.showDataLabel) {\n this.dims.height -= this.dataLabelMaxHeight.negative;\n }\n this.xScale = this.getXScale();\n this.yScale = this.getYScale();\n\n this.setColors();\n this.legendOptions = this.getLegendOptions();\n\n this.transform = `translate(${this.dims.xOffset} , ${this.margin[0] + this.dataLabelMaxHeight.negative})`;\n }\n\n getXScale(): any {\n this.xDomain = this.getXDomain();\n const spacing = this.xDomain.length / (this.dims.width / this.barPadding + 1);\n return scaleBand().range([0, this.dims.width]).paddingInner(spacing).domain(this.xDomain);\n }\n\n getYScale(): any {\n this.yDomain = this.getYDomain();\n const scale = scaleLinear().range([this.dims.height, 0]).domain(this.yDomain);\n return this.roundDomains ? scale.nice() : scale;\n }\n\n getXDomain(): any[] {\n return this.results.map(d => d.label);\n }\n\n getYDomain(): [number, number] {\n const values = this.results.map(d => d.value);\n\n let min = this.yScaleMin ? Math.min(this.yScaleMin, ...values) : Math.min(0, ...values);\n if (this.yAxisTicks && !this.yAxisTicks.some(isNaN)) {\n min = Math.min(min, ...this.yAxisTicks);\n }\n\n let max = this.yScaleMax ? Math.max(this.yScaleMax, ...values) : Math.max(0, ...values);\n if (this.yAxisTicks && !this.yAxisTicks.some(isNaN)) {\n max = Math.max(max, ...this.yAxisTicks);\n }\n return [min, max];\n }\n\n onClick(data: DataItem) {\n this.select.emit(data);\n }\n\n setColors(): void {\n let domain;\n if (this.schemeType === ScaleType.Ordinal) {\n domain = this.xDomain;\n } else {\n domain = this.yDomain;\n }\n\n this.colors = new ColorHelper(this.scheme, this.schemeType, domain, this.customColors);\n }\n\n getLegendOptions() {\n const opts = {\n scaleType: this.schemeType as any,\n colors: undefined,\n domain: [],\n title: undefined,\n position: this.legendPosition\n };\n if (opts.scaleType === ScaleType.Ordinal) {\n opts.domain = this.xDomain;\n opts.colors = this.colors;\n opts.title = this.legendTitle;\n } else {\n opts.domain = this.yDomain;\n opts.colors = this.colors.scale;\n }\n return opts;\n }\n\n updateYAxisWidth({ width }): void {\n this.yAxisWidth = width;\n this.update();\n }\n\n updateXAxisHeight({ height }): void {\n this.xAxisHeight = height;\n this.update();\n }\n\n onDataLabelMaxHeightChanged(event) {\n if (event.size.negative) {\n this.dataLabelMaxHeight.negative = Math.max(this.dataLabelMaxHeight.negative, event.size.height);\n } else {\n this.dataLabelMaxHeight.positive = Math.max(this.dataLabelMaxHeight.positive, event.size.height);\n }\n if (event.index === this.results.length - 1) {\n setTimeout(() => this.update());\n }\n }\n\n onActivate(item, fromLegend = false) {\n item = this.results.find(d => {\n if (fromLegend) {\n return d.label === item.name;\n } else {\n return d.name === item.name;\n }\n });\n\n const idx = this.activeEntries.findIndex(d => {\n return d.name === item.name && d.value === item.value && d.series === item.series;\n });\n if (idx > -1) {\n return;\n }\n\n this.activeEntries = [item, ...this.activeEntries];\n this.activate.emit({ value: item, entries: this.activeEntries });\n }\n\n onDeactivate(item, fromLegend = false) {\n item = this.results.find(d => {\n if (fromLegend) {\n return d.label === item.name;\n } else {\n return d.name === item.name;\n }\n });\n\n const idx = this.activeEntries.findIndex(d => {\n return d.name === item.name && d.value === item.value && d.series === item.series;\n });\n\n this.activeEntries.splice(idx, 1);\n this.activeEntries = [...this.activeEntries];\n\n this.deactivate.emit({ value: item, entries: this.activeEntries });\n }\n}\n","import {\n Component,\n Input,\n Output,\n ViewEncapsulation,\n EventEmitter,\n ChangeDetectionStrategy,\n ContentChild,\n TemplateRef\n} from '@angular/core';\nimport { trigger, style, animate, transition } from '@angular/animations';\nimport { scaleBand, scaleLinear } from 'd3-scale';\n\nimport { calculateViewDimensions } from '../common/view-dimensions.helper';\nimport { ColorHelper } from '../common/color.helper';\nimport { DataItem } from '../models/chart-data.model';\n\nimport { BaseChartComponent } from '../common/base-chart.component';\nimport { ViewDimensions, LegendPosition, ScaleType, LegendOptions } from '../common/types';\n\n@Component({\n selector: 'ngx-charts-bar-vertical-2d',\n template: `\n <ngx-charts-chart\n [view]=\"[width, height]\"\n [showLegend]=\"legend\"\n [legendOptions]=\"legendOptions\"\n [activeEntries]=\"activeEntries\"\n [animations]=\"animations\"\n (legendLabelActivate)=\"onActivate($event, undefined, true)\"\n (legendLabelDeactivate)=\"onDeactivate($event, undefined, true)\"\n (legendLabelClick)=\"onClick($event)\"\n >\n <svg:g [attr.transform]=\"transform\" class=\"bar-chart chart\">\n <svg:g\n ngx-charts-grid-panel-series\n [xScale]=\"groupScale\"\n [yScale]=\"valueScale\"\n [data]=\"results\"\n [dims]=\"dims\"\n orient=\"vertical\"\n ></svg:g>\n <svg:g\n ngx-charts-x-axis\n *ngIf=\"xAxis\"\n [xScale]=\"groupScale\"\n [dims]=\"dims\"\n [showLabel]=\"showXAxisLabel\"\n [labelText]=\"xAxisLabel\"\n [trimTicks]=\"trimXAxisTicks\"\n [rotateTicks]=\"rotateXAxisTicks\"\n [maxTickLength]=\"maxXAxisTickLength\"\n [tickFormatting]=\"xAxisTickFormatting\"\n [ticks]=\"xAxisTicks\"\n [xAxisOffset]=\"dataLabelMaxHeight.negative\"\n (dimensionsChanged)=\"updateXAxisHeight($event)\"\n ></svg:g>\n <svg:g\n ngx-charts-y-axis\n *ngIf=\"yAxis\"\n [yScale]=\"valueScale\"\n [dims]=\"dims\"\n [showGridLines]=\"showGridLines\"\n [showLabel]=\"showYAxisLabel\"\n [labelText]=\"yAxisLabel\"\n [trimTicks]=\"trimYAxisTicks\"\n [maxTickLength]=\"maxYAxisTickLength\"\n [tickFormatting]=\"yAxisTickFormatting\"\n [ticks]=\"yAxisTicks\"\n (dimensionsChanged)=\"updateYAxisWidth($event)\"\n ></svg:g>\n <svg:g\n ngx-charts-series-vertical\n *ngFor=\"let group of results; let index = index; trackBy: trackBy\"\n [@animationState]=\"'active'\"\n [attr.transform]=\"groupTransform(group)\"\n [activeEntries]=\"activeEntries\"\n [xScale]=\"innerScale\"\n [yScale]=\"valueScale\"\n [colors]=\"colors\"\n [series]=\"group.series\"\n [dims]=\"dims\"\n [gradient]=\"gradient\"\n [tooltipDisabled]=\"tooltipDisabled\"\n [tooltipTemplate]=\"tooltipTemplate\"\n [showDataLabel]=\"showDataLabel\"\n [dataLabelFormatting]=\"dataLabelFormatting\"\n [seriesName]=\"group.name\"\n [roundEdges]=\"roundEdges\"\n [animations]=\"animations\"\n [noBarWhenZero]=\"noBarWhenZero\"\n (select)=\"onClick($event, group)\"\n (activate)=\"onActivate($event, group)\"\n (deactivate)=\"onDeactivate($event, group)\"\n (dataLabelHeightChanged)=\"onDataLabelMaxHeightChanged($event, index)\"\n />\n </svg:g>\n </ngx-charts-chart>\n `,\n styleUrls: ['../common/base-chart.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [\n trigger('animationState', [\n transition(':leave', [\n style({\n opacity: 1,\n transform: '*'\n }),\n animate(500, style({ opacity: 0, transform: 'scale(0)' }))\n ])\n ])\n ]\n})\nexport class BarVertical2DComponent extends BaseChartComponent {\n @Input() legend: boolean = false;\n @Input() legendTitle: string = 'Legend';\n @Input() legendPosition: LegendPosition = LegendPosition.Right;\n @Input() xAxis;\n @Input() yAxis;\n @Input() showXAxisLabel: boolean;\n @Input() showYAxisLabel: boolean;\n @Input() xAxisLabel: string;\n @Input() yAxisLabel: string;\n @Input() tooltipDisabled: boolean = false;\n @Input() scaleType: ScaleType = ScaleType.Ordinal;\n @Input() gradient: boolean;\n @Input() showGridLines: boolean = true;\n @Input() activeEntries: any[] = [];\n @Input() schemeType: ScaleType;\n @Input() trimXAxisTicks: boolean = true;\n @Input() trimYAxisTicks: boolean = true;\n @Input() rotateXAxisTicks: boolean = true;\n @Input() maxXAxisTickLength: number = 16;\n @Input() maxYAxisTickLength: number = 16;\n @Input() xAxisTickFormatting: any;\n @Input() yAxisTickFormatting: any;\n @Input() xAxisTicks: any[];\n @Input() yAxisTicks: any[];\n @Input() groupPadding: number = 16;\n @Input() barPadding: number = 8;\n @Input() roundDomains: boolean = false;\n @Input() roundEdges: boolean = true;\n @Input() yScaleMax: number;\n @Input() showDataLabel: boolean = false;\n @Input() dataLabelFormatting: any;\n @Input() noBarWhenZero: boolean = true;\n\n @Output() activate: EventEmitter<any> = new EventEmitter();\n @Output() deactivate: EventEmitter<any> = new EventEmitter();\n\n @ContentChild('tooltipTemplate') tooltipTemplate: TemplateRef<any>;\n\n dims: ViewDimensions;\n groupDomain: string[];\n innerDomain: string[];\n valueDomain: [number, number];\n groupScale: any;\n innerScale: any;\n valueScale: any;\n transform: string;\n colors: ColorHelper;\n margin: number[] = [10, 20, 10, 20];\n xAxisHeight: number = 0;\n yAxisWidth: number = 0;\n legendOptions: LegendOptions;\n dataLabelMaxHeight: any = { negative: 0, positive: 0 };\n\n update(): void {\n super.update();\n\n if (!this.showDataLabel) {\n this.dataLabelMaxHeight = { negative: 0, positive: 0 };\n }\n this.margin = [10 + this.dataLabelMaxHeight.positive, 20, 10 + this.dataLabelMaxHeight.negative, 20];\n\n this.dims = calculateViewDimensions({\n width: this.width,\n height: this.height,\n margins: this.margin,\n showXAxis: this.xAxis,\n showYAxis: this.yAxis,\n xAxisHeight: this.xAxisHeight,\n yAxisWidth: this.yAxisWidth,\n showXLabel: this.showXAxisLabel,\n showYLabel: this.showYAxisLabel,\n showLegend: this.legend,\n legendType: this.schemeType,\n legendPosition: this.legendPosition\n });\n\n if (this.showDataLabel) {\n this.dims.height -= this.dataLabelMaxHeight.negative;\n }\n\n this.formatDates();\n\n this.groupDomain = this.getGroupDomain();\n this.innerDomain = this.getInnerDomain();\n this.valueDomain = this.getValueDomain();\n\n this.groupScale = this.getGroupScale();\n this.innerScale = this.getInnerScale();\n this.valueScale = this.getValueScale();\n\n this.setColors();\n this.legendOptions = this.getLegendOptions();\n this.transform = `translate(${this.dims.xOffset} , ${this.margin[0] + this.dataLabelMaxHeight.negative})`;\n }\n\n onDataLabelMaxHeightChanged(event, groupIndex: number): void {\n if (event.size.negative) {\n this.dataLabelMaxHeight.negative = Math.max(this.dataLabelMaxHeight.negative, event.size.height);\n } else {\n this.dataLabelMaxHeight.positive = Math.max(this.dataLabelMaxHeight.positive, event.size.height);\n }\n if (groupIndex === this.results.length - 1) {\n setTimeout(() => this.update());\n }\n }\n\n getGroupScale(): any {\n const spacing = this.groupDomain.length / (this.dims.height / this.groupPadding + 1);\n\n return scaleBand()\n .rangeRound([0, this.dims.width])\n .paddingInner(spacing)\n .paddingOuter(spacing / 2)\n .domain(this.groupDomain);\n }\n\n getInnerScale(): any {\n const width = this.groupScale.bandwidth();\n const spacing = this.innerDomain.length / (width / this.barPadding + 1);\n return scaleBand().rangeRound([0, width]).paddingInner(spacing).domain(this.innerDomain);\n }\n\n getValueScale(): any {\n const scale = scaleLinear().range([this.dims.height, 0]).domain(this.valueDomain);\n return this.roundDomains ? scale.nice() : scale;\n }\n\n getGroupDomain(): string[] {\n const domain = [];\n for (const group of this.results) {\n if (!domain.includes(group.label)) {\n domain.push(group.label);\n }\n }\n\n return domain;\n }\n\n getInnerDomain(): string[] {\n const domain = [];\n for (const group of this.results) {\n for (const d of group.series) {\n if (!domain.includes(d.label)) {\n domain.push(d.label);\n }\n }\n }\n\n return domain;\n }\n\n getValueDomain(): [number, number] {\n const domain = [];\n for (const group of this.results) {\n for (const d of group.series) {\n if (!domain.includes(d.value)) {\n domain.push(d.value);\n }\n }\n }\n\n const min = Math.min(0, ...domain);\n const max = this.yScaleMax ? Math.max(this.yScaleMax, ...domain) : Math.max(0, ...domain);\n\n return [min, max];\n }\n\n groupTransform(group: DataItem): string {\n return `translate(${this.groupScale(group.label)}, 0)`;\n }\n\n onClick(data, group?: DataItem): void {\n if (group) {\n data.series = group.name;\n }\n\n this.select.emit(data);\n }\n\n trackBy(index: number, item: DataItem): any {\n return item.name;\n }\n\n setColors(): void {\n let domain;\n if (this.schemeType === ScaleType.Ordinal) {\n domain = this.innerDomain;\n } else {\n domain = this.valueDomain;\n }\n\n this.colors = new ColorHelper(this.scheme, this.schemeType, domain, this.customColors);\n }\n\n getLegendOptions(): LegendOptions {\n const opts = {\n scaleType: this.schemeType as any,\n colors: undefined,\n domain: [],\n title: undefined,\n position: this.legendPosition\n };\n if (opts.scaleType === ScaleType.Ordinal) {\n opts.domain = this.innerDomain;\n opts.colors = this.colors;\n opts.title = this.legendTitle;\n } else {\n opts.domain = this.valueDomain;\n opts.colors = this.colors.scale;\n }\n\n return opts;\n }\n\n updateYAxisWidth({ width }: { width: number }): void {\n this.yAxisWidth = width;\n this.update();\n }\n\n updateXAxisHeight({ height }: { height: number }): void {\n this.xAxisHeight = height;\n this.update();\n }\n\n onActivate(event, group: DataItem, fromLegend: boolean = false): void {\n const item = Object.assign({}, event);\n if (group) {\n item.series = group.name;\n }\n\n const items = this.results\n .map(g => g.series)\n .flat()\n .filter(i => {\n if (fromLegend) {\n return i.label === item.name;\n } else {\n return i.name === item.name && i.series === item.series;\n }\n });\n\n this.activeEntries = [...items];\n this.activate.emit({ value: item, entries: this.activeEntries });\n }\n\n onDeactivate(event, group: DataItem, fromLegend: boolean = false): void {\n const item = Object.assign({}, event);\n if (group) {\n item.series = group.name;\n }\n\n this.activeEntries = this.activeEntries.filter(i => {\n if (fromLegend) {\n return i.label !== item.name;\n } else {\n return !(i.name === item.name && i.series === item.series);\n }\n });\n\n this.deactivate.emit({ value: item, entries: this.activeEntries });\n }\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n ContentChild,\n TemplateRef\n} from '@angular/core';\nimport { trigger, style, animate, transition } from '@angular/animations';\nimport { scaleBand, scaleLinear } from 'd3-scale';\n\nimport { calculateViewDimensions } from '../common/view-dimensions.helper';\nimport { ColorHelper } from '../common/color.helper';\nimport { Series } from '../models/chart-data.model';\nimport { BaseChartComponent } from '../common/base-chart.component';\nimport { ViewDimensions, LegendPosition, ScaleType, LegendOptions } from '../common/types';\n\n@Component({\n selector: 'ngx-charts-bar-vertical-normalized',\n template: `\n <ngx-charts-chart\n [view]=\"[width, height]\"\n [showLegend]=\"legend\"\n [legendOptions]=\"legendOptions\"\n [activeEntries]=\"activeEntries\"\n [animations]=\"animations\"\n (legendLabelActivate)=\"onActivate($event, undefined, true)\"\n (legendLabelDeactivate)=\"onDeactivate($event, undefined, true)\"\n (legendLabelClick)=\"onClick($event)\"\n >\n <svg:g [attr.transform]=\"transform\" class=\"bar-chart chart\">\n <svg:g\n ngx-charts-x-axis\n *ngIf=\"xAxis\"\n [xScale]=\"xScale\"\n [dims]=\"dims\"\n [showLabel]=\"showXAxisLabel\"\n [labelText]=\"xAxisLabel\"\n [trimTicks]=\"trimXAxisTicks\"\n [rotateTicks]=\"rotateXAxisTicks\"\n [maxTickLength]=\"maxXAxisTickLength\"\n [tickFormatting]=\"xAxisTickFormatting\"\n [ticks]=\"xAxisTicks\"\n (dimensionsChanged)=\"updateXAxisHeight($event)\"\n ></svg:g>\n <svg:g\n ngx-charts-y-axis\n *ngIf=\"yAxis\"\n [yScale]=\"yScale\"\n [dims]=\"dims\"\n [showGridLines]=\"showGridLines\"\n [showLabel]=\"showYAxisLabel\"\n [labelText]=\"yAxisLabel\"\n [trimTicks]=\"trimYAxisTicks\"\n [maxTickLength]=\"maxYAxisTickLength\"\n [tickFormatting]=\"yAxisTickFormatting\"\n [ticks]=\"yAxisTicks\"\n (dimensionsChanged)=\"updateYAxisWidth($event)\"\n ></svg:g>\n <svg:g\n *ngFor=\"let group of results; trackBy: trackBy\"\n [@animationState]=\"'active'\"\n [attr.transform]=\"groupTransform(group)\"\n >\n <svg:g\n ngx-charts-series-vertical\n type=\"normalized\"\n [xScale]=\"xScale\"\n [yScale]=\"yScale\"\n [activeEntries]=\"activeEntries\"\n [colors]=\"colors\"\n [series]=\"group.series\"\n [dims]=\"dims\"\n [gradient]=\"gradient\"\n [tooltipDisabled]=\"tooltipDisabled\"\n [tooltipTemplate]=\"tooltipTemplate\"\n [seriesName]=\"group.name\"\n [animations]=\"animations\"\n [noBarWhenZero]=\"noBarWhenZero\"\n (select)=\"onClick($event, group)\"\n (activate)=\"onActivate($event, group)\"\n (deactivate)=\"onDeactivate($event, group)\"\n />\n </svg:g>\n </svg:g>\n </ngx-charts-chart>\n `,\n styleUrls: ['../common/base-chart.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [\n trigger('animationState', [\n transition(':leave', [\n style({\n opacity: 1,\n transform: '*'\n }),\n animate(500, style({ opacity: 0, transform: 'scale(0)' }))\n ])\n ])\n ]\n})\nexport class BarVerticalNormalizedComponent extends BaseChartComponent {\n @Input() legend: boolean = false;\n @Input() legendTitle: string = 'Legend';\n @Input() legendPosition: LegendPosition = LegendPosition.Right;\n @Input() xAxis;\n @Input() yAxis;\n @Input() showXAxisLabel: boolean;\n @Input() showYAxisLabel: boolean;\n @Input() xAxisLabel: string;\n @Input() yAxisLabel: string;\n @Input() tooltipDisabled: boolean = false;\n @Input() gradient: boolean;\n @Input() showGridLines: boolean = true;\n @Input() activeEntries: any[] = [];\n @Input() schemeType: ScaleType;\n @Input() trimXAxisTicks: boolean = true;\n @Input() trimYAxisTicks: boolean = true;\n @Input() rotateXAxisTicks: boolean = true;\n @Input() maxXAxisTickLength: number = 16;\n @Input() maxYAxisTickLength: number = 16;\n @Input() xAxisTickFormatting: any;\n @Input() yAxisTickFormatting: any;\n @Input() xAxisTicks: any[];\n @Input() yAxisTicks: any[];\n @Input() barPadding: number = 8;\n @Input() roundDomains: boolean = false;\n @Input() noBarWhenZero: boolean = true;\n\n @Output() activate: EventEmitter<any> = new EventEmitter();\n @Output() deactivate: EventEmitter<any> = new EventEmitter();\n\n @ContentChild('tooltipTemplate') tooltipTemplate: TemplateRef<any>;\n\n dims: ViewDimensions;\n groupDomain: string[];\n innerDomain: string[];\n valueDomain: [number, number] = [0, 100];\n xScale: any;\n yScale: any;\n transform: string;\n colors: ColorHelper;\n margin: number[] = [10, 20, 10, 20];\n xAxisHeight: number = 0;\n yAxisWidth: number = 0;\n legendOptions: LegendOptions;\n\n update(): void {\n super.update();\n\n this.dims = calculateViewDimensions({\n width: this.width,\n height: this.height,\n margins: this.margin,\n showXAxis: this.xAxis,\n showYAxis: this.yAxis,\n xAxisHeight: this.xAxisHeight,\n yAxisWidth: this.yAxisWidth,\n showXLabel: this.showXAxisLabel,\n showYLabel: this.showYAxisLabel,\n showLegend: this.legend,\n legendType: this.schemeType,\n legendPosition: this.legendPosition\n });\n\n this.formatDates();\n\n this.groupDomain = this.getGroupDomain();\n this.innerDomain = this.getInnerDomain();\n\n this.xScale = this.getXScale();\n this.yScale = this.getYScale();\n\n this.setColors();\n this.legendOptions = this.getLegendOptions();\n\n this.transform = `translate(${this.dims.xOffset} , ${this.margin[0]})`;\n }\n\n getGroupDomain(): string[] {\n const domain = [];\n for (const group of this.results) {\n if (!domain.includes(group.label)) {\n domain.push(group.label);\n }\n }\n\n return domain;\n }\n\n getInnerDomain(): string[] {\n const domain = [];\n for (const group of this.results) {\n for (const d of group.series) {\n if (!domain.includes(d.label)) {\n domain.push(d.label);\n }\n }\n }\n\n return domain;\n }\n\n getXScale(): any {\n const spacing = this.groupDomain.length / (this.dims.width / this.barPadding + 1);\n\n return scaleBand().rangeRound([0, this.dims.width]).paddingInner(spacing).domain(this.groupDomain);\n }\n\n getYScale(): any {\n const scale = scaleLinear().range([this.dims.height, 0]).domain(this.valueDomain);\n return this.roundDomains ? scale.nice() : scale;\n }\n\n groupTransform(group: Series): string {\n return `translate(${this.xScale(group.name)}, 0)`;\n }\n\n onClick(data, group?: Series) {\n if (group) {\n data.series = group.name;\n }\n\n this.select.emit(data);\n }\n\n trackBy(index: number, item: Series): any {\n return item.name;\n }\n\n setColors(): void {\n let domain;\n if (this.schemeType === ScaleType.Ordinal) {\n domain = this.innerDomain;\n } else {\n domain = this.valueDomain;\n }\n\n this.colors = new ColorHelper(this.scheme, this.schemeType, domain, this.customColors);\n }\n\n getLegendOptions(): LegendOptions {\n const opts = {\n scaleType: this.schemeType as any,\n colors: undefined,\n domain: [],\n title: undefined,\n position: this.legendPosition\n };\n if (opts.scaleType === ScaleType.Ordinal) {\n opts.domain = this.innerDomain;\n opts.colors = this.colors;\n opts.title = this.legendTitle;\n } else {\n opts.domain = this.valueDomain;\n opts.colors = this.colors.scale;\n }\n\n return opts;\n }\n\n updateYAxisWidth({ width }: { width: number }) {\n this.yAxisWidth = width;\n this.update();\n }\n\n updateXAxisHeight({ height }: { height: number }) {\n this.xAxisHeight = height;\n this.update();\n }\n\n onActivate(event, group: Series, fromLegend: boolean = false) {\n const item = Object.assign({}, event);\n if (group) {\n item.series = group.name;\n }\n\n const items = this.results\n .map(g => g.series)\n .flat()\n .filter(i => {\n if (fromLegend) {\n return i.label === item.name;\n } else {\n return i.name === item.name && i.series === item.series;\n }\n });\n\n this.activeEntries = [...items];\n this.activate.emit({ value: item, entries: this.activeEntries });\n }\n\n onDeactivate(event, group: Series, fromLegend: boolean = false) {\n const item = Object.assign({}, event);\n if (group) {\n item.series = group.name;\n }\n\n this.activeEntries = this.activeEntries.filter(i => {\n if (fromLegend) {\n return i.label !== item.name;\n } else {\n return !(i.name === item.name && i.series === item.series);\n }\n });\n\n this.deactivate.emit({ value: item, entries: this.activeEntries });\n }\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n ContentChild,\n TemplateRef\n} from '@angular/core';\nimport { trigger, style, animate, transition } from '@angular/animations';\nimport { scaleBand, scaleLinear } from 'd3-scale';\n\nimport { calculateViewDimensions } from '../common/view-dimensions.helper';\nimport { ColorHelper } from '../common/color.helper';\nimport { Series } from '../models/chart-data.model';\nimport { BaseChartComponent } from '../common/base-chart.component';\nimport { ViewDimensions, LegendPosition, ScaleType, LegendOptions } from '../common/types';\n\n@Component({\n selector: 'ngx-charts-bar-vertical-stacked',\n template: `\n <ngx-charts-chart\n [view]=\"[width, height]\"\n [showLegend]=\"legend\"\n [legendOptions]=\"legendOptions\"\n [activeEntries]=\"activeEntries\"\n [animations]=\"animations\"\n (legendLabelActivate)=\"onActivate($event, undefined, true)\"\n (legendLabelDeactivate)=\"onDeactivate($event, undefined, true)\"\n (legendLabelClick)=\"onClick($event)\"\n >\n <svg:g [attr.transform]=\"transform\" class=\"bar-chart chart\">\n <svg:g\n ngx-charts-x-axis\n *ngIf=\"xAxis\"\n [xScale]=\"xScale\"\n [dims]=\"dims\"\n [showLabel]=\"showXAxisLabel\"\n [labelText]=\"xAxisLabel\"\n [trimTicks]=\"trimXAxisTicks\"\n [rotateTicks]=\"rotateXAxisTicks\"\n [maxTickLength]=\"maxXAxisTickLength\"\n [tickFormatting]=\"xAxisTickFormatting\"\n [ticks]=\"xAxisTicks\"\n [xAxisOffset]=\"dataLabelMaxHeight.negative\"\n (dimensionsChanged)=\"updateXAxisHeight($event)\"\n ></svg:g>\n <svg:g\n ngx-charts-y-axis\n *ngIf=\"yAxis\"\n [yScale]=\"yScale\"\n [dims]=\"dims\"\n [showGridLines]=\"showGridLines\"\n [showLabel]=\"showYAxisLabel\"\n [labelText]=\"yAxisLabel\"\n [trimTicks]=\"trimYAxisTicks\"\n [maxTickLength]=\"maxYAxisTickLength\"\n [tickFormatting]=\"yAxisTickFormatting\"\n [ticks]=\"yAxisTicks\"\n (dimensionsChanged)=\"updateYAxisWidth($event)\"\n ></svg:g>\n <svg:g\n *ngFor=\"let group of results; let index = index; trackBy: trackBy\"\n [@animationState]=\"'active'\"\n [attr.transform]=\"groupTransform(group)\"\n >\n <svg:g\n ngx-charts-series-vertical\n type=\"stacked\"\n [xScale]=\"xScale\"\n [yScale]=\"yScale\"\n [activeEntries]=\"activeEntries\"\n [colors]=\"colors\"\n [series]=\"group.series\"\n [dims]=\"dims\"\n [gradient]=\"gradient\"\n [tooltipDisabled]=\"tooltipDisabled\"\n [tooltipTemplate]=\"tooltipTemplate\"\n [showDataLabel]=\"showDataLabel\"\n [dataLabelFormatting]=\"dataLabelFormatting\"\n [seriesName]=\"group.name\"\n [animations]=\"animations\"\n [noBarWhenZero]=\"noBarWhenZero\"\n (select)=\"onClick($event, group)\"\n (activate)=\"onActivate($event, group)\"\n (deactivate)=\"onDeactivate($event, group)\"\n (dataLabelHeightChanged)=\"onDataLabelMaxHeightChanged($event, index)\"\n />\n </svg:g>\n </svg:g>\n </ngx-charts-chart>\n `,\n styleUrls: ['../common/base-chart.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [\n trigger('animationState', [\n transition(':leave', [\n style({\n opacity: 1,\n transform: '*'\n }),\n animate(500, style({ opacity: 0, transform: 'scale(0)' }))\n ])\n ])\n ]\n})\nexport class BarVerticalStackedComponent extends BaseChartComponent {\n @Input() legend: boolean = false;\n @Input() legendTitle: string = 'Legend';\n @Input() legendPosition: LegendPosition = LegendPosition.Right;\n @Input() xAxis;\n @Input() yAxis;\n @Input() showXAxisLabel: boolean;\n @Input() showYAxisLabel: boolean;\n @Input() xAxisLabel: string;\n @Input() yAxisLabel: string;\n @Input() tooltipDisabled: boolean = false;\n @Input() gradient: boolean;\n @Input() showGridLines: boolean = true;\n @Input() activeEntries: any[] = [];\n @Input() schemeType: ScaleType;\n @Input() trimXAxisTicks: boolean = true;\n @Input() trimYAxisTicks: boolean = true;\n @Input() rotateXAxisTicks: boolean = true;\n @Input() maxXAxisTickLength: number = 16;\n @Input() maxYAxisTickLength: number = 16;\n @Input() xAxisTickFormatting: any;\n @Input() yAxisTickFormatting: any;\n @Input() xAxisTicks: any[];\n @Input() yAxisTicks: any[];\n @Input() barPadding: number = 8;\n @Input() roundDomains: boolean = false;\n @Input() yScaleMax: number;\n @Input() showDataLabel: boolean = false;\n @Input() dataLabelFormatting: any;\n @Input() noBarWhenZero: boolean = true;\n\n @Output() activate: EventEmitter<any> = new EventEmitter();\n @Output() deactivate: EventEmitter<any> = new EventEmitter();\n\n @ContentChild('tooltipTemplate') tooltipTemplate: TemplateRef<any>;\n\n dims: ViewDimensions;\n groupDomain: string[];\n innerDomain: string[];\n valueDomain: [number, number];\n xScale: any;\n yScale: any;\n transform: string;\n tickFormatting: (label: string) => string;\n colors: ColorHelper;\n margin: number[] = [10, 20, 10, 20];\n xAxisHeight: number = 0;\n yAxisWidth: number = 0;\n legendOptions: LegendOptions;\n dataLabelMaxHeight: any = { negative: 0, positive: 0 };\n\n update(): void {\n super.update();\n\n if (!this.showDataLabel) {\n this.dataLabelMaxHeight = { negative: 0, positive: 0 };\n }\n this.margin = [10 + this.dataLabelMaxHeight.positive, 20, 10 + this.dataLabelMaxHeight.negative, 20];\n\n this.dims = calculateViewDimensions({\n width: this.width,\n height: this.height,\n margins: this.margin,\n showXAxis: this.xAxis,\n showYAxis: this.yAxis,\n xAxisHeight: this.xAxisHeight,\n yAxisWidth: this.yAxisWidth,\n showXLabel: this.showXAxisLabel,\n showYLabel: this.showYAxisLabel,\n showLegend: this.legend,\n legendType: this.schemeType,\n legendPosition: this.legendPosition\n });\n\n if (this.showDataLabel) {\n this.dims.height -= this.dataLabelMaxHeight.negative;\n }\n\n this.formatDates();\n\n this.groupDomain = this.getGroupDomain();\n this.innerDomain = this.getInnerDomain();\n this.valueDomain = this.getValueDomain();\n\n this.xScale = this.getXScale();\n this.yScale = this.getYScale();\n\n this.setColors();\n this.legendOptions = this.getLegendOptions();\n\n this.transform = `translate(${this.dims.xOffset} , ${this.margin[0] + this.dataLabelMaxHeight.negative})`;\n }\n\n getGroupDomain(): string[] {\n const domain = [];\n for (const group of this.results) {\n if (!domain.includes(group.label)) {\n domain.push(group.label);\n }\n }\n return domain;\n }\n\n getInnerDomain(): string[] {\n const domain = [];\n for (const group of this.results) {\n for (const d of group.series) {\n if (!domain.includes(d.label)) {\n domain.push(d.label);\n }\n }\n }\n return domain;\n }\n\n getValueDomain(): [number, number] {\n const domain = [];\n let smallest = 0;\n let biggest = 0;\n for (const group of this.results) {\n let smallestSum = 0;\n let biggestSum = 0;\n for (const d of group.series) {\n if (d.value < 0) {\n smallestSum += d.value;\n } else {\n biggestSum += d.value;\n }\n smallest = d.value < smallest ? d.value : smallest;\n biggest = d.value > biggest ? d.value : biggest;\n }\n domain.push(smallestSum);\n domain.push(biggestSum);\n }\n domain.push(smallest);\n domain.push(biggest);\n\n const min = Math.min(0, ...domain);\n const max = this.yScaleMax ? Math.max(this.yScaleMax, ...domain) : Math.max(...domain);\n return [min, max];\n }\n\n getXScale(): any {\n const spacing = this.groupDomain.length / (this.dims.width / this.barPadding + 1);\n return scaleBand().rangeRound([0, this.dims.width]).paddingInner(spacing).domain(this.groupDomain);\n }\n\n getYScale(): any {\n const scale = scaleLinear().range([this.dims.height, 0]).domain(this.valueDomain);\n return this.roundDomains ? scale.nice() : scale;\n }\n\n onDataLabelMaxHeightChanged(event, groupIndex: number) {\n if (event.size.negative) {\n this.dataLabelMaxHeight.negative = Math.max(this.dataLabelMaxHeight.negative, event.size.height);\n } else {\n this.dataLabelMaxHeight.positive = Math.max(this.dataLabelMaxHeight.positive, event.size.height);\n }\n if (groupIndex === this.results.length - 1) {\n setTimeout(() => this.update());\n }\n }\n\n groupTransform(group: Series): string {\n return `translate(${this.xScale(group.name) || 0}, 0)`;\n }\n\n onClick(data, group?: Series) {\n if (group) {\n data.series = group.name;\n }\n\n this.select.emit(data);\n }\n\n trackBy(index: number, item: Series): any {\n return item.name;\n }\n\n setColors(): void {\n let domain;\n if (this.schemeType === ScaleType.Ordinal) {\n domain = this.innerDomain;\n } else {\n domain = this.valueDomain;\n }\n\n this.colors = new ColorHelper(this.scheme, this.schemeType, domain, this.customColors);\n }\n\n getLegendOptions(): LegendOptions {\n const opts = {\n scaleType: this.schemeType as any,\n colors: undefined,\n domain: [],\n title: undefined,\n position: this.legendPosition\n };\n if (opts.scaleType === ScaleType.Ordinal) {\n opts.domain = this.innerDomain;\n opts.colors = this.colors;\n opts.title = this.legendTitle;\n } else {\n opts.domain = this.valueDomain;\n opts.colors = this.colors.scale;\n }\n\n return opts;\n }\n\n updateYAxisWidth({ width }: { width: number }): void {\n this.yAxisWidth = width;\n this.update();\n }\n\n updateXAxisHeight({ height }: { height: number }): void {\n this.xAxisHeight = height;\n this.update();\n }\n\n onActivate(event, group, fromLegend: boolean = false): void {\n const item = Object.assign({}, event);\n if (group) {\n item.series = group.name;\n }\n\n const items = this.results\n .map(g => g.series)\n .flat()\n .filter(i => {\n if (fromLegend) {\n return i.label === item.name;\n } else {\n return i.name === item.name && i.series === item.series;\n }\n });\n\n this.activeEntries = [...items];\n this.activate.emit({ value: item, entries: this.activeEntries });\n }\n\n onDeactivate(event, group: Series, fromLegend: boolean = false) {\n const item = Object.assign({}, event);\n if (group) {\n item.series = group.name;\n }\n\n this.activeEntries = this.activeEntries.filter(i => {\n if (fromLegend) {\n return i.label !== item.name;\n } else {\n return !(i.name === item.name && i.series === item.series);\n }\n });\n\n this.deactivate.emit({ value: item, entries: this.activeEntries });\n }\n}\n","export enum BarChartType {\n Standard = 'standard',\n Normalized = 'normalized',\n Stacked = 'stacked'\n}\n","export enum D0Types {\n positive = 'positive',\n negative = 'negative'\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnChanges,\n SimpleChanges,\n ChangeDetectionStrategy,\n TemplateRef\n} from '@angular/core';\nimport { trigger, style, animate, transition } from '@angular/animations';\nimport { formatLabel, escapeLabel } from '../common/label.helper';\nimport { DataItem, StringOrNumberOrDate, Series } from '../models/chart-data.model';\nimport { ScaleType, ViewDimensions } from '../common/types';\nimport { ColorHelper } from '../common/color.helper';\nimport { PlacementTypes } from '../common/tooltip/position';\nimport { StyleTypes } from '../common/tooltip/style.type';\nimport { BarChartType } from './types/bar-chart-type.enum';\nimport { Bar } from './types/bar.model';\nimport { D0Types } from './types/d0-type.enum';\n\n@Component({\n selector: 'g[ngx-charts-series-horizontal]',\n template: `\n <svg:g\n ngx-charts-bar\n *ngFor=\"let bar of bars; trackBy: trackBy\"\n [@animationState]=\"'active'\"\n [width]=\"bar.width\"\n [height]=\"bar.height\"\n [x]=\"bar.x\"\n [y]=\"bar.y\"\n [fill]=\"bar.color\"\n [stops]=\"bar.gradientStops\"\n [data]=\"bar.data\"\n [orientation]=\"'horizontal'\"\n [roundEdges]=\"bar.roundEdges\"\n (select)=\"click($event)\"\n [gradient]=\"gradient\"\n [isActive]=\"isActive(bar.data)\"\n [ariaLabel]=\"bar.ariaLabel\"\n [animations]=\"animations\"\n (activate)=\"activate.emit($event)\"\n (deactivate)=\"deactivate.emit($event)\"\n ngx-tooltip\n [tooltipDisabled]=\"tooltipDisabled\"\n [tooltipPlacement]=\"tooltipPlacement\"\n [tooltipType]=\"tooltipType\"\n [tooltipTitle]=\"tooltipTemplate ? undefined : bar.tooltipText\"\n [tooltipTemplate]=\"tooltipTemplate\"\n [tooltipContext]=\"bar.data\"\n [noBarWhenZero]=\"noBarWhenZero\"\n ></svg:g>\n <svg:g *ngIf=\"showDataLabel\">\n <svg:g\n ngx-charts-bar-label\n *ngFor=\"let b of barsForDataLabels; let i = index; trackBy: trackDataLabelBy\"\n [barX]=\"b.x\"\n [barY]=\"b.y\"\n [barWidth]=\"b.width\"\n [barHeight]=\"b.height\"\n [value]=\"b.total\"\n [valueFormatting]=\"dataLabelFormatting\"\n [orientation]=\"'horizontal'\"\n (dimensionsChanged)=\"dataLabelWidthChanged.emit({ size: $event, index: i })\"\n />\n </svg:g>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [\n trigger('animationState', [\n transition(':leave', [\n style({\n opacity: 1\n }),\n animate(500, style({ opacity: 0 }))\n ])\n ])\n ]\n})\nexport class SeriesHorizontal implements OnChanges {\n @Input() dims: ViewDimensions;\n @Input() type: BarChartType = BarChartType.Standard;\n @Input() series: DataItem[];\n @Input() xScale;\n @Input() yScale;\n @Input() colors: ColorHelper;\n @Input() tooltipDisabled: boolean = false;\n @Input() gradient: boolean;\n @Input() activeEntries: any[];\n @Input() seriesName: string;\n @Input() tooltipTemplate: TemplateRef<any>;\n @Input() roundEdges: boolean;\n @Input() animations: boolean = true;\n @Input() showDataLabel: boolean = false;\n @Input() dataLabelFormatting: any;\n @Input() noBarWhenZero: boolean = true;\n\n @Output() select: EventEmitter<DataItem> = new EventEmitter();\n @Output() activate = new EventEmitter();\n @Output() deactivate = new EventEmitter();\n @Output() dataLabelWidthChanged: EventEmitter<{ size: Event; index: string }> = new EventEmitter();\n\n tooltipPlacement: PlacementTypes;\n tooltipType: StyleTypes;\n bars: Bar[];\n barsForDataLabels: Array<{ x: number; y: number; width: number; height: number; total: number; series: string }> = [];\n\n ngOnChanges(changes: SimpleChanges): void {\n this.update();\n }\n\n update(): void {\n this.updateTooltipSettings();\n const d0 = {\n [D0Types.positive]: 0,\n [D0Types.negative]: 0\n };\n let d0Type: D0Types;\n d0Type = D0Types.positive;\n let total;\n if (this.type === BarChartType.Normalized) {\n total = this.series.map(d => d.value).reduce((sum, d) => (sum as any) + d, 0);\n }\n const xScaleMin = Math.max(this.xScale.domain()[0], 0);\n\n this.bars = this.series.map(d => {\n let value = d.value as any;\n const label = this.getLabel(d);\n const formattedLabel = formatLabel(label);\n const roundEdges = this.roundEdges;\n d0Type = value > 0 ? D0Types.positive : D0Types.negative;\n\n const bar: any = {\n value,\n label,\n roundEdges,\n data: d,\n formattedLabel\n };\n\n bar.height = this.yScale.bandwidth();\n\n if (this.type === BarChartType.Standard) {\n bar.width = Math.abs(this.xScale(value) - this.xScale(xScaleMin));\n if (value < 0) {\n bar.x = this.xScale(value);\n } else {\n bar.x = this.xScale(xScaleMin);\n }\n bar.y = this.yScale(label);\n } else if (this.type === BarChartType.Stacked) {\n const offset0 = d0[d0Type];\n const offset1 = offset0 + value;\n d0[d0Type] += value;\n\n bar.width = this.xScale(offset1) - this.xScale(offset0);\n bar.x = this.xScale(offset0);\n bar.y = 0;\n bar.offset0 = offset0;\n bar.offset1 = offset1;\n } else if (this.type === BarChartType.Normalized) {\n let offset0 = d0[d0Type];\n let offset1 = offset0 + value;\n d0[d0Type] += value;\n\n if (total > 0) {\n offset0 = (offset0 * 100) / total;\n offset1 = (offset1 * 100) / total;\n } else {\n offset0 = 0;\n offset1 = 0;\n }\n\n bar.width = this.xScale(offset1) - this.xScale(offset0);\n bar.x = this.xScale(offset0);\n bar.y = 0;\n bar.offset0 = offset0;\n bar.offset1 = offset1;\n value = (offset1 - offset0).toFixed(2) + '%';\n }\n\n if (this.colors.scaleType === ScaleType.Ordinal) {\n bar.color = this.colors.getColor(label);\n } else {\n if (this.type === BarChartType.Standard) {\n bar.color = this.colors.getColor(value);\n bar.gradientStops = this.colors.getLinearGradientStops(value);\n } else {\n bar.color = this.colors.getColor(bar.offset1);\n bar.gradientStops = this.colors.getLinearGradientStops(bar.offset1, bar.offset0);\n }\n }\n\n let tooltipLabel = formattedLabel;\n bar.ariaLabel = formattedLabel + ' ' + value.toLocaleString();\n if (this.seriesName) {\n tooltipLabel = `${this.seriesName} • ${formattedLabel}`;\n bar.data.series = this.seriesName;\n bar.ariaLabel = this.seriesName + ' ' + bar.ariaLabel;\n }\n\n bar.tooltipText = this.tooltipDisabled\n ? undefined\n : `\n <span class=\"tooltip-label\">${escapeLabel(tooltipLabel)}</span>\n <span class=\"tooltip-val\">${\n this.dataLabelFormatting ? this.dataLabelFormatting(value) : value.toLocaleString()\n }</span>\n `;\n\n return bar;\n });\n\n this.updateDataLabels();\n }\n\n updateDataLabels(): void {\n if (this.type === BarChartType.Stacked) {\n this.barsForDataLabels = [];\n const section: any = {};\n section.series = this.seriesName;\n const totalPositive = this.series.map(d => d.value).reduce((sum, d) => (d > 0 ? sum + d : sum), 0);\n const totalNegative = this.series.map(d => d.value).reduce((sum, d) => (d < 0 ? sum + d : sum), 0);\n section.total = totalPositive + totalNegative;\n section.x = 0;\n section.y = 0;\n // if total is positive then we show it on the right, otherwise on the left\n if (section.total > 0) {\n section.width = this.xScale(totalPositive);\n } else {\n section.width = this.xScale(totalNegative);\n }\n section.height = this.yScale.bandwidth();\n this.barsForDataLabels.push(section);\n } else {\n this.barsForDataLabels = this.series.map(d => {\n const section: any = {};\n section.series = this.seriesName ? this.seriesName : d.label;\n section.total = d.value;\n section.x = this.xScale(0);\n section.y = this.yScale(d.label);\n section.width = this.xScale(section.total) - this.xScale(0);\n section.height = this.yScale.bandwidth();\n return section;\n });\n }\n }\n\n updateTooltipSettings(): void {\n this.tooltipPlacement = this.tooltipDisabled ? undefined : PlacementTypes.Top;\n this.tooltipType = this.tooltipDisabled ? undefined : StyleTypes.tooltip;\n }\n\n isActive(entry: Series): boolean {\n if (!this.activeEntries) return false;\n const item = this.activeEntries.find(d => {\n return entry.name === d.name && entry.series === d.series;\n });\n return item !== undefined;\n }\n\n getLabel(dataItem: DataItem): StringOrNumberOrDate {\n if (dataItem.label) {\n return dataItem.label;\n }\n return dataItem.name;\n }\n\n trackBy(index: number, bar: Bar): string {\n return bar.label;\n }\n\n trackDataLabelBy(index: number, barLabel: any): string {\n return index + '#' + barLabel.series + '#' + barLabel.total;\n }\n\n click(data: DataItem): void {\n this.select.emit(data);\n }\n}\n","import { Component, Input, Output, EventEmitter, OnChanges, ChangeDetectionStrategy, TemplateRef } from '@angular/core';\nimport { trigger, style, animate, transition } from '@angular/animations';\nimport { formatLabel, escapeLabel } from '../common/label.helper';\nimport { DataItem, StringOrNumberOrDate } from '../models/chart-data.model';\nimport { PlacementTypes } from '../common/tooltip/position';\nimport { StyleTypes } from '../common/tooltip/style.type';\nimport { ScaleType, ViewDimensions } from '../common/types';\nimport { ColorHelper } from '../common/color.helper';\nimport { BarChartType } from './types/bar-chart-type.enum';\nimport { D0Types } from './types/d0-type.enum';\nimport { Bar } from './types/bar.model';\n\n@Component({\n selector: 'g[ngx-charts-series-vertical]',\n template: `\n <svg:g\n ngx-charts-bar\n *ngFor=\"let bar of bars; trackBy: trackBy\"\n [@animationState]=\"'active'\"\n [@.disabled]=\"!animations\"\n [width]=\"bar.width\"\n [height]=\"bar.height\"\n [x]=\"bar.x\"\n [y]=\"bar.y\"\n [fill]=\"bar.color\"\n [stops]=\"bar.gradientStops\"\n [data]=\"bar.data\"\n [orientation]=\"'vertical'\"\n [roundEdges]=\"bar.roundEdges\"\n [gradient]=\"gradient\"\n [ariaLabel]=\"bar.ariaLabel\"\n [isActive]=\"isActive(bar.data)\"\n (select)=\"onClick($event)\"\n (activate)=\"activate.emit($event)\"\n (deactivate)=\"deactivate.emit($event)\"\n ngx-tooltip\n [tooltipDisabled]=\"tooltipDisabled\"\n [tooltipPlacement]=\"tooltipPlacement\"\n [tooltipType]=\"tooltipType\"\n [tooltipTitle]=\"tooltipTemplate ? undefined : bar.tooltipText\"\n [tooltipTemplate]=\"tooltipTemplate\"\n [tooltipContext]=\"bar.data\"\n [noBarWhenZero]=\"noBarWhenZero\"\n [animations]=\"animations\"\n ></svg:g>\n <svg:g *ngIf=\"showDataLabel\">\n <svg:g\n ngx-charts-bar-label\n *ngFor=\"let b of barsForDataLabels; let i = index; trackBy: trackDataLabelBy\"\n [barX]=\"b.x\"\n [barY]=\"b.y\"\n [barWidth]=\"b.width\"\n [barHeight]=\"b.height\"\n [value]=\"b.total\"\n [valueFormatting]=\"dataLabelFormatting\"\n [orientation]=\"'vertical'\"\n (dimensionsChanged)=\"dataLabelHeightChanged.emit({ size: $event, index: i })\"\n />\n </svg:g>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [\n trigger('animationState', [\n transition(':leave', [\n style({\n opacity: 1\n }),\n animate(500, style({ opacity: 0 }))\n ])\n ])\n ]\n})\nexport class SeriesVerticalComponent implements OnChanges {\n @Input() dims: ViewDimensions;\n @Input() type: BarChartType = BarChartType.Standard;\n @Input() series: DataItem[];\n @Input() xScale;\n @Input() yScale;\n @Input() colors: ColorHelper;\n @Input() gradient: boolean;\n @Input() activeEntries: any[];\n @Input() seriesName: string;\n @Input() tooltipDisabled: boolean = false;\n @Input() tooltipTemplate: TemplateRef<any>;\n @Input() roundEdges: boolean;\n @Input() animations: boolean = true;\n @Input() showDataLabel: boolean = false;\n @Input() dataLabelFormatting: any;\n @Input() noBarWhenZero: boolean = true;\n\n @Output() select: EventEmitter<DataItem> = new EventEmitter();\n @Output() activate = new EventEmitter();\n @Output() deactivate = new EventEmitter();\n @Output() dataLabelHeightChanged = new EventEmitter();\n\n tooltipPlacement: PlacementTypes;\n tooltipType: StyleTypes;\n\n bars: Bar[];\n barsForDataLabels: Array<{ x: number; y: number; width: number; height: number; total: number; series: string }> = [];\n\n ngOnChanges(changes): void {\n this.update();\n }\n\n update(): void {\n this.updateTooltipSettings();\n let width;\n if (this.series.length) {\n width = this.xScale.bandwidth();\n }\n width = Math.round(width);\n const yScaleMin = Math.max(this.yScale.domain()[0], 0);\n\n const d0 = {\n [D0Types.positive]: 0,\n [D0Types.negative]: 0\n };\n let d0Type = D0Types.positive;\n\n let total;\n if (this.type === BarChartType.Normalized) {\n total = this.series.map(d => d.value).reduce((sum, d) => sum + d, 0);\n }\n\n this.bars = this.series.map((d, index) => {\n let value = d.value as any;\n const label = this.getLabel(d);\n const formattedLabel = formatLabel(label);\n const roundEdges = this.roundEdges;\n d0Type = value > 0 ? D0Types.positive : D0Types.negative;\n\n const bar: any = {\n value,\n label,\n roundEdges,\n data: d,\n width,\n formattedLabel,\n height: 0,\n x: 0,\n y: 0\n };\n\n if (this.type === BarChartType.Standard) {\n bar.height = Math.abs(this.yScale(value) - this.yScale(yScaleMin));\n bar.x = this.xScale(label);\n\n if (value < 0) {\n bar.y = this.yScale(0);\n } else {\n bar.y = this.yScale(value);\n }\n } else if (this.type === BarChartType.Stacked) {\n const offset0 = d0[d0Type];\n const offset1 = offset0 + value;\n d0[d0Type] += value;\n\n bar.height = this.yScale(offset0) - this.yScale(offset1);\n bar.x = 0;\n bar.y = this.yScale(offset1);\n bar.offset0 = offset0;\n bar.offset1 = offset1;\n } else if (this.type === BarChartType.Normalized) {\n let offset0 = d0[d0Type];\n let offset1 = offset0 + value;\n d0[d0Type] += value;\n\n if (total > 0) {\n offset0 = (offset0 * 100) / total;\n offset1 = (offset1 * 100) / total;\n } else {\n offset0 = 0;\n offset1 = 0;\n }\n\n bar.height = this.yScale(offset0) - this.yScale(offset1);\n bar.x = 0;\n bar.y = this.yScale(offset1);\n bar.offset0 = offset0;\n bar.offset1 = offset1;\n value = (offset1 - offset0).toFixed(2) + '%';\n }\n\n if (this.colors.scaleType === ScaleType.Ordinal) {\n bar.color = this.colors.getColor(label);\n } else {\n if (this.type === BarChartType.Standard) {\n bar.color = this.colors.getColor(value);\n bar.gradientStops = this.colors.getLinearGradientStops(value);\n } else {\n bar.color = this.colors.getColor(bar.offset1);\n bar.gradientStops = this.colors.getLinearGradientStops(bar.offset1, bar.offset0);\n }\n }\n\n let tooltipLabel = formattedLabel;\n bar.ariaLabel = formattedLabel + ' ' + value.toLocaleString();\n if (this.seriesName) {\n tooltipLabel = `${this.seriesName} • ${formattedLabel}`;\n bar.data.series = this.seriesName;\n bar.ariaLabel = this.seriesName + ' ' + bar.ariaLabel;\n }\n\n bar.tooltipText = this.tooltipDisabled\n ? undefined\n : `\n <span class=\"tooltip-label\">${escapeLabel(tooltipLabel)}</span>\n <span class=\"tooltip-val\">${\n this.dataLabelFormatting ? this.dataLabelFormatting(value) : value.toLocaleString()\n }</span>\n `;\n\n return bar;\n });\n\n this.updateDataLabels();\n }\n\n updateDataLabels(): void {\n if (this.type === BarChartType.Stacked) {\n this.barsForDataLabels = [];\n const section: any = {};\n section.series = this.seriesName;\n const totalPositive = this.series.map(d => d.value).reduce((sum, d) => (d > 0 ? sum + d : sum), 0);\n const totalNegative = this.series.map(d => d.value).reduce((sum, d) => (d < 0 ? sum + d : sum), 0);\n section.total = totalPositive + totalNegative;\n section.x = 0;\n section.y = 0;\n if (section.total > 0) {\n section.height = this.yScale(totalPositive);\n } else {\n section.height = this.yScale(totalNegative);\n }\n section.width = this.xScale.bandwidth();\n this.barsForDataLabels.push(section);\n } else {\n this.barsForDataLabels = this.series.map(d => {\n const section: any = {};\n section.series = this.seriesName ? this.seriesName : d.label;\n section.total = d.value;\n section.x = this.xScale(d.label);\n section.y = this.yScale(0);\n section.height = this.yScale(section.total) - this.yScale(0);\n section.width = this.xScale.bandwidth();\n return section;\n });\n }\n }\n\n updateTooltipSettings(): void {\n this.tooltipPlacement = this.tooltipDisabled ? undefined : PlacementTypes.Top;\n this.tooltipType = this.tooltipDisabled ? undefined : StyleTypes.tooltip;\n }\n\n isActive(entry): boolean {\n if (!this.activeEntries) return false;\n const item = this.activeEntries.find(d => {\n return entry.name === d.name && entry.series === d.series;\n });\n return item !== undefined;\n }\n\n onClick(data: DataItem): void {\n this.select.emit(data);\n }\n\n getLabel(dataItem: DataItem): StringOrNumberOrDate {\n if (dataItem.label) {\n return dataItem.label;\n }\n return dataItem.name;\n }\n\n trackBy(index: number, bar: Bar): string {\n return bar.label;\n }\n\n trackDataLabelBy(index: number, barLabel: any): string {\n return index + '#' + barLabel.series + '#' + barLabel.total;\n }\n}\n","import {\n Component,\n Input,\n OnChanges,\n SimpleChanges,\n ChangeDetectionStrategy,\n ElementRef,\n Output,\n EventEmitter\n} from '@angular/core';\nimport { formatLabel } from '../common/label.helper';\n\n@Component({\n selector: 'g[ngx-charts-bar-label]',\n template: `\n <svg:text\n class=\"textDataLabel\"\n alignment-baseline=\"middle\"\n [attr.text-anchor]=\"textAnchor\"\n [attr.transform]=\"transform\"\n [attr.x]=\"x\"\n [attr.y]=\"y\"\n >\n {{ formatedValue }}\n </svg:text>\n `,\n styleUrls: ['./bar-label.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class BarLabelComponent implements OnChanges {\n @Input() value;\n @Input() valueFormatting: any;\n @Input() barX;\n @Input() barY;\n @Input() barWidth;\n @Input() barHeight;\n @Input() orientation;\n\n @Output() dimensionsChanged: EventEmitter<any> = new EventEmitter();\n\n element: any;\n x: number;\n y: number;\n horizontalPadding: number = 2;\n verticalPadding: number = 5;\n formatedValue: string;\n transform: string;\n textAnchor: string;\n\n constructor(element: ElementRef) {\n this.element = element.nativeElement;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n this.update();\n }\n\n getSize(): any {\n const h = this.element.getBoundingClientRect().height;\n const w = this.element.getBoundingClientRect().width;\n return { height: h, width: w, negative: this.value < 0 };\n }\n\n ngAfterViewInit() {\n this.dimensionsChanged.emit(this.getSize());\n }\n\n update(): void {\n if (this.valueFormatting) {\n this.formatedValue = this.valueFormatting(this.value);\n } else {\n this.formatedValue = formatLabel(this.value);\n }\n\n if (this.orientation === 'horizontal') {\n this.x = this.barX + this.barWidth;\n // if the value is negative then it's on the left of the x0.\n // we need to put the data label in front of the bar\n if (this.value < 0) {\n this.x = this.x - this.horizontalPadding;\n this.textAnchor = 'end';\n } else {\n this.x = this.x + this.horizontalPadding;\n this.textAnchor = 'start';\n }\n this.y = this.barY + this.barHeight / 2;\n } else {\n // orientation must be \"vertical\"\n this.x = this.barX + this.barWidth / 2;\n this.y = this.barY + this.barHeight;\n\n if (this.value < 0) {\n this.y = this.y + this.verticalPadding;\n this.textAnchor = 'end';\n } else {\n this.y = this.y - this.verticalPadding;\n this.textAnchor = 'start';\n }\n this.transform = `rotate(-45, ${this.x} , ${this.y})`;\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { ChartCommonModule } from '../common/chart-common.module';\nimport { BarComponent } from './bar.component';\nimport { BarHorizontalComponent } from './bar-horizontal.component';\nimport { BarHorizontal2DComponent } from './bar-horizontal-2d.component';\nimport { BarHorizontalNormalizedComponent } from './bar-horizontal-normalized.component';\nimport { BarHorizontalStackedComponent } from './bar-horizontal-stacked.component';\nimport { BarVerticalComponent } from './bar-vertical.component';\nimport { BarVertical2DComponent } from './bar-vertical-2d.component';\nimport { BarVerticalNormalizedComponent } from './bar-vertical-normalized.component';\nimport { BarVerticalStackedComponent } from './bar-vertical-stacked.component';\nimport { SeriesHorizontal } from './series-horizontal.component';\nimport { SeriesVerticalComponent } from './series-vertical.component';\nimport { BarLabelComponent } from './bar-label.component';\n\n@NgModule({\n imports: [ChartCommonModule],\n declarations: [\n BarComponent,\n BarHorizontalComponent,\n BarHorizontal2DComponent,\n BarHorizontalNormalizedComponent,\n BarHorizontalStackedComponent,\n BarVerticalComponent,\n BarVertical2DComponent,\n BarVerticalNormalizedComponent,\n BarVerticalStackedComponent,\n BarLabelComponent,\n SeriesHorizontal,\n SeriesVerticalComponent\n ],\n exports: [\n BarComponent,\n BarHorizontalComponent,\n BarHorizontal2DComponent,\n BarHorizontalNormalizedComponent,\n BarHorizontalStackedComponent,\n BarVerticalComponent,\n BarVertical2DComponent,\n BarVerticalNormalizedComponent,\n BarVerticalStackedComponent,\n BarLabelComponent,\n SeriesHorizontal,\n SeriesVerticalComponent\n ]\n})\nexport class BarChartModule {}\n","import { scaleLinear, scalePoint, scaleTime } from 'd3-scale';\nimport { ScaleType } from '../common/types';\n\nexport function getDomain(\n values: any[],\n scaleType: ScaleType,\n autoScale: boolean,\n minVal?: number,\n maxVal?: number\n): number[] {\n let domain: number[] = [];\n if (scaleType === ScaleType.Linear) {\n values = values.map(v => Number(v));\n if (!autoScale) {\n values.push(0);\n }\n }\n\n if (scaleType === ScaleType.Time || scaleType === ScaleType.Linear) {\n const min = minVal ? minVal : Math.min(...values);\n const max = maxVal ? maxVal : Math.max(...values);\n\n domain = [min, max];\n } else {\n domain = values;\n }\n\n return domain;\n}\n\nexport function getScale(domain: number[], range: number[], scaleType: ScaleType, roundDomains: boolean): any {\n let scale: any;\n\n if (scaleType === ScaleType.Time) {\n scale = scaleTime().range(range).domain(domain);\n } else if (scaleType === ScaleType.Linear) {\n scale = scaleLinear().range(range).domain(domain);\n\n if (roundDomains) {\n scale = scale.nice();\n }\n } else if (scaleType === ScaleType.Ordinal) {\n scale = scalePoint().range([range[0], range[1]]).domain(domain);\n }\n\n return scale;\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n HostListener,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n ContentChild,\n TemplateRef\n} from '@angular/core';\nimport { trigger, style, animate, transition } from '@angular/animations';\nimport { scaleLinear } from 'd3-scale';\n\nimport { BaseChartComponent } from '../common/base-chart.component';\nimport { calculateViewDimensions } from '../common/view-dimensions.helper';\nimport { ColorHelper } from '../common/color.helper';\nimport { getScaleType } from '../common/domain.helper';\nimport { getDomain, getScale } from './bubble-chart.utils';\nimport { id } from '../utils/id';\nimport { LegendOptions, LegendPosition, ScaleType, ViewDimensions } from '../common/types';\nimport { BubbleChartSeries } from '../models/chart-data.model';\n\n@Component({\n selector: 'ngx-charts-bubble-chart',\n template: `\n <ngx-charts-chart\n [view]=\"[width, height]\"\n [showLegend]=\"legend\"\n [activeEntries]=\"activeEntries\"\n [legendOptions]=\"legendOptions\"\n [animations]=\"animations\"\n (legendLabelClick)=\"onClick($event)\"\n (legendLabelActivate)=\"onActivate($event)\"\n (legendLabelDeactivate)=\"onDeactivate($event)\"\n >\n <svg:defs>\n <svg:clipPath [attr.id]=\"clipPathId\">\n <svg:rect\n [attr.width]=\"dims.width + 10\"\n [attr.height]=\"dims.height + 10\"\n [attr.transform]=\"'translate(-5, -5)'\"\n />\n </svg:clipPath>\n </svg:defs>\n <svg:g [attr.transform]=\"transform\" class=\"bubble-chart chart\">\n <svg:g\n ngx-charts-x-axis\n *ngIf=\"xAxis\"\n [showGridLines]=\"showGridLines\"\n [dims]=\"dims\"\n [xScale]=\"xScale\"\n [showLabel]=\"showXAxisLabel\"\n [labelText]=\"xAxisLabel\"\n [trimTicks]=\"trimXAxisTicks\"\n [rotateTicks]=\"rotateXAxisTicks\"\n [maxTickLength]=\"maxXAxisTickLength\"\n [tickFormatting]=\"xAxisTickFormatting\"\n [ticks]=\"xAxisTicks\"\n (dimensionsChanged)=\"updateXAxisHeight($event)\"\n />\n <svg:g\n ngx-charts-y-axis\n *ngIf=\"yAxis\"\n [showGridLines]=\"showGridLines\"\n [yScale]=\"yScale\"\n [dims]=\"dims\"\n [showLabel]=\"showYAxisLabel\"\n [labelText]=\"yAxisLabel\"\n [trimTicks]=\"trimYAxisTicks\"\n [maxTickLength]=\"maxYAxisTickLength\"\n [tickFormatting]=\"yAxisTickFormatting\"\n [ticks]=\"yAxisTicks\"\n (dimensionsChanged)=\"updateYAxisWidth($event)\"\n />\n <svg:rect\n class=\"bubble-chart-area\"\n x=\"0\"\n y=\"0\"\n [attr.width]=\"dims.width\"\n [attr.height]=\"dims.height\"\n style=\"fill: rgb(255, 0, 0); opacity: 0; cursor: 'auto';\"\n (mouseenter)=\"deactivateAll()\"\n />\n <svg:g [attr.clip-path]=\"clipPath\">\n <svg:g *ngFor=\"let series of data; trackBy: trackBy\" [@animationState]=\"'active'\">\n <svg:g\n ngx-charts-bubble-series\n [xScale]=\"xScale\"\n [yScale]=\"yScale\"\n [rScale]=\"rScale\"\n [xScaleType]=\"xScaleType\"\n [yScaleType]=\"yScaleType\"\n [xAxisLabel]=\"xAxisLabel\"\n [yAxisLabel]=\"yAxisLabel\"\n [colors]=\"colors\"\n [data]=\"series\"\n [activeEntries]=\"activeEntries\"\n [tooltipDisabled]=\"tooltipDisabled\"\n [tooltipTemplate]=\"tooltipTemplate\"\n (select)=\"onClick($event, series)\"\n (activate)=\"onActivate($event)\"\n (deactivate)=\"onDeactivate($event)\"\n />\n </svg:g>\n </svg:g>\n </svg:g>\n </ngx-charts-chart>\n `,\n styleUrls: ['../common/base-chart.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n animations: [\n trigger('animationState', [\n transition(':leave', [\n style({\n opacity: 1\n }),\n animate(\n 500,\n style({\n opacity: 0\n })\n )\n ])\n ])\n ]\n})\nexport class BubbleChartComponent extends BaseChartComponent {\n @Input() showGridLines: boolean = true;\n @Input() legend = false;\n @Input() legendTitle: string = 'Legend';\n @Input() legendPosition: LegendPosition = LegendPosition.Right;\n @Input() xAxis: boolean = true;\n @Input() yAxis: boolean = true;\n @Input() showXAxisLabel: boolean;\n @Input() showYAxisLabel: boolean;\n @Input() xAxisLabel: string;\n @Input() yAxisLabel: string;\n @Input() trimXAxisTicks: boolean = true;\n @Input() trimYAxisTicks: boolean = true;\n @Input() rotateXAxisTicks: boolean = true;\n @Input() maxXAxisTickLength: number = 16;\n @Input() maxYAxisTickLength: number = 16;\n @Input() xAxisTickFormatting: any;\n @Input() yAxisTickFormatting: any;\n @Input() xAxisTicks: any[];\n @Input() yAxisTicks: any[];\n @Input() roundDomains: boolean = false;\n @Input() maxRadius: number = 10;\n @Input() minRadius: number = 3;\n @Input() autoScale: boolean;\n @Input() schemeType: ScaleType = ScaleType.Ordinal;\n @Input() tooltipDisabled: boolean = false;\n @Input() xScaleMin: number;\n @Input() xScaleMax: number;\n @Input() yScaleMin: number;\n @Input() yScaleMax: number;\n\n @Output() activate: EventEmitter<any> = new EventEmitter();\n @Output() deactivate: EventEmitter<any> = new EventEmitter();\n\n @ContentChild('tooltipTemplate') tooltipTemplate: TemplateRef<any>;\n\n dims: ViewDimensions;\n colors: ColorHelper;\n scaleType: ScaleType = ScaleType.Linear;\n margin: number[] = [10, 20, 10, 20];\n bubblePadding: number[] = [0, 0, 0, 0];\n data: BubbleChartSeries[];\n\n legendOptions: LegendOptions;\n transform: string;\n\n clipPath: string;\n clipPathId: string;\n\n seriesDomain: number[];\n xDomain: number[];\n yDomain: number[];\n rDomain: number[];\n\n xScaleType: ScaleType;\n yScaleType: ScaleType;\n\n yScale: any;\n xScale: any;\n rScale: any;\n\n xAxisHeight: number = 0;\n yAxisWidth: number = 0;\n\n activeEntries: any[] = [];\n\n update(): void {\n super.update();\n\n this.dims = calculateViewDimensions({\n width: this.width,\n height: this.height,\n margins: this.margin,\n showXAxis: this.xAxis,\n showYAxis: this.yAxis,\n xAxisHeight: this.xAxisHeight,\n yAxisWidth: this.yAxisWidth,\n showXLabel: this.showXAxisLabel,\n showYLabel: this.showYAxisLabel,\n showLegend: this.legend,\n legendType: this.schemeType,\n legendPosition: this.legendPosition\n });\n\n this.seriesDomain = this.results.map(d => d.name);\n this.rDomain = this.getRDomain();\n this.xDomain = this.getXDomain();\n this.yDomain = this.getYDomain();\n\n this.transform = `translate(${this.dims.xOffset},${this.margin[0]})`;\n\n const colorDomain = this.schemeType === ScaleType.Ordinal ? this.seriesDomain : this.rDomain;\n this.colors = new ColorHelper(this.scheme, this.schemeType, colorDomain, this.customColors);\n\n this.data = this.results;\n\n this.minRadius = Math.max(this.minRadius, 1);\n this.maxRadius = Math.max(this.maxRadius, 1);\n\n this.rScale = this.getRScale(this.rDomain, [this.minRadius, this.maxRadius]);\n\n this.bubblePadding = [0, 0, 0, 0];\n this.setScales();\n\n this.bubblePadding = this.getBubblePadding();\n this.setScales();\n\n this.legendOptions = this.getLegendOptions();\n\n this.clipPathId = 'clip' + id().toString();\n this.clipPath = `url(#${this.clipPathId})`;\n }\n\n @HostListener('mouseleave')\n hideCircles(): void {\n this.deactivateAll();\n }\n\n onClick(data, series?): void {\n if (series) {\n data.series = series.name;\n }\n\n this.select.emit(data);\n }\n\n getBubblePadding(): number[] {\n let yMin = 0;\n let xMin = 0;\n let yMax = this.dims.height;\n let xMax = this.dims.width;\n\n for (const s of this.data) {\n for (const d of s.series) {\n const r = this.rScale(d.r);\n const cx = this.xScaleType === ScaleType.Linear ? this.xScale(Number(d.x)) : this.xScale(d.x);\n const cy = this.yScaleType === ScaleType.Linear ? this.yScale(Number(d.y)) : this.yScale(d.y);\n xMin = Math.max(r - cx, xMin);\n yMin = Math.max(r - cy, yMin);\n yMax = Math.max(cy + r, yMax);\n xMax = Math.max(cx + r, xMax);\n }\n }\n\n xMax = Math.max(xMax - this.dims.width, 0);\n yMax = Math.max(yMax - this.dims.height, 0);\n\n return [yMin, xMax, yMax, xMin];\n }\n\n setScales() {\n let width = this.dims.width;\n if (this.xScaleMin === undefined && this.xScaleMax === undefined) {\n width = width - this.bubblePadding[1];\n }\n let height = this.dims.height;\n if (this.yScaleMin === undefined && this.yScaleMax === undefined) {\n height = height - this.bubblePadding[2];\n }\n this.xScale = this.getXScale(this.xDomain, width);\n this.yScale = this.getYScale(this.yDomain, height);\n }\n\n getYScale(domain, height: number): any {\n return getScale(domain, [height, this.bubblePadding[0]], this.yScaleType, this.roundDomains);\n }\n\n getXScale(domain, width: number): any {\n return getScale(domain, [this.bubblePadding[3], width], this.xScaleType, this.roundDomains);\n }\n\n getRScale(domain, range): any {\n const scale = scaleLinear().range(range).domain(domain);\n\n return this.roundDomains ? scale.nice() : scale;\n }\n\n getLegendOptions(): LegendOptions {\n const opts = {\n scaleType: this.schemeType as any,\n colors: undefined,\n domain: [],\n position: this.legendPosition,\n title: undefined\n };\n\n if (opts.scaleType === ScaleType.Ordinal) {\n opts.domain = this.seriesDomain;\n opts.colors = this.colors;\n opts.title = this.legendTitle;\n } else {\n opts.domain = this.rDomain;\n opts.colors = this.colors.scale;\n }\n\n return opts;\n }\n\n getXDomain(): number[] {\n const values = [];\n\n for (const results of this.results) {\n for (const d of results.series) {\n if (!values.includes(d.x)) {\n values.push(d.x);\n }\n }\n }\n\n this.xScaleType = getScaleType(values);\n return getDomain(values, this.xScaleType, this.autoScale, this.xScaleMin, this.xScaleMax);\n }\n\n getYDomain(): number[] {\n const values = [];\n\n for (const results of this.results) {\n for (const d of results.series) {\n if (!values.includes(d.y)) {\n values.push(d.y);\n }\n }\n }\n\n this.yScaleType = getScaleType(values);\n return getDomain(values, this.yScaleType, this.autoScale, this.yScaleMin, this.yScaleMax);\n }\n\n getRDomain(): [number, number] {\n let min = Infinity;\n let max = -Infinity;\n\n for (const results of this.results) {\n for (const d of results.series) {\n const value = Number(d.r) || 1;\n min = Math.min(min, value);\n max = Math.max(max, value);\n }\n }\n\n return [min, max];\n }\n\n updateYAxisWidth({ width }: { width: number }): void {\n this.yAxisWidth = width;\n this.update();\n }\n\n updateXAxisHeight({ height }: { height: number }): void {\n this.xAxisHeight = height;\n this.update();\n }\n\n onActivate(item): void {\n const idx = this.activeEntries.findIndex(d => {\n return d.name === item.name;\n });\n if (idx > -1) {\n return;\n }\n\n this.activeEntries = [item, ...this.activeEntries];\n this.activate.emit({ value: item, entries: this.activeEntries });\n }\n\n onDeactivate(item): void {\n const idx = this.activeEntries.findIndex(d => {\n return d.name === item.name;\n });\n\n this.activeEntries.splice(idx, 1);\n this.activeEntries = [...this.activeEntries];\n\n this.deactivate.emit({ value: item, entries: this.activeEntries });\n }\n\n deactivateAll(): void {\n this.activeEntries = [...this.activeEntries];\n for (const entry of this.activeEntries) {\n this.deactivate.emit({ value: entry, entries: [] });\n }\n this.activeEntries = [];\n }\n\n trackBy(index: number, item): string {\n return item.name;\n }\n}\n","import {\n Component,\n Input,\n Output,\n SimpleChanges,\n EventEmitter,\n OnChanges,\n ChangeDetectionStrategy,\n TemplateRef\n} from '@angular/core';\nimport { trigger, style, animate, transition } from '@angular/animations';\nimport { formatLabel, escapeLabel } from '../common/label.helper';\nimport { ScaleType } from '../common/types';\nimport { ColorHelper } from '../common/color.helper';\nimport { BubbleChartSeries } from '../models/chart-data.model';\n\n@Component({\n selector: 'g[ngx-charts-bubble-series]',\n template: `\n <svg:g *ngFor=\"let circle of circles; trackBy: trackBy\">\n <svg:g [attr.transform]=\"circle.transform\">\n <svg:g\n ngx-charts-circle\n [@animationState]=\"'active'\"\n class=\"circle\"\n [cx]=\"0\"\n [cy]=\"0\"\n [r]=\"circle.radius\"\n [fill]=\"circle.color\"\n [style.opacity]=\"circle.opacity\"\n [class.active]=\"circle.isActive\"\n [pointerEvents]=\"'all'\"\n [data]=\"circle.value\"\n [classNames]=\"circle.classNames\"\n (select)=\"onClick(circle.data)\"\n (activate)=\"activateCircle(circle)\"\n (deactivate)=\"deactivateCircle(circle)\"\n ngx-tooltip\n [tooltipDisabled]=\"tooltipDisabled\"\n [tooltipPlacement]=\"'top'\"\n [tooltipType]=\"'tooltip'\"\n [tooltipTitle]=\"tooltipTemplate ? undefined : getTooltipText(circle)\"\n [tooltipTemplate]=\"tooltipTemplate\"\n [tooltipContext]=\"circle.data\"\n />\n </svg:g>\n </svg:g>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [\n trigger('animationState', [\n transition(':enter', [\n style({\n opacity: 0,\n transform: 'scale(0)'\n }),\n animate(250, style({ opacity: 1, transform: 'scale(1)' }))\n ])\n ])\n ]\n})\nexport class BubbleSeriesComponent implements OnChanges {\n @Input() data: BubbleChartSeries;\n @Input() xScale;\n @Input() yScale;\n @Input() rScale;\n @Input() xScaleType: ScaleType;\n @Input() yScaleType: ScaleType;\n @Input() colors: ColorHelper;\n @Input() visibleValue;\n @Input() activeEntries: any[];\n @Input() xAxisLabel: string;\n @Input() yAxisLabel: string;\n @Input() tooltipDisabled: boolean = false;\n @Input() tooltipTemplate: TemplateRef<any>;\n\n @Output() select = new EventEmitter();\n @Output() activate = new EventEmitter();\n @Output() deactivate = new EventEmitter();\n\n areaPath: any;\n circles: any[]; // TODO type this\n\n ngOnChanges(changes: SimpleChanges): void {\n this.update();\n }\n\n update(): void {\n this.circles = this.getCircles();\n }\n\n getCircles(): any[] {\n const seriesName = this.data.name;\n\n return this.data.series\n .map((d, i) => {\n if (typeof d.y !== 'undefined' && typeof d.x !== 'undefined') {\n const y = d.y;\n const x = d.x;\n const r = d.r;\n\n const radius = this.rScale(r || 1);\n const tooltipLabel = formatLabel(d.name);\n\n const cx = this.xScaleType === ScaleType.Linear ? this.xScale(Number(x)) : this.xScale(x);\n const cy = this.yScaleType === ScaleType.Linear ? this.yScale(Number(y)) : this.yScale(y);\n\n const color =\n this.colors.scaleType === ScaleType.Linear ? this.colors.getColor(r) : this.colors.getColor(seriesName);\n\n const isActive = !this.activeEntries.length ? true : this.isActive({ name: seriesName });\n const opacity = isActive ? 1 : 0.3;\n\n const data = Object.assign({}, d, {\n series: seriesName,\n name: d.name,\n value: d.y,\n x: d.x,\n radius: d.r\n });\n\n return {\n data,\n x,\n y,\n r,\n classNames: [`circle-data-${i}`],\n value: y,\n label: x,\n cx,\n cy,\n radius,\n tooltipLabel,\n color,\n opacity,\n seriesName,\n isActive,\n transform: `translate(${cx},${cy})`\n };\n }\n })\n .filter(circle => circle !== undefined);\n }\n\n getTooltipText(circle): string {\n const hasRadius = typeof circle.r !== 'undefined';\n const hasTooltipLabel = circle.tooltipLabel && circle.tooltipLabel.length;\n const hasSeriesName = circle.seriesName && circle.seriesName.length;\n\n const radiusValue = hasRadius ? formatLabel(circle.r) : '';\n const xAxisLabel = this.xAxisLabel && this.xAxisLabel !== '' ? `${this.xAxisLabel}:` : '';\n const yAxisLabel = this.yAxisLabel && this.yAxisLabel !== '' ? `${this.yAxisLabel}:` : '';\n const x = formatLabel(circle.x);\n const y = formatLabel(circle.y);\n const name =\n hasSeriesName && hasTooltipLabel\n ? `${circle.seriesName} • ${circle.tooltipLabel}`\n : circle.seriesName + circle.tooltipLabel;\n const tooltipTitle =\n hasSeriesName || hasTooltipLabel ? `<span class=\"tooltip-label\">${escapeLabel(name)}</span>` : '';\n\n return `\n ${tooltipTitle}\n <span class=\"tooltip-label\">\n <label>${escapeLabel(xAxisLabel)}</label> ${escapeLabel(x)}<br />\n <label>${escapeLabel(yAxisLabel)}</label> ${escapeLabel(y)}\n </span>\n <span class=\"tooltip-val\">\n ${escapeLabel(radiusValue)}\n </span>\n `;\n }\n\n onClick(data): void {\n this.select.emit(data);\n }\n\n isActive(entry): boolean {\n if (!this.activeEntries) return false;\n const item = this.activeEntries.find(d => {\n return entry.name === d.name;\n });\n return item !== undefined;\n }\n\n isVisible(circle): boolean {\n if (this.activeEntries.length > 0) {\n return this.isActive({ name: circle.seriesName });\n }\n\n return circle.opacity !== 0;\n }\n\n activateCircle(circle): void {\n circle.barVisible = true;\n this.activate.emit({ name: this.data.name });\n }\n\n deactivateCircle(circle): void {\n circle.barVisible = false;\n this.deactivate.emit({ name: this.data.name });\n }\n\n trackBy(index, circle): string {\n return `${circle.data.series} ${circle.data.name}`;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { ChartCommonModule } from '../common/chart-common.module';\nimport { BubbleChartComponent } from './bubble-chart.component';\nimport { BubbleSeriesComponent } from './bubble-series.component';\n\n@NgModule({\n imports: [ChartCommonModule],\n declarations: [BubbleChartComponent, BubbleSeriesComponent],\n exports: [BubbleChartComponent, BubbleSeriesComponent]\n})\nexport class BubbleChartModule {}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n SimpleChanges,\n ElementRef,\n OnChanges,\n ChangeDetectionStrategy,\n HostListener\n} from '@angular/core';\nimport { select } from 'd3-selection';\nimport { Gradient } from '../common/types';\n\nimport { id } from '../utils/id';\n\n@Component({\n selector: 'g[ngx-charts-heat-map-cell]',\n template: `\n <svg:g [attr.transform]=\"transform\" class=\"cell\">\n <defs *ngIf=\"gradient\">\n <svg:g ngx-charts-svg-linear-gradient orientation=\"vertical\" [name]=\"gradientId\" [stops]=\"gradientStops\" />\n </defs>\n <svg:rect\n [attr.fill]=\"gradient ? gradientUrl : fill\"\n rx=\"3\"\n [attr.width]=\"width\"\n [attr.height]=\"height\"\n class=\"cell\"\n style=\"cursor: pointer\"\n (click)=\"onClick()\"\n />\n </svg:g>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class HeatMapCellComponent implements OnChanges {\n @Input() fill: string;\n @Input() x: number;\n @Input() y: number;\n @Input() width: number;\n @Input() height: number;\n @Input() data: number;\n @Input() gradient: boolean = false;\n @Input() animations: boolean = true;\n\n @Output() select: EventEmitter<number> = new EventEmitter();\n @Output() activate: EventEmitter<number> = new EventEmitter();\n @Output() deactivate: EventEmitter<number> = new EventEmitter();\n\n element: HTMLElement;\n transform: string;\n startOpacity: number;\n gradientId: string;\n gradientUrl: string;\n gradientStops: Gradient[];\n\n constructor(element: ElementRef) {\n this.element = element.nativeElement;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n this.transform = `translate(${this.x} , ${this.y})`;\n\n this.startOpacity = 0.3;\n this.gradientId = 'grad' + id().toString();\n this.gradientUrl = `url(#${this.gradientId})`;\n this.gradientStops = this.getGradientStops();\n\n if (this.animations) {\n this.loadAnimation();\n }\n }\n\n getGradientStops(): Gradient[] {\n return [\n {\n offset: 0,\n color: this.fill,\n opacity: this.startOpacity\n },\n {\n offset: 100,\n color: this.fill,\n opacity: 1\n }\n ];\n }\n\n loadAnimation(): void {\n const node = select(this.element).select('.cell');\n node.attr('opacity', 0);\n this.animateToCurrentForm();\n }\n\n animateToCurrentForm(): void {\n const node = select(this.element).select('.cell');\n\n node.transition().duration(750).attr('opacity', 1);\n }\n\n onClick(): void {\n this.select.emit(this.data);\n }\n\n @HostListener('mouseenter')\n onMouseEnter(): void {\n this.activate.emit(this.data);\n }\n\n @HostListener('mouseleave')\n onMouseLeave(): void {\n this.deactivate.emit(this.data);\n }\n}\n","import {\n Component,\n Input,\n SimpleChanges,\n Output,\n EventEmitter,\n OnChanges,\n OnInit,\n ChangeDetectionStrategy,\n TemplateRef\n} from '@angular/core';\nimport { formatLabel, escapeLabel } from '../common/label.helper';\nimport { DataItem, Series } from '../models/chart-data.model';\n\ninterface Cell {\n cell: DataItem;\n data: number;\n fill: string;\n height: number;\n label: string;\n row: Series;\n series: string;\n width: number;\n x: number;\n y: number;\n}\n@Component({\n selector: 'g[ngx-charts-heat-map-cell-series]',\n template: `\n <svg:g\n ngx-charts-heat-map-cell\n *ngFor=\"let c of cells; trackBy: trackBy\"\n [x]=\"c.x\"\n [y]=\"c.y\"\n [width]=\"c.width\"\n [height]=\"c.height\"\n [fill]=\"c.fill\"\n [data]=\"c.data\"\n (select)=\"onClick(c.cell)\"\n (activate)=\"activate.emit(c.cell)\"\n (deactivate)=\"deactivate.emit(c.cell)\"\n [gradient]=\"gradient\"\n [animations]=\"animations\"\n ngx-tooltip\n [tooltipDisabled]=\"tooltipDisabled\"\n [tooltipPlacement]=\"'top'\"\n [tooltipType]=\"'tooltip'\"\n [tooltipTitle]=\"tooltipTemplate ? undefined : tooltipText(c)\"\n [tooltipTemplate]=\"tooltipTemplate\"\n [tooltipContext]=\"{ series: c.series, name: c.label, value: c.data }\"\n ></svg:g>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class HeatCellSeriesComponent implements OnChanges, OnInit {\n @Input() data;\n @Input() colors;\n @Input() xScale;\n @Input() yScale;\n @Input() gradient: boolean;\n @Input() tooltipDisabled: boolean = false;\n @Input() tooltipText: any;\n @Input() tooltipTemplate: TemplateRef<any>;\n @Input() animations: boolean = true;\n\n @Output() select: EventEmitter<DataItem> = new EventEmitter();\n @Output() activate: EventEmitter<DataItem> = new EventEmitter();\n @Output() deactivate: EventEmitter<DataItem> = new EventEmitter();\n\n cells: Cell[];\n\n ngOnInit() {\n if (!this.tooltipText) {\n this.tooltipText = this.getTooltipText;\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n this.update();\n }\n\n update(): void {\n this.cells = this.getCells();\n }\n\n getCells(): Cell[] {\n const cells = [];\n\n this.data.map(row => {\n row.series.map(cell => {\n const value = cell.value;\n cell.series = row.name;\n\n cells.push({\n row,\n cell,\n x: this.xScale(row.name),\n y: this.yScale(cell.name),\n width: this.xScale.bandwidth(),\n height: this.yScale.bandwidth(),\n fill: this.colors.getColor(value),\n data: value,\n label: formatLabel(cell.name),\n series: row.name\n });\n });\n });\n\n return cells;\n }\n\n getTooltipText({ label, data, series }: { label: string; data: number; series: string }): string {\n return `\n <span class=\"tooltip-label\">${escapeLabel(series)} • ${escapeLabel(label)}</span>\n <span class=\"tooltip-val\">${data.toLocaleString()}</span>\n `;\n }\n\n trackBy(index: number, item): string {\n return item.label;\n }\n\n onClick(data): void {\n this.select.emit(data);\n }\n}\n","import {\n Component,\n Input,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n ContentChild,\n TemplateRef,\n Output,\n EventEmitter\n} from '@angular/core';\nimport { scaleBand } from 'd3-scale';\n\nimport { BaseChartComponent } from '../common/base-chart.component';\nimport { calculateViewDimensions } from '../common/view-dimensions.helper';\nimport { ColorHelper } from '../common/color.helper';\nimport { getScaleType } from '../common/domain.helper';\nimport { LegendOptions, LegendPosition, ScaleType, ViewDimensions } from '../common/types';\n\ninterface RectItem {\n fill: string;\n height: number;\n rx: number;\n width: number;\n x: number;\n y: number;\n}\n\n@Component({\n selector: 'ngx-charts-heat-map',\n template: `\n <ngx-charts-chart\n [view]=\"[width, height]\"\n [showLegend]=\"legend\"\n [animations]=\"animations\"\n [legendOptions]=\"legendOptions\"\n (legendLabelClick)=\"onClick($event)\"\n >\n <svg:g [attr.transform]=\"transform\" class=\"heat-map chart\">\n <svg:g\n ngx-charts-x-axis\n *ngIf=\"xAxis\"\n [xScale]=\"xScale\"\n [dims]=\"dims\"\n [showLabel]=\"showXAxisLabel\"\n [labelText]=\"xAxisLabel\"\n [trimTicks]=\"trimXAxisTicks\"\n [rotateTicks]=\"rotateXAxisTicks\"\n [maxTickLength]=\"maxXAxisTickLength\"\n [tickFormatting]=\"xAxisTickFormatting\"\n [ticks]=\"xAxisTicks\"\n (dimensionsChanged)=\"updateXAxisHeight($event)\"\n ></svg:g>\n <svg:g\n ngx-charts-y-axis\n *ngIf=\"yAxis\"\n [yScale]=\"yScale\"\n [dims]=\"dims\"\n [showLabel]=\"showYAxisLabel\"\n [labelText]=\"yAxisLabel\"\n [trimTicks]=\"trimYAxisTicks\"\n [maxTickLength]=\"maxYAxisTickLength\"\n [tickFormatting]=\"yAxisTickFormatting\"\n [ticks]=\"yAxisTicks\"\n (dimensionsChanged)=\"updateYAxisWidth($event)\"\n ></svg:g>\n <svg:rect\n *ngFor=\"let rect of rects\"\n [attr.x]=\"rect.x\"\n [attr.y]=\"rect.y\"\n [attr.rx]=\"rect.rx\"\n [attr.width]=\"rect.width\"\n [attr.height]=\"rect.height\"\n [attr.fill]=\"rect.fill\"\n />\n <svg:g\n ngx-charts-heat-map-cell-series\n [xScale]=\"xScale\"\n [yScale]=\"yScale\"\n [colors]=\"colors\"\n [data]=\"results\"\n [gradient]=\"gradient\"\n [animations]=\"animations\"\n [tooltipDisabled]=\"tooltipDisabled\"\n [tooltipTemplate]=\"tooltipTemplate\"\n [tooltipText]=\"tooltipText\"\n (select)=\"onClick($event)\"\n (activate)=\"onActivate($event, undefined)\"\n (deactivate)=\"onDeactivate($event, undefined)\"\n />\n </svg:g>\n </ngx-charts-chart>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: ['../common/base-chart.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class HeatMapComponent extends BaseChartComponent {\n @Input() legend: boolean;\n @Input() legendTitle: string = 'Legend';\n @Input() legendPosition: LegendPosition = LegendPosition.Right;\n @Input() xAxis: boolean;\n @Input() yAxis: boolean;\n @Input() showXAxisLabel: boolean;\n @Input() showYAxisLabel: boolean;\n @Input() xAxisLabel: string;\n @Input() yAxisLabel: string;\n @Input() gradient: boolean;\n @Input() innerPadding: number | number[] = 8;\n @Input() trimXAxisTicks: boolean = true;\n @Input() trimYAxisTicks: boolean = true;\n @Input() rotateXAxisTicks: boolean = true;\n @Input() maxXAxisTickLength: number = 16;\n @Input() maxYAxisTickLength: number = 16;\n @Input() xAxisTickFormatting: any;\n @Input() yAxisTickFormatting: any;\n @Input() xAxisTicks: any[];\n @Input() yAxisTicks: any[];\n @Input() tooltipDisabled: boolean = false;\n @Input() tooltipText: any;\n @Input() min: number;\n @Input() max: number;\n @Input() activeEntries: any[] = [];\n\n @Output() activate: EventEmitter<any> = new EventEmitter();\n @Output() deactivate: EventEmitter<any> = new EventEmitter();\n\n @ContentChild('tooltipTemplate') tooltipTemplate: TemplateRef<any>;\n\n dims: ViewDimensions;\n xDomain: string[];\n yDomain: string[];\n valueDomain: any[];\n xScale: any;\n yScale: any;\n colors: ColorHelper;\n colorScale: any;\n transform: string;\n rects: RectItem[];\n margin: number[] = [10, 20, 10, 20];\n xAxisHeight: number = 0;\n yAxisWidth: number = 0;\n legendOptions: LegendOptions;\n scaleType: ScaleType = ScaleType.Linear;\n\n update(): void {\n super.update();\n\n this.formatDates();\n\n this.xDomain = this.getXDomain();\n this.yDomain = this.getYDomain();\n this.valueDomain = this.getValueDomain();\n\n this.scaleType = getScaleType(this.valueDomain, false);\n\n this.dims = calculateViewDimensions({\n width: this.width,\n height: this.height,\n margins: this.margin,\n showXAxis: this.xAxis,\n showYAxis: this.yAxis,\n xAxisHeight: this.xAxisHeight,\n yAxisWidth: this.yAxisWidth,\n showXLabel: this.showXAxisLabel,\n showYLabel: this.showYAxisLabel,\n showLegend: this.legend,\n legendType: this.scaleType as any,\n legendPosition: this.legendPosition\n });\n\n if (this.scaleType === ScaleType.Linear) {\n let min = this.min;\n let max = this.max;\n if (!this.min) {\n min = Math.min(0, ...this.valueDomain);\n }\n if (!this.max) {\n max = Math.max(...this.valueDomain);\n }\n this.valueDomain = [min, max];\n }\n\n this.xScale = this.getXScale();\n this.yScale = this.getYScale();\n\n this.setColors();\n this.legendOptions = this.getLegendOptions();\n\n this.transform = `translate(${this.dims.xOffset} , ${this.margin[0]})`;\n this.rects = this.getRects();\n }\n\n getXDomain(): string[] {\n const domain = [];\n for (const group of this.results) {\n if (!domain.includes(group.name)) {\n domain.push(group.name);\n }\n }\n\n return domain;\n }\n\n getYDomain(): string[] {\n const domain = [];\n\n for (const group of this.results) {\n for (const d of group.series) {\n if (!domain.includes(d.name)) {\n domain.push(d.name);\n }\n }\n }\n\n return domain;\n }\n\n getValueDomain(): any[] {\n const domain = [];\n\n for (const group of this.results) {\n for (const d of group.series) {\n if (!domain.includes(d.value)) {\n domain.push(d.value);\n }\n }\n }\n\n return domain;\n }\n\n /**\n * Converts the input to gap paddingInner in fraction\n * Supports the following inputs:\n * Numbers: 8\n * Strings: \"8\", \"8px\", \"8%\"\n * Arrays: [8,2], \"8,2\", \"[8,2]\"\n * Mixed: [8,\"2%\"], [\"8px\",\"2%\"], \"8,2%\", \"[8,2%]\"\n *\n * @memberOf HeatMapComponent\n */\n getDimension(value: string | number | Array<string | number>, index: number = 0, N: number, L: number): number {\n if (typeof value === 'string') {\n value = value\n .replace('[', '')\n .replace(']', '')\n .replace('px', '')\n // tslint:disable-next-line: quotemark\n .replace(\"'\", '');\n\n if (value.includes(',')) {\n value = value.split(',');\n }\n }\n if (Array.isArray(value) && typeof index === 'number') {\n return this.getDimension(value[index], null, N, L);\n }\n if (typeof value === 'string' && value.includes('%')) {\n return +value.replace('%', '') / 100;\n }\n return N / (L / +value + 1);\n }\n\n getXScale(): any {\n const f = this.getDimension(this.innerPadding, 0, this.xDomain.length, this.dims.width);\n return scaleBand().rangeRound([0, this.dims.width]).domain(this.xDomain).paddingInner(f);\n }\n\n getYScale(): any {\n const f = this.getDimension(this.innerPadding, 1, this.yDomain.length, this.dims.height);\n return scaleBand().rangeRound([this.dims.height, 0]).domain(this.yDomain).paddingInner(f);\n }\n\n getRects(): RectItem[] {\n const rects = [];\n\n this.xDomain.map(xVal => {\n this.yDomain.map(yVal => {\n rects.push({\n x: this.xScale(xVal),\n y: this.yScale(yVal),\n rx: 3,\n width: this.xScale.bandwidth(),\n height: this.yScale.bandwidth(),\n fill: 'rgba(200,200,200,0.03)'\n });\n });\n });\n\n return rects;\n }\n\n onClick(data): void {\n this.select.emit(data);\n }\n\n setColors(): void {\n this.colors = new ColorHelper(this.scheme, this.scaleType, this.valueDomain);\n }\n\n getLegendOptions(): LegendOptions {\n return {\n scaleType: this.scaleType,\n domain: this.valueDomain,\n colors: this.scaleType === ScaleType.Ordinal ? this.colors : this.colors.scale,\n title: this.scaleType === ScaleType.Ordinal ? this.legendTitle : undefined,\n position: this.legendPosition\n };\n }\n\n updateYAxisWidth({ width }: { width: number }): void {\n this.yAxisWidth = width;\n this.update();\n }\n\n updateXAxisHeight({ height }: { height: number }): void {\n this.xAxisHeight = height;\n this.update();\n }\n\n onActivate(event, group, fromLegend: boolean = false) {\n const item = Object.assign({}, event);\n if (group) {\n item.series = group.name;\n }\n\n const items = this.results\n .map(g => g.series)\n .flat()\n .filter(i => {\n if (fromLegend) {\n return i.label === item.name;\n } else {\n return i.name === item.name && i.series === item.series;\n }\n });\n\n this.activeEntries = [...items];\n this.activate.emit({ value: item, entries: this.activeEntries });\n }\n\n onDeactivate(event, group, fromLegend: boolean = false) {\n const item = Object.assign({}, event);\n if (group) {\n item.series = group.name;\n }\n\n this.activeEntries = this.activeEntries.filter(i => {\n if (fromLegend) {\n return i.label !== item.name;\n } else {\n return !(i.name === item.name && i.series === item.series);\n }\n });\n\n this.deactivate.emit({ value: item, entries: this.activeEntries });\n }\n}\n","import { NgModule } from '@angular/core';\nimport { ChartCommonModule } from '../common/chart-common.module';\nimport { HeatMapCellComponent } from './heat-map-cell.component';\nimport { HeatCellSeriesComponent } from './heat-map-cell-series.component';\nimport { HeatMapComponent } from './heat-map.component';\n\n@NgModule({\n imports: [ChartCommonModule],\n declarations: [HeatMapCellComponent, HeatCellSeriesComponent, HeatMapComponent],\n exports: [HeatMapCellComponent, HeatCellSeriesComponent, HeatMapComponent]\n})\nexport class HeatMapModule {}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnChanges,\n ElementRef,\n ChangeDetectionStrategy,\n SimpleChanges\n} from '@angular/core';\nimport { trigger, style, animate, transition } from '@angular/animations';\nimport { select } from 'd3-selection';\nimport { Series } from '../models/chart-data.model';\n\n@Component({\n selector: 'g[ngx-charts-line]',\n template: `\n <svg:path\n [@animationState]=\"'active'\"\n class=\"line\"\n [attr.d]=\"initialPath\"\n [attr.fill]=\"fill\"\n [attr.stroke]=\"stroke\"\n stroke-width=\"1.5px\"\n />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [\n trigger('animationState', [\n transition(':enter', [\n style({\n strokeDasharray: 2000,\n strokeDashoffset: 2000\n }),\n animate(\n 1000,\n style({\n strokeDashoffset: 0\n })\n )\n ])\n ])\n ]\n})\nexport class LineComponent implements OnChanges {\n @Input() path: string;\n @Input() stroke: string;\n @Input() data: Series;\n @Input() fill: string = 'none';\n @Input() animations: boolean = true;\n\n // @Output() select = new EventEmitter();\n\n initialized: boolean = false;\n initialPath: string;\n\n constructor(private element: ElementRef) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.initialized) {\n this.initialized = true;\n this.initialPath = this.path;\n } else {\n this.updatePathEl();\n }\n }\n\n updatePathEl(): void {\n const node = select(this.element.nativeElement).select('.line');\n\n if (this.animations) {\n node.transition().duration(750).attr('d', this.path);\n } else {\n node.attr('d', this.path);\n }\n }\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n ViewEncapsulation,\n HostListener,\n ChangeDetectionStrategy,\n ContentChild,\n TemplateRef\n} from '@angular/core';\nimport { trigger, style, animate, transition } from '@angular/animations';\nimport { scaleLinear, scaleTime, scalePoint } from 'd3-scale';\nimport { curveLinear } from 'd3-shape';\n\nimport { calculateViewDimensions } from '../common/view-dimensions.helper';\nimport { ColorHelper } from '../common/color.helper';\nimport { BaseChartComponent } from '../common/base-chart.component';\nimport { id } from '../utils/id';\nimport { getUniqueXDomainValues, getScaleType } from '../common/domain.helper';\nimport { LegendOptions, LegendPosition, ScaleType, ViewDimensions } from '../common/types';\n\n@Component({\n selector: 'ngx-charts-line-chart',\n template: `\n <ngx-charts-chart\n [view]=\"[width, height]\"\n [showLegend]=\"legend\"\n [legendOptions]=\"legendOptions\"\n [activeEntries]=\"activeEntries\"\n [animations]=\"animations\"\n (legendLabelClick)=\"onClick($event)\"\n (legendLabelActivate)=\"onActivate($event)\"\n (legendLabelDeactivate)=\"onDeactivate($event)\"\n >\n <svg:defs>\n <svg:clipPath [attr.id]=\"clipPathId\">\n <svg:rect\n [attr.width]=\"dims.width + 10\"\n [attr.height]=\"dims.height + 10\"\n [attr.transform]=\"'translate(-5, -5)'\"\n />\n </svg:clipPath>\n </svg:defs>\n <svg:g [attr.transform]=\"transform\" class=\"line-chart chart\">\n <svg:g\n ngx-charts-x-axis\n *ngIf=\"xAxis\"\n [xScale]=\"xScale\"\n [dims]=\"dims\"\n [showGridLines]=\"showGridLines\"\n [showLabel]=\"showXAxisLabel\"\n [labelText]=\"xAxisLabel\"\n [trimTicks]=\"trimXAxisTicks\"\n [rotateTicks]=\"rotateXAxisTicks\"\n [maxTickLength]=\"maxXAxisTickLength\"\n [tickFormatting]=\"xAxisTickFormatting\"\n [ticks]=\"xAxisTicks\"\n (dimensionsChanged)=\"updateXAxisHeight($event)\"\n ></svg:g>\n <svg:g\n ngx-charts-y-axis\n *ngIf=\"yAxis\"\n [yScale]=\"yScale\"\n [dims]=\"dims\"\n [showGridLines]=\"showGridLines\"\n [showLabel]=\"showYAxisLabel\"\n [labelText]=\"yAxisLabel\"\n [trimTicks]=\"trimYAxisTicks\"\n [maxTickLength]=\"maxYAxisTickLength\"\n [tickFormatting]=\"yAxisTickFormatting\"\n [ticks]=\"yAxisTicks\"\n [referenceLines]=\"referenceLines\"\n [showRefLines]=\"showRefLines\"\n [showRefLabels]=\"showRefLabels\"\n (dimensionsChanged)=\"updateYAxisWidth($event)\"\n ></svg:g>\n <svg:g [attr.clip-path]=\"clipPath\">\n <svg:g *ngFor=\"let series of results; trackBy: trackBy\" [@animationState]=\"'active'\">\n <svg:g\n ngx-charts-line-series\n [xScale]=\"xScale\"\n [yScale]=\"yScale\"\n [colors]=\"colors\"\n [data]=\"series\"\n [activeEntries]=\"activeEntries\"\n [scaleType]=\"scaleType\"\n [curve]=\"curve\"\n [rangeFillOpacity]=\"rangeFillOpacity\"\n [hasRange]=\"hasRange\"\n [animations]=\"animations\"\n />\n </svg:g>\n\n <svg:g *ngIf=\"!tooltipDisabled\" (mouseleave)=\"hideCircles()\">\n <svg:g\n ngx-charts-tooltip-area\n [dims]=\"dims\"\n [xSet]=\"xSet\"\n [xScale]=\"xScale\"\n [yScale]=\"yScale\"\n [results]=\"results\"\n [colors]=\"colors\"\n [tooltipDisabled]=\"tooltipDisabled\"\n [tooltipTemplate]=\"seriesTooltipTemplate\"\n (hover)=\"updateHoveredVertical($event)\"\n />\n\n <svg:g *ngFor=\"let series of results\">\n <svg:g\n ngx-charts-circle-series\n [xScale]=\"xScale\"\n [yScale]=\"yScale\"\n [colors]=\"colors\"\n [data]=\"series\"\n [scaleType]=\"scaleType\"\n [visibleValue]=\"hoveredVertical\"\n [activeEntries]=\"activeEntries\"\n [tooltipDisabled]=\"tooltipDisabled\"\n [tooltipTemplate]=\"tooltipTemplate\"\n (select)=\"onClick($event)\"\n (activate)=\"onActivate($event)\"\n (deactivate)=\"onDeactivate($event)\"\n />\n </svg:g>\n </svg:g>\n </svg:g>\n </svg:g>\n <svg:g\n ngx-charts-timeline\n *ngIf=\"timeline && scaleType != 'ordinal'\"\n [attr.transform]=\"timelineTransform\"\n [results]=\"results\"\n [view]=\"[timelineWidth, height]\"\n [height]=\"timelineHeight\"\n [scheme]=\"scheme\"\n [customColors]=\"customColors\"\n [scaleType]=\"scaleType\"\n [legend]=\"legend\"\n (onDomainChange)=\"updateDomain($event)\"\n >\n <svg:g *ngFor=\"let series of results; trackBy: trackBy\">\n <svg:g\n ngx-charts-line-series\n [xScale]=\"timelineXScale\"\n [yScale]=\"timelineYScale\"\n [colors]=\"colors\"\n [data]=\"series\"\n [scaleType]=\"scaleType\"\n [curve]=\"curve\"\n [hasRange]=\"hasRange\"\n [animations]=\"animations\"\n />\n </svg:g>\n </svg:g>\n </ngx-charts-chart>\n `,\n styleUrls: ['../common/base-chart.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [\n trigger('animationState', [\n transition(':leave', [\n style({\n opacity: 1\n }),\n animate(\n 500,\n style({\n opacity: 0\n })\n )\n ])\n ])\n ]\n})\nexport class LineChartComponent extends BaseChartComponent {\n @Input() legend: boolean;\n @Input() legendTitle: string = 'Legend';\n @Input() legendPosition: LegendPosition = LegendPosition.Right;\n @Input() xAxis: boolean;\n @Input() yAxis: boolean;\n @Input() showXAxisLabel: boolean;\n @Input() showYAxisLabel: boolean;\n @Input() xAxisLabel: string;\n @Input() yAxisLabel: string;\n @Input() autoScale: boolean;\n @Input() timeline: boolean;\n @Input() gradient: boolean;\n @Input() showGridLines: boolean = true;\n @Input() curve: any = curveLinear;\n @Input() activeEntries: any[] = [];\n @Input() schemeType: ScaleType;\n @Input() rangeFillOpacity: number;\n @Input() trimXAxisTicks: boolean = true;\n @Input() trimYAxisTicks: boolean = true;\n @Input() rotateXAxisTicks: boolean = true;\n @Input() maxXAxisTickLength: number = 16;\n @Input() maxYAxisTickLength: number = 16;\n @Input() xAxisTickFormatting: any;\n @Input() yAxisTickFormatting: any;\n @Input() xAxisTicks: any[];\n @Input() yAxisTicks: any[];\n @Input() roundDomains: boolean = false;\n @Input() tooltipDisabled: boolean = false;\n @Input() showRefLines: boolean = false;\n @Input() referenceLines: any;\n @Input() showRefLabels: boolean = true;\n @Input() xScaleMin: number;\n @Input() xScaleMax: number;\n @Input() yScaleMin: number;\n @Input() yScaleMax: number;\n\n @Output() activate: EventEmitter<any> = new EventEmitter();\n @Output() deactivate: EventEmitter<any> = new EventEmitter();\n\n @ContentChild('tooltipTemplate') tooltipTemplate: TemplateRef<any>;\n @ContentChild('seriesTooltipTemplate') seriesTooltipTemplate: TemplateRef<any>;\n\n dims: ViewDimensions;\n xSet: any;\n xDomain: any;\n yDomain: [number, number];\n seriesDomain: any;\n yScale: any;\n xScale: any;\n colors: ColorHelper;\n scaleType: ScaleType;\n transform: string;\n clipPath: string;\n clipPathId: string;\n areaPath: any;\n margin: number[] = [10, 20, 10, 20];\n hoveredVertical: any; // the value of the x axis that is hovered over\n xAxisHeight: number = 0;\n yAxisWidth: number = 0;\n filteredDomain: any;\n legendOptions: any;\n hasRange: boolean; // whether the line has a min-max range around it\n timelineWidth: any;\n timelineHeight: number = 50;\n timelineXScale: any;\n timelineYScale: any;\n timelineXDomain: any;\n timelineTransform: any;\n timelinePadding: number = 10;\n\n update(): void {\n super.update();\n\n this.dims = calculateViewDimensions({\n width: this.width,\n height: this.height,\n margins: this.margin,\n showXAxis: this.xAxis,\n showYAxis: this.yAxis,\n xAxisHeight: this.xAxisHeight,\n yAxisWidth: this.yAxisWidth,\n showXLabel: this.showXAxisLabel,\n showYLabel: this.showYAxisLabel,\n showLegend: this.legend,\n legendType: this.schemeType,\n legendPosition: this.legendPosition\n });\n\n if (this.timeline) {\n this.dims.height -= this.timelineHeight + this.margin[2] + this.timelinePadding;\n }\n\n this.xDomain = this.getXDomain();\n if (this.filteredDomain) {\n this.xDomain = this.filteredDomain;\n }\n\n this.yDomain = this.getYDomain();\n this.seriesDomain = this.getSeriesDomain();\n\n this.xScale = this.getXScale(this.xDomain, this.dims.width);\n this.yScale = this.getYScale(this.yDomain, this.dims.height);\n\n this.updateTimeline();\n\n this.setColors();\n this.legendOptions = this.getLegendOptions();\n\n this.transform = `translate(${this.dims.xOffset} , ${this.margin[0]})`;\n\n this.clipPathId = 'clip' + id().toString();\n this.clipPath = `url(#${this.clipPathId})`;\n }\n\n updateTimeline(): void {\n if (this.timeline) {\n this.timelineWidth = this.dims.width;\n this.timelineXDomain = this.getXDomain();\n this.timelineXScale = this.getXScale(this.timelineXDomain, this.timelineWidth);\n this.timelineYScale = this.getYScale(this.yDomain, this.timelineHeight);\n this.timelineTransform = `translate(${this.dims.xOffset}, ${-this.margin[2]})`;\n }\n }\n\n getXDomain(): any[] {\n let values = getUniqueXDomainValues(this.results);\n\n this.scaleType = getScaleType(values);\n let domain = [];\n\n if (this.scaleType === ScaleType.Linear) {\n values = values.map(v => Number(v));\n }\n\n let min;\n let max;\n if (this.scaleType === ScaleType.Time || this.scaleType === ScaleType.Linear) {\n min = this.xScaleMin ? this.xScaleMin : Math.min(...values);\n\n max = this.xScaleMax ? this.xScaleMax : Math.max(...values);\n }\n\n if (this.scaleType === ScaleType.Time) {\n domain = [new Date(min), new Date(max)];\n this.xSet = [...values].sort((a, b) => {\n const aDate = a.getTime();\n const bDate = b.getTime();\n if (aDate > bDate) return 1;\n if (bDate > aDate) return -1;\n return 0;\n });\n } else if (this.scaleType === ScaleType.Linear) {\n domain = [min, max];\n // Use compare function to sort numbers numerically\n this.xSet = [...values].sort((a, b) => a - b);\n } else {\n domain = values;\n this.xSet = values;\n }\n\n return domain;\n }\n\n getYDomain(): [number, number] {\n const domain = [];\n for (const results of this.results) {\n for (const d of results.series) {\n if (domain.indexOf(d.value) < 0) {\n domain.push(d.value);\n }\n if (d.min !== undefined) {\n this.hasRange = true;\n if (domain.indexOf(d.min) < 0) {\n domain.push(d.min);\n }\n }\n if (d.max !== undefined) {\n this.hasRange = true;\n if (domain.indexOf(d.max) < 0) {\n domain.push(d.max);\n }\n }\n }\n }\n\n const values = [...domain];\n if (!this.autoScale) {\n values.push(0);\n }\n\n const min = this.yScaleMin ? this.yScaleMin : Math.min(...values);\n\n const max = this.yScaleMax ? this.yScaleMax : Math.max(...values);\n\n return [min, max];\n }\n\n getSeriesDomain(): string[] {\n return this.results.map(d => d.name);\n }\n\n getXScale(domain, width: number): any {\n let scale;\n\n if (this.scaleType === ScaleType.Time) {\n scale = scaleTime().range([0, width]).domain(domain);\n } else if (this.scaleType === ScaleType.Linear) {\n scale = scaleLinear().range([0, width]).domain(domain);\n\n if (this.roundDomains) {\n scale = scale.nice();\n }\n } else if (this.scaleType === ScaleType.Ordinal) {\n scale = scalePoint().range([0, width]).padding(0.1).domain(domain);\n }\n\n return scale;\n }\n\n getYScale(domain, height: number): any {\n const scale = scaleLinear().range([height, 0]).domain(domain);\n\n return this.roundDomains ? scale.nice() : scale;\n }\n\n updateDomain(domain): void {\n this.filteredDomain = domain;\n this.xDomain = this.filteredDomain;\n this.xScale = this.getXScale(this.xDomain, this.dims.width);\n }\n\n updateHoveredVertical(item): void {\n this.hoveredVertical = item.value;\n this.deactivateAll();\n }\n\n @HostListener('mouseleave')\n hideCircles(): void {\n this.hoveredVertical = null;\n this.deactivateAll();\n }\n\n onClick(data): void {\n this.select.emit(data);\n }\n\n trackBy(index: number, item): string {\n return item.name;\n }\n\n setColors(): void {\n let domain;\n if (this.schemeType === ScaleType.Ordinal) {\n domain = this.seriesDomain;\n } else {\n domain = this.yDomain;\n }\n\n this.colors = new ColorHelper(this.scheme, this.schemeType, domain, this.customColors);\n }\n\n getLegendOptions(): LegendOptions {\n const opts = {\n scaleType: this.schemeType as any,\n colors: undefined,\n domain: [],\n title: undefined,\n position: this.legendPosition\n };\n if (opts.scaleType === ScaleType.Ordinal) {\n opts.domain = this.seriesDomain;\n opts.colors = this.colors;\n opts.title = this.legendTitle;\n } else {\n opts.domain = this.yDomain;\n opts.colors = this.colors.scale;\n }\n return opts;\n }\n\n updateYAxisWidth({ width }: { width: number }): void {\n this.yAxisWidth = width;\n this.update();\n }\n\n updateXAxisHeight({ height }: { height: number }): void {\n this.xAxisHeight = height;\n this.update();\n }\n\n onActivate(item): void {\n this.deactivateAll();\n\n const idx = this.activeEntries.findIndex(d => {\n return d.name === item.name && d.value === item.value;\n });\n if (idx > -1) {\n return;\n }\n\n this.activeEntries = [item];\n this.activate.emit({ value: item, entries: this.activeEntries });\n }\n\n onDeactivate(item): void {\n const idx = this.activeEntries.findIndex(d => {\n return d.name === item.name && d.value === item.value;\n });\n\n this.activeEntries.splice(idx, 1);\n this.activeEntries = [...this.activeEntries];\n\n this.deactivate.emit({ value: item, entries: this.activeEntries });\n }\n\n deactivateAll(): void {\n this.activeEntries = [...this.activeEntries];\n for (const entry of this.activeEntries) {\n this.deactivate.emit({ value: entry, entries: [] });\n }\n this.activeEntries = [];\n }\n}\n","import { Component, Input, OnChanges, SimpleChanges, ChangeDetectionStrategy } from '@angular/core';\nimport { area, line } from 'd3-shape';\n\nimport { id } from '../utils/id';\nimport { sortLinear, sortByTime, sortByDomain } from '../utils/sort';\nimport { ColorHelper } from '../common/color.helper';\nimport { ScaleType, Gradient } from '../common/types';\nimport { Series } from '../models/chart-data.model';\n\n@Component({\n selector: 'g[ngx-charts-line-series]',\n template: `\n <svg:g>\n <defs>\n <svg:g\n ngx-charts-svg-linear-gradient\n *ngIf=\"hasGradient\"\n orientation=\"vertical\"\n [name]=\"gradientId\"\n [stops]=\"gradientStops\"\n />\n </defs>\n <svg:g\n ngx-charts-area\n class=\"line-highlight\"\n [data]=\"data\"\n [path]=\"areaPath\"\n [fill]=\"hasGradient ? gradientUrl : colors.getColor(data.name)\"\n [opacity]=\"0.25\"\n [startOpacity]=\"0\"\n [gradient]=\"true\"\n [stops]=\"areaGradientStops\"\n [class.active]=\"isActive(data)\"\n [class.inactive]=\"isInactive(data)\"\n [animations]=\"animations\"\n />\n <svg:g\n ngx-charts-line\n class=\"line-series\"\n [data]=\"data\"\n [path]=\"path\"\n [stroke]=\"stroke\"\n [animations]=\"animations\"\n [class.active]=\"isActive(data)\"\n [class.inactive]=\"isInactive(data)\"\n />\n <svg:g\n ngx-charts-area\n *ngIf=\"hasRange\"\n class=\"line-series-range\"\n [data]=\"data\"\n [path]=\"outerPath\"\n [fill]=\"hasGradient ? gradientUrl : colors.getColor(data.name)\"\n [class.active]=\"isActive(data)\"\n [class.inactive]=\"isInactive(data)\"\n [opacity]=\"rangeFillOpacity\"\n [animations]=\"animations\"\n />\n </svg:g>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class LineSeriesComponent implements OnChanges {\n @Input() data: Series;\n @Input() xScale;\n @Input() yScale;\n @Input() colors: ColorHelper;\n @Input() scaleType: ScaleType;\n @Input() curve: any;\n @Input() activeEntries: any[];\n @Input() rangeFillOpacity: number;\n @Input() hasRange: boolean;\n @Input() animations: boolean = true;\n\n path: string;\n outerPath: string;\n areaPath: string;\n gradientId: string;\n gradientUrl: string;\n hasGradient: boolean;\n gradientStops: Gradient[];\n areaGradientStops: Gradient[];\n stroke: string;\n\n ngOnChanges(changes: SimpleChanges): void {\n this.update();\n }\n\n update(): void {\n this.updateGradients();\n\n const data = this.sortData(this.data.series);\n\n const lineGen = this.getLineGenerator();\n this.path = lineGen(data) || '';\n\n const areaGen = this.getAreaGenerator();\n this.areaPath = areaGen(data) || '';\n\n if (this.hasRange) {\n const range = this.getRangeGenerator();\n this.outerPath = range(data) || '';\n }\n\n if (this.hasGradient) {\n this.stroke = this.gradientUrl;\n const values = this.data.series.map(d => d.value);\n const max = Math.max(...values);\n const min = Math.min(...values);\n if (max === min) {\n this.stroke = this.colors.getColor(max);\n }\n } else {\n this.stroke = this.colors.getColor(this.data.name);\n }\n }\n\n getLineGenerator(): any {\n return line<any>()\n .x(d => {\n const label = d.name;\n let value;\n if (this.scaleType === ScaleType.Time) {\n value = this.xScale(label);\n } else if (this.scaleType === ScaleType.Linear) {\n value = this.xScale(Number(label));\n } else {\n value = this.xScale(label);\n }\n return value;\n })\n .y(d => this.yScale(d.value))\n .curve(this.curve);\n }\n\n getRangeGenerator(): any {\n return area<any>()\n .x(d => {\n const label = d.name;\n let value;\n if (this.scaleType === ScaleType.Time) {\n value = this.xScale(label);\n } else if (this.scaleType === ScaleType.Linear) {\n value = this.xScale(Number(label));\n } else {\n value = this.xScale(label);\n }\n return value;\n })\n .y0(d => this.yScale(typeof d.min === 'number' ? d.min : d.value))\n .y1(d => this.yScale(typeof d.max === 'number' ? d.max : d.value))\n .curve(this.curve);\n }\n\n getAreaGenerator(): any {\n const xProperty = d => {\n const label = d.name;\n return this.xScale(label);\n };\n\n return area<any>()\n .x(xProperty)\n .y0(() => this.yScale.range()[0])\n .y1(d => this.yScale(d.value))\n .curve(this.curve);\n }\n\n sortData(data) {\n if (this.scaleType === ScaleType.Linear) {\n data = sortLinear(data, 'name');\n } else if (this.scaleType === ScaleType.Time) {\n data = sortByTime(data, 'name');\n } else {\n data = sortByDomain(data, 'name', 'asc', this.xScale.domain());\n }\n\n return data;\n }\n\n updateGradients() {\n if (this.colors.scaleType === ScaleType.Linear) {\n this.hasGradient = true;\n this.gradientId = 'grad' + id().toString();\n this.gradientUrl = `url(#${this.gradientId})`;\n const values = this.data.series.map(d => d.value);\n const max = Math.max(...values);\n const min = Math.min(...values);\n this.gradientStops = this.colors.getLinearGradientStops(max, min);\n this.areaGradientStops = this.colors.getLinearGradientStops(max);\n } else {\n this.hasGradient = false;\n this.gradientStops = undefined;\n this.areaGradientStops = undefined;\n }\n }\n\n isActive(entry): boolean {\n if (!this.activeEntries) return false;\n const item = this.activeEntries.find(d => {\n return entry.name === d.name;\n });\n return item !== undefined;\n }\n\n isInactive(entry): boolean {\n if (!this.activeEntries || this.activeEntries.length === 0) return false;\n const item = this.activeEntries.find(d => {\n return entry.name === d.name;\n });\n return item === undefined;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { ChartCommonModule } from '../common/chart-common.module';\nimport { LineComponent } from './line.component';\nimport { LineChartComponent } from './line-chart.component';\nimport { LineSeriesComponent } from './line-series.component';\n\n@NgModule({\n imports: [ChartCommonModule],\n declarations: [LineComponent, LineChartComponent, LineSeriesComponent],\n exports: [LineComponent, LineChartComponent, LineSeriesComponent]\n})\nexport class LineChartModule {}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n ContentChild,\n TemplateRef\n} from '@angular/core';\nimport { trigger, style, animate, transition } from '@angular/animations';\nimport { scaleLinear, scaleTime, scalePoint } from 'd3-scale';\nimport { curveCardinalClosed } from 'd3-shape';\n\nimport { calculateViewDimensions } from '../common/view-dimensions.helper';\nimport { ColorHelper } from '../common/color.helper';\nimport { BaseChartComponent } from '../common/base-chart.component';\nimport { getScaleType } from '../common/domain.helper';\nimport { isDate } from '../utils/types';\nimport { ViewDimensions, LegendPosition, ScaleType } from '../common/types';\n\nconst twoPI = 2 * Math.PI;\n\n@Component({\n selector: 'ngx-charts-polar-chart',\n template: `\n <ngx-charts-chart\n [view]=\"[width, height]\"\n [showLegend]=\"legend\"\n [legendOptions]=\"legendOptions\"\n [activeEntries]=\"activeEntries\"\n [animations]=\"animations\"\n (legendLabelClick)=\"onClick($event)\"\n (legendLabelActivate)=\"onActivate($event)\"\n (legendLabelDeactivate)=\"onDeactivate($event)\"\n >\n <svg:g class=\"polar-chart chart\" [attr.transform]=\"transform\">\n <svg:g [attr.transform]=\"transformPlot\">\n <svg:circle class=\"polar-chart-background\" cx=\"0\" cy=\"0\" [attr.r]=\"this.outerRadius\" />\n <svg:g *ngIf=\"showGridLines\">\n <svg:circle\n *ngFor=\"let r of radiusTicks\"\n class=\"gridline-path radial-gridline-path\"\n cx=\"0\"\n cy=\"0\"\n [attr.r]=\"r\"\n />\n </svg:g>\n <svg:g *ngIf=\"xAxis\">\n <svg:g\n ngx-charts-pie-label\n *ngFor=\"let tick of thetaTicks\"\n [data]=\"tick\"\n [radius]=\"outerRadius\"\n [label]=\"tick.label\"\n [max]=\"outerRadius\"\n [value]=\"showGridLines ? 1 : outerRadius\"\n [explodeSlices]=\"true\"\n [animations]=\"animations\"\n [labelTrim]=\"labelTrim\"\n [labelTrimSize]=\"labelTrimSize\"\n ></svg:g>\n </svg:g>\n </svg:g>\n <svg:g\n ngx-charts-y-axis\n [attr.transform]=\"transformYAxis\"\n *ngIf=\"yAxis\"\n [yScale]=\"yAxisScale\"\n [dims]=\"yAxisDims\"\n [showGridLines]=\"showGridLines\"\n [showLabel]=\"showYAxisLabel\"\n [labelText]=\"yAxisLabel\"\n [trimTicks]=\"trimYAxisTicks\"\n [maxTickLength]=\"maxYAxisTickLength\"\n [tickFormatting]=\"yAxisTickFormatting\"\n (dimensionsChanged)=\"updateYAxisWidth($event)\"\n ></svg:g>\n <svg:g\n ngx-charts-axis-label\n *ngIf=\"xAxis && showXAxisLabel\"\n [label]=\"xAxisLabel\"\n [offset]=\"labelOffset\"\n [orient]=\"'bottom'\"\n [height]=\"dims.height\"\n [width]=\"dims.width\"\n ></svg:g>\n <svg:g [attr.transform]=\"transformPlot\">\n <svg:g *ngFor=\"let series of results; trackBy: trackBy\" [@animationState]=\"'active'\">\n <svg:g\n ngx-charts-polar-series\n [gradient]=\"gradient\"\n [xScale]=\"xScale\"\n [yScale]=\"yScale\"\n [colors]=\"colors\"\n [data]=\"series\"\n [activeEntries]=\"activeEntries\"\n [scaleType]=\"scaleType\"\n [curve]=\"curve\"\n [rangeFillOpacity]=\"rangeFillOpacity\"\n [animations]=\"animations\"\n [tooltipDisabled]=\"tooltipDisabled\"\n [tooltipTemplate]=\"tooltipTemplate\"\n (select)=\"onClick($event)\"\n (activate)=\"onActivate($event)\"\n (deactivate)=\"onDeactivate($event)\"\n />\n </svg:g>\n </svg:g>\n </svg:g>\n </ngx-charts-chart>\n `,\n styleUrls: [\n '../common/base-chart.component.scss',\n '../pie-chart/pie-chart.component.scss',\n './polar-chart.component.scss'\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [\n trigger('animationState', [\n transition(':leave', [\n style({\n opacity: 1\n }),\n animate(\n 500,\n style({\n opacity: 0\n })\n )\n ])\n ])\n ]\n})\nexport class PolarChartComponent extends BaseChartComponent {\n @Input() legend: boolean;\n @Input() legendTitle: string = 'Legend';\n @Input() legendPosition: LegendPosition = LegendPosition.Right;\n @Input() xAxis: boolean;\n @Input() yAxis: boolean;\n @Input() showXAxisLabel: boolean;\n @Input() showYAxisLabel: boolean;\n @Input() xAxisLabel: string;\n @Input() yAxisLabel: string;\n @Input() autoScale: boolean;\n @Input() showGridLines: boolean = true;\n @Input() curve: any = curveCardinalClosed;\n @Input() activeEntries: any[] = [];\n @Input() schemeType: ScaleType;\n @Input() rangeFillOpacity: number = 0.15;\n @Input() trimYAxisTicks: boolean = true;\n @Input() maxYAxisTickLength: number = 16;\n @Input() xAxisTickFormatting: (o: any) => any;\n @Input() yAxisTickFormatting: (o: any) => any;\n @Input() roundDomains: boolean = false;\n @Input() tooltipDisabled: boolean = false;\n @Input() showSeriesOnHover: boolean = true;\n @Input() gradient: boolean = false;\n @Input() yAxisMinScale: number = 0;\n @Input() labelTrim: boolean = true;\n @Input() labelTrimSize: number = 10;\n\n @Output() activate: EventEmitter<any> = new EventEmitter();\n @Output() deactivate: EventEmitter<any> = new EventEmitter();\n\n @ContentChild('tooltipTemplate') tooltipTemplate: TemplateRef<any>;\n\n dims: ViewDimensions;\n yAxisDims: ViewDimensions;\n labelOffset: number;\n xDomain: any;\n yDomain: any;\n seriesDomain: any;\n yScale: any; // -> rScale\n xScale: any; // -> tScale\n yAxisScale: any; // -> yScale\n colors: ColorHelper;\n scaleType: ScaleType;\n transform: string;\n transformPlot: string;\n transformYAxis: string;\n transformXAxis: string;\n // series: any; // ???\n margin: number[] = [10, 20, 10, 20];\n xAxisHeight: number = 0;\n yAxisWidth: number = 0;\n filteredDomain: any;\n legendOptions: any;\n thetaTicks: any[];\n radiusTicks: number[];\n outerRadius: number;\n\n update(): void {\n super.update();\n\n this.setDims();\n\n this.setScales();\n this.setColors();\n this.legendOptions = this.getLegendOptions();\n\n this.setTicks();\n }\n\n setDims() {\n this.dims = calculateViewDimensions({\n width: this.width,\n height: this.height,\n margins: this.margin,\n showXAxis: this.xAxis,\n showYAxis: this.yAxis,\n xAxisHeight: this.xAxisHeight,\n yAxisWidth: this.yAxisWidth,\n showXLabel: this.showXAxisLabel,\n showYLabel: this.showYAxisLabel,\n showLegend: this.legend,\n legendType: this.schemeType,\n legendPosition: this.legendPosition\n });\n\n const halfWidth = Math.floor(this.dims.width / 2);\n const halfHeight = Math.floor(this.dims.height / 2);\n\n const outerRadius = (this.outerRadius = Math.min(halfHeight / 1.5, halfWidth / 1.5));\n\n const yOffset = Math.max(0, halfHeight - outerRadius);\n\n this.yAxisDims = {\n ...this.dims,\n width: halfWidth\n };\n\n this.transform = `translate(${this.dims.xOffset}, ${this.margin[0]})`;\n this.transformYAxis = `translate(0, ${yOffset})`;\n this.labelOffset = this.dims.height + 40;\n this.transformPlot = `translate(${halfWidth}, ${halfHeight})`;\n }\n\n setScales() {\n const xValues = this.getXValues();\n this.scaleType = getScaleType(xValues);\n this.xDomain = this.filteredDomain || this.getXDomain(xValues);\n\n this.yDomain = this.getYDomain();\n this.seriesDomain = this.getSeriesDomain();\n\n this.xScale = this.getXScale(this.xDomain, twoPI);\n this.yScale = this.getYScale(this.yDomain, this.outerRadius);\n this.yAxisScale = this.getYScale(this.yDomain.reverse(), this.outerRadius);\n }\n\n setTicks() {\n let tickFormat;\n if (this.xAxisTickFormatting) {\n tickFormat = this.xAxisTickFormatting;\n } else if (this.xScale.tickFormat) {\n tickFormat = this.xScale.tickFormat.apply(this.xScale, [5]);\n } else {\n tickFormat = d => {\n if (isDate(d)) {\n return d.toLocaleDateString();\n }\n return d.toLocaleString();\n };\n }\n\n const outerRadius = this.outerRadius;\n const s = 1.1;\n\n this.thetaTicks = this.xDomain.map(d => {\n const startAngle = this.xScale(d);\n const dd = s * outerRadius * (startAngle > Math.PI ? -1 : 1);\n const label = tickFormat(d);\n\n const startPos = [outerRadius * Math.sin(startAngle), -outerRadius * Math.cos(startAngle)];\n const pos = [dd, s * startPos[1]];\n return {\n innerRadius: 0,\n outerRadius,\n startAngle,\n endAngle: startAngle,\n value: outerRadius,\n label,\n startPos,\n pos\n };\n });\n\n const minDistance = 10;\n\n /* from pie chart, abstract out -*/\n for (let i = 0; i < this.thetaTicks.length - 1; i++) {\n const a = this.thetaTicks[i];\n\n for (let j = i + 1; j < this.thetaTicks.length; j++) {\n const b = this.thetaTicks[j];\n // if they're on the same side\n if (b.pos[0] * a.pos[0] > 0) {\n // if they're overlapping\n const o = minDistance - Math.abs(b.pos[1] - a.pos[1]);\n if (o > 0) {\n // push the second up or down\n b.pos[1] += Math.sign(b.pos[0]) * o;\n }\n }\n }\n }\n\n this.radiusTicks = this.yAxisScale.ticks(Math.floor(this.dims.height / 50)).map(d => this.yScale(d));\n }\n\n getXValues(): any[] {\n const values = [];\n for (const results of this.results) {\n for (const d of results.series) {\n if (!values.includes(d.name)) {\n values.push(d.name);\n }\n }\n }\n return values;\n }\n\n getXDomain(values = this.getXValues()): any[] {\n if (this.scaleType === ScaleType.Time) {\n const min = Math.min(...values);\n const max = Math.max(...values);\n return [min, max];\n } else if (this.scaleType === ScaleType.Linear) {\n values = values.map(v => Number(v));\n const min = Math.min(...values);\n const max = Math.max(...values);\n return [min, max];\n }\n return values;\n }\n\n getYValues(): any[] {\n const domain = [];\n\n for (const results of this.results) {\n for (const d of results.series) {\n if (domain.indexOf(d.value) < 0) {\n domain.push(d.value);\n }\n if (d.min !== undefined) {\n if (domain.indexOf(d.min) < 0) {\n domain.push(d.min);\n }\n }\n if (d.max !== undefined) {\n if (domain.indexOf(d.max) < 0) {\n domain.push(d.max);\n }\n }\n }\n }\n return domain;\n }\n\n getYDomain(domain = this.getYValues()): any[] {\n let min = Math.min(...domain);\n const max = Math.max(this.yAxisMinScale, ...domain);\n\n min = Math.max(0, min);\n if (!this.autoScale) {\n min = Math.min(0, min);\n }\n\n return [min, max];\n }\n\n getSeriesDomain(): any[] {\n return this.results.map(d => d.name);\n }\n\n getXScale(domain, width: number): any {\n switch (this.scaleType) {\n case ScaleType.Time:\n return scaleTime().range([0, width]).domain(domain);\n case ScaleType.Linear:\n const scale = scaleLinear().range([0, width]).domain(domain);\n return this.roundDomains ? scale.nice() : scale;\n default:\n return scalePoint()\n .range([0, width - twoPI / domain.length])\n .padding(0)\n .domain(domain);\n }\n }\n\n getYScale(domain, height: number): any {\n const scale = scaleLinear().range([0, height]).domain(domain);\n\n return this.roundDomains ? scale.nice() : scale;\n }\n\n onClick(data, series?): void {\n if (series) {\n data.series = series.name;\n }\n\n this.select.emit(data);\n }\n\n setColors(): void {\n const domain = this.schemeType === ScaleType.Ordinal ? this.seriesDomain : this.yDomain.reverse();\n this.colors = new ColorHelper(this.scheme, this.schemeType, domain, this.customColors);\n }\n\n getLegendOptions() {\n if (this.schemeType === ScaleType.Ordinal) {\n return {\n scaleType: this.schemeType,\n colors: this.colors,\n domain: this.seriesDomain,\n title: this.legendTitle,\n position: this.legendPosition\n };\n }\n return {\n scaleType: this.schemeType,\n colors: this.colors.scale,\n domain: this.yDomain,\n title: undefined,\n position: this.legendPosition\n };\n }\n\n updateYAxisWidth({ width }: { width: number }): void {\n this.yAxisWidth = width;\n this.update();\n }\n\n updateXAxisHeight({ height }: { height: number }): void {\n this.xAxisHeight = height;\n this.update();\n }\n\n onActivate(item): void {\n const idx = this.activeEntries.findIndex(d => {\n return d.name === item.name && d.value === item.value;\n });\n if (idx > -1) {\n return;\n }\n this.activeEntries = this.showSeriesOnHover ? [item, ...this.activeEntries] : this.activeEntries;\n this.activate.emit({ value: item, entries: this.activeEntries });\n }\n\n onDeactivate(item): void {\n const idx = this.activeEntries.findIndex(d => {\n return d.name === item.name && d.value === item.value;\n });\n\n this.activeEntries.splice(idx, 1);\n this.activeEntries = [...this.activeEntries];\n\n this.deactivate.emit({ value: item, entries: this.activeEntries });\n }\n\n deactivateAll(): void {\n this.activeEntries = [...this.activeEntries];\n for (const entry of this.activeEntries) {\n this.deactivate.emit({ value: entry, entries: [] });\n }\n this.activeEntries = [];\n }\n\n trackBy(index: number, item): string {\n return item.name;\n }\n}\n","import {\n Component,\n Input,\n OnChanges,\n SimpleChanges,\n ChangeDetectionStrategy,\n TemplateRef,\n Output,\n EventEmitter\n} from '@angular/core';\nimport { lineRadial } from 'd3-shape';\n\nimport { id } from '../utils/id';\nimport { sortLinear, sortByTime, sortByDomain } from '../utils/sort';\nimport { escapeLabel } from '../common/label.helper';\nimport { ScaleType } from '../common/types';\nimport { Series, DataItem } from '../models/chart-data.model';\n\ninterface PolarChartCircle {\n color: string;\n cx: number;\n cy: number;\n data: Series;\n label: string;\n value: number;\n}\n\n@Component({\n selector: 'g[ngx-charts-polar-series]',\n template: `\n <svg:g class=\"polar-charts-series\">\n <defs>\n <svg:g\n ngx-charts-svg-radial-gradient\n *ngIf=\"hasGradient\"\n orientation=\"vertical\"\n [color]=\"seriesColor\"\n [name]=\"gradientId\"\n [startOpacity]=\"0.25\"\n [endOpacity]=\"1\"\n [stops]=\"gradientStops\"\n />\n </defs>\n <svg:g\n ngx-charts-line\n class=\"polar-series-path\"\n [path]=\"path\"\n [stroke]=\"hasGradient ? gradientUrl : seriesColor\"\n [class.active]=\"active\"\n [class.inactive]=\"inactive\"\n [attr.fill-opacity]=\"rangeFillOpacity\"\n [fill]=\"hasGradient ? gradientUrl : seriesColor\"\n [animations]=\"animations\"\n />\n <svg:g\n ngx-charts-circle\n *ngFor=\"let circle of circles\"\n class=\"circle\"\n [cx]=\"circle.cx\"\n [cy]=\"circle.cy\"\n [r]=\"circleRadius\"\n [fill]=\"circle.color\"\n [style.opacity]=\"inactive ? 0.2 : 1\"\n ngx-tooltip\n [tooltipDisabled]=\"tooltipDisabled\"\n [tooltipPlacement]=\"'top'\"\n tooltipType=\"tooltip\"\n [tooltipTitle]=\"tooltipTemplate ? undefined : tooltipText(circle)\"\n [tooltipTemplate]=\"tooltipTemplate\"\n [tooltipContext]=\"circle.data\"\n (select)=\"select.emit(circle.data)\"\n (activate)=\"activate.emit({ name: circle.data.series })\"\n (deactivate)=\"deactivate.emit({ name: circle.data.series })\"\n ></svg:g>\n </svg:g>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PolarSeriesComponent implements OnChanges {\n @Input() name;\n @Input() data;\n @Input() xScale; // Theta\n @Input() yScale; // R\n @Input() colors;\n @Input() scaleType;\n @Input() curve: any;\n @Input() activeEntries: any[];\n @Input() rangeFillOpacity: number;\n @Input() tooltipDisabled: boolean = false;\n @Input() tooltipText: (o: any) => string;\n @Input() gradient: boolean = false;\n @Input() tooltipTemplate: TemplateRef<any>;\n @Input() animations: boolean = true;\n\n @Output() select = new EventEmitter();\n @Output() activate = new EventEmitter();\n @Output() deactivate = new EventEmitter();\n\n path: string;\n circles: PolarChartCircle[];\n circleRadius: number = 3;\n\n outerPath: string;\n areaPath: string;\n gradientId: string;\n gradientUrl: string;\n hasGradient: boolean;\n gradientStops: any[];\n areaGradientStops: any[];\n seriesColor: string;\n\n active: boolean;\n inactive: boolean;\n\n ngOnChanges(changes: SimpleChanges): void {\n this.update();\n }\n\n update(): void {\n this.updateGradients();\n\n const line = this.getLineGenerator();\n\n const data = this.sortData(this.data.series);\n\n const seriesName = this.data.name;\n const linearScaleType = this.colors.scaleType === ScaleType.Linear;\n const min = this.yScale.domain()[0];\n this.seriesColor = this.colors.getColor(linearScaleType ? min : seriesName);\n\n this.path = line(data) || '';\n\n this.circles = data.map(d => {\n const a = this.getAngle(d);\n const r = this.getRadius(d);\n const value = d.value;\n\n const color = this.colors.getColor(linearScaleType ? Math.abs(value) : seriesName);\n\n const cData = Object.assign({}, d, {\n series: seriesName,\n value,\n name: d.name\n });\n\n return {\n data: cData,\n cx: r * Math.sin(a),\n cy: -r * Math.cos(a),\n value,\n color,\n label: d.name\n };\n });\n\n this.active = this.isActive(this.data);\n this.inactive = this.isInactive(this.data);\n this.tooltipText = this.tooltipText || (c => this.defaultTooltipText(c));\n }\n\n getAngle(d: DataItem) {\n const label = d.name;\n if (this.scaleType === ScaleType.Time) {\n return this.xScale(label);\n } else if (this.scaleType === ScaleType.Linear) {\n return this.xScale(Number(label));\n }\n return this.xScale(label);\n }\n\n getRadius(d: DataItem) {\n return this.yScale(d.value);\n }\n\n getLineGenerator(): any {\n return lineRadial<any>()\n .angle(d => this.getAngle(d))\n .radius(d => this.getRadius(d))\n .curve(this.curve);\n }\n\n sortData(data: DataItem) {\n if (this.scaleType === ScaleType.Linear) {\n return sortLinear(data, 'name');\n } else if (this.scaleType === ScaleType.Time) {\n return sortByTime(data, 'name');\n }\n return sortByDomain(data, 'name', 'asc', this.xScale.domain());\n }\n\n isActive(entry: DataItem): boolean {\n if (!this.activeEntries) return false;\n const item = this.activeEntries.find(d => {\n return entry.name === d.name;\n });\n return item !== undefined;\n }\n\n isInactive(entry: DataItem): boolean {\n if (!this.activeEntries || this.activeEntries.length === 0) return false;\n const item = this.activeEntries.find(d => {\n return entry.name === d.name;\n });\n return item === undefined;\n }\n\n defaultTooltipText({ label, value }: { label: string; value: number }): string {\n return `\n <span class=\"tooltip-label\">${escapeLabel(this.data.name)} • ${escapeLabel(label)}</span>\n <span class=\"tooltip-val\">${value.toLocaleString()}</span>\n `;\n }\n\n updateGradients() {\n this.hasGradient = this.gradient || this.colors.scaleType === ScaleType.Linear;\n\n if (!this.hasGradient) {\n return;\n }\n\n this.gradientId = 'grad' + id().toString();\n this.gradientUrl = `url(#${this.gradientId})`;\n\n if (this.colors.scaleType === ScaleType.Linear) {\n const values = this.data.series.map(d => d.value);\n const max = Math.max(...values);\n const min = Math.min(...values);\n this.gradientStops = this.colors.getLinearGradientStops(max, min);\n } else {\n this.gradientStops = undefined;\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n EventEmitter,\n Input,\n Output,\n TemplateRef,\n ViewEncapsulation\n} from '@angular/core';\n\nimport { calculateViewDimensions } from '../common/view-dimensions.helper';\nimport { ColorHelper } from '../common/color.helper';\nimport { BaseChartComponent } from '../common/base-chart.component';\nimport { DataItem } from '../models/chart-data.model';\nimport { ScaleType, ViewDimensions } from '../common/types';\n\n@Component({\n selector: 'ngx-charts-advanced-pie-chart',\n template: `\n <div [style.width.px]=\"width\" [style.height.px]=\"height\">\n <div class=\"advanced-pie chart\" [style.width.px]=\"dims.width\" [style.height.px]=\"dims.height\">\n <ngx-charts-chart [view]=\"[width, height]\" [showLegend]=\"false\" [animations]=\"animations\">\n <svg:g [attr.transform]=\"transform\" class=\"pie chart\">\n <svg:g\n ngx-charts-pie-series\n [colors]=\"colors\"\n [series]=\"results\"\n [innerRadius]=\"innerRadius\"\n [activeEntries]=\"activeEntries\"\n [outerRadius]=\"outerRadius\"\n [gradient]=\"gradient\"\n [tooltipDisabled]=\"tooltipDisabled\"\n [tooltipTemplate]=\"tooltipTemplate\"\n [tooltipText]=\"tooltipText\"\n (select)=\"onClick($event)\"\n (activate)=\"onActivate($event)\"\n (deactivate)=\"onDeactivate($event)\"\n [animations]=\"animations\"\n ></svg:g>\n </svg:g>\n </ngx-charts-chart>\n </div>\n <div class=\"advanced-pie-legend-wrapper\" [style.width.px]=\"width - dims.width\" [style.height.px]=\"height\">\n <ngx-charts-advanced-legend\n [data]=\"results\"\n [colors]=\"colors\"\n [width]=\"width - dims.width - margin[1]\"\n [label]=\"label\"\n [animations]=\"animations\"\n [valueFormatting]=\"valueFormatting\"\n [labelFormatting]=\"nameFormatting\"\n [percentageFormatting]=\"percentageFormatting\"\n (select)=\"onClick($event)\"\n (activate)=\"onActivate($event, true)\"\n (deactivate)=\"onDeactivate($event, true)\"\n >\n </ngx-charts-advanced-legend>\n </div>\n </div>\n `,\n styleUrls: ['../common/base-chart.component.scss', './advanced-pie-chart.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AdvancedPieChartComponent extends BaseChartComponent {\n @Input() gradient: boolean;\n @Input() activeEntries: any[] = [];\n @Input() tooltipDisabled: boolean = false;\n @Input() tooltipText: any;\n @Input() label: string = 'Total';\n\n @Output() activate: EventEmitter<any> = new EventEmitter();\n @Output() deactivate: EventEmitter<any> = new EventEmitter();\n\n @ContentChild('tooltipTemplate') tooltipTemplate: TemplateRef<any>;\n\n dims: ViewDimensions;\n domain: string[];\n outerRadius: number;\n innerRadius: number;\n transform: string;\n colors: ColorHelper;\n legendWidth: number;\n margin: number[] = [20, 20, 20, 20];\n\n @Input() valueFormatting: (value: number) => any;\n @Input() nameFormatting: (value: string) => any;\n @Input() percentageFormatting: (value: number) => any;\n\n update(): void {\n super.update();\n\n this.dims = calculateViewDimensions({\n width: (this.width * 4) / 12.0,\n height: this.height,\n margins: this.margin\n });\n\n this.formatDates();\n\n this.domain = this.getDomain();\n this.setColors();\n\n const xOffset = this.dims.width / 2;\n const yOffset = this.margin[0] + this.dims.height / 2;\n this.legendWidth = this.width - this.dims.width - this.margin[1];\n\n this.outerRadius = Math.min(this.dims.width, this.dims.height) / 2.5;\n this.innerRadius = this.outerRadius * 0.75;\n\n this.transform = `translate(${xOffset} , ${yOffset})`;\n }\n\n getDomain(): string[] {\n return this.results.map(d => d.label);\n }\n\n onClick(data: DataItem) {\n this.select.emit(data);\n }\n\n setColors(): void {\n this.colors = new ColorHelper(this.scheme, ScaleType.Ordinal, this.domain, this.customColors);\n }\n\n onActivate(item, fromLegend = false) {\n item = this.results.find(d => {\n if (fromLegend) {\n return d.label === item.name;\n } else {\n return d.name === item.name;\n }\n });\n\n const idx = this.activeEntries.findIndex(d => {\n return d.name === item.name && d.value === item.value && d.series === item.series;\n });\n if (idx > -1) {\n return;\n }\n\n this.activeEntries = [item, ...this.activeEntries];\n this.activate.emit({ value: item, entries: this.activeEntries });\n }\n\n onDeactivate(item, fromLegend = false) {\n item = this.results.find(d => {\n if (fromLegend) {\n return d.label === item.name;\n } else {\n return d.name === item.name;\n }\n });\n\n const idx = this.activeEntries.findIndex(d => {\n return d.name === item.name && d.value === item.value && d.series === item.series;\n });\n\n this.activeEntries.splice(idx, 1);\n this.activeEntries = [...this.activeEntries];\n\n this.deactivate.emit({ value: item, entries: this.activeEntries });\n }\n}\n","import { isPlatformServer } from '@angular/common';\nimport {\n Component,\n Input,\n OnChanges,\n SimpleChanges,\n ChangeDetectionStrategy,\n PLATFORM_ID,\n Inject\n} from '@angular/core';\nimport { arc, DefaultArcObject } from 'd3-shape';\n\nimport { trimLabel } from '../common/trim-label.helper';\nimport { TextAnchor } from '../common/types';\nimport { DataItem } from '../models/chart-data.model';\n\nexport interface PieData extends DefaultArcObject {\n data: DataItem;\n endAngle: number;\n index: number;\n padAngle: number;\n pos: [number, number];\n startAngle: number;\n value: number;\n}\n\n@Component({\n selector: 'g[ngx-charts-pie-label]',\n template: `\n <title>{{ label }}</title>\n <svg:g [attr.transform]=\"attrTransform\" [style.transform]=\"styleTransform\" [style.transition]=\"textTransition\">\n <svg:text\n class=\"pie-label\"\n [class.animation]=\"animations\"\n dy=\".35em\"\n [style.textAnchor]=\"textAnchor()\"\n [style.shapeRendering]=\"'crispEdges'\"\n >\n {{ labelTrim ? trimLabel(label, labelTrimSize) : label }}\n </svg:text>\n </svg:g>\n <svg:path\n [attr.d]=\"line\"\n [attr.stroke]=\"color\"\n fill=\"none\"\n class=\"pie-label-line line\"\n [class.animation]=\"animations\"\n ></svg:path>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PieLabelComponent implements OnChanges {\n @Input() data: PieData;\n @Input() radius: number;\n @Input() label: string;\n @Input() color: string;\n @Input() max: number;\n @Input() value: number;\n @Input() explodeSlices: boolean;\n @Input() animations: boolean = true;\n @Input() labelTrim: boolean = true;\n @Input() labelTrimSize: number = 10;\n\n trimLabel: (label: string, max?: number) => string;\n line: string;\n styleTransform: string;\n attrTransform: string;\n textTransition: string;\n\n constructor(@Inject(PLATFORM_ID) public platformId: any) {\n this.trimLabel = trimLabel;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n this.setTransforms();\n this.update();\n }\n\n setTransforms() {\n if (isPlatformServer(this.platformId)) {\n this.styleTransform = `translate3d(${this.textX}px,${this.textY}px, 0)`;\n this.attrTransform = `translate(${this.textX},${this.textY})`;\n this.textTransition = !this.animations ? null : 'transform 0.75s';\n } else {\n const isIE = /(edge|msie|trident)/i.test(navigator.userAgent);\n this.styleTransform = isIE ? null : `translate3d(${this.textX}px,${this.textY}px, 0)`;\n this.attrTransform = !isIE ? null : `translate(${this.textX},${this.textY})`;\n this.textTransition = isIE || !this.animations ? null : 'transform 0.75s';\n }\n }\n\n update(): void {\n let startRadius = this.radius;\n if (this.explodeSlices) {\n startRadius = (this.radius * this.value) / this.max;\n }\n\n const innerArc = arc().innerRadius(startRadius).outerRadius(startRadius);\n\n // Calculate innerPos then scale outer position to match label position\n const innerPos = innerArc.centroid(this.data);\n\n let scale = this.data.pos[1] / innerPos[1];\n if (this.data.pos[1] === 0 || innerPos[1] === 0) {\n scale = 1;\n }\n const outerPos = [scale * innerPos[0], scale * innerPos[1]];\n\n this.line = `M${innerPos}L${outerPos}L${this.data.pos}`;\n }\n\n get textX(): number {\n return this.data.pos[0];\n }\n\n get textY(): number {\n return this.data.pos[1];\n }\n\n textAnchor(): TextAnchor {\n return this.midAngle(this.data) < Math.PI ? TextAnchor.Start : TextAnchor.End;\n }\n\n midAngle(d): number {\n return d.startAngle + (d.endAngle - d.startAngle) / 2;\n }\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n ElementRef,\n SimpleChanges,\n OnChanges,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { interpolate } from 'd3-interpolate';\nimport { select } from 'd3-selection';\nimport { arc } from 'd3-shape';\n\nimport { id } from '../utils/id';\n/* tslint:disable */\nimport { MouseEvent } from '../events';\nimport { DataItem } from '../models/chart-data.model';\n\n@Component({\n selector: 'g[ngx-charts-pie-arc]',\n template: `\n <svg:g class=\"arc-group\">\n <svg:defs *ngIf=\"gradient\">\n <svg:g\n ngx-charts-svg-radial-gradient\n [color]=\"fill\"\n orientation=\"vertical\"\n [name]=\"radialGradientId\"\n [startOpacity]=\"startOpacity\"\n />\n </svg:defs>\n <svg:path\n [attr.d]=\"path\"\n class=\"arc\"\n [class.active]=\"isActive\"\n [attr.fill]=\"getGradient()\"\n (click)=\"onClick()\"\n (dblclick)=\"onDblClick($event)\"\n (mouseenter)=\"activate.emit(data)\"\n (mouseleave)=\"deactivate.emit(data)\"\n [style.pointer-events]=\"getPointerEvents()\"\n />\n </svg:g>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PieArcComponent implements OnChanges {\n @Input() fill: string;\n @Input() startAngle: number = 0;\n @Input() endAngle: number = Math.PI * 2;\n @Input() innerRadius: number;\n @Input() outerRadius: number;\n @Input() cornerRadius: number = 0;\n @Input() value: number;\n @Input() max: number;\n @Input() data: DataItem;\n @Input() explodeSlices: boolean = false;\n @Input() gradient: boolean = false;\n @Input() animate: boolean = true;\n @Input() pointerEvents: boolean = true;\n @Input() isActive: boolean = false;\n\n @Output() select = new EventEmitter();\n @Output() activate = new EventEmitter();\n @Output() deactivate = new EventEmitter();\n @Output() dblclick = new EventEmitter();\n\n element: HTMLElement;\n path: any;\n startOpacity: number;\n radialGradientId: string;\n linearGradientId: string;\n gradientFill: string;\n initialized: boolean = false;\n private _timeout;\n\n constructor(element: ElementRef) {\n this.element = element.nativeElement;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n this.update();\n }\n\n getGradient(): string {\n return this.gradient ? this.gradientFill : this.fill;\n }\n\n getPointerEvents(): string {\n return this.pointerEvents ? 'auto' : 'none';\n }\n\n update(): void {\n const calc = this.calculateArc();\n this.startOpacity = 0.5;\n this.radialGradientId = 'linearGrad' + id().toString();\n this.gradientFill = `url(#${this.radialGradientId})`;\n\n if (this.animate) {\n if (this.initialized) {\n this.updateAnimation();\n } else {\n this.loadAnimation();\n this.initialized = true;\n }\n } else {\n this.path = calc.startAngle(this.startAngle).endAngle(this.endAngle)();\n }\n }\n\n calculateArc(): any {\n let outerRadius = this.outerRadius;\n if (this.explodeSlices && this.innerRadius === 0) {\n outerRadius = (this.outerRadius * this.value) / this.max;\n }\n\n return arc().innerRadius(this.innerRadius).outerRadius(outerRadius).cornerRadius(this.cornerRadius);\n }\n\n loadAnimation(): void {\n const node = select(this.element)\n .selectAll('.arc')\n .data([{ startAngle: this.startAngle, endAngle: this.endAngle }]);\n\n const calc = this.calculateArc();\n\n node\n .transition()\n .attrTween('d', function (d) {\n (<any>this)._current = (<any>this)._current || d;\n const copyOfD = Object.assign({}, d);\n copyOfD.endAngle = copyOfD.startAngle;\n const interpolater = interpolate(copyOfD, copyOfD);\n (<any>this)._current = interpolater(0);\n return function (t) {\n return calc(interpolater(t));\n };\n })\n .transition()\n .duration(750)\n .attrTween('d', function (d) {\n (<any>this)._current = (<any>this)._current || d;\n const interpolater = interpolate((<any>this)._current, d);\n (<any>this)._current = interpolater(0);\n return function (t) {\n return calc(interpolater(t));\n };\n });\n }\n\n updateAnimation(): void {\n const node = select(this.element)\n .selectAll('.arc')\n .data([{ startAngle: this.startAngle, endAngle: this.endAngle }]);\n\n const calc = this.calculateArc();\n\n node\n .transition()\n .duration(750)\n .attrTween('d', function (d) {\n (<any>this)._current = (<any>this)._current || d;\n const interpolater = interpolate((<any>this)._current, d);\n (<any>this)._current = interpolater(0);\n return function (t) {\n return calc(interpolater(t));\n };\n });\n }\n\n onClick(): void {\n clearTimeout(this._timeout);\n this._timeout = setTimeout(() => this.select.emit(this.data), 200);\n }\n\n onDblClick(event: MouseEvent): void {\n event.preventDefault();\n event.stopPropagation();\n clearTimeout(this._timeout);\n\n this.dblclick.emit({\n data: this.data,\n nativeEvent: event\n });\n }\n}\n","import {\n Component,\n Input,\n Output,\n ViewEncapsulation,\n EventEmitter,\n ChangeDetectionStrategy,\n ContentChild,\n TemplateRef\n} from '@angular/core';\nimport { calculateViewDimensions } from '../common/view-dimensions.helper';\nimport { ColorHelper } from '../common/color.helper';\nimport { BaseChartComponent } from '../common/base-chart.component';\nimport { DataItem } from '../models/chart-data.model';\nimport { LegendOptions, LegendPosition, ScaleType, ViewDimensions } from '../common/types';\n\n@Component({\n selector: 'ngx-charts-pie-chart',\n template: `\n <ngx-charts-chart\n [view]=\"[width, height]\"\n [showLegend]=\"legend\"\n [legendOptions]=\"legendOptions\"\n [activeEntries]=\"activeEntries\"\n [animations]=\"animations\"\n (legendLabelActivate)=\"onActivate($event, true)\"\n (legendLabelDeactivate)=\"onDeactivate($event, true)\"\n (legendLabelClick)=\"onClick($event)\"\n >\n <svg:g [attr.transform]=\"translation\" class=\"pie-chart chart\">\n <svg:g\n ngx-charts-pie-series\n [colors]=\"colors\"\n [series]=\"data\"\n [showLabels]=\"labels\"\n [labelFormatting]=\"labelFormatting\"\n [trimLabels]=\"trimLabels\"\n [maxLabelLength]=\"maxLabelLength\"\n [activeEntries]=\"activeEntries\"\n [innerRadius]=\"innerRadius\"\n [outerRadius]=\"outerRadius\"\n [explodeSlices]=\"explodeSlices\"\n [gradient]=\"gradient\"\n [animations]=\"animations\"\n [tooltipDisabled]=\"tooltipDisabled\"\n [tooltipTemplate]=\"tooltipTemplate\"\n [tooltipText]=\"tooltipText\"\n (dblclick)=\"dblclick.emit($event)\"\n (select)=\"onClick($event)\"\n (activate)=\"onActivate($event)\"\n (deactivate)=\"onDeactivate($event)\"\n />\n </svg:g>\n </ngx-charts-chart>\n `,\n styleUrls: ['../common/base-chart.component.scss', './pie-chart.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PieChartComponent extends BaseChartComponent {\n @Input() labels: boolean = false;\n @Input() legend: boolean = false;\n @Input() legendTitle: string = 'Legend';\n @Input() legendPosition: LegendPosition = LegendPosition.Right;\n @Input() explodeSlices: boolean = false;\n @Input() doughnut: boolean = false;\n @Input() arcWidth: number = 0.25;\n @Input() gradient: boolean;\n @Input() activeEntries: any[] = [];\n @Input() tooltipDisabled: boolean = false;\n @Input() labelFormatting: any;\n @Input() trimLabels: boolean = true;\n @Input() maxLabelLength: number = 10;\n @Input() tooltipText: any;\n @Output() dblclick = new EventEmitter();\n // optional margins\n @Input() margins: number[];\n @Output() select = new EventEmitter();\n @Output() activate: EventEmitter<any> = new EventEmitter();\n @Output() deactivate: EventEmitter<any> = new EventEmitter();\n\n @ContentChild('tooltipTemplate') tooltipTemplate: TemplateRef<any>;\n\n translation: string;\n outerRadius: number;\n innerRadius: number;\n data: DataItem[];\n colors: ColorHelper;\n domain: string[];\n dims: ViewDimensions;\n legendOptions: LegendOptions;\n\n update(): void {\n super.update();\n\n if (this.labels && this.hasNoOptionalMarginsSet()) {\n this.margins = [30, 80, 30, 80];\n } else if (!this.labels && this.hasNoOptionalMarginsSet()) {\n // default value for margins\n this.margins = [20, 20, 20, 20];\n }\n\n this.dims = calculateViewDimensions({\n width: this.width,\n height: this.height,\n margins: this.margins,\n showLegend: this.legend,\n legendPosition: this.legendPosition\n });\n\n this.formatDates();\n\n const xOffset = this.margins[3] + this.dims.width / 2;\n const yOffset = this.margins[0] + this.dims.height / 2;\n this.translation = `translate(${xOffset}, ${yOffset})`;\n this.outerRadius = Math.min(this.dims.width, this.dims.height);\n if (this.labels) {\n // make room for labels\n this.outerRadius /= 3;\n } else {\n this.outerRadius /= 2;\n }\n this.innerRadius = 0;\n if (this.doughnut) {\n this.innerRadius = this.outerRadius * (1 - this.arcWidth);\n }\n\n this.domain = this.getDomain();\n\n // sort data according to domain\n this.data = this.results.sort((a, b) => {\n return this.domain.indexOf(a.name) - this.domain.indexOf(b.name);\n });\n\n this.setColors();\n this.legendOptions = this.getLegendOptions();\n }\n\n getDomain(): string[] {\n return this.results.map(d => d.label);\n }\n\n onClick(data: DataItem): void {\n this.select.emit(data);\n }\n\n setColors(): void {\n this.colors = new ColorHelper(this.scheme, ScaleType.Ordinal, this.domain, this.customColors);\n }\n\n getLegendOptions(): LegendOptions {\n return {\n scaleType: ScaleType.Ordinal,\n domain: this.domain,\n colors: this.colors,\n title: this.legendTitle,\n position: this.legendPosition\n };\n }\n\n onActivate(item, fromLegend = false): void {\n item = this.results.find(d => {\n if (fromLegend) {\n return d.label === item.name;\n } else {\n return d.name === item.name;\n }\n });\n\n const idx = this.activeEntries.findIndex(d => {\n return d.name === item.name && d.value === item.value && d.series === item.series;\n });\n if (idx > -1) {\n return;\n }\n\n this.activeEntries = [item, ...this.activeEntries];\n this.activate.emit({ value: item, entries: this.activeEntries });\n }\n\n onDeactivate(item, fromLegend = false): void {\n item = this.results.find(d => {\n if (fromLegend) {\n return d.label === item.name;\n } else {\n return d.name === item.name;\n }\n });\n\n const idx = this.activeEntries.findIndex(d => {\n return d.name === item.name && d.value === item.value && d.series === item.series;\n });\n\n this.activeEntries.splice(idx, 1);\n this.activeEntries = [...this.activeEntries];\n\n this.deactivate.emit({ value: item, entries: this.activeEntries });\n }\n\n private hasNoOptionalMarginsSet(): boolean {\n return !this.margins || this.margins.length <= 0;\n }\n}\n","import { scaleBand } from 'd3-scale';\nimport { ViewDimensions } from './types/view-dimension.interface';\nimport { StringOrNumberOrDate } from '../models/chart-data.model';\n\nexport interface GridItem {\n data: GridData;\n height: number;\n width: number;\n x: number;\n y: number;\n}\n\nexport interface GridData {\n extra?: any;\n label: string;\n name: StringOrNumberOrDate;\n percent: number;\n total: number;\n value: number;\n}\n\nexport function gridSize(dims: ViewDimensions, len: number, minWidth: number): [number, number] {\n let rows = 1;\n let cols = len;\n const width = dims.width;\n\n if (width > minWidth) {\n while (width / cols < minWidth) {\n rows += 1;\n cols = Math.ceil(len / rows);\n }\n }\n\n return [cols, rows];\n}\n\nexport function gridLayout(\n dims: ViewDimensions,\n data: GridData[],\n minWidth: number,\n designatedTotal: number\n): GridItem[] {\n const xScale: any = scaleBand<number>();\n const yScale: any = scaleBand<number>();\n const width = dims.width;\n const height = dims.height;\n\n const [columns, rows] = gridSize(dims, data.length, minWidth);\n\n const xDomain = [];\n const yDomain = [];\n for (let i = 0; i < rows; i++) {\n yDomain.push(i);\n }\n for (let i = 0; i < columns; i++) {\n xDomain.push(i);\n }\n xScale.domain(xDomain);\n yScale.domain(yDomain);\n\n xScale.rangeRound([0, width], 0.1);\n yScale.rangeRound([0, height], 0.1);\n\n const res = [];\n const total = designatedTotal ? designatedTotal : getTotal(data);\n const cardWidth = xScale.bandwidth();\n const cardHeight = yScale.bandwidth();\n\n for (let i = 0; i < data.length; i++) {\n res[i] = {};\n res[i].data = {\n name: data[i] ? data[i].name : '',\n value: data[i] ? data[i].value : undefined,\n extra: data[i] ? data[i].extra : undefined,\n label: data[i] ? data[i].label : ''\n };\n res[i].x = xScale(i % columns);\n res[i].y = yScale(Math.floor(i / columns));\n res[i].width = cardWidth;\n res[i].height = cardHeight;\n res[i].data.percent = total > 0 ? res[i].data.value / total : 0;\n res[i].data.total = total;\n }\n return res;\n}\n\nfunction getTotal(results: any): number {\n return results.map(d => (d ? d.value : 0)).reduce((sum, val) => sum + val, 0);\n}\n","import {\n Component,\n Input,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n ContentChild,\n TemplateRef,\n Output,\n EventEmitter\n} from '@angular/core';\nimport { min } from 'd3-array';\nimport { format } from 'd3-format';\n\nimport { calculateViewDimensions } from '../common/view-dimensions.helper';\nimport { ColorHelper } from '../common/color.helper';\nimport { BaseChartComponent } from '../common/base-chart.component';\nimport { trimLabel } from '../common/trim-label.helper';\nimport { gridLayout } from '../common/grid-layout.helper';\nimport { formatLabel } from '../common/label.helper';\nimport { DataItem, PieGridDataItem } from '../models/chart-data.model';\nimport { ScaleType, ViewDimensions } from '../common/types';\n\nexport interface PieGridData {\n data: PieGridDataItem;\n height: number;\n width: number;\n x: number;\n y: number;\n}\n\n@Component({\n selector: 'ngx-charts-pie-grid',\n template: `\n <ngx-charts-chart [view]=\"[width, height]\" [showLegend]=\"false\" [animations]=\"animations\">\n <svg:g [attr.transform]=\"transform\" class=\"pie-grid chart\">\n <svg:g *ngFor=\"let series of series\" class=\"pie-grid-item\" [attr.transform]=\"series.transform\">\n <svg:g\n ngx-charts-pie-grid-series\n [colors]=\"series.colors\"\n [data]=\"series.data\"\n [innerRadius]=\"series.innerRadius\"\n [outerRadius]=\"series.outerRadius\"\n [animations]=\"animations\"\n (select)=\"onClick($event)\"\n ngx-tooltip\n [tooltipDisabled]=\"tooltipDisabled\"\n [tooltipPlacement]=\"'top'\"\n [tooltipType]=\"'tooltip'\"\n [tooltipTitle]=\"tooltipTemplate ? undefined : tooltipText({ data: series })\"\n [tooltipTemplate]=\"tooltipTemplate\"\n [tooltipContext]=\"series.data[0].data\"\n (activate)=\"onActivate($event)\"\n (deactivate)=\"onDeactivate($event)\"\n />\n <svg:text\n *ngIf=\"animations\"\n class=\"label percent-label\"\n dy=\"-0.5em\"\n x=\"0\"\n y=\"5\"\n ngx-charts-count-up\n [countTo]=\"series.percent\"\n [countSuffix]=\"'%'\"\n text-anchor=\"middle\"\n ></svg:text>\n <svg:text *ngIf=\"!animations\" class=\"label percent-label\" dy=\"-0.5em\" x=\"0\" y=\"5\" text-anchor=\"middle\">\n {{ series.percent.toLocaleString() }}\n </svg:text>\n <svg:text class=\"label\" dy=\"0.5em\" x=\"0\" y=\"5\" text-anchor=\"middle\">\n {{ series.label }}\n </svg:text>\n <svg:text\n *ngIf=\"animations\"\n class=\"label\"\n dy=\"1.23em\"\n x=\"0\"\n [attr.y]=\"series.outerRadius\"\n text-anchor=\"middle\"\n ngx-charts-count-up\n [countTo]=\"series.total\"\n [countPrefix]=\"label + ': '\"\n ></svg:text>\n <svg:text\n *ngIf=\"!animations\"\n class=\"label\"\n dy=\"1.23em\"\n x=\"0\"\n [attr.y]=\"series.outerRadius\"\n text-anchor=\"middle\"\n >\n {{ label }}: {{ series.total.toLocaleString() }}\n </svg:text>\n </svg:g>\n </svg:g>\n </ngx-charts-chart>\n `,\n styleUrls: ['../common/base-chart.component.scss', './pie-grid.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PieGridComponent extends BaseChartComponent {\n @Input() designatedTotal: number;\n @Input() tooltipDisabled: boolean = false;\n @Input() tooltipText: (o: any) => any;\n @Input() label: string = 'Total';\n @Input() minWidth: number = 150;\n @Input() activeEntries: any[] = [];\n\n @Output() activate: EventEmitter<any> = new EventEmitter();\n @Output() deactivate: EventEmitter<any> = new EventEmitter();\n\n dims: ViewDimensions;\n data: PieGridData[];\n transform: string;\n series: any[];\n domain: string[];\n colorScale: ColorHelper;\n margin: number[] = [20, 20, 20, 20];\n\n @ContentChild('tooltipTemplate') tooltipTemplate: TemplateRef<any>;\n\n update(): void {\n super.update();\n\n this.dims = calculateViewDimensions({\n width: this.width,\n height: this.height,\n margins: this.margin\n });\n\n this.formatDates();\n\n this.domain = this.getDomain();\n\n this.data = gridLayout(this.dims, this.results, this.minWidth, this.designatedTotal);\n this.transform = `translate(${this.margin[3]} , ${this.margin[0]})`;\n\n this.series = this.getSeries();\n this.setColors();\n\n this.tooltipText = this.tooltipText || this.defaultTooltipText;\n }\n\n defaultTooltipText({ data }): string {\n const label = trimLabel(formatLabel(data.name));\n const val = data.value.toLocaleString();\n return `\n <span class=\"tooltip-label\">${label}</span>\n <span class=\"tooltip-val\">${val}</span>\n `;\n }\n\n getDomain(): string[] {\n return this.results.map(d => d.label);\n }\n\n getSeries(): any[] {\n const total = this.designatedTotal ? this.designatedTotal : this.getTotal();\n\n return this.data.map(d => {\n const baselineLabelHeight = 20;\n const padding = 10;\n const name = d.data.name;\n const label = formatLabel(name);\n const value = d.data.value;\n const radius = min([d.width - padding, d.height - baselineLabelHeight]) / 2 - 5;\n const innerRadius = radius * 0.9;\n\n let count = 0;\n const colors = () => {\n count += 1;\n if (count === 1) {\n return 'rgba(100,100,100,0.3)';\n } else {\n return this.colorScale.getColor(label);\n }\n };\n\n const xPos = d.x + (d.width - padding) / 2;\n const yPos = d.y + (d.height - baselineLabelHeight) / 2;\n\n return {\n transform: `translate(${xPos}, ${yPos})`,\n colors,\n innerRadius,\n outerRadius: radius,\n name,\n label: trimLabel(label),\n total: value,\n value,\n percent: format('.1%')(d.data.percent),\n data: [\n d,\n {\n data: {\n other: true,\n value: total - value,\n name: d.data.name\n }\n }\n ]\n };\n });\n }\n\n getTotal(): any {\n return this.results.map(d => d.value).reduce((sum, d) => sum + d, 0);\n }\n\n onClick(data: DataItem): void {\n this.select.emit(data);\n }\n\n setColors(): void {\n this.colorScale = new ColorHelper(this.scheme, ScaleType.Ordinal, this.domain, this.customColors);\n }\n\n onActivate(item, fromLegend = false) {\n item = this.results.find(d => {\n if (fromLegend) {\n return d.label === item.name;\n } else {\n return d.name === item.name;\n }\n });\n\n const idx = this.activeEntries.findIndex(d => {\n return d.name === item.name && d.value === item.value && d.series === item.series;\n });\n if (idx > -1) {\n return;\n }\n\n this.activeEntries = [item, ...this.activeEntries];\n this.activate.emit({ value: item, entries: this.activeEntries });\n }\n\n onDeactivate(item, fromLegend = false) {\n item = this.results.find(d => {\n if (fromLegend) {\n return d.label === item.name;\n } else {\n return d.name === item.name;\n }\n });\n\n const idx = this.activeEntries.findIndex(d => {\n return d.name === item.name && d.value === item.value && d.series === item.series;\n });\n\n this.activeEntries.splice(idx, 1);\n this.activeEntries = [...this.activeEntries];\n\n this.deactivate.emit({ value: item, entries: this.activeEntries });\n }\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n ElementRef,\n OnChanges,\n SimpleChanges,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { pie } from 'd3-shape';\nimport { PieGridDataItem } from '../models/chart-data.model';\nimport { PieGridData } from './pie-grid.component';\n\nexport interface PieArc {\n animate: boolean;\n class: string;\n data: PieGridDataItem;\n endAngle: number;\n fill: string;\n pointerEvents: boolean;\n startAngle: number;\n}\n\n@Component({\n selector: 'g[ngx-charts-pie-grid-series]',\n template: `\n <svg:g class=\"pie-grid-arcs\">\n <svg:g\n ngx-charts-pie-arc\n *ngFor=\"let arc of arcs; trackBy: trackBy\"\n [attr.class]=\"arc.class\"\n [startAngle]=\"arc.startAngle\"\n [endAngle]=\"arc.endAngle\"\n [innerRadius]=\"innerRadius\"\n [outerRadius]=\"outerRadius\"\n [fill]=\"color(arc)\"\n [value]=\"arc.data.value\"\n [data]=\"arc.data\"\n [gradient]=\"false\"\n [pointerEvents]=\"arc.pointerEvents\"\n [animate]=\"arc.animate\"\n (select)=\"onClick($event)\"\n (activate)=\"activate.emit($event)\"\n (deactivate)=\"deactivate.emit($event)\"\n ></svg:g>\n </svg:g>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PieGridSeriesComponent implements OnChanges {\n @Input() colors;\n @Input() data: PieGridData[];\n @Input() innerRadius = 70;\n @Input() outerRadius = 80;\n @Input() animations: boolean = true;\n\n @Output() select = new EventEmitter();\n @Output() activate = new EventEmitter();\n @Output() deactivate = new EventEmitter();\n\n element: HTMLElement;\n layout: any;\n arcs: PieArc[];\n\n constructor(element: ElementRef) {\n this.element = element.nativeElement;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n this.update();\n }\n\n update(): void {\n this.layout = pie<any, any>()\n .value(d => d.data.value)\n .sort(null);\n\n this.arcs = this.getArcs();\n }\n\n getArcs(): PieArc[] {\n return this.layout(this.data).map((arc, index) => {\n const label = arc.data.data.name;\n const other = arc.data.data.other;\n\n if (index === 0) {\n arc.startAngle = 0;\n }\n\n const color = this.colors(label);\n return {\n data: arc.data.data,\n class: 'arc ' + 'arc' + index,\n fill: color,\n startAngle: other ? 0 : arc.startAngle,\n endAngle: arc.endAngle,\n animate: this.animations && !other,\n pointerEvents: !other\n };\n });\n }\n\n onClick(data): void {\n this.select.emit(this.data[0].data);\n }\n\n trackBy(index, item): string {\n return item.data.name;\n }\n\n label(arc): string {\n return arc.data.name;\n }\n\n color(arc): string {\n return this.colors(this.label(arc));\n }\n}\n","import {\n Component,\n SimpleChanges,\n Input,\n Output,\n EventEmitter,\n OnChanges,\n ChangeDetectionStrategy,\n TemplateRef\n} from '@angular/core';\nimport { max } from 'd3-array';\nimport { arc, pie } from 'd3-shape';\nimport { ViewDimensions } from '../common/types';\nimport { ColorHelper } from '../common/color.helper';\n\nimport { formatLabel, escapeLabel } from '../common/label.helper';\nimport { DataItem } from '../models/chart-data.model';\nimport { PieData } from './pie-label.component';\n\n@Component({\n selector: 'g[ngx-charts-pie-series]',\n template: `\n <svg:g *ngFor=\"let arc of data; trackBy: trackBy\">\n <svg:g\n ngx-charts-pie-label\n *ngIf=\"labelVisible(arc)\"\n [data]=\"arc\"\n [radius]=\"outerRadius\"\n [color]=\"color(arc)\"\n [label]=\"labelText(arc)\"\n [labelTrim]=\"trimLabels\"\n [labelTrimSize]=\"maxLabelLength\"\n [max]=\"max\"\n [value]=\"arc.value\"\n [explodeSlices]=\"explodeSlices\"\n [animations]=\"animations\"\n ></svg:g>\n <svg:g\n ngx-charts-pie-arc\n [startAngle]=\"arc.startAngle\"\n [endAngle]=\"arc.endAngle\"\n [innerRadius]=\"innerRadius\"\n [outerRadius]=\"outerRadius\"\n [fill]=\"color(arc)\"\n [value]=\"arc.data.value\"\n [gradient]=\"gradient\"\n [data]=\"arc.data\"\n [max]=\"max\"\n [explodeSlices]=\"explodeSlices\"\n [isActive]=\"isActive(arc.data)\"\n [animate]=\"animations\"\n (select)=\"onClick($event)\"\n (activate)=\"activate.emit($event)\"\n (deactivate)=\"deactivate.emit($event)\"\n (dblclick)=\"dblclick.emit($event)\"\n ngx-tooltip\n [tooltipDisabled]=\"tooltipDisabled\"\n [tooltipPlacement]=\"'top'\"\n [tooltipType]=\"'tooltip'\"\n [tooltipTitle]=\"getTooltipTitle(arc)\"\n [tooltipTemplate]=\"tooltipTemplate\"\n [tooltipContext]=\"arc.data\"\n ></svg:g>\n </svg:g>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PieSeriesComponent implements OnChanges {\n @Input() colors: ColorHelper;\n @Input() series: DataItem[] = [];\n @Input() dims: ViewDimensions;\n @Input() innerRadius: number = 60;\n @Input() outerRadius: number = 80;\n @Input() explodeSlices: boolean;\n @Input() showLabels: boolean;\n @Input() gradient: boolean;\n @Input() activeEntries: any[];\n @Input() labelFormatting: any;\n @Input() trimLabels: boolean = true;\n @Input() maxLabelLength: number = 10;\n @Input() tooltipText: (o: any) => any;\n @Input() tooltipDisabled: boolean = false;\n @Input() tooltipTemplate: TemplateRef<any>;\n @Input() animations: boolean = true;\n\n @Output() select = new EventEmitter();\n @Output() activate = new EventEmitter();\n @Output() deactivate = new EventEmitter();\n @Output() dblclick = new EventEmitter();\n\n max: number;\n data: PieData[];\n\n ngOnChanges(changes: SimpleChanges): void {\n this.update();\n }\n\n update(): void {\n const pieGenerator = pie<any, any>()\n .value(d => d.value)\n .sort(null);\n\n const arcData = pieGenerator(this.series);\n\n this.max = max(arcData, d => {\n return d.value;\n });\n\n this.data = this.calculateLabelPositions(arcData);\n this.tooltipText = this.tooltipText || this.defaultTooltipText;\n }\n\n midAngle(d): number {\n return d.startAngle + (d.endAngle - d.startAngle) / 2;\n }\n\n outerArc(): any {\n const factor = 1.5;\n\n return arc()\n .innerRadius(this.outerRadius * factor)\n .outerRadius(this.outerRadius * factor);\n }\n\n calculateLabelPositions(pieData): any {\n const factor = 1.5;\n const minDistance = 10;\n const labelPositions = pieData;\n\n labelPositions.forEach(d => {\n d.pos = this.outerArc().centroid(d);\n d.pos[0] = factor * this.outerRadius * (this.midAngle(d) < Math.PI ? 1 : -1);\n });\n\n for (let i = 0; i < labelPositions.length - 1; i++) {\n const a = labelPositions[i];\n if (!this.labelVisible(a)) {\n continue;\n }\n\n for (let j = i + 1; j < labelPositions.length; j++) {\n const b = labelPositions[j];\n if (!this.labelVisible(b)) {\n continue;\n }\n // if they're on the same side\n if (b.pos[0] * a.pos[0] > 0) {\n // if they're overlapping\n const o = minDistance - Math.abs(b.pos[1] - a.pos[1]);\n if (o > 0) {\n // push the second up or down\n b.pos[1] += Math.sign(b.pos[0]) * o;\n }\n }\n }\n }\n\n return labelPositions;\n }\n\n labelVisible(myArc): boolean {\n return this.showLabels && myArc.endAngle - myArc.startAngle > Math.PI / 30;\n }\n\n getTooltipTitle(a) {\n return this.tooltipTemplate ? undefined : this.tooltipText(a);\n }\n\n labelText(myArc): string {\n if (this.labelFormatting) {\n return this.labelFormatting(myArc.data.name);\n }\n return this.label(myArc);\n }\n\n label(myArc): string {\n return formatLabel(myArc.data.name);\n }\n\n defaultTooltipText(myArc): string {\n const label = this.label(myArc);\n const val = formatLabel(myArc.data.value);\n\n return `\n <span class=\"tooltip-label\">${escapeLabel(label)}</span>\n <span class=\"tooltip-val\">${val}</span>\n `;\n }\n\n color(myArc): any {\n return this.colors.getColor(this.label(myArc));\n }\n\n trackBy(index, item): string {\n return item.data.name;\n }\n\n onClick(data): void {\n this.select.emit(data);\n }\n\n isActive(entry): boolean {\n if (!this.activeEntries) return false;\n const item = this.activeEntries.find(d => {\n return entry.name === d.name && entry.series === d.series;\n });\n return item !== undefined;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { ChartCommonModule } from '../common/chart-common.module';\nimport { AdvancedPieChartComponent } from './advanced-pie-chart.component';\nimport { PieLabelComponent } from './pie-label.component';\nimport { PieArcComponent } from './pie-arc.component';\nimport { PieChartComponent } from './pie-chart.component';\nimport { PieGridComponent } from './pie-grid.component';\nimport { PieGridSeriesComponent } from './pie-grid-series.component';\nimport { PieSeriesComponent } from './pie-series.component';\n\n@NgModule({\n imports: [ChartCommonModule],\n declarations: [\n AdvancedPieChartComponent,\n PieLabelComponent,\n PieArcComponent,\n PieChartComponent,\n PieGridComponent,\n PieGridSeriesComponent,\n PieSeriesComponent\n ],\n exports: [\n AdvancedPieChartComponent,\n PieLabelComponent,\n PieArcComponent,\n PieChartComponent,\n PieGridComponent,\n PieGridSeriesComponent,\n PieSeriesComponent\n ]\n})\nexport class PieChartModule {}\n","import { NgModule } from '@angular/core';\nimport { ChartCommonModule } from '../common/chart-common.module';\nimport { PolarChartComponent } from './polar-chart.component';\nimport { PolarSeriesComponent } from './polar-series.component';\nimport { PieChartModule } from '../pie-chart/pie-chart.module';\nimport { LineChartModule } from '../line-chart/line-chart.module';\n\n@NgModule({\n imports: [ChartCommonModule, PieChartModule, LineChartModule],\n declarations: [PolarChartComponent, PolarSeriesComponent],\n exports: [PolarChartComponent, PolarSeriesComponent]\n})\nexport class PolarChartModule {}\n","export function calculateTextWidth(fontFamilyKey: {}, text: string, defaultWidth = 8) {\n return text.split('').reduce((acc, curr) => {\n const width = fontFamilyKey[curr] || defaultWidth;\n return acc + width;\n }, 0);\n}\n","export const VERDANA_FONT_WIDTHS_16_PX = {\n '0': 10,\n '1': 10,\n '2': 10,\n '3': 10,\n '4': 10,\n '5': 10,\n '6': 10,\n '7': 10,\n '8': 10,\n '9': 10,\n A: 11,\n B: 11,\n C: 11,\n D: 12,\n E: 10,\n F: 9,\n G: 12,\n H: 12,\n I: 7,\n J: 7,\n K: 11,\n L: 9,\n M: 13,\n N: 12,\n O: 13,\n P: 10,\n Q: 13,\n R: 11,\n S: 11,\n T: 10,\n U: 12,\n V: 11,\n W: 16,\n X: 11,\n Y: 10,\n Z: 11,\n a: 10,\n b: 10,\n c: 8,\n d: 10,\n e: 10,\n f: 6,\n g: 10,\n h: 10,\n i: 4,\n j: 6,\n k: 9,\n l: 4,\n m: 16,\n n: 10,\n o: 10,\n p: 10,\n q: 10,\n r: 7,\n s: 8,\n t: 6,\n u: 10,\n v: 9,\n w: 13,\n x: 9,\n y: 9,\n z: 8,\n '!': 6,\n '@': 16,\n '#': 13,\n $: 10,\n '%': 17,\n '^': 13,\n '&': 12,\n '*': 10,\n '(': 7,\n ')': 7,\n _: 10,\n '-': 7,\n '+': 13,\n '=': 13,\n ',': 6,\n '.': 6,\n '/': 7,\n \"'\": 4,\n ':': 7,\n '|': 7,\n '?': 9,\n ';': 7,\n '<': 13,\n '>': 13\n};\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n ElementRef,\n SimpleChanges,\n OnChanges,\n ViewChild,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n NgZone,\n OnDestroy,\n PLATFORM_ID,\n Inject\n} from '@angular/core';\nimport { trimLabel } from '../common/trim-label.helper';\nimport { roundedRect } from '../common/shape.helper';\nimport { escapeLabel } from '../common/label.helper';\nimport { decimalChecker, count } from '../common/count/count.helper';\nimport { GridData } from '../common/grid-layout.helper';\nimport { isPlatformBrowser, isPlatformServer } from '@angular/common';\nimport { calculateTextWidth } from '../utils/calculate-width';\nimport { VERDANA_FONT_WIDTHS_16_PX } from '../common/constants/font-widths';\n\n@Component({\n selector: 'g[ngx-charts-card]',\n template: `\n <svg:g [attr.transform]=\"transform\" class=\"cell\" (click)=\"onClick()\">\n <svg:rect class=\"card\" [style.fill]=\"color\" [attr.width]=\"cardWidth\" [attr.height]=\"cardHeight\" rx=\"3\" ry=\"3\" />\n <svg:path\n *ngIf=\"bandColor && bandColor !== color\"\n class=\"card-band\"\n [attr.fill]=\"bandColor\"\n [attr.transform]=\"transformBand\"\n stroke=\"none\"\n [attr.d]=\"bandPath\"\n />\n <title>{{ label }}</title>\n <svg:foreignObject\n class=\"trimmed-label\"\n x=\"5\"\n [attr.x]=\"textPadding[3]\"\n [attr.y]=\"cardHeight - textPadding[2]\"\n [attr.width]=\"textWidth\"\n [attr.height]=\"labelFontSize + textPadding[2]\"\n alignment-baseline=\"hanging\"\n >\n <xhtml:p\n [style.color]=\"textColor\"\n [style.fontSize.px]=\"labelFontSize\"\n [style.lineHeight.px]=\"labelFontSize\"\n [innerHTML]=\"formattedLabel\"\n >\n </xhtml:p>\n </svg:foreignObject>\n <svg:text\n #textEl\n class=\"value-text\"\n [attr.x]=\"textPadding[3]\"\n [attr.y]=\"textPadding[0]\"\n [style.fill]=\"textColor\"\n text-anchor=\"start\"\n alignment-baseline=\"hanging\"\n [style.font-size.pt]=\"textFontSize\"\n >\n {{ value }}\n </svg:text>\n </svg:g>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class CardComponent implements OnChanges, OnDestroy {\n @Input() color: string;\n @Input() bandColor: string;\n @Input() textColor: string;\n @Input() x: number;\n @Input() y: number;\n @Input() width: number;\n @Input() height: number;\n @Input() label: string;\n @Input() data: GridData;\n @Input() medianSize: number;\n @Input() valueFormatting: any;\n @Input() labelFormatting: any;\n @Input() animations: boolean = true;\n\n @Output() select = new EventEmitter();\n\n @ViewChild('textEl', { static: false }) textEl: ElementRef;\n\n element: HTMLElement;\n value: string = '';\n transform: string;\n formattedLabel: string;\n cardWidth: number;\n cardHeight: number;\n textWidth: number;\n textFontSize: number = 12;\n textTransform: string = '';\n initialized: boolean = false;\n animationReq: number;\n\n bandHeight: number = 10;\n transformBand: string;\n textPadding: number[] = [10, 20, 5, 20];\n labelFontSize: number = 15;\n\n bandPath: string;\n\n constructor(\n element: ElementRef,\n private cd: ChangeDetectorRef,\n private zone: NgZone,\n @Inject(PLATFORM_ID) private platformId: any\n ) {\n this.element = element.nativeElement;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n this.update();\n }\n\n ngOnInit() {\n if (isPlatformServer(this.platformId)) {\n this.scaleTextSSR();\n }\n }\n\n ngOnDestroy(): void {\n if (isPlatformBrowser(this.platformId)) {\n cancelAnimationFrame(this.animationReq);\n }\n }\n\n update(): void {\n this.zone.run(() => {\n const hasValue = this.data && typeof this.data.value !== 'undefined';\n const valueFormatting = this.valueFormatting || (card => card.value.toLocaleString());\n const labelFormatting = this.labelFormatting || (card => escapeLabel(trimLabel(card.label, 55)));\n\n this.transform = `translate(${this.x} , ${this.y})`;\n\n this.textWidth = Math.max(0, this.width) - this.textPadding[1] - this.textPadding[3];\n this.cardWidth = Math.max(0, this.width);\n this.cardHeight = Math.max(0, this.height);\n\n this.label = this.label ? this.label : (this.data.name as any);\n\n const cardData = {\n label: this.label,\n data: this.data,\n value: this.data.value\n };\n\n this.formattedLabel = labelFormatting(cardData);\n this.transformBand = `translate(0 , ${this.cardHeight - this.bandHeight})`;\n\n const value = hasValue ? valueFormatting(cardData) : '';\n\n this.value = this.paddedValue(value);\n this.setPadding();\n\n this.bandPath = roundedRect(0, 0, this.cardWidth, this.bandHeight, 3, [false, false, true, true]);\n\n setTimeout(() => {\n if (isPlatformBrowser(this.platformId)) {\n this.scaleText();\n }\n this.value = value;\n if (hasValue && !this.initialized) {\n setTimeout(() => this.startCount(), 20);\n }\n }, 8);\n });\n }\n\n paddedValue(value: string): string {\n if (this.medianSize && this.medianSize > value.length) {\n value += '\\u2007'.repeat(this.medianSize - value.length);\n }\n return value;\n }\n\n startCount(): void {\n if (!this.initialized && this.animations) {\n cancelAnimationFrame(this.animationReq);\n\n const val = this.data.value;\n const decs = decimalChecker(val);\n const valueFormatting = this.valueFormatting || (card => card.value.toLocaleString());\n\n const callback = ({ value, finished }) => {\n this.zone.run(() => {\n value = finished ? val : value;\n this.value = valueFormatting({ label: this.label, data: this.data, value });\n if (!finished) {\n this.value = this.paddedValue(this.value);\n }\n this.cd.markForCheck();\n });\n };\n\n this.animationReq = count(0, val, decs, 1, callback);\n this.initialized = true;\n }\n }\n\n scaleText(): void {\n this.zone.run(() => {\n const { width, height } = this.textEl.nativeElement.getBoundingClientRect();\n if (width === 0 || height === 0) {\n return;\n }\n\n const textPadding = (this.textPadding[1] = this.textPadding[3] = this.cardWidth / 8);\n const availableWidth = this.cardWidth - 2 * textPadding;\n const availableHeight = this.cardHeight / 3;\n\n const resizeScale = Math.min(availableWidth / width, availableHeight / height);\n this.textFontSize = Math.floor(this.textFontSize * resizeScale);\n this.labelFontSize = Math.min(this.textFontSize, 15);\n\n this.setPadding();\n this.cd.markForCheck();\n });\n }\n\n scaleTextSSR() {\n const width = calculateTextWidth(VERDANA_FONT_WIDTHS_16_PX, this.value, 10);\n const height = 18;\n const textPadding = (this.textPadding[1] = this.textPadding[3] = this.cardWidth / 8);\n const availableWidth = this.cardWidth - 2 * textPadding;\n const availableHeight = this.cardHeight / 3;\n\n const resizeScale = Math.min(availableWidth / width, availableHeight / height);\n\n this.textFontSize = Math.floor(this.textFontSize * resizeScale);\n this.labelFontSize = Math.min(this.textFontSize, 15);\n\n this.setPadding();\n }\n\n setPadding() {\n this.textPadding[1] = this.textPadding[3] = this.cardWidth / 8;\n const padding = this.cardHeight / 2;\n this.textPadding[0] = padding - this.textFontSize - this.labelFontSize / 2;\n this.textPadding[2] = padding - this.labelFontSize;\n }\n\n onClick(): void {\n this.select.emit(this.data);\n }\n}\n","import * as d3_color from 'd3-color';\n\n/**\n * Converts a hex to RGB\n *\n * @export\n */\nexport function hexToRgb(value: string): any {\n // deprecated, use d3.color()\n return d3_color.rgb(value);\n}\n\n/**\n * Accepts a color (string) and returns a inverted hex color (string)\n * http://stackoverflow.com/questions/9600295/automatically-change-text-color-to-assure-readability\n *\n * @export\n */\nexport function invertColor(value: string): string {\n const color = d3_color.rgb(value);\n const { r, g, b, opacity } = color;\n if (opacity === 0) {\n return color.toString();\n }\n const yiq = (r * 299 + g * 587 + b * 114) / 1000;\n const depth = yiq >= 128 ? -0.8 : 0.8;\n\n return shadeRGBColor(color, depth);\n}\n\n/**\n * Given a rgb, it will darken/lighten\n * http://stackoverflow.com/questions/5560248/programmatically-lighten-or-darken-a-hex-color-or-rgb-and-blend-colors\n *\n * @export\n * @param \\{ r, g, b }\n */\nexport function shadeRGBColor({ r, g, b }, percent: number): string {\n const t = percent < 0 ? 0 : 255;\n const p = percent < 0 ? percent * -1 : percent;\n\n r = Math.round((t - r) * p) + r;\n g = Math.round((t - g) * p) + g;\n b = Math.round((t - b) * p) + b;\n\n return `rgb(${r}, ${g}, ${b})`;\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnChanges,\n SimpleChanges,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { invertColor } from '../utils/color-utils';\nimport { GridItem, GridData } from '../common/grid-layout.helper';\nimport { ViewDimensions } from '../common/types';\nimport { ColorHelper } from '../common/color.helper';\n\nexport interface CardModel extends GridItem {\n color: string;\n tooltipText: string;\n}\n\n@Component({\n selector: 'g[ngx-charts-card-series]',\n template: `\n <svg:rect\n *ngFor=\"let c of emptySlots; trackBy: trackBy\"\n class=\"card-empty\"\n [attr.x]=\"c.x\"\n [attr.y]=\"c.y\"\n [style.fill]=\"emptyColor\"\n [attr.width]=\"c.width\"\n [attr.height]=\"c.height\"\n rx=\"3\"\n ry=\"3\"\n />\n <svg:g\n ngx-charts-card\n *ngFor=\"let c of cards; trackBy: trackBy\"\n [x]=\"c.x\"\n [y]=\"c.y\"\n [width]=\"c.width\"\n [height]=\"c.height\"\n [color]=\"c.color\"\n [bandColor]=\"c.bandColor\"\n [textColor]=\"c.textColor\"\n [data]=\"c.data\"\n [label]=\"c.label\"\n [medianSize]=\"medianSize\"\n [valueFormatting]=\"valueFormatting\"\n [labelFormatting]=\"labelFormatting\"\n [animations]=\"animations\"\n (select)=\"onClick($event)\"\n />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class CardSeriesComponent implements OnChanges {\n @Input() data: CardModel[];\n @Input() dims: ViewDimensions;\n @Input() colors: ColorHelper;\n @Input() innerPadding: number = 15;\n\n @Input() cardColor: string;\n @Input() bandColor: string;\n @Input() emptyColor = 'rgba(0, 0, 0, 0)';\n @Input() textColor: string;\n @Input() valueFormatting: any;\n @Input() labelFormatting: any;\n @Input() animations: boolean = true;\n\n @Output() select = new EventEmitter();\n\n cards: CardModel[];\n emptySlots: any[];\n medianSize: number;\n\n ngOnChanges(changes: SimpleChanges): void {\n this.update();\n }\n\n update(): void {\n if (this.data.length > 2) {\n const valueFormatting = this.valueFormatting || (card => card.value.toLocaleString());\n\n const sortedLengths = this.data\n .map(d => {\n const hasValue = d && d.data && typeof d.data.value !== 'undefined' && d.data.value !== null;\n return hasValue\n ? valueFormatting({\n data: d.data,\n label: d ? d.data.name : '',\n value: d && d.data ? d.data.value : ''\n }).length\n : 0;\n })\n .sort((a, b) => b - a);\n const idx = Math.ceil(this.data.length / 2);\n this.medianSize = sortedLengths[idx];\n }\n\n const cards = this.getCards();\n this.cards = cards.filter(d => d.data.value !== null);\n this.emptySlots = cards.filter(d => d.data.value === null);\n }\n\n getCards(): CardModel[] {\n const yPadding =\n typeof this.innerPadding === 'number' ? this.innerPadding : this.innerPadding[0] + this.innerPadding[2];\n const xPadding =\n typeof this.innerPadding === 'number' ? this.innerPadding : this.innerPadding[1] + this.innerPadding[3];\n\n return this.data.map((d, index) => {\n let label = d.data.name as any;\n if (label && label.constructor.name === 'Date') {\n label = label.toLocaleDateString();\n } else {\n label = label ? label.toLocaleString() : label;\n }\n\n const value = d.data.value;\n const valueColor = label ? this.colors.getColor(label) : this.emptyColor;\n const color = this.cardColor || valueColor || '#000';\n return {\n x: d.x,\n y: d.y,\n width: d.width - xPadding,\n height: d.height - yPadding,\n color,\n bandColor: this.bandColor || valueColor,\n textColor: this.textColor || invertColor(color),\n label,\n data: d.data,\n tooltipText: `${label}: ${value}`\n };\n });\n }\n\n trackBy(index, card): string {\n return card.label;\n }\n\n onClick(data): void {\n this.select.emit(data);\n }\n}\n","import { Component, ViewEncapsulation, ChangeDetectionStrategy, Input } from '@angular/core';\nimport { BaseChartComponent } from '../common/base-chart.component';\nimport { calculateViewDimensions } from '../common/view-dimensions.helper';\nimport { ColorHelper } from '../common/color.helper';\nimport { gridLayout, gridSize } from '../common/grid-layout.helper';\nimport { ScaleType, ViewDimensions } from '../common/types';\nimport { CardModel } from './card-series.component';\n\n@Component({\n selector: 'ngx-charts-number-card',\n template: `\n <ngx-charts-chart [view]=\"[width, height]\" [showLegend]=\"false\" [animations]=\"animations\">\n <svg:g [attr.transform]=\"transform\" class=\"number-card chart\" [class.clickable]=\"clickable\">\n <svg:g\n ngx-charts-card-series\n [colors]=\"colors\"\n [cardColor]=\"cardColor\"\n [bandColor]=\"bandColor\"\n [textColor]=\"textColor\"\n [emptyColor]=\"emptyColor\"\n [data]=\"data\"\n [dims]=\"dims\"\n [innerPadding]=\"innerPadding\"\n [valueFormatting]=\"valueFormatting\"\n [labelFormatting]=\"labelFormatting\"\n [animations]=\"animations\"\n (select)=\"onClick($event)\"\n />\n </svg:g>\n </ngx-charts-chart>\n `,\n styleUrls: ['../common/base-chart.component.scss', './card.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NumberCardComponent extends BaseChartComponent {\n @Input() cardColor: string;\n @Input() bandColor: string;\n @Input() emptyColor: string = 'rgba(0, 0, 0, 0)';\n @Input() innerPadding: number = 15;\n @Input() textColor: string;\n @Input() valueFormatting: any;\n @Input() labelFormatting: any;\n @Input() designatedTotal: number;\n\n dims: ViewDimensions;\n data: CardModel[];\n colors: ColorHelper;\n transform: string;\n domain: any[];\n margin: number[] = [10, 10, 10, 10];\n\n get clickable(): boolean {\n return !!this.select.observers.length;\n }\n\n update(): void {\n super.update();\n\n this.dims = calculateViewDimensions({\n width: this.width,\n height: this.height,\n margins: this.margin\n });\n\n this.formatDates();\n\n this.domain = this.getDomain();\n\n this.setColors();\n this.transform = `translate(${this.dims.xOffset} , ${this.margin[0]})`;\n\n const size = gridSize(this.dims, this.results.length, 150);\n const N = size[0] * size[1];\n\n const data = this.results.slice();\n\n while (data.length < N) {\n data.push({ value: null });\n }\n\n this.data = gridLayout(this.dims, data, 150, this.designatedTotal) as any;\n }\n\n getDomain(): string[] {\n return this.results.map(d => d.label);\n }\n\n onClick(data): void {\n this.select.emit(data);\n }\n\n setColors(): void {\n this.colors = new ColorHelper(this.scheme, ScaleType.Ordinal, this.domain, this.customColors);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { ChartCommonModule } from '../common/chart-common.module';\nimport { CardComponent } from './card.component';\nimport { CardSeriesComponent } from './card-series.component';\nimport { NumberCardComponent } from './number-card.component';\n\n@NgModule({\n imports: [ChartCommonModule],\n declarations: [CardComponent, CardSeriesComponent, NumberCardComponent],\n exports: [CardComponent, CardSeriesComponent, NumberCardComponent]\n})\nexport class NumberCardModule {}\n","import { Component, Input, Output, EventEmitter, ElementRef, OnChanges, ChangeDetectionStrategy } from '@angular/core';\nimport { select } from 'd3-selection';\n\nimport { invertColor } from '../utils/color-utils';\nimport { trimLabel } from '../common/trim-label.helper';\nimport { escapeLabel } from '../common/label.helper';\nimport { id } from '../utils/id';\nimport { Gradient } from '../common/types';\nimport { DataItem } from '../models/chart-data.model';\n@Component({\n selector: 'g[ngx-charts-tree-map-cell]',\n template: `\n <svg:g>\n <defs *ngIf=\"gradient\">\n <svg:g ngx-charts-svg-linear-gradient orientation=\"vertical\" [name]=\"gradientId\" [stops]=\"gradientStops\" />\n </defs>\n <svg:rect\n [attr.fill]=\"gradient ? gradientUrl : fill\"\n [attr.width]=\"width\"\n [attr.height]=\"height\"\n [attr.x]=\"x\"\n [attr.y]=\"y\"\n [style.cursor]=\"'pointer'\"\n class=\"cell\"\n (click)=\"onClick()\"\n />\n <svg:foreignObject\n *ngIf=\"width >= 70 && height >= 35\"\n [attr.x]=\"x\"\n [attr.y]=\"y\"\n [attr.width]=\"width\"\n [attr.height]=\"height\"\n class=\"treemap-label\"\n [style.pointer-events]=\"'none'\"\n >\n <xhtml:p [style.color]=\"getTextColor()\" [style.height]=\"height + 'px'\" [style.width]=\"width + 'px'\">\n <xhtml:span class=\"treemap-label\" [innerHTML]=\"formattedLabel\"> </xhtml:span>\n <xhtml:br />\n <xhtml:span\n *ngIf=\"animations\"\n class=\"treemap-val\"\n ngx-charts-count-up\n [countTo]=\"value\"\n [valueFormatting]=\"valueFormatting\"\n >\n </xhtml:span>\n <xhtml:span *ngIf=\"!animations\" class=\"treemap-val\">\n {{ formattedValue }}\n </xhtml:span>\n </xhtml:p>\n </svg:foreignObject>\n </svg:g>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TreeMapCellComponent implements OnChanges {\n @Input() data: DataItem;\n @Input() fill: string;\n @Input() x: number;\n @Input() y: number;\n @Input() width: number;\n @Input() height: number;\n @Input() label: string;\n @Input() value: any;\n // @Input() valueType;\n @Input() valueFormatting: any;\n @Input() labelFormatting: any;\n @Input() gradient: boolean = false;\n @Input() animations: boolean = true;\n\n @Output() select = new EventEmitter();\n\n gradientStops: Gradient[];\n gradientId: string;\n gradientUrl: string;\n\n element: HTMLElement;\n transform: string;\n formattedLabel: string;\n formattedValue: string;\n initialized: boolean = false;\n\n constructor(element: ElementRef) {\n this.element = element.nativeElement;\n }\n\n ngOnChanges(): void {\n this.update();\n\n this.valueFormatting = this.valueFormatting || (value => value.toLocaleString());\n const labelFormatting = this.labelFormatting || (cell => escapeLabel(trimLabel(cell.label, 55)));\n\n const cellData = {\n data: this.data,\n label: this.label,\n value: this.value\n };\n\n this.formattedValue = this.valueFormatting(cellData.value);\n this.formattedLabel = labelFormatting(cellData);\n\n this.gradientId = 'grad' + id().toString();\n this.gradientUrl = `url(#${this.gradientId})`;\n this.gradientStops = this.getGradientStops();\n }\n\n update(): void {\n if (this.initialized) {\n this.animateToCurrentForm();\n } else {\n if (this.animations) {\n this.loadAnimation();\n }\n this.initialized = true;\n }\n }\n\n loadAnimation(): void {\n const node = select(this.element).select('.cell');\n\n node.attr('opacity', 0).attr('x', this.x).attr('y', this.y);\n\n this.animateToCurrentForm();\n }\n\n getTextColor(): string {\n return invertColor(this.fill);\n }\n\n animateToCurrentForm(): void {\n const node = select(this.element).select('.cell');\n\n if (this.animations) {\n node\n .transition()\n .duration(750)\n .attr('opacity', 1)\n .attr('x', this.x)\n .attr('y', this.y)\n .attr('width', this.width)\n .attr('height', this.height);\n } else {\n node.attr('opacity', 1).attr('x', this.x).attr('y', this.y).attr('width', this.width).attr('height', this.height);\n }\n }\n\n onClick(): void {\n this.select.emit(this.data);\n }\n\n getGradientStops(): Gradient[] {\n return [\n {\n offset: 0,\n color: this.fill,\n opacity: 0.3\n },\n {\n offset: 100,\n color: this.fill,\n opacity: 1\n }\n ];\n }\n}\n","import {\n Component,\n OnChanges,\n Input,\n Output,\n SimpleChanges,\n EventEmitter,\n ChangeDetectionStrategy,\n TemplateRef\n} from '@angular/core';\nimport { ColorHelper } from '../common/color.helper';\nimport { escapeLabel } from '../common/label.helper';\nimport { DataItem } from '../models/chart-data.model';\nimport { ViewDimensions } from '../common/types';\n\ninterface TreeMapCell {\n data: DataItem;\n fill: string;\n height: number;\n label: string;\n value: any;\n width: number;\n x: number;\n y: number;\n}\n\n@Component({\n selector: 'g[ngx-charts-tree-map-cell-series]',\n template: `\n <svg:g\n ngx-charts-tree-map-cell\n *ngFor=\"let c of cells; trackBy: trackBy\"\n [data]=\"c.data\"\n [x]=\"c.x\"\n [y]=\"c.y\"\n [width]=\"c.width\"\n [height]=\"c.height\"\n [fill]=\"c.fill\"\n [label]=\"c.label\"\n [value]=\"c.value\"\n [valueFormatting]=\"valueFormatting\"\n [labelFormatting]=\"labelFormatting\"\n [gradient]=\"gradient\"\n [animations]=\"animations\"\n (select)=\"onClick($event)\"\n ngx-tooltip\n [tooltipDisabled]=\"tooltipDisabled\"\n [tooltipPlacement]=\"'top'\"\n [tooltipType]=\"'tooltip'\"\n [tooltipTitle]=\"tooltipTemplate ? undefined : getTooltipText(c)\"\n [tooltipTemplate]=\"tooltipTemplate\"\n [tooltipContext]=\"c.data\"\n ></svg:g>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TreeMapCellSeriesComponent implements OnChanges {\n @Input() data: any; // type this\n @Input() dims: ViewDimensions;\n @Input() colors: ColorHelper;\n @Input() valueFormatting: any;\n @Input() labelFormatting: any;\n @Input() gradient: boolean = false;\n @Input() tooltipDisabled: boolean = false;\n @Input() tooltipTemplate: TemplateRef<any>;\n @Input() animations: boolean = true;\n\n @Output() select = new EventEmitter();\n\n cells: TreeMapCell[];\n\n ngOnChanges(changes: SimpleChanges): void {\n this.cells = this.getCells();\n }\n\n getCells(): TreeMapCell[] {\n return this.data.children\n .filter(d => {\n return d.depth === 1;\n })\n .map((d, index) => {\n const label = d.id;\n\n return {\n data: d.data,\n x: d.x0,\n y: d.y0,\n width: d.x1 - d.x0,\n height: d.y1 - d.y0,\n fill: this.colors.getColor(label),\n label,\n value: d.value\n };\n });\n }\n\n getTooltipText({ label, value }: { label: any; value: any }): string {\n return `\n <span class=\"tooltip-label\">${escapeLabel(label)}</span>\n <span class=\"tooltip-val\">${value.toLocaleString()}</span>\n `;\n }\n\n onClick(data): void {\n this.select.emit(data);\n }\n\n trackBy(index, item): string {\n return item.label;\n }\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n ContentChild,\n TemplateRef\n} from '@angular/core';\nimport { treemap, stratify } from 'd3-hierarchy';\n\nimport { BaseChartComponent } from '../common/base-chart.component';\nimport { calculateViewDimensions } from '../common/view-dimensions.helper';\nimport { ColorHelper } from '../common/color.helper';\nimport { ViewDimensions, ScaleType } from '../common/types';\nimport { DataItem } from '../models/chart-data.model';\n\n@Component({\n selector: 'ngx-charts-tree-map',\n template: `\n <ngx-charts-chart [view]=\"[width, height]\" [showLegend]=\"false\" [animations]=\"animations\">\n <svg:g [attr.transform]=\"transform\" class=\"tree-map chart\">\n <svg:g\n ngx-charts-tree-map-cell-series\n [colors]=\"colors\"\n [data]=\"data\"\n [dims]=\"dims\"\n [tooltipDisabled]=\"tooltipDisabled\"\n [tooltipTemplate]=\"tooltipTemplate\"\n [valueFormatting]=\"valueFormatting\"\n [labelFormatting]=\"labelFormatting\"\n [gradient]=\"gradient\"\n [animations]=\"animations\"\n (select)=\"onClick($event)\"\n />\n </svg:g>\n </ngx-charts-chart>\n `,\n styleUrls: ['./tree-map.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TreeMapComponent extends BaseChartComponent {\n @Input() results: DataItem[];\n @Input() tooltipDisabled: boolean = false;\n @Input() valueFormatting: any;\n @Input() labelFormatting: any;\n @Input() gradient: boolean = false;\n\n @Output() select = new EventEmitter();\n\n @ContentChild('tooltipTemplate') tooltipTemplate: TemplateRef<any>;\n\n dims: ViewDimensions;\n domain: any;\n transform: any;\n colors: ColorHelper;\n treemap: any;\n data: DataItem;\n margin: number[] = [10, 10, 10, 10];\n\n update(): void {\n super.update();\n\n this.dims = calculateViewDimensions({\n width: this.width,\n height: this.height,\n margins: this.margin\n });\n\n this.domain = this.getDomain();\n\n this.treemap = treemap<any>().size([this.dims.width, this.dims.height]);\n\n const rootNode = {\n name: 'root',\n value: 0,\n isRoot: true\n };\n\n const root = stratify<any>()\n .id(d => {\n let label = d.name;\n\n if (label.constructor.name === 'Date') {\n label = label.toLocaleDateString();\n } else {\n label = label.toLocaleString();\n }\n return label;\n })\n .parentId(d => (d.isRoot ? null : 'root'))([rootNode, ...this.results])\n .sum(d => d.value);\n\n this.data = this.treemap(root);\n\n this.setColors();\n\n this.transform = `translate(${this.dims.xOffset} , ${this.margin[0]})`;\n }\n\n getDomain(): any[] {\n return this.results.map(d => d.name);\n }\n\n onClick(data: DataItem): void {\n this.select.emit(data);\n }\n\n setColors(): void {\n this.colors = new ColorHelper(this.scheme, ScaleType.Ordinal, this.domain, this.customColors);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { ChartCommonModule } from '../common/chart-common.module';\nimport { TreeMapCellComponent } from './tree-map-cell.component';\nimport { TreeMapCellSeriesComponent } from './tree-map-cell-series.component';\nimport { TreeMapComponent } from './tree-map.component';\n\n@NgModule({\n imports: [ChartCommonModule],\n declarations: [TreeMapCellComponent, TreeMapCellSeriesComponent, TreeMapComponent],\n exports: [TreeMapCellComponent, TreeMapCellSeriesComponent, TreeMapComponent]\n})\nexport class TreeMapModule {}\n","import {\n Component,\n Input,\n ElementRef,\n ViewChild,\n AfterViewInit,\n ViewEncapsulation,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { scaleLinear } from 'd3-scale';\n\nimport { BaseChartComponent } from '../common/base-chart.component';\nimport { calculateViewDimensions } from '../common/view-dimensions.helper';\nimport { ColorHelper } from '../common/color.helper';\nimport { ScaleType, ViewDimensions } from '../common/types';\nimport { calculateTextWidth } from '../utils/calculate-width';\nimport { VERDANA_FONT_WIDTHS_16_PX } from '../common/constants/font-widths';\nimport { isPlatformBrowser, isPlatformServer } from '@angular/common';\n\nenum ElementType {\n Value = 'value',\n Units = 'units'\n}\n@Component({\n selector: 'ngx-charts-linear-gauge',\n template: `\n <ngx-charts-chart [view]=\"[width, height]\" [showLegend]=\"false\" [animations]=\"animations\" (click)=\"onClick()\">\n <svg:g class=\"linear-gauge chart\">\n <svg:g\n ngx-charts-bar\n class=\"background-bar\"\n [width]=\"dims.width\"\n [height]=\"3\"\n [x]=\"margin[3]\"\n [y]=\"dims.height / 2 + margin[0] - 2\"\n [data]=\"{}\"\n [orientation]=\"'horizontal'\"\n [roundEdges]=\"true\"\n [animations]=\"animations\"\n ></svg:g>\n <svg:g\n ngx-charts-bar\n [width]=\"valueScale(value)\"\n [height]=\"3\"\n [x]=\"margin[3]\"\n [y]=\"dims.height / 2 + margin[0] - 2\"\n [fill]=\"colors.getColor(units)\"\n [data]=\"{}\"\n [orientation]=\"'horizontal'\"\n [roundEdges]=\"true\"\n [animations]=\"animations\"\n ></svg:g>\n\n <svg:line\n *ngIf=\"hasPreviousValue\"\n [attr.transform]=\"transformLine\"\n x1=\"0\"\n y1=\"5\"\n x2=\"0\"\n y2=\"15\"\n [attr.stroke]=\"colors.getColor(units)\"\n />\n\n <svg:line\n *ngIf=\"hasPreviousValue\"\n [attr.transform]=\"transformLine\"\n x1=\"0\"\n y1=\"-5\"\n x2=\"0\"\n y2=\"-15\"\n [attr.stroke]=\"colors.getColor(units)\"\n />\n\n <svg:g [attr.transform]=\"transform\">\n <svg:g [attr.transform]=\"valueTranslate\">\n <svg:text\n #valueTextEl\n class=\"value\"\n [style.textAnchor]=\"'middle'\"\n [attr.transform]=\"valueTextTransform\"\n alignment-baseline=\"after-edge\"\n >\n {{ displayValue }}\n </svg:text>\n </svg:g>\n\n <svg:g [attr.transform]=\"unitsTranslate\">\n <svg:text\n #unitsTextEl\n class=\"units\"\n [style.textAnchor]=\"'middle'\"\n [attr.transform]=\"unitsTextTransform\"\n alignment-baseline=\"before-edge\"\n >\n {{ units }}\n </svg:text>\n </svg:g>\n </svg:g>\n </svg:g>\n </ngx-charts-chart>\n `,\n styleUrls: ['../common/base-chart.component.scss', './linear-gauge.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class LinearGaugeComponent extends BaseChartComponent implements AfterViewInit {\n @Input() min: number = 0;\n @Input() max: number = 100;\n @Input() value: number = 0;\n @Input() units: string;\n @Input() previousValue: number;\n @Input() valueFormatting: any;\n\n @ViewChild('valueTextEl') valueTextEl: ElementRef;\n @ViewChild('unitsTextEl') unitsTextEl: ElementRef;\n\n dims: ViewDimensions;\n valueDomain: [number, number];\n valueScale: any;\n\n colors: ColorHelper;\n transform: string;\n margin: number[] = [10, 20, 10, 20];\n transformLine: string;\n\n valueResizeScale: number = 1;\n unitsResizeScale: number = 1;\n valueTextTransform: string = '';\n valueTranslate: string = '';\n unitsTextTransform: string = '';\n unitsTranslate: string = '';\n displayValue: string;\n hasPreviousValue: boolean;\n\n ngAfterViewInit(): void {\n super.ngAfterViewInit();\n setTimeout(() => {\n this.scaleText(ElementType.Value);\n this.scaleText(ElementType.Units);\n });\n }\n\n update(): void {\n super.update();\n\n this.hasPreviousValue = this.previousValue !== undefined;\n this.max = Math.max(this.max, this.value);\n this.min = Math.min(this.min, this.value);\n if (this.hasPreviousValue) {\n this.max = Math.max(this.max, this.previousValue);\n this.min = Math.min(this.min, this.previousValue);\n }\n\n this.dims = calculateViewDimensions({\n width: this.width,\n height: this.height,\n margins: this.margin\n });\n\n this.valueDomain = this.getValueDomain();\n this.valueScale = this.getValueScale();\n this.displayValue = this.getDisplayValue();\n\n this.setColors();\n\n const xOffset = this.margin[3] + this.dims.width / 2;\n const yOffset = this.margin[0] + this.dims.height / 2;\n\n this.transform = `translate(${xOffset}, ${yOffset})`;\n this.transformLine = `translate(${this.margin[3] + this.valueScale(this.previousValue)}, ${yOffset})`;\n this.valueTranslate = `translate(0, -15)`;\n this.unitsTranslate = `translate(0, 15)`;\n\n if (isPlatformServer(this.platformId)) {\n this.scaleTextSSR('value');\n this.scaleTextSSR('units');\n } else {\n setTimeout(() => this.scaleText(ElementType.Value), 50);\n setTimeout(() => this.scaleText(ElementType.Units), 50);\n }\n }\n\n getValueDomain(): [number, number] {\n return [this.min, this.max];\n }\n\n getValueScale(): any {\n return scaleLinear().range([0, this.dims.width]).domain(this.valueDomain);\n }\n\n getDisplayValue(): string {\n if (this.valueFormatting) {\n return this.valueFormatting(this.value);\n }\n return this.value.toLocaleString();\n }\n\n scaleText(element: ElementType, repeat: boolean = true): void {\n let el;\n let resizeScale;\n if (element === ElementType.Value) {\n el = this.valueTextEl;\n resizeScale = this.valueResizeScale;\n } else {\n el = this.unitsTextEl;\n resizeScale = this.unitsResizeScale;\n }\n\n const { width, height } = el.nativeElement.getBoundingClientRect();\n if (width === 0 || height === 0) return;\n const oldScale = resizeScale;\n const availableWidth = this.dims.width;\n const availableHeight = Math.max(this.dims.height / 2 - 15, 0);\n const resizeScaleWidth = Math.floor((availableWidth / (width / resizeScale)) * 100) / 100;\n const resizeScaleHeight = Math.floor((availableHeight / (height / resizeScale)) * 100) / 100;\n resizeScale = Math.min(resizeScaleHeight, resizeScaleWidth);\n\n if (resizeScale !== oldScale) {\n if (element === ElementType.Value) {\n this.valueResizeScale = resizeScale;\n this.valueTextTransform = `scale(${resizeScale}, ${resizeScale})`;\n } else {\n this.unitsResizeScale = resizeScale;\n this.unitsTextTransform = `scale(${resizeScale}, ${resizeScale})`;\n }\n this.cd.markForCheck();\n if (repeat && isPlatformBrowser(this.platformId)) {\n setTimeout(() => {\n this.scaleText(element, false);\n }, 50);\n }\n }\n }\n\n scaleTextSSR(element) {\n let resizeScale = 1;\n\n const value = element === 'value' ? this.displayValue : this.units;\n const width = calculateTextWidth(VERDANA_FONT_WIDTHS_16_PX, value, 10);\n const height = 25;\n\n const availableWidth = this.dims.width;\n const availableHeight = Math.max(this.dims.height / 2 - 15, 0);\n const resizeScaleWidth = Math.floor((availableWidth / (width / resizeScale)) * 100) / 100;\n const resizeScaleHeight = Math.floor((availableHeight / (height / resizeScale)) * 100) / 100;\n resizeScale = Math.min(resizeScaleHeight, resizeScaleWidth);\n\n if (element === 'value') {\n this.valueResizeScale = resizeScale;\n this.valueTextTransform = `scale(${resizeScale}, ${resizeScale})`;\n } else {\n this.unitsResizeScale = resizeScale;\n this.unitsTextTransform = `scale(${resizeScale}, ${resizeScale})`;\n }\n\n this.cd.markForCheck();\n }\n\n onClick(): void {\n this.select.emit({\n name: 'Value',\n value: this.value\n });\n }\n\n setColors(): void {\n this.colors = new ColorHelper(this.scheme, ScaleType.Ordinal, [this.value], this.customColors);\n }\n}\n","import {\n Component,\n Input,\n ElementRef,\n ViewChild,\n AfterViewInit,\n ChangeDetectionStrategy,\n Output,\n EventEmitter,\n ViewEncapsulation,\n ContentChild,\n TemplateRef\n} from '@angular/core';\nimport { scaleLinear } from 'd3-scale';\n\nimport { BaseChartComponent } from '../common/base-chart.component';\nimport { calculateViewDimensions } from '../common/view-dimensions.helper';\nimport { ColorHelper } from '../common/color.helper';\nimport { LegendOptions, LegendPosition, ScaleType, ViewDimensions } from '../common/types';\nimport { ArcItem } from './gauge-arc.component';\n\ninterface Arcs {\n backgroundArc: ArcItem;\n valueArc: ArcItem;\n}\n\n@Component({\n selector: 'ngx-charts-gauge',\n template: `\n <ngx-charts-chart\n [view]=\"[width, height]\"\n [showLegend]=\"legend\"\n [legendOptions]=\"legendOptions\"\n [activeEntries]=\"activeEntries\"\n [animations]=\"animations\"\n (legendLabelClick)=\"onClick($event)\"\n (legendLabelActivate)=\"onActivate($event)\"\n (legendLabelDeactivate)=\"onDeactivate($event)\"\n >\n <svg:g [attr.transform]=\"transform\" class=\"gauge chart\">\n <svg:g *ngFor=\"let arc of arcs; trackBy: trackBy\" [attr.transform]=\"rotation\">\n <svg:g\n ngx-charts-gauge-arc\n [backgroundArc]=\"arc.backgroundArc\"\n [valueArc]=\"arc.valueArc\"\n [cornerRadius]=\"cornerRadius\"\n [colors]=\"colors\"\n [isActive]=\"isActive(arc.valueArc.data)\"\n [tooltipDisabled]=\"tooltipDisabled\"\n [tooltipTemplate]=\"tooltipTemplate\"\n [valueFormatting]=\"valueFormatting\"\n [animations]=\"animations\"\n (select)=\"onClick($event)\"\n (activate)=\"onActivate($event)\"\n (deactivate)=\"onDeactivate($event)\"\n ></svg:g>\n </svg:g>\n\n <svg:g\n ngx-charts-gauge-axis\n *ngIf=\"showAxis\"\n [bigSegments]=\"bigSegments\"\n [smallSegments]=\"smallSegments\"\n [min]=\"min\"\n [max]=\"max\"\n [radius]=\"outerRadius\"\n [angleSpan]=\"angleSpan\"\n [valueScale]=\"valueScale\"\n [startAngle]=\"startAngle\"\n [tickFormatting]=\"axisTickFormatting\"\n ></svg:g>\n\n <svg:text\n #textEl\n *ngIf=\"showText\"\n [style.textAnchor]=\"'middle'\"\n [attr.transform]=\"textTransform\"\n alignment-baseline=\"central\"\n >\n <tspan x=\"0\" dy=\"0\">{{ displayValue }}</tspan>\n <tspan x=\"0\" dy=\"1.2em\">{{ units }}</tspan>\n </svg:text>\n </svg:g>\n </ngx-charts-chart>\n `,\n styleUrls: ['../common/base-chart.component.scss', './gauge.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class GaugeComponent extends BaseChartComponent implements AfterViewInit {\n @Input() legend: boolean = false;\n @Input() legendTitle: string = 'Legend';\n @Input() legendPosition: LegendPosition = LegendPosition.Right;\n @Input() min: number = 0;\n @Input() max: number = 100;\n @Input() textValue: string;\n @Input() units: string;\n @Input() bigSegments: number = 10;\n @Input() smallSegments: number = 5;\n @Input() results: any[];\n @Input() showAxis: boolean = true;\n @Input() startAngle: number = -120;\n @Input() angleSpan: number = 240;\n @Input() activeEntries: any[] = [];\n @Input() axisTickFormatting: any;\n @Input() tooltipDisabled: boolean = false;\n @Input() valueFormatting: (value: any) => string;\n @Input() showText: boolean = true;\n\n // Specify margins\n @Input() margin: number[];\n\n @Output() activate: EventEmitter<any> = new EventEmitter();\n @Output() deactivate: EventEmitter<any> = new EventEmitter();\n\n @ContentChild('tooltipTemplate') tooltipTemplate: TemplateRef<any>;\n\n @ViewChild('textEl') textEl: ElementRef;\n\n dims: ViewDimensions;\n domain: any[];\n valueDomain: [number, number];\n valueScale: any;\n\n colors: ColorHelper;\n transform: string;\n\n outerRadius: number;\n textRadius: number; // max available radius for the text\n resizeScale: number = 1;\n rotation: string = '';\n textTransform: string = 'scale(1, 1)';\n cornerRadius: number = 10;\n arcs: Arcs[];\n displayValue: string;\n legendOptions: LegendOptions;\n\n ngAfterViewInit(): void {\n super.ngAfterViewInit();\n setTimeout(() => this.scaleText());\n }\n\n update(): void {\n super.update();\n\n if (!this.showAxis) {\n if (!this.margin) {\n this.margin = [10, 20, 10, 20];\n }\n } else {\n if (!this.margin) {\n this.margin = [60, 100, 60, 100];\n }\n }\n\n // make the starting angle positive\n if (this.startAngle < 0) {\n this.startAngle = (this.startAngle % 360) + 360;\n }\n\n this.angleSpan = Math.min(this.angleSpan, 360);\n\n this.dims = calculateViewDimensions({\n width: this.width,\n height: this.height,\n margins: this.margin,\n showLegend: this.legend,\n legendPosition: this.legendPosition\n });\n\n this.domain = this.getDomain();\n this.valueDomain = this.getValueDomain();\n this.valueScale = this.getValueScale();\n this.displayValue = this.getDisplayValue();\n\n this.outerRadius = Math.min(this.dims.width, this.dims.height) / 2;\n\n this.arcs = this.getArcs();\n\n this.setColors();\n this.legendOptions = this.getLegendOptions();\n\n const xOffset = this.margin[3] + this.dims.width / 2;\n const yOffset = this.margin[0] + this.dims.height / 2;\n\n this.transform = `translate(${xOffset}, ${yOffset})`;\n this.rotation = `rotate(${this.startAngle})`;\n setTimeout(() => this.scaleText(), 50);\n }\n\n getArcs(): any[] {\n const arcs = [];\n\n const availableRadius = this.outerRadius * 0.7;\n\n const radiusPerArc = Math.min(availableRadius / this.results.length, 10);\n const arcWidth = radiusPerArc * 0.7;\n this.textRadius = this.outerRadius - this.results.length * radiusPerArc;\n this.cornerRadius = Math.floor(arcWidth / 2);\n\n let i = 0;\n for (const d of this.results) {\n const outerRadius = this.outerRadius - i * radiusPerArc;\n const innerRadius = outerRadius - arcWidth;\n\n const backgroundArc = {\n endAngle: (this.angleSpan * Math.PI) / 180,\n innerRadius,\n outerRadius,\n data: {\n value: this.max,\n name: d.name\n }\n };\n\n const valueArc = {\n endAngle: (Math.min(this.valueScale(d.value), this.angleSpan) * Math.PI) / 180,\n innerRadius,\n outerRadius,\n data: {\n value: d.value,\n name: d.name\n }\n };\n\n const arc = {\n backgroundArc,\n valueArc\n };\n\n arcs.push(arc);\n i++;\n }\n\n return arcs;\n }\n\n getDomain(): string[] {\n return this.results.map(d => d.name);\n }\n\n getValueDomain(): [number, number] {\n const values = this.results.map(d => d.value);\n const dataMin = Math.min(...values);\n const dataMax = Math.max(...values);\n\n if (this.min !== undefined) {\n this.min = Math.min(this.min, dataMin);\n } else {\n this.min = dataMin;\n }\n\n if (this.max !== undefined) {\n this.max = Math.max(this.max, dataMax);\n } else {\n this.max = dataMax;\n }\n\n return [this.min, this.max];\n }\n\n getValueScale(): any {\n return scaleLinear().range([0, this.angleSpan]).nice().domain(this.valueDomain);\n }\n\n getDisplayValue(): string {\n const value = this.results.map(d => d.value).reduce((a, b) => a + b, 0);\n\n if (this.textValue && 0 !== this.textValue.length) {\n return this.textValue.toLocaleString();\n }\n\n if (this.valueFormatting) {\n return this.valueFormatting(value);\n }\n\n return value.toLocaleString();\n }\n\n scaleText(repeat: boolean = true): void {\n if (!this.showText) {\n return;\n }\n const { width } = this.textEl.nativeElement.getBoundingClientRect();\n const oldScale = this.resizeScale;\n\n if (width === 0) {\n this.resizeScale = 1;\n } else {\n const availableSpace = this.textRadius;\n this.resizeScale = Math.floor((availableSpace / (width / this.resizeScale)) * 100) / 100;\n }\n\n if (this.resizeScale !== oldScale) {\n this.textTransform = `scale(${this.resizeScale}, ${this.resizeScale})`;\n this.cd.markForCheck();\n if (repeat) {\n setTimeout(() => this.scaleText(false), 50);\n }\n }\n }\n\n onClick(data): void {\n this.select.emit(data);\n }\n\n getLegendOptions(): LegendOptions {\n return {\n scaleType: ScaleType.Ordinal,\n colors: this.colors,\n domain: this.domain,\n title: this.legendTitle,\n position: this.legendPosition\n };\n }\n\n setColors(): void {\n this.colors = new ColorHelper(this.scheme, ScaleType.Ordinal, this.domain, this.customColors);\n }\n\n onActivate(item): void {\n const idx = this.activeEntries.findIndex(d => {\n return d.name === item.name && d.value === item.value;\n });\n if (idx > -1) {\n return;\n }\n\n this.activeEntries = [item, ...this.activeEntries];\n this.activate.emit({ value: item, entries: this.activeEntries });\n }\n\n onDeactivate(item): void {\n const idx = this.activeEntries.findIndex(d => {\n return d.name === item.name && d.value === item.value;\n });\n\n this.activeEntries.splice(idx, 1);\n this.activeEntries = [...this.activeEntries];\n\n this.deactivate.emit({ value: item, entries: this.activeEntries });\n }\n\n isActive(entry): boolean {\n if (!this.activeEntries) return false;\n const item = this.activeEntries.find(d => {\n return entry.name === d.name && entry.series === d.series;\n });\n return item !== undefined;\n }\n\n trackBy(index: number, item: Arcs): any {\n return item.valueArc.data.name;\n }\n}\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, TemplateRef } from '@angular/core';\nimport { formatLabel, escapeLabel } from '../common/label.helper';\nimport { ColorHelper } from '../common/color.helper';\nimport { DataItem } from '../models/chart-data.model';\n\nexport interface ArcItem {\n data: DataItem;\n endAngle: number;\n innerRadius: number;\n outerRadius: number;\n}\n\n@Component({\n selector: 'g[ngx-charts-gauge-arc]',\n template: `\n <svg:g\n ngx-charts-pie-arc\n class=\"background-arc\"\n [startAngle]=\"0\"\n [endAngle]=\"backgroundArc.endAngle\"\n [innerRadius]=\"backgroundArc.innerRadius\"\n [outerRadius]=\"backgroundArc.outerRadius\"\n [cornerRadius]=\"cornerRadius\"\n [data]=\"backgroundArc.data\"\n [animate]=\"false\"\n [pointerEvents]=\"false\"\n ></svg:g>\n <svg:g\n ngx-charts-pie-arc\n [startAngle]=\"0\"\n [endAngle]=\"valueArc.endAngle\"\n [innerRadius]=\"valueArc.innerRadius\"\n [outerRadius]=\"valueArc.outerRadius\"\n [cornerRadius]=\"cornerRadius\"\n [fill]=\"colors.getColor(valueArc.data.name)\"\n [data]=\"valueArc.data\"\n [animate]=\"animations\"\n [isActive]=\"isActive\"\n (select)=\"select.emit($event)\"\n (activate)=\"activate.emit($event)\"\n (deactivate)=\"deactivate.emit($event)\"\n ngx-tooltip\n [tooltipDisabled]=\"tooltipDisabled\"\n [tooltipPlacement]=\"'top'\"\n [tooltipType]=\"'tooltip'\"\n [tooltipTitle]=\"tooltipTemplate ? undefined : tooltipText(valueArc)\"\n [tooltipTemplate]=\"tooltipTemplate\"\n [tooltipContext]=\"valueArc.data\"\n ></svg:g>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class GaugeArcComponent {\n @Input() backgroundArc: ArcItem;\n @Input() valueArc: ArcItem;\n @Input() cornerRadius: number;\n @Input() colors: ColorHelper;\n @Input() isActive: boolean = false;\n @Input() tooltipDisabled: boolean = false;\n @Input() valueFormatting: (value: any) => string;\n @Input() tooltipTemplate: TemplateRef<any>;\n @Input() animations: boolean = true;\n\n @Output() select = new EventEmitter();\n @Output() activate = new EventEmitter();\n @Output() deactivate = new EventEmitter();\n\n tooltipText(arc: ArcItem): string {\n const label = formatLabel(arc.data.name);\n let val;\n\n if (this.valueFormatting) {\n val = this.valueFormatting(arc.data.value);\n } else {\n val = formatLabel(arc.data.value);\n }\n\n return `\n <span class=\"tooltip-label\">${escapeLabel(label)}</span>\n <span class=\"tooltip-val\">${val}</span>\n `;\n }\n}\n","import { Component, Input, OnChanges, SimpleChanges, ChangeDetectionStrategy } from '@angular/core';\nimport { line } from 'd3-shape';\nimport { TextAnchor } from '../common/types';\n\ninterface Big {\n line: string;\n text: string;\n textAnchor: string;\n textTransform: string;\n}\n\ninterface Ticks {\n big: Big[];\n small: Array<{ line: string }>;\n}\n\n@Component({\n selector: 'g[ngx-charts-gauge-axis]',\n template: `\n <svg:g [attr.transform]=\"rotate\">\n <svg:g *ngFor=\"let tick of ticks.big\" class=\"gauge-tick gauge-tick-large\">\n <svg:path [attr.d]=\"tick.line\" />\n </svg:g>\n <svg:g *ngFor=\"let tick of ticks.big\" class=\"gauge-tick gauge-tick-large\">\n <svg:text\n [style.textAnchor]=\"tick.textAnchor\"\n [attr.transform]=\"tick.textTransform\"\n alignment-baseline=\"central\"\n >\n {{ tick.text }}\n </svg:text>\n </svg:g>\n <svg:g *ngFor=\"let tick of ticks.small\" class=\"gauge-tick gauge-tick-small\">\n <svg:path [attr.d]=\"tick.line\" />\n </svg:g>\n </svg:g>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class GaugeAxisComponent implements OnChanges {\n @Input() bigSegments: number;\n @Input() smallSegments: number;\n @Input() min: number;\n @Input() max: number;\n @Input() angleSpan: number;\n @Input() startAngle: number;\n @Input() radius: number;\n @Input() valueScale: any;\n @Input() tickFormatting: any;\n\n ticks: Ticks;\n rotationAngle: number;\n rotate: string = '';\n\n ngOnChanges(changes: SimpleChanges) {\n this.update();\n }\n\n update(): void {\n this.rotationAngle = -90 + this.startAngle;\n this.rotate = `rotate(${this.rotationAngle})`;\n this.ticks = this.getTicks();\n }\n\n getTicks(): Ticks {\n const bigTickSegment = this.angleSpan / this.bigSegments;\n const smallTickSegment = bigTickSegment / this.smallSegments;\n const tickLength = 20;\n const ticks = {\n big: [],\n small: []\n };\n\n const startDistance = this.radius + 10;\n const textDist = startDistance + tickLength + 10;\n\n for (let i = 0; i <= this.bigSegments; i++) {\n const angleDeg = i * bigTickSegment;\n const angle = (angleDeg * Math.PI) / 180;\n\n const textAnchor = this.getTextAnchor(angleDeg);\n\n let skip = false;\n if (i === 0 && this.angleSpan === 360) {\n skip = true;\n }\n\n if (!skip) {\n let text = Number.parseFloat(this.valueScale.invert(angleDeg).toString()).toLocaleString();\n if (this.tickFormatting) {\n text = this.tickFormatting(text);\n }\n ticks.big.push({\n line: this.getTickPath(startDistance, tickLength, angle),\n textAnchor,\n text,\n textTransform: `\n translate(${textDist * Math.cos(angle)}, ${textDist * Math.sin(angle)}) rotate(${-this.rotationAngle})\n `\n });\n }\n\n if (i === this.bigSegments) {\n continue;\n }\n\n for (let j = 1; j <= this.smallSegments; j++) {\n const smallAngleDeg = angleDeg + j * smallTickSegment;\n const smallAngle = (smallAngleDeg * Math.PI) / 180;\n\n ticks.small.push({\n line: this.getTickPath(startDistance, tickLength / 2, smallAngle)\n });\n }\n }\n\n return ticks;\n }\n\n getTextAnchor(angle: number): TextAnchor {\n // [0, 45] = 'middle';\n // [46, 135] = 'start';\n // [136, 225] = 'middle';\n // [226, 315] = 'end';\n\n angle = (this.startAngle + angle) % 360;\n let textAnchor = TextAnchor.Middle;\n if (angle > 45 && angle <= 135) {\n textAnchor = TextAnchor.Start;\n } else if (angle > 225 && angle <= 315) {\n textAnchor = TextAnchor.End;\n }\n return textAnchor;\n }\n\n getTickPath(startDistance: number, tickLength: number, angle: number): any {\n const y1 = startDistance * Math.sin(angle);\n const y2 = (startDistance + tickLength) * Math.sin(angle);\n const x1 = startDistance * Math.cos(angle);\n const x2 = (startDistance + tickLength) * Math.cos(angle);\n\n const points = [\n { x: x1, y: y1 },\n { x: x2, y: y2 }\n ];\n const lineGenerator = line<any>()\n .x(d => d.x)\n .y(d => d.y);\n return lineGenerator(points);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { ChartCommonModule } from '../common/chart-common.module';\nimport { LinearGaugeComponent } from './linear-gauge.component';\nimport { GaugeComponent } from './gauge.component';\nimport { GaugeArcComponent } from './gauge-arc.component';\nimport { GaugeAxisComponent } from './gauge-axis.component';\nimport { PieChartModule } from '../pie-chart/pie-chart.module';\nimport { BarChartModule } from '../bar-chart/bar-chart.module';\n\n@NgModule({\n imports: [ChartCommonModule, PieChartModule, BarChartModule],\n declarations: [LinearGaugeComponent, GaugeComponent, GaugeArcComponent, GaugeAxisComponent],\n exports: [LinearGaugeComponent, GaugeComponent, GaugeArcComponent, GaugeAxisComponent]\n})\nexport class GaugeModule {}\n","// The export is needed here to generate a valid polyfills.metadata.json file\nexport function ngxChartsPolyfills() {\n // IE11 fix\n // Ref: https://github.com/swimlane/ngx-charts/issues/386\n if (typeof SVGElement !== 'undefined' && typeof SVGElement.prototype.contains === 'undefined') {\n SVGElement.prototype.contains = HTMLDivElement.prototype.contains;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { ChartCommonModule } from './common/chart-common.module';\nimport { AreaChartModule } from './area-chart/area-chart.module';\nimport { BarChartModule } from './bar-chart/bar-chart.module';\nimport { BubbleChartModule } from './bubble-chart/bubble-chart.module';\nimport { HeatMapModule } from './heat-map/heat-map.module';\nimport { LineChartModule } from './line-chart/line-chart.module';\nimport { PolarChartModule } from './polar-chart/polar-chart.module';\nimport { NumberCardModule } from './number-card/number-card.module';\nimport { PieChartModule } from './pie-chart/pie-chart.module';\nimport { TreeMapModule } from './tree-map/tree-map.module';\nimport { GaugeModule } from './gauge/gauge.module';\nimport { ngxChartsPolyfills } from './polyfills';\n\n@NgModule({\n exports: [\n ChartCommonModule,\n AreaChartModule,\n BarChartModule,\n BubbleChartModule,\n HeatMapModule,\n LineChartModule,\n PolarChartModule,\n NumberCardModule,\n PieChartModule,\n TreeMapModule,\n GaugeModule\n ]\n})\nexport class NgxChartsModule {\n constructor() {\n ngxChartsPolyfills();\n }\n}\n","import { timeFormat } from 'd3-time-format';\n\nexport function tickFormat(fieldType, groupByType): (label: string) => string {\n return function (label: string): string {\n if (label === 'No Value' || label === 'Other') {\n return label;\n }\n if (fieldType === 'date' && groupByType === 'groupBy') {\n const formatter = timeFormat('MM/DD/YYYY');\n return formatter(<any>label);\n }\n\n return label.toString();\n };\n}\n","/*\n * Public API Surface of ngx-charts\n */\n\nexport * from './lib/ngx-charts.module';\n\nexport * from './lib/area-chart/area-chart.module';\nexport * from './lib/area-chart/area-chart.component';\nexport * from './lib/area-chart/area-chart-normalized.component';\nexport * from './lib/area-chart/area-chart-stacked.component';\nexport * from './lib/area-chart/area-series.component';\n\nexport * from './lib/bar-chart/bar-chart.module';\nexport * from './lib/bar-chart/bar.component';\nexport * from './lib/bar-chart/bar-horizontal.component';\nexport * from './lib/bar-chart/bar-horizontal-2d.component';\nexport * from './lib/bar-chart/bar-horizontal-normalized.component';\nexport * from './lib/bar-chart/bar-horizontal-stacked.component';\nexport * from './lib/bar-chart/series-horizontal.component';\nexport * from './lib/bar-chart/bar-label.component';\nexport * from './lib/bar-chart/bar-vertical.component';\nexport * from './lib/bar-chart/bar-vertical-2d.component';\nexport * from './lib/bar-chart/bar-vertical-normalized.component';\nexport * from './lib/bar-chart/bar-vertical-stacked.component';\nexport * from './lib/bar-chart/series-vertical.component';\nexport * from './lib/bar-chart/types/bar.model';\nexport * from './lib/bar-chart/types/bar-chart-type.enum';\nexport * from './lib/bar-chart/types/d0-type.enum';\n\nexport * from './lib/bubble-chart/bubble-chart.module';\nexport * from './lib/bubble-chart/bubble-chart.component';\nexport * from './lib/bubble-chart/bubble-chart.utils';\nexport * from './lib/bubble-chart/bubble-series.component';\n\nexport * from './lib/common/chart-common.module';\nexport * from './lib/common/legend/legend.component';\nexport * from './lib/common/legend/scale-legend.component';\nexport * from './lib/common/legend/legend-entry.component';\nexport * from './lib/common/legend/advanced-legend.component';\n\nexport * from './lib/common/tooltip/tooltip.module';\nexport * from './lib/common/tooltip/tooltip.service';\nexport * from './lib/common/tooltip/tooltip.component';\nexport * from './lib/common/tooltip/tooltip.directive';\nexport * from './lib/common/tooltip/style.type';\nexport * from './lib/common/tooltip/show.type';\nexport * from './lib/common/tooltip/position/placement.type';\n\nexport * from './lib/common/types';\n\nexport * from './lib/common/axes/axes.module';\nexport * from './lib/common/axes/axis-label.component';\nexport * from './lib/common/axes/x-axis.component';\nexport * from './lib/common/axes/x-axis-ticks.component';\nexport * from './lib/common/axes/y-axis.component';\nexport * from './lib/common/axes/y-axis-ticks.component';\nexport * from './lib/common/axes/ticks.helper';\n\nexport * from './lib/common/count/count.directive';\nexport * from './lib/common/count/count.helper';\nexport * from './lib/common/timeline/timeline.component';\nexport * from './lib/common/color.helper';\nexport * from './lib/common/charts/chart.component';\n\nexport * from './lib/common/area.component';\nexport * from './lib/common/base-chart.component';\nexport * from './lib/common/circle.component';\nexport * from './lib/common/circle-series.component';\nexport * from './lib/common/grid-layout.helper';\nexport * from './lib/common/grid-panel.component';\nexport * from './lib/common/grid-panel-series.component';\nexport * from './lib/common/svg-linear-gradient.component';\nexport * from './lib/common/svg-radial-gradient.component';\nexport * from './lib/common/tooltip-area.component';\nexport * from './lib/common/tick-format.helper';\nexport * from './lib/common/trim-label.helper';\nexport * from './lib/common/view-dimensions.helper';\nexport * from './lib/common/label.helper';\nexport * from './lib/common/domain.helper';\n\nexport * from './lib/gauge/gauge.module';\nexport * from './lib/gauge/gauge-arc.component';\nexport * from './lib/gauge/gauge-axis.component';\nexport * from './lib/gauge/gauge.component';\nexport * from './lib/gauge/linear-gauge.component';\n\nexport * from './lib/heat-map/heat-map.module';\nexport * from './lib/heat-map/heat-map.component';\nexport * from './lib/heat-map/heat-map-cell.component';\nexport * from './lib/heat-map/heat-map-cell-series.component';\n\nexport * from './lib/line-chart/line-chart.module';\nexport * from './lib/line-chart/line-chart.component';\nexport * from './lib/line-chart/line.component';\nexport * from './lib/line-chart/line-series.component';\n\nexport * from './lib/models/chart-data.model';\n\nexport * from './lib/number-card/number-card.module';\nexport * from './lib/number-card/number-card.component';\nexport * from './lib/number-card/card.component';\nexport * from './lib/number-card/card-series.component';\n\nexport * from './lib/pie-chart/pie-chart.module';\nexport * from './lib/pie-chart/advanced-pie-chart.component';\nexport * from './lib/pie-chart/pie-chart.component';\nexport * from './lib/pie-chart/pie-arc.component';\nexport * from './lib/pie-chart/pie-grid.component';\nexport * from './lib/pie-chart/pie-grid-series.component';\nexport * from './lib/pie-chart/pie-series.component';\nexport * from './lib/pie-chart/pie-label.component';\n\nexport * from './lib/polar-chart/polar-chart.module';\nexport * from './lib/polar-chart/polar-chart.component';\nexport * from './lib/polar-chart/polar-series.component';\n\nexport * from './lib/tree-map/tree-map.module';\nexport * from './lib/tree-map/tree-map.component';\nexport * from './lib/tree-map/tree-map-cell.component';\nexport * from './lib/tree-map/tree-map-cell-series.component';\n\nexport * from './lib/utils/id';\nexport * from './lib/utils/color-sets';\nexport * from './lib/utils/sort';\nexport * from './lib/utils/throttle';\nexport * from './lib/utils/color-utils';\nexport * from './lib/utils/visibility-observer';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n\nexport {InjectionRegisteryService as ɵa} from './lib/common/tooltip/injection-registery.service';\nexport {InjectionService as ɵb} from './lib/common/tooltip/injection.service';\nexport {ScaleType as ɵc} from './lib/common/types';"],"names":["observableFromEvent","Orientation","d3_color.rgb"],"mappings":"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AAC,EAAE,CAAC;IACJ,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,GAAG,EAAE,CAAC;IACN,GAAG,EAAE,EAAE;IACP,GAAG,EAAE,EAAE;IACP,CAAC,EAAE,EAAE;IACL,GAAG,EAAE,EAAE;IACP,GAAG,EAAE,EAAE;IACP,GAAG,EAAE,EAAE;IACP,GAAG,EAAE,EAAE;IACP,GAAG,EAAE,CAAC;IACN,GAAG,EAAE,CAAC;IACN,CAAC,EAAE,EAAE;IACL,GAAG,EAAE,CAAC;IACN,GAAG,EAAE,EAAE;IACP,GAAG,EAAE,EAAE;IACP,GAAG,EAAE,CAAC;IACN,GAAG,EAAE,CAAC;IACN,GAAG,EAAE,CAAC;IACN,GAAG,EAAE,CAAC;IACN,GAAG,EAAE,CAAC;IACN,G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"}
\No newline at end of file