highcharts-angular
Version:
Highcharts component for Angular.
1 lines • 16.1 kB
Source Map (JSON)
{"version":3,"file":"highcharts-angular.mjs","sources":["../../../highcharts-angular/src/lib/highcharts-chart.token.ts","../../../highcharts-angular/src/lib/highcharts-chart.service.ts","../../../highcharts-angular/src/lib/highcharts-chart.directive.ts","../../../highcharts-angular/src/lib/highcharts-chart.component.ts","../../../highcharts-angular/src/lib/highcharts-chart.provider.ts","../../../highcharts-angular/src/public_api.ts","../../../highcharts-angular/src/highcharts-angular.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { InstanceFactoryFunction, ModuleFactoryFunction, PartialHighchartsConfig } from './types';\nimport type Highcharts from 'highcharts/esm/highcharts';\n\nexport const HIGHCHARTS_LOADER = new InjectionToken<InstanceFactoryFunction>('HIGHCHARTS_LOADER');\nexport const HIGHCHARTS_ROOT_MODULES = new InjectionToken<ModuleFactoryFunction>('HIGHCHARTS_ROOT_MODULES');\nexport const HIGHCHARTS_OPTIONS = new InjectionToken<Highcharts.Options>('HIGHCHARTS_OPTIONS');\nexport const HIGHCHARTS_CONFIG = new InjectionToken<PartialHighchartsConfig>('HIGHCHARTS_CONFIG');\nexport const HIGHCHARTS_TIMEOUT = new InjectionToken<number>('HIGHCHARTS_TIMEOUT');\n","import { inject, Injectable, signal } from '@angular/core';\nimport { HIGHCHARTS_ROOT_MODULES, HIGHCHARTS_LOADER, HIGHCHARTS_OPTIONS } from './highcharts-chart.token';\nimport { PartialHighchartsConfig } from './types';\nimport type Highcharts from 'highcharts/esm/highcharts';\n\n@Injectable({ providedIn: 'root' })\nexport class HighchartsChartService {\n public readonly highcharts = signal<typeof Highcharts | null>(null);\n\n private readonly loader = inject(HIGHCHARTS_LOADER);\n private readonly globalOptions = inject(HIGHCHARTS_OPTIONS, {\n optional: true,\n });\n private readonly globalModules = inject(HIGHCHARTS_ROOT_MODULES, {\n optional: true,\n });\n\n private async loadHighchartsWithModules(partialConfig: PartialHighchartsConfig | null): Promise<typeof Highcharts> {\n const highcharts = await this.loader(); // Ensure Highcharts core is loaded\n\n await Promise.allSettled([...(this.globalModules?.() ?? []), ...(partialConfig?.modules?.() ?? [])]);\n\n // Return the Highcharts instance\n return highcharts;\n }\n\n public load(partialConfig: PartialHighchartsConfig | null): void {\n this.loadHighchartsWithModules(partialConfig).then(highcharts => {\n if (this.globalOptions) {\n highcharts.setOptions(this.globalOptions);\n }\n this.highcharts.set(highcharts);\n });\n }\n}\n","import {\n afterRenderEffect,\n computed,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n model,\n output,\n PLATFORM_ID,\n untracked,\n} from '@angular/core';\nimport { isPlatformServer } from '@angular/common';\nimport { HighchartsChartService } from './highcharts-chart.service';\nimport { HIGHCHARTS_CONFIG, HIGHCHARTS_TIMEOUT } from './highcharts-chart.token';\nimport { ChartConstructorType, ConstructorChart } from './types';\nimport type Highcharts from 'highcharts/esm/highcharts';\n\n@Directive({\n selector: '[highchartsChart]',\n})\nexport class HighchartsChartDirective {\n /**\n * Type of the chart constructor.\n */\n public readonly constructorType = input<ChartConstructorType>('chart');\n\n /**\n * When enabled, Updates `series`, `xAxis`, `yAxis`, and `annotations` to match new options.\n * Items are added/removed as needed. Series with `id`s are matched by `id`;\n * unmatched items are removed. Omitted `series` leaves existing ones unchanged.\n */\n public readonly oneToOne = input<boolean>(false);\n\n /**\n * Options for the Highcharts chart.\n */\n public readonly options = input.required<Highcharts.Options>();\n\n /**\n * Whether to redraw the chart.\n * Check how update works in Highcharts\n * API doc here: https://api.highcharts.com/class-reference/Highcharts.Chart#update\n */\n public readonly update = model<boolean>();\n\n public readonly chartInstance = output<Highcharts.Chart>(); // #26\n\n private readonly destroyRef = inject(DestroyRef);\n\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n private readonly platformId = inject(PLATFORM_ID);\n\n private readonly relativeConfig = inject(HIGHCHARTS_CONFIG, {\n optional: true,\n });\n\n private readonly timeout = inject(HIGHCHARTS_TIMEOUT, {\n optional: true,\n });\n\n private readonly highchartsChartService = inject(HighchartsChartService);\n\n private chartCreated = false;\n\n private readonly constructorChart = computed<ConstructorChart | undefined>(() => {\n const highCharts = this.highchartsChartService.highcharts();\n if (highCharts) {\n return (highCharts as any)[this.constructorType()];\n }\n return undefined;\n });\n\n private delay(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n }\n\n // Create the chart as soon as we can\n private readonly chart = computed(async () => {\n await this.delay(this.relativeConfig?.timeout ?? this.timeout ?? 500);\n return this.constructorChart()?.(\n this.el.nativeElement,\n // Use untracked, so we don't re-create new chart everytime options change\n untracked(() => this.options()),\n // Use Highcharts callback to emit chart instance, so it is available as early\n // as possible. So that Angular is already aware of the instance if Highcharts raise\n // events during the initialization that happens before coming back to Angular\n createdChart => this.chartInstance.emit(createdChart),\n );\n });\n\n private keepChartUpToDate(): void {\n effect(async () => {\n // Wait for the chart to be created\n this.update();\n\n const chart = await this.chart();\n\n if (!this.chartCreated) {\n if (chart) {\n this.chartCreated = true;\n }\n } else {\n chart?.update(this.options(), true, this.oneToOne());\n }\n });\n }\n\n private async destroyChart(): Promise<void> {\n const chart = await this.chart();\n if (chart) {\n // #56\n chart.destroy();\n }\n }\n\n public constructor() {\n // should stop loading on the server side for SSR\n if (this.platformId && isPlatformServer(this.platformId)) {\n return;\n }\n // make sure to load global config + modules on demand\n this.highchartsChartService.load(this.relativeConfig);\n this.destroyRef.onDestroy(() => this.destroyChart()); // #44\n afterRenderEffect(() => {\n if (this.update()) {\n this.update.set(false); // clear the flag after update\n }\n });\n\n // Keep the chart up to date whenever options change or the update special input is set to true\n this.keepChartUpToDate();\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { HighchartsChartDirective } from './highcharts-chart.directive';\n\n@Component({\n selector: 'highcharts-chart',\n template: '',\n hostDirectives: [\n {\n directive: HighchartsChartDirective,\n inputs: ['constructorType', 'oneToOne', 'options', 'update'],\n outputs: ['chartInstance', 'updateChange'],\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HighchartsChartComponent {}\n","import { EnvironmentProviders, makeEnvironmentProviders, Provider } from '@angular/core';\nimport {\n HIGHCHARTS_LOADER,\n HIGHCHARTS_CONFIG,\n HIGHCHARTS_ROOT_MODULES,\n HIGHCHARTS_OPTIONS,\n HIGHCHARTS_TIMEOUT,\n} from './highcharts-chart.token';\nimport { ModuleFactoryFunction, HighchartsConfig, PartialHighchartsConfig, InstanceFactoryFunction } from './types';\nimport type Highcharts from 'highcharts/esm/highcharts';\n\nconst emptyModuleFactoryFunction: ModuleFactoryFunction = () => [];\nconst defaultInstanceFactoryFunction: InstanceFactoryFunction = () =>\n import('highcharts/esm/highcharts').then(m => m.default);\n\nfunction provideHighchartsInstance(instance: InstanceFactoryFunction | undefined): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: HIGHCHARTS_LOADER,\n useValue: instance ?? defaultInstanceFactoryFunction,\n },\n ]);\n}\n\nfunction provideHighchartsOptions(options: Highcharts.Options): EnvironmentProviders {\n return makeEnvironmentProviders([{ provide: HIGHCHARTS_OPTIONS, useValue: options }]);\n}\n\nfunction provideHighchartsRootModules(modules: ModuleFactoryFunction): EnvironmentProviders {\n return makeEnvironmentProviders([{ provide: HIGHCHARTS_ROOT_MODULES, useValue: modules }]);\n}\n\nexport function providePartialHighcharts(config: PartialHighchartsConfig): Provider {\n return { provide: HIGHCHARTS_CONFIG, useValue: config };\n}\n\nexport function provideHighcharts(config: HighchartsConfig = {}): EnvironmentProviders {\n const providers: (Provider | EnvironmentProviders)[] = [\n provideHighchartsInstance(config.instance),\n provideHighchartsRootModules(config.modules ?? emptyModuleFactoryFunction),\n { provide: HIGHCHARTS_TIMEOUT, useValue: config.timeout },\n ];\n if (config.options) {\n providers.push(provideHighchartsOptions(config.options));\n }\n return makeEnvironmentProviders(providers);\n}\n","/*\n * Public API Surface of highcharts-angular\n */\n\nexport { HighchartsChartComponent } from './lib/highcharts-chart.component';\nexport { HighchartsChartDirective } from './lib/highcharts-chart.directive';\nexport { provideHighcharts, providePartialHighcharts } from './lib/highcharts-chart.provider';\nexport { HighchartsConfig, PartialHighchartsConfig, ChartConstructorType } from './lib/types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}